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,63 @@
|
|
|
1
|
+
module Browser; class Canvas
|
|
2
|
+
|
|
3
|
+
class Data
|
|
4
|
+
def self.create(canvas, width, height)
|
|
5
|
+
data = allocate
|
|
6
|
+
|
|
7
|
+
data.instance_eval {
|
|
8
|
+
@canvas = canvas.to_a
|
|
9
|
+
@x = 0
|
|
10
|
+
@y = 0
|
|
11
|
+
@width = width
|
|
12
|
+
@height = height
|
|
13
|
+
|
|
14
|
+
@native = `#{canvas.to_n}.createImageData(width, height)`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
data
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
include Native
|
|
21
|
+
|
|
22
|
+
attr_reader :x, :y, :width, :height
|
|
23
|
+
|
|
24
|
+
def initialize(canvas, x, y, width, height)
|
|
25
|
+
@canvas = canvas.to_n
|
|
26
|
+
@x = x
|
|
27
|
+
@y = y
|
|
28
|
+
@width = width
|
|
29
|
+
@height = height
|
|
30
|
+
|
|
31
|
+
super(`#@canvas.getImageData(x, y, width, height)`)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def length
|
|
35
|
+
`#@native.data.length`
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def [](index)
|
|
39
|
+
`#@native.data[index]`
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def []=(index, value)
|
|
43
|
+
`#@native.data[index] = value`
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def save(x = nil, y = nil)
|
|
47
|
+
x ||= 0
|
|
48
|
+
y ||= 0
|
|
49
|
+
|
|
50
|
+
`#@canvas.putImageData(#@native, x, y)`
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def save_to(canvas, x = nil, y = nil)
|
|
54
|
+
x ||= 0
|
|
55
|
+
y ||= 0
|
|
56
|
+
|
|
57
|
+
`#{canvas.to_n}.putImageData(#@native, x, y)`
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
alias size length
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end; end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Browser; class Canvas
|
|
2
|
+
|
|
3
|
+
class Gradient
|
|
4
|
+
include Native
|
|
5
|
+
|
|
6
|
+
attr_reader :context
|
|
7
|
+
|
|
8
|
+
def initialize(context, *args, &block)
|
|
9
|
+
@context = context
|
|
10
|
+
|
|
11
|
+
super(case args.length
|
|
12
|
+
when 4 then `#{@context.to_n}.createLinearGradient.apply(self, args)`
|
|
13
|
+
when 6 then `#{@context.to_n}.createRadialGradient.apply(self, args)`
|
|
14
|
+
else raise ArgumentError, "don't know where to dispatch"
|
|
15
|
+
end)
|
|
16
|
+
|
|
17
|
+
instance_eval(&block)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def add(position, color)
|
|
21
|
+
`#{@context.to_n}.addColorStop(position, color)`
|
|
22
|
+
|
|
23
|
+
self
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end; end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
module Browser; class Canvas
|
|
2
|
+
|
|
3
|
+
class StyleObject
|
|
4
|
+
include Native
|
|
5
|
+
|
|
6
|
+
attr_reader :context
|
|
7
|
+
|
|
8
|
+
def initialize(context)
|
|
9
|
+
@context = context
|
|
10
|
+
|
|
11
|
+
super(@context.to_n)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Style < StyleObject
|
|
16
|
+
class Line < StyleObject
|
|
17
|
+
attr_reader :width, :cap, :join, :miter_limit
|
|
18
|
+
|
|
19
|
+
def width=(value)
|
|
20
|
+
`#@native.lineWidth = #{@width = value}`
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def cap=(value)
|
|
24
|
+
`#@native.lineCap = #{@cap = value}`
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def join=(value)
|
|
28
|
+
`#@native.lineJoin = #{@join = value}`
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def miter_limit=(value)
|
|
32
|
+
`#@native.miterLimit = #{@miter_limit = value}`
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Text < StyleObject
|
|
37
|
+
attr_reader :font, :align, :baseline
|
|
38
|
+
|
|
39
|
+
def font=(value)
|
|
40
|
+
`#@native.font = #{@font = value}`
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def align=(value)
|
|
44
|
+
`#@native.textAlign = #{@align = value}`
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def baseline=(value)
|
|
48
|
+
`#@native.textBaseline = #{@baseline = value}`
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class Image < StyleObject
|
|
53
|
+
attr_reader :smooth
|
|
54
|
+
|
|
55
|
+
alias smooth? smooth
|
|
56
|
+
|
|
57
|
+
def smooth!
|
|
58
|
+
`#@native.mozImageSmoothingEnabled = #{@smooth = true}`
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def no_smooth!
|
|
62
|
+
`#@native.mozImageSmoothingEnabled = #{@smooth = false}`
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class Shadow < StyleObject
|
|
67
|
+
attr_reader :offset, :blur, :color
|
|
68
|
+
|
|
69
|
+
def offset=(value)
|
|
70
|
+
`#@native.shadowOffsetX = #{value[:x]}`
|
|
71
|
+
`#@native.shadowOffsetY = #{value[:y]}`
|
|
72
|
+
|
|
73
|
+
@offset = value
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def blur=(value)
|
|
77
|
+
`#@native.shadowBlur = #{@blur = value}`
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def color=(value)
|
|
81
|
+
`#@native.shadowColor = #{@color = value}`
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
attr_reader :line, :text, :image, :shadow, :fill, :stroke, :alpha, :composite_operation
|
|
86
|
+
|
|
87
|
+
def initialize(context)
|
|
88
|
+
super(context)
|
|
89
|
+
|
|
90
|
+
@line = Line.new(context)
|
|
91
|
+
@text = Text.new(context)
|
|
92
|
+
@image = Image.new(context)
|
|
93
|
+
@shadow = Shadow.new(context)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def fill=(value)
|
|
97
|
+
`#@native.fillStyle = #{(@fill = value).to_n}`
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def stroke=(value)
|
|
101
|
+
`#@native.strokeStyle = #{(@stroke = value).to_n}`
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def alpha=(value)
|
|
105
|
+
`#@native.globalAlpha = #{@alpha = value}`
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def composite_operation=(value)
|
|
109
|
+
`#@native.globalCompositeOperation = #{@composite_operation = value}`
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end; end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Browser; class Canvas
|
|
2
|
+
|
|
3
|
+
class Text
|
|
4
|
+
include Native
|
|
5
|
+
|
|
6
|
+
attr_reader :context
|
|
7
|
+
|
|
8
|
+
def initialize(context)
|
|
9
|
+
@context = context
|
|
10
|
+
|
|
11
|
+
super(@context.to_n)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def measure(text)
|
|
15
|
+
`#@native.measureText(text)`
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fill(text, x = nil, y = nil, max_width = nil)
|
|
19
|
+
x ||= 0
|
|
20
|
+
y ||= 0
|
|
21
|
+
|
|
22
|
+
if max_width
|
|
23
|
+
`#@native.fillText(text, x, y, max_width)`
|
|
24
|
+
else
|
|
25
|
+
`#@native.fillText(text, x, y)`
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
@context
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def stroke(text, x = nil, y = nil, max_width = nil)
|
|
32
|
+
x ||= 0
|
|
33
|
+
y ||= 0
|
|
34
|
+
|
|
35
|
+
if max_width
|
|
36
|
+
`#@native.strokeText(text, x, y, max_width)`
|
|
37
|
+
else
|
|
38
|
+
`#@native.strokeText(text, x, y)`
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@context
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end; end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
module Browser
|
|
2
|
+
|
|
3
|
+
# Manipulate the browser console.
|
|
4
|
+
#
|
|
5
|
+
# @see https://developer.mozilla.org/en-US/docs/Web/API/console
|
|
6
|
+
class Console
|
|
7
|
+
include Native
|
|
8
|
+
|
|
9
|
+
# Clear the console.
|
|
10
|
+
def clear
|
|
11
|
+
`#@native.clear()`
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Print a stacktrace from the call site.
|
|
15
|
+
def trace
|
|
16
|
+
`#@native.trace()`
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Log the passed objects based on an optional initial format.
|
|
20
|
+
def log(*args)
|
|
21
|
+
`#@native.log.apply(#@native, args)`
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Log the passed objects based on an optional initial format as informational
|
|
25
|
+
# log.
|
|
26
|
+
def info(*args)
|
|
27
|
+
`#@native.info.apply(#@native, args)`
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Log the passed objects based on an optional initial format as warning.
|
|
31
|
+
def warn(*args)
|
|
32
|
+
`#@native.warn.apply(#@native, args)`
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Log the passed objects based on an optional initial format as error.
|
|
36
|
+
def error(*args)
|
|
37
|
+
`#@native.error.apply(#@native, args)`
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Time the given block with the given label.
|
|
41
|
+
def time(label, &block)
|
|
42
|
+
raise ArgumentError, "no block given" unless block
|
|
43
|
+
|
|
44
|
+
`#@native.time(label)`
|
|
45
|
+
|
|
46
|
+
begin
|
|
47
|
+
if block.arity == 0
|
|
48
|
+
instance_exec(&block)
|
|
49
|
+
else
|
|
50
|
+
block.call(self)
|
|
51
|
+
end
|
|
52
|
+
ensure
|
|
53
|
+
`#@native.timeEnd()`
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Group the given block.
|
|
58
|
+
def group(*args, &block)
|
|
59
|
+
raise ArgumentError, "no block given" unless block
|
|
60
|
+
|
|
61
|
+
`#@native.group.apply(#@native, args)`
|
|
62
|
+
|
|
63
|
+
begin
|
|
64
|
+
if block.arity == 0
|
|
65
|
+
instance_exec(&block)
|
|
66
|
+
else
|
|
67
|
+
block.call(self)
|
|
68
|
+
end
|
|
69
|
+
ensure
|
|
70
|
+
`#@native.groupEnd()`
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Group the given block but collapse it.
|
|
75
|
+
def group!(*args, &block)
|
|
76
|
+
return unless block_given?
|
|
77
|
+
|
|
78
|
+
`#@native.groupCollapsed.apply(#@native, args)`
|
|
79
|
+
|
|
80
|
+
begin
|
|
81
|
+
if block.arity == 0
|
|
82
|
+
instance_exec(&block)
|
|
83
|
+
else
|
|
84
|
+
block.call(self)
|
|
85
|
+
end
|
|
86
|
+
ensure
|
|
87
|
+
`#@native.groupEnd()`
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
class Window
|
|
93
|
+
# Get the {Console} for this window.
|
|
94
|
+
#
|
|
95
|
+
# @return [Console]
|
|
96
|
+
def console
|
|
97
|
+
Console.new(`#@native.console`)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
$console = $window.console
|
|
102
|
+
|
|
103
|
+
end
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
require 'stringio'
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
|
|
5
|
+
# Allows manipulation of browser cookies.
|
|
6
|
+
#
|
|
7
|
+
# @see https://developer.mozilla.org/en-US/docs/Web/API/document.cookie
|
|
8
|
+
class Cookies
|
|
9
|
+
# Default cookie options.
|
|
10
|
+
DEFAULT = {
|
|
11
|
+
expires: Time.now + 1.day,
|
|
12
|
+
secure: false
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
include Enumerable
|
|
16
|
+
|
|
17
|
+
attr_reader :options
|
|
18
|
+
|
|
19
|
+
# Create a new {Cookies} wrapper.
|
|
20
|
+
#
|
|
21
|
+
# @param document [native] the native document object
|
|
22
|
+
def initialize(document)
|
|
23
|
+
@document = document
|
|
24
|
+
@options = DEFAULT.dup
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Access the cookie with the given name.
|
|
28
|
+
#
|
|
29
|
+
# @param name [String] the name of the cookie
|
|
30
|
+
#
|
|
31
|
+
# @return [Object]
|
|
32
|
+
def [](name)
|
|
33
|
+
matches = `#@document.cookie`.scan(/#{Regexp.escape(name.encode_uri_component)}=([^;]*)/)
|
|
34
|
+
|
|
35
|
+
return if matches.empty?
|
|
36
|
+
|
|
37
|
+
result = matches.map {|cookie|
|
|
38
|
+
JSON.parse(cookie.match(/^.*?=(.*)$/)[1].decode_uri_component)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
result.length == 1 ? result.first : result
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Set a cookie.
|
|
45
|
+
#
|
|
46
|
+
# @param name [String] the name of the cookie
|
|
47
|
+
# @param value [Object] the data to set
|
|
48
|
+
# @param options [Hash] the options for the cookie
|
|
49
|
+
#
|
|
50
|
+
# @option options [Integer] :max_age the max age of the cookie in seconds
|
|
51
|
+
# @option options [Time] :expires the expire date
|
|
52
|
+
# @option options [String] :path the path the cookie is valid on
|
|
53
|
+
# @option options [String] :domain the domain the cookie is valid on
|
|
54
|
+
# @option options [Boolean] :secure whether the cookie is secure or not
|
|
55
|
+
def []=(name, value, options = {})
|
|
56
|
+
`#@document.cookie = #{encode name, value.is_a?(String) ? value : JSON.dump(value), @options.merge(options)}`
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Delete a cookie.
|
|
60
|
+
#
|
|
61
|
+
# @param name [String] the name of the cookie
|
|
62
|
+
def delete(name)
|
|
63
|
+
`#@document.cookie = #{encode name, '', expires: Time.now}`
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# @!attribute [r] keys
|
|
67
|
+
# @return [Array<String>] all the cookie names
|
|
68
|
+
def keys
|
|
69
|
+
Array(`#@document.cookie.split(/; /)`).map {|cookie|
|
|
70
|
+
cookie.split(/\s*=\s*/).first
|
|
71
|
+
}
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# @!attribute [r] values
|
|
75
|
+
# @return [Array] all the cookie values
|
|
76
|
+
def values
|
|
77
|
+
keys.map {|key|
|
|
78
|
+
self[key]
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Enumerate the cookies.
|
|
83
|
+
#
|
|
84
|
+
# @yieldparam key [String] the name of the cookie
|
|
85
|
+
# @yieldparam value [String] the value of the cookie
|
|
86
|
+
#
|
|
87
|
+
# @return [self]
|
|
88
|
+
def each(&block)
|
|
89
|
+
return enum_for :each unless block
|
|
90
|
+
|
|
91
|
+
keys.each {|key|
|
|
92
|
+
yield key, self[key]
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
self
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Delete all the cookies
|
|
99
|
+
#
|
|
100
|
+
# @return [self]
|
|
101
|
+
def clear
|
|
102
|
+
keys.each {|key|
|
|
103
|
+
delete key
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
self
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
protected
|
|
110
|
+
def encode(key, value, options = {})
|
|
111
|
+
io = StringIO.new
|
|
112
|
+
|
|
113
|
+
io << key.encode_uri_component << ?= << value.encode_uri_component << '; '
|
|
114
|
+
|
|
115
|
+
io << 'max-age=' << options[:max_age] << '; ' if options[:max_age]
|
|
116
|
+
io << 'expires=' << options[:expires].to_utc << '; ' if options[:expires]
|
|
117
|
+
io << 'path=' << options[:path] << '; ' if options[:path]
|
|
118
|
+
io << 'domain=' << options[:domain] << '; ' if options[:domain]
|
|
119
|
+
io << 'secure' if options[:secure]
|
|
120
|
+
|
|
121
|
+
io.string
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
class DOM::Document < DOM::Element
|
|
126
|
+
# @!attribute [r] cookies
|
|
127
|
+
# @return [Cookies] the cookies for the document
|
|
128
|
+
def cookies
|
|
129
|
+
Cookies.new(@native) if defined?(`#@native.cookie`)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|