html-to-css 0.1.3 → 0.1.4
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
- checksums.yaml.gz.sig +3 -5
- data.tar.gz.sig +0 -0
- data/lib/html-to-css.rb +48 -16
- metadata +1 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ce023ea55a86ff16fef105a2ae4c1a7338aa76a
|
4
|
+
data.tar.gz: 6befdb1a8b3c493fb40b51d3e94e272e6aa82fb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df21b9e5cba643f151dbc83cf54b553a3e323439cc4fae9a84c029c62a3acf2fcbd3fb57278dbdb18b7bec04a0506096bc2f6d8f178b6676781e7320d3705f41
|
7
|
+
data.tar.gz: 8853e230d5609db634711ccadf56e5387379eccf014bd2c433acd2a2287da283ab67c07cf6f184797a0116e8d10fc4407e7f96ef72af3aa7d18bfcff3bc59039
|
checksums.yaml.gz.sig
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
|
2
|
-
�
|
3
|
-
|
4
|
-
�b��=�p>��F'S�aG����<�g�|���
|
5
|
-
. �ه��0�x(� ى�C#naN#٤�;W��Fu�֔��5�XQ$ `�8�3��ze1��dw
|
1
|
+
P27�|��!���\_6���8��XN�_+��]��>�e6Z�$�����Q)���7�7ك�̺�{v&sq ���2.����}@�At��cCO��ûě���16%���0p��U�����S�����4�����D��.�m��|+]�Sh� � jz��&�#�8}\����f�q������(�^lL�q{R��$�z��"�E<�*�����)���G���9q�i�
|
2
|
+
ғ}��/��MP�
|
3
|
+
��Aj��
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/html-to-css.rb
CHANGED
@@ -13,6 +13,8 @@ end
|
|
13
13
|
|
14
14
|
class HtmlToCss
|
15
15
|
|
16
|
+
attr_accessor :elements
|
17
|
+
|
16
18
|
def initialize(filename=nil)
|
17
19
|
|
18
20
|
if filename then
|
@@ -27,7 +29,8 @@ class HtmlToCss
|
|
27
29
|
end
|
28
30
|
|
29
31
|
@selectors = []
|
30
|
-
@nocss = ['head'
|
32
|
+
@nocss = ['head']
|
33
|
+
@nolayoutcss = ['ul li ul', 'p a', 'div div \w+']
|
31
34
|
@css = []
|
32
35
|
|
33
36
|
@elements = {
|
@@ -51,17 +54,34 @@ class HtmlToCss
|
|
51
54
|
end
|
52
55
|
|
53
56
|
def to_css()
|
54
|
-
|
55
|
-
@css.join "\n"
|
57
|
+
apply_css
|
56
58
|
end
|
57
59
|
|
58
60
|
def to_layout()
|
59
|
-
|
60
|
-
|
61
|
+
|
62
|
+
css = apply_css(:layout) {|doc| select_layout_elements(doc) }
|
63
|
+
@layout_selectors = @selectors.clone
|
64
|
+
css
|
65
|
+
end
|
66
|
+
|
67
|
+
def to_style()
|
68
|
+
apply_css :style
|
61
69
|
end
|
62
70
|
|
63
71
|
private
|
64
72
|
|
73
|
+
def apply_css(type=:default)
|
74
|
+
|
75
|
+
@css, @selectors = [], []
|
76
|
+
doc = @doc.root.deep_clone
|
77
|
+
|
78
|
+
yield(doc) if block_given?
|
79
|
+
|
80
|
+
scan_to_css(type, doc.root)
|
81
|
+
@layout_selectors = @selectors.clone
|
82
|
+
@css.join "\n"
|
83
|
+
end
|
84
|
+
|
65
85
|
def merge(mdoc, e, axpath=[], prev_tally=[])
|
66
86
|
|
67
87
|
i = (e.parent.parent and prev_tally.last) ?
|
@@ -92,7 +112,7 @@ class HtmlToCss
|
|
92
112
|
tally
|
93
113
|
end
|
94
114
|
|
95
|
-
def scan_to_css(e, indent='', parent_selector='')
|
115
|
+
def scan_to_css(type, e, indent='', parent_selector='', &blk)
|
96
116
|
|
97
117
|
return if @nocss.include? e.name
|
98
118
|
h = e.attributes
|
@@ -102,21 +122,33 @@ class HtmlToCss
|
|
102
122
|
else
|
103
123
|
selector = (parent_selector + ' ' + e.name).strip
|
104
124
|
end
|
105
|
-
|
106
|
-
return if @
|
125
|
+
|
126
|
+
return if @nolayoutcss.detect {|x| selector =~ /#{x}/ } and type == :layout
|
107
127
|
|
108
128
|
unless @selectors.include? selector then
|
109
129
|
|
110
130
|
@selectors << selector
|
111
131
|
|
112
132
|
if @elements.has_key?(e.name.to_sym) then
|
113
|
-
attributes = @elements[e.name.to_sym].strip.sub(':color','#
|
133
|
+
attributes = @elements[e.name.to_sym].strip.sub(':color','#a5f').to_h
|
114
134
|
else
|
115
135
|
attributes = {}
|
116
136
|
end
|
117
|
-
|
118
|
-
|
119
|
-
|
137
|
+
|
138
|
+
h_attributes = attributes.merge! h[:style].to_h
|
139
|
+
|
140
|
+
if type == :layout then
|
141
|
+
|
142
|
+
%w(font color font-family font-size background-image border line-height
|
143
|
+
list-style-type font-weight font-style)\
|
144
|
+
.each {|x| h_attributes.delete x if h_attributes.has_key? x}
|
145
|
+
elsif type == :style and @layout_selectors.include? selector
|
146
|
+
|
147
|
+
%w(float margin padding clear align width height display overflow)\
|
148
|
+
.each {|x| h_attributes.delete x if h_attributes.has_key? x}
|
149
|
+
end
|
150
|
+
|
151
|
+
attr = h_attributes.map{|x| x.join(': ')}.join(";\n" + indent + ' ')
|
120
152
|
|
121
153
|
@css << indent + selector + " {\n#{indent} #{attr}\n#{indent}}"
|
122
154
|
|
@@ -126,13 +158,13 @@ class HtmlToCss
|
|
126
158
|
|
127
159
|
indent += ' '
|
128
160
|
e.elements.each do |x|
|
129
|
-
scan_to_css x, indent, parent_selector
|
161
|
+
scan_to_css type, x, indent, parent_selector
|
130
162
|
end
|
131
163
|
end
|
132
164
|
|
133
|
-
def select_layout_elements()
|
165
|
+
def select_layout_elements(doc)
|
134
166
|
|
135
|
-
a =
|
167
|
+
a = doc.root.xpath '//div'
|
136
168
|
a.reverse.each do |e|
|
137
169
|
|
138
170
|
if not e.attributes[:id] then
|
@@ -152,4 +184,4 @@ end
|
|
152
184
|
|
153
185
|
if __FILE__ == $0 then
|
154
186
|
css = HtmlToCss.new('index.html').to_css
|
155
|
-
end
|
187
|
+
end
|
metadata
CHANGED
metadata.gz.sig
CHANGED
Binary file
|