opal-browser 0.1.0.beta1

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 (127) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +11 -0
  5. data/README.md +106 -0
  6. data/Rakefile +5 -0
  7. data/config.ru +63 -0
  8. data/lib/opal/browser.rb +4 -0
  9. data/opal-browser.gemspec +23 -0
  10. data/opal/browser.rb +10 -0
  11. data/opal/browser/animation_frame.rb +29 -0
  12. data/opal/browser/canvas.rb +277 -0
  13. data/opal/browser/canvas/data.rb +73 -0
  14. data/opal/browser/canvas/gradient.rb +37 -0
  15. data/opal/browser/canvas/style.rb +123 -0
  16. data/opal/browser/canvas/text.rb +55 -0
  17. data/opal/browser/compatibility.rb +59 -0
  18. data/opal/browser/compatibility/animation_frame.rb +93 -0
  19. data/opal/browser/compatibility/dom/document/window.rb +15 -0
  20. data/opal/browser/compatibility/dom/element/css.rb +15 -0
  21. data/opal/browser/compatibility/dom/element/matches.rb +31 -0
  22. data/opal/browser/compatibility/dom/element/offset.rb +20 -0
  23. data/opal/browser/compatibility/dom/element/scroll.rb +25 -0
  24. data/opal/browser/compatibility/dom/element/style.rb +15 -0
  25. data/opal/browser/compatibility/dom/mutation_observer.rb +47 -0
  26. data/opal/browser/compatibility/http/request.rb +15 -0
  27. data/opal/browser/compatibility/immediate.rb +107 -0
  28. data/opal/browser/compatibility/window/scroll.rb +27 -0
  29. data/opal/browser/compatibility/window/size.rb +13 -0
  30. data/opal/browser/compatibility/window/view.rb +13 -0
  31. data/opal/browser/console.rb +137 -0
  32. data/opal/browser/cookies.rb +79 -0
  33. data/opal/browser/css.rb +24 -0
  34. data/opal/browser/css/declaration.rb +88 -0
  35. data/opal/browser/css/rule.rb +48 -0
  36. data/opal/browser/css/rule/style.rb +16 -0
  37. data/opal/browser/css/style_sheet.rb +83 -0
  38. data/opal/browser/css/unit.rb +188 -0
  39. data/opal/browser/dom.rb +95 -0
  40. data/opal/browser/dom/attribute.rb +19 -0
  41. data/opal/browser/dom/builder.rb +97 -0
  42. data/opal/browser/dom/cdata.rb +9 -0
  43. data/opal/browser/dom/character_data.rb +37 -0
  44. data/opal/browser/dom/comment.rb +9 -0
  45. data/opal/browser/dom/compatibility.rb +8 -0
  46. data/opal/browser/dom/document.rb +83 -0
  47. data/opal/browser/dom/document_fragment.rb +7 -0
  48. data/opal/browser/dom/element.rb +290 -0
  49. data/opal/browser/dom/element/input.rb +17 -0
  50. data/opal/browser/dom/element/offset.rb +67 -0
  51. data/opal/browser/dom/element/position.rb +37 -0
  52. data/opal/browser/dom/element/scroll.rb +49 -0
  53. data/opal/browser/dom/event.rb +240 -0
  54. data/opal/browser/dom/event/animation.rb +26 -0
  55. data/opal/browser/dom/event/audio_processing.rb +31 -0
  56. data/opal/browser/dom/event/base.rb +207 -0
  57. data/opal/browser/dom/event/before_unload.rb +13 -0
  58. data/opal/browser/dom/event/clipboard.rb +26 -0
  59. data/opal/browser/dom/event/close.rb +35 -0
  60. data/opal/browser/dom/event/composition.rb +38 -0
  61. data/opal/browser/dom/event/custom.rb +30 -0
  62. data/opal/browser/dom/event/device_light.rb +21 -0
  63. data/opal/browser/dom/event/device_motion.rb +38 -0
  64. data/opal/browser/dom/event/device_orientation.rb +36 -0
  65. data/opal/browser/dom/event/device_proximity.rb +31 -0
  66. data/opal/browser/dom/event/drag.rb +113 -0
  67. data/opal/browser/dom/event/focus.rb +23 -0
  68. data/opal/browser/dom/event/gamepad.rb +47 -0
  69. data/opal/browser/dom/event/hash_change.rb +26 -0
  70. data/opal/browser/dom/event/keyboard.rb +93 -0
  71. data/opal/browser/dom/event/message.rb +50 -0
  72. data/opal/browser/dom/event/mouse.rb +253 -0
  73. data/opal/browser/dom/event/page_transition.rb +21 -0
  74. data/opal/browser/dom/event/pop_state.rb +21 -0
  75. data/opal/browser/dom/event/progress.rb +31 -0
  76. data/opal/browser/dom/event/sensor.rb +13 -0
  77. data/opal/browser/dom/event/storage.rb +41 -0
  78. data/opal/browser/dom/event/touch.rb +69 -0
  79. data/opal/browser/dom/event/ui.rb +22 -0
  80. data/opal/browser/dom/event/wheel.rb +49 -0
  81. data/opal/browser/dom/mutation_observer.rb +118 -0
  82. data/opal/browser/dom/node.rb +317 -0
  83. data/opal/browser/dom/node_set.rb +88 -0
  84. data/opal/browser/dom/text.rb +21 -0
  85. data/opal/browser/effects.rb +39 -0
  86. data/opal/browser/event_source.rb +67 -0
  87. data/opal/browser/history.rb +54 -0
  88. data/opal/browser/http.rb +129 -0
  89. data/opal/browser/http/binary.rb +57 -0
  90. data/opal/browser/http/compatibility.rb +1 -0
  91. data/opal/browser/http/headers.rb +90 -0
  92. data/opal/browser/http/parameters.rb +8 -0
  93. data/opal/browser/http/request.rb +331 -0
  94. data/opal/browser/http/response.rb +115 -0
  95. data/opal/browser/immediate.rb +43 -0
  96. data/opal/browser/interval.rb +93 -0
  97. data/opal/browser/location.rb +77 -0
  98. data/opal/browser/navigator.rb +151 -0
  99. data/opal/browser/screen.rb +40 -0
  100. data/opal/browser/socket.rb +115 -0
  101. data/opal/browser/storage.rb +149 -0
  102. data/opal/browser/timeout.rb +60 -0
  103. data/opal/browser/utils.rb +56 -0
  104. data/opal/browser/version.rb +3 -0
  105. data/opal/browser/window.rb +113 -0
  106. data/opal/browser/window/compatibility.rb +3 -0
  107. data/opal/browser/window/scroll.rb +49 -0
  108. data/opal/browser/window/size.rb +35 -0
  109. data/opal/browser/window/view.rb +18 -0
  110. data/spec/dom/builder_spec.rb +69 -0
  111. data/spec/dom/document_spec.rb +40 -0
  112. data/spec/dom/element_spec.rb +46 -0
  113. data/spec/dom/event_spec.rb +127 -0
  114. data/spec/dom/mutation_observer_spec.rb +37 -0
  115. data/spec/dom/node_spec.rb +154 -0
  116. data/spec/dom_spec.rb +13 -0
  117. data/spec/event_source_spec.rb +42 -0
  118. data/spec/history_spec.rb +48 -0
  119. data/spec/http_spec.rb +87 -0
  120. data/spec/immediate_spec.rb +12 -0
  121. data/spec/json2.js +486 -0
  122. data/spec/sizzle.js +5 -0
  123. data/spec/socket_spec.rb +43 -0
  124. data/spec/spec_helper.rb +37 -0
  125. data/spec/storage_spec.rb +26 -0
  126. data/spec/window_spec.rb +10 -0
  127. metadata +240 -0
