opal-browser 0.2.0.beta1 → 0.3.2
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.
- checksums.yaml +5 -5
- data/.github/workflows/build.yml +95 -0
- data/.gitignore +3 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +17 -3
- data/LICENSE +2 -1
- data/README.md +183 -52
- data/Rakefile +29 -1
- data/config.ru +20 -3
- data/docs/polyfills.md +24 -0
- data/examples/2048/Gemfile +6 -0
- data/examples/2048/README.md +13 -0
- data/examples/2048/app/application.rb +169 -0
- data/examples/2048/config.ru +9 -0
- data/examples/canvas/Gemfile +6 -0
- data/examples/canvas/README.md +9 -0
- data/examples/canvas/app/application.rb +55 -0
- data/examples/canvas/config.ru +9 -0
- data/examples/component/Gemfile +6 -0
- data/examples/component/README.md +10 -0
- data/examples/component/app/application.rb +66 -0
- data/examples/component/config.ru +9 -0
- data/examples/integrations/README.md +24 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/Gemfile +6 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/README.md +16 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/app/application.rb +6 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/config.ru +9 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/.gitignore +1 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/Gemfile +7 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/README.md +22 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/Rakefile +4 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/app/application.rb +6 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/app.rb +32 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/config.ru +3 -0
- data/examples/integrations/dynamic-roda-tilt/.gitignore +1 -0
- data/examples/integrations/dynamic-roda-tilt/Gemfile +8 -0
- data/examples/integrations/dynamic-roda-tilt/README.md +17 -0
- data/examples/integrations/dynamic-roda-tilt/Rakefile +6 -0
- data/examples/integrations/dynamic-roda-tilt/app/application.rb +6 -0
- data/examples/integrations/dynamic-roda-tilt/app.rb +50 -0
- data/examples/integrations/dynamic-roda-tilt/config.ru +3 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/Gemfile +7 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/README.md +16 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/app/application.rb +6 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/config.ru +29 -0
- data/examples/integrations/static-bash/.gitignore +2 -0
- data/examples/integrations/static-bash/Gemfile +3 -0
- data/examples/integrations/static-bash/README.md +8 -0
- data/examples/integrations/static-bash/app/application.rb +6 -0
- data/examples/integrations/static-bash/build.sh +4 -0
- data/examples/integrations/static-bash/index.html +10 -0
- data/examples/integrations/static-bash-opal-parser/.gitignore +3 -0
- data/examples/integrations/static-bash-opal-parser/Gemfile +3 -0
- data/examples/integrations/static-bash-opal-parser/README.md +10 -0
- data/examples/integrations/static-bash-opal-parser/build.sh +4 -0
- data/examples/integrations/static-bash-opal-parser/index.html +19 -0
- data/examples/integrations/static-rake/.gitignore +1 -0
- data/examples/integrations/static-rake/Gemfile +4 -0
- data/examples/integrations/static-rake/README.md +7 -0
- data/examples/integrations/static-rake/Rakefile +10 -0
- data/examples/integrations/static-rake/app/application.rb +6 -0
- data/examples/integrations/static-rake/index.html +9 -0
- data/examples/integrations/static-rake-guard/.gitignore +1 -0
- data/examples/integrations/static-rake-guard/Gemfile +6 -0
- data/examples/integrations/static-rake-guard/Guardfile +3 -0
- data/examples/integrations/static-rake-guard/README.md +10 -0
- data/examples/integrations/static-rake-guard/Rakefile +10 -0
- data/examples/integrations/static-rake-guard/app/application.rb +6 -0
- data/examples/integrations/static-rake-guard/index.html +9 -0
- data/examples/svg/.gitignore +1 -0
- data/examples/svg/Gemfile +4 -0
- data/examples/svg/README.md +7 -0
- data/examples/svg/Rakefile +10 -0
- data/examples/svg/app/application.rb +11 -0
- data/examples/svg/index.html +17 -0
- data/examples/svg/index.svg +6 -0
- data/index.html.erb +8 -6
- data/lib/opal-browser.rb +1 -0
- data/opal/browser/animation_frame.rb +26 -1
- data/opal/browser/audio/node.rb +121 -0
- data/opal/browser/audio/param_schedule.rb +43 -0
- data/opal/browser/audio.rb +66 -0
- data/opal/browser/blob.rb +94 -0
- data/opal/browser/canvas/data.rb +1 -11
- data/opal/browser/canvas/gradient.rb +1 -11
- data/opal/browser/canvas/style.rb +3 -11
- data/opal/browser/canvas/text.rb +1 -11
- data/opal/browser/canvas.rb +17 -13
- data/opal/browser/console.rb +3 -1
- data/opal/browser/cookies.rb +78 -42
- data/opal/browser/crypto.rb +79 -0
- data/opal/browser/css/declaration.rb +1 -1
- data/opal/browser/css/rule.rb +1 -1
- data/opal/browser/css/style_sheet.rb +2 -2
- data/opal/browser/css.rb +23 -7
- data/opal/browser/database/sql.rb +193 -0
- data/opal/browser/delay.rb +41 -7
- data/opal/browser/dom/attribute.rb +13 -12
- data/opal/browser/dom/builder.rb +31 -17
- data/opal/browser/dom/document.rb +174 -42
- data/opal/browser/dom/document_fragment.rb +18 -0
- data/opal/browser/dom/document_or_shadow_root.rb +19 -0
- data/opal/browser/dom/element/attributes.rb +111 -0
- data/opal/browser/dom/element/button.rb +31 -0
- data/opal/browser/dom/element/custom.rb +177 -0
- data/opal/browser/dom/element/data.rb +82 -0
- data/opal/browser/dom/element/editable.rb +47 -0
- data/opal/browser/dom/element/form.rb +38 -0
- data/opal/browser/dom/element/iframe.rb +37 -0
- data/opal/browser/dom/element/image.rb +2 -0
- data/opal/browser/dom/element/input.rb +48 -1
- data/opal/browser/dom/element/media.rb +17 -0
- data/opal/browser/dom/element/offset.rb +5 -0
- data/opal/browser/dom/element/position.rb +11 -2
- data/opal/browser/dom/element/scroll.rb +123 -24
- data/opal/browser/dom/element/select.rb +42 -0
- data/opal/browser/dom/element/size.rb +17 -0
- data/opal/browser/dom/element/template.rb +11 -0
- data/opal/browser/dom/element/textarea.rb +26 -0
- data/opal/browser/dom/element.rb +468 -238
- data/opal/browser/dom/mutation_observer.rb +4 -4
- data/opal/browser/dom/node.rb +142 -60
- data/opal/browser/dom/node_set.rb +73 -44
- data/opal/browser/dom/shadow_root.rb +12 -0
- data/opal/browser/dom/text.rb +2 -2
- data/opal/browser/dom.rb +40 -16
- data/opal/browser/effects.rb +180 -3
- data/opal/browser/event/all.rb +26 -0
- data/opal/browser/{dom/event → event}/animation.rb +4 -2
- data/opal/browser/{dom/event → event}/audio_processing.rb +4 -2
- data/opal/browser/{dom/event → event}/base.rb +98 -9
- data/opal/browser/{dom/event → event}/before_unload.rb +4 -2
- data/opal/browser/{dom/event → event}/clipboard.rb +11 -2
- data/opal/browser/{dom/event → event}/close.rb +4 -2
- data/opal/browser/{dom/event → event}/composition.rb +4 -2
- data/opal/browser/{dom/event → event}/custom.rb +3 -3
- data/opal/browser/event/data_transfer.rb +95 -0
- data/opal/browser/{dom/event → event}/device_light.rb +4 -2
- data/opal/browser/{dom/event → event}/device_motion.rb +4 -2
- data/opal/browser/{dom/event → event}/device_orientation.rb +4 -2
- data/opal/browser/{dom/event → event}/device_proximity.rb +4 -2
- data/opal/browser/{dom/event → event}/drag.rb +11 -7
- data/opal/browser/{dom/event → event}/focus.rb +4 -2
- data/opal/browser/{dom/event → event}/gamepad.rb +5 -3
- data/opal/browser/{dom/event → event}/hash_change.rb +4 -2
- data/opal/browser/{dom/event → event}/keyboard.rb +16 -3
- data/opal/browser/{dom/event → event}/message.rb +4 -2
- data/opal/browser/{dom/event → event}/mouse.rb +12 -8
- data/opal/browser/{dom/event → event}/page_transition.rb +4 -2
- data/opal/browser/{dom/event → event}/pop_state.rb +4 -2
- data/opal/browser/{dom/event → event}/progress.rb +4 -2
- data/opal/browser/{dom/event → event}/sensor.rb +4 -2
- data/opal/browser/{dom/event → event}/storage.rb +4 -2
- data/opal/browser/{dom/event → event}/touch.rb +4 -2
- data/opal/browser/{dom/event → event}/ui.rb +2 -2
- data/opal/browser/{dom/event → event}/wheel.rb +4 -2
- data/opal/browser/event.rb +163 -0
- data/opal/browser/event_source.rb +2 -2
- data/opal/browser/form_data.rb +225 -0
- data/opal/browser/history.rb +4 -8
- data/opal/browser/http/binary.rb +1 -0
- data/opal/browser/http/headers.rb +16 -2
- data/opal/browser/http/request.rb +46 -48
- data/opal/browser/http/response.rb +5 -1
- data/opal/browser/http.rb +25 -2
- data/opal/browser/immediate.rb +9 -5
- data/opal/browser/interval.rb +34 -11
- data/opal/browser/location.rb +7 -1
- data/opal/browser/navigator.rb +127 -7
- data/opal/browser/polyfill/visual_viewport.rb +216 -0
- data/opal/browser/screen.rb +3 -3
- data/opal/browser/setup/base.rb +6 -0
- data/opal/browser/setup/full.rb +13 -0
- data/opal/browser/setup/large.rb +17 -0
- data/opal/browser/setup/mini.rb +8 -0
- data/opal/browser/setup/traditional.rb +10 -0
- data/opal/browser/socket.rb +8 -4
- data/opal/browser/storage.rb +53 -35
- data/opal/browser/support.rb +72 -5
- data/opal/browser/utils.rb +94 -14
- data/opal/browser/version.rb +1 -1
- data/opal/browser/visual_viewport.rb +39 -0
- data/opal/browser/window/size.rb +31 -3
- data/opal/browser/window/view.rb +15 -0
- data/opal/browser/window.rb +46 -25
- data/opal/browser.rb +1 -10
- data/opal/opal-browser.rb +1 -0
- data/opal-browser.gemspec +3 -3
- data/spec/database/sql_spec.rb +139 -0
- data/spec/delay_spec.rb +41 -0
- data/spec/dom/attribute_spec.rb +49 -0
- data/spec/dom/builder_spec.rb +25 -8
- data/spec/dom/document_spec.rb +22 -0
- data/spec/dom/element/attributes_spec.rb +52 -0
- data/spec/dom/element/custom_spec.rb +106 -0
- data/spec/dom/element/subclass_spec.rb +144 -0
- data/spec/dom/element_spec.rb +181 -4
- data/spec/dom/mutation_observer_spec.rb +12 -8
- data/spec/dom/node_set_spec.rb +44 -0
- data/spec/dom/node_spec.rb +48 -0
- data/spec/dom_spec.rb +8 -0
- data/spec/event_source_spec.rb +15 -12
- data/spec/{dom/event_spec.rb → event_spec.rb} +44 -15
- data/spec/history_spec.rb +23 -19
- data/spec/http_spec.rb +19 -31
- data/spec/immediate_spec.rb +5 -4
- data/spec/interval_spec.rb +59 -0
- data/spec/native_cached_wrapper_spec.rb +46 -0
- data/spec/runner.rb +62 -69
- data/spec/socket_spec.rb +16 -12
- data/spec/spec_helper.rb +2 -5
- data/spec/spec_helper_promise.rb.erb +25 -0
- data/spec/storage_spec.rb +1 -1
- metadata +172 -50
- data/.travis.yml +0 -60
- data/opal/browser/dom/event.rb +0 -253
- data/opal/browser/http/parameters.rb +0 -8
- data/opal/browser/window/scroll.rb +0 -59
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class DeviceMotion < Event
|
|
4
|
+
handles 'devicemotion'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.DeviceMotion'
|
|
6
8
|
end
|
|
@@ -48,4 +50,4 @@ class DeviceMotion < Event
|
|
|
48
50
|
alias_native :interval
|
|
49
51
|
end
|
|
50
52
|
|
|
51
|
-
end; end
|
|
53
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class DeviceOrientation < Event
|
|
4
|
+
handles 'deviceorientation'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.DeviceOrientation'
|
|
6
8
|
end
|
|
@@ -45,4 +47,4 @@ class DeviceOrientation < Event
|
|
|
45
47
|
alias_native :gamma
|
|
46
48
|
end
|
|
47
49
|
|
|
48
|
-
end; end
|
|
50
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class DeviceProximity < Event
|
|
4
|
+
handles 'deviceproximity'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.DeviceProximity'
|
|
6
8
|
end
|
|
@@ -30,4 +32,4 @@ class DeviceProximity < Event
|
|
|
30
32
|
alias_native :max
|
|
31
33
|
end
|
|
32
34
|
|
|
33
|
-
end; end
|
|
35
|
+
end; end
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
|
-
# TODO: handle transfers
|
|
4
3
|
class Drag < Event
|
|
4
|
+
handles 'drag', 'dragend', 'dragenter', 'dragexit', 'dragleave', 'dragover',
|
|
5
|
+
'dragstart', 'drop'
|
|
6
|
+
|
|
5
7
|
def self.supported?
|
|
6
8
|
Browser.supports? 'Event.Drag'
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
class Definition < Definition
|
|
10
12
|
class Client
|
|
11
|
-
include Native
|
|
13
|
+
include Native::Wrapper
|
|
12
14
|
|
|
13
15
|
def x=(value)
|
|
14
16
|
`#@native.clientX = #{value}`
|
|
@@ -20,7 +22,7 @@ class Drag < Event
|
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
class Screen
|
|
23
|
-
include Native
|
|
25
|
+
include Native::Wrapper
|
|
24
26
|
|
|
25
27
|
def x=(value)
|
|
26
28
|
`#@native.screenX = #{value}`
|
|
@@ -60,7 +62,7 @@ class Drag < Event
|
|
|
60
62
|
end
|
|
61
63
|
|
|
62
64
|
def transfer=(value)
|
|
63
|
-
`#@native.dataTransfer = #{Native.convert(
|
|
65
|
+
`#@native.dataTransfer = #{Native.convert(value)}`
|
|
64
66
|
end
|
|
65
67
|
end
|
|
66
68
|
|
|
@@ -110,10 +112,12 @@ class Drag < Event
|
|
|
110
112
|
DOM(`#@native.relatedTarget`)
|
|
111
113
|
end
|
|
112
114
|
|
|
115
|
+
# Returns a {DataTransfer} related to this event
|
|
116
|
+
#
|
|
113
117
|
# @see https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer
|
|
114
118
|
def transfer
|
|
115
|
-
|
|
119
|
+
DataTransfer.new(`#@native.dataTransfer`)
|
|
116
120
|
end
|
|
117
121
|
end
|
|
118
122
|
|
|
119
|
-
end; end
|
|
123
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Focus < UI
|
|
4
|
+
handles 'blur', 'focus', 'focusin', 'focusout'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.Focus'
|
|
6
8
|
end
|
|
@@ -36,4 +38,4 @@ class Focus < UI
|
|
|
36
38
|
end
|
|
37
39
|
end
|
|
38
40
|
|
|
39
|
-
end; end
|
|
41
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Gamepad < Event
|
|
4
|
+
handles 'gamepadconnected', 'gamepaddisconnected'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.Gamepad'
|
|
6
8
|
end
|
|
@@ -29,7 +31,7 @@ class Gamepad < Event
|
|
|
29
31
|
|
|
30
32
|
if Browser.supports? 'Event.constructor'
|
|
31
33
|
def self.construct(name, desc)
|
|
32
|
-
`new GamepadEvent(#{name}, {
|
|
34
|
+
`return new GamepadEvent(#{name}, {
|
|
33
35
|
bubbles: desc.bubbles,
|
|
34
36
|
cancelable: desc.cancelable,
|
|
35
37
|
gamepad: desc })`
|
|
@@ -57,4 +59,4 @@ class Gamepad < Event
|
|
|
57
59
|
end
|
|
58
60
|
end
|
|
59
61
|
|
|
60
|
-
end; end
|
|
62
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class HashChange < Event
|
|
4
|
+
handles 'hashchange'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.HashChange'
|
|
6
8
|
end
|
|
@@ -25,4 +27,4 @@ class HashChange < Event
|
|
|
25
27
|
alias_native :new, :newURL
|
|
26
28
|
end
|
|
27
29
|
|
|
28
|
-
end; end
|
|
30
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Keyboard < UI
|
|
4
|
+
handles 'keydown', 'keypress', 'keyup'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.Keyboard'
|
|
6
8
|
end
|
|
@@ -85,8 +87,19 @@ class Keyboard < UI
|
|
|
85
87
|
alias_native :locale
|
|
86
88
|
alias_native :repeat?, :repeat
|
|
87
89
|
|
|
90
|
+
# IE 11 at least has different names for those keys.
|
|
91
|
+
IE_MAP = {
|
|
92
|
+
'Down' => 'ArrowDown',
|
|
93
|
+
'Up' => 'ArrowUp',
|
|
94
|
+
'Left' => 'ArrowLeft',
|
|
95
|
+
'Right' => 'ArrowRight',
|
|
96
|
+
'Esc' => 'Escape',
|
|
97
|
+
'Del' => 'Delete'
|
|
98
|
+
}
|
|
99
|
+
|
|
88
100
|
def key
|
|
89
|
-
`#@native.key || #@native.keyIdentifier || nil`
|
|
101
|
+
key = `#@native.key || #@native.keyIdentifier || nil`
|
|
102
|
+
IE_MAP[key] || key
|
|
90
103
|
end
|
|
91
104
|
|
|
92
105
|
def code
|
|
@@ -112,4 +125,4 @@ class Keyboard < UI
|
|
|
112
125
|
end
|
|
113
126
|
end
|
|
114
127
|
|
|
115
|
-
end; end
|
|
128
|
+
end; end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
require 'buffer'
|
|
2
2
|
|
|
3
|
-
module Browser;
|
|
3
|
+
module Browser; class Event
|
|
4
4
|
|
|
5
5
|
class Message < Event
|
|
6
|
+
handles 'message'
|
|
7
|
+
|
|
6
8
|
def self.supported?
|
|
7
9
|
Browser.supports? 'Event.Message'
|
|
8
10
|
end
|
|
@@ -67,4 +69,4 @@ class Message < Event
|
|
|
67
69
|
end
|
|
68
70
|
end
|
|
69
71
|
|
|
70
|
-
end; end
|
|
72
|
+
end; end
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Mouse < UI
|
|
4
|
+
handles 'click', 'contextmenu', 'dblclick', 'mousedown', 'mouseenter',
|
|
5
|
+
'mouseleave', 'mousemove', 'mouseout', 'mouseover', 'mouseup',
|
|
6
|
+
'show'
|
|
7
|
+
|
|
4
8
|
def self.supported?
|
|
5
9
|
not $$[:MouseEvent].nil?
|
|
6
10
|
end
|
|
7
11
|
|
|
8
12
|
class Definition < UI::Definition
|
|
9
13
|
class Client
|
|
10
|
-
include Native
|
|
14
|
+
include Native::Wrapper
|
|
11
15
|
|
|
12
16
|
def x=(value)
|
|
13
17
|
`#@native.clientX = #{value}`
|
|
@@ -19,7 +23,7 @@ class Mouse < UI
|
|
|
19
23
|
end
|
|
20
24
|
|
|
21
25
|
class Layer
|
|
22
|
-
include Native
|
|
26
|
+
include Native::Wrapper
|
|
23
27
|
|
|
24
28
|
def x=(value)
|
|
25
29
|
`#@native.layerX = #{value}`
|
|
@@ -31,7 +35,7 @@ class Mouse < UI
|
|
|
31
35
|
end
|
|
32
36
|
|
|
33
37
|
class Offset
|
|
34
|
-
include Native
|
|
38
|
+
include Native::Wrapper
|
|
35
39
|
|
|
36
40
|
def x=(value)
|
|
37
41
|
`#@native.offsetX = #{value}`
|
|
@@ -43,7 +47,7 @@ class Mouse < UI
|
|
|
43
47
|
end
|
|
44
48
|
|
|
45
49
|
class Page
|
|
46
|
-
include Native
|
|
50
|
+
include Native::Wrapper
|
|
47
51
|
|
|
48
52
|
def x=(value)
|
|
49
53
|
`#@native.pageX = #{value}`
|
|
@@ -55,7 +59,7 @@ class Mouse < UI
|
|
|
55
59
|
end
|
|
56
60
|
|
|
57
61
|
class Screen
|
|
58
|
-
include Native
|
|
62
|
+
include Native::Wrapper
|
|
59
63
|
|
|
60
64
|
def x=(value)
|
|
61
65
|
`#@native.screenX = #{value}`
|
|
@@ -67,7 +71,7 @@ class Mouse < UI
|
|
|
67
71
|
end
|
|
68
72
|
|
|
69
73
|
class Ancestor
|
|
70
|
-
include Native
|
|
74
|
+
include Native::Wrapper
|
|
71
75
|
|
|
72
76
|
def x=(value)
|
|
73
77
|
`#@native.x = #{value}`
|
|
@@ -251,4 +255,4 @@ class Mouse < UI
|
|
|
251
255
|
end
|
|
252
256
|
end
|
|
253
257
|
|
|
254
|
-
end; end
|
|
258
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class PageTransition < Event
|
|
4
|
+
handles 'pagehide', 'pageshow'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.PageTransition'
|
|
6
8
|
end
|
|
@@ -20,4 +22,4 @@ class PageTransition < Event
|
|
|
20
22
|
alias_native :persisted?, :persisted
|
|
21
23
|
end
|
|
22
24
|
|
|
23
|
-
end; end
|
|
25
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class PopState < Event
|
|
4
|
+
handles 'popstate'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.PopState'
|
|
6
8
|
end
|
|
@@ -30,4 +32,4 @@ class PopState < Event
|
|
|
30
32
|
alias_native :state
|
|
31
33
|
end
|
|
32
34
|
|
|
33
|
-
end; end
|
|
35
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Progress < Event
|
|
4
|
+
handles 'progress', 'load', 'loadend', 'loadstart'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.Progress'
|
|
6
8
|
end
|
|
@@ -40,4 +42,4 @@ class Progress < Event
|
|
|
40
42
|
alias_native :total
|
|
41
43
|
end
|
|
42
44
|
|
|
43
|
-
end; end
|
|
45
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Sensor < Event
|
|
4
|
+
handles 'compassneedscalibration', 'userproximity'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.Sensor'
|
|
6
8
|
end
|
|
@@ -12,4 +14,4 @@ class Sensor < Event
|
|
|
12
14
|
end if supported?
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
end; end
|
|
17
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Storage < Event
|
|
4
|
+
handles 'storage'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.Storage'
|
|
6
8
|
end
|
|
@@ -40,4 +42,4 @@ class Storage < Event
|
|
|
40
42
|
alias_native :url
|
|
41
43
|
end
|
|
42
44
|
|
|
43
|
-
end; end
|
|
45
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Touch < Event
|
|
4
|
+
handles 'touchcancel', 'touchend', 'touchleave', 'touchmove', 'touchstart'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
Browser.supports? 'Event.Touch'
|
|
6
8
|
end
|
|
@@ -57,4 +59,4 @@ class Touch < Event
|
|
|
57
59
|
end
|
|
58
60
|
end
|
|
59
61
|
|
|
60
|
-
end; end
|
|
62
|
+
end; end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
module Browser;
|
|
1
|
+
module Browser; class Event
|
|
2
2
|
|
|
3
3
|
class Wheel < UI
|
|
4
|
+
handles 'wheel', 'mousewheel'
|
|
5
|
+
|
|
4
6
|
def self.supported?
|
|
5
7
|
not $$[:WheelEvent].nil?
|
|
6
8
|
end
|
|
@@ -46,4 +48,4 @@ class Wheel < UI
|
|
|
46
48
|
end
|
|
47
49
|
end
|
|
48
50
|
|
|
49
|
-
end; end
|
|
51
|
+
end; end
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
require 'browser/event/base'
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
|
|
5
|
+
class Event
|
|
6
|
+
def self.aliases
|
|
7
|
+
@aliases ||= {
|
|
8
|
+
'dom:load' => 'DOMContentLoaded',
|
|
9
|
+
'hover' => 'mouse:over'
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.name_for(name)
|
|
14
|
+
(aliases[name] || name).gsub(?:, '')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.handlers
|
|
18
|
+
@handlers ||= {}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.handles(*events)
|
|
22
|
+
events.each { |event| Event.handlers[event] = self }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Those events don't have interesting properties to warrant a custom class
|
|
26
|
+
# or are not currently implemented.
|
|
27
|
+
handles 'abort', 'afterprint', 'beforeprint', 'cached', 'canplay',
|
|
28
|
+
'canplaythrough', 'change', 'chargingchange', 'chargingtimechange',
|
|
29
|
+
'checking', 'close', 'dischargingtimechange', 'DOMContentLoaded',
|
|
30
|
+
'downloading', 'durationchange', 'emptied', 'ended', 'error',
|
|
31
|
+
'fullscreenchange', 'fullscreenerror', 'input', 'invalid',
|
|
32
|
+
'levelchange', 'loadeddata', 'loadedmetadata', 'noupdate', 'obsolete',
|
|
33
|
+
'offline', 'online', 'open', 'orientationchange', 'pause',
|
|
34
|
+
'pointerlockchange', 'pointerlockerror', 'play', 'playing',
|
|
35
|
+
'ratechange', 'readystatechange', 'reset', 'seeked', 'seeking',
|
|
36
|
+
'stalled', 'submit', 'success', 'suspend', 'timeupdate', 'updateready',
|
|
37
|
+
'visibilitychange', 'volumechange', 'waiting'
|
|
38
|
+
|
|
39
|
+
def self.class_for(name)
|
|
40
|
+
@handlers[name_for(name)] || Custom
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.supported?
|
|
44
|
+
true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.create(name, *args, &block)
|
|
48
|
+
name = name_for(name)
|
|
49
|
+
klass = class_for(name)
|
|
50
|
+
|
|
51
|
+
event = klass.new(klass.construct(name, klass.const_get(:Definition).new(&block)))
|
|
52
|
+
event.arguments = args
|
|
53
|
+
|
|
54
|
+
event
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
if Browser.supports? 'Event.constructor'
|
|
58
|
+
def self.construct(name, desc)
|
|
59
|
+
`new Event(#{name}, #{desc})`
|
|
60
|
+
end
|
|
61
|
+
elsif Browser.supports? 'Event.create'
|
|
62
|
+
def self.construct(name, desc)
|
|
63
|
+
%x{
|
|
64
|
+
var event = document.createEvent("HTMLEvents");
|
|
65
|
+
event.initEvent(name, desc.bubbles, desc.cancelable);
|
|
66
|
+
|
|
67
|
+
#{return Native(`event`).merge!(desc)};
|
|
68
|
+
}
|
|
69
|
+
end
|
|
70
|
+
elsif Browser.supports? 'Event.createObject'
|
|
71
|
+
def self.construct(name, desc)
|
|
72
|
+
Native(`document.createEventObject()`) \
|
|
73
|
+
.merge!(desc) \
|
|
74
|
+
.merge!(`{ type: name }`) \
|
|
75
|
+
.to_n
|
|
76
|
+
end
|
|
77
|
+
else
|
|
78
|
+
def self.construct(name, desc)
|
|
79
|
+
Native(desc).merge!(`{ type: name }`).to_n
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def self.new(value, callback = nil)
|
|
84
|
+
return super unless self == Event
|
|
85
|
+
|
|
86
|
+
klass = class_for(callback ? callback.name : `value.type`)
|
|
87
|
+
|
|
88
|
+
if klass == Event
|
|
89
|
+
super
|
|
90
|
+
else
|
|
91
|
+
klass.new(value, callback)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
attr_reader :callback
|
|
96
|
+
attr_writer :on
|
|
97
|
+
|
|
98
|
+
def initialize(event, callback = nil)
|
|
99
|
+
super(event)
|
|
100
|
+
|
|
101
|
+
@callback = callback
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def name
|
|
105
|
+
`#@native.type`
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def on
|
|
109
|
+
@on || Target.convert(`#@native.currentTarget`)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def target
|
|
113
|
+
Target.convert(`#@native.srcElement || #@native.target`)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def arguments
|
|
117
|
+
`#@native.arguments || []`
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def arguments=(args)
|
|
121
|
+
`#@native.arguments = #{args}`
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
alias_native :bubbles?, :bubbles
|
|
125
|
+
alias_native :cancelable?, :cancelable
|
|
126
|
+
alias_native :data
|
|
127
|
+
alias_native :phase, :eventPhase
|
|
128
|
+
alias_native :at, :timeStamp
|
|
129
|
+
|
|
130
|
+
def off
|
|
131
|
+
@callback.off if @callback
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def stopped?
|
|
135
|
+
`!!#@native.stopped`
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def stop
|
|
139
|
+
`#@native.stopPropagation()` if defined?(`#@native.stopPropagation`)
|
|
140
|
+
`#@native.stopped = true`
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def prevent
|
|
144
|
+
`#@native.preventDefault()` if defined?(`#@native.preventDefault`)
|
|
145
|
+
`#@native.prevented = true`
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def prevented?
|
|
149
|
+
`!!#@native.prevented`
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def stop!
|
|
153
|
+
prevent
|
|
154
|
+
stop
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
require 'browser/event/ui'
|
|
161
|
+
require 'browser/event/mouse'
|
|
162
|
+
require 'browser/event/keyboard'
|
|
163
|
+
require 'browser/event/custom'
|