opal-browser 0.2.0.beta1 → 0.2.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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +22 -8
  3. data/Gemfile +1 -1
  4. data/README.md +59 -5
  5. data/index.html.erb +7 -4
  6. data/lib/opal-browser.rb +1 -0
  7. data/opal-browser.gemspec +1 -1
  8. data/opal/browser.rb +1 -0
  9. data/opal/browser/animation_frame.rb +26 -1
  10. data/opal/browser/canvas.rb +0 -10
  11. data/opal/browser/canvas/data.rb +0 -10
  12. data/opal/browser/canvas/gradient.rb +0 -10
  13. data/opal/browser/canvas/style.rb +0 -10
  14. data/opal/browser/canvas/text.rb +0 -10
  15. data/opal/browser/cookies.rb +6 -8
  16. data/opal/browser/database/sql.rb +194 -0
  17. data/opal/browser/delay.rb +25 -7
  18. data/opal/browser/dom.rb +2 -11
  19. data/opal/browser/dom/attribute.rb +12 -11
  20. data/opal/browser/dom/builder.rb +4 -9
  21. data/opal/browser/dom/document.rb +105 -41
  22. data/opal/browser/dom/element.rb +317 -231
  23. data/opal/browser/dom/element/attributes.rb +87 -0
  24. data/opal/browser/dom/element/data.rb +67 -0
  25. data/opal/browser/dom/element/input.rb +12 -1
  26. data/opal/browser/dom/element/offset.rb +5 -0
  27. data/opal/browser/dom/element/position.rb +11 -2
  28. data/opal/browser/dom/element/scroll.rb +77 -10
  29. data/opal/browser/dom/element/select.rb +36 -0
  30. data/opal/browser/dom/element/size.rb +5 -0
  31. data/opal/browser/dom/element/template.rb +9 -0
  32. data/opal/browser/dom/element/textarea.rb +24 -0
  33. data/opal/browser/dom/mutation_observer.rb +2 -2
  34. data/opal/browser/dom/node.rb +93 -51
  35. data/opal/browser/dom/node_set.rb +66 -48
  36. data/opal/browser/effects.rb +11 -0
  37. data/opal/browser/{dom/event.rb → event.rb} +32 -32
  38. data/opal/browser/{dom/event → event}/animation.rb +2 -2
  39. data/opal/browser/{dom/event → event}/audio_processing.rb +2 -2
  40. data/opal/browser/{dom/event → event}/base.rb +65 -7
  41. data/opal/browser/{dom/event → event}/before_unload.rb +2 -2
  42. data/opal/browser/{dom/event → event}/clipboard.rb +2 -2
  43. data/opal/browser/{dom/event → event}/close.rb +2 -2
  44. data/opal/browser/{dom/event → event}/composition.rb +2 -2
  45. data/opal/browser/{dom/event → event}/custom.rb +2 -2
  46. data/opal/browser/{dom/event → event}/device_light.rb +2 -2
  47. data/opal/browser/{dom/event → event}/device_motion.rb +2 -2
  48. data/opal/browser/{dom/event → event}/device_orientation.rb +2 -2
  49. data/opal/browser/{dom/event → event}/device_proximity.rb +2 -2
  50. data/opal/browser/{dom/event → event}/drag.rb +2 -2
  51. data/opal/browser/{dom/event → event}/focus.rb +2 -2
  52. data/opal/browser/{dom/event → event}/gamepad.rb +2 -2
  53. data/opal/browser/{dom/event → event}/hash_change.rb +2 -2
  54. data/opal/browser/{dom/event → event}/keyboard.rb +2 -2
  55. data/opal/browser/{dom/event → event}/message.rb +2 -2
  56. data/opal/browser/{dom/event → event}/mouse.rb +2 -2
  57. data/opal/browser/{dom/event → event}/page_transition.rb +2 -2
  58. data/opal/browser/{dom/event → event}/pop_state.rb +2 -2
  59. data/opal/browser/{dom/event → event}/progress.rb +2 -2
  60. data/opal/browser/{dom/event → event}/sensor.rb +2 -2
  61. data/opal/browser/{dom/event → event}/storage.rb +2 -2
  62. data/opal/browser/{dom/event → event}/touch.rb +2 -2
  63. data/opal/browser/{dom/event → event}/ui.rb +2 -2
  64. data/opal/browser/{dom/event → event}/wheel.rb +2 -2
  65. data/opal/browser/event_source.rb +1 -1
  66. data/opal/browser/http.rb +25 -0
  67. data/opal/browser/http/binary.rb +1 -0
  68. data/opal/browser/http/headers.rb +16 -2
  69. data/opal/browser/http/request.rb +14 -38
  70. data/opal/browser/immediate.rb +9 -3
  71. data/opal/browser/interval.rb +34 -11
  72. data/opal/browser/navigator.rb +23 -4
  73. data/opal/browser/screen.rb +1 -1
  74. data/opal/browser/socket.rb +5 -1
  75. data/opal/browser/storage.rb +51 -33
  76. data/opal/browser/support.rb +59 -4
  77. data/opal/browser/version.rb +1 -1
  78. data/opal/browser/window.rb +17 -9
  79. data/opal/browser/window/size.rb +17 -3
  80. data/opal/opal-browser.rb +1 -0
  81. data/spec/database/sql_spec.rb +131 -0
  82. data/spec/delay_spec.rb +38 -0
  83. data/spec/dom/attribute_spec.rb +49 -0
  84. data/spec/dom/builder_spec.rb +25 -8
  85. data/spec/dom/document_spec.rb +20 -0
  86. data/spec/dom/element/attributes_spec.rb +52 -0
  87. data/spec/dom/element_spec.rb +139 -4
  88. data/spec/dom/node_set_spec.rb +44 -0
  89. data/spec/interval_spec.rb +50 -0
  90. data/spec/runner.rb +46 -28
  91. data/spec/socket_spec.rb +1 -0
  92. data/spec/spec_helper.rb +0 -4
  93. data/spec/storage_spec.rb +1 -1
  94. metadata +57 -39
  95. data/opal/browser/http/parameters.rb +0 -8
