Haml 變更記錄
6.3.0
6.2.5
- 棄用在 v6.1.3 中新增的
Haml::RailsTemplate#default_format
,用於 Turbo(討論)
6.2.4
- 支援大小寫判斷式 #1155
6.2.3
- 復活 RDFa doctype 支援 #1147
6.2.2
- 允許將自訂屬性新增至
Haml::BOOLEAN_ATTRIBUTES
#1148 - 將
aria-xxx: false
視為布林屬性
6.2.1
- 修正 v6.2.0 在呈現動態
aria
屬性時的錯誤 #1149
6.2.0
- 移除 C 擴充套件 #1146
6.1.4
- 讓
Haml::Util.escape_html
使用ERB::Escape
(如果可用)#1145
6.1.3
- 新增
Haml::RailsTemplate#default_format
以相容 Turbo #1144
6.1.2
- 將 Rails 範本路徑用作
filename
#1140
6.1.1
- 修正 Ruby 3.1 的 Hash 簡寫語法產生空白輸出的問題 #1083
6.1.0
- 最佳化移除
=
範本上的to_s
呼叫 - 修正
to_s
時傳回html_safe
字串的物件的跳脫 #1117
6.0.12
- 修正
>
和if
-else
敘述移除空白 #1114
6.0.11
- 修正
>
和if
敘述移除空白 #1114
6.0.10
- 在範本內容中評估 :erb 篩選器,就像 Haml 5
6.0.9
- 支援 sass 嵌入 #1112
6.0.8
- 支援 HTML 註解中的內插,自 6.0.0 以後一直無法運作 #1107
6.0.7
Haml::Engine
和Haml::Template
使用 StringBuffer,而非 ArrayBuffer- 在許多情況下,搭配最近的 Ruby 版本似乎效能較佳。
Haml::RailsTemplate
沒有受到影響。
6.0.6
- 防止 CRuby 意外使用 Ruby 實作後備
- 還原 v6.0.3 和 v6.0.4 所做的變更,但仍支援 Wasm。
6.0.5
- 復活物件參考中的
#haml_object_ref
支援 #1097- 這項功能在 6.0.0 中移除,並在這個版本中重新加入。
- 停止警告
remove_whitespace: true
選項。
6.0.4
於 2022 年 10 月 2 日發布 (diff).
- 修正屬性中
%
的剖析失敗 #1096 - 為 Wasm 新增另一個從 C 到 Ruby 的後備。
6.0.3
於 2022 年 9 月 28 日發布 (差異).
- 對於 Wasm,當 C 擴充套件不可用時,退回到 Ruby。
6.0.2
於 2022 年 9 月 28 日發布 (差異).
- 取消 Rails #1088 中
surround
、succeed
和precede
的 HTML 安全引數的跳脫。
6.0.1
於 2022 年 9 月 23 日發布 (差異).
6.0.0
於 2022 年 9 月 21 日發布 (差異).
- 用 Hamlit 取代實作
- 在 此基準測試 中,Haml 6 比 Haml 5 快約 1.7 倍。
- 保留解析器,但其他所有內容都已取代。
haml
CLI 介面也已取代。Haml::Engine
的介面已變更。Haml::Template
現在很可能是您需要的。- 之前:
Haml::Engine.new("%p Haml code!").render
- 之後:
Haml::Template.new { "%p Haml code!" }.render
- 之前:
- 已移除大部分 Haml 輔助函式。
- Rails
- 保留:
find_and_reserve
、preserve
、surround
、precede
、succeed
、capture_haml
- 已移除:
block_is_haml?
、flatten
、haml_concat
、haml_indent
、haml_tag
、haml_tag_if
、html_attrs
、html_escape
、init_haml_helpers
、is_haml?
、list_of
、non_haml
、tab_down
、tab_up
、with_tabs
- 保留:
- Tilt
- 保留:
preserve
- 移除:
block_is_haml?
、capture_haml
、escape_once
、find_and_preserve
、flatten
、haml_concat
、haml_indent
、haml_tag
、haml_tag_if
、html_attrs
、html_escape
、init_haml_helpers
、is_haml?
、list_of
、non_haml
、precede
、succeed
、surround
、tab_down
、tab_up
、with_tabs
- 保留:
:ruby
濾鏡- 移除:
haml_io
- 移除:
- 移除的輔助函式的替代方案
- 某些簡單的函式可以透過複製原始定義來運作。
- 對於產生一般 HTML 標籤的輔助函式,也可以考慮使用框架提供的函式,例如 Rails 的
content_tag
。這也適用於capture_haml
,例如 Rails 的capture
。 - 仰賴
Haml::Buffer
的函式在設計上沒有直接的替代方案。它們的存在是以效能為代價。您需要定義一個輔助函式,在其中實例化一個字串緩衝區,將內容附加到緩衝區,並在=
內部呼叫它。
- Rails
- 只有下列屬性和
aria
/data
屬性被視為布林屬性allowfullscreen
、async
、autobuffer
、autofocus
、autoplay
、checked
、controls
、default
、defer
、disabled
、download
、formnovalidate
、hidden
、inert
、ismap
、itemscope
、loop
、multiple
、muted
、novalidate
、open
、pubdate
、readonly
、required
、reversed
、scoped
、seamless
、selected
、sortable
、truespeed
、typemustmatch
- 只有
data
和aria
屬性支援使用巢狀雜湊來呈現連字號屬性,例如data: { foo: 'bar' }
會變成data-foo="bar"
,但這不再適用於非data
/aria
屬性。 - 移除了一些舊版的 Rails 整合。
escape_html
選項的預設值變為 true。-
腳本行不再支援擷取。只有=
行才支援產生巢狀區塊。- 不再支援使用另一個具有相同名稱的虛假
data-*
屬性來覆寫data
屬性。 #1105 - :erb 篩選器不會在範本內容中執行(已在 6.0.10 中修正)
5.2.2
於 2021 年 7 月 27 日發布(diff)。
- 支援 Rails 6.1 的
config.action_view.annotate_rendered_view_with_filenames = true
5.2.1
於 2020 年 11 月 30 日發布(diff)。
- 新增屬性的「多行」支援 #1043
5.2
於 2020 年 9 月 28 日發布(diff)。
- 修正屬性最佳化器在 TrueClass / FalseClass 中覆寫
#inspect
時的崩潰 #972 - 不對宣告為純文字的範本進行 HTML 轉譯 #1014(感謝 @cesarizu)
- 類別名稱不再按照字母順序排列,現在遵循 REFERENCE #306 中規定的新規格
5.1.2
於 2019 年 8 月 6 日發布 (diff).
5.1.1
於 2019 年 5 月 25 日發布 (diff).
- 修正發生在 ruby 2.6.1-2.6.3 + haml 5.1.0 + rails < 5.1 + erubi 的 NameError 錯誤。(Akira Matsuda)
5.1.0
於 2019 年 5 月 16 日發布 (diff).
- Rails 6 支援 #1008(感謝 Seb Jacobs)
- 新增
escape_filter_interpolations
選項,以向後相容 haml 4 預設值 #984(感謝 Will Jordan) - 修正 :javascript 和 :css 篩選區塊為空時的錯誤 #986(感謝 Will Jordan)
- 在
Haml::TempleEngine
選項中尊重 Haml::Options.defaults 的變更(Takashi Kokubun) - 取消凍結 TempleEngine 預編譯的字串常數 #983(感謝 Will Jordan)
- 各種效能/記憶體改善 #965、#966、#963(感謝 Dillon Welch)
- 為所有 .rb 檔案啟用
frozen_string_literal
魔術註解 #967(感謝 Dillon Welch)
5.0.4
於 2017 年 10 月 13 日發布(diff)。
- 修正 5.0.2 中
haml -c --stdin
回歸。 #958(感謝 Timo Göllner) - 支援 Ruby 2.5(由於 Ripper API 變更,導致無法運作)。(Akira Matsuda)
5.0.3
於 2017 年 9 月 7 日發布(diff)。
- 使用
String#dump
代替String#inspect
來產生字串字面值。(Takashi Kokubun) - 修正 Erubi 超類別不符錯誤。 #952(感謝 Robin Daugherty)
5.0.2
於 2017 年 8 月 1 日發布(diff)。
- 如果產生 Ruby 程式碼為語法錯誤,則讓
haml -c
失敗。 #880(Takashi Kokubun) - 修正 Sprockets 3 和 :sass 濾鏡導致的
NoMethodError
錯誤。 #930(感謝 Gonzalez Maximiliano) - 修正
list_of
輔助程式,支援多行內容。 #933(感謝 Benoit Larroque) - 最佳化渲染效能,變更時機以修正文字區域。 #941(Takashi Kokubun)
- 修正
TypeError
,使用空白 :ruby 篩選器。 #942(Takashi Kokubun) - 修正屬性排序順序不一致。(Takashi Kokubun)
5.0.1
於 2017 年 5 月 3 日發布(diff)。
- 修正包含字串內插的屬性剖析。 #917 #921
- 停止在 gem 套件中散布測試檔案,並允許在 Windows 上安裝。
- 僅在 ActionView 上使用 ActionView 的 Erubi/Erubis 處理器,作為 erb 篩選器。 #914
5.0.0
於 2017 年 4 月 26 日發布(diff)。
重大變更
- Haml 現在需要 Ruby 2.0.0 或更高版本。
- 不再支援 Rails 3,符合官方 Ruby on Rails 維護政策。如果您要使用 Rails 3,請使用 Haml 4。(Tee Parham)
- 移除
:ugly
選項(#894) haml
指令的偵錯選項(-d
)不再執行 Haml 程式碼,而是檢查產生的 Ruby 語法是否有錯誤。- 從
Haml::Engine
中移除剖析器/編譯器存取器。請改為修改Haml::Engine#initialize
選項或Haml::Template.options
。(Takashi Kokubun) - 移除動態引號支援,並始終對
escape_html
/escape_attrs
的'
進行跳脫。此外,跳脫後的結果會略微變更,並始終統一為相同的字元。(Takashi Kokubun) - 屬性中不保留換行符號。(Takashi Kokubun)
-
在篩選器中轉譯 HTML 插補程式碼。 #770(Matt Wildig)
:javascript #{JSON.generate(foo: "bar")} Haml 4 output: {"foo":"bar"} Haml 5 output: {"foo":"bar"}
已新增
- 新增追蹤選項。啟用時,Haml 會在每個標籤上輸出 data-trace 屬性,顯示從其產生來源 Haml 檔案的路徑。感謝 Alex Babkin。
- 新增
haml_tag_if
,用於有條件地將區塊包覆在另一個元素中(Matt Wildig) - 支援 Rails 5.1 Erubi 範本處理程式。
- 支援 Sprockets 3。感謝 Sam Davies 和 Jeremy Venezia。
- 一般效能和記憶體使用率改善。(Akira Matsuda)
- 使用 Ripper 分析屬性值,並預先轉譯靜態屬性。(Takashi Kokubun)
- 最佳化屬性轉譯,速度快約 3 倍。(Takashi Kokubun)
- 新增 temple gem 作為相依性,並建立
Haml::TempleEngine
類別。Haml::Compiler
中的一些方法已移轉至Haml::TempleEngine
。(Takashi Kokubun)
已修正
- 修正屬性合併。當舊式屬性雜湊中使用屬性方法(或文字巢狀雜湊),並且還有一個(非靜態)新式雜湊時,會產生錯誤。此修正可能會在某些情況下導致不同的行為。請參閱提交訊息以取得詳細資訊。(Matt Wildig)
- 讓 escape_once 尊重十六進位參考。(Matt Wildig)
- 合併屬性雜湊時,不要特別處理「資料」屬性。(Matt Wildig 和 Norman Clarke)
- 修正 #@foo 和 #$foo 式樣內插,此內插在 html_safe 模式中無法運作。(Akira Matsuda)
- 允許
@
作為標籤的類別名稱。感謝 Joe Bartlett。 - 當屬性名稱包含無效字元時,引發
Haml::InvalidAttributeNameError
。(Takashi Kokubun) - 初始化
ActionView::OutputBuffer
時,不要忽略意外例外。(Takashi Kokubun)
4.0.7
2015 年 8 月 10 日發布(diff)。
- 大幅改善用於修正文字區域中空白處理的正規表示式的效能(感謝 Stan Hu)。
4.0.6
2014 年 12 月 1 日發布(diff)。
- 修正 Ruby 1.8.7 上的警告「正規表示式具有無效區間」(感謝 Elia Schito)。
4.0.5
2014 年 1 月 7 日發布(diff)。
- 修正 haml_concat 在呼叫 haml_tag 之後附加未跳脫的 HTML。
- 修正錯誤,當 HAML :ugly 選項為「true」時,ActionView::Helpers::CaptureHelper::capture 傳回整個檢視緩衝區,即使傳入的區塊沒有傳回任何內容(感謝 Mircea Moise)。
4.0.4
於 2013 年 11 月 5 日發布(diff)。
- 檢查 Rails::Railtie,而非 Rails(感謝 Konstantin Shabanov)。
- 修正解析器,允許使用 suppress_eval 的字面「#」(Matt Wildig)。
- Helpers#escape_once 可用於凍結字串(與 ERB::Util.html_escape_once 相同,後者在 Rails 中被 Helpers#escape_once 取代(感謝 Patrik Metzmacher)。
- 修正小錯誤(感謝 Mircea Moise)。
4.0.3
於 2013 年 5 月 21 日發布(diff)。
- 與較新版本的 Rails 的 Erubis 處理程式相容。
- 修正 Erubis 處理程式,以與 Tilt 1.4.x 相容。
- 針對 html_escape 進行小幅效能最佳化。(感謝 Lachlan Sylvester)
- 修正文件。
- 記錄一些未包含在參考中的輔助方法。(感謝 Shane Riley)
4.0.2
於 2013 年 4 月 5 日發布(diff)。
- 明確需要 Erubis 來解決 Tilt 舊版本中的錯誤。
- 修正 :erb 篩選器在 Rails 檢視中列印重複內容。(感謝 Jori Hardman)
- 將範圍替換為切片,以減少由
capture_haml
建立的物件。(感謝 Tieg Zaharia) - 更正/改善部分文件。
4.0.1
於 2013 年 3 月 21 日發布(diff)。
- 移除 Rails 3.2.3+ textarea hack,改用更通用的解決方案。
- 修正部分效能回歸。
- 修正對 Rails 4
text_area
輔助方法的支援。 - 修正資料屬性扁平化與單例物件。(感謝 Alisdair McDiarmid)
- 修正對 sass-rails 4.0 beta 的支援。(感謝 Ryunosuke SATO)
- 在 Railtie 中載入「haml/template」,以防止在 Rails 初始化設定中設定的使用者選項被覆寫
- 不要在 haml/template 中依賴 Rails,以允許在 ActionView 中使用 Haml,但不用 Rails 本身。(感謝 Hunter Haydel)
4.0.0
-
Haml 可執行檔現在接受
--autoclose
選項。您現在可以指定應自動關閉的標籤清單 -
:ruby
篩選器不再將 $stdout 重新導向到 Haml 文件,因為這不是執行緒安全的。它會提供一個haml_io
本地變數,這是一個寫入文件的 IO 物件。 -
HTML5 現在是預設輸出格式,而非 XHTML。這已經是 Rails 3+ 的預設值,因此許多使用者不會察覺到差異。
-
:sass 篩選器現在將其輸出包裝在樣式標籤中,就像新的 :less 和 :scss 篩選器一樣。:coffee 篩選器將其輸出包裝在腳本標籤中。
-
Haml 現在僅支援 Rails 3 以上和 Ruby 1.8.7 以上。如果您仍需要 Rails 2 和 Ruby 1.8.6 的支援,請使用 Haml 3.1.x,它將持續維護以修正錯誤。
-
當格式為 html4 或 html5 時,:javascript 和 :css 篩選器不再加入 CDATA 標籤。這可以透過將
cdata
選項設定為true
來覆寫。當格式為 xhtml 時,將永遠加入 CDATA 標籤。 -
HTML2Haml 已萃取到一個獨立的 gem,創意地命名為「html2haml」。
-
:erb
篩選器現在使用 Rails 的安全輸出緩衝區來提供 XSS 安全性。 -
Haml 的內部已被重構,將剖析器、編譯器和選項處理移到獨立的類別中,而不是全部包含在 Engine 模組中。您也可以在 Haml::Options 中指定您自己的自訂 Haml 剖析器或編譯器類別,以便合理地延伸或修改 Haml。
-
新增一個
:hyphenate_data_attrs
選項,它會將底線轉換為 HTML5 資料鍵中的連字號。這是 3.1 中的語言變更,且預設為啟用狀態。(感謝 Andrew Smith) -
現在所有雜湊屬性值都視為 HTML5 資料,不論金鑰為何。以前只有「資料」金鑰會這樣處理。允許任意金鑰表示您現在可以輕鬆使用此功能來處理 Aria 屬性,以及其他用途。(感謝 Elvin Efendi)
-
新增
remove_whitespace
選項,用於永遠移除 Haml 標籤周圍的所有空白。(感謝 Tim van der Horst) -
Haml 現在會將深度巢狀的資料屬性雜湊扁平化。例如
.foo{:data => {:a => "b", :c => {:d => "e", :f => "g"}}}
會轉譯成
<div class='foo' data-a='b' data-c-d='e' data-c-f='g'></div>
(感謝 Péter Pál Koszta)
-
依賴第三方範本引擎的濾鏡現在使用 Tilt 實作。已經新增多個新濾鏡,包括 SCSS (:scss)、LessCSS、(:less) 和 Coffeescript (:coffee/:coffeescript)。
儘管「官方」濾鏡清單刻意維持精簡,Haml 附帶一個輔助方法,讓新增支援其他基於 Tilt 的範本引擎變得非常容易。
從 4.0 開始,Haml 也會附帶一個「haml-contrib」寶石,其中包含實用但較不常使用的濾鏡和輔助程式。這包括多個額外濾鏡,例如 Nokogiri、Yajl、Markaby 等。
-
如果存在,根據
#to_key
產生物件參考,優先於#id
。 -
效能改善。(感謝 Chris Heald)
-
輔助程式
list_of
會接收一個額外參數,轉譯成清單項目屬性。(感謝 Iain Barnett) -
修正解析器以允許以
some_method?
結尾的行成為 Ruby 多行字串。(感謝 Brad Ediger) -
當已呈現範本的 mime_type 為「text/xml」時,總是使用 :xhtml 格式。(感謝 Stephen Bannasch)
-
html2haml 現在包含
--html-attributes
選項。(感謝 Stefan Natchev) -
修正迴圈中內部空白移除。(感謝 Richard Michael)
-
在屬性中跳脫雙引號和單引號時,使用數字字元參考而非 HTML 實體。這可解決 Internet Explorer 9 之前的版本中的一些錯誤。(感謝 Doug Mayer)
-
修正多行無聲註解:Haml 之前不允許在多行無聲註解中自由縮排。
-
修正 Rails 中部分版面的排序錯誤。(感謝 Sam Pohlenz)
-
加入命令列選項以禁止腳本評估。
-
現在可以在 Sass 和 SCSS 濾鏡中使用 Rails 的資產輔助程式。請注意,為此,您必須確保在製作環境中載入 sass-rails,通常是透過將其移出 assets 寶石群組。
-
Haml 專案現在使用 語意化版本控制。
3.2.0
Haml 3.2 系列只發布到 3.2.0.rc.4,但當專案採用語意化版本控制時,便重新命名為 Haml 4.0。
3.1.8
- 修正巢狀區塊中例外情況所回報的行號。(感謝 Grant Hutchins 和 Sabrina Staedt)
3.1.7
- 修正與 Sass 3.2.x 的相容性。(感謝 Michael Westbom)
3.1.6
- 在縮排模式中,不要重新縮排包含保留標籤的緩衝區,並為 Rails 3.2.3 的 textarea 輔助程式提供更佳的解決方案。
3.1.5
-
在跳脫屬性值時尊重 Rails 的
html_safe
旗標(感謝 Gerad Suyderhoud)。 -
修復 Rails 3.2.3 textarea 輔助程式(感謝 James Coleman 和其他人)。
3.1.4
- 修復在 Haml 中使用
FormBuilder#block
和標籤。 - 修復具有動態屬性的自閉合標籤後的縮排。
3.1.3
- 停止部分佈局兩次顯示。
3.1.2
-
如果 ActionView
#capture
輔助程式用於 Haml 範本中,但沒有在區塊中執行任何 Haml,則傳回區塊的值,而不是擷取的緩衝區。 -
在文字嵌套在註解中時不要擲出錯誤。
-
修復 html2haml。
-
修復 Rails SafeBuffer 有時會執行破壞性修改的問題。
-
使用字元代碼實體來替換屬性值,而不是命名/關鍵字實體。
3.1.1
- 將附帶的 Sass 更新至版本 3.1.0。
3.1.0
-
當
:format
設為:html5
時,不要將type
屬性新增至濾鏡產生的<script>
和<style>
標籤。 -
新增
:escape_attrs
選項,允許屬性保持不跳脫(例如將 PHP 指令嵌入 Haml)或總是跳脫,而不是#escape_once
。這也可以透過--no-escape-attrs
從命令列使用。 -
允許從命令列載入自訂篩選器。
向後不相容性 – 務必閱讀!
-
移除
haml
執行檔的--rails
旗標。此旗標自 Rails 2.0 起就不再必要。現有的 Rails 2.0 安裝將繼續運作。 -
終止對 Hpricot 0.7 的支援。0.8 已推出近兩年。
3.0.25
- HTML 轉 Haml 轉換現在可以在 Ruby 中運作,即使 Hpricot 在
haml/html
之前載入。
3.0.24
-
html2haml
現在可以正確產生嵌套在區塊中的靜默指令碼表達式的 Haml。 -
IronRuby 相容性。這有點像駭客手法:IronRuby 回報其版本為 1.9,但它不支援編碼 API,因此我們將其視為 1.8。
3.0.23
-
修正 Ruby 1.9.2 下執行執行檔時無法載入模組的錯誤訊息。
-
修正結合舊式和新式屬性時的錯誤。
3.0.22
-
允許在
case
之後、when
之前有空行。 -
移除
vendor/sass
,它錯誤地潛入 gem 中,並造成 Heroku 使用者的問題(感謝 Jacques Crocker)。 -
支援 Rails 3.1 範本處理器 API。
3.0.21
- 徹底修正權限錯誤。
3.0.20
- 修正一些權限錯誤。
3.0.19
-
修正 Ruby 1.9.2 下的
:encoding
選項。 -
在啟用 HTML 轉義時修正內插 if 陳述式。
-
允許
--unix-newlines
旗標在 Unix 上運作,在那裡它是一個空操作。
3.0.18
-
為了與 JRuby 下的 bundler 相容,在 gemspec 中不需要
rake
。感謝 Gordon McCreight。 -
在安裝時擺脫惱人的 RDoc 錯誤。
-
當安裝
haml-rails
時,消除對Rails
模組的參考歧義。 -
修正
haml_tag
中的一個錯誤,該錯誤會允許新增重複的屬性,並使data-
屬性無法運作。 -
與 Rails 3 final 相容。
3.0.17
- 了解 mingw 算作 Windows。
3.0.16
-
修正一個 html2haml ERB 解析錯誤,在該錯誤中,ERB 塊偶爾會在 Haml 中沒有縮排。
-
修正解析
if
和case
陳述式,其值已指派給變數。不過,這仍然是糟糕的風格。 -
當傳遞一個在輔助程式中傳回字串的區塊時,修正
form_for
和form_tag
。
3.0.15
在 Haml 3.0.14 和 3.0.15 版本之間沒有任何變更。
3.0.14
-
允許 CSS 風格的類別和 id 包含冒號。
-
修正 if 陳述式中一個難以察覺的錯誤。
Rails 3 支援
- 請勿使用 Rails 3 不再提供的
#returning
方法。
3.0.13
Rails 3 支援
已移除對 Rails 3 beta 4 之前版本的支援。如果您尚未升級,請升級至 Rails 3.0.0.beta4。
次要改進
- 適當地處理具有編碼宣告的凍結字串。
3.0.12
Rails 3 支援
顯然,由於特定寶石組合導致不一致的載入順序,上一個版本在 Rails 3 中以新的且令人興奮的方式中斷。3.0.12 針對該不一致性進行修改,應完全相容於 Rails 3。
已棄用:Rails 3 Beta 3
Haml 對 Rails 3.0.0.beta.3 的支援已棄用。Haml 3.0.13 將僅支援 3.0.0.beta.4。
3.0.11
3.0.10
Appengine-JRuby 支援
我們判斷 Haml 安裝位置的方式不再中斷 appengine-jruby
使用的 JRuby 版本。
錯誤修正
html2haml
現在適當地處理單行註解。
3.0.9
Haml 在 3.0.8 和 3.0.9 版本之間沒有任何變更。Gemcutter 中的錯誤導致寶石上傳不當。
3.0.8
- 修正 Rails 3 之前版本的錯誤。
3.0.7
編碼支援
Haml 3.0.7 新增對 Ruby 風格 -# coding:
註解的支援,以宣告範本的編碼。詳細資訊請參閱 參考。
當未設定 :encoding
選項 時,這也會稍微變更 Haml 的行為。它並非預設為 "utf-8"
,而是預設為原始文件編碼,而且僅當此編碼為 "us-ascii"
時才會改回 "utf-8"
。
haml
執行檔現在也採用 -E
選項來指定編碼,其運作方式與 Ruby 的 -E
選項相同。
其他變更
- 在 Rails 3 下執行時,預設為
:html5
格式,因為它也預設為 HTML5。
錯誤修正
- 在為類似
<span>foo</span>,
的內容產生 Haml 時,使用= succeed
而不是- succeed
(後者無法運作)。
3.0.6
Rails 2.3.7 支援
此版本完全支援 Rails 2.3.7。
已移除 Rails 2.3.6 支援
Rails 2.3.6 發布時,包含了與 XSS 保護和與 Haml 介面相關的各種錯誤。Rails 2.3.7 在不久後發布,修正了這些錯誤。因此,Haml 不再支援 Rails 2.3.6,而任何使用它的使用者都應該升級到 2.3.7。
嘗試在 Rails 2.3.6 中使用 Haml 會導致錯誤。
3.0.5
Rails 2.3.6 支援
此版本已修正 Rails 2.3.6 中的各種錯誤,讓 Haml 達到完全相容性。
Rails 3 支援
確保 Rails 3 中的 #capture
輔助程式不會將其值直接列印到範本中。
3.0.4
Haml 3.0.3 和 3.0.4 版之間沒有任何變更。
3.0.3
Rails 3 支援
為了讓某些 Rails 載入錯誤更容易偵錯,當 Sass 載入時,如果 Rails.root
為 nil
,Sass 現在會引發錯誤。以前,這只會導致路徑設定錯誤。
3.0.2
Haml 3.0.1 和 3.0.2 版之間沒有任何變更。
3.0.1
在 Rails 中安裝
在 Rails 中安裝 Haml 時,不再需要 haml --rails
。現在您只需要將 gem "haml"
加入 Rails 3 的 Gemfile,或將 config.gem "haml"
加入先前版本的 config/environment.rb
。
haml --rails
仍然會運作,但它已被棄用,而且會印出錯誤訊息。它不會在下一版的 Haml 中運作。
Rails 測試速度
在 Rails 的測試環境中,:ugly
選項 現在預設開啟,以協助測試更快執行。
3.0.0
向後不相容:務必閱讀!
puts
輔助程式已移除。請改用 Haml::Helpers#haml_concat。
更實用的多行
Ruby 程式碼現在可以換行,只要每一行(最後一行除外)都以逗號結尾即可。例如
= link_to_remote "Add to cart",
:url => { :action => "add", :id => product.id },
:update => { :success => "cart", :failure => "error" }
haml_tag
和 haml_concat
改進
使用 CSS 選擇器的 haml_tag
haml_tag 幫手現在可以使用一個字串,使用與標準 Haml 程式碼中相同的類別/識別碼簡寫。手動指定的類別和識別碼屬性會合併,再次如同標準 Haml 程式碼。例如
haml_tag('#foo') #=> <div id='foo' />
haml_tag('.bar') #=> <div class='bar' />
haml_tag('span#foo.bar') #=> <span class='bar' id='foo' />
haml_tag('span#foo.bar', :class => 'abc') #=> <span class='abc bar' id='foo' />
haml_tag('span#foo.bar', :id => 'abc') #=> <span class='bar' id='abc_foo' />
乾杯,S. Burkhard。
具有多行內容的 haml_tag
haml_tag 幫手在格式化具有多行內容的標籤時也做得更好。如果標籤具有多層級的內容,該內容會縮排在標籤下方。例如
haml_tag(:p, "foo\nbar") #=>
# <p>
# foo
# bar
# </p>
具有多行內容的 haml_tag
類似地,haml_concat 幫手會適當地縮排多行內容。例如
haml_tag(:p) {haml_concat "foo\nbar"} #=>
# <p>
# foo
# bar
# </p>
具有 :ugly
的 haml_tag
和 haml_concat
當 :ugly
選項 已啟用,haml_tag 和 haml_concat 就不會對其引數進行任何縮排。
基本標籤改善
-
現在可以透過在該物件上實作
haml_object_ref
方法,自訂用於 物件參考 的名稱。此方法應傳回一個字串,用於取代產生類別和識別碼中物件的類別名稱。感謝 Tim Carey-Smith。 -
所有屬性值都可能是非字串類型。其
#to_s
方法會被呼叫以將其轉換為字串。先前,這只適用於class
以外的屬性。
:class
和 :id
屬性接受 Ruby 陣列
在屬性雜湊中,:class
屬性現在接受一個陣列,其元素會轉換為字串並使用 :id
屬性現在接受一個陣列,其元素會轉換為字串並使用 "_"
連結。陣列會先扁平化,任何測試為 false 的元素都會被移除。例如
.column{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] }
可以呈現為任何
class="column numeric sort ascending"
class="column numeric"
class="column sort descending"
class="column"
這取決於 @item.type
是 "numeric"
或 nil
,@item == @sortcol
,以及 @sortdir
是 "ascending"
或 "descending"
。
仍然可以指定單一值。如果該值評估為 false,則會忽略它;否則,它會轉換為字串。例如
.item{:class => @item.is_empty? && "empty"}
可以呈現為任一
class="item"
class="item empty"
感謝 Ronen Barzel。
HTML5 自訂資料屬性
使用雜湊值建立名為 :data
的屬性,將會產生 HTML5 自訂資料屬性。例如
%div{:data => {:author_id => 123, :post_id => 234}}
會編譯為
<div data-author_id='123' data-post_id='234'></div>
感謝 John Reilly。
更強大的 :autoclose
選項
:attributes
選項現在可以採用正規表示式,用來指定哪些標籤要變成自關閉。
--double-quote-attributes
選項
Haml 可執行檔現在有一個 --double-quote-attributes
選項(簡寫:-q
),會讓屬性使用雙引號而不是單引號。感謝 Charles Roper。
:css
篩選器
Haml 現在支援一個 :css
篩選器,會用 <style>
和 CDATA 標籤包圍篩選出的文字。
haml-spec
整合
我們已經將 haml-spec 專案的跨實作測試加入標準 Haml 測試套件中,以確保我們能與眾多且不同的 Haml 實作 的基本功能保持相容性。
支援 Ruby 1.9
-
當給予一個範本,其編碼包含無效的位元組序列,Haml 和
html2haml
現在會產生更具說明性的錯誤,包括行號和有問題的字元。 -
Haml 和
html2haml
現在接受帶有 位元組順序標記 的 Unicode 文件。
Rails 支援
- 當
form_for
與=
一起使用,或form_tag
與=
和一個區塊一起使用時,它們現在會引發錯誤,說明它們應該與-
一起使用。這類似於 Haml::Helpers#haml_concat 的行為,並有望為一些使用者清除一些困難的錯誤。
Rip 支援
Haml 現在與 Rip 套件管理系統相容。感謝 Josh Peek。
html2haml
改進
-
現在支援 ERB 中的 Ruby 區塊。Haml 程式碼正確縮排,且
end
已移除。這包括具有區塊的方法和所有語言結構,例如if
、begin
和case
。例如<% content_for :footer do %> <p>Hi there!</p> <% end %>
現在轉換為
- content_for :footer do %p Hi there!
感謝 Jack Chen 和 Dr. Nic Williams 啟發了這一點,並建立了程式的初稿。
-
內嵌 HTML 文字節點現在轉換為內嵌 Haml 文字。例如,
<p>foo</p>
現在變成%p foo
,而之前它變成%p foo
內嵌註解和在 ERB 模式下執行的內嵌 ERB 也是如此:
<p><%= foo %></p>
現在將變成%p= foo
。 -
包含在文字中的 ERB 現在轉換為 Ruby 內插。例如
<p> Foo <%= bar %> baz! Flip <%= bang %>. </p>
現在轉換為
%p Foo #{bar} baz! Flip #{bang}.
-
<script>
標籤現在轉換為:javascript
篩選器,而<style>
標籤轉換為:css
篩選器。且縮排保留。例如<script type="text/javascript"> function foo() { return 12; } </script>
現在轉換為
:javascript function foo() { return 12; }
-
<pre>
和<textarea>
標籤現在轉換為:preserve
篩選器。例如<pre>Foo bar baz</pre>
現在轉換為
%pre :preserve Foo bar baz
-
自閉合標籤(例如
<br />
)現在轉換為自閉合 Haml 標籤(例如%br/
)。 -
IE 條件註解現在已正確解析。
-
屬性現在以更標準的格式輸出,大括號內沒有空格(例如
%p{:foo => "bar"}
,而不是%p{ :foo => "bar" }
)。 -
包含
#
和.
的 ID 和類別現在輸出為字串屬性(例如%p{:class => "foo.bar"}
)。 -
屬性現在已排序,以維持確定性順序。
-
在必要時,使用內聯格式時會插入
>
或 #succeed。 -
多行 ERB 陳述式現在已正確縮排,且沒有任何內容的陳述式會被移除。
次要改進
-
使用
:ugly
時,capture_haml 現在更快。感謝 Alf Mikula。 -
新增
RDFa
文件類型捷徑。
2.2.24
-
不阻止 ActiveModel 表單元素套用錯誤格式。
-
確保
form_for
區塊在 Rails 3.0.0.beta.3 下正確縮排。 -
不觸發 Rails 3.0.0.beta.3 下
dynamic_form
外掛程式中的錯誤,該錯誤會導致其方法無法載入。
2.2.23
-
在安裝 Haml 的 Rails 中執行
rake gems
時不當機。感謝 Florian Frank。 -
不移除內插過濾器中的
\n
。 -
消除那些惱人的
"regexp match /.../n against to UTF-8 string"
警告。
2.2.22
-
加入一個 railtie,讓 Haml 和 Sass 可以自動載入 Rails 3。感謝 Daniel Neighman。
-
加入一個棄用訊息,說明在 Rails 3 中使用
-
搭配form_for
等會傳回字串的方法。這是 Rails 3 中的棄用訊息。 -
確保在使用 filter 時,行號可以正確回報。
-
讓載入 gemspec 時,不會在 Heroku 等唯讀檔案系統中崩潰。
-
當方法(例如 Rails 3 beta 中的
form_for
)傳回nil
時,不要崩潰。 -
相容於 Rails 3 beta 的 RJS 設施。
2.2.21
-
修正 Haml::Version 中 git-revision-reporting 的幾個錯誤。特別是,如果最近呼叫了
git gc
,或各種檔案遺失時,它仍然會運作。 -
在
Rakefile
中讀取 Haml repo 內的檔案時,總是使用__FILE__
。根據 此錯誤回報,這應該可以讓 Haml 與 Bundler 更佳相容。 -
根據使用者的回饋,讓
- end
的錯誤訊息更直覺。 -
相容於在 Rails 3 中傳回字串,而不是串接至範本的方法(例如
form_for
)。 -
新增 with_tabs 輔助函式,可設定區塊期間的縮排層級。
2.2.20
-
使用 Rails 2.3.5 的 Rails XSS 保護時,
form_tag
Rails 輔助函式現在會正確標示為 HTML 安全。 -
在非常舊的版本 (1.2.x) 中,呼叫
defined?
不應干擾 Rails 的自動載入。 -
修正一個錯誤,在 Rails 3.0 beta 中,呼叫 ActionView 的
render
方法搭配區塊和配置時會失效。 -
修正一個錯誤,在 Rails 3.0 beta 中,Haml::Helpers#haml_concat 的巢狀呼叫的關閉標籤未正確轉譯。
2.2.19
- 修正與 Rails XSS 支援整合的錯誤。特別是,正確覆寫
safe_concat
。
2.2.18
-
支援 Rails 3 中使用的 新的 XSS 保護 API。
-
在 Rails 3.0 中執行時,使用
Rails.env
而非RAILS_ENV
。感謝 Duncan Grazier。 -
新增
--unix-newlines
旗標至所有執行檔,以在 Windows 上輸出 Unix 風格的新行。 -
修正
:erb
濾鏡的幾個錯誤:確保錯誤回報使用正確的行號,並允許多行表達式。 -
修正包含
#
的 HTML 風格屬性的剖析錯誤。
2.2.17
-
使用
html2haml
時,修正 HTML5 文件類型宣告的編譯。 -
Sass 選項的
nil
值現在會被忽略,而非引發錯誤。
2.2.16
- 抽象出對
ActionView::TemplateError
、ActionView::TemplateHandler
等的參照。這些在 Rails 3.0 中都已重新命名為ActionView::Template::*
。
2.2.15
-
允許沒有內容的
if
陳述式,後接else
子句。例如:- if foo
- else bar
2.2.14
-
在 Ruby 1.9 中轉譯包含非 ASCII 字元的屬性時,不要列印警告。
-
解析
html2haml
中的 XHTML Strict doctype 時,不要發生崩潰。 -
使用
!!! 5
作為 doctype 宣告,在 XHTML 文件中支援 HTML5 doctype。
2.2.13
-
允許使用者指定
:encoding => "ascii-8bit"
,即使範本包含非 ASCII 位元組序列。這使得 Haml 範本在給定標記為具有 ASCII 編碼的非 ASCII 輸入時不會崩潰。 -
修正與用於
html2haml
的 Hpricot 0.8.2 不相容的問題。
2.2.12
在 Haml 2.2.11 和 2.2.12 版本之間沒有任何變更。
2.2.11
-
修正 XSS 保護的錯誤,其中如果傳遞非字串值,HTML 轉譯會引發錯誤。請注意,這不會影響在停用 XSS 保護時任何 HTML 轉譯。
-
修正外側空白移除的錯誤,其中僅空白的 Ruby 字串會阻擋空白移除。
-
使用
ensure
保護 Haml 輸出緩衝區重設,以防範在編譯的 Haml 程式碼中引發的例外狀況。 -
修正錯誤行號編號錯誤,如果在喧鬧指令碼 (
=
) 中引發錯誤,就會出現此錯誤。這不是最佳的解決方案,因為它會停用一些最佳化,但它不應產生太大影響,而且最佳化有望在 2.4 版中重新啟用。 -
如果安裝了外掛程式架構且執行
rake gems:install
,請不要崩潰。 -
不要直接使用
RAILS_ROOT
。這在 Rails 3.0 中不再存在。改為將此抽象為Haml::Util.rails_root
。此變更使 Haml 完全相容於此寫作時間點的邊緣 Rails。
2.2.10
-
修正具有動態屬性和沒有內容的元素會在開啟和關閉標籤之間有太多空白的錯誤。
-
將
rails/init.rb
改為不載入init.rb
,而是基本上複製其內容。這讓我們可以將適當的繫結傳輸到Haml.init_rails
。 -
確保 Haml 只在所有其他外掛載入後才嘗試啟用 XSS 保護整合。這讓它在 Haml 是寶石且
rails_xss
外掛正在使用時能正常運作。 -
將 Haml 範本的傳回值標記為 HTML 安全。這讓 Haml 部分範本能與 Rails 的 XSS 保護一起使用。
2.2.9
-
修正了 Haml 文字在特定情況下會串接至錯誤緩衝區的錯誤。這在 Rails 使用
capture
等方法時,主要是個問題。 -
修正了當一行有內插且啟用了
:escape_html
選項時,範本文字會被轉譯的錯誤。例如Foo < Bar #{"<"} Baz
使用
:escape_html
以前會轉譯為Foo &lt; Bar < Baz
但現在會轉譯為
Foo < Bar < Baz
Rails XSS 保護
Haml 2.2.9 支援 Rails 2.3.5+ 版本的 XSS 保護。這有幾個組成部分
-
如果啟用了 XSS 保護,Haml 的
:escape_html
選項會預設設定為true
。 -
宣告為 HTML 安全的字串不會被 Haml 轉譯,包括
#html_escape
輔助函式和&=
,如果:escape_html
已停用。 -
產生 HTML 的 Haml 輔助函式標記為 HTML 安全,如果其輸入不是 HTML 安全,則會轉譯其輸入。
2.2.8
- 修正 HTML 轉譯和古怪的 Unicode 亂碼的潛在 XSS 問題。這與 Rails 中稍早修正的問題 相同。
2.2.7
-
修正
html2haml
問題,其中 ERB 屬性值在轉換為 Haml 之前未取消 HTML 轉譯。 -
修正
html2haml
問題,其中#{}
在轉換為 Haml 之前未轉譯。 -
將
<code>
新增至 自動保留空白 的標籤清單中。 -
修正
end
後接靜默指令碼中程式碼的錯誤 - 當其巢狀在標籤下方時,不再擲回錯誤。 -
修正內部空白剔除和條件式的錯誤。條件式的
else
等子句現在會適當地剔除空白。
2.2.6
-
當無法載入 html2haml 的相依項時,讓錯誤訊息遵循
--trace
選項。 -
當 Ruby 檔案的
__FILE__
常數是相對路徑時,不要強制關閉,因為這有時會在 TextMate 中發生(感謝 Karl Varga)。 -
將「Sass」新增至執行檔的
--version
字串。 -
當靜態屬性中省略逗號時,引發例外狀況 (例如
%p{:foo => "bar" :baz => "bang"}
)。
2.2.5
-
移除開啟條件註解時產生的尾隨空白 (感謝 Norman Clarke)。
-
修正當數值識別碼作為屬性提供時,CSS 識別碼串接的問題 (感謝 Norman Clarke)。
-
修正使用字串中的「-end」時出現的幾個錯誤。
2.2.4
-
允許將
end
用於後面接有程式碼的無聲指令碼。例如- form_for do ... - end if @show_form
這不是很好的風格,但我們為了保持一致性而支援它。
-
透過
haml --rails
安裝時,不要將require 'rubygems'
新增至 init.rb 的頂端。這沒有必要,而且會在載入 haml/template 時遭到覆寫。
2.2.3
感謝 Jan Ulbrich,Haml 2.2.3 新增支援適用於 Google AppEngine 的 JRuby 綑綁工具。
2.2.2
Haml 2.2.2 是次要的錯誤修正版本,有幾個顯著的變更。首先,haml_concat
現在會在與 =
搭配使用時引發錯誤。這一直都是不正確的行為,而且事實上從未真正運作過。唯一的不同是現在它會大聲失敗。其次,Ruby 1.9 現在獲得更完整的支援,特別是在 新的屬性語法 中。第三,當啟用 :escape_html
選項 且使用 #{}
內插時,不再對篩選器進行跳脫。
2.2.1
Haml 2.2.1 是個次要的錯誤修正版本。
2.2.0
Haml 2.2 在這門語言中加入了數個新功能,修正了數個錯誤,並大幅提升了效能(特別是在啟用 :ugly
的情況下執行時)。
語法變更
HTML 樣式屬性語法
Haml 2.2 根據 HTML 語法,為屬性引進了一種新的語法。例如
%a(href="http://haml.dev.org.tw" title="Haml's so cool!")
%img(src="/images/haml.png" alt="Haml")
這樣做的原因主要有兩個。首先,雜湊樣式語法非常特定於 Ruby。現在有許多語言的 Haml 實作,每種語言都有其自己的雜湊語法(或字典或關聯陣列或無論它們被稱為什麼)。HTML 語法將會被所有這些語言採用,因此你可以安心地在任何你需要的語言中使用 Haml。
其次,雜湊樣式語法相當冗長。%img{:src => "/images/haml.png", :alt => "Haml"}
比 %img(src="/images/haml.png" alt="Haml")
長了八個字元。Haml 應該是要快速且輕鬆地撰寫範本;HTML 樣式屬性應該在這方面有很大的幫助。
Ruby 變數可以透過省略引號來做為屬性值。可以使用區域變數或實例變數。例如
%a(title=@title href=href) Stuff
這等同於
%a{:title => @title, :href => href} Stuff
由於屬性之間沒有逗號分隔,因此不允許更複雜的表達式。不過,你可以使用 #{}
內插在 HTML 樣式屬性中插入複雜的表達式
%span(class="widget_#{@widget.number}")
多行屬性
一般而言,Haml 嘗試將個別元素保持在單一行上。有一個 多行語法 可用於溢位到其他行,但它故意難以使用,以鼓勵使用較短的行。
不過,有一個情況溢位是合理的:屬性。通常一個標籤只會有許多屬性,而這種情況下允許溢位是有道理的。現在你可以將屬性雜湊延伸到多行
%script{:type => "text/javascript",
:src => "javascripts/script_#{2 + 7}"}
這也適用於 HTML 風格的屬性
%script(type="text/javascript"
src="javascripts/script_#{2 + 7}")
請注意,對於雜湊風格的屬性,換行必須在逗號之後。
通用內插
在 Haml 2.0 中,你可以使用 ==
來內插使用 #{}
的文字行中的 Ruby 程式碼。在 Haml 2.2 中,==
是不必要的;#{}
可用於任何文字。例如
%p This is a really cool #{h what_is_this}!
But is it a #{h what_isnt_this}?
此外,要 轉譯 或 取消轉譯 內插的程式碼,你只要分別在行的開頭加上 &
或 !
即可
%p& This is a really cool #{what_is_this}!
& But is it a #{what_isnt_this}?
彈性縮排
Haml 傳統上要求其使用者使用兩個空格的縮排。這是通用的 Ruby 風格,而且仍然強烈建議使用。然而,Haml 現在允許任何數量的空格或甚至使用 tab 來縮排,前提是
- Tab 和空格不能混用
- 縮排在給定的文件中是一致的
新的選項
:ugly
:ugly
選項在技術上並非新選項;它是在 Haml 2.0 中引入的,用於讓深度巢狀範本的渲染不那麼痛苦。然而,它在 Haml 2.2 中得到了極大的強化。它現在可以執行以前無法執行的各種效能最佳化,而且它的使用大幅提升了 Haml 的效能。它在 Rails 中的生產環境中預設啟用,而且強烈建議在其他架構的生產環境中使用。
:encoding
在 Ruby 1.9 下執行時,此選項會指定 Haml 範本的編碼。它預設為 Encoding.default_internal
或 "utf-8"
。這對於確保在處理非 ASCII 輸入資料時不會出現奇怪的編碼錯誤很有用。
已棄用
Haml::Helpers#puts
這個輔助程式已棄用,原因很明顯,它與 Kernel#puts
方法衝突。我為自己曾經選擇這個名稱感到羞恥。請改用 haml_concat
,讓我免於尷尬。
= haml_tag
許多人會不小心使用「= haml_tag
」。這一直都是錯誤的;haml_tag
會直接輸出到範本,因此應該用作「- haml_tag
」。現在,當您使用 =
時,它會引發錯誤。
相容性
Rails
Haml 2.2 與 Rails 完全相容,從 2.0.6 到最新版本的 edge,783db25。
Ruby 1.9
Haml 2.2 也完全相容於 Ruby 1.9。它支援 Ruby 1.9 樣式的屬性雜湊,並處理編碼相關問題(請參閱 :encoding
選項)。
篩選器
:markdown
Markdown 篩選器有許多改進。Haml 不再嘗試使用 RedCloth 較差的 Markdown 實作。相反地,它會尋找所有主要的 Markdown 實作:RDiscount、RPeg-Markdown、Maruku 和 BlueCloth。
:cdata
現在有一個 :cdata
篩選器,可用於將文字包覆在 CDATA 標籤中。
:sass
:sass
篩選器現在使用 Sass::Plugin
中設定的選項(如果可用)。
可執行檔
haml
haml
可執行檔現在採用 -r
和 -I
旗標,作用與 ruby
可執行檔的相同旗標相同。這允許使用者在從命令列使用 Haml 時載入輔助程式檔案。
它還採用一個 --debug
旗標,會讓它吐出 Haml 從範本產生的 Ruby 程式碼。這對我來說比任何事情都更有幫助,但你可能會覺得很有趣。
html2haml
html2haml
可執行檔經過大幅改善。其中許多是錯誤修正,但也有幾個功能。首先,它現在了解 CDATA 標籤,並自動偵測 ERB 檔案。此外,僅包含「- end
」的一行現在是 Haml 錯誤;由於 html2haml
無法正確剖析所有 Ruby 區塊,因此這會作為一個訊號通知作者有區塊需要處理。
雜項
XHTML 行動裝置 DTD
Haml 2.2 支援 XHTML 行動裝置的 DTD:!!! Mobile
。
YARD
Haml 2.2 的所有文件,包括此變更日誌,已移至 YARD。YARD 是一個優良的文件系統,允許我們用 Maruku 編寫文件,這也是一個優良的系統。