h5-min 0.2.0 → 0.2.1

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.
Files changed (3) hide show
  1. data/VERSION +1 -1
  2. data/lib/h5-min.rb +38 -3
  3. metadata +3 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -17,6 +17,31 @@ module HTML5
17
17
  strong style sub sup svg table textarea time ul var video wbr
18
18
  }.map(&:to_sym)
19
19
 
20
+ BOOL_ATTR = {
21
+ _: [:itemscope, :hidden],
22
+ audio: [:loop, :autoplay, :controls],
23
+ button: [:formnovalidate, :disabled, :autofocus],
24
+ command: [:disabled, :checked],
25
+ details: [:open],
26
+ fieldset: [:disabled],
27
+ form: [:novalidate],
28
+ iframe: [:seamless],
29
+ img: [:ismap],
30
+ input: [:autocomplete, :autofocus, :defaultchecked,
31
+ :checked, :disabled, :formnovalidate, :indeterminate,
32
+ :multiple, :readonly, :required],
33
+ keygen: [:disabled, :autofocus],
34
+ optgroup: [:disabled],
35
+ option: [:disabled, :defaultselected, :selected],
36
+ ol: [:reversed],
37
+ select: [:autofocus, :disabled, :multiple],
38
+ script: [:async, :defer],
39
+ style: [:scoped],
40
+ textarea: [:autofocus, :disabled, :readonly, :required],
41
+ time: [:pubdate],
42
+ video: [:loop, :autoplay, :controls],
43
+ }
44
+
20
45
  @minifier ||= Class.new(Nokogiri::XML::SAX::Document) do
21
46
 
22
47
  attr_accessor :buf, :text_node, :entities
@@ -36,7 +61,7 @@ module HTML5
36
61
  name = normalise_name name
37
62
  dump_text_node
38
63
  @stack.push name
39
- buf << "<#{name}" + format_attributes(attrs) + ">"
64
+ buf << "<#{name}" + format_attributes(attrs, name) + ">"
40
65
  end
41
66
 
42
67
  def end_element name
@@ -72,14 +97,18 @@ module HTML5
72
97
  name.downcase.to_sym
73
98
  end
74
99
 
75
- def format_attributes attrs
100
+ def format_attributes attrs, element
76
101
  return '' if attrs.empty?
77
102
  Hash[*attrs].map do |name, value|
78
103
  [normalise_name(name), format_attribute_value(value)]
79
104
  end.sort_by do |name, value|
80
105
  name
81
106
  end.map do |name, value|
82
- "#{name}=#{value}"
107
+ if boolean_attribute?(element, name)
108
+ name.to_s
109
+ else
110
+ "#{name}=#{value}"
111
+ end
83
112
  end.join(' ').insert(0, ' ')
84
113
  end
85
114
 
@@ -91,6 +120,12 @@ module HTML5
91
120
  value =~ /[[:space:]"'><=`]/ or value.empty?
92
121
  end
93
122
 
123
+ def boolean_attribute? element, attribute
124
+ e, a = [element, attribute].map(&:to_sym)
125
+ BOOL_ATTR[:_].include?(a) or
126
+ (BOOL_ATTR.key?(e) and BOOL_ATTR[e].include?(a))
127
+ end
128
+
94
129
  def format_entities html, except={}
95
130
  html = entities.encode(entities.decode(html), :basic)
96
131
  except.each{|name, replace| html.gsub!(/&#{name};/, replace)}
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Run Paint Run Run
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-26 00:00:00 +01:00
17
+ date: 2010-10-07 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency