Відмінності між версіями «Haml»

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][очікує на перевірку]
(Виправлено джерел: 3; позначено як недійсні: 0. #IABot (v2.0beta10ehf1))
м (заміна застарілого тегу source)
 
(Не показані 7 проміжних версій 4 користувачів)
Рядок 46: Рядок 46:
   
 
==== Haml as a [[Інтерфейс командного рядка|Command-line tool]] ====
 
==== Haml as a [[Інтерфейс командного рядка|Command-line tool]] ====
<source lang="haml">
+
<syntaxhighlight lang="haml">
 
%p{:class => "sample", :id => "welcome"} Hello, World!
 
%p{:class => "sample", :id => "welcome"} Hello, World!
</source>Що буде екпортовано в наступний [[HTML]]:<source lang="html">
+
</syntaxhighlight>Що буде екпортовано в наступний [[HTML]]:<syntaxhighlight lang="html">
 
<p class="sample" id="welcome">Hello, World!</p>
 
<p class="sample" id="welcome">Hello, World!</p>
</source>Щоб запустити код Haml, потрібно інсталювати <code>Haml</code> за допомогою gem:<ref name="Using Haml">{{Cite web|url=http://haml.info/docs/yardoc/file.REFERENCE.html#using_haml|title=Using Haml|accessdate=7 February 2016}}</ref>
+
</syntaxhighlight>Щоб запустити код Haml, потрібно інсталювати <code>Haml</code> за допомогою gem:<ref name="Using Haml">{{Cite web|url=http://haml.info/docs/yardoc/file.REFERENCE.html#using_haml|title=Using Haml|accessdate=7 February 2016}}</ref>
 
gem install haml
 
gem install haml
 
Код Haml, що збережений у файл <code>Hello.haml</code>, можна запустити наступним чином:
 
Код Haml, що збережений у файл <code>Hello.haml</code>, можна запустити наступним чином:
 
haml Hello.haml
 
haml Hello.haml
   
==== Haml у вигляді аддона для [[Ruby on Rails]] ====
+
==== Haml у вигляді джема для [[Ruby on Rails]] ====
Щоб використовувати Haml з [[Ruby]], файл <code>Gemfile</code> має включати наступну строку:
+
Щоб використовувати Haml з [[Ruby]], файл <code>Gemfile</code> має включати наступний рядок:
 
gem 'haml'
 
gem 'haml'
 
Аналогічно до мови ERB, Haml також може оперувати локальними змінними, що задекларовані в тому ж файлі в [[Ruby]]-коді. Цей код містить приклад коду контролера [[Ruby]].<ref name="Using Haml">{{Cite web|url=http://haml.info/docs/yardoc/file.REFERENCE.html#using_haml|title=Using Haml|accessdate=7 February 2016}}</ref>
 
Аналогічно до мови ERB, Haml також може оперувати локальними змінними, що задекларовані в тому ж файлі в [[Ruby]]-коді. Цей код містить приклад коду контролера [[Ruby]].<ref name="Using Haml">{{Cite web|url=http://haml.info/docs/yardoc/file.REFERENCE.html#using_haml|title=Using Haml|accessdate=7 February 2016}}</ref>
* файл: app/controllers/messages_controller.rb<source lang="ruby">
+
* файл: app/controllers/messages_controller.rb<syntaxhighlight lang="ruby">
 
class MessagesController < ApplicationController
 
class MessagesController < ApplicationController
 
def index
 
def index
Рядок 65: Рядок 65:
 
end
 
end
 
end
 
end
  +
</syntaxhighlight>
</source>
 
* файл: app/views/messages/index.html.haml<source lang="haml">
+
* файл: app/views/messages/index.html.haml<syntaxhighlight lang="haml">
 
#welcome
 
#welcome
 
%p= @message
 
%p= @message
</source>Буде скомпільовано в:<source lang="html">
+
</syntaxhighlight>Буде скомпільовано в:<syntaxhighlight lang="html">
 
<div id="welcome">
 
<div id="welcome">
 
<p>Hello, World!</p>
 
<p>Hello, World!</p>
 
</div>
 
</div>
  +
</syntaxhighlight>
</source>
 
   
 
==== Haml як модуль [[Ruby]] ====
 
==== Haml як модуль [[Ruby]] ====
Щоб користуватись Haml окремо від [[Ruby on Rails|Rails]] та [http://guides.rubyonrails.org/action_view_overview.html ActionView], інсталюйте <code>haml</code> за допомогою gem, включіть його до <code>Gemfile</code>, а далі імпортуйте <code>[Usage: require 'haml']</code> до скрипту на Ruby або запустіть [[інтерпретатор]] Ruby за допомогою <code>-rubygems</code>.<source lang="ruby">
+
Щоб користуватись Haml окремо від [[Ruby on Rails|Rails]] та [http://guides.rubyonrails.org/action_view_overview.html ActionView], інсталюйте <code>haml</code> за допомогою gem, включіть його до <code>Gemfile</code>, а далі імпортуйте <code>[Usage: require 'haml']</code> до скрипту на Ruby або запустіть [[інтерпретатор]] Ruby за допомогою <code>-rubygems</code>.<syntaxhighlight lang="ruby">
 
welcome = Haml::Engine.new("%p Hello, World!")
 
welcome = Haml::Engine.new("%p Hello, World!")
 
welcome.render
 
welcome.render
</source>Результат:<source lang="html">
+
</syntaxhighlight>Результат:<syntaxhighlight lang="html">
 
<p>Hello, World!</p>
 
<p>Hello, World!</p>
</source>[http://haml.info/docs/yardoc/Haml/Engine.html Haml::Engine] є класом Haml.
+
</syntaxhighlight>[http://haml.info/docs/yardoc/Haml/Engine.html Haml::Engine] є класом Haml.
   
 
=== Приклад ===
 
=== Приклад ===
Рядок 89: Рядок 89:
 
! ERB
 
! ERB
 
|- valign="top"
 
|- valign="top"
| <source lang="Haml">
+
| <syntaxhighlight lang="Haml">
 
%div.category
 
%div.category
 
%p.recipes
 
%p.recipes
Рядок 95: Рядок 95:
 
%h3= recipe.category
 
%h3= recipe.category
 
%h4= recipe.description
 
%h4= recipe.description
  +
</syntaxhighlight>
</source>
 
| <source lang="HTML+ERB">
+
| <syntaxhighlight lang="HTML+ERB">
 
<div class="category">
 
<div class="category">
 
<div class="recipes">
 
<div class="recipes">
Рядок 106: Рядок 106:
 
</div>
 
</div>
 
</div>
 
</div>
  +
</syntaxhighlight>
</source>
 
 
|}
 
|}
В обох випадках скомпільований [[HTML]] буде наступним:<source lang="HTML">
+
В обох випадках скомпільований [[HTML]] буде наступним:<syntaxhighlight lang="HTML">
 
<div class="category">
 
<div class="category">
 
<div class="recipes">
 
<div class="recipes">
Рядок 118: Рядок 118:
 
</div>
 
</div>
 
</div>
 
</div>
</source>'''Основні відмінності:'''
+
</syntaxhighlight>'''Основні відмінності:'''
 
* В Haml немає закриття тегів, як у ERB
 
* В Haml немає закриття тегів, як у ERB
 
* Синтакс ERB дуже схожий на [[HTML]], в той час як Haml більше схожий на [[CSS]].
 
* Синтакс ERB дуже схожий на [[HTML]], в той час як Haml більше схожий на [[CSS]].
Рядок 125: Рядок 125:
   
 
=== Приклад з вкрапленням [[Ruby]] ===
 
=== Приклад з вкрапленням [[Ruby]] ===
Це простий приклад коду, який, втім, може не відображати сучасну розмітку мови.<source lang="haml">
+
Це простий приклад коду, який, втім, може не відображати сучасну розмітку мови.<syntaxhighlight lang="haml">
 
!!!
 
!!!
 
%html{ :xmlns => "http://www.w3.org/1999/xhtml", :lang => "en", "xml:lang" => "en"}
 
%html{ :xmlns => "http://www.w3.org/1999/xhtml", :lang => "en", "xml:lang" => "en"}
 
%head
 
%head
 
%title BoBlog
 
%title BoBlog
%meta{"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8"}
+
%meta{"http-equiv" => "Content-Type", :content => "text/html"; charset="utf-8"}
 
%link{"rel" => "stylesheet", "href" => "main.css", "type" => "text/css"}
 
%link{"rel" => "stylesheet", "href" => "main.css", "type" => "text/css"}
 
%body
 
%body
Рядок 145: Рядок 145:
 
%p
 
%p
 
All content copyright © Bob
 
All content copyright © Bob
</source>Цей код Haml буде інтерпретовано у наступний [[XHTML]]:<source lang="html" enclose="div">
+
</syntaxhighlight>Цей код Haml буде інтерпретовано у наступний [[XHTML]]:<syntaxhighlight lang="html" enclose="div">
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
 
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
Рядок 181: Рядок 181:
 
</body>
 
</body>
 
</html>
 
</html>
  +
</syntaxhighlight>
</source>
 
   
 
== Реалізація ==
 
== Реалізація ==
Рядок 189: Рядок 189:
 
* [https://web.archive.org/web/20080608081951/http://weblogs.asp.net/mirvodasergey/archive/2008/06/02/introducing-monorail-nhaml.aspx MonoRail NHaml (ASP.NET)]
 
* [https://web.archive.org/web/20080608081951/http://weblogs.asp.net/mirvodasergey/archive/2008/06/02/introducing-monorail-nhaml.aspx MonoRail NHaml (ASP.NET)]
 
* [http://code.google.com/p/nhaml/ NHaml (.NET)]
 
* [http://code.google.com/p/nhaml/ NHaml (.NET)]
* [http://wiki.github.com/dxw/Fammel Fammel (PHP)]
+
* [https://web.archive.org/web/20100303124319/http://wiki.github.com/dxw/Fammel/ Fammel (PHP)]
 
* [https://web.archive.org/web/20110417115303/http://haml-to-php.com/ HAML-TO-PHP (PHP5)]
 
* [https://web.archive.org/web/20110417115303/http://haml-to-php.com/ HAML-TO-PHP (PHP5)]
 
* [http://phaml.sourceforge.net/ pHAML (PHP)]
 
* [http://phaml.sourceforge.net/ pHAML (PHP)]
Рядок 234: Рядок 234:
 
[[Категорія:Вільні бібліотеки програм]]
 
[[Категорія:Вільні бібліотеки програм]]
 
[[Категорія:Ruby]]
 
[[Категорія:Ruby]]
  +
[[Категорія:Легкі мови розмітки]]
  +
[[Категорія:Програмне забезпечення, що використовує ліцензію MIT]]
  +
[[Категорія:Статті з прикладами коду мовою Ruby]]
  +
[[Категорія:Статті з прикладами коду мовою HTML]]

Поточна версія на 12:59, 12 травня 2020

Haml
Haml 1-5 logo.png
Парадигма:Мова для шаблонів
Творці:Нік Волш
Розробник:Норман Кларк, Мет Вайлдіґ, Акіра Мацуда, Ті Перхем
Останній реліз:4.0.7 (10 серпня 2015)
ОС:Крос-платформова
Ліцензія:MIT License,[1] Unspace Interactive.[2]
Звичайні розширення файлів:.haml
Сторінка інтернет:haml.info

Haml (HTML Abstraction Markup Language) — це мова для написання шаблонів, головною метою якої є написання простого і легкого для сприйняття коду, який інтерпретується в звичайний HTML. Haml дає змогу писати динамічний код для HTML. Аналогічно іншим мовам програмування для вебу, таких як PHP, ASP, JSP та шаблонних систем типа eRuby, Haml також дозволяє писати код, що буде виконаний протягом генерації HTML і отримати динамічний код. Розширення файлів з кодом − .haml. Такий підхід до роботи схожий на файли .erb (eRuby), що дозволяють вставляти код, написаний на Ruby для генерації коду веб-застосунків. Під час обробки коду Haml користується тими ж правилами, що й Ruby версії 1.9 і новіше. Haml розпізнає тільки кодування, сумісні з ASCII, такі як UTF-8, але при цьому не працює з UTF-16 чи UTF-32 через те, що вони несумісні з ASCII.[3][4] Haml може працювати через командний рядок як окремий модуль Ruby або ж використовуватися в Ruby on Rails, що робить цю мову гнучкою та зручною для створення багатьох видів застосунків.

Історія[ред. | ред. код]

Haml було створено Гемптоном Кетліном у 2006 р.[5] Його метою було спрощення написання і редагування коду на HTML. З 2006 року вийшло кілька оновлених версій цієї мови. У квітні 2012-го роботу над Haml взяв на себе Норман Кларк.[5] Наталі Вайзенбаум та Нік Волш допомагали вдосконалювати мову і продовжують підтримувати її розвиток. Наталі працювала над тим, щоб HAML був сусісним з застосунками на Ruby, а дизайном та брендінґом займався Нік.[5] Також над проектом працюють Мет Вілдіґ, Акіра Мацуда and Ті Пергем.[2]

Особливості[ред. | ред. код]

Haml базується на чотирьох принципах.[5]

Розмітка, яку легко читати[ред. | ред. код]

Розмітка коду цією мовою має відповідати наступним правилам:

  • Легко розуміти
  • Легко використовувати

DRY[ред. | ред. код]

Розмітка має відповідати принципу DRY. Вона має:

  • Уникати непотрібних повторень
  • Приділяти увагу чистоті коду

Прості відступи[ред. | ред. код]

Мову розмітки зі зручними відступами легко читати і відразу бачити початок та кінець коду елементів.

Зрозуміла структура[ред. | ред. код]

Зрозуміла структура коду допомагає легко його масштабувати і редагувати.

Приклади[ред. | ред. код]

Розмітка Haml дуже схожа на синтаксис CSS. Наприклад, в Haml символ . відповідає за визначення класів, як це робиться в CSS.

Приклад «Hello, World»[ред. | ред. код]

Просте рішення для  Hello World на Haml виглядатиме так:

Haml as a Command-line tool[ред. | ред. код]

%p{:class => "sample", :id => "welcome"} Hello, World!

Що буде екпортовано в наступний HTML:

<p class="sample" id="welcome">Hello, World!</p>

Щоб запустити код Haml, потрібно інсталювати Haml за допомогою gem:[6]

gem install haml

Код Haml, що збережений у файл Hello.haml, можна запустити наступним чином:

haml Hello.haml

Haml у вигляді джема для Ruby on Rails[ред. | ред. код]

Щоб використовувати Haml з Ruby, файл Gemfile має включати наступний рядок:

gem 'haml'

Аналогічно до мови ERB, Haml також може оперувати локальними змінними, що задекларовані в тому ж файлі в Ruby-коді. Цей код містить приклад коду контролера Ruby.[6]

  • файл: app/controllers/messages_controller.rb
    class MessagesController < ApplicationController
      def index
        @message = "Hello, World!"
      end
    end
    
  • файл: app/views/messages/index.html.haml
    #welcome
        %p= @message
    
    Буде скомпільовано в:
    <div id="welcome">
        <p>Hello, World!</p>
    </div>
    

Haml як модуль Ruby[ред. | ред. код]

Щоб користуватись Haml окремо від Rails та ActionView, інсталюйте haml за допомогою gem, включіть його до Gemfile, а далі імпортуйте [Usage: require 'haml'] до скрипту на Ruby або запустіть інтерпретатор Ruby за допомогою -rubygems.

welcome = Haml::Engine.new("%p Hello, World!")
welcome.render

Результат:

<p>Hello, World!</p>

Haml::Engine є класом Haml.

Приклад[ред. | ред. код]

Haml використовує відступи у вигляді двох пробілів для створення вкладених тегів. Це служить еквівалентом відкриттю і закриттю парних тегів у HTML, притримуючись методу DRY, роблячи код простим і легким для читання. Наступний приклад показує відмінності між Haml та ERB (з використанням Ruby).

Haml ERB
%div.category
    %p.recipes
        %h1= recipe.name
        %h3= recipe.category
        %h4= recipe.description
<div class="category">
    <div class="recipes">
        <h1><%= recipe.name %></h1>
        <h3><%= recipe.category %></h3>
    </div>
    <div>
        <h4><%= recipe.description %></h4>
    </div>
</div>

В обох випадках скомпільований HTML буде наступним:

<div class="category">
    <div class="recipes">
        <h1>Cookie</h1>
        <h3>Desserts</h3>
    </div>
    <div>
        <h4>Made from dough and sugar. Usually circular in shape and has about 400 calories.</h4>
    </div>
</div>

Основні відмінності:

  • В Haml немає закриття тегів, як у ERB
  • Синтакс ERB дуже схожий на HTML, в той час як Haml більше схожий на CSS.
  • Haml використовує відступи для створення структури елементів-тегів, а ERB має схожий на HTML синтаксис.
  • Властивості Haml, такі як class і id можна призначати за допомогою символів # та .  відповідно. Також можна використовувати атрибути class та id, що не є необхідним. Haml таокж використовує символ %, щоб відокремити елемент HTML замість кутових дужок <>, як це робить ERB.

Приклад з вкрапленням Ruby[ред. | ред. код]

Це простий приклад коду, який, втім, може не відображати сучасну розмітку мови.

!!!
%html{ :xmlns => "http://www.w3.org/1999/xhtml", :lang => "en", "xml:lang" => "en"}
  %head
    %title BoBlog
    %meta{"http-equiv" => "Content-Type", :content => "text/html"; charset="utf-8"}
    %link{"rel" => "stylesheet", "href" => "main.css", "type" => "text/css"}
  %body
    #header
      %h1 BoBlog
      %h2 Bob's Blog
    #content
      - @entries.each do |entry|
        .entry
          %h3.title= entry.title
          %p.date= entry.posted.strftime("%A, %B %d, %Y")
          %p.body= entry.body
    #footer
      %p
        All content copyright © Bob

Цей код Haml буде інтерпретовано у наступний XHTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
  <head>
    <title>BoBlog</title>
    <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
    <link href="/stylesheets/main.css" media="screen" rel="Stylesheet" type="text/css" />
  </head>
  <body>
    <div id='header'>
      <h1>BoBlog</h1>
      <h2>Bob's Blog</h2>
    </div>
    <div id='content'>
      <div class='entry'>
        <h3 class='title'>Halloween</h3>
        <p class='date'>Tuesday, October 31, 2006</p>
        <p class='body'>
          Happy Halloween, glorious readers! I'm going to a party this evening... I'm very excited.
        </p>
      </div>
      <div class='entry'>
        <h3 class='title'>New Rails Templating Engine</h3>
        <p class='date'>Friday, August 11, 2006</p>
        <p class='body'>
          There's a very cool new Templating Engine out for Ruby on Rails. It's called Haml.
        </p>
      </div>
    </div>
    <div id='footer'>
      <p>
        All content copyright © Bob
      </p>
    </div>
  </body>
</html>

Реалізація[ред. | ред. код]

Haml можна легко використовувати з іншими мовами. Нижче наведено список мов, в яких є можливість імплементації коду HAML:

Див. також[ред. | ред. код]

Додаткові матеріали[ред. | ред. код]

Примітки[ред. | ред. код]

  1. MIT License. Процитовано 15 February 2016. 
  2. а б GitHub. Процитовано 30 January 2016. 
  3. Encoding. Процитовано 29 January 2016. 
  4. UTF encodings. Процитовано 7 February 2016. 
  5. а б в г History. Процитовано 29 January 2016. 
  6. а б Using Haml. Процитовано 7 February 2016. 

Посилання[ред. | ред. код]