opal-browser 0.2.0.beta1 → 0.3.2
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 +5 -5
- data/.github/workflows/build.yml +95 -0
- data/.gitignore +3 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +17 -3
- data/LICENSE +2 -1
- data/README.md +183 -52
- data/Rakefile +29 -1
- data/config.ru +20 -3
- data/docs/polyfills.md +24 -0
- data/examples/2048/Gemfile +6 -0
- data/examples/2048/README.md +13 -0
- data/examples/2048/app/application.rb +169 -0
- data/examples/2048/config.ru +9 -0
- data/examples/canvas/Gemfile +6 -0
- data/examples/canvas/README.md +9 -0
- data/examples/canvas/app/application.rb +55 -0
- data/examples/canvas/config.ru +9 -0
- data/examples/component/Gemfile +6 -0
- data/examples/component/README.md +10 -0
- data/examples/component/app/application.rb +66 -0
- data/examples/component/config.ru +9 -0
- data/examples/integrations/README.md +24 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/Gemfile +6 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/README.md +16 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/app/application.rb +6 -0
- data/examples/integrations/dynamic-rack-opal-sprockets-server/config.ru +9 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/.gitignore +1 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/Gemfile +7 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/README.md +22 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/Rakefile +4 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/app/application.rb +6 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/app.rb +32 -0
- data/examples/integrations/dynamic-roda-roda-sprockets/config.ru +3 -0
- data/examples/integrations/dynamic-roda-tilt/.gitignore +1 -0
- data/examples/integrations/dynamic-roda-tilt/Gemfile +8 -0
- data/examples/integrations/dynamic-roda-tilt/README.md +17 -0
- data/examples/integrations/dynamic-roda-tilt/Rakefile +6 -0
- data/examples/integrations/dynamic-roda-tilt/app/application.rb +6 -0
- data/examples/integrations/dynamic-roda-tilt/app.rb +50 -0
- data/examples/integrations/dynamic-roda-tilt/config.ru +3 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/Gemfile +7 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/README.md +16 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/app/application.rb +6 -0
- data/examples/integrations/dynamic-sinatra-opal-sprockets-server/config.ru +29 -0
- data/examples/integrations/static-bash/.gitignore +2 -0
- data/examples/integrations/static-bash/Gemfile +3 -0
- data/examples/integrations/static-bash/README.md +8 -0
- data/examples/integrations/static-bash/app/application.rb +6 -0
- data/examples/integrations/static-bash/build.sh +4 -0
- data/examples/integrations/static-bash/index.html +10 -0
- data/examples/integrations/static-bash-opal-parser/.gitignore +3 -0
- data/examples/integrations/static-bash-opal-parser/Gemfile +3 -0
- data/examples/integrations/static-bash-opal-parser/README.md +10 -0
- data/examples/integrations/static-bash-opal-parser/build.sh +4 -0
- data/examples/integrations/static-bash-opal-parser/index.html +19 -0
- data/examples/integrations/static-rake/.gitignore +1 -0
- data/examples/integrations/static-rake/Gemfile +4 -0
- data/examples/integrations/static-rake/README.md +7 -0
- data/examples/integrations/static-rake/Rakefile +10 -0
- data/examples/integrations/static-rake/app/application.rb +6 -0
- data/examples/integrations/static-rake/index.html +9 -0
- data/examples/integrations/static-rake-guard/.gitignore +1 -0
- data/examples/integrations/static-rake-guard/Gemfile +6 -0
- data/examples/integrations/static-rake-guard/Guardfile +3 -0
- data/examples/integrations/static-rake-guard/README.md +10 -0
- data/examples/integrations/static-rake-guard/Rakefile +10 -0
- data/examples/integrations/static-rake-guard/app/application.rb +6 -0
- data/examples/integrations/static-rake-guard/index.html +9 -0
- data/examples/svg/.gitignore +1 -0
- data/examples/svg/Gemfile +4 -0
- data/examples/svg/README.md +7 -0
- data/examples/svg/Rakefile +10 -0
- data/examples/svg/app/application.rb +11 -0
- data/examples/svg/index.html +17 -0
- data/examples/svg/index.svg +6 -0
- data/index.html.erb +8 -6
- data/lib/opal-browser.rb +1 -0
- data/opal/browser/animation_frame.rb +26 -1
- data/opal/browser/audio/node.rb +121 -0
- data/opal/browser/audio/param_schedule.rb +43 -0
- data/opal/browser/audio.rb +66 -0
- data/opal/browser/blob.rb +94 -0
- data/opal/browser/canvas/data.rb +1 -11
- data/opal/browser/canvas/gradient.rb +1 -11
- data/opal/browser/canvas/style.rb +3 -11
- data/opal/browser/canvas/text.rb +1 -11
- data/opal/browser/canvas.rb +17 -13
- data/opal/browser/console.rb +3 -1
- data/opal/browser/cookies.rb +78 -42
- data/opal/browser/crypto.rb +79 -0
- data/opal/browser/css/declaration.rb +1 -1
- data/opal/browser/css/rule.rb +1 -1
- data/opal/browser/css/style_sheet.rb +2 -2
- data/opal/browser/css.rb +23 -7
- data/opal/browser/database/sql.rb +193 -0
- data/opal/browser/delay.rb +41 -7
- data/opal/browser/dom/attribute.rb +13 -12
- data/opal/browser/dom/builder.rb +31 -17
- data/opal/browser/dom/document.rb +174 -42
- data/opal/browser/dom/document_fragment.rb +18 -0
- data/opal/browser/dom/document_or_shadow_root.rb +19 -0
- data/opal/browser/dom/element/attributes.rb +111 -0
- data/opal/browser/dom/element/button.rb +31 -0
- data/opal/browser/dom/element/custom.rb +177 -0
- data/opal/browser/dom/element/data.rb +82 -0
- data/opal/browser/dom/element/editable.rb +47 -0
- data/opal/browser/dom/element/form.rb +38 -0
- data/opal/browser/dom/element/iframe.rb +37 -0
- data/opal/browser/dom/element/image.rb +2 -0
- data/opal/browser/dom/element/input.rb +48 -1
- data/opal/browser/dom/element/media.rb +17 -0
- data/opal/browser/dom/element/offset.rb +5 -0
- data/opal/browser/dom/element/position.rb +11 -2
- data/opal/browser/dom/element/scroll.rb +123 -24
- data/opal/browser/dom/element/select.rb +42 -0
- data/opal/browser/dom/element/size.rb +17 -0
- data/opal/browser/dom/element/template.rb +11 -0
- data/opal/browser/dom/element/textarea.rb +26 -0
- data/opal/browser/dom/element.rb +468 -238
- data/opal/browser/dom/mutation_observer.rb +4 -4
- data/opal/browser/dom/node.rb +142 -60
- data/opal/browser/dom/node_set.rb +73 -44
- data/opal/browser/dom/shadow_root.rb +12 -0
- data/opal/browser/dom/text.rb +2 -2
- data/opal/browser/dom.rb +40 -16
- data/opal/browser/effects.rb +180 -3
- data/opal/browser/event/all.rb +26 -0
- data/opal/browser/{dom/event → event}/animation.rb +4 -2
- data/opal/browser/{dom/event → event}/audio_processing.rb +4 -2
- data/opal/browser/{dom/event → event}/base.rb +98 -9
- data/opal/browser/{dom/event → event}/before_unload.rb +4 -2
- data/opal/browser/{dom/event → event}/clipboard.rb +11 -2
- data/opal/browser/{dom/event → event}/close.rb +4 -2
- data/opal/browser/{dom/event → event}/composition.rb +4 -2
- data/opal/browser/{dom/event → event}/custom.rb +3 -3
- data/opal/browser/event/data_transfer.rb +95 -0
- data/opal/browser/{dom/event → event}/device_light.rb +4 -2
- data/opal/browser/{dom/event → event}/device_motion.rb +4 -2
- data/opal/browser/{dom/event → event}/device_orientation.rb +4 -2
- data/opal/browser/{dom/event → event}/device_proximity.rb +4 -2
- data/opal/browser/{dom/event → event}/drag.rb +11 -7
- data/opal/browser/{dom/event → event}/focus.rb +4 -2
- data/opal/browser/{dom/event → event}/gamepad.rb +5 -3
- data/opal/browser/{dom/event → event}/hash_change.rb +4 -2
- data/opal/browser/{dom/event → event}/keyboard.rb +16 -3
- data/opal/browser/{dom/event → event}/message.rb +4 -2
- data/opal/browser/{dom/event → event}/mouse.rb +12 -8
- data/opal/browser/{dom/event → event}/page_transition.rb +4 -2
- data/opal/browser/{dom/event → event}/pop_state.rb +4 -2
- data/opal/browser/{dom/event → event}/progress.rb +4 -2
- data/opal/browser/{dom/event → event}/sensor.rb +4 -2
- data/opal/browser/{dom/event → event}/storage.rb +4 -2
- data/opal/browser/{dom/event → event}/touch.rb +4 -2
- data/opal/browser/{dom/event → event}/ui.rb +2 -2
- data/opal/browser/{dom/event → event}/wheel.rb +4 -2
- data/opal/browser/event.rb +163 -0
- data/opal/browser/event_source.rb +2 -2
- data/opal/browser/form_data.rb +225 -0
- data/opal/browser/history.rb +4 -8
- data/opal/browser/http/binary.rb +1 -0
- data/opal/browser/http/headers.rb +16 -2
- data/opal/browser/http/request.rb +46 -48
- data/opal/browser/http/response.rb +5 -1
- data/opal/browser/http.rb +25 -2
- data/opal/browser/immediate.rb +9 -5
- data/opal/browser/interval.rb +34 -11
- data/opal/browser/location.rb +7 -1
- data/opal/browser/navigator.rb +127 -7
- data/opal/browser/polyfill/visual_viewport.rb +216 -0
- data/opal/browser/screen.rb +3 -3
- data/opal/browser/setup/base.rb +6 -0
- data/opal/browser/setup/full.rb +13 -0
- data/opal/browser/setup/large.rb +17 -0
- data/opal/browser/setup/mini.rb +8 -0
- data/opal/browser/setup/traditional.rb +10 -0
- data/opal/browser/socket.rb +8 -4
- data/opal/browser/storage.rb +53 -35
- data/opal/browser/support.rb +72 -5
- data/opal/browser/utils.rb +94 -14
- data/opal/browser/version.rb +1 -1
- data/opal/browser/visual_viewport.rb +39 -0
- data/opal/browser/window/size.rb +31 -3
- data/opal/browser/window/view.rb +15 -0
- data/opal/browser/window.rb +46 -25
- data/opal/browser.rb +1 -10
- data/opal/opal-browser.rb +1 -0
- data/opal-browser.gemspec +3 -3
- data/spec/database/sql_spec.rb +139 -0
- data/spec/delay_spec.rb +41 -0
- data/spec/dom/attribute_spec.rb +49 -0
- data/spec/dom/builder_spec.rb +25 -8
- data/spec/dom/document_spec.rb +22 -0
- data/spec/dom/element/attributes_spec.rb +52 -0
- data/spec/dom/element/custom_spec.rb +106 -0
- data/spec/dom/element/subclass_spec.rb +144 -0
- data/spec/dom/element_spec.rb +181 -4
- data/spec/dom/mutation_observer_spec.rb +12 -8
- data/spec/dom/node_set_spec.rb +44 -0
- data/spec/dom/node_spec.rb +48 -0
- data/spec/dom_spec.rb +8 -0
- data/spec/event_source_spec.rb +15 -12
- data/spec/{dom/event_spec.rb → event_spec.rb} +44 -15
- data/spec/history_spec.rb +23 -19
- data/spec/http_spec.rb +19 -31
- data/spec/immediate_spec.rb +5 -4
- data/spec/interval_spec.rb +59 -0
- data/spec/native_cached_wrapper_spec.rb +46 -0
- data/spec/runner.rb +62 -69
- data/spec/socket_spec.rb +16 -12
- data/spec/spec_helper.rb +2 -5
- data/spec/spec_helper_promise.rb.erb +25 -0
- data/spec/storage_spec.rb +1 -1
- metadata +172 -50
- data/.travis.yml +0 -60
- data/opal/browser/dom/event.rb +0 -253
- data/opal/browser/http/parameters.rb +0 -8
- data/opal/browser/window/scroll.rb +0 -59
|
@@ -1,37 +1,122 @@
|
|
|
1
1
|
module Browser; module DOM; class Element < Node
|
|
2
2
|
|
|
3
|
+
# @todo Consider using the new interfaces which allow for optional
|
|
4
|
+
# smooth transitions.
|
|
3
5
|
class Scroll
|
|
6
|
+
attr_reader :element
|
|
7
|
+
|
|
8
|
+
# @private
|
|
4
9
|
def initialize(element)
|
|
5
10
|
@element = element
|
|
6
11
|
@native = element.to_n
|
|
12
|
+
|
|
13
|
+
# Portable support for Window#scroll and Document#scroll
|
|
14
|
+
@scrolling_native = @native
|
|
15
|
+
if [Document, Window].include?(@element.class)
|
|
16
|
+
# If we are a window, let's become a document first.
|
|
17
|
+
if defined? `#@scrolling_native.document`
|
|
18
|
+
@scrolling_native = `#@scrolling_native.document`
|
|
19
|
+
end
|
|
20
|
+
# There were slight disagreements in the past which element
|
|
21
|
+
# should we handle.
|
|
22
|
+
if defined? `#@scrolling_native.documentElement.scrollTop`
|
|
23
|
+
@scrolling_native = `#@scrolling_native.documentElement`
|
|
24
|
+
elsif defined? `#@scrolling_native.body.scrollTop`
|
|
25
|
+
@scrolling_native = `#@scrolling_native.body`
|
|
26
|
+
end
|
|
27
|
+
end
|
|
7
28
|
end
|
|
8
29
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
30
|
+
# @overload to(x, y)
|
|
31
|
+
#
|
|
32
|
+
# Scroll to the given x and y.
|
|
33
|
+
#
|
|
34
|
+
# @param x [Integer] scroll to x on the x axis
|
|
35
|
+
# @param y [Integer] scroll to y on the y axis
|
|
36
|
+
#
|
|
37
|
+
# @overload to(hash)
|
|
38
|
+
#
|
|
39
|
+
# Scroll to the given x and y.
|
|
40
|
+
#
|
|
41
|
+
# @param hash [Hash] the descriptor
|
|
42
|
+
#
|
|
43
|
+
# @option hash [Integer] :x scroll to x on the x axis
|
|
44
|
+
# @option hash [Integer] :y scroll to y on the y axis
|
|
45
|
+
#
|
|
46
|
+
# @overload to(symbol)
|
|
47
|
+
#
|
|
48
|
+
# Scroll to :top or to :bottom
|
|
49
|
+
#
|
|
50
|
+
# @param symbol [Symbol] either :top or :bottom
|
|
51
|
+
def to(*args)
|
|
52
|
+
x, y = nil, nil
|
|
53
|
+
case args.first
|
|
54
|
+
when Hash
|
|
55
|
+
x = args.first[:x]
|
|
56
|
+
y = args.first[:y]
|
|
57
|
+
when :top
|
|
58
|
+
y = 0
|
|
59
|
+
when :bottom
|
|
60
|
+
y = 99999999
|
|
61
|
+
else
|
|
62
|
+
x, y = args
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
set(x, y) if x || y
|
|
13
66
|
|
|
14
|
-
|
|
15
|
-
|
|
67
|
+
self
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @overload by(x, y)
|
|
71
|
+
#
|
|
72
|
+
# Scroll by the given x and y.
|
|
73
|
+
#
|
|
74
|
+
# @param x [Integer] scroll by x on the x axis
|
|
75
|
+
# @param y [Integer] scroll by y on the y axis
|
|
76
|
+
#
|
|
77
|
+
# @overload by(hash)
|
|
78
|
+
#
|
|
79
|
+
# Scroll by the given x and y.
|
|
80
|
+
#
|
|
81
|
+
# @param hash [Hash] the descriptor
|
|
82
|
+
#
|
|
83
|
+
# @option hash [Integer] :x scroll by x on the x axis
|
|
84
|
+
# @option hash [Integer] :y scroll by y on the y axis
|
|
85
|
+
def by(*args)
|
|
86
|
+
case args.first
|
|
87
|
+
when Hash
|
|
88
|
+
x = args.first[:x] || 0
|
|
89
|
+
y = args.first[:y] || 0
|
|
90
|
+
else
|
|
91
|
+
x, y = args
|
|
16
92
|
end
|
|
17
93
|
|
|
18
|
-
|
|
19
|
-
|
|
94
|
+
set_by(x, y)
|
|
95
|
+
|
|
96
|
+
self
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
if Browser.supports? 'Element.scrollBy'
|
|
100
|
+
private def set_by(x, y)
|
|
101
|
+
`#@scrolling_native.scrollBy(#{x}, #{y})`
|
|
102
|
+
end
|
|
103
|
+
else
|
|
104
|
+
private def set_by(x, y)
|
|
105
|
+
set(self.x + x, self.y + y)
|
|
20
106
|
end
|
|
21
|
-
|
|
22
|
-
def to(what)
|
|
23
|
-
x = what[:x] || self.x
|
|
24
|
-
y = what[:y] || self.y
|
|
107
|
+
end
|
|
25
108
|
|
|
26
|
-
|
|
27
|
-
|
|
109
|
+
if Browser.supports? 'Element.scroll'
|
|
110
|
+
private def set(x=nil, y=nil)
|
|
111
|
+
`#@scrolling_native.scrollTop = #{y}` if y
|
|
112
|
+
`#@scrolling_native.scrollLeft = #{x}` if x
|
|
28
113
|
end
|
|
29
114
|
|
|
30
115
|
def position
|
|
31
|
-
Position.new(`#@
|
|
116
|
+
Browser::Position.new(`#@scrolling_native.scrollLeft`, `#@scrolling_native.scrollTop`)
|
|
32
117
|
end
|
|
33
118
|
else
|
|
34
|
-
def
|
|
119
|
+
private def set(x=nil, y=nil)
|
|
35
120
|
raise NotImplementedError, 'scroll on element unsupported'
|
|
36
121
|
end
|
|
37
122
|
|
|
@@ -40,29 +125,43 @@ class Scroll
|
|
|
40
125
|
end
|
|
41
126
|
end
|
|
42
127
|
|
|
128
|
+
# @!attribute [r] x
|
|
129
|
+
# @return [Integer] the scroll position on the x axis
|
|
43
130
|
def x
|
|
44
131
|
position.x
|
|
45
132
|
end
|
|
46
133
|
|
|
134
|
+
# @!attribute [r] y
|
|
135
|
+
# @return [Integer] the scroll position on the y axis
|
|
47
136
|
def y
|
|
48
137
|
position.y
|
|
49
138
|
end
|
|
50
139
|
|
|
140
|
+
# @!attribute [r] height
|
|
141
|
+
# @return [Integer] the height of the scroll
|
|
51
142
|
def height
|
|
52
|
-
`#@
|
|
143
|
+
`#@scrolling_native.scrollHeight`
|
|
53
144
|
end
|
|
54
145
|
|
|
146
|
+
# @!attribute [r] width
|
|
147
|
+
# @return [Integer] the width of the scroll
|
|
55
148
|
def width
|
|
56
|
-
`#@
|
|
149
|
+
`#@scrolling_native.scrollWidth`
|
|
57
150
|
end
|
|
58
151
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
152
|
+
if Browser.supports? 'Element.scrollIntoViewIfNeeded'
|
|
153
|
+
def into_view(align = true)
|
|
154
|
+
`#@scrolling_native.scrollIntoViewIfNeeded(align)`
|
|
155
|
+
end
|
|
156
|
+
else
|
|
157
|
+
# Non-standard. Not supported by modern Firefox. Use {#into_view!}
|
|
158
|
+
def into_view(align = true)
|
|
159
|
+
raise NotImplementedError
|
|
160
|
+
end
|
|
161
|
+
end
|
|
64
162
|
|
|
65
|
-
|
|
163
|
+
def into_view!(align = true)
|
|
164
|
+
`#@scrolling_native.scrollIntoView(align)`
|
|
66
165
|
end
|
|
67
166
|
end
|
|
68
167
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Browser; module DOM; class Element < Node
|
|
2
|
+
|
|
3
|
+
class Select < Element
|
|
4
|
+
def_selector "select"
|
|
5
|
+
|
|
6
|
+
def value
|
|
7
|
+
%x{
|
|
8
|
+
if (#@native.value == "") {
|
|
9
|
+
return nil;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return #@native.value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def value= value
|
|
18
|
+
`#@native.value = #{value.to_n}`
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def labels
|
|
22
|
+
NodeSet[Native::Array.new(`#@native.labels`)]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def options
|
|
26
|
+
NodeSet[Native::Array.new(`#@native.options`)]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def option
|
|
30
|
+
DOM(`#@native.options[#@native.selectedIndex]`)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def index
|
|
34
|
+
`#@native.selectedIndex`
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
alias_native :multiple?, :multiple
|
|
38
|
+
alias_native :required?, :required
|
|
39
|
+
alias_native :length
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end; end; end
|
|
@@ -3,12 +3,15 @@ module Browser; module DOM; class Element < Node
|
|
|
3
3
|
class Size
|
|
4
4
|
attr_reader :element
|
|
5
5
|
|
|
6
|
+
# @private
|
|
6
7
|
def initialize(element, *inc)
|
|
7
8
|
@element = element
|
|
8
9
|
@native = element.to_n
|
|
9
10
|
@include = inc
|
|
10
11
|
end
|
|
11
12
|
|
|
13
|
+
# @!attribute width
|
|
14
|
+
# @return [Integer] the element width
|
|
12
15
|
def width
|
|
13
16
|
`#@native.offsetWidth`
|
|
14
17
|
end
|
|
@@ -17,6 +20,8 @@ class Size
|
|
|
17
20
|
@element.style[:width] = value
|
|
18
21
|
end
|
|
19
22
|
|
|
23
|
+
# @!attribute height
|
|
24
|
+
# @return [Integer] the element height
|
|
20
25
|
def height
|
|
21
26
|
`#@native.offsetHeight`
|
|
22
27
|
end
|
|
@@ -24,6 +29,18 @@ class Size
|
|
|
24
29
|
def height=(value)
|
|
25
30
|
@element.style[:height] = value
|
|
26
31
|
end
|
|
32
|
+
|
|
33
|
+
# @!attribute client_width
|
|
34
|
+
# @return [Integer] the content-box width of an element
|
|
35
|
+
def client_width
|
|
36
|
+
`#@native.clientWidth`
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @!attribute client_height
|
|
40
|
+
# @return [Integer] the content-box height of an element
|
|
41
|
+
def client_height
|
|
42
|
+
`#@native.clientHeight`
|
|
43
|
+
end
|
|
27
44
|
end
|
|
28
45
|
|
|
29
46
|
end; end; end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Browser; module DOM; class Element < Node
|
|
2
|
+
|
|
3
|
+
class Textarea < Element
|
|
4
|
+
def_selector "textarea"
|
|
5
|
+
|
|
6
|
+
def value
|
|
7
|
+
%x{
|
|
8
|
+
if (#@native.value == "") {
|
|
9
|
+
return nil;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return #@native.value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def value=(value)
|
|
18
|
+
`#@native.value = #{value}`
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def clear
|
|
22
|
+
`#@native.value = ''`
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end; end; end
|