domle 0.1.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.
Files changed (6) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/domle.rb +204 -0
  4. data.tar.gz.sig +3 -0
  5. metadata +107 -0
  6. metadata.gz.sig +0 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b669ac04fc6c2f2b7cb65e5bede13659a1af8fb8
4
+ data.tar.gz: 43f8dd92c69ead467c7b8fd2e8c26e981f8720e3
5
+ SHA512:
6
+ metadata.gz: 41407e72d054a16ce636d3ce1756d20e5413e947058e4a07f2d0c5ad7005639d2e6b1c43f69901839508a57cbeba0045c3520f73a10723e158f489944afb2492
7
+ data.tar.gz: 3f7ad78ef84fad0336336553d585b569a0fbf876e676bad5149b8aa928d75470ad246c93f2b5811b6d6f19d34ef88a571ffa39f3da0aaba236ff49d77f4a86e5
checksums.yaml.gz.sig ADDED
Binary file
data/lib/domle.rb ADDED
@@ -0,0 +1,204 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: domle.rb
4
+
5
+ require 'rexle'
6
+ require 'rxfhelper'
7
+
8
+
9
+ class Style < Hash
10
+
11
+ def initialize(parent, h)
12
+ @parent = parent
13
+
14
+ super().merge! h
15
+
16
+ end
17
+
18
+ def []=(k,v)
19
+
20
+ super(k,v)
21
+ @parent[:style] = self.map{|x| x.join(':') }.join(';')
22
+ @parent.callback.refresh
23
+
24
+ end
25
+ end
26
+
27
+ class Attributes
28
+
29
+ attr_reader :callback
30
+
31
+ def initialize(parent: nil)
32
+ @callback = parent
33
+ end
34
+
35
+ def style(parent=nil)
36
+
37
+ @callback ||= parent
38
+
39
+ if @style.nil? then
40
+
41
+ h = self[:style].split(';').inject({}) do |r, x|
42
+ k, v = x.split(':',2)
43
+ r.merge(k.to_sym => v)
44
+ end
45
+
46
+ @style = Style.new(self, h)
47
+
48
+ end
49
+ @style
50
+ end
51
+
52
+ end
53
+
54
+ class Domle < Rexle
55
+
56
+ class Element < Rexle::Element
57
+
58
+ def initialize(name=nil, value: nil, \
59
+ attributes: Attributes.new(parent: self), rexle: nil)
60
+
61
+ attributes.merge!(style: '') unless attributes.has_key? :style
62
+ super(name, value: value, attributes: attributes, rexle: rexle)
63
+
64
+ end
65
+
66
+ def self.attr2_accessor(*a)
67
+
68
+ a.concat %i(id transform)
69
+ a.concat %i(onmousemove onmousedown) # DOM events
70
+
71
+ a.each do |attribute|
72
+
73
+ class_eval do
74
+
75
+ define_method attribute.to_s.gsub('-','_').to_sym do
76
+ attributes[attribute]
77
+ end
78
+
79
+ define_method (attribute.to_s + '=').to_sym do |val|
80
+ attributes[attribute] = val
81
+ @rexle.refresh
82
+ val
83
+ end
84
+
85
+ end
86
+ end
87
+ end
88
+
89
+ def style()
90
+ attributes.style(@rexle)
91
+ end
92
+
93
+
94
+ def hotspot?(x,y)
95
+
96
+ (boundary.first.is_a?(Array) ? boundary : [boundary]).all? do |box|
97
+ x1, y1, x2, y2 = box
98
+ (x1..x2).include? x and (y1..y2).include? y
99
+ end
100
+ end
101
+ end
102
+
103
+ class Script < Element
104
+
105
+ end
106
+
107
+ class Style < Element
108
+
109
+
110
+ end
111
+
112
+ def initialize(x=nil, callback: nil)
113
+ super x
114
+ find_add_css()
115
+ @callback = callback
116
+ end
117
+
118
+ def refresh()
119
+ @callback.refresh if @callback
120
+ end
121
+
122
+ private
123
+
124
+ def add_css(s)
125
+
126
+ # parse the CSS
127
+
128
+ a = s.split(/}/)[0..-2].map do |entry|
129
+
130
+ raw_selector,raw_styles = entry.split(/{/,2)
131
+
132
+ h = raw_styles.split(/;/).inject({}) do |r, x|
133
+ k, v = x.split(/:/,2).map(&:strip)
134
+ r.merge(k.to_sym => v)
135
+ end
136
+
137
+ [raw_selector.split(/,\s*/).map(&:strip), h]
138
+ end
139
+
140
+
141
+ # add each CSS style attribute to the element
142
+ # e.g. a = [[['line'],{stroke: 'green'}]]
143
+
144
+ a.each do |x|
145
+
146
+ selectors, style = x
147
+
148
+ selectors.each do |selector|
149
+
150
+ style.each do |k,v|
151
+ self.css(selector).each {|element| element.style[k] = v }
152
+ end
153
+
154
+ end
155
+ end
156
+
157
+ end
158
+
159
+ def defined_elements()
160
+
161
+ # override this method in your own class
162
+
163
+ end
164
+
165
+ def scan_element(name, attributes=nil, *children)
166
+
167
+ return Rexle::CData.new(children.first) if name == '!['
168
+ return Rexle::Comment.new(children.first) if name == '!-'
169
+
170
+ type = defined_elements()
171
+
172
+ element = type[name.to_sym].new(name, attributes: attributes, rexle: self)
173
+
174
+ if children then
175
+
176
+ children.each do |x|
177
+ if x.is_a? Array then
178
+
179
+ element.add_element scan_element(*x)
180
+ elsif x.is_a? String then
181
+
182
+ e = if x.is_a? String then
183
+
184
+ x
185
+ elsif x.name == '![' then
186
+
187
+ Rexle::CData.new(x)
188
+
189
+ elsif x.name == '!-' then
190
+
191
+ Rexle::Comment.new(x)
192
+
193
+ end
194
+
195
+ element.add_element e
196
+ end
197
+ end
198
+ end
199
+
200
+ return element
201
+ end
202
+
203
+
204
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+ �Ձ����5�U�x�G9��
2
+ �u�o��O{q�ak8�|�e'C\w��XR�f$�����`)Ȍ�)T���stt�f
3
+ �3\�n=%�5���t|FW�v0����E��,��o��JY��je�����r��^�] -�E�$��?�[��dkC�C7�a� ���n��,�o���O}���Q��C�|%S�%�G�����ǚ�^��}��@D��˛���ݔ���A\� I���_}�cfm��SA�ao�vf6�J\�
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: domle
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTE1MTEyNTA3MDI0NFoXDTE2MTEyNDA3MDI0NFowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBAMN/NpuJ/+ruuzlhABoeEzVayyXIkLjE36YBtRLfHxLPLaBSMqCCTpnG+YIa
19
+ uj01Z+JuBE0qDHn6YLFlPdte+uHylvsKGmpc2APj15TMEMUV29T2ht3RGAdI6bur
20
+ bUIBb92opefXgdytHQUUriVG8l5SPWfVHloeW4ePQXD3aq0gLkgaclMe+0i0nYiv
21
+ lbvZ17OIEcI9TYMoUkBMPhJXB0CQhkcsNri2TBdy4CwOYVQATKEJlF4UuQOFPEW0
22
+ G+gRqvut9Lb0zvsqNUsVgF3+D+0GwUJNTs22nKPhevdenXipiOu2E/h4TohRB1Kf
23
+ AUcXbwQLjRozG6DxdB9NEtCdUW8CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUaOF+0Enp86w/Cn8KaxdcKd/ldDQwJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAlXHzC4EB
27
+ jUlic/3hCzv7caE2FJrEERCMGQBJA7SF15fYRiTmxQcaHi1o8GIJkxxyMGgbXA5W
28
+ 7WbJhp7msx1/c1HAQvN9MKtWYteMRKDNG1dI0WTnkgPn5zWqZrQ2HaeKpMq4lSH3
29
+ 0i3ndHejznyZz4x8iayE1MVc3Xr9/XX722cGAkDQPvCxn+CViDkjqLGr1dq+9xPn
30
+ 3DsjG29KT43IzWADBwOqFpsQQMq30QC4WNtXzvAncKlOCK7kyt4xoQbysrdPJLL9
31
+ muChG/wXkD8GIq07qcmVUML8wWvVNdAWtcW8E1gAnZxpblXiaPWUR2/GPHFIWD96
32
+ MQgLkQyjNK0weA==
33
+ -----END CERTIFICATE-----
34
+ date: 2015-11-25 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rexle
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.3'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.9
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '1.3'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 1.3.9
56
+ - !ruby/object:Gem::Dependency
57
+ name: rxfhelper
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.2'
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 0.2.3
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '0.2'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.3
76
+ description:
77
+ email: james@r0bertson.co.uk
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - lib/domle.rb
83
+ homepage: https://github.com/jrobertson/domle
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.4.8
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: The document object model used by the Svgle gem
107
+ test_files: []
metadata.gz.sig ADDED
Binary file