@@ -1,33 +1,33 @@
1
- require 'browser/dom/event/base'
2
- require 'browser/dom/event/ui'
3
- require 'browser/dom/event/mouse'
4
- require 'browser/dom/event/keyboard'
5
- require 'browser/dom/event/focus'
6
- require 'browser/dom/event/wheel'
7
- require 'browser/dom/event/composition'
8
- require 'browser/dom/event/animation'
9
- require 'browser/dom/event/audio_processing'
10
- require 'browser/dom/event/before_unload'
11
- require 'browser/dom/event/composition'
12
- require 'browser/dom/event/clipboard'
13
- require 'browser/dom/event/device_light'
14
- require 'browser/dom/event/device_motion'
15
- require 'browser/dom/event/device_orientation'
16
- require 'browser/dom/event/device_proximity'
17
- require 'browser/dom/event/drag'
18
- require 'browser/dom/event/gamepad'
19
- require 'browser/dom/event/hash_change'
20
- require 'browser/dom/event/progress'
21
- require 'browser/dom/event/page_transition'
22
- require 'browser/dom/event/pop_state'
23
- require 'browser/dom/event/storage'
24
- require 'browser/dom/event/touch'
25
- require 'browser/dom/event/sensor'
26
- require 'browser/dom/event/custom'
27
- require 'browser/dom/event/message'
28
- require 'browser/dom/event/close'
29
-
30
- module Browser; module DOM
1
+ require 'browser/event/base'
2
+ require 'browser/event/ui'
3
+ require 'browser/event/mouse'
4
+ require 'browser/event/keyboard'
5
+ require 'browser/event/focus'
6
+ require 'browser/event/wheel'
7
+ require 'browser/event/composition'
8
+ require 'browser/event/animation'
9
+ require 'browser/event/audio_processing'
10
+ require 'browser/event/before_unload'
11
+ require 'browser/event/composition'
12
+ require 'browser/event/clipboard'
13
+ require 'browser/event/device_light'
14
+ require 'browser/event/device_motion'
15
+ require 'browser/event/device_orientation'
16
+ require 'browser/event/device_proximity'
17
+ require 'browser/event/drag'
18
+ require 'browser/event/gamepad'
19
+ require 'browser/event/hash_change'
20
+ require 'browser/event/progress'
21
+ require 'browser/event/page_transition'
22
+ require 'browser/event/pop_state'
23
+ require 'browser/event/storage'
24
+ require 'browser/event/touch'
25
+ require 'browser/event/sensor'
26
+ require 'browser/event/custom'
27
+ require 'browser/event/message'
28
+ require 'browser/event/close'
29
+
30
+ module Browser
31
31
 
32
32
  class Event
33
33
  def self.aliases
@@ -42,7 +42,7 @@ class Event
42
42
  end
43
43
 
44
44
  def self.class_for(name)
45
- type = case name_for(name)
45
+ case name_for(name)
46
46
  when 'animationend', 'animationiteration', 'animationstart'
47
47
  Animation
48
48
 
@@ -250,4 +250,4 @@ class Event
250
250
  end
251
251
  end
252
252
 
253
- end; end
253
+ end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class Animation < Event
4
4
  def self.supported?
@@ -35,4 +35,4 @@ class Animation < Event
35
35
  alias_native :elapsed, :elapsedTime
