SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
Haml
http://haml.hamptoncatlin.com/
What is Haml?

• A markup language
• An alternative to erb / RHTML for Rails +
  Merb
• rubygem or rails plugin
Haml has principles

           • Markup should be beautiful
           • Markup should be DRY
           • Markup should be well-indented
           • XHTML structure should be clear


Beautiful - READABLE!
DRY - in XHTML elements are named twice, ERB adds even more repetition. HAML relies on
indentation to determine where elements and blocks of code begin and end-> smaller templates +
cleaner code
well indented - ERB doesn’t encourage well-indented code. Haml indents properly all the time
XHTML structure should be clear - guaranteed by the first 3
Syntax


                  %tag content                   <tag>content</tag>




The percent character is placed at the beginning of a line. It’s followed immediately by the name of
an element, then the text to be rendered inside the element
Syntax

                                          <h1>Haml should be</h1>
  %h1 Haml should be
                                          <ul>
  %ul
                                            <li>Beautiful</li>
    %li Beautiful
                                            <li>DRY</li>
    %li DRY
                                            <li>Well-indented</li>
    %li Well-indented
                                          </ul>




nesting is achieved through indentation
Attributes

                                                      <p class='bio'>
 %p{:class => quot;bioquot;}
                                                        This paragraph has class
   This paragraph has class
                                                      </p>
                                                      <p id='bio'>
 %p{:id => quot;bioquot;}
                                                        This paragraph has identity
   This paragraph has identity
                                                      </p>




A Ruby hash is used for specifying the attributes of an element. It is literally evaluated as a Ruby
hash, so logic will work in it and local variables may be used
A Ruby method call that returns a hash can be substituted for the hash contents
multiple hashes, separated by commas can be used
class and id shortcuts

                                 <p class='bio'>
 %p.bio
                                   This paragraph has class
   This paragraph has class
                                 </p>
                                 <p id='bio'>
 %p#bio
                                   This paragraph has identity
   This paragraph has identity
                                 </p>




borrowed from CSS
Implicit <div>

                                                          <div class='class'>
                                                            <div id='id'>
    .class                                                    <p>
      #id                                                        I'm wrapped in two divs
        %p                                                    </p>
           I'm wrapped in two divs                          </div>
                                                          </div>




If you only define a class and/or id using the . or # syntax, a div element is automatically used
Haml -vs- HTML
!!!                                         <!DOCTYPE html PUBLIC quot;-//W3C//DTD XHTML 1.0
%html{ html_attrs }                         Transitional//ENquot; quot;http://www.w3.org/TR/
  %head                                     xhtml1/DTD/xhtml1-transitional.dtdquot;>
    %title Haml syntax demo                 <html lang='en-US' xml:lang='en-US'
  %body                                     xmlns='http://www.w3.org/1999/xhtml'>
    #content                                  <head>
      %h1 Haml should be:                       <title>Haml syntax demo</title>
      %ul.principles                          </head>
        %li Beautiful                         <body>
        %li DRY                                 <div id='content'>
        %li Well-indented                         <h1>Haml should be:</h1>
        %li Clearly XHTML                         <ul class='principles'>
    #footer                                          <li>Beautiful</li>
      %span.author Ciaran                            <li>DRY</li>
                                                     <li>Well-indented</li>
                                                     <li>Clearly XHTML</li>
                                                  </ul>
                                                </div>
                                                <div id='footer'>
                                                  <span class='author'>Ciaran</span>
                                                </div>
                                              </body>
                                            </html>

!!! generates doctype
!!! XML generates XML prolog
html_attrs is a Haml Helper, Returns a hash containing default assignments for the xmlns and
xml:lang attributes of the html HTML element
Ruby evaluators
          - for article in @articles
            .post
              .date
                %h3= h article.publication_date.strftime(quot;%d %m %Yquot;)
              .article
                %h3= link_to(h(article.title), article)
                ~article.body




= is followed by Ruby code, which is evaluated and the output inserted into the document as plain
text
- hyphen character makes the text following it into quot;silent scriptquot;: Ruby script that is evaluated, but
not output
for loop (+ all Ruby blocks) are automatically closed, based on indentation
~ acts like = except that it preserves the whitespace
Haml in rails projects




rails 2.0 uses $view.html.erb , for haml views just replace erb with haml
Resources


• http://haml.hamptoncatlin.com
• http://lab.hamptoncatlin.com/play/with/haml
SASS


