Tilt ist eine dünne Schnittstelle über einer Reihe verschiedener Rubin -Template -Motoren, um ihre Verwendung so generisch wie möglich zu gestalten. Dies ist nützlich für Web -Frameworks, statische Site -Generatoren und andere Systeme, die mehrere Vorlagenmotoren unterstützen, aber nicht für jede von ihnen einzeln codieren möchten.
Die folgenden Funktionen werden für alle Vorlagenmotoren unterstützt (vorausgesetzt, die Funktion ist für den Motor relevant):
Das Hauptziel ist es, alle oben aufgelisteten Dinge für alle in der Verteilung enthaltenen Vorlagenmotoren aufzulisten.
Die Unterstützung für diese Vorlagenmotoren ist im Paket enthalten:
Motor | Dateierweiterungen | Erforderliche Bibliotheken | Betreuer |
---|---|---|---|
Asciidoctor | .AD, .Adoc, .asciidoc | Asciidoctor (> = 0,1,0) | Gemeinschaft |
Erb | .erb, .rhtml | Keine (enthalten Ruby Stdlib) | Kippteam |
Interpolatedstring | .Sstr | Keine (enthalten Ruby Core) | Kippteam |
ERUBI | .erb, .rhtml, .erubi | ERUBI | Gemeinschaft |
Erubis | .erb, .rhtml, .erubis | Erubis | Kippteam |
Haml | .haml | Haml | Kippteam |
Sass | .Sass | SASS-eingebettet (> = 1,0) oder SASSC (> = 2.0) | Kippteam |
SCSS | .Scss | SASS-eingebettet (> = 1,0) oder SASSC (> = 2.0) | Kippteam |
Erbauer | .builder | Erbauer | Kippteam |
Flüssig | .flüssig | flüssig | Gemeinschaft |
Rdiscount | .Markdown, .mkd, .md | rdiscount | Gemeinschaft |
Redcarpet | .Markdown, .mkd, .md | Redcarpet | Gemeinschaft |
Kramdown | .Markdown, .mkd, .md | Kramdown | Gemeinschaft |
Pandoc | .Markdown, .mkd, .md | Pandoc | Gemeinschaft |
Umstrukturiertertext | .rst | Pandoc | Gemeinschaft |
Maruku | .Markdown, .mkd, .md | Maruku | Gemeinschaft |
Commonmarker | .Markdown, .mkd, .md | Commonmarker | Gemeinschaft |
Rotwein | .Textil | Rotwein | Gemeinschaft |
RDOC | .rdoc | RDOC | Kippteam |
Radius | .Radius | Radius | Gemeinschaft |
Markaby | .mab | Markaby | Kippteam |
Nokogiri | .nokogiri | Nokogiri | Gemeinschaft |
Coffeescript | .Kaffee | Kaffee-Skript (+ JavaScript) | Kippteam |
Coffeescript (gebildet) | .Litcoffee | Kaffee-Skript (> = 1.5.0) (+ JavaScript) | Kippteam |
Livescript | .ls | Livescript (+ JavaScript) | Kippteam |
Typoskript | .ts | TypeScript (+ JavaScript) | Kippteam |
Kreolisch (Wiki Markup) | .Wiki, .Creole | kreolisch | Gemeinschaft |
Wikicloth (Wiki Markup) | .wiki, .mediawiki, .mw | Wikicloth | Gemeinschaft |
Yajl | .yajl | yajl-ruby | Gemeinschaft |
CSV | .rcsv | Keine (enthalten Ruby Stdlib) | Kippteam |
Garnele | .Garnele | Garnelen (> = 2.0.0) | Gemeinschaft |
Babel | .es6, .babel, .jsx | Babel-Transpiler | Kippteam |
Opal | .RB | Opal | Gemeinschaft |
Jede unterstützte Vorlagenmotor hat einen Betreuer . Beachten Sie, dass dies der Betreuer der Neigungsintegration ist, nicht der Betreuer der Template -Engine selbst. Der Betreuer ist dafür verantwortlich, eine angemessene Integration bereitzustellen und die Kompatibilität nach hinten über die Tilt -Version hinweg zu halten. Einige Integrationen werden von der Community aufrechterhalten, die auf folgende Weise behandelt wird:
Diese Template -Motoren werden mit ihrer eigenen Neigungsintegration geliefert:
Motor | Dateierweiterungen | Erforderliche Bibliotheken |
---|---|---|
Schlank | .schlank | schlank (> = 0,7) |
Eingebetteter JavaScript | Kettenräder | |
Eingebettete Kaffeekripte | Kettenräder | |
JST | Kettenräder | |
Org-Mode | .org | org-ruby (> = 0,6,2) |
EMACS org | .org | Tilt-emacs_org |
Lenker | .HBS, Lenker | Tilt-Headlebars |
Jbuilder | .Jbuilder | Tilt-Jbuilder |
Weitere Informationen zu Vorlagen -Engineoptionen und unterstützten Funktionen finden Sie unter templates.md.
Sofortige Befriedigung:
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
Es wird empfohlen, dass das Aufrufen von Programmen zur Ladezeit explizit Vorlagen -Engine -Bibliotheken (wie "Erb" erfordern. Tilt -Versuche, faulen zu lassen, erfordern die Vorlage -Engine -Bibliothek, wenn eine Vorlage zum ersten Mal erstellt wird, dies ist jedoch fehlerhaft in Thread -Umgebungen.
Das {Tilt} -Modul enthält generische Implementierungsklassen für alle unterstützten Vorlagenmotoren. Jede Vorlagenklasse hält sich an die gleiche Schnittstelle zur Erstellung und Renderung an. Im Beispiel für sofortige Befriedigung lassen wir die Tilt die Vorlagen -Implementierungsklasse basierend auf dem Dateinamen bestimmen, aber {tilt :: template} können auch direkt verwendet werden:
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
Die render
-Methode nimmt einen optionalen Bewertungsumfang und die Einheimischen Hash -Argumente an. Hier wird die Vorlage im Kontext des Person
mit den Einheimischen x
und y
ausgewertet:
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
Wenn kein Umfang bereitgestellt wird, wird die Vorlage im Kontext eines mit Object.new
erstellten Objekts bewertet.
Die render
-Methode einer einzelnen Template
kann mehrmals mit unterschiedlichem Umfang und Lokalargumenten aufgerufen werden. Wenn wir das vorherige Beispiel fortsetzen, machen wir die gleiche kompilierte Vorlage, diesmal jedoch in Jane's Scope:
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
Blöcke können für render
übergeben werden, die den leichten Ruby -Code (normalerweise mit einer yield
) unterstützen. Zum Beispiel unter der Annahme von Folgendes in foo.erb
:
Hey <%= yield %>!
Der Block zum render
wird auf yield
aufgerufen:
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
Die {tilt :: mapping} -Kläufe enthält Methoden zum Zusammenhang mit Vorlagen -Implementierungsklassen mit Dateinamenmustern und zum Auffinden/Instanziieren von Vorlagenklassen basierend auf diesen Assoziationen.
Das {Tilt} -Modul verfügt über eine globale Instanz der Mapping
, die mit der oben genannten Tabelle der Template -Engines gefüllt ist.
Die Methode {Tilt.register} verbindet ein Dateiname -Muster mit einer bestimmten Vorlagenimplementierung. Um Erb für Dateien zu verwenden, die in einer .bar
-Erweiterung enden:
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
Abrufen der Vorlagenklasse für eine Datei- oder Dateierweiterung:
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
Abrufen einer Liste von Vorlagenklassen für eine Datei:
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
Die Vorlagenklasse wird durch die Suche nach einer Reihe abnehmend spezifischer Namensmuster bestimmt. Beim Erstellen einer neuen Vorlage mit Tilt.new('views/foo.html.erb')
suchen wir nach den folgenden Vorlagenzuordnungen:
views/foo.html.erb
foo.html.erb
html.erb
erb
Tilt muss die Codierung der Vorlage kennen, um ordnungsgemäß zu arbeiten:
TILT verwendet Encoding.default_external
. Wenn Sie hauptsächlich mit einer Codierung (z. B. UTF-8) arbeiten, empfehlen wir dringend, diese Option festzulegen. Wenn Sie einen benutzerdefinierten Leserblock ( Tilt.new { custom_string }
) bereitstellen, haben Sie sicher, dass die Zeichenfolge selbst ordnungsgemäß codiert.
Mit den meisten Template -Motoren in Tilt können Sie auch die Codierung mit der :default_encoding
-option überschreiben:
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
Letztendlich liegt es an der Vorlagenmotor, wie man mit der Codierung umgeht: Es kann respektieren :default_encoding
, es kann immer davon ausgehen, dass es sich um UTF-8 handelt (wie Coffeescript) oder eine eigene Codierungserkennung durchführen kann.
Tilt erstellt den generierten Ruby -Quellcode, der von Vorlagenmotoren erstellt wurde, und wiederverwendet ihn bei nachfolgenden Vorlagenaufrufen wieder. Benchmarks zeigen, dass dies eine 5x-10x-Leistungssteigerung bei der Bewertung der Ruby-Quelle bei jedem Aufruf ergibt.
Die Template -Kompilierung wird derzeit für diese Vorlagenmotoren unterstützt: StringTemplate, Erb, Erubis, Erubi, Haml, Nokogiri, Builder und Yajl.
Tilt ist Copyright (C) 2010 Ryan Tomayko und unter der MIT -Lizenz verteilt. Weitere Informationen finden Sie in der COPYING
.