Haml 变更日志
6.3.0
6.2.5
- 弃用 v6.1.3 中为 Turbo 添加的
Haml::RailsTemplate#default_format
(讨论)
6.2.4
- 支持 case-in 语句 #1155
6.2.3
- 恢复 RDFa 文档类型支持 #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
- 像 Haml 5 一样在模板上下文中评估 :erb 过滤器
6.0.9
- 支持 sass-embedded #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 日发布 (diff).
- 对于 Wasm,当 C 扩展不可用时,回退到 Ruby。
6.0.2
于 2022 年 9 月 28 日发布 (diff).
- 在 Rails 上为
surround
、succeed
和precede
取消转义 HTML 安全参数 #1088
6.0.1
于 2022 年 9 月 23 日发布 (diff).
6.0.0
于 2022 年 9 月 21 日发布 (diff).
- 用 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
属性支持使用嵌套的 Hash 来渲染带连字符的属性,例如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).
- 修复了在
#inspect
在 TrueClass / FalseClass 中被重写时,属性优化器中的崩溃问题 #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)
- 修复了空 :ruby 过滤器导致的
TypeError
。 #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)
- 在合并属性哈希时,不要对 'data' 属性进行特殊处理。(Matt Wildig 和 Norman Clarke)
- 修复在 html_safe 模式下无法正常工作的 #@foo 和 #$foo 样式插值。(Akira Matsuda)
- 允许
@
作为标签的类名。感谢 Joe Bartlett。 - 当属性名称包含无效字符时,引发
Haml::InvalidAttributeNameError
。(Takashi Kokubun) - 不要忽略在初始化
ActionView::OutputBuffer
时发生的意外异常。(Takashi Kokubun)
4.0.7
发布于 2015 年 8 月 10 日 (diff).
- 显著提高用于修复 textarea 中空格处理的正则表达式的性能(感谢 Stan Hu)。
4.0.6
发布于 2014 年 12 月 1 日 (diff).
- 修复 Ruby 1.8.7 上的警告“regexp has invalid interval”(感谢 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 中充当其替代品(感谢 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)
- 用 slice 替换 range 以减少
capture_haml
创建的对象。(感谢 Tieg Zaharia) - 更正/改进一些文档。
4.0.1
于 2013 年 3 月 21 日发布(diff)。
- 删除 Rails 3.2.3+ textarea 技巧,转而使用更通用的解决方案。
- 修复一些性能回归。
- 修复对 Rails 4
text_area
辅助方法的支持。 - 修复使用单例对象的数据属性扁平化。(感谢 Alisdair McDiarmid)
- 修复对 sass-rails 4.0 beta 的支持。(感谢 Ryunosuke SATO)
- 在 Railtie 中加载“haml/template”以防止在 Rails 初始化程序中设置的用户选项被覆盖
- 不要在 haml/template 中依赖 Rails,以允许在没有 Rails 本身的情况下使用 Haml 与 ActionView。(感谢 Hunter Haydel)
4.0.0
-
Haml 可执行文件现在接受
--autoclose
选项。您现在可以指定一个应该自动关闭的标签列表 -
:ruby
过滤器不再将 $stdout 重定向到 Haml 文档,因为这在多线程环境中不安全。相反,它提供了一个haml_io
局部变量,它是一个写入文档的 IO 对象。 -
HTML5 现在是默认的输出格式,而不是 XHTML。这在 Rails 3+ 中已经是默认设置,因此许多用户不会注意到任何区别。
-
:sass 过滤器现在将其输出包装在 style 标签中,新的 :less 和 :scss 过滤器也是如此。:coffee 过滤器将其输出包装在 script 标签中。
-
Haml 现在只支持 Rails 3 及更高版本,以及 Ruby 1.8.7 及更高版本。如果您仍然需要对 Rails 2 和 Ruby 1.8.6 的支持,请使用 Haml 3.1.x,它将继续维护以修复错误。
-
:javascript 和 :css 过滤器不再在格式为 html4 或 html5 时添加 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) -
现在所有 Hash 属性值都被视为 HTML5 数据,无论键是什么。以前只有“data”键被这样处理。允许任意键意味着您现在可以轻松地将此功能用于 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”gem,其中包含有用但不太常用的过滤器和辅助方法。这包括几个额外的过滤器,例如 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 在生产环境中加载,通常是通过将其从资产 gem 组中移出。
-
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 SafeBuffers 进行破坏性修改的问题。
-
使用字符代码实体进行属性值替换,而不是命名/关键字实体。
3.1.1
- 将捆绑的 Sass 更新到 3.1.0 版本。
3.1.0
-
当
:format
设置为:html5
时,不要在过滤器生成的<script>
和<style>
标签中添加type
属性。 -
添加一个
:escape_attrs
选项,允许属性保持未转义(用于在 Haml 中嵌入 PHP 指令等)或始终转义而不是#escape_once
d。这也可以通过命令行使用--no-escape-attrs
来实现。 -
允许从命令行加载自定义过滤器。
向后不兼容性 - 必须阅读!
-
删除
haml
可执行文件的--rails
标志。自 Rails 2.0 以来,此标志不再需要。现有的 Rails 2.0 安装将继续工作。 -
放弃对 Hpricot 0.7 的支持。0.8 已经发布了将近两年。
3.0.25
- 即使 Hpricot 在
haml/html
之前加载,HTML 到 Haml 的转换现在也可以在 Ruby 中工作。
3.0.24
-
html2haml
现在可以正确地为嵌套在块中的静默脚本表达式生成 Haml。 -
IronRuby 兼容性。这有点像一个 hack: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
-
在 gemspec 中不要求
rake
,以实现 JRuby 下的 bundler 兼容性。感谢 Gordon McCreight。 -
摆脱安装时烦人的 RDoc 错误。
-
当安装
haml-rails
时,消除对Rails
模块的歧义引用。 -
修复
haml_tag
中的一个错误,该错误允许添加重复的属性,并使data-
属性无法工作。 -
与 Rails 3 最终版兼容。
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 支持
- 不要使用
#returning
方法,Rails 3 不再提供该方法。
3.0.13
Rails 3 支持
对 Rails 3 beta 4 之前的版本的支持已被移除。如果您还没有升级,请升级到 Rails 3.0.0.beta4。
小改进
- 正确处理带有编码声明的冻结字符串。
3.0.12
Rails 3 支持
显然,最后一个版本在 Rails 3 下以新的令人兴奋的方式崩溃,这是由于某些 gem 组合导致的加载顺序不一致。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 中的一个错误导致 gem 上传不正确。
3.0.8
- 修复了 Rails 3 之前的 Rails 版本中的一个错误。
3.0.7
编码支持
Haml 3.0.7 添加了对 Ruby 风格的 -# coding:
注释的支持,用于声明模板的编码。有关详细信息,请参阅 参考。
这也略微改变了 Haml 在未设置 :encoding
选项 时的行为。它不再默认使用 "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。
尝试将 Haml 与 Rails 2.3.6 一起使用会导致错误。
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 现在将在 Sass 加载时如果 Rails.root
为 nil
则会抛出错误。以前,这只会导致路径设置错误。
3.0.2
Haml 版本 3.0.1 和 3.0.2 之间没有进行任何更改。
3.0.1
在 Rails 中安装
haml --rails
现在不再需要用于在 Rails 中安装 Haml。现在您只需要将 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 代码中相同的类/id 简写。手动指定的类和 id 属性将合并,同样与标准 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>
haml_tag
和 haml_concat
与 :ugly
当 :ugly
选项 启用时,haml_tag
和 haml_concat
不会对它们的论点进行任何缩进。
基本标签改进
-
现在可以通过在该对象上实现
haml_object_ref
方法来自定义用于 对象引用 的名称。此方法应返回一个字符串,该字符串将在生成的类和 id 中代替对象的类名。感谢 Tim Carey-Smith。 -
所有属性值都可以是非字符串类型。它们的
#to_s
方法将被调用以将其转换为字符串。以前,这仅适用于除class
以外的属性。
:class
和 :id
属性接受 Ruby 数组
在属性哈希中,:class
属性现在接受一个数组,其元素将被转换为字符串并使用 :id
属性现在接受一个数组,其元素将被转换为字符串并使用 "_"
连接。该数组将首先被扁平化,并且任何不测试为真的元素都将被删除。例如
.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"
。
仍然可以指定单个值。如果该值计算结果为假,则忽略它;否则将其转换为字符串。例如
.item{:class => @item.is_empty? && "empty"}
可以渲染成以下任何一种
class="item"
class="item empty"
感谢 Ronen Barzel。
HTML5 自定义数据属性
创建名为 :data
且值为 Hash 的属性将生成 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
插件中的一个 bug,该 bug 会导致其方法无法加载。
2.2.23
-
在安装了 Haml 的 Rails 中运行
rake gems
时,不要崩溃。感谢 Florian Frank。 -
不要在带有插值的过滤器中删除
\n
。 -
消除那些烦人的
"regexp match /.../n against to UTF-8 string"
警告。
2.2.22
-
添加一个 railtie,以便在 Rails 3 中自动加载 Haml 和 Sass。感谢 Daniel Neighman。
-
为在 Rails 3 中使用
-
与返回字符串的方法(如form_for
)添加弃用消息。这是 Rails 3 中存在的相同弃用。 -
确保在使用过滤器时正确报告行号。
-
使加载 gemspec 在像 Heroku 这样的只读文件系统上不会崩溃。
-
例如,在 Rails 3 beta 中,当方法(如
form_for
)返回nil
时,不要崩溃。 -
与 Rails 3 beta 的 RJS 功能兼容。
2.2.21
-
修复 Haml::Version 中的 git 版本报告中的几个 bug。特别是,如果最近调用了
git gc
,或者如果缺少各种文件,它仍然可以工作。 -
在
Rakefile
中读取 Haml 仓库内的文件时,始终使用__FILE__
。根据 这个 bug 报告,这应该使 Haml 与 Bundler 更好地协同工作。 -
根据用户反馈,使
- end
的错误消息更直观。 -
与在 Rails 3 中返回字符串而不是连接到模板的方法(如
form_for
)兼容。 -
添加一个 with_tabs 助手,它在块的持续时间内设置缩进级别。
2.2.20
-
当在 Rails 2.3.5 中使用 Rails 的 XSS 保护时,
form_tag
Rails 助手现在被正确地标记为 HTML 安全。 -
对
defined?
的调用不应该干扰非常旧版本(1.2.x)中的 Rails 自动加载。 -
修复一个 bug,该 bug 导致在 Rails 3.0 beta 下,使用块和布局调用 ActionView 的
render
方法无法工作。 -
修复一个 bug,该 bug 导致在 Rails 3.0 beta 下,嵌套调用 Haml::Helpers#haml_concat 的结束标签被错误地转义。
2.2.19
- 修复与 Rails 的 XSS 支持集成的 bug。特别是,正确地覆盖
safe_concat
。
2.2.18
-
在 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 文档类型时,不再崩溃。 -
通过使用
!!! 5
作为文档类型声明,支持 XHTML 文档中的 HTML5 文档类型。
2.2.13
-
允许用户指定
:encoding => "ascii-8bit"
,即使对于包含非 ASCII 字节序列的模板也是如此。这使得 Haml 模板在给定标记为具有 ASCII 编码的非 ASCII 输入时不会崩溃。 -
修复了与 Hpricot 0.8.2 的不兼容性,Hpricot 0.8.2 用于
html2haml
。
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 是一个 gem 并且正在使用
rails_xss
插件时能够正常工作。 -
将 Haml 模板的返回值标记为 HTML 安全。这使得 Haml 部分与 Rails 的 XSS 防护一起使用。
2.2.9
-
修复了在某些情况下 Haml 的文本被连接到错误的缓冲区的错误。这主要是在使用
capture
等方法时在 Rails 下出现的问题。 -
修复了在行中有插值且启用了
: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)。 -
在可执行文件的
--version
字符串中添加“Sass”。 -
当静态属性中省略逗号时抛出异常(例如
%p{:foo => "bar" :baz => "bang"}
)。
2.2.5
-
删除了打开条件注释时产生的尾随空白(感谢 Norman Clarke)。
-
修复了当数字 ID 作为属性给出时 CSS ID 连接的问题。(感谢 Norman Clarke)。
-
修复了在字符串中使用“-end”的几个错误。
2.2.4
-
允许
end
用于静默脚本,当它后面跟着代码时。例如- form_for do ... - end if @show_form
这并不是很好的风格,但为了保持一致性,我们支持它。
-
不要将
require 'rubygems'
添加到通过haml --rails
安装的 init.rb 的顶部。这是不必要的,实际上在 haml/template 加载后就会被覆盖。
2.2.3
Haml 2.2.3 添加了对 Google AppEngine 的 JRuby 捆绑工具的支持,感谢 Jan Ulbrich。
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="https://haml.ruby-lang.org.cn" 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")
长 8 个字符。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 现在允许使用任意数量的空格甚至制表符进行缩进,前提是
- 制表符和空格不混合
- 缩进在给定文档中保持一致
新选项
: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 Mobile DTD
Haml 2.2 支持 XHTML Mobile 的 DTD:!!! Mobile
。
YARD
Haml 2.2 的所有文档,包括此变更日志,都已移至 YARD。YARD 是一个优秀的文档系统,它允许我们用 Maruku 编写文档,Maruku 也非常出色。