html2haml 2.0.0.beta.1 → 2.0.0
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/.travis.yml +5 -2
- data/MIT-LICENSE +1 -1
- data/README.md +4 -2
- data/Rakefile +5 -1
- data/html2haml.gemspec +1 -1
- data/lib/html2haml/html.rb +94 -45
- data/lib/html2haml/html/erb.rb +8 -6
- data/lib/html2haml/version.rb +1 -1
- data/test/erb_test.rb +63 -2
- data/test/html2haml_test.rb +19 -0
- data/test/jruby/erb_test.rb +28 -0
- data/test/jruby/html2haml_test.rb +72 -0
- metadata +29 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95b03c7907b983668eb21e33ac4b0e90e5dd85f9
|
4
|
+
data.tar.gz: 69ef205bb13c17d15ef4d049f8c3f56a36f4637b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df12289977268ce367289cea4bd97e0284532dcfdfb4775f6792899ff396f3dbae95b5a8c63a4459b0474f3dde97f245a6aeb34f6d38b7a720ed5f9c4c87dd3b
|
7
|
+
data.tar.gz: 30bac502eb17363cf4646d9c4d1674831f37873638f4efec4def2182ac6251f8ff00a6ba6723655a85d6915b86f08a186ebd0499f09a8ff12c6914dd006f31a6
|
data/.travis.yml
CHANGED
data/MIT-LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2006-
|
1
|
+
Copyright (c) 2006-2014 Hampton Catlin, Natalie Weizenbaum and Norman Clarke
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
4
|
this software and associated documentation files (the "Software"), to deal in
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Html2haml
|
2
2
|
|
3
|
-
[](https://travis-ci.org/haml/html2haml)
|
4
|
+
[](https://codeclimate.com/github/haml/html2haml)
|
5
|
+
[](https://rubygems.org/gems/html2haml)
|
4
6
|
|
5
7
|
Html2haml, not surprisingly, converts HTML to Haml. It works on HTML with
|
6
8
|
embedded ERB tags as well as plain old HTML.
|
@@ -68,7 +70,7 @@ See `html2haml --help`:
|
|
68
70
|
|
69
71
|
## License
|
70
72
|
|
71
|
-
Copyright (c) 2006-
|
73
|
+
Copyright (c) 2006-2014 Hampton Catlin, Natalie Weizenbaum and Norman Clarke
|
72
74
|
|
73
75
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
74
76
|
this software and associated documentation files (the "Software"), to deal in
|
data/Rakefile
CHANGED
@@ -8,7 +8,11 @@ CLEAN.replace %w(pkg doc coverage .yardoc)
|
|
8
8
|
|
9
9
|
Rake::TestTask.new do |t|
|
10
10
|
t.libs << 'lib' << 'test'
|
11
|
-
|
11
|
+
if RUBY_PLATFORM == 'java'
|
12
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
13
|
+
else
|
14
|
+
t.test_files = FileList["test/**/*_test.rb"].exclude(/jruby/)
|
15
|
+
end
|
12
16
|
t.verbose = true
|
13
17
|
end
|
14
18
|
|
data/html2haml.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
|
|
19
19
|
|
20
20
|
gem.add_dependency 'nokogiri', '~> 1.6.0'
|
21
21
|
gem.add_dependency 'erubis', '~> 2.7.0'
|
22
|
-
gem.add_dependency 'ruby_parser', '~> 3.
|
22
|
+
gem.add_dependency 'ruby_parser', '~> 3.5'
|
23
23
|
gem.add_dependency 'haml', '~> 4.0.0'
|
24
24
|
gem.add_development_dependency 'simplecov', '~> 0.7.1'
|
25
25
|
gem.add_development_dependency 'minitest', '~> 4.4.0'
|
data/lib/html2haml/html.rb
CHANGED
@@ -23,21 +23,14 @@ module Nokogiri
|
|
23
23
|
def to_haml(tabs, options)
|
24
24
|
return "" if converted_to_haml || to_s.strip.empty?
|
25
25
|
text = uninterp(self.to_s)
|
26
|
-
node = next_sibling
|
27
|
-
while node.is_a?(::Nokogiri::XML::Element) && node.name == "haml_loud"
|
28
|
-
node.converted_to_haml = true
|
29
|
-
text << '#{' <<
|
30
|
-
CGI.unescapeHTML(node.inner_text).gsub(/\n\s*/, ' ').strip << '}'
|
31
|
-
|
32
|
-
if node.next_sibling.is_a?(::Nokogiri::XML::Text)
|
33
|
-
node = node.next_sibling
|
34
|
-
text << uninterp(node.to_s)
|
35
|
-
node.converted_to_haml = true
|
36
|
-
end
|
37
26
|
|
38
|
-
|
27
|
+
#ending in a newline stops the inline nodes
|
28
|
+
if text.end_with?("\n")
|
29
|
+
parse_text_with_interpolation(text, tabs)
|
30
|
+
else
|
31
|
+
text << process_inline_nodes(next_sibling)
|
32
|
+
parse_text_with_interpolation(text, tabs)
|
39
33
|
end
|
40
|
-
return parse_text_with_interpolation(text, tabs)
|
41
34
|
end
|
42
35
|
|
43
36
|
private
|
@@ -80,6 +73,24 @@ module Nokogiri
|
|
80
73
|
"#{tabulate(tabs)}#{'\\' if Haml::Parser::SPECIAL_CHARACTERS.include?(line[0])}#{line}\n"
|
81
74
|
end.join
|
82
75
|
end
|
76
|
+
|
77
|
+
def process_inline_nodes(node)
|
78
|
+
text = ""
|
79
|
+
while node.is_a?(::Nokogiri::XML::Element) && node.name == "haml_loud"
|
80
|
+
node.converted_to_haml = true
|
81
|
+
text << '#{' <<
|
82
|
+
CGI.unescapeHTML(node.inner_text).gsub(/\n\s*/, ' ').strip << '}'
|
83
|
+
|
84
|
+
if node.next_sibling.is_a?(::Nokogiri::XML::Text)
|
85
|
+
node = node.next_sibling
|
86
|
+
text << uninterp(node.to_s)
|
87
|
+
node.converted_to_haml = true
|
88
|
+
end
|
89
|
+
|
90
|
+
node = node.next_sibling
|
91
|
+
end
|
92
|
+
text
|
93
|
+
end
|
83
94
|
end
|
84
95
|
end
|
85
96
|
end
|
@@ -135,24 +146,34 @@ module Html2haml
|
|
135
146
|
template = ERB.compile(template)
|
136
147
|
end
|
137
148
|
|
138
|
-
|
139
|
-
|
140
|
-
|
149
|
+
@template = detect_proper_parser(template)
|
150
|
+
end
|
151
|
+
end
|
141
152
|
|
142
|
-
|
153
|
+
def detect_proper_parser(template)
|
154
|
+
if template =~ /^\s*<!DOCTYPE|<html/i
|
155
|
+
return Nokogiri.HTML(template)
|
156
|
+
end
|
143
157
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
return @template = Nokogiri.HTML(template).at('/html').children
|
148
|
-
end
|
158
|
+
if template =~ /^\s*<head|<body/i
|
159
|
+
return Nokogiri.HTML(template).at('/html').children
|
160
|
+
end
|
149
161
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
162
|
+
parsed = Nokogiri::HTML::DocumentFragment.parse(template)
|
163
|
+
|
164
|
+
#detect missplaced head or body tag
|
165
|
+
#XML_HTML_STRUCURE_ERROR : 800
|
166
|
+
if parsed.errors.any? {|e| e.code == 800 }
|
167
|
+
return Nokogiri.HTML(template).at('/html').children
|
155
168
|
end
|
169
|
+
|
170
|
+
#in order to support CDATA in HTML (which is invalid) try using the XML parser
|
171
|
+
# we can detect this when libxml returns error code XML_ERR_NAME_REQUIRED : 68
|
172
|
+
if parsed.errors.any? {|e| e.code == 68 } || template =~ /CDATA/
|
173
|
+
return Nokogiri::XML.fragment(template)
|
174
|
+
end
|
175
|
+
|
176
|
+
parsed
|
156
177
|
end
|
157
178
|
|
158
179
|
# Processes the document and returns the result as a string
|
@@ -270,6 +291,7 @@ module Html2haml
|
|
270
291
|
# @see Html2haml::HTML::Node#to_haml
|
271
292
|
def to_haml(tabs, options)
|
272
293
|
return "" if converted_to_haml
|
294
|
+
|
273
295
|
if name == "script" &&
|
274
296
|
(attr_hash['type'].nil? || attr_hash['type'].to_s == "text/javascript") &&
|
275
297
|
(attr_hash.keys - ['type']).empty?
|
@@ -286,7 +308,12 @@ module Html2haml
|
|
286
308
|
when "haml_loud"
|
287
309
|
lines = CGI.unescapeHTML(inner_text).split("\n").
|
288
310
|
map {|s| s.rstrip}.reject {|s| s.strip.empty?}
|
289
|
-
|
311
|
+
|
312
|
+
if attribute("raw")
|
313
|
+
lines.first.gsub!(/^[ \t]*/, "!= ")
|
314
|
+
else
|
315
|
+
lines.first.gsub!(/^[ \t]*/, "= ")
|
316
|
+
end
|
290
317
|
|
291
318
|
if lines.size > 1 # Multiline script block
|
292
319
|
# Normalize the indentation so that the last line is the base
|
@@ -385,29 +412,51 @@ module Html2haml
|
|
385
412
|
end
|
386
413
|
|
387
414
|
def dynamic_attributes
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
if ruby_value == value
|
399
|
-
[nil, nil]
|
400
|
-
else
|
401
|
-
[name.to_s, full_match ? ruby_value : %("#{ruby_value}")]
|
402
|
-
end
|
415
|
+
#reject any attrs without <haml>
|
416
|
+
@dynamic_attributes = attr_hash.select {|name, value| value =~ %r{<haml.*</haml} }
|
417
|
+
@dynamic_attributes.each do |name, value|
|
418
|
+
fragment = Nokogiri::XML.fragment(CGI.unescapeHTML(value))
|
419
|
+
|
420
|
+
# unwrap interpolation if we can:
|
421
|
+
if fragment.children.size == 1 && fragment.child.name == 'haml_loud'
|
422
|
+
if attribute_value_can_be_bare_ruby?(fragment.text)
|
423
|
+
value.replace(fragment.text.strip)
|
424
|
+
next
|
403
425
|
end
|
404
|
-
end
|
426
|
+
end
|
427
|
+
|
428
|
+
# turn erb into interpolations
|
429
|
+
fragment.css('haml_loud').each do |el|
|
430
|
+
inner_text = el.text.strip
|
431
|
+
next if inner_text == ""
|
432
|
+
el.replace('#{' + inner_text + '}')
|
433
|
+
end
|
434
|
+
|
435
|
+
# put the resulting text in a string
|
436
|
+
value.replace('"' + fragment.text.strip + '"')
|
405
437
|
end
|
406
438
|
end
|
407
439
|
|
440
|
+
def attribute_value_can_be_bare_ruby?(value)
|
441
|
+
begin
|
442
|
+
ruby = RubyParser.new.parse(value)
|
443
|
+
rescue Racc::ParseError, RubyParser::SyntaxError
|
444
|
+
return false
|
445
|
+
end
|
446
|
+
|
447
|
+
return false if ruby.nil?
|
448
|
+
return true if ruby.sexp_type == :str #regular string
|
449
|
+
return true if ruby.sexp_type == :dstr #string with interpolation
|
450
|
+
return true if ruby.sexp_type == :lit #symbol
|
451
|
+
return true if ruby.sexp_type == :call && ruby.mass == 1 #local var or method with no params
|
452
|
+
|
453
|
+
false
|
454
|
+
end
|
455
|
+
|
456
|
+
|
408
457
|
def to_haml_filter(filter, tabs, options)
|
409
458
|
content =
|
410
|
-
if children.first.cdata?
|
459
|
+
if children.first && children.first.cdata?
|
411
460
|
decode_entities(children.first.content_without_cdata_tokens)
|
412
461
|
else
|
413
462
|
decode_entities(self.inner_text)
|
data/lib/html2haml/html/erb.rb
CHANGED
@@ -15,6 +15,7 @@ module Html2haml
|
|
15
15
|
# The ERB tags are converted to HTML tags in the following way.
|
16
16
|
# `<% ... %>` is converted into `<haml_silent> ... </haml_silent>`.
|
17
17
|
# `<%= ... %>` is converted into `<haml_loud> ... </haml_loud>`.
|
18
|
+
# `<%== ... %>` is converted into `<haml_loud raw=raw> ... </haml_loud>`.
|
18
19
|
# Finally, if either of these opens a Ruby block,
|
19
20
|
# `<haml_block> ... </haml_block>` will wrap the entire contents of the block -
|
20
21
|
# that is, everything that should be indented beneath the previous silent or loud tag.
|
@@ -28,11 +29,6 @@ module Html2haml
|
|
28
29
|
new(template).src
|
29
30
|
end
|
30
31
|
|
31
|
-
# `html2haml` doesn't support HTML-escaped expressions.
|
32
|
-
def escaped_expr(code)
|
33
|
-
raise Haml::Error.new("html2haml doesn't support escaped expressions.")
|
34
|
-
end
|
35
|
-
|
36
32
|
# The ERB-to-Hamlized-HTML conversion has no preamble.
|
37
33
|
def add_preamble(src); end
|
38
34
|
|
@@ -77,6 +73,10 @@ module Html2haml
|
|
77
73
|
src << '<haml_block>' if block_opener?(code)
|
78
74
|
end
|
79
75
|
|
76
|
+
def add_expr_escaped(src, code)
|
77
|
+
src << "<haml_loud raw=raw>" << h(code) << "</haml_loud>"
|
78
|
+
end
|
79
|
+
|
80
80
|
# `html2haml` doesn't support debugging expressions.
|
81
81
|
def add_expr_debug(src, code)
|
82
82
|
raise Haml::Error.new("html2haml doesn't support debugging expressions.")
|
@@ -109,7 +109,9 @@ module Html2haml
|
|
109
109
|
# @param code [String] Ruby code to check
|
110
110
|
# @return [Boolean]
|
111
111
|
def has_code?(code)
|
112
|
-
code
|
112
|
+
return false if code == "\n"
|
113
|
+
return false if valid_ruby?(code) == nil
|
114
|
+
true
|
113
115
|
end
|
114
116
|
|
115
117
|
# Checks if a string of Ruby code opens a block.
|
data/lib/html2haml/version.rb
CHANGED
data/test/erb_test.rb
CHANGED
@@ -11,7 +11,8 @@ class ErbTest < MiniTest::Unit::TestCase
|
|
11
11
|
def test_inline_erb
|
12
12
|
assert_equal("%p= foo", render_erb("<p><%= foo %></p>"))
|
13
13
|
assert_equal(<<HAML.rstrip, render_erb(<<HTML))
|
14
|
-
%p
|
14
|
+
%p
|
15
|
+
= foo
|
15
16
|
HAML
|
16
17
|
<p><%= foo %>
|
17
18
|
</p>
|
@@ -117,6 +118,16 @@ HTML
|
|
117
118
|
render_erb('<div class="<%= "foo" %>">Bang!</div>')
|
118
119
|
end
|
119
120
|
|
121
|
+
def test_erb_in_html_escaped_attribute_with_symbol
|
122
|
+
assert_equal '%div{:class => :foo} Bang!',
|
123
|
+
render_erb('<div class="<%= :foo %>">Bang!</div>')
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_empty_erb_in_attribute
|
127
|
+
assert_equal '%div{:class => ""}',
|
128
|
+
render_erb('<div class="<%= %>"></div>')
|
129
|
+
end
|
130
|
+
|
120
131
|
def test_erb_in_attribute_to_multiple_interpolations
|
121
132
|
assert_equal('%div{:class => "#{12} + #{13}"} Math is super',
|
122
133
|
render_erb('<div class="<%= 12 %> + <%= 13 %>">Math is super</div>'))
|
@@ -198,7 +209,6 @@ ERB
|
|
198
209
|
= foo + |
|
199
210
|
bar.baz.bang + |
|
200
211
|
baz |
|
201
|
-
-#
|
202
212
|
= foo.bar do |
|
203
213
|
bang |
|
204
214
|
end |
|
@@ -482,4 +492,55 @@ HTML
|
|
482
492
|
ERB
|
483
493
|
end
|
484
494
|
|
495
|
+
def test_conditional_structure_in_argument
|
496
|
+
assert_equal(<<HAML.rstrip, render_erb(<<HTML))
|
497
|
+
%span{:class => "\#{"active" if condition}"}
|
498
|
+
HAML
|
499
|
+
<span class="<%= "active" if condition %>"></span>
|
500
|
+
HTML
|
501
|
+
end
|
502
|
+
|
503
|
+
def test_method_call_without_brackets_in_argument
|
504
|
+
assert_equal(<<HAML.rstrip, render_erb(<<HTML))
|
505
|
+
%span{:class => "\#{call_me maybe}"}
|
506
|
+
HAML
|
507
|
+
<span class="<%= call_me maybe %>"></span>
|
508
|
+
HTML
|
509
|
+
end
|
510
|
+
|
511
|
+
def test_multiline_erb_comment
|
512
|
+
assert_equal(<<HAML.rstrip, render_erb(<<ERB))
|
513
|
+
- # comment
|
514
|
+
%p hi
|
515
|
+
HAML
|
516
|
+
<%
|
517
|
+
# comment
|
518
|
+
-%>
|
519
|
+
<p>hi</p>
|
520
|
+
ERB
|
521
|
+
end
|
522
|
+
|
523
|
+
##
|
524
|
+
# <%== %> is supposed to be equal to <%= raw %>
|
525
|
+
def test_erb_with_double_equals
|
526
|
+
assert_equal(<<HAML.rstrip, render_erb(<<ERB))
|
527
|
+
!= link_to "https://github.com/haml/html2haml/issues/44"
|
528
|
+
HAML
|
529
|
+
<%== link_to "https://github.com/haml/html2haml/issues/44" %>
|
530
|
+
ERB
|
531
|
+
end
|
532
|
+
|
533
|
+
#https://github.com/haml/html2haml/issues/43
|
534
|
+
def test_escaped_ruby_call_when_preceeded_by_text
|
535
|
+
assert_equal(<<HAML.rstrip, render_erb(<<ERB))
|
536
|
+
random text
|
537
|
+
= form_tag(url: sessions_path) do
|
538
|
+
= submit_tag "cdcd"
|
539
|
+
HAML
|
540
|
+
random text
|
541
|
+
<%= form_tag(url: sessions_path) do %>
|
542
|
+
<%= submit_tag "cdcd" %>
|
543
|
+
<% end %>
|
544
|
+
ERB
|
545
|
+
end
|
485
546
|
end
|
data/test/html2haml_test.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
class Html2HamlTest < MiniTest::Unit::TestCase
|
@@ -52,6 +53,10 @@ class Html2HamlTest < MiniTest::Unit::TestCase
|
|
52
53
|
render('<meta http-equiv="Content-Type" content="text/html" />', :ruby19_style_attributes => true))
|
53
54
|
end
|
54
55
|
|
56
|
+
def test_should_have_attributes_without_values
|
57
|
+
assert_equal('%input{:disabled => "disabled"}/', render('<input disabled>'))
|
58
|
+
end
|
59
|
+
|
55
60
|
def test_class_with_dot_and_hash
|
56
61
|
assert_equal('%div{:class => "foo.bar"}', render("<div class='foo.bar'></div>"))
|
57
62
|
assert_equal('%div{:class => "foo#bar"}', render("<div class='foo#bar'></div>"))
|
@@ -279,6 +284,19 @@ HAML
|
|
279
284
|
HTML
|
280
285
|
end
|
281
286
|
|
287
|
+
def test_style_to_css_filter_with_no_content
|
288
|
+
assert_equal(<<HAML.rstrip, render(<<HTML))
|
289
|
+
:css
|
290
|
+
HAML
|
291
|
+
<style type="text/css"> </style>
|
292
|
+
HTML
|
293
|
+
assert_equal(<<HAML.rstrip, render(<<HTML))
|
294
|
+
:css
|
295
|
+
HAML
|
296
|
+
<style type="text/css"></style>
|
297
|
+
HTML
|
298
|
+
end
|
299
|
+
|
282
300
|
def test_filter_with_inconsistent_indentation
|
283
301
|
assert_equal(<<HAML.rstrip, render(<<HTML))
|
284
302
|
:css
|
@@ -387,6 +405,7 @@ HTML
|
|
387
405
|
!!!
|
388
406
|
%html
|
389
407
|
%head
|
408
|
+
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
390
409
|
%title Hello
|
391
410
|
%body
|
392
411
|
%p Hello
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#reopen classes that need to be modified for JRuby specific behavior
|
2
|
+
class ErbTest
|
3
|
+
def test_two_multiline_erb_loud_scripts
|
4
|
+
assert_equal(<<HAML.rstrip, render_erb(<<ERB))
|
5
|
+
.blah
|
6
|
+
= foo + |
|
7
|
+
bar.baz.bang + |
|
8
|
+
baz |
|
9
|
+
= foo.bar do |
|
10
|
+
bang |
|
11
|
+
end |
|
12
|
+
%p foo
|
13
|
+
HAML
|
14
|
+
<div class="blah">
|
15
|
+
<%=
|
16
|
+
foo +
|
17
|
+
bar.baz.bang +
|
18
|
+
baz
|
19
|
+
%>
|
20
|
+
<%= foo.bar do
|
21
|
+
bang
|
22
|
+
end %>
|
23
|
+
<p>foo</p>
|
24
|
+
</div>
|
25
|
+
ERB
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
class Html2HamlTest
|
2
|
+
|
3
|
+
def test_doctype
|
4
|
+
empty_body = "\n%html\n %head\n %body"
|
5
|
+
assert_equal '!!!' + empty_body, render("<!DOCTYPE html>")
|
6
|
+
assert_equal '!!! 1.1' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">')
|
7
|
+
assert_equal '!!! Strict' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">')
|
8
|
+
assert_equal '!!! Frameset' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">')
|
9
|
+
assert_equal '!!! Mobile 1.2' + empty_body, render('<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">')
|
10
|
+
assert_equal '!!! Basic 1.1' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">')
|
11
|
+
assert_equal '!!!' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">')
|
12
|
+
assert_equal '!!! Strict' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">')
|
13
|
+
assert_equal '!!! Frameset' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">')
|
14
|
+
assert_equal '!!!' + empty_body, render('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">')
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_xhtml_strict_doctype
|
18
|
+
assert_equal(<<HAML.rstrip, render(<<HTML))
|
19
|
+
!!! Strict
|
20
|
+
%html
|
21
|
+
%head
|
22
|
+
%body
|
23
|
+
HAML
|
24
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
25
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
26
|
+
HTML
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_html_document_without_doctype
|
30
|
+
assert_equal(<<HAML.rstrip, render(<<HTML))
|
31
|
+
%html
|
32
|
+
%head
|
33
|
+
%title Hello
|
34
|
+
%body
|
35
|
+
%p Hello
|
36
|
+
HAML
|
37
|
+
<html>
|
38
|
+
<head>
|
39
|
+
<title>Hello</title>
|
40
|
+
</head>
|
41
|
+
<body>
|
42
|
+
<p>Hello</p>
|
43
|
+
</body>
|
44
|
+
</html>
|
45
|
+
HTML
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_should_have_attributes_without_values
|
49
|
+
assert_equal('%input{:disabled => ""}/', render('<input disabled>'))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_style_to_css_filter_with_following_content
|
53
|
+
assert_equal(<<HAML.rstrip, render(<<HTML))
|
54
|
+
%head
|
55
|
+
:css
|
56
|
+
foo {
|
57
|
+
bar: baz;
|
58
|
+
}
|
59
|
+
%body
|
60
|
+
Hello
|
61
|
+
HAML
|
62
|
+
<head>
|
63
|
+
<style type="text/css">
|
64
|
+
foo {
|
65
|
+
bar: baz;
|
66
|
+
}
|
67
|
+
</style>
|
68
|
+
</head>
|
69
|
+
<body>Hello</body>
|
70
|
+
HTML
|
71
|
+
end
|
72
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html2haml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Norman Clarke
|
@@ -9,104 +9,104 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: 1.6.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 1.6.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: erubis
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 2.7.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 2.7.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: ruby_parser
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 3.
|
48
|
+
version: '3.5'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 3.
|
55
|
+
version: '3.5'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: haml
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: 4.0.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 4.0.0
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: simplecov
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ~>
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 0.7.1
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - ~>
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: 0.7.1
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: minitest
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - ~>
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: 4.4.0
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - ~>
|
95
|
+
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 4.4.0
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rake
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
description: Converts HTML into Haml
|
@@ -118,9 +118,9 @@ executables:
|
|
118
118
|
extensions: []
|
119
119
|
extra_rdoc_files: []
|
120
120
|
files:
|
121
|
-
- .gitignore
|
122
|
-
- .travis.yml
|
123
|
-
- .yardopts
|
121
|
+
- ".gitignore"
|
122
|
+
- ".travis.yml"
|
123
|
+
- ".yardopts"
|
124
124
|
- Changelog.markdown
|
125
125
|
- Gemfile
|
126
126
|
- MIT-LICENSE
|
@@ -135,6 +135,8 @@ files:
|
|
135
135
|
- lib/html2haml/version.rb
|
136
136
|
- test/erb_test.rb
|
137
137
|
- test/html2haml_test.rb
|
138
|
+
- test/jruby/erb_test.rb
|
139
|
+
- test/jruby/html2haml_test.rb
|
138
140
|
- test/test_helper.rb
|
139
141
|
homepage: http://haml.info
|
140
142
|
licenses: []
|
@@ -145,21 +147,23 @@ require_paths:
|
|
145
147
|
- lib
|
146
148
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
149
|
requirements:
|
148
|
-
- -
|
150
|
+
- - ">="
|
149
151
|
- !ruby/object:Gem::Version
|
150
152
|
version: 1.9.2
|
151
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
154
|
requirements:
|
153
|
-
- -
|
155
|
+
- - ">="
|
154
156
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
157
|
+
version: '0'
|
156
158
|
requirements: []
|
157
159
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.
|
160
|
+
rubygems_version: 2.4.5
|
159
161
|
signing_key:
|
160
162
|
specification_version: 4
|
161
163
|
summary: Converts HTML into Haml
|
162
164
|
test_files:
|
163
165
|
- test/erb_test.rb
|
164
166
|
- test/html2haml_test.rb
|
167
|
+
- test/jruby/erb_test.rb
|
168
|
+
- test/jruby/html2haml_test.rb
|
165
169
|
- test/test_helper.rb
|