• Syntactically Awesome StyleSheets
• comes with haml
SASS syntax

       #main p
                                                              #main p {
         :color #00ff00
                                                                color: #00ff00;
         :width 97%
                                                                width: 97%; }
                                                                #main p .redbox {
         .redbox
                                                                  background-color: #ff0000;
           :background-color #ff0000
                                                                  color: #000000; }
           :color #000000




Rules can also be nested within each other. This signifies that the inner rule’s selector is a child of
the outer selector
SASS Constants

  !main_color = #00ff00
                                                      #main {
  #main                                                 color: #00ff00; }
    :color = !main_color                                #main p {
    :p                                                    background-color: #00ff00;
       :background-color = !main_color                    color: #000000; }
       :color #000000




support for setting document-wide constants. They‘re set using an exclamation mark followed by
the name, an equals sign, and the value
make_resourceful


           • rails plugin
           • DRYs up controller code
           • http://railscasts.com/episodes/92


Show some code, it’s cool, but depending on how much customisation you do it might be better to
use the standard RESTful controller

Weitere ähnliche Inhalte

Ähnlich wie Haml

CSS Layout Tutorial
CSS Layout TutorialCSS Layout Tutorial
CSS Layout Tutorial
hstryk
 
How to create a basic template
How to create a basic templateHow to create a basic template
How to create a basic template
vathur
 
Presentation.Key
Presentation.KeyPresentation.Key
Presentation.Key
guesta2b31d
 
Prototyping With Haml & Sass
Prototyping With Haml & SassPrototyping With Haml & Sass
Prototyping With Haml & Sass
amwatts
 
Html xhtml tag-sheet
Html xhtml tag-sheetHtml xhtml tag-sheet
Html xhtml tag-sheet
wihrbt
 
Lesson 3
Lesson 3Lesson 3
Lesson 3
hstryk
 
Documenting from the Trenches
Documenting from the TrenchesDocumenting from the Trenches
Documenting from the Trenches
Xavier Noria
 

Ähnlich wie Haml (20)

Introdução a CSS
Introdução a CSS Introdução a CSS
Introdução a CSS
 
Hows Haml?
Hows Haml?Hows Haml?
Hows Haml?
 
CSS Layout Tutorial
CSS Layout TutorialCSS Layout Tutorial
CSS Layout Tutorial
 
How to create a basic template
How to create a basic templateHow to create a basic template
How to create a basic template
 
Php
PhpPhp
Php
 
DRYing Up Rails Views and Controllers
DRYing Up Rails Views and ControllersDRYing Up Rails Views and Controllers
DRYing Up Rails Views and Controllers
 
Haml. New HTML? (RU)
Haml. New HTML? (RU)Haml. New HTML? (RU)
Haml. New HTML? (RU)
 
Building the basics (WordPress Ottawa 2014)
Building the basics (WordPress Ottawa 2014)Building the basics (WordPress Ottawa 2014)
Building the basics (WordPress Ottawa 2014)
 
Presentation.Key
Presentation.KeyPresentation.Key
Presentation.Key
 
Prototyping With Haml & Sass
Prototyping With Haml & SassPrototyping With Haml & Sass
Prototyping With Haml & Sass
 
Haml in 5 minutes
Haml in 5 minutesHaml in 5 minutes
Haml in 5 minutes
 
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehrBeyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
 
Grok Drupal (7) Theming - 2011 Feb update
Grok Drupal (7) Theming - 2011 Feb updateGrok Drupal (7) Theming - 2011 Feb update
Grok Drupal (7) Theming - 2011 Feb update
 
Html xhtml tag-sheet
Html xhtml tag-sheetHtml xhtml tag-sheet
Html xhtml tag-sheet
 
Lesson 3
Lesson 3Lesson 3
Lesson 3
 
Css
CssCss
Css
 
Css
CssCss
Css
 
Html / CSS Presentation
Html / CSS PresentationHtml / CSS Presentation
Html / CSS Presentation
 
Documenting from the Trenches
Documenting from the TrenchesDocumenting from the Trenches
Documenting from the Trenches
 
