opal-browser 0.1.0.beta1 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/build.yml +95 -0
  3. data/.gitignore +3 -0
  4. data/.yardopts +1 -1
  5. data/Gemfile +22 -3
  6. data/LICENSE +20 -0
  7. data/README.md +200 -20
  8. data/Rakefile +29 -1
  9. data/config.ru +20 -2
  10. data/docs/polyfills.md +24 -0
  11. data/examples/2048/Gemfile +6 -0
  12. data/examples/2048/README.md +13 -0
  13. data/examples/2048/app/application.rb +169 -0
  14. data/examples/2048/config.ru +9 -0
  15. data/examples/canvas/Gemfile +6 -0
  16. data/examples/canvas/README.md +9 -0
  17. data/examples/canvas/app/application.rb +55 -0
  18. data/examples/canvas/config.ru +9 -0
  19. data/examples/component/Gemfile +6 -0
  20. data/examples/component/README.md +10 -0
  21. data/examples/component/app/application.rb +66 -0
  22. data/examples/component/config.ru +9 -0
  23. data/examples/integrations/README.md +24 -0
  24. data/examples/integrations/dynamic-rack-opal-sprockets-server/Gemfile +6 -0
  25. data/examples/integrations/dynamic-rack-opal-sprockets-server/README.md +16 -0
  26. data/examples/integrations/dynamic-rack-opal-sprockets-server/app/application.rb +6 -0
  27. data/examples/integrations/dynamic-rack-opal-sprockets-server/config.ru +9 -0
  28. data/examples/integrations/dynamic-roda-roda-sprockets/.gitignore +1 -0
  29. data/examples/integrations/dynamic-roda-roda-sprockets/Gemfile +7 -0
  30. data/examples/integrations/dynamic-roda-roda-sprockets/README.md +22 -0
  31. data/examples/integrations/dynamic-roda-roda-sprockets/Rakefile +4 -0
  32. data/examples/integrations/dynamic-roda-roda-sprockets/app/application.rb +6 -0
  33. data/examples/integrations/dynamic-roda-roda-sprockets/app.rb +32 -0
  34. data/examples/integrations/dynamic-roda-roda-sprockets/config.ru +3 -0
  35. data/examples/integrations/dynamic-roda-tilt/.gitignore +1 -0
  36. data/examples/integrations/dynamic-roda-tilt/Gemfile +8 -0
  37. data/examples/integrations/dynamic-roda-tilt/README.md +17 -0
  38. data/examples/integrations/dynamic-roda-tilt/Rakefile +6 -0
  39. data/examples/integrations/dynamic-roda-tilt/app/application.rb +6 -0
  40. data/examples/integrations/dynamic-roda-tilt/app.rb +50 -0
  41. data/examples/integrations/dynamic-roda-tilt/config.ru +3 -0
  42. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/Gemfile +7 -0
  43. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/README.md +16 -0
  44. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/app/application.rb +6 -0
  45. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/config.ru +29 -0
  46. data/examples/integrations/static-bash/.gitignore +2 -0
  47. data/examples/integrations/static-bash/Gemfile +3 -0
  48. data/examples/integrations/static-bash/README.md +8 -0
  49. data/examples/integrations/static-bash/app/application.rb +6 -0
  50. data/examples/integrations/static-bash/build.sh +4 -0
  51. data/examples/integrations/static-bash/index.html +10 -0
  52. data/examples/integrations/static-bash-opal-parser/.gitignore +3 -0
  53. data/examples/integrations/static-bash-opal-parser/Gemfile +3 -0
  54. data/examples/integrations/static-bash-opal-parser/README.md +10 -0
  55. data/examples/integrations/static-bash-opal-parser/build.sh +4 -0
  56. data/examples/integrations/static-bash-opal-parser/index.html +19 -0
  57. data/examples/integrations/static-rake/.gitignore +1 -0
  58. data/examples/integrations/static-rake/Gemfile +4 -0
  59. data/examples/integrations/static-rake/README.md +7 -0
  60. data/examples/integrations/static-rake/Rakefile +10 -0
  61. data/examples/integrations/static-rake/app/application.rb +6 -0
  62. data/examples/integrations/static-rake/index.html +9 -0
  63. data/examples/integrations/static-rake-guard/.gitignore +1 -0
  64. data/examples/integrations/static-rake-guard/Gemfile +6 -0
  65. data/examples/integrations/static-rake-guard/Guardfile +3 -0
  66. data/examples/integrations/static-rake-guard/README.md +10 -0
  67. data/examples/integrations/static-rake-guard/Rakefile +10 -0
  68. data/examples/integrations/static-rake-guard/app/application.rb +6 -0
  69. data/examples/integrations/static-rake-guard/index.html +9 -0
  70. data/examples/svg/.gitignore +1 -0
  71. data/examples/svg/Gemfile +4 -0
  72. data/examples/svg/README.md +7 -0
  73. data/examples/svg/Rakefile +10 -0
  74. data/examples/svg/app/application.rb +11 -0
  75. data/examples/svg/index.html +17 -0
  76. data/examples/svg/index.svg +6 -0
  77. data/index.html.erb +24 -0
  78. data/lib/opal-browser.rb +1 -0
  79. data/opal/browser/animation_frame.rb +92 -10
  80. data/opal/browser/audio/node.rb +121 -0
  81. data/opal/browser/audio/param_schedule.rb +43 -0
  82. data/opal/browser/audio.rb +66 -0
  83. data/opal/browser/blob.rb +94 -0
  84. data/opal/browser/canvas/data.rb +2 -12
  85. data/opal/browser/canvas/gradient.rb +1 -11
  86. data/opal/browser/canvas/style.rb +3 -11
  87. data/opal/browser/canvas/text.rb +1 -11
  88. data/opal/browser/canvas.rb +86 -28
  89. data/opal/browser/console.rb +6 -38
  90. data/opal/browser/cookies.rb +90 -27
  91. data/opal/browser/crypto.rb +79 -0
  92. data/opal/browser/css/declaration.rb +1 -6
  93. data/opal/browser/css/rule.rb +1 -1
  94. data/opal/browser/css/style_sheet.rb +2 -2
  95. data/opal/browser/css.rb +23 -7
  96. data/opal/browser/database/sql.rb +193 -0
  97. data/opal/browser/delay.rb +94 -0
  98. data/opal/browser/dom/attribute.rb +16 -9
  99. data/opal/browser/dom/builder.rb +35 -25
  100. data/opal/browser/dom/character_data.rb +43 -7
  101. data/opal/browser/dom/document.rb +171 -37
  102. data/opal/browser/dom/document_fragment.rb +18 -0
  103. data/opal/browser/dom/document_or_shadow_root.rb +19 -0
  104. data/opal/browser/dom/element/attributes.rb +111 -0
  105. data/opal/browser/dom/element/button.rb +31 -0
  106. data/opal/browser/dom/element/custom.rb +177 -0
  107. data/opal/browser/dom/element/data.rb +82 -0
  108. data/opal/browser/dom/element/editable.rb +47 -0
  109. data/opal/browser/dom/element/form.rb +38 -0
  110. data/opal/browser/dom/element/iframe.rb +37 -0
  111. data/opal/browser/dom/element/image.rb +25 -0
  112. data/opal/browser/dom/element/input.rb +48 -1
  113. data/opal/browser/dom/element/media.rb +17 -0
  114. data/opal/browser/dom/element/offset.rb +32 -10
  115. data/opal/browser/dom/element/position.rb +11 -2
  116. data/opal/browser/dom/element/scroll.rb +139 -20
  117. data/opal/browser/dom/element/select.rb +42 -0
  118. data/opal/browser/dom/element/size.rb +46 -0
  119. data/opal/browser/dom/element/template.rb +11 -0
  120. data/opal/browser/dom/element/textarea.rb +26 -0
  121. data/opal/browser/dom/element.rb +496 -168
  122. data/opal/browser/dom/mutation_observer.rb +69 -9
  123. data/opal/browser/dom/node.rb +270 -83
  124. data/opal/browser/dom/node_set.rb +74 -41
  125. data/opal/browser/dom/shadow_root.rb +12 -0
  126. data/opal/browser/dom/text.rb +18 -3
  127. data/opal/browser/dom.rb +40 -18
  128. data/opal/browser/effects.rb +180 -3
  129. data/opal/browser/event/all.rb +26 -0
  130. data/opal/browser/event/animation.rb +40 -0
  131. data/opal/browser/{dom/event → event}/audio_processing.rb +10 -6
  132. data/opal/browser/event/base.rb +461 -0
  133. data/opal/browser/event/before_unload.rb +17 -0
  134. data/opal/browser/event/clipboard.rb +37 -0
  135. data/opal/browser/event/close.rb +49 -0
  136. data/opal/browser/event/composition.rb +52 -0
  137. data/opal/browser/event/custom.rb +65 -0
  138. data/opal/browser/event/data_transfer.rb +95 -0
  139. data/opal/browser/event/device_light.rb +25 -0
  140. data/opal/browser/{dom/event → event}/device_motion.rb +21 -6
  141. data/opal/browser/event/device_orientation.rb +50 -0
  142. data/opal/browser/{dom/event → event}/device_proximity.rb +10 -6
  143. data/opal/browser/event/drag.rb +123 -0
  144. data/opal/browser/event/focus.rb +41 -0
  145. data/opal/browser/event/gamepad.rb +62 -0
  146. data/opal/browser/{dom/event → event}/hash_change.rb +10 -6
  147. data/opal/browser/event/keyboard.rb +128 -0
  148. data/opal/browser/event/message.rb +72 -0
  149. data/opal/browser/{dom/event → event}/mouse.rb +37 -32
  150. data/opal/browser/event/page_transition.rb +25 -0
  151. data/opal/browser/event/pop_state.rb +35 -0
  152. data/opal/browser/event/progress.rb +45 -0
  153. data/opal/browser/event/sensor.rb +17 -0
  154. data/opal/browser/{dom/event → event}/storage.rb +10 -6
  155. data/opal/browser/{dom/event → event}/touch.rb +14 -21
  156. data/opal/browser/event/ui.rb +38 -0
  157. data/opal/browser/{dom/event → event}/wheel.rb +6 -4
  158. data/opal/browser/event.rb +163 -0
  159. data/opal/browser/event_source.rb +7 -4
  160. data/opal/browser/form_data.rb +225 -0
  161. data/opal/browser/history.rb +53 -21
  162. data/opal/browser/http/binary.rb +1 -0
  163. data/opal/browser/http/headers.rb +21 -2
  164. data/opal/browser/http/request.rb +83 -55
  165. data/opal/browser/http/response.rb +5 -1
  166. data/opal/browser/http.rb +47 -9
  167. data/opal/browser/immediate.rb +128 -10
  168. data/opal/browser/interval.rb +41 -23
  169. data/opal/browser/location.rb +20 -4
  170. data/opal/browser/navigator.rb +136 -13
  171. data/opal/browser/polyfill/visual_viewport.rb +216 -0
  172. data/opal/browser/screen.rb +34 -8
  173. data/opal/browser/setup/base.rb +6 -0
  174. data/opal/browser/setup/full.rb +13 -0
  175. data/opal/browser/setup/large.rb +17 -0
  176. data/opal/browser/setup/mini.rb +8 -0
  177. data/opal/browser/setup/traditional.rb +10 -0
  178. data/opal/browser/socket.rb +16 -8
  179. data/opal/browser/storage.rb +155 -52
  180. data/opal/browser/support.rb +299 -0
  181. data/opal/browser/utils.rb +116 -18
  182. data/opal/browser/version.rb +1 -1
  183. data/opal/browser/visual_viewport.rb +39 -0
  184. data/opal/browser/window/size.rb +47 -9
  185. data/opal/browser/window/view.rb +37 -4
  186. data/opal/browser/window.rb +46 -26
  187. data/opal/browser.rb +1 -10
  188. data/opal/opal-browser.rb +1 -0
  189. data/opal-browser.gemspec +10 -12
  190. data/spec/database/sql_spec.rb +139 -0
  191. data/spec/delay_spec.rb +41 -0
  192. data/spec/dom/attribute_spec.rb +49 -0
  193. data/spec/dom/builder_spec.rb +36 -19
  194. data/spec/dom/document_spec.rb +28 -6
  195. data/spec/dom/element/attributes_spec.rb +52 -0
  196. data/spec/dom/element/custom_spec.rb +106 -0
  197. data/spec/dom/element/subclass_spec.rb +144 -0
  198. data/spec/dom/element_spec.rb +184 -7
  199. data/spec/dom/mutation_observer_spec.rb +13 -9
  200. data/spec/dom/node_set_spec.rb +44 -0
  201. data/spec/dom/node_spec.rb +87 -27
  202. data/spec/dom_spec.rb +19 -9
  203. data/spec/event_source_spec.rb +18 -15
  204. data/spec/{dom/event_spec.rb → event_spec.rb} +55 -26
  205. data/spec/history_spec.rb +32 -19
  206. data/spec/http_spec.rb +25 -36
  207. data/spec/immediate_spec.rb +10 -7
  208. data/spec/interval_spec.rb +59 -0
  209. data/spec/native_cached_wrapper_spec.rb +46 -0
  210. data/spec/runner.rb +107 -0
  211. data/spec/socket_spec.rb +18 -14
  212. data/spec/spec_helper.rb +2 -4
  213. data/spec/spec_helper_promise.rb.erb +25 -0
  214. data/spec/storage_spec.rb +7 -7
  215. data/spec/wgxpath.install.js +49 -0
  216. data/spec/window_spec.rb +2 -2
  217. metadata +181 -93
  218. data/opal/browser/compatibility/animation_frame.rb +0 -93
  219. data/opal/browser/compatibility/dom/document/window.rb +0 -15
  220. data/opal/browser/compatibility/dom/element/css.rb +0 -15
  221. data/opal/browser/compatibility/dom/element/matches.rb +0 -31
  222. data/opal/browser/compatibility/dom/element/offset.rb +0 -20
  223. data/opal/browser/compatibility/dom/element/scroll.rb +0 -25
  224. data/opal/browser/compatibility/dom/element/style.rb +0 -15
  225. data/opal/browser/compatibility/dom/mutation_observer.rb +0 -47
  226. data/opal/browser/compatibility/http/request.rb +0 -15
  227. data/opal/browser/compatibility/immediate.rb +0 -107
  228. data/opal/browser/compatibility/window/scroll.rb +0 -27
  229. data/opal/browser/compatibility/window/size.rb +0 -13
  230. data/opal/browser/compatibility/window/view.rb +0 -13
  231. data/opal/browser/compatibility.rb +0 -59
  232. data/opal/browser/dom/compatibility.rb +0 -8
  233. data/opal/browser/dom/event/animation.rb +0 -26
  234. data/opal/browser/dom/event/base.rb +0 -207
  235. data/opal/browser/dom/event/before_unload.rb +0 -13
  236. data/opal/browser/dom/event/clipboard.rb +0 -26
  237. data/opal/browser/dom/event/close.rb +0 -35
  238. data/opal/browser/dom/event/composition.rb +0 -38
  239. data/opal/browser/dom/event/custom.rb +0 -30
  240. data/opal/browser/dom/event/device_light.rb +0 -21
  241. data/opal/browser/dom/event/device_orientation.rb +0 -36
  242. data/opal/browser/dom/event/drag.rb +0 -113
  243. data/opal/browser/dom/event/focus.rb +0 -23
  244. data/opal/browser/dom/event/gamepad.rb +0 -47
  245. data/opal/browser/dom/event/keyboard.rb +0 -93
  246. data/opal/browser/dom/event/message.rb +0 -50
  247. data/opal/browser/dom/event/page_transition.rb +0 -21
  248. data/opal/browser/dom/event/pop_state.rb +0 -21
  249. data/opal/browser/dom/event/progress.rb +0 -31
  250. data/opal/browser/dom/event/sensor.rb +0 -13
  251. data/opal/browser/dom/event/ui.rb +0 -22
  252. data/opal/browser/dom/event.rb +0 -240
  253. data/opal/browser/http/compatibility.rb +0 -1
  254. data/opal/browser/http/parameters.rb +0 -8
  255. data/opal/browser/timeout.rb +0 -60
  256. data/opal/browser/window/compatibility.rb +0 -3
  257. data/opal/browser/window/scroll.rb +0 -49
