haml 6.0.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +19 -0
- data/CHANGELOG.md +14 -1
- data/README.md +3 -3
- data/REFERENCE.md +13 -164
- data/Rakefile +25 -0
- data/lib/haml/rails_helpers.rb +8 -6
- data/lib/haml/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5154c2aa8152311d83ac1c3acb9123d31b3b24af570334c2b9786bc8c057b5b7
|
4
|
+
data.tar.gz: 55cf78c93ff92aea7794b8f12a96bdff471759d072d1b5c0689c8dc9ee4fee5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef8aa686f64c59b24b72c907a8dafb6cad0c060000094c74c2db73c1d7155a412937d64f6d377b1fa66eaa5126f694a40e7222593da8c71de360a4f2025098bc
|
7
|
+
data.tar.gz: 1d3c797b5925f1b1b3721b4f14c4756ba102042079b8c091a8b079e9f3ea7de8b1fefd8d5d724f5f111f1d7b9e77cbac77280cf9abc78782ce600549e35389ec
|
data/.yardopts
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
--charset utf-8
|
2
|
+
--readme README.md
|
3
|
+
--markup markdown
|
4
|
+
--markup-provider kramdown
|
5
|
+
--template-path yard
|
6
|
+
--default-return ""
|
7
|
+
--title "Haml Documentation"
|
8
|
+
--query 'object.type != :classvariable'
|
9
|
+
--query 'object.type != :constant || @api && @api.text == "public"'
|
10
|
+
--exclude lib/haml/railtie.rb
|
11
|
+
--hide-void-return
|
12
|
+
--protected
|
13
|
+
--no-private
|
14
|
+
--no-highlight
|
15
|
+
-
|
16
|
+
FAQ.md
|
17
|
+
CHANGELOG.md
|
18
|
+
REFERENCE.md
|
19
|
+
MIT-LICENSE
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Haml Changelog
|
2
2
|
|
3
|
+
## 6.0.2
|
4
|
+
|
5
|
+
Released on September 28, 2022
|
6
|
+
([diff](https://github.com/haml/haml/compare/v6.0.1...v6.0.2)).
|
7
|
+
|
8
|
+
* Unescape HTML-safe arguments for `surround`, `succeed`, and `precede` on Rails
|
9
|
+
[#1088](https://github.com/haml/haml/issues/1088)
|
10
|
+
|
3
11
|
## 6.0.1
|
4
12
|
|
5
13
|
Released on September 23, 2022
|
@@ -17,7 +25,12 @@ Released on September 21, 2022
|
|
17
25
|
* Haml 6 is about 1.7x faster than Haml 5 in [this benchmark](benchmark/slim/run-benchmarks.rb).
|
18
26
|
* The parser is kept as is, but everything else is replaced.
|
19
27
|
* The `haml` CLI interface was also replaced.
|
20
|
-
*
|
28
|
+
* The interface of `Haml::Engine` is changed. `Haml::Template` is most likely what you need now.
|
29
|
+
* Most Haml helpers are removed.
|
30
|
+
* On Rails, only `find_and_reserve`, `preserve`, `surround`, `precede`, `succeed`, and `capture_haml` are left.
|
31
|
+
* On Tilt, only `preserve` is left.
|
32
|
+
* Only the attributes in [`Haml::AttributeBuilder::BOOLEAN_ATTRIBUTES`](lib/haml/attribute_builder.rb)
|
33
|
+
are handled as boolean attributes.
|
21
34
|
* Some legacy Rails integration is removed.
|
22
35
|
|
23
36
|
## 5.2.2
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ gem install haml
|
|
22
22
|
After you write some Haml, you can run
|
23
23
|
|
24
24
|
~~~sh
|
25
|
-
haml document.haml
|
25
|
+
haml render document.haml
|
26
26
|
~~~
|
27
27
|
|
28
28
|
to compile it to HTML. For more information on these commands, check out
|
@@ -41,8 +41,8 @@ To use Haml with Rails, simply add Haml to your Gemfile and run `bundle`.
|
|
41
41
|
gem 'haml'
|
42
42
|
~~~
|
43
43
|
|
44
|
-
If you'd like to replace Rails's
|
45
|
-
[haml-rails](https://github.com/
|
44
|
+
If you'd like to replace Rails's ERB-based generators with Haml, add
|
45
|
+
[haml-rails](https://github.com/haml/haml-rails) to your Gemfile as well.
|
46
46
|
|
47
47
|
## Formatting
|
48
48
|
|
data/REFERENCE.md
CHANGED
@@ -30,7 +30,7 @@ The first step for all of these is to install the Haml gem:
|
|
30
30
|
|
31
31
|
To run Haml from the command line, just use
|
32
32
|
|
33
|
-
haml input.haml output.html
|
33
|
+
haml render input.haml > output.html
|
34
34
|
|
35
35
|
Use `haml --help` for full documentation.
|
36
36
|
|
@@ -68,24 +68,6 @@ may be compiled to:
|
|
68
68
|
</div>
|
69
69
|
</div>
|
70
70
|
|
71
|
-
### Rails XSS Protection
|
72
|
-
|
73
|
-
Haml supports Rails' XSS protection scheme, which was introduced in Rails 2.3.5+
|
74
|
-
and is enabled by default in 3.0.0+. If it's enabled, Haml's
|
75
|
-
{Haml::Options#escape_html `:escape_html`} option is set to `true` by default -
|
76
|
-
like in ERB, all strings printed to a Haml template are escaped by default. Also
|
77
|
-
like ERB, strings marked as HTML safe are not escaped. Haml also has [its own
|
78
|
-
syntax for printing a raw string to the template](#unescaping_html).
|
79
|
-
|
80
|
-
If the `:escape_html` option is set to false when XSS protection is enabled,
|
81
|
-
Haml doesn't escape Ruby strings by default. However, if a string marked
|
82
|
-
HTML-safe is passed to [Haml's escaping syntax](#escaping_html), it won't be
|
83
|
-
escaped.
|
84
|
-
|
85
|
-
Finally, all the {Haml::Helpers Haml helpers} that return strings that are known
|
86
|
-
to be HTML safe are marked as such. In addition, string input is escaped unless
|
87
|
-
it's HTML safe.
|
88
|
-
|
89
71
|
### Ruby Module
|
90
72
|
|
91
73
|
Haml can also be used completely separately from Rails and ActionView. To do
|
@@ -93,62 +75,12 @@ this, install the gem with RubyGems:
|
|
93
75
|
|
94
76
|
gem install haml
|
95
77
|
|
96
|
-
You can then use it by including the
|
97
|
-
{Haml::
|
78
|
+
You can then use it by including the `haml` gem in Ruby code, and using
|
79
|
+
{Haml::Template} like so:
|
98
80
|
|
99
|
-
engine = Haml::
|
81
|
+
engine = Haml::Template.new { "%p Haml code!" }
|
100
82
|
engine.render #=> "<p>Haml code!</p>\n"
|
101
83
|
|
102
|
-
### Options
|
103
|
-
|
104
|
-
Haml understands various configuration options that affect its performance and
|
105
|
-
output.
|
106
|
-
|
107
|
-
In Rails, options can be set by setting the {Haml::Template#options Haml::Template.options}
|
108
|
-
hash in an initializer:
|
109
|
-
|
110
|
-
```ruby
|
111
|
-
# config/initializers/haml.rb
|
112
|
-
Haml::Template.options[:format] = :html5
|
113
|
-
|
114
|
-
# Avoid escaping attributes which are already escaped
|
115
|
-
Haml::Template.options[:escape_attrs] = :once
|
116
|
-
```
|
117
|
-
|
118
|
-
Outside Rails, you can set them by configuring them globally in
|
119
|
-
Haml::Options.defaults:
|
120
|
-
|
121
|
-
```ruby
|
122
|
-
Haml::Options.defaults[:format] = :html5
|
123
|
-
```
|
124
|
-
|
125
|
-
In sinatra specifically, you can set them in global config with:
|
126
|
-
```ruby
|
127
|
-
set :haml, { escape_html: true }
|
128
|
-
```
|
129
|
-
|
130
|
-
Finally, you can also set them by passing an options hash to
|
131
|
-
{Haml::Engine#initialize}. For the complete list of available options, please
|
132
|
-
see {Haml::Options}.
|
133
|
-
|
134
|
-
### Encodings
|
135
|
-
|
136
|
-
Haml supports the same sorts of
|
137
|
-
encoding-declaration comments that Ruby does. Although both Ruby and Haml
|
138
|
-
support several different styles, the easiest it just to add `-# coding:
|
139
|
-
encoding-name` at the beginning of the Haml template (it must come before all
|
140
|
-
other lines). This will tell Haml that the template is encoded using the named
|
141
|
-
encoding.
|
142
|
-
|
143
|
-
By default, the HTML generated by Haml has the same encoding as the Haml
|
144
|
-
template. However, if `Encoding.default_internal` is set, Haml will attempt to
|
145
|
-
use that instead. In addition, the {Haml::Options#encoding `:encoding` option}
|
146
|
-
can be used to specify an output encoding manually.
|
147
|
-
|
148
|
-
Note that, like Ruby, Haml does not support templates encoded in UTF-16 or
|
149
|
-
UTF-32, since these encodings are not compatible with ASCII. It is possible to
|
150
|
-
use these as the output encoding, though.
|
151
|
-
|
152
84
|
## Plain Text
|
153
85
|
|
154
86
|
A substantial portion of any HTML document is its content, which is plain old
|
@@ -325,49 +257,6 @@ Haml also supports Ruby's new hash syntax:
|
|
325
257
|
|
326
258
|
%a{title: @title, href: href} Stuff
|
327
259
|
|
328
|
-
#### Attribute Methods
|
329
|
-
|
330
|
-
A Ruby method call that returns a hash can be substituted for the hash contents.
|
331
|
-
For example, {Haml::Helpers} defines the following method:
|
332
|
-
|
333
|
-
def html_attrs(lang = 'en-US')
|
334
|
-
{:xmlns => "http://www.w3.org/1999/xhtml", 'xml:lang' => lang, :lang => lang}
|
335
|
-
end
|
336
|
-
|
337
|
-
This can then be used in Haml, like so:
|
338
|
-
|
339
|
-
%html{html_attrs('fr-fr')}
|
340
|
-
|
341
|
-
This is compiled to:
|
342
|
-
|
343
|
-
<html lang='fr-fr' xml:lang='fr-fr' xmlns='http://www.w3.org/1999/xhtml'>
|
344
|
-
</html>
|
345
|
-
|
346
|
-
You can use as many such attribute methods as you want by separating them with
|
347
|
-
commas, like a Ruby argument list. All the hashes will be merged together, from
|
348
|
-
left to right. For example, if you defined
|
349
|
-
|
350
|
-
def hash1
|
351
|
-
{:bread => 'white', :filling => 'peanut butter and jelly'}
|
352
|
-
end
|
353
|
-
|
354
|
-
def hash2
|
355
|
-
{:bread => 'whole wheat'}
|
356
|
-
end
|
357
|
-
|
358
|
-
then
|
359
|
-
|
360
|
-
%sandwich{hash1, hash2, :delicious => 'true'}/
|
361
|
-
|
362
|
-
would compile to:
|
363
|
-
|
364
|
-
<sandwich bread='whole wheat' delicious='true' filling='peanut butter and jelly' />
|
365
|
-
|
366
|
-
Note that the Haml attributes list has the same syntax as a Ruby method call.
|
367
|
-
This means that any attribute methods must come before the hash literal.
|
368
|
-
|
369
|
-
Attribute methods aren't supported for HTML-style attributes.
|
370
|
-
|
371
260
|
#### Boolean Attributes
|
372
261
|
|
373
262
|
Some attributes, such as "checked" for `input` tags or "selected" for `option`
|
@@ -404,6 +293,9 @@ or using `true` and `false`:
|
|
404
293
|
|
405
294
|
%input(selected=true)
|
406
295
|
|
296
|
+
This feature works only for attributes that are included in
|
297
|
+
[`Haml::AttributeBuilder::BOOLEAN_ATTRIBUTES`](lib/haml/attribute_builder.rb).
|
298
|
+
|
407
299
|
<!-- The title to the next section (Prefixed Attributes) has changed. This
|
408
300
|
<a> tag is so old links to here still work. -->
|
409
301
|
<a id="html5_custom_data_attributes" style="border:0;"></a>
|
@@ -993,7 +885,7 @@ is compiled to:
|
|
993
885
|
|
994
886
|
### Whitespace Preservation: `~` {#tilde}
|
995
887
|
|
996
|
-
`~` works just like `=`, except that it runs {Haml::Helpers
|
888
|
+
`~` works just like `=`, except that it runs {Haml::Helpers.preserve}
|
997
889
|
on its input. For example,
|
998
890
|
|
999
891
|
~ "Foo\n<pre>Bar\nBaz</pre>"
|
@@ -1154,9 +1046,6 @@ is compiled to
|
|
1154
1046
|
<p>I <strong>really</strong> prefer <em>raspberry</em> jam.</p>
|
1155
1047
|
</div>
|
1156
1048
|
|
1157
|
-
Note that `#{}` interpolation within filters is HTML-escaped if you specify true to
|
1158
|
-
{Haml::Options#escape_filter_interpolations `:escape_filter_interpolations`} option.
|
1159
|
-
|
1160
1049
|
The functionality of some filters such as Markdown can be provided by many
|
1161
1050
|
different libraries. Usually you don't have to worry about this - you can just
|
1162
1051
|
load the gem of your choice and Haml will automatically use it.
|
@@ -1271,43 +1160,10 @@ default. This filter is implemented using Tilt.
|
|
1271
1160
|
|
1272
1161
|
### Custom Filters
|
1273
1162
|
|
1274
|
-
You can also define your own filters.
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
Sometimes you need to manipulate whitespace in a more precise fashion than what
|
1279
|
-
the whitespace removal methods allow. There are a few helper methods that are
|
1280
|
-
useful when dealing with inline content. All these methods take a Haml block to
|
1281
|
-
modify.
|
1282
|
-
|
1283
|
-
### surround {#surround}
|
1284
|
-
|
1285
|
-
Surrounds a Haml block with text. Expects 1 or 2 string arguments used to
|
1286
|
-
surround the Haml block. If a second argument is not provided, the first
|
1287
|
-
argument is used as the second.
|
1288
|
-
|
1289
|
-
= surround "(", ")" do
|
1290
|
-
= link_to "learn more", "#"
|
1291
|
-
|
1292
|
-
### precede {#precede}
|
1293
|
-
|
1294
|
-
Prepends a Haml block with text. Expects 1 argument.
|
1295
|
-
|
1296
|
-
= precede "*" do
|
1297
|
-
%span Required
|
1298
|
-
|
1299
|
-
### succeed {#succeed}
|
1300
|
-
|
1301
|
-
Appends a Haml block with text. Expects 1 argument.
|
1302
|
-
|
1303
|
-
Begin by
|
1304
|
-
= succeed "," do
|
1305
|
-
= link_to "filling out your profile", "#"
|
1306
|
-
= succeed "," do
|
1307
|
-
= link_to "adding a bio", "#"
|
1308
|
-
and
|
1309
|
-
= succeed "." do
|
1310
|
-
= link_to "inviting friends", "#"
|
1163
|
+
You can also define your own filters.
|
1164
|
+
`Haml::Filters::YourCustomFilter#compile` should return
|
1165
|
+
[a Temple expression](https://github.com/judofyr/temple/blob/master/EXPRESSIONS.md).
|
1166
|
+
See {Haml::Filters} for examples.
|
1311
1167
|
|
1312
1168
|
## Multiline: `|` {#multiline}
|
1313
1169
|
|
@@ -1367,14 +1223,7 @@ Haml won't try to re-format the indentation.
|
|
1367
1223
|
Literal `textarea` and `pre` tags automatically preserve content given through
|
1368
1224
|
`=`. Dynamically-generated `textarea`s and `pre`s can't be preserved
|
1369
1225
|
automatically, and so should be passed through
|
1370
|
-
{Haml::Helpers
|
1226
|
+
{Haml::Helpers.preserve} or the [`~` command](#tilde), which has the
|
1371
1227
|
same effect.
|
1372
1228
|
|
1373
1229
|
Blocks of literal text can be preserved using the [`:preserve` filter](#preserve-filter).
|
1374
|
-
|
1375
|
-
## Helpers
|
1376
|
-
|
1377
|
-
Haml offers a bunch of helpers that are useful for doing stuff like preserving
|
1378
|
-
whitespace, creating nicely indented output for user-defined helpers, and other
|
1379
|
-
useful things. The helpers are all documented in the {Haml::Helpers} and
|
1380
|
-
{Haml::Helpers::ActionViewExtensions} modules.
|
data/Rakefile
CHANGED
@@ -112,5 +112,30 @@ task bench: :compile do
|
|
112
112
|
exit system(*cmd)
|
113
113
|
end
|
114
114
|
|
115
|
+
namespace :doc do
|
116
|
+
task :sass do
|
117
|
+
require 'sass'
|
118
|
+
Dir["yard/default/**/*.sass"].each do |sass|
|
119
|
+
File.open(sass.gsub(/sass$/, 'css'), 'w') do |f|
|
120
|
+
f.write(Sass::Engine.new(File.read(sass)).render)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
desc "List all undocumented methods and classes."
|
126
|
+
task :undocumented do
|
127
|
+
command = 'yard --list --query '
|
128
|
+
command << '"object.docstring.blank? && '
|
129
|
+
command << '!(object.type == :method && object.is_alias?)"'
|
130
|
+
sh command
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
desc "Generate documentation"
|
135
|
+
task(:doc => 'doc:sass') {sh "yard"}
|
136
|
+
|
137
|
+
desc "Generate documentation incrementally"
|
138
|
+
task(:redoc) {sh "yard -c"}
|
139
|
+
|
115
140
|
task default: %w[compile hamlit:test]
|
116
141
|
task test: %w[compile test:all]
|
data/lib/haml/rails_helpers.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
require 'haml/helpers'
|
3
3
|
|
4
|
-
#
|
5
|
-
# ActionView internal implementation. (not desired)
|
4
|
+
# There are only helpers that depend on ActionView internals.
|
6
5
|
module Haml
|
7
6
|
module RailsHelpers
|
8
7
|
include Helpers
|
@@ -32,16 +31,19 @@ module Haml
|
|
32
31
|
|
33
32
|
def surround(front, back = front, &block)
|
34
33
|
output = capture_haml(&block)
|
35
|
-
|
36
|
-
|
34
|
+
front = escape_once(front) unless front.html_safe?
|
35
|
+
back = escape_once(back) unless back.html_safe?
|
36
|
+
"#{front}#{output.chomp}#{back}\n".html_safe
|
37
37
|
end
|
38
38
|
|
39
39
|
def precede(str, &block)
|
40
|
-
|
40
|
+
str = escape_once(str) unless str.html_safe?
|
41
|
+
"#{str}#{capture_haml(&block).chomp}\n".html_safe
|
41
42
|
end
|
42
43
|
|
43
44
|
def succeed(str, &block)
|
44
|
-
|
45
|
+
str = escape_once(str) unless str.html_safe?
|
46
|
+
"#{capture_haml(&block).chomp}#{str}\n".html_safe
|
45
47
|
end
|
46
48
|
|
47
49
|
def capture_haml(*args, &block)
|
data/lib/haml/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: haml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Natalie Weizenbaum
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: exe
|
14
14
|
cert_chain: []
|
15
|
-
date: 2022-09-
|
15
|
+
date: 2022-09-28 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: temple
|
@@ -265,6 +265,7 @@ files:
|
|
265
265
|
- ".github/FUNDING.yml"
|
266
266
|
- ".github/workflows/test.yml"
|
267
267
|
- ".gitignore"
|
268
|
+
- ".yardopts"
|
268
269
|
- CHANGELOG.md
|
269
270
|
- FAQ.md
|
270
271
|
- Gemfile
|