Haml
Haml 是一个用于 HTML 的模板引擎。它旨在通过消除冗余、反映文档所代表的底层结构以及提供既强大又易于理解的优雅语法,使编写 HTML 文档变得更加容易和愉快。
基本用法
Haml 可以从命令行使用,也可以作为 Ruby Web 框架的一部分使用。第一步是安装 gem
gem install haml
编写一些 Haml 代码后,可以运行
haml render document.haml
将其编译成 HTML。有关这些命令的更多信息,请查看
haml --help
要以编程方式使用 Haml,请查看 YARD 文档。
在 Rails 中使用 Haml
要在 Rails 中使用 Haml,只需将 Haml 添加到 Gemfile 中并运行 bundle
。
gem 'haml'
如果您想用 Haml 替换 Rails 基于 ERB 的生成器,请将 haml-rails 也添加到 Gemfile 中。
格式
Haml 最基本的功能是创建 HTML 的简写
%tagname{:attr1 => 'value1', :attr2 => 'value2'} Contents
不需要结束标签;Haml 会自动处理。如果您更喜欢 HTML 风格的属性,也可以使用
%tagname(attr1='value1' attr2='value2') Contents
添加 class
和 id
属性更加容易。Haml 使用与为文档设置样式的 CSS 相同的语法
%tagname#id.class
事实上,当您使用 <div>
标签时,它会变得更加容易。因为 <div>
是一个非常常见的元素,所以没有名称的标签默认为 div。所以
#foo Hello!
变成
<div id='foo'>Hello!</div>
Haml 使用缩进将各个元素带到一起以表示 HTML 结构。标签的子元素缩进到父标签下方。同样,结束标签会自动添加。例如
%ul
%li Salt
%li Pepper
变成
<ul>
<li>Salt</li>
<li>Pepper</li>
</ul>
您也可以将纯文本作为元素的子元素
%p
Hello,
World!
也可以将 Ruby 代码嵌入到 Haml 文档中。等号 =
将输出代码的结果。连字符 -
将运行代码,但不输出结果。您甚至可以使用 if
和 while
等控制语句
%p
Date/Time:
- now = DateTime.now
%strong= now
- if now > DateTime.parse("December 31, 2006")
= "Happy new " + "year!"
Haml 提供了比这里介绍的工具更多。查看 参考文档 以获取完整详细信息。
缩进
Haml 的缩进可以由一个或多个制表符或空格组成。但是,缩进在给定文档中必须一致。制表符和空格不能混合使用,并且在整个文档中必须使用相同数量的制表符或空格。
贡献
欢迎贡献,但在开始之前,请阅读 指南。
在本地分叉并克隆仓库后,安装 Bundler,然后使用它安装开发 gem 依赖项:~~~sh gem install bundler bundle install ~~~
完成后,您应该能够运行测试套件:~~~sh rake ~~~
此时,rake
应该可以运行,不会出现错误或警告,您就可以开始着手修复您的补丁了!
请注意,如果您正在处理特定区域,也可以只运行测试套件中的一个测试。
ruby -Itest test/helper_test.rb -n test_buffer_access
Haml 目前支持 Ruby 2.0.0 及更高版本,因此请确保您的更改在 2.0+ 上运行。
团队
当前维护者
校友
Haml 由 Hampton Catlin 创建,他是原始实现的作者。Hampton 现在不再参与日常编码,但仍然就语言问题提供咨询。
Natalie Weizenbaum 多年来一直是 Haml 的“现代”Ruby 实现的主要开发人员和架构师。
Norman Clarke 是 2012 年至 2016 年 Haml 的主要维护者。
许可证
Natalie 在 Haml 上的一些工作得到了 Unspace Interactive 的支持。
除此之外,该实现是在 MIT 许可证下授权的。
版权所有 (c) 2006-2019 Hampton Catlin、Natalie Weizenbaum 和 Haml 团队
特此授予任何人免费获得本软件和相关文档文件(以下简称“软件”)副本的权利,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许获得软件的人员这样做,但须符合以下条件:
以上版权声明和本许可声明应包含在所有副本或软件的任何重要部分中。
该软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,作者或版权持有人均不对因软件或使用或以其他方式处理软件而产生的任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面产生的责任。