diamonds 0.1.5
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 +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
|