36
36
  end
37
37
 
38
- end; end; end
38
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class AudioProcessing < Event
4
4
  def self.supported?
@@ -30,4 +30,4 @@ class AudioProcessing < Event
30
30
  alias_native :output, :outputBuffer
31
31
  end
32
32
 
33
- end; end; end
33
+ end; end
@@ -1,11 +1,13 @@
1
- module Browser; module DOM
1
+ module Browser
2
2
 
3
3
  class Event
4
4
  include Native
5
5
 
6
+ # @see https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
6
7
  class Definition
7
8
  include Native
8
9
 
10
+ # @private
9
11
  def self.new(&block)
10
12
  data = super(`{ bubbles: true, cancelable: true }`)
11
13
  block.call(data) if block
@@ -13,10 +15,12 @@ class Event
13
15
  data.to_n
14
16
  end
15
17
 
18
+ # Set the event as bubbling.
16
19
  def bubbles=(value)
17
20
  `#@native.bubbles = #{value}`
18
21
  end
19
22
 
23
+ # Set the event as cancelable.
20
24
  def cancelable=(value)
21
25
  `#@native.cancelable = #{value}`
22
26
  end
@@ -49,7 +53,7 @@ class Event
49
53
  def self.included(klass)
50
54
  klass.instance_eval {
51
55
  def self.target(&block)
52
- DOM::Event::Target.register(&block)
56
+ Event::Target.register(&block)
53
57
  end
54
58
  }
55
59
  end
@@ -57,6 +61,7 @@ class Event
57
61
  class Callback
58
62
  attr_reader :target, :name, :selector
59
63
 
64
+ # @private
60
65
  def initialize(target, name, selector = nil, &block)
61
66
  @target = target
62
67
  @name = name
@@ -64,10 +69,14 @@ class Event
64
69
  @block = block
65
70
  end
66
71
 
67
- def call(e)
68
- to_proc.call(e)
72
+ # Call the callback with the given event.
73
+ #
74
+ # @param event [native] the native event object
75
+ def call(event)
76
+ to_proc.call(event)
69
77
  end
70
78
 
79
+ # Get the native function linked to the callback.
71
80
  def to_proc
