opal-browser 0.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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