Web Typography
Web TypographyWeb Typography
Web Typography
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Haml

  • 2. What is Haml? • A markup language • An alternative to erb / RHTML for Rails + Merb • rubygem or rails plugin
  • 3. Haml has principles • Markup should be beautiful • Markup should be DRY • Markup should be well-indented • XHTML structure should be clear Beautiful - READABLE! DRY - in XHTML elements are named twice, ERB adds even more repetition. HAML relies on indentation to determine where elements and blocks of code begin and end-> smaller templates + cleaner code well indented - ERB doesn’t encourage well-indented code. Haml indents properly all the time XHTML structure should be clear - guaranteed by the first 3
  • 4. Syntax %tag content <tag>content</tag> The percent character is placed at the beginning of a line. It’s followed immediately by the name of an element, then the text to be rendered inside the element
  • 5. Syntax <h1>Haml should be</h1> %h1 Haml should be <ul> %ul <li>Beautiful</li> %li Beautiful <li>DRY</li> %li DRY <li>Well-indented</li> %li Well-indented </ul> nesting is achieved through indentation
  • 6. Attributes <p class='bio'> %p{:class => quot;bioquot;} This paragraph has class This paragraph has class </p> <p id='bio'> %p{:id => quot;bioquot;} This paragraph has identity This paragraph has identity </p> A Ruby hash is used for specifying the attributes of an element. It is literally evaluated as a Ruby hash, so logic will work in it and local variables may be used A Ruby method call that returns a hash can be substituted for the hash contents multiple hashes, separated by commas can be used
  • 7. class and id shortcuts <p class='bio'> %p.bio This paragraph has class This paragraph has class </p> <p id='bio'> %p#bio This paragraph has identity This paragraph has identity </p> borrowed from CSS
  • 8. Implicit <div> <div class='class'> <div id='id'> .class <p> #id I'm wrapped in two divs %p </p> I'm wrapped in two divs </div> </div> If you only define a class and/or id using the . or # syntax, a div element is automatically used
  • 9. Haml -vs- HTML !!! <!DOCTYPE html PUBLIC quot;-//W3C//DTD XHTML 1.0 %html{ html_attrs } Transitional//ENquot; quot;http://www.w3.org/TR/ %head xhtml1/DTD/xhtml1-transitional.dtdquot;> %title Haml syntax demo <html lang='en-US' xml:lang='en-US' %body xmlns='http://www.w3.org/1999/xhtml'> #content <head> %h1 Haml should be: <title>Haml syntax demo</title> %ul.principles </head> %li Beautiful <body> %li DRY <div id='content'> %li Well-indented <h1>Haml should be:</h1> %li Clearly XHTML <ul class='principles'> #footer <li>Beautiful</li> %span.author Ciaran <li>DRY</li> <li>Well-indented</li> <li>Clearly XHTML</li> </ul> </div> <div id='footer'> <span class='author'>Ciaran</span> </div> </body> </html> !!! generates doctype !!! XML generates XML prolog html_attrs is a Haml Helper, Returns a hash containing default assignments for the xmlns and xml:lang attributes of the html HTML element
  • 10. Ruby evaluators - for article in @articles .post .date %h3= h article.publication_date.strftime(quot;%d %m %Yquot;) .article %h3= link_to(h(article.title), article) ~article.body = is followed by Ruby code, which is evaluated and the output inserted into the document as plain text - hyphen character makes the text following it into quot;silent scriptquot;: Ruby script that is evaluated, but not output for loop (+ all Ruby blocks) are automatically closed, based on indentation ~ acts like = except that it preserves the whitespace
  • 11. Haml in rails projects rails 2.0 uses $view.html.erb , for haml views just replace erb with haml
  • 13. SASS • Syntactically Awesome StyleSheets • comes with haml
  • 14. SASS syntax #main p #main p { :color #00ff00 color: #00ff00; :width 97% width: 97%; } #main p .redbox { .redbox background-color: #ff0000; :background-color #ff0000 color: #000000; } :color #000000 Rules can also be nested within each other. This signifies that the inner rule’s selector is a child of the outer selector
  • 15. SASS Constants !main_color = #00ff00 #main { #main color: #00ff00; } :color = !main_color #main p { :p background-color: #00ff00; :background-color = !main_color color: #000000; } :color #000000 support for setting document-wide constants. They‘re set using an exclamation mark followed by the name, an equals sign, and the value
  • 16. make_resourceful • rails plugin • DRYs up controller code • http://railscasts.com/episodes/92 Show some code, it’s cool, but depending on how much customisation you do it might be better to use the standard RESTful controller