diamonds 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +36 -0
- data/lib/diamonds.rb +74 -0
- data/lib/diamonds/Gemfile +28 -0
- data/lib/diamonds/README.md +254 -0
- data/lib/diamonds/Rakefile +5 -0
- data/lib/diamonds/apps/application.rb +15 -0
- data/lib/diamonds/apps/library.rb +321 -0
- data/lib/diamonds/apps/user_app.rb +5 -0
- data/lib/diamonds/config.ru +98 -0
- data/lib/diamonds/db/mysiteDB Back.sqlite3 +0 -0
- data/lib/diamonds/db/mysiteDB.sqlite3 +0 -0
- data/lib/diamonds/gems/auto_launch_browser.rb +22 -0
- data/lib/diamonds/gems/io.rb +146 -0
- data/lib/diamonds/gems/ruby_to_js.rb +173 -0
- data/lib/diamonds/gems/server_utils.rb +96 -0
- data/lib/diamonds/lib/opal-browser.rb +1 -0
- data/lib/diamonds/lib/opal/browser.rb +4 -0
- data/lib/diamonds/opal-browser.gemspec +21 -0
- data/lib/diamonds/opal/browser.rb +11 -0
- data/lib/diamonds/opal/browser/animation_frame.rb +111 -0
- data/lib/diamonds/opal/browser/canvas.rb +321 -0
- data/lib/diamonds/opal/browser/canvas/data.rb +63 -0
- data/lib/diamonds/opal/browser/canvas/gradient.rb +27 -0
- data/lib/diamonds/opal/browser/canvas/style.rb +113 -0
- data/lib/diamonds/opal/browser/canvas/text.rb +45 -0
- data/lib/diamonds/opal/browser/console.rb +103 -0
- data/lib/diamonds/opal/browser/cookies.rb +133 -0
- data/lib/diamonds/opal/browser/css.rb +24 -0
- data/lib/diamonds/opal/browser/css/declaration.rb +83 -0
- data/lib/diamonds/opal/browser/css/rule.rb +48 -0
- data/lib/diamonds/opal/browser/css/rule/style.rb +16 -0
- data/lib/diamonds/opal/browser/css/style_sheet.rb +83 -0
- data/lib/diamonds/opal/browser/css/unit.rb +188 -0
- data/lib/diamonds/opal/browser/database/sql.rb +194 -0
- data/lib/diamonds/opal/browser/delay.rb +78 -0
- data/lib/diamonds/opal/browser/dom.rb +84 -0
- data/lib/diamonds/opal/browser/dom/attribute.rb +26 -0
- data/lib/diamonds/opal/browser/dom/builder.rb +88 -0
- data/lib/diamonds/opal/browser/dom/cdata.rb +9 -0
- data/lib/diamonds/opal/browser/dom/character_data.rb +73 -0
- data/lib/diamonds/opal/browser/dom/comment.rb +9 -0
- data/lib/diamonds/opal/browser/dom/document.rb +149 -0
- data/lib/diamonds/opal/browser/dom/document_fragment.rb +7 -0
- data/lib/diamonds/opal/browser/dom/element.rb +474 -0
- data/lib/diamonds/opal/browser/dom/element/attributes.rb +87 -0
- data/lib/diamonds/opal/browser/dom/element/data.rb +67 -0
- data/lib/diamonds/opal/browser/dom/element/image.rb +23 -0
- data/lib/diamonds/opal/browser/dom/element/input.rb +28 -0
- data/lib/diamonds/opal/browser/dom/element/offset.rb +89 -0
- data/lib/diamonds/opal/browser/dom/element/position.rb +46 -0
- data/lib/diamonds/opal/browser/dom/element/scroll.rb +136 -0
- data/lib/diamonds/opal/browser/dom/element/select.rb +36 -0
- data/lib/diamonds/opal/browser/dom/element/size.rb +34 -0
- data/lib/diamonds/opal/browser/dom/element/template.rb +9 -0
- data/lib/diamonds/opal/browser/dom/element/textarea.rb +24 -0
- data/lib/diamonds/opal/browser/dom/mutation_observer.rb +178 -0
- data/lib/diamonds/opal/browser/dom/node.rb +464 -0
- data/lib/diamonds/opal/browser/dom/node_set.rb +110 -0
- data/lib/diamonds/opal/browser/dom/text.rb +36 -0
- data/lib/diamonds/opal/browser/effects.rb +50 -0
- data/lib/diamonds/opal/browser/event.rb +253 -0
- data/lib/diamonds/opal/browser/event/animation.rb +38 -0
- data/lib/diamonds/opal/browser/event/audio_processing.rb +33 -0
- data/lib/diamonds/opal/browser/event/base.rb +430 -0
- data/lib/diamonds/opal/browser/event/before_unload.rb +15 -0
- data/lib/diamonds/opal/browser/event/clipboard.rb +28 -0
- data/lib/diamonds/opal/browser/event/close.rb +47 -0
- data/lib/diamonds/opal/browser/event/composition.rb +50 -0
- data/lib/diamonds/opal/browser/event/custom.rb +65 -0
- data/lib/diamonds/opal/browser/event/device_light.rb +23 -0
- data/lib/diamonds/opal/browser/event/device_motion.rb +51 -0
- data/lib/diamonds/opal/browser/event/device_orientation.rb +48 -0
- data/lib/diamonds/opal/browser/event/device_proximity.rb +33 -0
- data/lib/diamonds/opal/browser/event/drag.rb +119 -0
- data/lib/diamonds/opal/browser/event/focus.rb +39 -0
- data/lib/diamonds/opal/browser/event/gamepad.rb +60 -0
- data/lib/diamonds/opal/browser/event/hash_change.rb +28 -0
- data/lib/diamonds/opal/browser/event/keyboard.rb +115 -0
- data/lib/diamonds/opal/browser/event/message.rb +70 -0
- data/lib/diamonds/opal/browser/event/mouse.rb +254 -0
- data/lib/diamonds/opal/browser/event/page_transition.rb +23 -0
- data/lib/diamonds/opal/browser/event/pop_state.rb +33 -0
- data/lib/diamonds/opal/browser/event/progress.rb +43 -0
- data/lib/diamonds/opal/browser/event/sensor.rb +15 -0
- data/lib/diamonds/opal/browser/event/storage.rb +43 -0
- data/lib/diamonds/opal/browser/event/touch.rb +60 -0
- data/lib/diamonds/opal/browser/event/ui.rb +38 -0
- data/lib/diamonds/opal/browser/event/wheel.rb +49 -0
- data/lib/diamonds/opal/browser/event_source.rb +70 -0
- data/lib/diamonds/opal/browser/history.rb +90 -0
- data/lib/diamonds/opal/browser/http.rb +169 -0
- data/lib/diamonds/opal/browser/http/binary.rb +58 -0
- data/lib/diamonds/opal/browser/http/headers.rb +109 -0
- data/lib/diamonds/opal/browser/http/request.rb +344 -0
- data/lib/diamonds/opal/browser/http/response.rb +115 -0
- data/lib/diamonds/opal/browser/immediate.rb +163 -0
- data/lib/diamonds/opal/browser/interval.rb +111 -0
- data/lib/diamonds/opal/browser/location.rb +87 -0
- data/lib/diamonds/opal/browser/navigator.rb +173 -0
- data/lib/diamonds/opal/browser/screen.rb +66 -0
- data/lib/diamonds/opal/browser/socket.rb +123 -0
- data/lib/diamonds/opal/browser/storage.rb +252 -0
- data/lib/diamonds/opal/browser/support.rb +287 -0
- data/lib/diamonds/opal/browser/utils.rb +74 -0
- data/lib/diamonds/opal/browser/version.rb +3 -0
- data/lib/diamonds/opal/browser/window.rb +120 -0
- data/lib/diamonds/opal/browser/window/scroll.rb +59 -0
- data/lib/diamonds/opal/browser/window/size.rb +59 -0
- data/lib/diamonds/opal/browser/window/view.rb +36 -0
- data/lib/diamonds/opal/opal-browser.rb +1 -0
- data/lib/diamonds/public/__OPAL_SOURCE_MAPS__/application.map +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/HELP-US-OUT.txt +7 -0
- data/lib/diamonds/public/javascripts/font-awesome/css/font-awesome.css +2026 -0
- data/lib/diamonds/public/javascripts/font-awesome/css/font-awesome.min.css +1 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/FontAwesome.otf +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.svg +640 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/animated.less +34 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/bordered-pulled.less +25 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/core.less +12 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/fixed-width.less +6 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/font-awesome.less +17 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/icons.less +677 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/larger.less +13 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/list.less +19 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/mixins.less +26 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/path.less +15 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/rotated-flipped.less +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/stacked.less +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/variables.less +688 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_animated.scss +34 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_bordered-pulled.scss +25 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_core.scss +12 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_fixed-width.scss +6 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_icons.scss +677 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_larger.scss +13 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_list.scss +19 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_mixins.scss +26 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_path.scss +15 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_rotated-flipped.scss +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_stacked.scss +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_variables.scss +688 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/font-awesome.scss +17 -0
- data/lib/diamonds/public/javascripts/jquery-2.1.4.min.js +4 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.min.css +7 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.min.js +13 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.structure.min.css +5 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.theme.min.css +5 -0
- data/lib/diamonds/public/javascripts/jquery.js +4 -0
- data/lib/diamonds/public/javascripts/jquery.ui.touch-punch.min.js +11 -0
- data/lib/diamonds/public/javascripts/ne pas utiliser version en retard jeezs_editor.js b/data/lib/diamonds/public/javascripts/ne pas utiliser version en retard → jeezs_editor.js +0 -0
- data/lib/diamonds/public/javascripts/standalone.js +2316 -0
- data/lib/diamonds/public/javascripts/standalone.min.js +1 -0
- data/lib/diamonds/public/javascripts/wysiwyg-editor.min.css +1 -0
- data/lib/diamonds/public/javascripts/wysiwyg-editor.min.js +1 -0
- data/lib/diamonds/public/javascripts/wysiwyg.min.js +1 -0
- data/lib/diamonds/user_app/main.rb +45 -0
- data/lib/diamonds/version.rb +3 -0
- data/lib/diamonds/views/index.erb +35 -0
- data/lib/diamonds/views/javascripts/jeezs_editor.js.erb +365 -0
- data/lib/diamonds/views/stylesheets/main.css.erb +244 -0
- metadata +490 -0
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Browser; module HTTP
|
4
|
+
|
5
|
+
# Represents an HTTP response.
|
6
|
+
class Response
|
7
|
+
include Native
|
8
|
+
|
9
|
+
Status = Struct.new(:code, :text)
|
10
|
+
|
11
|
+
# @!attribute [r] request
|
12
|
+
# @return [Request] the request to this response
|
13
|
+
attr_reader :request
|
14
|
+
|
15
|
+
# Create a response from a request.
|
16
|
+
#
|
17
|
+
# @param request [Request] the request
|
18
|
+
def initialize(request)
|
19
|
+
super(request.to_n)
|
20
|
+
|
21
|
+
@request = request
|
22
|
+
end
|
23
|
+
|
24
|
+
# @!attribute [r] headers
|
25
|
+
# @return [Headers] the response headers
|
26
|
+
def headers
|
27
|
+
@headers ||= Headers.parse(`#@native.getAllResponseHeaders()`)
|
28
|
+
end
|
29
|
+
|
30
|
+
# @!attribute [r] status
|
31
|
+
# @return [Status] the response status
|
32
|
+
def status
|
33
|
+
Status.new(`#@native.status || nil`, `#@native.statusText || nil`)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Checks if the response was successful
|
37
|
+
def success?
|
38
|
+
if code = status.code
|
39
|
+
code >= 200 && code < 300 || code == 304
|
40
|
+
else
|
41
|
+
false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Check if the response failed
|
46
|
+
def failure?
|
47
|
+
!success?
|
48
|
+
end
|
49
|
+
|
50
|
+
# @!attribute [r] text
|
51
|
+
# @return [String] the response body as text
|
52
|
+
def text
|
53
|
+
%x{
|
54
|
+
var result = #@native.responseText;
|
55
|
+
|
56
|
+
if (!result) {
|
57
|
+
return nil;
|
58
|
+
}
|
59
|
+
|
60
|
+
return result;
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
# @!attribute [r] json
|
65
|
+
# @return [Hash, Array] the response body as JSON
|
66
|
+
def json
|
67
|
+
%x{
|
68
|
+
var result = #@native.responseText;
|
69
|
+
|
70
|
+
if (!result) {
|
71
|
+
return nil;
|
72
|
+
}
|
73
|
+
|
74
|
+
return #{JSON.parse(`result`)};
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
# @!attribute [r] xml
|
79
|
+
# @return [DOM::Document] the response body as DOM document
|
80
|
+
def xml
|
81
|
+
%x{
|
82
|
+
var result = #@native.responseXML;
|
83
|
+
|
84
|
+
if (!result) {
|
85
|
+
return nil;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
DOM(`result`)
|
90
|
+
end
|
91
|
+
|
92
|
+
# @!attribute [r] binary
|
93
|
+
# @return [Binary] the response body as binary
|
94
|
+
def binary
|
95
|
+
return unless request.binary?
|
96
|
+
|
97
|
+
if Buffer.supported?
|
98
|
+
%x{
|
99
|
+
var result = #@native.response;
|
100
|
+
|
101
|
+
if (!result) {
|
102
|
+
return nil;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
Binary.new(Buffer.new(`result`))
|
107
|
+
else
|
108
|
+
return unless text
|
109
|
+
|
110
|
+
Binary.new(text)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
end; end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'promise'
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
|
5
|
+
# Class to easily create and dispatch an immediate call.
|
6
|
+
#
|
7
|
+
# Immediate calls are deferred function calls that happen as soon as they can
|
8
|
+
# be scheduled.
|
9
|
+
#
|
10
|
+
# Compatibility
|
11
|
+
# -------------
|
12
|
+
# The compatibility layer will try various implementations in the following
|
13
|
+
# order.
|
14
|
+
#
|
15
|
+
# + [setImmediate](https://developer.mozilla.org/en-US/docs/Web/API/Window.setImmediate)
|
16
|
+
# + [postMessage](https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage)
|
17
|
+
# + [readystatechange](https://developer.mozilla.org/en-US/docs/Web/Reference/Events/readystatechange)
|
18
|
+
# + [setTimeout](https://developer.mozilla.org/en/docs/Web/API/window.setTimeout)
|
19
|
+
#
|
20
|
+
# The order has been chosen from best to worst for both performance and
|
21
|
+
# preemptiveness.
|
22
|
+
class Immediate
|
23
|
+
# Create an immediate for the given function which will be called with the
|
24
|
+
# arguments and block.
|
25
|
+
#
|
26
|
+
# @param func [Proc] the function to call
|
27
|
+
# @param args [Array] the arguments to call it with
|
28
|
+
def initialize(func, args, &block)
|
29
|
+
@aborted = false
|
30
|
+
@function = func
|
31
|
+
@arguments = args
|
32
|
+
@block = block
|
33
|
+
end
|
34
|
+
|
35
|
+
# @!method dispatch
|
36
|
+
# Dispatch the immediate.
|
37
|
+
|
38
|
+
# @!method prevent
|
39
|
+
# Prevent the immediate from being called once scheduled.
|
40
|
+
if Browser.supports? 'Immediate'
|
41
|
+
def dispatch
|
42
|
+
@id = `window.setImmediate(function() {
|
43
|
+
#{@function.call(*@arguments, &@block)};
|
44
|
+
})`
|
45
|
+
end
|
46
|
+
|
47
|
+
def prevent
|
48
|
+
`window.clearImmediate(#@id)`
|
49
|
+
end
|
50
|
+
elsif Browser.supports? 'Immediate (Internet Explorer)'
|
51
|
+
def dispatch
|
52
|
+
@id = `window.msSetImmediate(function() {
|
53
|
+
#{@function.call(*@arguments, &@block)};
|
54
|
+
})`
|
55
|
+
end
|
56
|
+
|
57
|
+
def prevent
|
58
|
+
`window.msClearImmediate(#@id)`
|
59
|
+
end
|
60
|
+
elsif Browser.supports? 'Window.send (Asynchronous)'
|
61
|
+
# @private
|
62
|
+
@@tasks = {}
|
63
|
+
|
64
|
+
# @private
|
65
|
+
@@prefix = "opal.browser.immediate.#{rand(1_000_000)}."
|
66
|
+
|
67
|
+
$window.on :message do |e|
|
68
|
+
if String === e.data && e.data.start_with?(@@prefix)
|
69
|
+
if task = @@tasks.delete(e.data[@@prefix.length .. -1])
|
70
|
+
task[0].call(*task[1], &task[2])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def dispatch
|
76
|
+
@id = rand(1_000_000).to_s
|
77
|
+
@@tasks[@id] = [@function, @arguments, @block]
|
78
|
+
|
79
|
+
$window.send "#{@@prefix}#{@id}"
|
80
|
+
end
|
81
|
+
|
82
|
+
def prevent
|
83
|
+
@@tasks.delete(@id)
|
84
|
+
end
|
85
|
+
elsif Browser.supports? 'Event.readystatechange'
|
86
|
+
def dispatch
|
87
|
+
%x{
|
88
|
+
var script = document.createElement("script");
|
89
|
+
|
90
|
+
script.onreadystatechange = function() {
|
91
|
+
if (!#{aborted?}) {
|
92
|
+
#{@function.call(*@arguments, &@block)};
|
93
|
+
}
|
94
|
+
|
95
|
+
script.onreadystatechange = null;
|
96
|
+
script.parentNode.removeChild(script);
|
97
|
+
};
|
98
|
+
|
99
|
+
document.documentElement.appendChild(script);
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
def prevent; end
|
104
|
+
else
|
105
|
+
def dispatch
|
106
|
+
@id = `window.setTimeout(function() {
|
107
|
+
#{@function.call(*@arguments, &@block)};
|
108
|
+
}, 0)`
|
109
|
+
end
|
110
|
+
|
111
|
+
def prevent
|
112
|
+
`window.clearTimeout(#@id)`
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# Abort the immediate.
|
117
|
+
def abort
|
118
|
+
return if aborted?
|
119
|
+
|
120
|
+
@aborted = true
|
121
|
+
prevent
|
122
|
+
|
123
|
+
self
|
124
|
+
end
|
125
|
+
|
126
|
+
# Check if the immediate has been aborted.
|
127
|
+
def aborted?
|
128
|
+
@aborted
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
module Kernel
|
135
|
+
# (see Immediate.new)
|
136
|
+
def defer(*args, &block)
|
137
|
+
Browser::Immediate.new(block, args).tap(&:dispatch)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
class Proc
|
142
|
+
# (see Immediate.new)
|
143
|
+
def defer(*args, &block)
|
144
|
+
Browser::Immediate.new(self, args, &block).tap(&:dispatch)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
class Promise
|
149
|
+
# Create a promise which will be resolved with the result of the immediate.
|
150
|
+
#
|
151
|
+
# @param args [Array] the arguments the block will be called with
|
152
|
+
def self.defer(*args, &block)
|
153
|
+
new.tap {|promise|
|
154
|
+
proc {
|
155
|
+
begin
|
156
|
+
promise.resolve(block.call(*args))
|
157
|
+
rescue Exception => e
|
158
|
+
promise.reject(e)
|
159
|
+
end
|
160
|
+
}.defer
|
161
|
+
}
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Browser
|
2
|
+
|
3
|
+
# Allows you to create an interval that executes the function every given
|
4
|
+
# seconds.
|
5
|
+
#
|
6
|
+
# @see https://developer.mozilla.org/en-US/docs/Web/API/Window.setInterval
|
7
|
+
class Interval
|
8
|
+
# @!attribute [r] every
|
9
|
+
# @return [Float] the seconds every which the block is called
|
10
|
+
attr_reader :every
|
11
|
+
|
12
|
+
# Create and start an interval.
|
13
|
+
#
|
14
|
+
# @param window [Window] the window to start the interval on
|
15
|
+
# @param time [Float] seconds every which to call the block
|
16
|
+
def initialize(window, time, &block)
|
17
|
+
@window = Native.convert(window)
|
18
|
+
@every = time
|
19
|
+
@block = block
|
20
|
+
|
21
|
+
@aborted = false
|
22
|
+
end
|
23
|
+
|
24
|
+
# Check if the interval has been stopped.
|
25
|
+
def stopped?
|
26
|
+
@id.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
# Check if the interval has been aborted.
|
30
|
+
def aborted?
|
31
|
+
@aborted
|
32
|
+
end
|
33
|
+
|
34
|
+
# Abort the interval, it won't be possible to start it again.
|
35
|
+
def abort
|
36
|
+
`#@window.clearInterval(#@id)`
|
37
|
+
|
38
|
+
@aborted = true
|
39
|
+
@id = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# Stop the interval, it will be possible to start it again.
|
43
|
+
def stop
|
44
|
+
return if stopped?
|
45
|
+
|
46
|
+
`#@window.clearInterval(#@id)`
|
47
|
+
|
48
|
+
@stopped = true
|
49
|
+
@id = nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# Start the interval if it has been stopped.
|
53
|
+
def start
|
54
|
+
raise "the interval has been aborted" if aborted?
|
55
|
+
return unless stopped?
|
56
|
+
|
57
|
+
@id = `#@window.setInterval(#@block, #@every * 1000)`
|
58
|
+
end
|
59
|
+
|
60
|
+
# Call the [Interval] block.
|
61
|
+
def call
|
62
|
+
@block.call
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class Window
|
67
|
+
# Execute the block every given seconds.
|
68
|
+
#
|
69
|
+
# @param time [Float] the seconds between every call
|
70
|
+
#
|
71
|
+
# @return [Interval] the object representing the interval
|
72
|
+
def every(time, &block)
|
73
|
+
Interval.new(@native, time, &block).tap(&:start)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Execute the block every given seconds, you have to call [#start] on it
|
77
|
+
# yourself.
|
78
|
+
#
|
79
|
+
# @param time [Float] the seconds between every call
|
80
|
+
#
|
81
|
+
# @return [Interval] the object representing the interval
|
82
|
+
def every!(time, &block)
|
83
|
+
Interval.new(@native, time, &block)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
module Kernel
|
90
|
+
# (see Browser::Window#every)
|
91
|
+
def every(time, &block)
|
92
|
+
$window.every(time, &block)
|
93
|
+
end
|
94
|
+
|
95
|
+
# (see Browser::Window#every!)
|
96
|
+
def every!(time, &block)
|
97
|
+
$window.every!(time, &block)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class Proc
|
102
|
+
# (see Browser::Window#every)
|
103
|
+
def every(time)
|
104
|
+
$window.every(time, &self)
|
105
|
+
end
|
106
|
+
|
107
|
+
# (see Browser::Window#every!)
|
108
|
+
def every!(time)
|
109
|
+
$window.every!(time, &self)
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Browser
|
2
|
+
|
3
|
+
# Allows manipulation of a location, usually from {Window} and {DOM::Document}.
|
4
|
+
#
|
5
|
+
# @see https://developer.mozilla.org/en-US/docs/Web/API/Location
|
6
|
+
class Location
|
7
|
+
include Native
|
8
|
+
|
9
|
+
# Change the location.
|
10
|
+
#
|
11
|
+
# @param url [String, #to_s] the URL to go to
|
12
|
+
def assign(url)
|
13
|
+
`#@native.assign(#{url.to_s})`
|
14
|
+
end
|
15
|
+
|
16
|
+
# Replace the current URL.
|
17
|
+
#
|
18
|
+
# @param url [String, #to_s] the URL to go to
|
19
|
+
def replace(url)
|
20
|
+
`#@native.replace(#{url.to_s})`
|
21
|
+
end
|
22
|
+
|
23
|
+
# Reload the page.
|
24
|
+
#
|
25
|
+
# @param force [Boolean] whether to force the reload
|
26
|
+
def reload(force = false)
|
27
|
+
`#@native.reload(force)`
|
28
|
+
end
|
29
|
+
|
30
|
+
# Convert the location to a string.
|
31
|
+
def to_s
|
32
|
+
`#@native.toString()`
|
33
|
+
end
|
34
|
+
|
35
|
+
# @!attribute fragment
|
36
|
+
# @return [String] the hash fragment of the location URI
|
37
|
+
alias_native :fragment, :hash
|
38
|
+
alias_native :fragment=, :hash=
|
39
|
+
|
40
|
+
# @!attribute host
|
41
|
+
# @return [String] the host part of the location URI
|
42
|
+
alias_native :host
|
43
|
+
alias_native :host=
|
44
|
+
|
45
|
+
# @!attribute uri
|
46
|
+
# @return [String] the whole location URI
|
47
|
+
alias_native :uri, :href
|
48
|
+
alias_native :uri=, :href=
|
49
|
+
|
50
|
+
# @!attribute path
|
51
|
+
# @return [String] the path part of the location URI
|
52
|
+
alias_native :path, :pathname
|
53
|
+
alias_native :path=, :pathname=
|
54
|
+
|
55
|
+
# @!attribute port
|
56
|
+
# @return [Integer] the port part of the location URI
|
57
|
+
alias_native :port
|
58
|
+
alias_native :port=
|
59
|
+
|
60
|
+
# @!attribute scheme
|
61
|
+
# @return [String] the scheme part of the location URI
|
62
|
+
alias_native :scheme, :protocol
|
63
|
+
alias_native :scheme=, :protocol=
|
64
|
+
|
65
|
+
# @!attribute query
|
66
|
+
# @return [String] the query part of the location URI
|
67
|
+
alias_native :query, :search
|
68
|
+
alias_native :query=, :search=
|
69
|
+
end
|
70
|
+
|
71
|
+
class Window
|
72
|
+
# @!attribute [r] location
|
73
|
+
# @return [Location] the location for the window
|
74
|
+
def location
|
75
|
+
Location.new(`#@native.location`) if `#@native.location`
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class DOM::Document < DOM::Element
|
80
|
+
# @!attribute [r] location
|
81
|
+
# @return [Location] the location for the document
|
82
|
+
def location
|
83
|
+
Location.new(`#@native.location`) if `#@native.location`
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|