Наклон - это тонкий интерфейс на куче разных двигателей шаблонов Ruby, пытаясь сделать их использование как можно более общим. Это полезно для веб -структур, статических генераторов сайтов и других систем, которые поддерживают несколько шаблонных двигателей, но не хотят кодировать для каждого из них индивидуально.
Следующие функции поддерживаются для всех шаблонных двигателей (при условии, что функция имеет отношение к двигателю):
Основная цель состоит в том, чтобы получить все вещи, перечисленные выше для всех шаблонов, включенных в распределение.
Поддержка этих шаблонных двигателей включена в пакет:
Двигатель | Расширения файлов | Требуются библиотеки | Сопровождающий |
---|---|---|---|
Аскидоктор | .ad, .adoc, .asciidoc | Asciidoctor (> = 0,1,0) | Сообщество |
Эрб | .erb, .rhtml | Нет (включал Ruby Stdlib) | Наклона команда |
Интерполированное стринг | .str. | нет (включен рубиновый ядро) | Наклона команда |
Эруби | .erb, .rhtml, .erubi | Эруби | Сообщество |
Эрубис | .erb, .rhtml, .erubis | Эрубис | Наклона команда |
Хэмл | .haml | хэмл | Наклона команда |
Набережный | .sass | SASS-Embeded (> = 1,0) или SASSC (> = 2,0) | Наклона команда |
SCSS | .scss | SASS-Embeded (> = 1,0) или SASSC (> = 2,0) | Наклона команда |
Строитель | .BUIDER | строитель | Наклона команда |
Жидкость | .жидкость | жидкость | Сообщество |
Rdiscount | .markdown, .mkd, .md | rdiscount | Сообщество |
Redcarpet | .markdown, .mkd, .md | Redcarpet | Сообщество |
Крамдаун | .markdown, .mkd, .md | Крамдаун | Сообщество |
Пандок | .markdown, .mkd, .md | Пандок | Сообщество |
реструктурированный текст | .rst | Пандок | Сообщество |
Маруку | .markdown, .mkd, .md | Маруку | Сообщество |
Commonmarker | .markdown, .mkd, .md | Commonmarker | Сообщество |
Redcloth | .textile | Redcloth | Сообщество |
Rdoc | .rdoc | rdoc | Наклона команда |
Радиус | .радиус | радиус | Сообщество |
Маркаби | .mab | Маркаби | Наклона команда |
Нокогири | .nokogiri | Нокогири | Сообщество |
CoffeeScript | .кофе | Coffee-Script (+ JavaScript) | Наклона команда |
CoffeeScript (грамотный) | .litcoffee | Coffee-Script (> = 1.5.0) (+ JavaScript) | Наклона команда |
Livescript | .ls | Livescript (+ JavaScript) | Наклона команда |
Машинопись | .ts | TypeScript (+ JavaScript) | Наклона команда |
Креоль (наценка вики) | .wiki, .creole | креольский | Сообщество |
Викиколот (наценка вики) | .wiki, .mediawiki, .mw | Викикол | Сообщество |
Яджл | .yajl | Яйл-Руби | Сообщество |
CSV | .rcsv | Нет (включал Ruby Stdlib) | Наклона команда |
Креветка | .prawn | креветка (> = 2,0,0) | Сообщество |
Вавилон | .es6, .babel, .jsx | Вабель-транспилер | Наклона команда |
Опал | .rb | опал | Сообщество |
Каждый поддерживаемый шаблонный двигатель имеет сопровождающего . Обратите внимание, что это является сопровождающим интеграции наклона, а не поддерживателя самого шаблонного двигателя. Содействие несет ответственность за предоставление адекватной интеграции и поддержания обратной совместимости через версию наклона. Некоторые интеграции поддерживаются сообществом , которое обрабатывается следующим образом:
Эти шаблонные двигатели поставляются со своей собственной интеграцией наклона:
Двигатель | Расширения файлов | Требуются библиотеки |
---|---|---|
Стройный | .стройный | Слим (> = 0,7) |
Встроенный Javascript | звездочки | |
Встроенный кофейкпид | звездочки | |
JST | звездочки | |
Орг-режим | .орг | org-ruby (> = 0,6,2) |
Emacs org | .орг | tilt-emacs_org |
Руль | .hbs, руль | наклоны-хандлебары |
Jbuilder | .jbuilder | tilt-jbuilder |
См. STEMPLATES.MD для подробной информации о параметрах двигателя шаблона и поддерживаемых функциях.
Мгновенное удовлетворение:
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
Рекомендуется, чтобы программы вызова явно потребовали библиотеки двигателей шаблонов (например, «ERB» выше) во время загрузки. Попытки Tilt Lazy требуют библиотеки двигателей шаблона при первом создании шаблона, но это подвержено ошибкам в поточных средах.
Модуль {tilt} содержит общие классы реализации для всех поддерживаемых шаблонных двигателей. Каждый класс шаблонов придерживается одного и того же интерфейса для создания и рендеринга. В примере мгновенного удовлетворения мы позволяем наклону определить класс реализации шаблона на основе имени файла, но {Tilt :: Template} Реализации также могут использоваться напрямую:
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
Метод render
принимает дополнительную оценку оценки и аргументы местных жителей. Здесь шаблон оценивается в контексте объекта Person
с местными жителями x
и y
:
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
Если применения не предоставляются, шаблон оценивается в контексте объекта, созданного с Object.new
.
Метод render
экземпляра одного Template
может быть вызван несколько раз с разными аргументами масштаба и местных жителей. Продолжая предыдущий пример, мы отображаем тот же собственный шаблон, но на этот раз в сфере Джейн:
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
Блоки могут быть переданы для render
для шаблонов, которые поддерживают запуск произвольного кода Ruby (обычно с некоторой формой yield
). Например, предполагая следующее в foo.erb
:
Hey <%= yield %>!
Блок, переданный для render
вызывается на yield
:
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
Класс {tilt :: Mapping} включает в себя методы для ассоциации классов реализации шаблона с шаблонами файла и для классов расположения/создания шаблонов, основанных на этих ассоциациях.
Модуль {tilt} имеет глобальный экземпляр Mapping
, который заполняется таблицей шаблонных двигателей выше.
Метод {tilt.register} связывает шаблон файла с конкретной реализацией шаблона. Чтобы использовать ERB для файлов, заканчивающихся расширением .bar
:
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
Получение класса шаблона для расширения файла или файла:
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
Получение списка классов шаблонов для файла:
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
Класс шаблонов определяется путем поиска серии уменьшенных специфических шаблонов имен. При создании нового шаблона с Tilt.new('views/foo.html.erb')
мы проверяем на следующие отображения шаблонов:
views/foo.html.erb
foo.html.erb
html.erb
erb
Tilt должен знать кодирование шаблона, чтобы правильно работать:
Tilt будет использовать Encoding.default_external
в качестве кодирования при чтении внешних файлов. Если вы в основном работаете с одной кодировкой (например, UTF-8), мы настоятельно рекомендуем установить эту опцию. При предоставлении пользовательского блока чтения ( Tilt.new { custom_string }
) вы убедитесь, что строка правильно кодируется.
Большинство шаблонных двигателей в наклоне также позволяют переопределить кодирование с помощью :default_encoding
-Option:
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
В конечном счете, шаблонный двигатель, как обрабатывать кодирование: он может уважать :default_encoding
, он всегда может предположить, что он UTF-8 (например, CoffeeScript), или он может сделать свое собственное обнаружение кодировки.
Наклонный компилирование сгенерировала исходный код Ruby, созданный шаблонными двигателями, и повторно использует его на последующих призыве шаблонов. Бесчмамы показывают, что это дает увеличение производительности на 5x-10x по сравнению с оценкой источника Ruby при каждом вызове.
В настоящее время поддержано шаблон для этих шаблонных двигателей: StringTemplate, Erb, Erubis, Erubi, Haml, Nokogiri, Builder и Yajl.
Tilt - Copyright (C) 2010 Ryan Tomayko и распространяется по лицензии MIT. Смотрите файл COPYING
для получения дополнительной информации.