opal-browser 0.1.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +11 -0
  5. data/README.md +106 -0
  6. data/Rakefile +5 -0
  7. data/config.ru +63 -0
  8. data/lib/opal/browser.rb +4 -0
  9. data/opal-browser.gemspec +23 -0
  10. data/opal/browser.rb +10 -0
  11. data/opal/browser/animation_frame.rb +29 -0
  12. data/opal/browser/canvas.rb +277 -0
  13. data/opal/browser/canvas/data.rb +73 -0
  14. data/opal/browser/canvas/gradient.rb +37 -0
  15. data/opal/browser/canvas/style.rb +123 -0
  16. data/opal/browser/canvas/text.rb +55 -0
  17. data/opal/browser/compatibility.rb +59 -0
  18. data/opal/browser/compatibility/animation_frame.rb +93 -0
  19. data/opal/browser/compatibility/dom/document/window.rb +15 -0
  20. data/opal/browser/compatibility/dom/element/css.rb +15 -0
  21. data/opal/browser/compatibility/dom/element/matches.rb +31 -0
  22. data/opal/browser/compatibility/dom/element/offset.rb +20 -0
  23. data/opal/browser/compatibility/dom/element/scroll.rb +25 -0
  24. data/opal/browser/compatibility/dom/element/style.rb +15 -0
  25. data/opal/browser/compatibility/dom/mutation_observer.rb +47 -0
  26. data/opal/browser/compatibility/http/request.rb +15 -0
  27. data/opal/browser/compatibility/immediate.rb +107 -0
  28. data/opal/browser/compatibility/window/scroll.rb +27 -0
  29. data/opal/browser/compatibility/window/size.rb +13 -0
  30. data/opal/browser/compatibility/window/view.rb +13 -0
  31. data/opal/browser/console.rb +137 -0
  32. data/opal/browser/cookies.rb +79 -0
  33. data/opal/browser/css.rb +24 -0
  34. data/opal/browser/css/declaration.rb +88 -0
  35. data/opal/browser/css/rule.rb +48 -0
  36. data/opal/browser/css/rule/style.rb +16 -0
  37. data/opal/browser/css/style_sheet.rb +83 -0
  38. data/opal/browser/css/unit.rb +188 -0
  39. data/opal/browser/dom.rb +95 -0
  40. data/opal/browser/dom/attribute.rb +19 -0
  41. data/opal/browser/dom/builder.rb +97 -0
  42. data/opal/browser/dom/cdata.rb +9 -0
  43. data/opal/browser/dom/character_data.rb +37 -0
  44. data/opal/browser/dom/comment.rb +9 -0
  45. data/opal/browser/dom/compatibility.rb +8 -0
  46. data/opal/browser/dom/document.rb +83 -0
  47. data/opal/browser/dom/document_fragment.rb +7 -0
  48. data/opal/browser/dom/element.rb +290 -0
  49. data/opal/browser/dom/element/input.rb +17 -0
  50. data/opal/browser/dom/element/offset.rb +67 -0
  51. data/opal/browser/dom/element/position.rb +37 -0
  52. data/opal/browser/dom/element/scroll.rb +49 -0
  53. data/opal/browser/dom/event.rb +240 -0
  54. data/opal/browser/dom/event/animation.rb +26 -0
  55. data/opal/browser/dom/event/audio_processing.rb +31 -0
  56. data/opal/browser/dom/event/base.rb +207 -0
  57. data/opal/browser/dom/event/before_unload.rb +13 -0
  58. data/opal/browser/dom/event/clipboard.rb +26 -0
  59. data/opal/browser/dom/event/close.rb +35 -0
  60. data/opal/browser/dom/event/composition.rb +38 -0
  61. data/opal/browser/dom/event/custom.rb +30 -0
  62. data/opal/browser/dom/event/device_light.rb +21 -0
  63. data/opal/browser/dom/event/device_motion.rb +38 -0
  64. data/opal/browser/dom/event/device_orientation.rb +36 -0
  65. data/opal/browser/dom/event/device_proximity.rb +31 -0
  66. data/opal/browser/dom/event/drag.rb +113 -0
  67. data/opal/browser/dom/event/focus.rb +23 -0
  68. data/opal/browser/dom/event/gamepad.rb +47 -0
  69. data/opal/browser/dom/event/hash_change.rb +26 -0
  70. data/opal/browser/dom/event/keyboard.rb +93 -0
  71. data/opal/browser/dom/event/message.rb +50 -0
  72. data/opal/browser/dom/event/mouse.rb +253 -0
  73. data/opal/browser/dom/event/page_transition.rb +21 -0
  74. data/opal/browser/dom/event/pop_state.rb +21 -0
  75. data/opal/browser/dom/event/progress.rb +31 -0
  76. data/opal/browser/dom/event/sensor.rb +13 -0
  77. data/opal/browser/dom/event/storage.rb +41 -0
  78. data/opal/browser/dom/event/touch.rb +69 -0
  79. data/opal/browser/dom/event/ui.rb +22 -0
  80. data/opal/browser/dom/event/wheel.rb +49 -0
  81. data/opal/browser/dom/mutation_observer.rb +118 -0
  82. data/opal/browser/dom/node.rb +317 -0
  83. data/opal/browser/dom/node_set.rb +88 -0
  84. data/opal/browser/dom/text.rb +21 -0
  85. data/opal/browser/effects.rb +39 -0
  86. data/opal/browser/event_source.rb +67 -0
  87. data/opal/browser/history.rb +54 -0
  88. data/opal/browser/http.rb +129 -0
  89. data/opal/browser/http/binary.rb +57 -0
  90. data/opal/browser/http/compatibility.rb +1 -0
  91. data/opal/browser/http/headers.rb +90 -0
  92. data/opal/browser/http/parameters.rb +8 -0
  93. data/opal/browser/http/request.rb +331 -0
  94. data/opal/browser/http/response.rb +115 -0
  95. data/opal/browser/immediate.rb +43 -0
  96. data/opal/browser/interval.rb +93 -0
  97. data/opal/browser/location.rb +77 -0
  98. data/opal/browser/navigator.rb +151 -0
  99. data/opal/browser/screen.rb +40 -0
  100. data/opal/browser/socket.rb +115 -0
  101. data/opal/browser/storage.rb +149 -0
  102. data/opal/browser/timeout.rb +60 -0
  103. data/opal/browser/utils.rb +56 -0
  104. data/opal/browser/version.rb +3 -0
  105. data/opal/browser/window.rb +113 -0
  106. data/opal/browser/window/compatibility.rb +3 -0
  107. data/opal/browser/window/scroll.rb +49 -0
  108. data/opal/browser/window/size.rb +35 -0
  109. data/opal/browser/window/view.rb +18 -0
  110. data/spec/dom/builder_spec.rb +69 -0
  111. data/spec/dom/document_spec.rb +40 -0
  112. data/spec/dom/element_spec.rb +46 -0
  113. data/spec/dom/event_spec.rb +127 -0
  114. data/spec/dom/mutation_observer_spec.rb +37 -0
  115. data/spec/dom/node_spec.rb +154 -0
  116. data/spec/dom_spec.rb +13 -0
  117. data/spec/event_source_spec.rb +42 -0
  118. data/spec/history_spec.rb +48 -0
  119. data/spec/http_spec.rb +87 -0
  120. data/spec/immediate_spec.rb +12 -0
  121. data/spec/json2.js +486 -0
  122. data/spec/sizzle.js +5 -0
  123. data/spec/socket_spec.rb +43 -0
  124. data/spec/spec_helper.rb +37 -0
  125. data/spec/storage_spec.rb +26 -0
  126. data/spec/window_spec.rb +10 -0
  127. metadata +240 -0