72
81
  @proc ||= -> event {
73
82
  %x{
@@ -86,10 +95,13 @@ class Event
86
95
  }
87
96
  end
88
97
 
98
+ # @!attribute [r] event
99
+ # @return [Class] the class for the event
89
100
  def event
90
101
  Event.class_for(@name)
91
102
  end
92
103
 
104
+ # Stop listening for the event linked to the callback.
93
105
  def off
94
106
  target.off(self)
95
107
  end
@@ -102,6 +114,7 @@ class Event
102
114
  @pair = pair
103
115
  end
104
116
 
117
+ # Stop listening for the event linked to the delegate.
105
118
  def off
106
119
  delegate = @target.delegated[@name]
107
120
  delegate.last.delete(@pair)
@@ -115,6 +128,26 @@ class Event
115
128
 
116
129
  Delegates = Struct.new(:callback, :handlers)
117
130
 
131
+ # @overload on(name, &block)
132
+ #
133
+ # Start listening for an event on the target.
134
+ #
135
+ # @param name [String] the event name
136
+ #
137
+ # @yieldparam event [Event] the event
138
+ #
139
+ # @return [Callback]
140
+ #
141
+ # @overload on(name, selector, &block)
142
+ #
143
+ # Start listening for an event on the target children.
144
+ #
145
+ # @param name [String] the event name
146
+ # @param selector [String] the CSS selector to trigger the event on
147
+ #
148
+ # @yieldparam event [Event] the event
149
+ #
150
+ # @return [Delegate]
118
151
  def on(name, selector = nil, &block)
119
152
  raise ArgumentError, 'no block has been given' unless block
120
153
 
@@ -152,6 +185,13 @@ class Event
152
185
  end
153
186
  end
154
187
 
188
+ # Start listening for an event in the capturing phase.
189
+ #
190
+ # @param name [String] the event name
191
+ #
192
+ # @yieldparam event [Event] the event
193
+ #
194
+ # @return [Callback]
155
195
  def on!(name, &block)
156
196
  raise ArgumentError, 'no block has been given' unless block
157
197
 
@@ -230,6 +270,13 @@ class Event
230
270
  end
231
271
  end
232
272
 
273
+ # @overload off()
274
+ # Stop listening for any event.
275
+ #
276
+ # @overload off(what)
277
+ # Stop listening for an event.
278
+ #
279
+ # @param what [Callback, String, Regexp] what to stop listening for
233
280
  def off(what = nil)
234
281
  case what
235
282
  when Callback
@@ -295,6 +342,12 @@ class Event
295
342
  end
296
343
  end
297
344
 
345
+ # Trigger an event on the target.
346
+ #
347
+ # @param name [String] the event name
348
+ # @param args [Array] optional arguments to the event callback
349
+ #
350
+ # @yieldparam definition [Definition] definition to customize the event
298
351
  def trigger(event, *args, &block)
299
352
  if event.is_a? String
300
353
  event = Event.create(event, *args, &block)
@@ -303,7 +356,12 @@ class Event
303
356
  dispatch(event)
304
357
  end
305
358
 
306
- # Trigger the event without bubbling.
359
+ # Trigger an event on the target without bubbling.
360
+ #
361
+ # @param name [String] the event name
362
+ # @param args [Array] optional arguments to the event callback
363
+ #
364
+ # @yieldparam definition [Definition] definition to customize the event
307
365
  def trigger!(event, *args, &block)
308
366
  trigger event, *args do |e|
309
367
  block.call(e) if block
@@ -356,7 +414,7 @@ class Event
356
414
  return if element.nil? || element == event.on
357
415
 
358
416
  delegates.handlers.each {|selector, block|
359
- if element.matches? selector
417
+ if element =~ selector
360
418
  new = event.dup
361
419
  new.on = element
362
420
 
@@ -369,4 +427,4 @@ class Event
369
427
  end
370
428
  end
371
429
 
372
- end; end
430
+ end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class BeforeUnload < Event
4
4
  def self.supported?
@@ -12,4 +12,4 @@ class BeforeUnload < Event
12
12
  end if supported?
13
13
  end
14
14
 
15
- end; end; end
15
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class Clipboard < Event
4
4
  def self.supported?
@@ -25,4 +25,4 @@ class Clipboard < Event
25
25
  alias_native :type, :dataType
26
26
  end
27
27
 
28
- end; end; end
28
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class Close < Event
4
4
  def self.supported?
@@ -44,4 +44,4 @@ class Close < Event
44
44
  alias_native :clean?, :wasClean
45
45
  end
46
46
 
47
- end; end; end
47
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class Composition < UI
4
4
  def self.supported?
@@ -47,4 +47,4 @@ class Composition < UI
47
47
  end
48
48
  end
49
49
 
50
- end; end; end
50
+ end; end
@@ -1,6 +1,6 @@
1
1
  require 'ostruct'
2
2
 
3
- module Browser; module DOM; class Event
3
+ module Browser; class Event
4
4
 
5
5
  class Custom < Event
6
6
  def self.supported?
@@ -62,4 +62,4 @@ class Custom < Event
62
62
  end
63
63
  end
64
64
 
65
- end; end; end
65
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class DeviceLight < Event
4
4
  def self.supported?
@@ -20,4 +20,4 @@ class DeviceLight < Event
20
20
  alias_native :value
21
21
  end
22
22
 
23
- end; end; end
23
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class DeviceMotion < Event
4
4
  def self.supported?
@@ -48,4 +48,4 @@ class DeviceMotion < Event
48
48
  alias_native :interval
49
49
  end
50
50
 
51
- end; end; end
51
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class DeviceOrientation < Event
4
4
  def self.supported?
@@ -45,4 +45,4 @@ class DeviceOrientation < Event
45
45
  alias_native :gamma
46
46
  end
47
47
 
48
- end; end; end
48
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class DeviceProximity < Event
4
4
  def self.supported?
@@ -30,4 +30,4 @@ class DeviceProximity < Event
30
30
  alias_native :max
31
31
  end
32
32
 
33
- end; end; end
33
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  # TODO: handle transfers
4
4
  class Drag < Event
@@ -116,4 +116,4 @@ class Drag < Event
116
116
  end
117
117
  end
118
118
 
119
- end; end; end
119
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class Focus < UI
4
4
  def self.supported?
@@ -36,4 +36,4 @@ class Focus < UI
36
36
  end
37
37
  end
38
38
 
39
- end; end; end
39
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class Gamepad < Event
4
4
  def self.supported?
@@ -57,4 +57,4 @@ class Gamepad < Event
57
57
  end
58
58
  end
59
59
 
60
- end; end; end
60
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class HashChange < Event
4
4
  def self.supported?
@@ -25,4 +25,4 @@ class HashChange < Event
25
25
  alias_native :new, :newURL
26
26
  end
27
27
 
28
- end; end; end
28
+ end; end
@@ -1,4 +1,4 @@
1
- module Browser; module DOM; class Event
1
+ module Browser; class Event
2
2
 
3
3
  class Keyboard < UI
4
4
  def self.supported?
@@ -112,4 +112,4 @@ class Keyboard < UI
112
112
  end
113
113
  end
114
114
 
115
- end; end; end
115
+ end; end