html_builder
                                
                                 html_builder copied to clipboard
                                
                                    html_builder copied to clipboard
                            
                            
                            
                        DSL for creating HTML
html_builder 
DSL for creating HTML programatically (extracted from Crystal's standard library).
Installation
Add this to your application's shard.yml:
dependencies:
  html_builder:
    github: crystal-lang/html_builder
Usage
Basic usage
require "html_builder"
html = HTML.build do
  a(href: "http://crystal-lang.org") do
    text "crystal is awesome"
  end
end
puts html
Output (this output is formatted for better display):
<a href="http://crystal-lang.org">
  crystal is awesome
</a>
Full HTML5 page
html = HTML.build do
  doctype
  html(lang: "pt-BR") do
    head do
      title { text "Crystal Programming Language" }
      meta(charset: "UTF-8")
    end
    body do
      a(href: "http://crystal-lang.org") { text "Crystal rocks!" }
      form(method: "POST") do
        input(name: "name")
      end
    end
  end
end
puts html
Output :
<!DOCTYPE html>
<html lang="pt-BR">
  <head>
    <title>Crystal Programming Language</title>
    <meta charset="UTF-8">
  </head>
  <body>
    <a href="http://crystal-lang.org">Crystal rocks!</a>
    <form method="POST">
      <input name="name">
    </form>
  </body>
</html>
Custom tags
html = HTML.build do
  tag("v-button", to: "home") { text "Home" }
end
puts html
Output:
<v-button to="home">
  Home
</v-button>
Safety
HTML::Builder escapes attribute values:
html = HTML.build do
  a(href: "<>") { }
end
puts html
Output:
<a href="<>"></a>
And escapes text:
html = HTML.build do
  a { text "<>" }
end
puts html
Output:
<a><></a>
Contributing
- Fork it ( https://github.com/crystal-lang/html_builder/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request