@@ -0,0 +1,73 @@
1
+ #--
2
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
3
+ # Version 2, December 2004
4
+ #
5
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
6
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
7
+ #
8
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
9
+ #++
10
+
11
+ module Browser; class Canvas
12
+
13
+ class Data
14
+ def self.create(canvas, width, height)
15
+ data = allocate
16
+
17
+ data.instance_eval {
18
+ @canvas = canvas.to_a
19
+ @x = 0
20
+ @y = 0
21
+ @width = width
22
+ @height = height
23
+
24
+ @native = `#{canvas.to_n}.createImageData(width, height)`
25
+ }
26
+
27
+ data
28
+ end
29
+
30
+ include Native
31
+
32
+ attr_reader :x, :y, :width, :height
33
+
34
+ def initialize(canvas, x, y, width, height)
35
+ @canvas = canvas.to_n
36
+ @x = x
37
+ @y = y
38
+ @width = width
39
+ @height = height
40
+
41
+ super(`#@canvas.getImageData(x, y, width, height)`)
42
+ end
43
+
44
+ def length
45
+ `#@native.length`
46
+ end
47
+
48
+ def [](index)
49
+ `#@native.data[index]`
50
+ end
51
+
52
+ def []=(index, value)
53
+ `#@native.data[index] = value`
54
+ end
55
+
56
+ def save(x = nil, y = nil)
57
+ x ||= 0
58
+ y ||= 0
59
+
60
+ `#@canvas.putImageData(#@native, x, y)`
61
+ end
62
+
63
+ def save_to(canvas, x = nil, y = nil)
64
+ x ||= 0
65
+ y ||= 0
66
+
67
+ `#{canvas.to_n}.putImageData(#@native, x, y)`
68
+ end
69
+
70
+ alias size length
71
+ end
72
+
73
+ end; end
@@ -0,0 +1,37 @@
1
+ #--
2
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
3
+ # Version 2, December 2004
4
+ #
5
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
6
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
7
+ #
8
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
9
+ #++
10
+
11
+ module Browser; class Canvas
12
+
13
+ class Gradient
14
+ include Native
15
+
16
+ attr_reader :context
17
+
18
+ def initialize(context, *args, &block)
19
+ @context = context
20
+
21
+ super(case args.length
22
+ when 4 then `#{@context.to_n}.createLinearGradient.apply(self, args)`
23
+ when 6 then `#{@context.to_n}.createRadialGradient.apply(self, args)`
24
+ else raise ArgumentError, "don't know where to dispatch"
25
+ end)
26
+
27
+ instance_eval(&block)
28
+ end
29
+
30
+ def add(position, color)
31
+ `#{@context.to_n}.addColorStop(position, color)`
32
+
33
+ self
34
+ end
35
+ end
36
+
37
+ end; end
@@ -0,0 +1,123 @@
1
+ #--
2
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
3
+ # Version 2, December 2004
4
+ #
5
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
6
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
7
+ #
8
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
9
+ #++
10
+
11
+ module Browser; class Canvas
12
+
13
+ class StyleObject
14
+ include Native
15
+
16
+ attr_reader :context
17
+
18
+ def initialize(context)
19
+ @context = context
20
+
21
+ super(@context.to_n)
22
+ end
23
+ end
24
+
25
+ class Style < StyleObject
26
+ class Line < StyleObject
27
+ attr_reader :width, :cap, :join, :miter_limit
28
+
29
+ def width=(value)
30
+ `#@native.lineWidth = #{@width = value}`
31
+ end
32
+
33
+ def cap=(value)
34
+ `#@native.lineCap = #{@cap = value}`
35
+ end
36
+
37
+ def join=(value)
38
+ `#@native.lineJoin = #{@join = value}`
39
+ end
40
+
41
+ def miter_limit=(value)
42
+ `#@native.miterLimit = #{@miter_limit = value}`
43
+ end
44
+ end
45
+
46
+ class Text < StyleObject
47
+ attr_reader :font, :align, :baseline
48
+
49
+ def font=(value)
50
+ `#@native.font = #{@font = value}`
51
+ end
52
+
53
+ def align=(value)
54
+ `#@native.textAlign = #{@align = value}`
55
+ end
56
+
57
+ def baseline=(value)
58
+ `#@native.textBaseline = #{@baseline = value}`
59
+ end
60
+ end
61
+
62
+ class Image < StyleObject
63
+ attr_reader :smooth
64
+
65
+ alias smooth? smooth
66
+
67
+ def smooth!
68
+ `#@native.mozImageSmoothingEnabled = #{@smooth = true}`
69
+ end
70
+
71
+ def no_smooth!
72
+ `#@native.mozImageSmoothingEnabled = #{@smooth = false}`
73
+ end
74
+ end
75
+
76
+ class Shadow < StyleObject
77
+ attr_reader :offset, :blur, :color
78
+
79
+ def offset=(value)
80
+ `#@native.shadowOffsetX = #{value[:x]}`
81
+ `#@native.shadowOffsetY = #{value[:y]}`
82
+
83
+ @offset = value
84
+ end
85
+
86
+ def blur=(value)
87
+ `#@native.shadowBlur = #{@blur = value}`
88
+ end
89
+
90
+ def color=(value)
91
+ `#@native.shadowColor = #{@color = value}`
92
+ end
93
+ end
94
+
95
+ attr_reader :line, :text, :image, :shadow, :fill, :stroke, :alpha, :composite_operation
96
+
97
+ def initialize(context)
98
+ super(context)
99
+
100
+ @line = Line.new(context)
101
+ @text = Text.new(context)
102
+ @image = Image.new(context)
103
+ @shadow = Shadow.new(context)
104
+ end
105
+
106
+ def fill=(value)
107
+ `#@native.fillStyle = #{(@fill = value).to_n}`
108
+ end
109
+
110
+ def stroke=(value)
111
+ `#@native.strokeStyle = #{(@stroke = value).to_n}`
112
+ end
113
+
114
+ def alpha=(value)
115
+ `#@native.globalAlpha = #{@alpha = value}`
116
+ end
117
+
118
+ def composite_operation=(value)
119
+ `#@native.globalCompositeOperation = #{@composite_operation = value}`
120
+ end
121
+ end
122
+
123
+ end; end
@@ -0,0 +1,55 @@
1
+ #--
2
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
3
+ # Version 2, December 2004
4
+ #
5
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
6
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
7
+ #
8
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
9
+ #++
10
+
11
+ module Browser; class Canvas
12
+
13
+ class Text
14
+ include Native
15
+
16
+ attr_reader :context
17
+
18
+ def initialize(context)
19
+ @context = context
20
+
21
+ super(@context.to_n)
22
+ end
23
+
24
+ def measure(text)
25
+ `#@native.measureText(text)`
26
+ end
27
+
28
+ def fill(text, x = nil, y = nil, max_width = nil)
29
+ x ||= 0
30
+ y ||= 0
31
+
32
+ if max_width
33
+ `#@native.fillText(text, x, y, max_width)`
34
+ else
35
+ `#@native.fillText(text, x, y)`
36
+ end
37
+
38
+ @context
39
+ end
40
+
41
+ def stroke(text, x = nil, y = nil, max_width = nil)
42
+ x ||= 0
43
+ y ||= 0
44
+
45
+ if max_width
46
+ `#@native.strokeText(text, x, y, max_width)`
47
+ else
48
+ `#@native.strokeText(text, x, y)`
49
+ end
50
+
51
+ @context
52
+ end
53
+ end
54
+
55
+ end; end
@@ -0,0 +1,59 @@
1
+ BROWSER_ENGINE = `/MSIE|WebKit|Presto|Gecko/.exec(navigator.userAgent)[0]`.downcase rescue :unknown
2
+
3
+ module Browser
4
+
5
+ module Compatibility
6
+ def self.sizzle?
7
+ defined?(`window.Sizzle`)
8
+ end
9
+
10
+ # FIXME: v
11
+ # def self.respond_to?(parent = `window`, object, method)
12
+ # ^
13
+ def self.respond_to?(*args)
14
+ if args.length == 2
15
+ parent = `window`
16
+ object, method = args
17
+ else
18
+ parent, object, method = args
19
+ end
20
+
21
+ %x{
22
+ if (!#{parent}) {
23
+ return false;
24
+ }
25
+
26
+ var klass = #{parent}[#{object}];
27
+
28
+ if (!klass) {
29
+ return false;
30
+ }
31
+
32
+ return typeof(klass.prototype[#{method}]) === "function";
33
+ }
34
+ end
35
+
36
+ # FIXME: v
37
+ # def self.has?(parent = `window`, name)
38
+ # ^
39
+ def self.has?(*args)
40
+ if args.length == 1
41
+ parent = `window`
42
+ name, = args
43
+ else
44
+ parent, name = args
45
+ end
46
+
47
+ %x{
48
+ if (!#{parent}) {
49
+ return false;
50
+ }
51
+
52
+ return #{parent}[#{name}] != null;
53
+ }
54
+ end
55
+ end
56
+
57
+ C = Compatibility
58
+
59
+ end
@@ -0,0 +1,93 @@
1
+ module Browser
2
+
3
+ class Compatibility
4
+ def self.request_animation?(prefix = nil)
5
+ if prefix
6
+ has?("#{prefix}RequestAnimationFrame")
7
+ else
8
+ has?(:requestAnimationFrame)
9
+ end
10
+ end
11
+
12
+ def self.cancel_animation?(prefix = nil)
13
+ if prefix
14
+ has?("#{prefix}CancelAnimationFrame")
15
+ else
16
+ has?(:cancelAnimationFrame)
17
+ end
18
+ end
19
+
20
+ def self.cancel_request_animation?(prefix = nil)
21
+ if prefix
22
+ has?("#{prefix}CancelRequestAnimationFrame")
23
+ else
24
+ has?(:cancelAnimationFrame)
25
+ end
26
+ end
27
+ end
28
+
29
+ class AnimationFrame
30
+ if C.request_animation?
31
+ def request(block)
32
+ `#@native.requestAnimationFrame(#{block.to_n})`
33
+ end
34
+ elsif C.request_animation? :webkit
35
+ def request(block)
36
+ `#@native.webkitRequestAnimationFrame(#{block.to_n})`
37
+ end
38
+ elsif C.request_animation? :moz
39
+ def request(block)
40
+ `#@native.mozRequestAnimationFrame(#{block.to_n})`
41
+ end
42
+ elsif C.request_animation? :o
43
+ def request(block)
44
+ `#@native.oRequestAnimationFrame(#{block.to_n})`
45
+ end
46
+ elsif C.request_animation? :ms
47
+ def request(block)
48
+ `#@native.msRequestAnimationFrame(#{block.to_n})`
49
+ end
50
+ end
51
+
52
+ if C.cancel_animation?
53
+ def cancel
54
+ `#@native.cancelAnimationFrame(#@id)`
55
+ end
56
+ else
57
+ if C.cancel_animation? :webkit
58
+ def cancel
59
+ `#@native.webkitCancelAnimationFrame(#@id)`
60
+ end
61
+ elsif C.cancel_request_animation? :webkit
62
+ def cancel
63
+ `#@native.webkitCancelRequestAnimationFrame(#@id)`
64
+ end
65
+ elsif C.cancel_animation? :moz
66
+ def cancel
67
+ `#@native.mozCancelAnimationFrame(#@id)`
68
+ end
69
+ elsif C.cancel_request_animation? :moz
70
+ def cancel
71
+ `#@native.mozCancelRequestAnimationFrame(#@id)`
72
+ end
73
+ elsif C.cancel_animation? :o
74
+ def cancel
75
+ `#@native.oCancelAnimationFrame(#@id)`
76
+ end
77
+ elsif C.cancel_request_animation? :o
78
+ def cancel
79
+ `#@native.oCancelRequestAnimationFrame(#@id)`
80
+ end
81
+ elsif C.cancel_animation? :ms
82
+ def cancel
83
+ `#@native.msCancelAnimationFrame(#@id)`
84
+ end
85
+ elsif C.cancel_request_animation? :ms
86
+ def cancel
87
+ `#@native.msCancelRequestAnimationFrame(#@id)`
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ end