Tilt adalah antarmuka tipis di atas sekelompok mesin templat ruby yang berbeda dalam upaya untuk membuat penggunaannya seenak mungkin. Ini berguna untuk kerangka kerja web, generator situs statis, dan sistem lain yang mendukung beberapa mesin templat tetapi tidak ingin kode untuk masing -masing secara individual.
Fitur -fitur berikut didukung untuk semua mesin templat (dengan asumsi fitur ini relevan dengan mesin):
Tujuan utamanya adalah untuk mendapatkan semua hal yang tercantum di atas untuk semua mesin templat yang termasuk dalam distribusi.
Dukungan untuk mesin template ini disertakan dengan paket:
Mesin | Ekstensi file | Perpustakaan yang diperlukan | Pemeliharaan |
---|---|---|---|
Asciidoctor | .ad, .adoc, .asciidoc | asciidoctor (> = 0.1.0) | Masyarakat |
Erb | .erb, .rhtml | tidak ada (termasuk ruby stdlib) | Tim miring |
InterpolatedString | .str | tidak ada (termasuk inti ruby) | Tim miring |
Erubi | .erb, .rhtml, .erubi | Erubi | Masyarakat |
Erubis | .erb, .rhtml, .erubis | Erubis | Tim miring |
Haml | .haml | haml | Tim miring |
Kelancangan | .kelancangan | Sass-Embedded (> = 1.0) atau Sassc (> = 2.0) | Tim miring |
SCSS | .scss | Sass-Embedded (> = 1.0) atau Sassc (> = 2.0) | Tim miring |
Pembangun | .pembangun | pembangun | Tim miring |
Cairan | .cairan | cairan | Masyarakat |
Rdiscount | .markdown, .mkd, .md | rdiscount | Masyarakat |
Redcarpet | .markdown, .mkd, .md | redcarpet | Masyarakat |
Kramdown | .markdown, .mkd, .md | Kramdown | Masyarakat |
Pandoc | .markdown, .mkd, .md | Pandoc | Masyarakat |
Restrukturisasiteks | .RST | Pandoc | Masyarakat |
Maruku | .markdown, .mkd, .md | Maruku | Masyarakat |
Commonmarker | .markdown, .mkd, .md | Commonmarker | Masyarakat |
Redcloth | .textile | Redcloth | Masyarakat |
Rdoc | .rdoc | rdoc | Tim miring |
Radius | .radius | radius | Masyarakat |
Markaby | .mab | Markaby | Tim miring |
Nokogiri | .nokogiri | Nokogiri | Masyarakat |
CoffeeScript | .kopi | Coffee-Script (+ JavaScript) | Tim miring |
CoffeeScript (melek) | .litcoffee | Coffee-Script (> = 1.5.0) (+ JavaScript) | Tim miring |
Livescript | .ls | Livescript (+ JavaScript) | Tim miring |
Naskah | .ts | naskah (+ javascript) | Tim miring |
Creole (Markup Wiki) | .wiki, .creole | Creole | Masyarakat |
Wikicloth (Markup Wiki) | .wiki, .mediawiki, .mw | Wikicloth | Masyarakat |
Yajl | .yajl | yajl-ruby | Masyarakat |
CSV | .rcsv | tidak ada (termasuk ruby stdlib) | Tim miring |
Udang | .udang | udang (> = 2.0.0) | Masyarakat |
Babel | .es6, .babel, .jsx | Babel-Transpiler | Tim miring |
Opal | .rb | opal | Masyarakat |
Setiap mesin template yang didukung memiliki pengelola . Perhatikan bahwa ini adalah pengelola integrasi kemiringan, bukan pemelihara mesin template itu sendiri. Pemelihara bertanggung jawab untuk memberikan integrasi yang memadai dan menjaga kompatibilitas ke belakang di seluruh versi Tilt. Beberapa integrasi dikelola oleh masyarakat , yang ditangani dengan cara berikut:
Mesin templat ini dikirimkan dengan integrasi kemiringan mereka sendiri:
Mesin | Ekstensi file | Perpustakaan yang diperlukan |
---|---|---|
Langsing | .langsing | Slim (> = 0.7) |
JavaScript tertanam | Sprockets | |
Coffeescript tertanam | Sprockets | |
JST | Sprockets | |
Mode org | .org | org-ruby (> = 0.6.2) |
Emacs org | .org | Tilt-emacs_org |
Setang | .hbs, setang | Tilt-Handlebars |
Jbuilder | .jbuilder | Tilt-jbuilder |
Lihat Template.md untuk informasi terperinci tentang opsi mesin templat dan fitur yang didukung.
Puis instan:
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
Direkomendasikan bahwa program panggilan secara eksplisit memerlukan perpustakaan mesin template (seperti 'Erb' di atas) pada waktu pemuatan. Upaya miring untuk malas membutuhkan perpustakaan mesin template saat pertama kali templat dibuat tetapi ini rentan terhadap kesalahan di lingkungan yang berulir.
Modul {tilt} berisi kelas implementasi umum untuk semua mesin template yang didukung. Setiap kelas templat melekat pada antarmuka yang sama untuk pembuatan dan rendering. Dalam contoh kepuasan instan, kami membiarkan kemiringan menentukan kelas implementasi template berdasarkan nama file, tetapi {tilt :: template} implementasi juga dapat digunakan secara langsung:
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
Metode render
mengambil ruang lingkup evaluasi opsional dan argumen hash penduduk setempat. Di sini, templat dievaluasi dalam konteks objek Person
dengan penduduk setempat x
dan y
:
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
Jika tidak ada ruang lingkup yang disediakan, templat dievaluasi dalam konteks objek yang dibuat dengan Object.new
.
Metode render
instance Template
tunggal dapat disebut beberapa kali dengan argumen ruang lingkup dan penduduk setempat yang berbeda. Melanjutkan contoh sebelumnya, kami membuat template yang dikompilasi yang sama tetapi kali ini dalam ruang lingkup Jane:
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
Blok dapat diteruskan ke render
untuk templat yang mendukung menjalankan kode ruby sewenang -wenang (biasanya dengan beberapa bentuk yield
). Misalnya, dengan asumsi yang berikut di foo.erb
:
Hey <%= yield %>!
Blok yang diteruskan ke render
dipanggil pada yield
:
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
Kelas {tilt :: pemetaan} mencakup metode untuk mengaitkan kelas implementasi template dengan pola nama file dan untuk mencari/instantiating kelas template berdasarkan asosiasi tersebut.
Modul {tilt} memiliki contoh global Mapping
yang diisi dengan tabel mesin templat di atas.
Metode {tilt.Register} mengaitkan pola nama file dengan implementasi templat tertentu. Untuk menggunakan ERB untuk file yang diakhiri dengan ekstensi .bar
:
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
Mengambil kelas template untuk file atau ekstensi file:
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
Mengambil daftar kelas templat untuk file:
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
Kelas template ditentukan dengan mencari serangkaian pola nama yang sangat spesifik. Saat membuat templat baru dengan Tilt.new('views/foo.html.erb')
, kami memeriksa pemetaan templat berikut:
views/foo.html.erb
foo.html.erb
html.erb
erb
Kemiringan perlu mengetahui pengkodean template agar dapat bekerja dengan baik:
Tilt akan menggunakan Encoding.default_external
sebagai pengkodean saat membaca file eksternal. Jika Anda sebagian besar bekerja dengan satu pengkodean (misalnya UTF-8), kami sangat merekomendasikan pengaturan opsi ini. Saat menyediakan blok pembaca khusus ( Tilt.new { custom_string }
) Anda akan memastikan string tersebut dikodekan dengan benar.
Sebagian besar mesin templat dalam kemiringan juga memungkinkan Anda untuk mengganti encoding menggunakan :default_encoding
-option:
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
Pada akhirnya itu tergantung pada mesin template bagaimana menangani pengkodean: mungkin menghormati :default_encoding
, mungkin selalu menganggap itu UTF-8 (seperti CoffeeScript), atau dapat melakukan deteksi pengkodeannya sendiri.
Kompilasi miring yang dihasilkan kode sumber ruby yang diproduksi oleh mesin templat dan menggunakannya kembali pada doa templat berikutnya. Tolok ukur menunjukkan ini menghasilkan peningkatan kinerja 5x-10x lebih dari mengevaluasi sumber Ruby pada setiap doa.
Kompilasi template saat ini didukung untuk mesin templat ini: StringTemplate, ERB, Erubis, Erubi, Haml, Nokogiri, Builder dan Yajl.
Tilt adalah Hak Cipta (C) 2010 Ryan Tomayko dan didistribusikan di bawah lisensi MIT. Lihat file COPYING
untuk info lebih lanjut.