Описание тега markaby

Библиотека для написания HTML-кода на чистом Ruby. Это альтернатива шаблонным языкам, таким как ERb и HAML.

Маркаби (разметка как рубин)

Markaby - это библиотека для написания HTML-страниц на чистом Ruby. Это альтернатива ERb (который объединяет два языка). Он также служит заменой языкам шаблонов, которые смешивают динамически обработанные теги с HTML.

Использование Markaby в качестве плагина Ruby on Rails

Напишите шаблоны Ruby on Rails на чистом Ruby. Пример макета:

  html do
    head do
      title 'Products: ' + action_name
      stylesheet_link_tag 'scaffold'
    end

    body do
      p flash[:notice], :style => "color: green"

      self << content_for_layout
    end
  end

Использование Markaby в качестве класса Ruby

Маркаби легко вызывать из ваших классов Ruby.

  require 'markaby'

  mab = Markaby::Builder.new
  mab.html do
    head { title "Boats.com" }
    body do
      h1 "Boats.com has great deals"
      ul do
        li "$49 for a canoe"
        li "$39 for a raft"
        li "$29 for a huge boot that floats and can fit 5 people"
      end
    end
  end
  puts mab.to_s

Примечание о instance_eval

Markaby::Builder класс отличается от нормального Builder класс, так как он использует instance_eval при запуске блоков. Это очищает внешний вид написанного вами кода Markaby. Если instance_eval не был использован, код будет выглядеть так:

  mab = Markaby::Builder.new
  mab.html do
    mab.head { mab.title "Boats.com" }
    mab.body do
      mab.h1 "Boats.com has great deals"
    end
  end
  puts mab.to_s

Таким образом, преимущество заключается в чистоте вашего кода. Недостатком является то, что блок будет работать внутри Markaby::Builder область действия объекта Это означает, что внутри этих блоков, self будет вашим Markaby::Builder объект. Когда вы используете переменные экземпляра в этих блоках, они будут переменными экземпляра Markaby::Builder объект.

Это не влияет на пользователей Ruby on Rails, но при использовании в обычном коде Ruby это может немного дезориентировать. Рекомендуется поместить свой код Markaby в модуль, где он ни с чем не конфликтует.

Примечание о помощниках по Ruby on Rails

При использовании в шаблонах Ruby on Rails вспомогательный объект Ruby on Rails передается в Markaby::Builder, Когда вы вызываете вспомогательные методы внутри Markaby, выходные данные этих методов будут выводиться в поток. Это невероятно удобно, поскольку большинство помощников Ruby on Rails выводят теги HTML.

  head do
    javascript_include_tag 'prototype'
    autodiscovery_link_tag
  end

Тем не менее, некоторые методы предназначены для String который вы можете использовать в другом месте. Позвоните @helpers объект с методом, и вы получите String обратно, и ничего не будет выведено.

  p "Total is: #{@helper.number_to_human_size @file_bytes}"

И наоборот, вы можете вызывать переменные экземпляра из вашего контроллера, используя метод, и его значение будет возвращено, ничего не будет выведено.

  # Inside imaginary ProductController
  def list
    @products = Product.find :all
  end

  # Inside app/views/product/list.mab
  products.each do |product|
    p product.title
  end

Быстрый Тур

Если вы погрузитесь прямо в Markaby, это, вероятно, будет иметь смысл, но вы, вероятно, столкнетесь с несколькими проблемами. Помните об этих указателях, и все будет хорошо.

Элемент Классы

Классы элементов могут быть добавлены путем подключения методов к элементам контейнера:

  div.entry do
    h2.entryTitle 'Son of WebPage'
    div.entrySection %{by Anthony}
    div.entryContent 'Okay, once again, the idea here is ...'
  end

Что приводит к:

  <div class="entry">
    <h2 class="entryTitle">Son of WebPage</h2>
    <div class="entrySection">by Anthony</div>
    <div class="entryContent">Okay, once again, the idea here is ...</div>
  </div>

ID элементов

Идентификаторы могут быть добавлены с помощью методов взрыва:

  div.page!
    div.content!
      h1 "A Short Short Saintly Dog"
    end
  end

Что приводит к:

  <div id="page">
    <div id="content">
      <h1>A Short Short Saintly Dog</h1>
    </div>
  </div>

Маркаби предполагает XHTML 1.0 Transitional

По умолчанию на выходе XHTML 1.0 Transitional. Чтобы сделать XHTML 1.0 Strict, попробуйте это:

  xhtml_strict do
    # innerds
  end

Метод захвата

Хотите поймать блок HTML как строку и поиграть с ним немного? Используйте метод захвата.

Обычно используется для объединения блоков HTML:

  div.menu! \
    ['5.gets', 'bits', 'cult', 'inspect', '-h'].map do |category|
      capture { link_to category }
    end.
    join( " | " )

Тег! метод

Если вам нужно принудительно установить тег в любое время, позвоните tag! с именем тега, за которым следуют возможные аргументы и блок. CssProxy не будет работать с этой техникой.

  tag! :select, :id => "country_list" do
    countries.each do |country|
      tag! :option, country
    end
  end

Более подробная информация о библиотеке доступна на странице Markaby Wikipedia, а также на странице документации проекта.