opal-browser 0.1.0.beta1 → 0.2.0.beta1
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 +4 -4
- data/.travis.yml +60 -0
- data/.yardopts +1 -1
- data/Gemfile +7 -2
- data/LICENSE +19 -0
- data/README.md +74 -10
- data/config.ru +2 -1
- data/index.html.erb +22 -0
- data/opal-browser.gemspec +9 -11
- data/opal/browser.rb +1 -1
- data/opal/browser/animation_frame.rb +66 -9
- data/opal/browser/canvas.rb +72 -18
- data/opal/browser/canvas/data.rb +1 -1
- data/opal/browser/console.rb +3 -37
- data/opal/browser/cookies.rb +80 -24
- data/opal/browser/css/declaration.rb +0 -5
- data/opal/browser/{timeout.rb → delay.rb} +13 -13
- data/opal/browser/dom.rb +0 -2
- data/opal/browser/dom/attribute.rb +6 -0
- data/opal/browser/dom/builder.rb +4 -8
- data/opal/browser/dom/character_data.rb +43 -7
- data/opal/browser/dom/document.rb +13 -11
- data/opal/browser/dom/element.rb +127 -29
- data/opal/browser/dom/element/image.rb +23 -0
- data/opal/browser/dom/element/offset.rb +27 -10
- data/opal/browser/dom/element/scroll.rb +32 -12
- data/opal/browser/dom/element/size.rb +29 -0
- data/opal/browser/dom/event.rb +88 -75
- data/opal/browser/dom/event/animation.rb +16 -4
- data/opal/browser/dom/event/audio_processing.rb +6 -4
- data/opal/browser/dom/event/base.rb +229 -64
- data/opal/browser/dom/event/before_unload.rb +6 -4
- data/opal/browser/dom/event/clipboard.rb +6 -4
- data/opal/browser/dom/event/close.rb +16 -4
- data/opal/browser/dom/event/composition.rb +16 -4
- data/opal/browser/dom/event/custom.rb +43 -8
- data/opal/browser/dom/event/device_light.rb +6 -4
- data/opal/browser/dom/event/device_motion.rb +17 -4
- data/opal/browser/dom/event/device_orientation.rb +16 -4
- data/opal/browser/dom/event/device_proximity.rb +6 -4
- data/opal/browser/dom/event/drag.rb +34 -28
- data/opal/browser/dom/event/focus.rb +21 -5
- data/opal/browser/dom/event/gamepad.rb +33 -20
- data/opal/browser/dom/event/hash_change.rb +6 -4
- data/opal/browser/dom/event/keyboard.rb +45 -23
- data/opal/browser/dom/event/message.rb +28 -8
- data/opal/browser/dom/event/mouse.rb +26 -25
- data/opal/browser/dom/event/page_transition.rb +6 -4
- data/opal/browser/dom/event/pop_state.rb +16 -4
- data/opal/browser/dom/event/progress.rb +16 -4
- data/opal/browser/dom/event/sensor.rb +6 -4
- data/opal/browser/dom/event/storage.rb +6 -4
- data/opal/browser/dom/event/touch.rb +10 -19
- data/opal/browser/dom/event/ui.rb +19 -3
- data/opal/browser/dom/event/wheel.rb +2 -2
- data/opal/browser/dom/mutation_observer.rb +65 -5
- data/opal/browser/dom/node.rb +164 -59
- data/opal/browser/dom/node_set.rb +4 -0
- data/opal/browser/dom/text.rb +16 -1
- data/opal/browser/event_source.rb +5 -2
- data/opal/browser/history.rb +51 -15
- data/opal/browser/http.rb +22 -7
- data/opal/browser/http/headers.rb +5 -0
- data/opal/browser/http/request.rb +40 -10
- data/opal/browser/immediate.rb +123 -9
- data/opal/browser/interval.rb +8 -13
- data/opal/browser/location.rb +13 -3
- data/opal/browser/navigator.rb +9 -6
- data/opal/browser/screen.rb +31 -5
- data/opal/browser/socket.rb +8 -4
- data/opal/browser/storage.rb +118 -33
- data/opal/browser/support.rb +232 -0
- data/opal/browser/utils.rb +24 -6
- data/opal/browser/version.rb +1 -1
- data/opal/browser/window.rb +1 -2
- data/opal/browser/window/scroll.rb +21 -11
- data/opal/browser/window/size.rb +16 -6
- data/opal/browser/window/view.rb +23 -5
- data/spec/dom/builder_spec.rb +19 -19
- data/spec/dom/document_spec.rb +6 -6
- data/spec/dom/element_spec.rb +5 -5
- data/spec/dom/event_spec.rb +20 -20
- data/spec/dom/mutation_observer_spec.rb +5 -5
- data/spec/dom/node_spec.rb +39 -27
- data/spec/dom_spec.rb +10 -8
- data/spec/event_source_spec.rb +12 -12
- data/spec/history_spec.rb +24 -15
- data/spec/http_spec.rb +18 -17
- data/spec/immediate_spec.rb +9 -7
- data/spec/runner.rb +114 -0
- data/spec/socket_spec.rb +8 -8
- data/spec/spec_helper.rb +1 -0
- data/spec/storage_spec.rb +6 -6
- data/spec/wgxpath.install.js +49 -0
- data/spec/window_spec.rb +2 -2
- metadata +21 -54
- data/opal/browser/compatibility.rb +0 -59
- data/opal/browser/compatibility/animation_frame.rb +0 -93
- data/opal/browser/compatibility/dom/document/window.rb +0 -15
- data/opal/browser/compatibility/dom/element/css.rb +0 -15
- data/opal/browser/compatibility/dom/element/matches.rb +0 -31
- data/opal/browser/compatibility/dom/element/offset.rb +0 -20
- data/opal/browser/compatibility/dom/element/scroll.rb +0 -25
- data/opal/browser/compatibility/dom/element/style.rb +0 -15
- data/opal/browser/compatibility/dom/mutation_observer.rb +0 -47
- data/opal/browser/compatibility/http/request.rb +0 -15
- data/opal/browser/compatibility/immediate.rb +0 -107
- data/opal/browser/compatibility/window/scroll.rb +0 -27
- data/opal/browser/compatibility/window/size.rb +0 -13
- data/opal/browser/compatibility/window/view.rb +0 -13
- data/opal/browser/dom/compatibility.rb +0 -8
- data/opal/browser/http/compatibility.rb +0 -1
- data/opal/browser/window/compatibility.rb +0 -3
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
BROWSER_ENGINE = `/MSIE|WebKit|Presto|Gecko/.exec(navigator.userAgent)[0]`.downcase rescue :unknown
|
|
2
|
-
|
|
3
|
-
module Browser
|
|
4
|
-
|
|
5
|
-
module Compatibility
|
|
6
|
-
def self.sizzle?
|
|
7
|
-
defined?(`window.Sizzle`)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# FIXME: v
|
|
11
|
-
# def self.respond_to?(parent = `window`, object, method)
|
|
12
|
-
# ^
|
|
13
|
-
def self.respond_to?(*args)
|
|
14
|
-
if args.length == 2
|
|
15
|
-
parent = `window`
|
|
16
|
-
object, method = args
|
|
17
|
-
else
|
|
18
|
-
parent, object, method = args
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
%x{
|
|
22
|
-
if (!#{parent}) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
var klass = #{parent}[#{object}];
|
|
27
|
-
|
|
28
|
-
if (!klass) {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return typeof(klass.prototype[#{method}]) === "function";
|
|
33
|
-
}
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# FIXME: v
|
|
37
|
-
# def self.has?(parent = `window`, name)
|
|
38
|
-
# ^
|
|
39
|
-
def self.has?(*args)
|
|
40
|
-
if args.length == 1
|
|
41
|
-
parent = `window`
|
|
42
|
-
name, = args
|
|
43
|
-
else
|
|
44
|
-
parent, name = args
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
%x{
|
|
48
|
-
if (!#{parent}) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return #{parent}[#{name}] != null;
|
|
53
|
-
}
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
C = Compatibility
|
|
58
|
-
|
|
59
|
-
end
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
module Browser
|
|
2
|
-
|
|
3
|
-
class Compatibility
|
|
4
|
-
def self.request_animation?(prefix = nil)
|
|
5
|
-
if prefix
|
|
6
|
-
has?("#{prefix}RequestAnimationFrame")
|
|
7
|
-
else
|
|
8
|
-
has?(:requestAnimationFrame)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.cancel_animation?(prefix = nil)
|
|
13
|
-
if prefix
|
|
14
|
-
has?("#{prefix}CancelAnimationFrame")
|
|
15
|
-
else
|
|
16
|
-
has?(:cancelAnimationFrame)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.cancel_request_animation?(prefix = nil)
|
|
21
|
-
if prefix
|
|
22
|
-
has?("#{prefix}CancelRequestAnimationFrame")
|
|
23
|
-
else
|
|
24
|
-
has?(:cancelAnimationFrame)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
class AnimationFrame
|
|
30
|
-
if C.request_animation?
|
|
31
|
-
def request(block)
|
|
32
|
-
`#@native.requestAnimationFrame(#{block.to_n})`
|
|
33
|
-
end
|
|
34
|
-
elsif C.request_animation? :webkit
|
|
35
|
-
def request(block)
|
|
36
|
-
`#@native.webkitRequestAnimationFrame(#{block.to_n})`
|
|
37
|
-
end
|
|
38
|
-
elsif C.request_animation? :moz
|
|
39
|
-
def request(block)
|
|
40
|
-
`#@native.mozRequestAnimationFrame(#{block.to_n})`
|
|
41
|
-
end
|
|
42
|
-
elsif C.request_animation? :o
|
|
43
|
-
def request(block)
|
|
44
|
-
`#@native.oRequestAnimationFrame(#{block.to_n})`
|
|
45
|
-
end
|
|
46
|
-
elsif C.request_animation? :ms
|
|
47
|
-
def request(block)
|
|
48
|
-
`#@native.msRequestAnimationFrame(#{block.to_n})`
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
if C.cancel_animation?
|
|
53
|
-
def cancel
|
|
54
|
-
`#@native.cancelAnimationFrame(#@id)`
|
|
55
|
-
end
|
|
56
|
-
else
|
|
57
|
-
if C.cancel_animation? :webkit
|
|
58
|
-
def cancel
|
|
59
|
-
`#@native.webkitCancelAnimationFrame(#@id)`
|
|
60
|
-
end
|
|
61
|
-
elsif C.cancel_request_animation? :webkit
|
|
62
|
-
def cancel
|
|
63
|
-
`#@native.webkitCancelRequestAnimationFrame(#@id)`
|
|
64
|
-
end
|
|
65
|
-
elsif C.cancel_animation? :moz
|
|
66
|
-
def cancel
|
|
67
|
-
`#@native.mozCancelAnimationFrame(#@id)`
|
|
68
|
-
end
|
|
69
|
-
elsif C.cancel_request_animation? :moz
|
|
70
|
-
def cancel
|
|
71
|
-
`#@native.mozCancelRequestAnimationFrame(#@id)`
|
|
72
|
-
end
|
|
73
|
-
elsif C.cancel_animation? :o
|
|
74
|
-
def cancel
|
|
75
|
-
`#@native.oCancelAnimationFrame(#@id)`
|
|
76
|
-
end
|
|
77
|
-
elsif C.cancel_request_animation? :o
|
|
78
|
-
def cancel
|
|
79
|
-
`#@native.oCancelRequestAnimationFrame(#@id)`
|
|
80
|
-
end
|
|
81
|
-
elsif C.cancel_animation? :ms
|
|
82
|
-
def cancel
|
|
83
|
-
`#@native.msCancelAnimationFrame(#@id)`
|
|
84
|
-
end
|
|
85
|
-
elsif C.cancel_request_animation? :ms
|
|
86
|
-
def cancel
|
|
87
|
-
`#@native.msCancelRequestAnimationFrame(#@id)`
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Browser; module DOM; class Document < Element
|
|
2
|
-
|
|
3
|
-
unless C.has? `document`, :defaultView
|
|
4
|
-
if C.has? `document`, :parentWindow
|
|
5
|
-
def window
|
|
6
|
-
`#@native.parentWindow`
|
|
7
|
-
end
|
|
8
|
-
else
|
|
9
|
-
def window
|
|
10
|
-
raise NotImplementedError, 'window from document is unsupported'
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end; end; end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Browser; module DOM; class Element
|
|
2
|
-
|
|
3
|
-
unless C.respond_to?(:Element, :querySelectorAll)
|
|
4
|
-
if C.sizzle?
|
|
5
|
-
def css(path)
|
|
6
|
-
NodeSet.new(document, `Sizzle(#{path}, #@native)`)
|
|
7
|
-
end
|
|
8
|
-
else
|
|
9
|
-
def css(*)
|
|
10
|
-
raise NotImplementedError, 'fetching by selector unsupported'
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end; end; end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module Browser; module DOM; class Element
|
|
2
|
-
|
|
3
|
-
unless C.respond_to?(:Element, :matches)
|
|
4
|
-
if C.respond_to?(:Element, :oMatchesSelector)
|
|
5
|
-
def matches?(selector)
|
|
6
|
-
`#@native.oMatchesSelector(#{selector})`
|
|
7
|
-
end
|
|
8
|
-
elsif C.respond_to?(:Element, :msMatchesSelector)
|
|
9
|
-
def matches?(selector)
|
|
10
|
-
`#@native.msMatchesSelector(#{selector})`
|
|
11
|
-
end
|
|
12
|
-
elsif C.respond_to?(:Element, :mozMatchesSelector)
|
|
13
|
-
def matches?(selector)
|
|
14
|
-
`#@native.mozMatchesSelector(#{selector})`
|
|
15
|
-
end
|
|
16
|
-
elsif C.respond_to?(:Element, :webkitMatchesSelector)
|
|
17
|
-
def matches?(selector)
|
|
18
|
-
`#@native.webkitMatchesSelector(#{selector})`
|
|
19
|
-
end
|
|
20
|
-
elsif C.sizzle?
|
|
21
|
-
def matches?(selector)
|
|
22
|
-
`Sizzle.matchesSelector(#@native, #{selector})`
|
|
23
|
-
end
|
|
24
|
-
else
|
|
25
|
-
def matches?(*)
|
|
26
|
-
raise NotImplementedError, 'matches by selector unsupported'
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end; end; end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module Browser; module DOM; class Element
|
|
2
|
-
|
|
3
|
-
class Offset
|
|
4
|
-
unless C.has? `document.body`, :getBoundingClientRect
|
|
5
|
-
def position
|
|
6
|
-
doc = document
|
|
7
|
-
root = doc.root.to_n
|
|
8
|
-
win = doc.window.to_n
|
|
9
|
-
|
|
10
|
-
%x{
|
|
11
|
-
var y = (#{win}.pageYOffset || #{root}.scrollTop) - (#{root}.clientTop || 0),
|
|
12
|
-
x = (#{win}.pageXOffset || #{root}.scrollLeft) - (#{root}.clientLeft || 0);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
Browser::Position.new(`x`, `y`)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end; end; end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
module Browser; module DOM; class Element
|
|
2
|
-
|
|
3
|
-
unless C.has? `document.body`, :scrollLeft
|
|
4
|
-
if C.has? `document.body`, :pageXOffset
|
|
5
|
-
def scroll(to = nil)
|
|
6
|
-
if to
|
|
7
|
-
if x = to[:x]
|
|
8
|
-
`#@native.pageXOffset = #{x}`
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
if y = to[:y]
|
|
12
|
-
`#@native.pageYOffset = #{y}`
|
|
13
|
-
end
|
|
14
|
-
else
|
|
15
|
-
Position.new(`#@native.pageXOffset`, `#@native.pageYOffset`)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
else
|
|
19
|
-
def scroll(*)
|
|
20
|
-
raise NotImplementedError, 'scroll on element not supported'
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end; end; end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Browser; module DOM; class Element
|
|
2
|
-
|
|
3
|
-
unless C.has? :getComputedStyle
|
|
4
|
-
if C.has?(`document.documentElement`, :currentStyle)
|
|
5
|
-
def style!
|
|
6
|
-
CSS::Declaration.new(`#@native.currentStyle`)
|
|
7
|
-
end
|
|
8
|
-
else
|
|
9
|
-
def style!
|
|
10
|
-
raise NotImplementedError, 'computed style unsupported'
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end; end; end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
module Browser; module DOM
|
|
2
|
-
|
|
3
|
-
unless defined?(`window.MutationObserver`)
|
|
4
|
-
class MutationObserver
|
|
5
|
-
class Record
|
|
6
|
-
attr_reader :type, :target, :old, :attribute
|
|
7
|
-
|
|
8
|
-
def initialize(*)
|
|
9
|
-
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def attributes?; type == :attributes; end
|
|
13
|
-
def tree?; type == :tree; end
|
|
14
|
-
def cdata?; type == :cdata; end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def initialize(&block)
|
|
18
|
-
@block = block
|
|
19
|
-
@observed = []
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def observe(target, options = nil)
|
|
23
|
-
unless options
|
|
24
|
-
options = {
|
|
25
|
-
children: true,
|
|
26
|
-
tree: true,
|
|
27
|
-
attributes: :old,
|
|
28
|
-
cdata: :old
|
|
29
|
-
}
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
self
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def take
|
|
36
|
-
result, @records = @records, []
|
|
37
|
-
|
|
38
|
-
result
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def disconnect
|
|
42
|
-
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
end; end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Browser; module HTTP; class Request
|
|
2
|
-
|
|
3
|
-
unless C.has? :XMLHttpRequest
|
|
4
|
-
if C.has? :ActiveXObject
|
|
5
|
-
def transport
|
|
6
|
-
`new ActiveXObject("MSXML2.XMLHTTP.3.0")`
|
|
7
|
-
end
|
|
8
|
-
else
|
|
9
|
-
def transport
|
|
10
|
-
raise NotImplementedError, 'XMLHttpRequest is unsupported'
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end; end; end
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
module Browser
|
|
2
|
-
|
|
3
|
-
module Compatibility
|
|
4
|
-
def self.immediate?(prefix = nil)
|
|
5
|
-
if prefix
|
|
6
|
-
has?("#{prefix}SetImmediate")
|
|
7
|
-
else
|
|
8
|
-
has?(:setImmediate)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.post_message?
|
|
13
|
-
return false unless has?(:postMessage) && !has?(:importScripts)
|
|
14
|
-
|
|
15
|
-
%x{
|
|
16
|
-
var ok = true,
|
|
17
|
-
old = window.onmessage;
|
|
18
|
-
|
|
19
|
-
window.onmessage = function() { ok = false; };
|
|
20
|
-
window.postMessage("", "*")
|
|
21
|
-
window.onmessage = old;
|
|
22
|
-
|
|
23
|
-
return ok;
|
|
24
|
-
}
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.ready_state_change?
|
|
28
|
-
`"onreadystatechange" in window.document.createElement("script")`
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
class Immediate
|
|
33
|
-
if C.immediate?
|
|
34
|
-
def dispatch
|
|
35
|
-
@id = `window.setImmediate(function() {
|
|
36
|
-
#{@function.call(@arguments, &@block)};
|
|
37
|
-
})`
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def prevent
|
|
41
|
-
`window.clearImmediate(#@id)`
|
|
42
|
-
end
|
|
43
|
-
elsif C.immediate? :ms
|
|
44
|
-
def dispatch
|
|
45
|
-
@id = `window.msSetImmediate(function() {
|
|
46
|
-
#{@function.call(@arguments, &@block)};
|
|
47
|
-
})`
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def prevent
|
|
51
|
-
`window.msClearImmediate(#@id)`
|
|
52
|
-
end
|
|
53
|
-
elsif C.post_message?
|
|
54
|
-
@@tasks = {}
|
|
55
|
-
@@prefix = "opal.browser.immediate.#{rand(1_000_000)}."
|
|
56
|
-
|
|
57
|
-
$window.on :message do |e|
|
|
58
|
-
if String === e.data && e.data.start_with?(@@prefix)
|
|
59
|
-
if task = @@tasks.delete(e.data[@@prefix.length .. -1])
|
|
60
|
-
task[0].call(*task[1], &task[2])
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def dispatch
|
|
66
|
-
@id = rand(1_000_000).to_s
|
|
67
|
-
@@tasks[@id] = [@function, @arguments, @block]
|
|
68
|
-
|
|
69
|
-
$window.send! "#{@@prefix}#{@id}"
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def prevent
|
|
73
|
-
@@tasks.delete(@id)
|
|
74
|
-
end
|
|
75
|
-
elsif C.ready_state_change?
|
|
76
|
-
def dispatch
|
|
77
|
-
%x{
|
|
78
|
-
var script = document.createElement("script");
|
|
79
|
-
|
|
80
|
-
script.onreadystatechange = function() {
|
|
81
|
-
if (!#{aborted?}) {
|
|
82
|
-
#{@function.call(@arguments, &@block)};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
script.onreadystatechange = null;
|
|
86
|
-
script.parentNode.removeChild(script);
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
document.documentElement.appendChild(script);
|
|
90
|
-
}
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def prevent; end
|
|
94
|
-
else
|
|
95
|
-
def dispatch
|
|
96
|
-
@id = `window.setTimeout(function() {
|
|
97
|
-
#{@function.call(*@arguments, &@block)};
|
|
98
|
-
}, 0)`
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def prevent
|
|
102
|
-
`window.clearTimeout(#@id)`
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
end
|