opal-browser 0.2.0.beta1 → 0.2.0

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