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.
Files changed (180) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +36 -0
  3. data/lib/diamonds.rb +74 -0
  4. data/lib/diamonds/Gemfile +28 -0
  5. data/lib/diamonds/README.md +254 -0
  6. data/lib/diamonds/Rakefile +5 -0
  7. data/lib/diamonds/apps/application.rb +15 -0
  8. data/lib/diamonds/apps/library.rb +321 -0
  9. data/lib/diamonds/apps/user_app.rb +5 -0
  10. data/lib/diamonds/config.ru +98 -0
  11. data/lib/diamonds/db/mysiteDB Back.sqlite3 +0 -0
  12. data/lib/diamonds/db/mysiteDB.sqlite3 +0 -0
  13. data/lib/diamonds/gems/auto_launch_browser.rb +22 -0
  14. data/lib/diamonds/gems/io.rb +146 -0
  15. data/lib/diamonds/gems/ruby_to_js.rb +173 -0
  16. data/lib/diamonds/gems/server_utils.rb +96 -0
  17. data/lib/diamonds/lib/opal-browser.rb +1 -0
  18. data/lib/diamonds/lib/opal/browser.rb +4 -0
  19. data/lib/diamonds/opal-browser.gemspec +21 -0
  20. data/lib/diamonds/opal/browser.rb +11 -0
  21. data/lib/diamonds/opal/browser/animation_frame.rb +111 -0
  22. data/lib/diamonds/opal/browser/canvas.rb +321 -0
  23. data/lib/diamonds/opal/browser/canvas/data.rb +63 -0
  24. data/lib/diamonds/opal/browser/canvas/gradient.rb +27 -0
  25. data/lib/diamonds/opal/browser/canvas/style.rb +113 -0
  26. data/lib/diamonds/opal/browser/canvas/text.rb +45 -0
  27. data/lib/diamonds/opal/browser/console.rb +103 -0
  28. data/lib/diamonds/opal/browser/cookies.rb +133 -0
  29. data/lib/diamonds/opal/browser/css.rb +24 -0
  30. data/lib/diamonds/opal/browser/css/declaration.rb +83 -0
  31. data/lib/diamonds/opal/browser/css/rule.rb +48 -0
  32. data/lib/diamonds/opal/browser/css/rule/style.rb +16 -0
  33. data/lib/diamonds/opal/browser/css/style_sheet.rb +83 -0
  34. data/lib/diamonds/opal/browser/css/unit.rb +188 -0
  35. data/lib/diamonds/opal/browser/database/sql.rb +194 -0
  36. data/lib/diamonds/opal/browser/delay.rb +78 -0
  37. data/lib/diamonds/opal/browser/dom.rb +84 -0
  38. data/lib/diamonds/opal/browser/dom/attribute.rb +26 -0
  39. data/lib/diamonds/opal/browser/dom/builder.rb +88 -0
  40. data/lib/diamonds/opal/browser/dom/cdata.rb +9 -0
  41. data/lib/diamonds/opal/browser/dom/character_data.rb +73 -0
  42. data/lib/diamonds/opal/browser/dom/comment.rb +9 -0
  43. data/lib/diamonds/opal/browser/dom/document.rb +149 -0
  44. data/lib/diamonds/opal/browser/dom/document_fragment.rb +7 -0
  45. data/lib/diamonds/opal/browser/dom/element.rb +474 -0
  46. data/lib/diamonds/opal/browser/dom/element/attributes.rb +87 -0
  47. data/lib/diamonds/opal/browser/dom/element/data.rb +67 -0
  48. data/lib/diamonds/opal/browser/dom/element/image.rb +23 -0
  49. data/lib/diamonds/opal/browser/dom/element/input.rb +28 -0
  50. data/lib/diamonds/opal/browser/dom/element/offset.rb +89 -0
  51. data/lib/diamonds/opal/browser/dom/element/position.rb +46 -0
  52. data/lib/diamonds/opal/browser/dom/element/scroll.rb +136 -0
  53. data/lib/diamonds/opal/browser/dom/element/select.rb +36 -0
  54. data/lib/diamonds/opal/browser/dom/element/size.rb +34 -0
  55. data/lib/diamonds/opal/browser/dom/element/template.rb +9 -0
  56. data/lib/diamonds/opal/browser/dom/element/textarea.rb +24 -0
  57. data/lib/diamonds/opal/browser/dom/mutation_observer.rb +178 -0
  58. data/lib/diamonds/opal/browser/dom/node.rb +464 -0
  59. data/lib/diamonds/opal/browser/dom/node_set.rb +110 -0
  60. data/lib/diamonds/opal/browser/dom/text.rb +36 -0
  61. data/lib/diamonds/opal/browser/effects.rb +50 -0
  62. data/lib/diamonds/opal/browser/event.rb +253 -0
  63. data/lib/diamonds/opal/browser/event/animation.rb +38 -0
  64. data/lib/diamonds/opal/browser/event/audio_processing.rb +33 -0
  65. data/lib/diamonds/opal/browser/event/base.rb +430 -0
  66. data/lib/diamonds/opal/browser/event/before_unload.rb +15 -0
  67. data/lib/diamonds/opal/browser/event/clipboard.rb +28 -0
  68. data/lib/diamonds/opal/browser/event/close.rb +47 -0
  69. data/lib/diamonds/opal/browser/event/composition.rb +50 -0
  70. data/lib/diamonds/opal/browser/event/custom.rb +65 -0
  71. data/lib/diamonds/opal/browser/event/device_light.rb +23 -0
  72. data/lib/diamonds/opal/browser/event/device_motion.rb +51 -0
  73. data/lib/diamonds/opal/browser/event/device_orientation.rb +48 -0
  74. data/lib/diamonds/opal/browser/event/device_proximity.rb +33 -0
  75. data/lib/diamonds/opal/browser/event/drag.rb +119 -0
  76. data/lib/diamonds/opal/browser/event/focus.rb +39 -0
  77. data/lib/diamonds/opal/browser/event/gamepad.rb +60 -0
  78. data/lib/diamonds/opal/browser/event/hash_change.rb +28 -0
  79. data/lib/diamonds/opal/browser/event/keyboard.rb +115 -0
  80. data/lib/diamonds/opal/browser/event/message.rb +70 -0
  81. data/lib/diamonds/opal/browser/event/mouse.rb +254 -0
  82. data/lib/diamonds/opal/browser/event/page_transition.rb +23 -0
  83. data/lib/diamonds/opal/browser/event/pop_state.rb +33 -0
  84. data/lib/diamonds/opal/browser/event/progress.rb +43 -0
  85. data/lib/diamonds/opal/browser/event/sensor.rb +15 -0
  86. data/lib/diamonds/opal/browser/event/storage.rb +43 -0
  87. data/lib/diamonds/opal/browser/event/touch.rb +60 -0
  88. data/lib/diamonds/opal/browser/event/ui.rb +38 -0
  89. data/lib/diamonds/opal/browser/event/wheel.rb +49 -0
  90. data/lib/diamonds/opal/browser/event_source.rb +70 -0
  91. data/lib/diamonds/opal/browser/history.rb +90 -0
  92. data/lib/diamonds/opal/browser/http.rb +169 -0
  93. data/lib/diamonds/opal/browser/http/binary.rb +58 -0
  94. data/lib/diamonds/opal/browser/http/headers.rb +109 -0
  95. data/lib/diamonds/opal/browser/http/request.rb +344 -0
  96. data/lib/diamonds/opal/browser/http/response.rb +115 -0
  97. data/lib/diamonds/opal/browser/immediate.rb +163 -0
  98. data/lib/diamonds/opal/browser/interval.rb +111 -0
  99. data/lib/diamonds/opal/browser/location.rb +87 -0
  100. data/lib/diamonds/opal/browser/navigator.rb +173 -0
  101. data/lib/diamonds/opal/browser/screen.rb +66 -0
  102. data/lib/diamonds/opal/browser/socket.rb +123 -0
  103. data/lib/diamonds/opal/browser/storage.rb +252 -0
  104. data/lib/diamonds/opal/browser/support.rb +287 -0
  105. data/lib/diamonds/opal/browser/utils.rb +74 -0
  106. data/lib/diamonds/opal/browser/version.rb +3 -0
  107. data/lib/diamonds/opal/browser/window.rb +120 -0
  108. data/lib/diamonds/opal/browser/window/scroll.rb +59 -0
  109. data/lib/diamonds/opal/browser/window/size.rb +59 -0
  110. data/lib/diamonds/opal/browser/window/view.rb +36 -0
  111. data/lib/diamonds/opal/opal-browser.rb +1 -0
  112. data/lib/diamonds/public/__OPAL_SOURCE_MAPS__/application.map +0 -0
  113. data/lib/diamonds/public/javascripts/font-awesome/HELP-US-OUT.txt +7 -0
  114. data/lib/diamonds/public/javascripts/font-awesome/css/font-awesome.css +2026 -0
  115. data/lib/diamonds/public/javascripts/font-awesome/css/font-awesome.min.css +1 -0
  116. data/lib/diamonds/public/javascripts/font-awesome/fonts/FontAwesome.otf +0 -0
  117. data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  118. data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.svg +640 -0
  119. data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  120. data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  121. data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  122. data/lib/diamonds/public/javascripts/font-awesome/less/animated.less +34 -0
  123. data/lib/diamonds/public/javascripts/font-awesome/less/bordered-pulled.less +25 -0
  124. data/lib/diamonds/public/javascripts/font-awesome/less/core.less +12 -0
  125. data/lib/diamonds/public/javascripts/font-awesome/less/fixed-width.less +6 -0
  126. data/lib/diamonds/public/javascripts/font-awesome/less/font-awesome.less +17 -0
  127. data/lib/diamonds/public/javascripts/font-awesome/less/icons.less +677 -0
  128. data/lib/diamonds/public/javascripts/font-awesome/less/larger.less +13 -0
  129. data/lib/diamonds/public/javascripts/font-awesome/less/list.less +19 -0
  130. data/lib/diamonds/public/javascripts/font-awesome/less/mixins.less +26 -0
  131. data/lib/diamonds/public/javascripts/font-awesome/less/path.less +15 -0
  132. data/lib/diamonds/public/javascripts/font-awesome/less/rotated-flipped.less +20 -0
  133. data/lib/diamonds/public/javascripts/font-awesome/less/stacked.less +20 -0
  134. data/lib/diamonds/public/javascripts/font-awesome/less/variables.less +688 -0
  135. data/lib/diamonds/public/javascripts/font-awesome/scss/_animated.scss +34 -0
  136. data/lib/diamonds/public/javascripts/font-awesome/scss/_bordered-pulled.scss +25 -0
  137. data/lib/diamonds/public/javascripts/font-awesome/scss/_core.scss +12 -0
  138. data/lib/diamonds/public/javascripts/font-awesome/scss/_fixed-width.scss +6 -0
  139. data/lib/diamonds/public/javascripts/font-awesome/scss/_icons.scss +677 -0
  140. data/lib/diamonds/public/javascripts/font-awesome/scss/_larger.scss +13 -0
  141. data/lib/diamonds/public/javascripts/font-awesome/scss/_list.scss +19 -0
  142. data/lib/diamonds/public/javascripts/font-awesome/scss/_mixins.scss +26 -0
  143. data/lib/diamonds/public/javascripts/font-awesome/scss/_path.scss +15 -0
  144. data/lib/diamonds/public/javascripts/font-awesome/scss/_rotated-flipped.scss +20 -0
  145. data/lib/diamonds/public/javascripts/font-awesome/scss/_stacked.scss +20 -0
  146. data/lib/diamonds/public/javascripts/font-awesome/scss/_variables.scss +688 -0
  147. data/lib/diamonds/public/javascripts/font-awesome/scss/font-awesome.scss +17 -0
  148. data/lib/diamonds/public/javascripts/jquery-2.1.4.min.js +4 -0
  149. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  150. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  151. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
  152. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  153. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  154. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  155. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  156. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  157. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  158. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  159. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
  160. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
  161. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
  162. data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  163. data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.min.css +7 -0
  164. data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.min.js +13 -0
  165. data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.structure.min.css +5 -0
  166. data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.theme.min.css +5 -0
  167. data/lib/diamonds/public/javascripts/jquery.js +4 -0
  168. data/lib/diamonds/public/javascripts/jquery.ui.touch-punch.min.js +11 -0
  169. 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
  170. data/lib/diamonds/public/javascripts/standalone.js +2316 -0
  171. data/lib/diamonds/public/javascripts/standalone.min.js +1 -0
  172. data/lib/diamonds/public/javascripts/wysiwyg-editor.min.css +1 -0
  173. data/lib/diamonds/public/javascripts/wysiwyg-editor.min.js +1 -0
  174. data/lib/diamonds/public/javascripts/wysiwyg.min.js +1 -0
  175. data/lib/diamonds/user_app/main.rb +45 -0
  176. data/lib/diamonds/version.rb +3 -0
  177. data/lib/diamonds/views/index.erb +35 -0
  178. data/lib/diamonds/views/javascripts/jeezs_editor.js.erb +365 -0
  179. data/lib/diamonds/views/stylesheets/main.css.erb +244 -0
  180. 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