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,87 @@
1
+ module Browser; module DOM; class Element < Node
2
+
3
+ class Attributes
4
+ attr_reader :namespace
5
+
6
+ def initialize(element, options)
7
+ @element = element
8
+ @native = element.to_n
9
+ @namespace = options[:namespace]
10
+ end
11
+
12
+ if Browser.supports?('Element.className') || Browser.supports?('Element.htmlFor')
13
+ def [](name, options = {})
14
+ if name == :class && Browser.supports?('Element.className')
15
+ name = :className
16
+ elsif name == :for && Browser.supports?('Element.htmlFor')
17
+ name = :htmlFor
18
+ end
19
+
20
+ if namespace = options[:namespace] || @namespace
21
+ `#@native.getAttributeNS(#{namespace.to_s}, #{name.to_s}) || nil`
22
+ else
23
+ `#@native.getAttribute(#{name.to_s}) || nil`
24
+ end
25
+ end
26
+
27
+ def []=(name, value, options = {})
28
+ if name == :class && Browser.supports?('Element.className')
29
+ name = :className
30
+ elsif name == :for && Browser.supports?('Element.htmlFor')
31
+ name = :htmlFor
32
+ end
33
+
34
+ if namespace = options[:namespace] || @namespace
35
+ `#@native.setAttributeNS(#{namespace.to_s}, #{name.to_s}, #{value})`
36
+ else
37
+ `#@native.setAttribute(#{name.to_s}, #{value.to_s})`
38
+ end
39
+ end
40
+ else
41
+ def [](name, options = {})
42
+ if namespace = options[:namespace] || @namespace
43
+ `#@native.getAttributeNS(#{namespace.to_s}, #{name.to_s}) || nil`
44
+ else
45
+ `#@native.getAttribute(#{name.to_s}) || nil`
46
+ end
47
+ end
48
+
49
+ def []=(name, value, options = {})
50
+ if namespace = options[:namespace] || @namespace
51
+ `#@native.setAttributeNS(#{namespace.to_s}, #{name.to_s}, #{value})`
52
+ else
53
+ `#@native.setAttribute(#{name.to_s}, #{value.to_s})`
54
+ end
55
+ end
56
+ end
57
+
58
+ include Enumerable
59
+
60
+ def each(&block)
61
+ return enum_for :each unless block_given?
62
+
63
+ @element.attribute_nodes.each {|attr|
64
+ yield attr.name, attr.value
65
+ }
66
+
67
+ self
68
+ end
69
+
70
+ alias get []
71
+
72
+ def has_key?(name)
73
+ !!self[name]
74
+ end
75
+
76
+ def merge!(hash)
77
+ hash.each {|name, value|
78
+ self[name] = value
79
+ }
80
+
81
+ self
82
+ end
83
+
84
+ alias set []=
85
+ end
86
+
87
+ end; end; end
@@ -0,0 +1,67 @@
1
+ module Browser; module DOM; class Element < Node
2
+
3
+ class Data
4
+ attr_reader :element
5
+
6
+ def initialize(element)
7
+ @element = element
8
+ @native = element.to_n
9
+
10
+ unless defined?(`#@native.$data`)
11
+ `#@native.$data = {}`
12
+ end
13
+ end
14
+
15
+ include Enumerable
16
+
17
+ def each(&block)
18
+ return enum_for :each unless block
19
+
20
+ %x{
21
+ var data = #@native.$data;
22
+
23
+ for (var key in data) {
24
+ #{block.call `key`, `data[key]`};
25
+ }
26
+ }
27
+
28
+ @element.attributes.each {|name, value|
29
+ if name =~ /^data-(.*)$/
30
+ block.call $1, value
31
+ end
32
+ }
33
+
34
+ self
35
+ end
36
+
37
+ def assign(data)
38
+ data.each {|name, value|
39
+ `#@native.$data[name] = value`
40
+ }
41
+
42
+ self
43
+ end
44
+
45
+ def [](name)
46
+ if data = @element["data-#{name}"]
47
+ return data
48
+ end
49
+
50
+ %x{
51
+ var value = #@native.$data[name];
52
+
53
+ if (value === undefined) {
54
+ return nil;
55
+ }
56
+ else {
57
+ return value;
58
+ }
59
+ }
60
+ end
61
+
62
+ def []=(name, value)
63
+ `#@native.$data[name] = value`
64
+ end
65
+ end
66
+
67
+ end; end; end
@@ -0,0 +1,23 @@
1
+ module Browser; module DOM; class Element < Node
2
+
3
+ class Image < Element
4
+ def complete?
5
+ `#@native.complete`
6
+ end
7
+
8
+ def cross?
9
+ `#@native.crossOrigin`
10
+ end
11
+
12
+ def height
13
+ `#@native.naturalHeight`
14
+ end
15
+
16
+ def width
17
+ `#@native.naturalWidth`
18
+ end
19
+ end
20
+
21
+ Img = Image
22
+
23
+ end; end; end
@@ -0,0 +1,28 @@
1
+ module Browser; module DOM; class Element < Node
2
+
3
+ class Input < Element
4
+ def value
5
+ %x{
6
+ if (#@native.value == "") {
7
+ return nil;
8
+ }
9
+ else {
10
+ return #@native.value;
11
+ }
12
+ }
13
+ end
14
+
15
+ def value=(value)
16
+ `#@native.value = #{value}`
17
+ end
18
+
19
+ def checked?
20
+ `#@native.checked`
21
+ end
22
+
23
+ def clear
24
+ `#@native.value = ''`
25
+ end
26
+ end
27
+
28
+ end; end; end
@@ -0,0 +1,89 @@
1
+ module Browser; module DOM; class Element < Node
2
+
3
+ class Offset
4
+ attr_reader :element
5
+
6
+ # @private
7
+ def initialize(element)
8
+ @element = element
9
+ @native = element.to_n
10
+ end
11
+
12
+ def parent
13
+ DOM(`#@native.offsetParent || #{@element.document.root.to_n}`)
14
+ end
15
+
16
+ # @!attribute x
17
+ # @return [Integer]
18
+ def x
19
+ get.x
20
+ end
21
+
22
+ def x=(value)
23
+ set value, nil
24
+ end
25
+
26
+ # @!attribute y
27
+ # @return [Integer]
28
+ def y
29
+ get.y
30
+ end
31
+
32
+ def y=(value)
33
+ set nil, value
34
+ end
35
+
36
+ if Browser.supports? 'Element.getBoundingClientRect'
37
+ def get
38
+ doc = @element.document
39
+ root = doc.root.to_n
40
+ win = doc.window.to_n
41
+
42
+ %x{
43
+ var box = #@native.getBoundingClientRect(),
44
+ y = box.top + (#{win}.pageYOffset || #{root}.scrollTop) - (#{root}.clientTop || 0),
45
+ x = box.left + (#{win}.pageXOffset || #{root}.scrollLeft) - (#{root}.clientLeft || 0);
46
+ }
47
+
48
+ Browser::Position.new(`x`, `y`)
49
+ end
50
+ else
51
+ def get
52
+ doc = document
53
+ root = doc.root.to_n
54
+ win = doc.window.to_n
55
+
56
+ %x{
57
+ var y = (#{win}.pageYOffset || #{root}.scrollTop) - (#{root}.clientTop || 0),
58
+ x = (#{win}.pageXOffset || #{root}.scrollLeft) - (#{root}.clientLeft || 0);
59
+ }
60
+
61
+ Browser::Position.new(`x`, `y`)
62
+ end
63
+ end
64
+
65
+ def set(*value)
66
+ position = @element.style![:position]
67
+
68
+ if position == :static
69
+ @element.style[:position] = :relative
70
+ end
71
+
72
+ offset = get
73
+ top = @element.style![:top].to_u
74
+ left = @element.style![:left].to_u
75
+
76
+ if Browser::Position === value.first
77
+ x, y = value.first.x, value.first.y
78
+ elsif Hash === value.first
79
+ x, y = value.first[:x], value.first[:y]
80
+ else
81
+ x, y = value
82
+ end
83
+
84
+ @element.style[:left] = (x.px - offset.x) + left if x
85
+ @element.style[:top] = (y.px - offset.y) + top if y
86
+ end
87
+ end
88
+
89
+ end; end; end
@@ -0,0 +1,46 @@
1
+ module Browser; module DOM; class Element < Node
2
+
3
+ class Position
4
+ attr_reader :element
5
+
6
+ # @private
7
+ def initialize(element)
8
+ @element = element
9
+ @native = element.to_n
10
+ end
11
+
12
+ # @private
13
+ def get
14
+ offset = @element.offset
15
+ position = offset.get
16
+ parent = offset.parent
17
+ parent_offset = Browser::Position.new(0, 0)
18
+
19
+ if @element.style[:position] == :fixed
20
+ unless parent =~ :html
21
+ parent_offset = parent.offset
22
+ end
23
+
24
+ parent_offset.x += parent.style['border-top-width'].to_i
25
+ parent_offset.y += parent.style['border-left-width'].to_i
26
+ end
27
+
28
+ Browser::Position.new(
29
+ position.x - parent_offset.x - @element.style['margin-left'].to_i,
30
+ position.y - parent_offset.y - @element.style['margin-top'].to_i)
31
+ end
32
+
33
+ # @!attribute [r] x
34
+ # @return [Integer] the position of the element on the x axis
35
+ def x
36
+ get.x
37
+ end
38
+
39
+ # @!attribute [r] y
40
+ # @return [Integer] the position of the element on the y axis
41
+ def y
42
+ get.y
43
+ end
44
+ end
45
+
46
+ end; end; end
@@ -0,0 +1,136 @@
1
+ module Browser; module DOM; class Element < Node
2
+
3
+ class Scroll
4
+ attr_reader :element
5
+
6
+ # @private
7
+ def initialize(element)
8
+ @element = element
9
+ @native = element.to_n
10
+ end
11
+
12
+ if Browser.supports? 'Element.scroll'
13
+ def to(*args)
14
+ if Hash === args.first
15
+ x = args.first[:x] || self.x
16
+ y = args.first[:y] || self.y
17
+ else
18
+ x, y = args
19
+ end
20
+
21
+ `#@native.scrollTop = #{y}`
22
+ `#@native.scrollLeft = #{x}`
23
+ end
24
+
25
+ def position
26
+ Browser::Position.new(`#@native.scrollLeft`, `#@native.scrollTop`)
27
+ end
28
+ elsif Browser.supports? 'Element.pageOffset'
29
+ def to(*args)
30
+ if Hash === args.first
31
+ x = args.first[:x] || self.x
32
+ y = args.first[:y] || self.y
33
+ else
34
+ x, y = args
35
+ end
36
+
37
+ `#@native.pageYOffset = #{y}`
38
+ `#@native.pageXOffset = #{x}`
39
+ end
40
+
41
+ def position
42
+ Position.new(`#@native.pageXOffset`, `#@native.pageYOffset`)
43
+ end
44
+ else
45
+ # @overload to(x, y)
46
+ #
47
+ # Scroll to the given x and y.
48
+ #
49
+ # @param x [Integer] scroll to x on the x axis
50
+ # @param y [Integer] scroll to y on the y axis
51
+ #
52
+ # @overload to(hash)
53
+ #
54
+ # Scroll to the given x and y.
55
+ #
56
+ # @param hash [Hash] the descriptor
57
+ #
58
+ # @option hash [Integer] :x scroll to x on the x axis
59
+ # @option hash [Integer] :y scroll to y on the y axis
60
+ def to(*args)
61
+ raise NotImplementedError, 'scroll on element unsupported'
62
+ end
63
+
64
+ def position
65
+ raise NotImplementedError, 'scroll on element unsupported'
66
+ end
67
+ end
68
+
69
+ # @!attribute [r] x
70
+ # @return [Integer] the scroll position on the x axis
71
+ def x
72
+ position.x
73
+ end
74
+
75
+ # @!attribute [r] y
76
+ # @return [Integer] the scroll position on the y axis
77
+ def y
78
+ position.y
79
+ end
80
+
81
+ # @!attribute [r] height
82
+ # @return [Integer] the height of the scroll
83
+ def height
84
+ `#@native.scrollHeight`
85
+ end
86
+
87
+ # @!attribute [r] width
88
+ # @return [Integer] the width of the scroll
89
+ def width
90
+ `#@native.scrollWidth`
91
+ end
92
+
93
+ # @overload by(x, y)
94
+ #
95
+ # Scroll by the given x and y.
96
+ #
97
+ # @param x [Integer] scroll by x on the x axis
98
+ # @param y [Integer] scroll by y on the y axis
99
+ #
100
+ # @overload by(hash)
101
+ #
102
+ # Scroll by the given x and y.
103
+ #
104
+ # @param hash [Hash] the descriptor
105
+ #
106
+ # @option hash [Integer] :x scroll by x on the x axis
107
+ # @option hash [Integer] :y scroll by y on the y axis
108
+ def by(*args)
109
+ if Hash === args.first
110
+ x = args.first[:x] || 0
111
+ y = args.first[:y] || 0
112
+ else
113
+ x, y = args
114
+ end
115
+
116
+ `#@native.scrollBy(#{x}, #{y})`
117
+
118
+ self
119
+ end
120
+
121
+ if Browser.supports? 'Element.scrollIntoViewIfNeeded'
122
+ def to(align = true)
123
+ `#@native.scrollIntoViewIfNeeded(align)`
124
+ end
125
+ else
126
+ def to(align = true)
127
+ raise NotImplementedError
128
+ end
129
+ end
130
+
131
+ def to!(align = true)
132
+ `#@native.scrollIntoView(align)`
133
+ end
134
+ end
135
+
136
+ end; end; end