@@ -1,240 +0,0 @@
1
- require 'browser/dom/event/base'
2
-
3
- require 'browser/dom/event/ui'
4
- require 'browser/dom/event/mouse'
5
- require 'browser/dom/event/keyboard'
6
- require 'browser/dom/event/focus'
7
- require 'browser/dom/event/wheel'
8
- require 'browser/dom/event/composition'
9
- require 'browser/dom/event/animation'
10
- require 'browser/dom/event/audio_processing'
11
- require 'browser/dom/event/before_unload'
12
- require 'browser/dom/event/composition'
13
- require 'browser/dom/event/clipboard'
14
- require 'browser/dom/event/device_light'
15
- require 'browser/dom/event/device_motion'
16
- require 'browser/dom/event/device_orientation'
17
- require 'browser/dom/event/device_proximity'
18
- require 'browser/dom/event/drag'
19
- require 'browser/dom/event/gamepad'
20
- require 'browser/dom/event/hash_change'
21
- require 'browser/dom/event/progress'
22
- require 'browser/dom/event/page_transition'
23
- require 'browser/dom/event/pop_state'
24
- require 'browser/dom/event/storage'
25
- require 'browser/dom/event/touch'
26
- require 'browser/dom/event/sensor'
27
- require 'browser/dom/event/custom'
28
- require 'browser/dom/event/message'
29
- require 'browser/dom/event/close'
30
-
31
- module Browser; module DOM
32
-
33
- class Event
34
- def self.names
35
- return @names if @names
36
-
37
- @names = Hash.new { |_, k| k }
38
- @names.merge!({
39
- load: 'DOMContentLoaded',
40
- hover: 'mouse:over'
41
- })
42
- end
43
-
44
- def self.name_for(name)
45
- names[name].gsub(?:, '')
46
- end
47
-
48
- def self.classes
49
- @classes ||= {
50
- Animation => $$[:AnimationEvent],
51
- AudioProcessing => $$[:AudioProcessingEvent],
52
- BeforeUnload => $$[:BeforeUnloadEvent],
53
- Composition => $$[:CompositionEvent],
54
- Clipboard => $$[:ClipboardEvent],
55
- DeviceLight => $$[:DeviceLightEvent],
56
- DeviceMotion => $$[:DeviceMotionEvent],
57
- DeviceOrientation => $$[:DeviceOrientationEvent],
58
- DeviceProximity => $$[:DeviceProximityEvent],
59
- Drag => $$[:DragEvent],
60
- Gamepad => $$[:GamepadEvent],
61
- HashChange => $$[:HashChangeEvent],
62
- Progress => $$[:ProgressEvent],
63
- PageTransition => $$[:PageTransitionEvent],
64
- PopState => $$[:PopStateEvent],
65
- Storage => $$[:StorageEvent],
66
- Touch => $$[:TouchEvent],
67
- Sensor => $$[:SensorEvent],
68
- Mouse => $$[:MouseEvent],
69
- Keyboard => $$[:KeyboardEvent],
70
- Focus => $$[:FocusEvent],
71
- Wheel => $$[:WheelEvent],
72
- Custom => $$[:CustomEvent]
73
- }
74
- end
75
-
76
- def self.class_for(name)
77
- type = case name_for(name)
78
- when 'animationend', 'animationiteration', 'animationstart'
79
- Animation
80
-
81
- when 'audioprocess'
82
- AudioProcessing
83
-
84
- when 'beforeunload'
85
- BeforeUnload
86
-
87
- when 'compositionend', 'compositionstart', 'compositionupdate'
88
- Composition
89
-
90
- when 'copy', 'cut'
91
- Clipboard
92
-
93
- when 'devicelight'
94
- DeviceLight
95
-
96
- when 'devicemotion'
97
- DeviceMotion
98
-
99
- when 'deviceorientation'
100
- DeviceOrientation
101
-
102
- when 'deviceproximity'
103
- DeviceProximity
104
-
105
- when 'drag', 'dragend', 'dragleave', 'dragover', 'dragstart', 'drop'
106
- Drag
107
-
108
- when 'gamepadconnected', 'gamepaddisconnected'
109
- Gamepad
110
-
111
- when 'hashchange'
112
- HashChange
113
-
114
- when 'load', 'loadend', 'loadstart'
115
- Progress
116
-
117
- when 'pagehide', 'pageshow'
118
- PageTransition
119
-
120
- when 'popstate'
121
- PopState
122
-
123
- when 'storage'
124
- Storage
125
-
126
- when 'touchcancel', 'touchend', 'touchleave', 'touchmove', 'touchstart'
127
- Touch
128
-
129
- when 'compassneedscalibration', 'userproximity'
130
- Sensor
131
-
132
- when 'message'
133
- Message
134
-
135
- when 'close'
136
- Close
137
-
138
- when 'click', 'contextmenu', 'dblclick', 'mousedown', 'mouseenter',
139
- 'mouseleave', 'mousemove', 'mouseout', 'mouseover', 'mouseup',
140
- 'show'
141
- Mouse
142
-
143
- when 'keydown', 'keypress', 'keyup'
144
- Keyboard
145
-
146
- when 'blur', 'focus', 'focusin', 'focusout'
147
- Focus
148
-
149
- when 'wheel'
150
- Wheel
151
-
152
- when 'abort', 'afterprint', 'beforeprint', 'cached', 'canplay', 'canplaythrough',
153
- 'change', 'chargingchange', 'chargingtimechange', 'checking', 'close',
154
- 'dischargingtimechange', 'DOMContentLoaded', 'downloading', 'durationchange',
155
- 'emptied', 'ended', 'error', 'fullscreenchange', 'fullscreenerror', 'input',
156
- 'invalid', 'levelchange', 'loadeddata', 'loadedmetadata', 'noupdate', 'obsolete',
157
- 'offline', 'online', 'open', 'orientationchange', 'pause', 'pointerlockchange',
158
- 'pointerlockerror', 'play', 'playing', 'ratechange', 'readystatechange', 'reset',
159
- 'seeked', 'seeking', 'stalled', 'submit', 'success', 'suspend', 'timeupdate',
160
- 'updateready', 'visibilitychange', 'volumechange', 'waiting'
161
- Event
162
-
163
- else
164
- Custom
165
- end
166
-
167
- if type != Event && type.supported?
168
- type
169
- else
170
- Event
171
- end
172
- end
173
-
174
- def self.create(name, *args, &block)
175
- name = name_for(name)
176
- klass = class_for(name)
177
-
178
- event = if klass == self
179
- new(`new window.Event(#{name}, #{Definition.new(&block)})`)
180
- else
181
- klass.create(name, &block)
182
- end
183
-
184
- event.arguments = args
185
-
186
- event
187
- end
188
-
189
- def self.new(value, *args)
190
- klass, _ = classes.find {|_, constructor|
191
- Native.is_a?(value, constructor)
192
- }
193
-
194
- if !klass || klass == self
195
- super(value, *args)
196
- else
197
- klass.new(value, *args)
198
- end
199
- end
200
-
201
- attr_reader :target, :callback
202
-
203
- def initialize(native, callback = nil)
204
- super(native)
205
-
206
- @target = Target.convert(`#@native.target`)
207
- @callback, = callback # TODO: change this when super is fixed
208
- end
209
-
210
- def off
211
- @callback.off if @callback
212
- end
213
-
214
- def arguments
215
- `#@native.arguments || []`
216
- end
217
-
218
- def arguments=(args)
219
- `#@native.arguments = #{args}`
220
- end
221
-
222
- alias_native :bubbles?, :bubbles
223
- alias_native :cancelable?, :cancelable
224
- alias_native :name, :type
225
- alias_native :data
226
- alias_native :phase, :eventPhase
227
- alias_native :at, :timeStamp
228
-
229
- def stopped?
230
- `!!#@native.stopped`
231
- end
232
-
233
- def stop!
234
- `#@native.stopPropagation()` if defined?(`#@native.stopPropagation`)
235
- `#@native.preventDefault()` if defined?(`#@native.preventDefault`)
236
- `#@native.stopped = true`
237
- end
238
- end
239
-
240
- end; end
@@ -1 +0,0 @@
1
- require 'browser/compatibility/http/request'
@@ -1,8 +0,0 @@
1
- module Browser; module HTTP
2
-
3
- class Parameters < Hash
4
- def to_str
5
- end
6
- end
7
-
8
- end; end
@@ -1,60 +0,0 @@
1
- module Browser
2
-
3
- # This class wraps `setTimeout`.
4
- class Timeout
5
- # @!attribute [r] after
6
- # @return [Number] the seconds after which the block is called
7
- attr_reader :after
8
-
9
- # Create and start a timeout.
10
- #
11
- # @param window [Window] the window to start the timeout on
12
- # @param time [Number] seconds after which the block is called
13
- def initialize(window, time, &block)
14
- @window = Native.convert(window)
15
- @after = time
16
- @block = block
17
-
18
- start
19
- end
20
-
21
- # Abort the timeout.
22
- #
23
- # @return [self]
24
- def abort
25
- `#@window.clearTimeout(#@id)`
26
-
27
- self
28
- end
29
-
30
- def start
31
- @id = `#@window.setTimeout(#{@block.to_n}, #@after * 1000)`
32
-
33
- self
34
- end
35
- end
36
-
37
- class Window
38
- # Execute a block after the given seconds.
39
- #
40
- # @param time [Float] the seconds after it gets called
41
- # @return [Timeout] the object representing the timeout
42
- def after(time, &block)
43
- Timeout.new(@native, time, &block)
44
- end
45
- end
46
-
47
- end
48
-
49
- class Proc
50
- def after(time)
51
- $window.after(time, &self)
52
- end
53
- end
54
-
55
- module Kernel
56
- # (see Browser::Window#once)
57
- def after(time, &block)
58
- $window.after(time, &block)
59
- end
60
- end
@@ -1,3 +0,0 @@
1
- require 'browser/compatibility/window/view'
2
- require 'browser/compatibility/window/size'
3
- require 'browser/compatibility/window/scroll'
@@ -1,49 +0,0 @@
1
- module Browser; class Window
2
-
3
- class Scroll
4
- def initialize(window)
5
- @window = window
6
- @native = window.to_n
7
- end
8
-
9
- def position
10
- %x{
11
- var doc = #@native.document,
12
- root = doc.documentElement,
13
- body = doc.body;
14
-
15
- var x = root.scrollLeft || body.scrollLeft,
16
- y = root.scrollTop || body.scrollTop;
17
- }
18
-
19
- Position.new(`x`, `y`)
20
- end
21
-
22
- def x
23
- position.x
24
- end
25
-
26
- def y
27
- position.y
28
- end
29
-
30
- def to(what)
31
- x = what[:x] || self.x
32
- y = what[:y] || self.y
33
-
34
- `#@native.scrollTo(#{x}, #{y})`
35
-
36
- self
37
- end
38
-
39
- def by(what)
40
- x = what[:x] || 0
41
- y = what[:y] || 0
42
-
43
- `#@native.scrollBy(#{x}, #{y})`
44
-
45
- self
46
- end
47
- end
48
-
49
- end; end