@@ -0,0 +1,31 @@
1
+ module Browser; module DOM; class Event
2
+
3
+ class DeviceProximity < Event
4
+ def self.supported?
5
+ not $$[:DeviceProximityEvent].nil?
6
+ end
7
+
8
+ class Definition < Definition
9
+ def value=(value)
10
+ `#@native.value = #{value}`
11
+ end
12
+
13
+ def min=(value)
14
+ `#@native.min = #{value}`
15
+ end
16
+
17
+ def max=(value)
18
+ `#@native.max = #{value}`
19
+ end
20
+ end
21
+
22
+ def self.create(name, &block)
23
+ new(`new DeviceProximityEvent(#{name}, #{Definition.new(&block)})`)
24
+ end
25
+
26
+ alias_native :value
27
+ alias_native :min
28
+ alias_native :max
29
+ end
30
+
31
+ end; end; end
@@ -0,0 +1,113 @@
1
+ module Browser; module DOM; class Event
2
+
3
+ # TODO: handle transfers
4
+ class Drag < Event
5
+ def self.supported?
6
+ not $$[:DragEvent].nil?
7
+ end
8
+
9
+ class Definition < Definition
10
+ class Client
11
+ include Native
12
+
13
+ def x=(value)
14
+ `#@native.clientX = #{value}`
15
+ end
16
+
17
+ def y=(value)
18
+ `#@native.clientY = #{value}`
19
+ end
20
+ end
21
+
22
+ class Screen
23
+ include Native
24
+
25
+ def x=(value)
26
+ `#@native.screenX = #{value}`
27
+ end
28
+
29
+ def y=(value)
30
+ `#@native.screenY = #{value}`
31
+ end
32
+ end
33
+
34
+ def alt!
35
+ `#@native.altKey = true`
36
+ end
37
+
38
+ def ctrl!
39
+ `#@native.ctrlKey = true`
40
+ end
41
+
42
+ def meta!
43
+ `#@native.metaKey = true`
44
+ end
45
+
46
+ def button=(value)
47
+ `#@native.button = #{value}`
48
+ end
49
+
50
+ def client
51
+ Client.new(@native)
52
+ end
53
+
54
+ def screen
55
+ Screen.new(@native)
56
+ end
57
+
58
+ def related=(elem)
59
+ `#@native.relatedTarget = #{Native.try_convert(elem)}`
60
+ end
61
+
62
+
63
+
64
+ end
65
+
66
+ def self.create(name, &block)
67
+ new(`new DragEvent(#{name}, #{Definition.new(&block)})`)
68
+ end
69
+
70
+ Position = Struct.new(:x, :y)
71
+
72
+ def alt?
73
+ `#@native.altKey`
74
+ end
75
+
76
+ def ctrl?
77
+ `#@native.ctrlKey`
78
+ end
79
+
80
+ def meta?
81
+ `#@native.metaKey`
82
+ end
83
+
84
+ def shift?
85
+ `#@native.shiftKey`
86
+ end
87
+
88
+ def button
89
+ `#@native.button`
90
+ end
91
+
92
+ def client
93
+ Position.new(`#@native.clientX`, `#@native.clientY`)
94
+ end
95
+
96
+ def screen
97
+ Position.new(`#@native.screenX`, `#@native.screenY`) if defined?(`#@native.screenX`)
98
+ end
99
+
100
+ def x
101
+ screen.x
102
+ end
103
+
104
+ def y
105
+ screen.y
106
+ end
107
+
108
+ def related
109
+ DOM(`#@native.relatedTarget`)
110
+ end
111
+ end
112
+
113
+ end; end; end
@@ -0,0 +1,23 @@
1
+ module Browser; module DOM; class Event
2
+
3
+ class Focus < UI
4
+ def self.supported?
5
+ not $$[:FocusEvent].nil?
6
+ end
7
+
8
+ class Definition < UI::Definition
9
+ def related=(elem)
10
+ `#@native.relatedTarget = #{Native.try_convert(elem)}`
11
+ end
12
+ end
13
+
14
+ def self.create(name, &block)
15
+ new(`new FocusEvent(#{name}, #{Definition.new(&block)})`)
16
+ end
17
+
18
+ def related
19
+ DOM(`#@native.relatedTarget`)
20
+ end
21
+ end
22
+
23
+ end; end; end
@@ -0,0 +1,47 @@
1
+ module Browser; module DOM; class Event
2
+
3
+ class Gamepad < Event
4
+ def self.supported?
5
+ not $$[:GamepadEvent].nil?
6
+ end
7
+
8
+ class Definition < Definition
9
+ def initialize(*)
10
+ super
11
+
12
+ `#@native.gamepad = {}`
13
+ end
14
+
15
+ def id=(value)
16
+ `#@native.gamepad.id = #{value}`
17
+ end
18
+
19
+ def index=(value)
20
+ `#@native.gamepad.index = #{value}`
21
+ end
22
+
23
+ def timestamp=(value)
24
+ `#@native.gamepad.timestamp = #{value}`
25
+ end
26
+
27
+ def axes=(value)
28
+ `#@native.gamepad.axes = #{value}`
29
+ end
30
+
31
+ def buttons=(value)
32
+ `#@native.gamepad.buttons = #{value}`
33
+ end
34
+ end
35
+
36
+ def self.create(name, &block)
37
+ new(`new GamepadEvent(#{name}, #{Definition.new(&block)})`)
38
+ end
39
+
40
+ %w(id index timestamp axes buttons).each {|name|
41
+ define_method name do
42
+ `#@native.gamepad[#{name}]`
43
+ end
44
+ }
45
+ end
46
+
47
+ end; end; end
@@ -0,0 +1,26 @@
1
+ module Browser; module DOM; class Event
2
+
3
+ class HashChange < Event
4
+ def self.supported?
5
+ not $$[:HashChangeEvent].nil?
6
+ end
7
+
8
+ class Definition < Definition
9
+ def old=(value)
10
+ `#@native.oldURL = #{value}`
11
+ end
12
+
13
+ def new=(value)
14
+ `#@native.newURL = #{value}`
15
+ end
16
+ end
17
+
18
+ def self.create(name, &block)
19
+ new(`new HashChangeEvent(#{name}, #{Definition.new(&block)})`)
20
+ end
21
+
22
+ alias_native :old, :oldURL
23
+ alias_native :new, :newURL
24
+ end
25
+
26
+ end; end; end
@@ -0,0 +1,93 @@
1
+ module Browser; module DOM; class Event
2
+
3
+ class Keyboard < UI
4
+ def self.supported?
5
+ not $$[:KeyboardEvent].nil?
6
+ end
7
+
8
+ class Definition < UI::Definition
9
+ def alt!
10
+ `#@native.altKey = true`
11
+ end
12
+
13
+ def ctrl!
14
+ `#@native.ctrlKey = true`
15
+ end
16
+
17
+ def meta!
18
+ `#@native.metaKey = true`
19
+ end
20
+
21
+ def shift!
22
+ `#@native.shiftKey = true`
23
+ end
24
+
25
+ def code=(code)
26
+ `#@native.keyCode = #@native.which = #{code}`
27
+ end
28
+
29
+ def key=(key)
30
+ `#@native.key = #{key}`
31
+ end
32
+
33
+ def char=(char)
34
+ `#@native.char = #@native.charCode = #{char}`
35
+ end
36
+
37
+ def repeat!
38
+ `#@native.repeat = true`
39
+ end
40
+ end
41
+
42
+ def self.create(name, &block)
43
+ new(`new KeyboardEvent(#{name}, #{Definition.new(&block)})`)
44
+ end
45
+
46
+ def alt?
47
+ `#@native.altKey`
48
+ end
49
+
50
+ def ctrl?
51
+ `#@native.ctrlKey`
52
+ end
53
+
54
+ def meta?
55
+ `#@native.metaKey`
56
+ end
57
+
58
+ def shift?
59
+ `#@native.shiftKey`
60
+ end
61
+
62
+ def repeat?
63
+ `#@native.repeat`
64
+ end
65
+
66
+ def key
67
+ `#@native.key || #@native.keyIdentifier || nil`
68
+ end
69
+
70
+ def code
71
+ `#@native.keyCode || #@native.which || nil`
72
+ end
73
+
74
+ def char
75
+ `#@native.char || #@native.charCode || #{code ? code.chr : nil}`
76
+ end
77
+
78
+ alias to_i key
79
+
80
+ def down?
81
+ name.downcase == 'keydown'
82
+ end
83
+
84
+ def press?
85
+ name.downcase == 'keypress'
86
+ end
87
+
88
+ def up?
89
+ name.downcase == 'keyup'
90
+ end
91
+ end
92
+
93
+ end; end; end
@@ -0,0 +1,50 @@
1
+ require 'buffer'
2
+
3
+ module Browser; module DOM; class Event
4
+
5
+ class Message < Event
6
+ def self.supported?
7
+ not $$[:MessageEvent].nil?
8
+ end
9
+
10
+ class Definition < Definition
11
+ def data=(value)
12
+ `#@native.data = #{value.to_n}`
13
+ end
14
+ end
15
+
16
+ def self.create(name, &block)
17
+ new(`new MessageEvent(#{name}, #{Definition.new(&block)})`)
18
+ end
19
+
20
+ def data
21
+ %x{
22
+ if (#@native.data instanceof ArrayBuffer) {
23
+ return #{Buffer.new(`#@native.data`)};
24
+ }
25
+ else if (#@native.data instanceof Blob) {
26
+ return #{Blob.new(`#@native.data`)};
27
+ }
28
+ else {
29
+ return #@native.data;
30
+ }
31
+ }
32
+ end
33
+
34
+ alias_native :origin
35
+
36
+ def source
37
+ %x{
38
+ var source = #@native.source;
39
+
40
+ if (source instanceof window.Window) {
41
+ return #{Window.new(`source`)};
42
+ }
43
+ else {
44
+ return nil;
45
+ }
46
+ }
47
+ end
48
+ end
49
+
50
+ end; end; end
@@ -0,0 +1,253 @@
1
+ module Browser; module DOM; class Event
2
+
3
+ class Mouse < UI
4
+ def self.supported?
5
+ not $$[:MouseEvent].nil?
6
+ end
7
+
8
+ class Definition < UI::Definition
9
+ class Client
10
+ include Native
11
+
12
+ def x=(value)
13
+ `#@native.clientX = #{value}`
14
+ end
15
+
16
+ def y=(value)
17
+ `#@native.clientY = #{value}`
18
+ end
19
+ end
20
+
21
+ class Layer
22
+ include Native
23
+
24
+ def x=(value)
25
+ `#@native.layerX = #{value}`
26
+ end
27
+
28
+ def y=(value)
29
+ `#@native.layerY = #{value}`
30
+ end
31
+ end
32
+
33
+ class Offset
34
+ include Native
35
+
36
+ def x=(value)
37
+ `#@native.offsetX = #{value}`
38
+ end
39
+
40
+ def y=(value)
41
+ `#@native.offsetY= #{value}`
42
+ end
43
+ end
44
+
45
+ class Page
46
+ include Native
47
+
48
+ def x=(value)
49
+ `#@native.pageX = #{value}`
50
+ end
51
+
52
+ def y=(value)
53
+ `#@native.pageY = #{value}`
54
+ end
55
+ end
56
+
57
+ class Screen
58
+ include Native
59
+
60
+ def x=(value)
61
+ `#@native.screenX = #{value}`
62
+ end
63
+
64
+ def y=(value)
65
+ `#@native.screenY = #{value}`
66
+ end
67
+ end
68
+
69
+ class Ancestor
70
+ include Native
71
+
72
+ def x=(value)
73
+ `#@native.x = #{value}`
74
+ end
75
+
76
+ def y=(value)
77
+ `#@native.y = #{value}`
78
+ end
79
+ end
80
+
81
+ def x=(value)
82
+ `#@native.screenX = #{value}`
83
+ end
84
+
85
+ def y=(value)
86
+ `#@native.screenY = #{value}`
87
+ end
88
+
89
+ def alt!
90
+ `#@native.altKey = true`
91
+ end
92
+
93
+ def ctrl!
94
+ `#@native.ctrlKey = true`
95
+ end
96
+
97
+ def meta!
98
+ `#@native.metaKey = true`
99
+ end
100
+
101
+ def button=(value)
102
+ `#@native.button = #{value}`
103
+ end
104
+
105
+ def client
106
+ Client.new(@native)
107
+ end
108
+
109
+ def layer
110
+ Layer.new(@native)
111
+ end
112
+
113
+ def offset
114
+ Offset.new(@native)
115
+ end
116
+
117
+ def page
118
+ Page.new(@native)
119
+ end
120
+
121
+ def screen
122
+ Screen.new(@native)
123
+ end
124
+
125
+ def ancestor
126
+ Ancestor.new(@native)
127
+ end
128
+
129
+ def related=(elem)
130
+ `#@native.relatedTarget = #{Native.try_convert(elem)}`
131
+ end
132
+
133
+ def from=(elem)
134
+ `#@native.fromElement = #{Native.try_convert(elem)}`
135
+ end
136
+
137
+ def to=(elem)
138
+ `#@native.toElement = #{Native.try_convert(elem)}`
139
+ end
140
+ end
141
+
142
+ def self.create(name, &block)
143
+ new(`new MouseEvent(#{name}, #{Definition.new(&block)})`)
144
+ end
145
+
146
+ Position = Struct.new(:x, :y)
147
+
148
+ def alt?
149
+ `#@native.altKey`
150
+ end
151
+
152
+ def ctrl?
153
+ `#@native.ctrlKey`
154
+ end
155
+
156
+ def meta?
157
+ `#@native.metaKey`
158
+ end
159
+
160
+ def shift?
161
+ `#@native.shiftKey`
162
+ end
163
+
164
+ def button
165
+ `#@native.button`
166
+ end
167
+
168
+ def client
169
+ Position.new(`#@native.clientX`, `#@native.clientY`)
170
+ end
171
+
172
+ def layer
173
+ Position.new(`#@native.layerX`, `#@native.layerY`) unless `#@native.layerX == null`
174
+ end
175
+
176
+ def offset
177
+ Position.new(`#@native.offsetX`, `#@native.offsetY`) unless `#@native.offsetX == null`
178
+ end
179
+
180
+ def page
181
+ Position.new(`#@native.pageX`, `#@native.pageY`) unless `#@native.pageX == null`
182
+ end
183
+
184
+ def screen
185
+ Position.new(`#@native.screenX`, `#@native.screenY`) unless `#@native.screenX == null`
186
+ end
187
+
188
+ def ancestor
189
+ Position.new(`#@native.x`, `#@native.y`) unless `#@native.x == null`
190
+ end
191
+
192
+ def x
193
+ screen.x
194
+ end
195
+
196
+ def y
197
+ screen.y
198
+ end
199
+
200
+ def related
201
+ DOM(`#@native.relatedTarget`) unless `#@native.relatedTarget == null`
202
+ end
203
+
204
+ def from
205
+ DOM(`#@native.fromElement`) unless `#@native.fromElement == null`
206
+ end
207
+
208
+ def to
209
+ DOM(`#@native.toElement`) unless `#@native.toElement == null`
210
+ end
211
+
212
+ def click?
213
+ name.downcase == 'click'
214
+ end
215
+
216
+ def double_click?
217
+ name.downcase == 'dblclick'
218
+ end
219
+
220
+ def down?
221
+ name.downcase == 'mousedown'
222
+ end
223
+
224
+ def enter?
225
+ name.downcase == 'mouseenter'
226
+ end
227
+
228
+ def leave?
229
+ name.downcase == 'mouseleave'
230
+ end
231
+
232
+ def move?
233
+ name.downcase == 'mousemove'
234
+ end
235
+
236
+ def out?
237
+ name.downcase == 'mouseout'
238
+ end
239
+
240
+ def over?
241
+ name.downcase == 'mouseover'
242
+ end
243
+
244
+ def up?
245
+ name.downcase == 'mouseup'
246
+ end
247
+
248
+ def show?
249
+ name.downcase == 'show'
250
+ end
251
+ end
252
+
253
+ end; end; end