opal-browser 0.2.0 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/build.yml +78 -0
- data/.gitignore +3 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +17 -3
- data/LICENSE +2 -1
- data/README.md +131 -54
- 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 +2 -3
- 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 -1
- data/opal/browser/canvas/gradient.rb +1 -1
- data/opal/browser/canvas/style.rb +3 -1
- data/opal/browser/canvas/text.rb +1 -1
- data/opal/browser/canvas.rb +17 -3
- data/opal/browser/console.rb +3 -1
- data/opal/browser/cookies.rb +72 -34
- 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 +7 -8
- data/opal/browser/delay.rb +16 -0
- data/opal/browser/dom/attribute.rb +1 -1
- data/opal/browser/dom/builder.rb +29 -10
- data/opal/browser/dom/document.rb +81 -13
- 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 +28 -4
- 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 +17 -2
- 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 +36 -0
- data/opal/browser/dom/element/media.rb +17 -0
- data/opal/browser/dom/element/scroll.rb +106 -74
- data/opal/browser/dom/element/select.rb +6 -0
- data/opal/browser/dom/element/size.rb +12 -0
- data/opal/browser/dom/element/template.rb +2 -0
- data/opal/browser/dom/element/textarea.rb +2 -0
- data/opal/browser/dom/element.rb +194 -50
- data/opal/browser/dom/mutation_observer.rb +2 -2
- data/opal/browser/dom/node.rb +53 -13
- data/opal/browser/dom/node_set.rb +13 -2
- data/opal/browser/dom/shadow_root.rb +12 -0
- data/opal/browser/dom/text.rb +2 -2
- data/opal/browser/dom.rb +38 -5
- data/opal/browser/effects.rb +170 -4
- data/opal/browser/event/all.rb +26 -0
- data/opal/browser/event/animation.rb +2 -0
- data/opal/browser/event/audio_processing.rb +2 -0
- data/opal/browser/event/base.rb +35 -4
- data/opal/browser/event/before_unload.rb +2 -0
- data/opal/browser/event/clipboard.rb +9 -0
- data/opal/browser/event/close.rb +2 -0
- data/opal/browser/event/composition.rb +2 -0
- data/opal/browser/event/custom.rb +1 -1
- data/opal/browser/event/data_transfer.rb +95 -0
- data/opal/browser/event/device_light.rb +2 -0
- data/opal/browser/event/device_motion.rb +2 -0
- data/opal/browser/event/device_orientation.rb +2 -0
- data/opal/browser/event/device_proximity.rb +2 -0
- data/opal/browser/event/drag.rb +9 -5
- data/opal/browser/event/focus.rb +2 -0
- data/opal/browser/event/gamepad.rb +3 -1
- data/opal/browser/event/hash_change.rb +2 -0
- data/opal/browser/event/keyboard.rb +14 -1
- data/opal/browser/event/message.rb +2 -0
- data/opal/browser/event/mouse.rb +10 -6
- data/opal/browser/event/page_transition.rb +2 -0
- data/opal/browser/event/pop_state.rb +2 -0
- data/opal/browser/event/progress.rb +2 -0
- data/opal/browser/event/sensor.rb +2 -0
- data/opal/browser/event/storage.rb +2 -0
- data/opal/browser/event/touch.rb +2 -0
- data/opal/browser/event/wheel.rb +2 -0
- data/opal/browser/event.rb +26 -116
- data/opal/browser/event_source.rb +1 -1
- data/opal/browser/form_data.rb +225 -0
- data/opal/browser/history.rb +4 -8
- data/opal/browser/http/request.rb +32 -10
- data/opal/browser/http/response.rb +5 -1
- data/opal/browser/http.rb +0 -2
- data/opal/browser/immediate.rb +0 -2
- data/opal/browser/location.rb +7 -1
- data/opal/browser/navigator.rb +105 -4
- data/opal/browser/polyfill/visual_viewport.rb +216 -0
- data/opal/browser/screen.rb +2 -2
- 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 +3 -3
- data/opal/browser/storage.rb +2 -2
- data/opal/browser/support.rb +46 -22
- 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 +14 -0
- data/opal/browser/window/view.rb +15 -0
- data/opal/browser/window.rb +29 -16
- data/opal/browser.rb +1 -11
- data/opal-browser.gemspec +3 -3
- data/spec/database/sql_spec.rb +43 -35
- data/spec/delay_spec.rb +15 -12
- data/spec/dom/document_spec.rb +10 -8
- data/spec/dom/element/custom_spec.rb +106 -0
- data/spec/dom/element/subclass_spec.rb +144 -0
- data/spec/dom/element_spec.rb +42 -0
- data/spec/dom/mutation_observer_spec.rb +12 -8
- 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 +18 -9
- data/spec/native_cached_wrapper_spec.rb +46 -0
- data/spec/runner.rb +37 -62
- data/spec/socket_spec.rb +15 -12
- data/spec/spec_helper.rb +2 -1
- data/spec/spec_helper_promise.rb.erb +25 -0
- metadata +120 -16
- data/.travis.yml +0 -74
- data/opal/browser/window/scroll.rb +0 -59
data/spec/runner.rb
CHANGED
@@ -1,75 +1,45 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
|
+
require 'webdrivers'
|
2
3
|
require 'selenium/webdriver'
|
3
4
|
require 'rest_client'
|
4
5
|
require 'json'
|
5
6
|
|
6
|
-
# setup tunnel
|
7
|
-
begin
|
8
|
-
File.open('BrowserStackTunnel.jar', 'w') {|f|
|
9
|
-
f.write RestClient.get('http://www.browserstack.com/BrowserStackTunnel.jar').to_str
|
10
|
-
}
|
11
|
-
|
12
|
-
tunnel = IO.popen 'java -jar BrowserStackTunnel.jar $BS_AUTHKEY localhost,9292,0 -tunnelIdentifier $TRAVIS_JOB_ID'
|
13
|
-
|
14
|
-
loop do
|
15
|
-
break if tunnel.gets.start_with? 'You can now access'
|
16
|
-
end
|
17
|
-
rescue
|
18
|
-
retry
|
19
|
-
end
|
20
|
-
|
21
|
-
# configure based on environment variables
|
22
|
-
hub = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub.browserstack.com/wd/hub"
|
23
|
-
plan = "https://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@www.browserstack.com/automate/plan.json"
|
24
|
-
cap = Selenium::WebDriver::Remote::Capabilities.new
|
25
|
-
|
26
|
-
cap['platform'] = ENV['SELENIUM_PLATFORM'] || 'ANY'
|
27
|
-
cap['browser'] = ENV['SELENIUM_BROWSER'] || 'chrome'
|
28
|
-
cap['browser_version'] = ENV['SELENIUM_VERSION'] if ENV['SELENIUM_VERSION']
|
29
|
-
cap['device'] = ENV['SELENIUM_DEVICE'] if ENV['SELENIUM_DEVICE']
|
30
|
-
|
31
|
-
cap['browserstack.tunnelIdentifier'] = ENV['TRAVIS_JOB_ID']
|
32
|
-
cap['browserstack.tunnel'] = true
|
33
|
-
cap['browserstack.debug'] = true
|
34
|
-
|
35
|
-
cap['databaseEnabled'] = true
|
36
|
-
cap['browserConnectionEnabled'] = true
|
37
|
-
cap['locationContextEnabled'] = true
|
38
|
-
cap['webStorageEnabled'] = true
|
39
|
-
|
40
7
|
print 'Loading...'
|
41
8
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
browser.
|
57
|
-
rescue Selenium::WebDriver::Error::UnknownError
|
58
|
-
retry
|
9
|
+
browser, options = case ENV['BROWSER']
|
10
|
+
when "chrome"
|
11
|
+
opts = Selenium::WebDriver::Chrome::Options.new(args: ['--headless', '--no-sandbox'])
|
12
|
+
[:chrome, opts]
|
13
|
+
when "gecko"
|
14
|
+
opts = Selenium::WebDriver::Firefox::Options.new(args: ['--headless'])
|
15
|
+
[:firefox, opts]
|
16
|
+
when "safari"
|
17
|
+
opts = Selenium::WebDriver::Safari::Options.new()
|
18
|
+
[:safari, opts]
|
19
|
+
when "edge"
|
20
|
+
opts = Selenium::WebDriver::Edge::Options.new(args: ['--headless'])
|
21
|
+
[:edge, opts]
|
22
|
+
else
|
23
|
+
raise "Wrong web browser provided in BROWSER. Acceptable values: chrome, gecko, safari, edge"
|
59
24
|
end
|
60
25
|
|
26
|
+
browser = Selenium::WebDriver.for(browser, capabilities: options)
|
27
|
+
browser.navigate.to('http://localhost:9292')
|
28
|
+
|
61
29
|
# if we don't quit the browser it will stall
|
62
30
|
at_exit {
|
63
31
|
browser.quit
|
64
32
|
}
|
65
33
|
|
34
|
+
puts "Browser: " + browser.execute_script("return window.navigator.userAgent")
|
35
|
+
|
66
36
|
# the title is a good way to know if anything went wrong while fetching the
|
67
37
|
# page
|
68
38
|
Selenium::WebDriver::Wait.new(timeout: 30, interval: 5).until {
|
69
39
|
not browser.title.strip.empty?
|
70
40
|
}
|
71
41
|
|
72
|
-
unless browser.title =~ /Opal Browser/
|
42
|
+
unless browser.title =~ /Opal Browser|RSpec results/
|
73
43
|
puts "\rThe page failed loading."
|
74
44
|
exit 1
|
75
45
|
end
|
@@ -86,13 +56,13 @@ begin
|
|
86
56
|
puts "\r#{element.text}"
|
87
57
|
exit 1
|
88
58
|
end
|
89
|
-
rescue Selenium::WebDriver::Error::
|
59
|
+
rescue Selenium::WebDriver::Error::TimeoutError; end
|
90
60
|
|
91
61
|
print "\rRunning specs..."
|
92
62
|
|
93
63
|
begin
|
94
64
|
# wait until the specs have finished, thus changing the content of #totals
|
95
|
-
Selenium::WebDriver::Wait.new(timeout:
|
65
|
+
Selenium::WebDriver::Wait.new(timeout: 3000, interval: 30).until {
|
96
66
|
print '.'
|
97
67
|
|
98
68
|
not browser['totals'].text.strip.empty?
|
@@ -107,7 +77,7 @@ begin
|
|
107
77
|
if totals =~ / 0 failures/
|
108
78
|
exit 0
|
109
79
|
end
|
110
|
-
rescue Selenium::WebDriver::Error::
|
80
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
111
81
|
if element = browser['rspec-error'] rescue nil
|
112
82
|
print "\r#{element.text}"
|
113
83
|
else
|
@@ -116,14 +86,19 @@ rescue Selenium::WebDriver::Error::TimeOutError
|
|
116
86
|
ensure
|
117
87
|
# take a screenshot and upload it to imgur
|
118
88
|
begin
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
89
|
+
upload = lambda do |filepath|
|
90
|
+
response = RestClient.post('https://api.imgur.com/3/upload',
|
91
|
+
{ image: File.open(filepath) },
|
92
|
+
{ 'Authorization' => 'Client-ID 1979876fe2a097e' })
|
123
93
|
|
124
|
-
|
125
|
-
|
126
|
-
|
94
|
+
JSON.parse(response.to_str)['data']['link']
|
95
|
+
end
|
96
|
+
|
97
|
+
w, h = browser.execute_script("return [document.body.clientWidth, document.body.clientHeight];")
|
98
|
+
browser.manage.window.resize_to(w, h)
|
99
|
+
browser.save_screenshot('screenshot.png')
|
100
|
+
screenshot_url = upload.('screenshot.png')
|
101
|
+
puts " (#{screenshot_url})"
|
127
102
|
rescue Exception
|
128
103
|
puts
|
129
104
|
end
|
data/spec/socket_spec.rb
CHANGED
@@ -6,27 +6,30 @@ describe Browser::Socket do
|
|
6
6
|
# FIXME: find out why it doesn't work inline
|
7
7
|
ws = "ws://#{$window.location.host}/socket"
|
8
8
|
|
9
|
-
|
9
|
+
it 'creates a socket' do
|
10
|
+
promise = Browser::Promise.new
|
10
11
|
Browser::Socket.new ws do |s|
|
11
12
|
s.on :open do |e|
|
12
|
-
|
13
|
-
|
14
|
-
}
|
13
|
+
expect(e.target).to be_a(Browser::Socket)
|
14
|
+
promise.resolve
|
15
15
|
end
|
16
16
|
end
|
17
|
+
promise.for_rspec
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
+
it 'receives messages' do
|
21
|
+
promise = Browser::Promise.new
|
20
22
|
Browser::Socket.new ws do |s|
|
21
23
|
s.on :message do |e|
|
22
|
-
|
23
|
-
|
24
|
-
}
|
24
|
+
expect(e.data).to eq('lol')
|
25
|
+
promise.resolve
|
25
26
|
end
|
26
27
|
end
|
28
|
+
promise.for_rspec
|
27
29
|
end
|
28
30
|
|
29
|
-
|
31
|
+
it 'sends messages' do
|
32
|
+
promise = Browser::Promise.new
|
30
33
|
Browser::Socket.new ws do |s|
|
31
34
|
s.on :message do |e|
|
32
35
|
e.off
|
@@ -34,11 +37,11 @@ describe Browser::Socket do
|
|
34
37
|
s.print 'omg'
|
35
38
|
|
36
39
|
s.on :message do |e|
|
37
|
-
|
38
|
-
|
39
|
-
}
|
40
|
+
expect(e.data).to eq('omg')
|
41
|
+
promise.resolve
|
40
42
|
end
|
41
43
|
end
|
42
44
|
end
|
45
|
+
promise.for_rspec
|
43
46
|
end
|
44
47
|
end if Browser::Socket.supported?
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
<% if ENV['OPAL_BROWSER_PROMISE'] == 'v2' %>
|
2
|
+
require 'promise'
|
3
|
+
require 'promise/v2'
|
4
|
+
<% else %>
|
5
|
+
require 'promise'
|
6
|
+
|
7
|
+
# Polyfill #to_v1, which isn't present before Opal v1.3.0
|
8
|
+
class Promise
|
9
|
+
unless Promise.method_defined? :to_v1
|
10
|
+
alias to_v1 itself
|
11
|
+
end
|
12
|
+
end
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
require 'browser/utils'
|
16
|
+
|
17
|
+
module Browser
|
18
|
+
class Promise
|
19
|
+
# Return a correct promise for opal-rspec, which for now is
|
20
|
+
# PromiseV1 until opal-rspec is ported.
|
21
|
+
def for_rspec
|
22
|
+
to_v1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opal-browser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- meh.
|
8
|
-
|
8
|
+
- hmdne
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2021-12-22 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: opal
|
@@ -16,48 +17,126 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
+
version: '1.0'
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '2.0'
|
20
24
|
type: :runtime
|
21
25
|
prerelease: false
|
22
26
|
version_requirements: !ruby/object:Gem::Requirement
|
23
27
|
requirements:
|
24
28
|
- - ">="
|
25
29
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
30
|
+
version: '1.0'
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
27
34
|
- !ruby/object:Gem::Dependency
|
28
35
|
name: paggio
|
29
36
|
requirement: !ruby/object:Gem::Requirement
|
30
37
|
requirements:
|
31
38
|
- - ">="
|
32
39
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
40
|
+
version: 0.3.0
|
34
41
|
type: :runtime
|
35
42
|
prerelease: false
|
36
43
|
version_requirements: !ruby/object:Gem::Requirement
|
37
44
|
requirements:
|
38
45
|
- - ">="
|
39
46
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
description:
|
47
|
+
version: 0.3.0
|
48
|
+
description:
|
42
49
|
email: meh@schizofreni.co
|
43
50
|
executables: []
|
44
51
|
extensions: []
|
45
52
|
extra_rdoc_files: []
|
46
53
|
files:
|
54
|
+
- ".github/workflows/build.yml"
|
47
55
|
- ".gitignore"
|
48
|
-
- ".travis.yml"
|
49
56
|
- ".yardopts"
|
57
|
+
- CHANGELOG.md
|
50
58
|
- Gemfile
|
51
59
|
- LICENSE
|
52
60
|
- README.md
|
53
61
|
- Rakefile
|
54
62
|
- config.ru
|
63
|
+
- docs/polyfills.md
|
64
|
+
- examples/2048/Gemfile
|
65
|
+
- examples/2048/README.md
|
66
|
+
- examples/2048/app/application.rb
|
67
|
+
- examples/2048/config.ru
|
68
|
+
- examples/canvas/Gemfile
|
69
|
+
- examples/canvas/README.md
|
70
|
+
- examples/canvas/app/application.rb
|
71
|
+
- examples/canvas/config.ru
|
72
|
+
- examples/component/Gemfile
|
73
|
+
- examples/component/README.md
|
74
|
+
- examples/component/app/application.rb
|
75
|
+
- examples/component/config.ru
|
76
|
+
- examples/integrations/README.md
|
77
|
+
- examples/integrations/dynamic-rack-opal-sprockets-server/Gemfile
|
78
|
+
- examples/integrations/dynamic-rack-opal-sprockets-server/README.md
|
79
|
+
- examples/integrations/dynamic-rack-opal-sprockets-server/app/application.rb
|
80
|
+
- examples/integrations/dynamic-rack-opal-sprockets-server/config.ru
|
81
|
+
- examples/integrations/dynamic-roda-roda-sprockets/.gitignore
|
82
|
+
- examples/integrations/dynamic-roda-roda-sprockets/Gemfile
|
83
|
+
- examples/integrations/dynamic-roda-roda-sprockets/README.md
|
84
|
+
- examples/integrations/dynamic-roda-roda-sprockets/Rakefile
|
85
|
+
- examples/integrations/dynamic-roda-roda-sprockets/app.rb
|
86
|
+
- examples/integrations/dynamic-roda-roda-sprockets/app/application.rb
|
87
|
+
- examples/integrations/dynamic-roda-roda-sprockets/config.ru
|
88
|
+
- examples/integrations/dynamic-roda-tilt/.gitignore
|
89
|
+
- examples/integrations/dynamic-roda-tilt/Gemfile
|
90
|
+
- examples/integrations/dynamic-roda-tilt/README.md
|
91
|
+
- examples/integrations/dynamic-roda-tilt/Rakefile
|
92
|
+
- examples/integrations/dynamic-roda-tilt/app.rb
|
93
|
+
- examples/integrations/dynamic-roda-tilt/app/application.rb
|
94
|
+
- examples/integrations/dynamic-roda-tilt/config.ru
|
95
|
+
- examples/integrations/dynamic-sinatra-opal-sprockets-server/Gemfile
|
96
|
+
- examples/integrations/dynamic-sinatra-opal-sprockets-server/README.md
|
97
|
+
- examples/integrations/dynamic-sinatra-opal-sprockets-server/app/application.rb
|
98
|
+
- examples/integrations/dynamic-sinatra-opal-sprockets-server/config.ru
|
99
|
+
- examples/integrations/static-bash-opal-parser/.gitignore
|
100
|
+
- examples/integrations/static-bash-opal-parser/Gemfile
|
101
|
+
- examples/integrations/static-bash-opal-parser/README.md
|
102
|
+
- examples/integrations/static-bash-opal-parser/build.sh
|
103
|
+
- examples/integrations/static-bash-opal-parser/index.html
|
104
|
+
- examples/integrations/static-bash/.gitignore
|
105
|
+
- examples/integrations/static-bash/Gemfile
|
106
|
+
- examples/integrations/static-bash/README.md
|
107
|
+
- examples/integrations/static-bash/app/application.rb
|
108
|
+
- examples/integrations/static-bash/build.sh
|
109
|
+
- examples/integrations/static-bash/index.html
|
110
|
+
- examples/integrations/static-rake-guard/.gitignore
|
111
|
+
- examples/integrations/static-rake-guard/Gemfile
|
112
|
+
- examples/integrations/static-rake-guard/Guardfile
|
113
|
+
- examples/integrations/static-rake-guard/README.md
|
114
|
+
- examples/integrations/static-rake-guard/Rakefile
|
115
|
+
- examples/integrations/static-rake-guard/app/application.rb
|
116
|
+
- examples/integrations/static-rake-guard/index.html
|
117
|
+
- examples/integrations/static-rake/.gitignore
|
118
|
+
- examples/integrations/static-rake/Gemfile
|
119
|
+
- examples/integrations/static-rake/README.md
|
120
|
+
- examples/integrations/static-rake/Rakefile
|
121
|
+
- examples/integrations/static-rake/app/application.rb
|
122
|
+
- examples/integrations/static-rake/index.html
|
123
|
+
- examples/svg/.gitignore
|
124
|
+
- examples/svg/Gemfile
|
125
|
+
- examples/svg/README.md
|
126
|
+
- examples/svg/Rakefile
|
127
|
+
- examples/svg/app/application.rb
|
128
|
+
- examples/svg/index.html
|
129
|
+
- examples/svg/index.svg
|
55
130
|
- index.html.erb
|
56
131
|
- lib/opal-browser.rb
|
57
132
|
- lib/opal/browser.rb
|
58
133
|
- opal-browser.gemspec
|
59
134
|
- opal/browser.rb
|
60
135
|
- opal/browser/animation_frame.rb
|
136
|
+
- opal/browser/audio.rb
|
137
|
+
- opal/browser/audio/node.rb
|
138
|
+
- opal/browser/audio/param_schedule.rb
|
139
|
+
- opal/browser/blob.rb
|
61
140
|
- opal/browser/canvas.rb
|
62
141
|
- opal/browser/canvas/data.rb
|
63
142
|
- opal/browser/canvas/gradient.rb
|
@@ -65,6 +144,7 @@ files:
|
|
65
144
|
- opal/browser/canvas/text.rb
|
66
145
|
- opal/browser/console.rb
|
67
146
|
- opal/browser/cookies.rb
|
147
|
+
- opal/browser/crypto.rb
|
68
148
|
- opal/browser/css.rb
|
69
149
|
- opal/browser/css/declaration.rb
|
70
150
|
- opal/browser/css/rule.rb
|
@@ -81,11 +161,18 @@ files:
|
|
81
161
|
- opal/browser/dom/comment.rb
|
82
162
|
- opal/browser/dom/document.rb
|
83
163
|
- opal/browser/dom/document_fragment.rb
|
164
|
+
- opal/browser/dom/document_or_shadow_root.rb
|
84
165
|
- opal/browser/dom/element.rb
|
85
166
|
- opal/browser/dom/element/attributes.rb
|
167
|
+
- opal/browser/dom/element/button.rb
|
168
|
+
- opal/browser/dom/element/custom.rb
|
86
169
|
- opal/browser/dom/element/data.rb
|
170
|
+
- opal/browser/dom/element/editable.rb
|
171
|
+
- opal/browser/dom/element/form.rb
|
172
|
+
- opal/browser/dom/element/iframe.rb
|
87
173
|
- opal/browser/dom/element/image.rb
|
88
174
|
- opal/browser/dom/element/input.rb
|
175
|
+
- opal/browser/dom/element/media.rb
|
89
176
|
- opal/browser/dom/element/offset.rb
|
90
177
|
- opal/browser/dom/element/position.rb
|
91
178
|
- opal/browser/dom/element/scroll.rb
|
@@ -96,9 +183,11 @@ files:
|
|
96
183
|
- opal/browser/dom/mutation_observer.rb
|
97
184
|
- opal/browser/dom/node.rb
|
98
185
|
- opal/browser/dom/node_set.rb
|
186
|
+
- opal/browser/dom/shadow_root.rb
|
99
187
|
- opal/browser/dom/text.rb
|
100
188
|
- opal/browser/effects.rb
|
101
189
|
- opal/browser/event.rb
|
190
|
+
- opal/browser/event/all.rb
|
102
191
|
- opal/browser/event/animation.rb
|
103
192
|
- opal/browser/event/audio_processing.rb
|
104
193
|
- opal/browser/event/base.rb
|
@@ -107,6 +196,7 @@ files:
|
|
107
196
|
- opal/browser/event/close.rb
|
108
197
|
- opal/browser/event/composition.rb
|
109
198
|
- opal/browser/event/custom.rb
|
199
|
+
- opal/browser/event/data_transfer.rb
|
110
200
|
- opal/browser/event/device_light.rb
|
111
201
|
- opal/browser/event/device_motion.rb
|
112
202
|
- opal/browser/event/device_orientation.rb
|
@@ -127,6 +217,7 @@ files:
|
|
127
217
|
- opal/browser/event/ui.rb
|
128
218
|
- opal/browser/event/wheel.rb
|
129
219
|
- opal/browser/event_source.rb
|
220
|
+
- opal/browser/form_data.rb
|
130
221
|
- opal/browser/history.rb
|
131
222
|
- opal/browser/http.rb
|
132
223
|
- opal/browser/http/binary.rb
|
@@ -137,14 +228,20 @@ files:
|
|
137
228
|
- opal/browser/interval.rb
|
138
229
|
- opal/browser/location.rb
|
139
230
|
- opal/browser/navigator.rb
|
231
|
+
- opal/browser/polyfill/visual_viewport.rb
|
140
232
|
- opal/browser/screen.rb
|
233
|
+
- opal/browser/setup/base.rb
|
234
|
+
- opal/browser/setup/full.rb
|
235
|
+
- opal/browser/setup/large.rb
|
236
|
+
- opal/browser/setup/mini.rb
|
237
|
+
- opal/browser/setup/traditional.rb
|
141
238
|
- opal/browser/socket.rb
|
142
239
|
- opal/browser/storage.rb
|
143
240
|
- opal/browser/support.rb
|
144
241
|
- opal/browser/utils.rb
|
145
242
|
- opal/browser/version.rb
|
243
|
+
- opal/browser/visual_viewport.rb
|
146
244
|
- opal/browser/window.rb
|
147
|
-
- opal/browser/window/scroll.rb
|
148
245
|
- opal/browser/window/size.rb
|
149
246
|
- opal/browser/window/view.rb
|
150
247
|
- opal/opal-browser.rb
|
@@ -154,22 +251,26 @@ files:
|
|
154
251
|
- spec/dom/builder_spec.rb
|
155
252
|
- spec/dom/document_spec.rb
|
156
253
|
- spec/dom/element/attributes_spec.rb
|
254
|
+
- spec/dom/element/custom_spec.rb
|
255
|
+
- spec/dom/element/subclass_spec.rb
|
157
256
|
- spec/dom/element_spec.rb
|
158
|
-
- spec/dom/event_spec.rb
|
159
257
|
- spec/dom/mutation_observer_spec.rb
|
160
258
|
- spec/dom/node_set_spec.rb
|
161
259
|
- spec/dom/node_spec.rb
|
162
260
|
- spec/dom_spec.rb
|
163
261
|
- spec/event_source_spec.rb
|
262
|
+
- spec/event_spec.rb
|
164
263
|
- spec/history_spec.rb
|
165
264
|
- spec/http_spec.rb
|
166
265
|
- spec/immediate_spec.rb
|
167
266
|
- spec/interval_spec.rb
|
168
267
|
- spec/json2.js
|
268
|
+
- spec/native_cached_wrapper_spec.rb
|
169
269
|
- spec/runner.rb
|
170
270
|
- spec/sizzle.js
|
171
271
|
- spec/socket_spec.rb
|
172
272
|
- spec/spec_helper.rb
|
273
|
+
- spec/spec_helper_promise.rb.erb
|
173
274
|
- spec/storage_spec.rb
|
174
275
|
- spec/wgxpath.install.js
|
175
276
|
- spec/window_spec.rb
|
@@ -177,7 +278,7 @@ homepage: http://github.com/opal/opal-browser
|
|
177
278
|
licenses:
|
178
279
|
- MIT
|
179
280
|
metadata: {}
|
180
|
-
post_install_message:
|
281
|
+
post_install_message:
|
181
282
|
rdoc_options: []
|
182
283
|
require_paths:
|
183
284
|
- lib
|
@@ -192,9 +293,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
293
|
- !ruby/object:Gem::Version
|
193
294
|
version: '0'
|
194
295
|
requirements: []
|
195
|
-
|
196
|
-
|
197
|
-
signing_key:
|
296
|
+
rubygems_version: 3.2.22
|
297
|
+
signing_key:
|
198
298
|
specification_version: 4
|
199
299
|
summary: Browser support for Opal.
|
200
300
|
test_files:
|
@@ -204,22 +304,26 @@ test_files:
|
|
204
304
|
- spec/dom/builder_spec.rb
|
205
305
|
- spec/dom/document_spec.rb
|
206
306
|
- spec/dom/element/attributes_spec.rb
|
307
|
+
- spec/dom/element/custom_spec.rb
|
308
|
+
- spec/dom/element/subclass_spec.rb
|
207
309
|
- spec/dom/element_spec.rb
|
208
|
-
- spec/dom/event_spec.rb
|
209
310
|
- spec/dom/mutation_observer_spec.rb
|
210
311
|
- spec/dom/node_set_spec.rb
|
211
312
|
- spec/dom/node_spec.rb
|
212
313
|
- spec/dom_spec.rb
|
213
314
|
- spec/event_source_spec.rb
|
315
|
+
- spec/event_spec.rb
|
214
316
|
- spec/history_spec.rb
|
215
317
|
- spec/http_spec.rb
|
216
318
|
- spec/immediate_spec.rb
|
217
319
|
- spec/interval_spec.rb
|
218
320
|
- spec/json2.js
|
321
|
+
- spec/native_cached_wrapper_spec.rb
|
219
322
|
- spec/runner.rb
|
220
323
|
- spec/sizzle.js
|
221
324
|
- spec/socket_spec.rb
|
222
325
|
- spec/spec_helper.rb
|
326
|
+
- spec/spec_helper_promise.rb.erb
|
223
327
|
- spec/storage_spec.rb
|
224
328
|
- spec/wgxpath.install.js
|
225
329
|
- spec/window_spec.rb
|
data/.travis.yml
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm: 2.0.0
|
3
|
-
cache: bundler
|
4
|
-
|
5
|
-
env:
|
6
|
-
global:
|
7
|
-
- SELENIUM_HOST=hub.browserstack.com
|
8
|
-
- SELENIUM_PORT=80
|
9
|
-
|
10
|
-
- BS_AUTOMATE_PROJECT="$TRAVIS_REPO_SLUG"
|
11
|
-
- BS_AUTOMATE_BUILD="Travis build No. $TRAVIS_BUILD_NUMBER for $TRAVIS_REPO_SLUG"
|
12
|
-
- secure: "L70bh0nIOaIoS7Va4Mr0GsdRlAjOILsNNrfwFDr3RjM2HaR3oeEKK1tJIEDEMamgBw6Ljhz7EWdDwt3bQ0HrhO9cI0kuzl+dA9Obf3+gucPSdi8QCZbjZDkwA56srsDEAMGAKkNWI1kmQTbPUPUoIuKmjj3Y3T68Ud2qi+hi5ag="
|
13
|
-
- secure: "T7RSwd/aIYwsbuoyLPLzB0ZwOATDAFrpi9GQSVIbV1rZV2oGq+yisjeARUPyRfKTI0Q08CNgarLWfL/kONR6AL19XUD3Rm1+hag8bNixRYot2c65We6d40BMtPfZyO13kSWlTtDnzotYavhXoXujJNLfSjbdLdTlmy2m9Q0UfQc="
|
14
|
-
|
15
|
-
matrix:
|
16
|
-
- SELENIUM_BROWSER=firefox SELENIUM_VERSION=25
|
17
|
-
- SELENIUM_BROWSER=firefox SELENIUM_VERSION=26
|
18
|
-
|
19
|
-
- SELENIUM_BROWSER=opera SELENIUM_VERSION=12.15
|
20
|
-
- SELENIUM_BROWSER=opera SELENIUM_VERSION=12.16
|
21
|
-
|
22
|
-
- SELENIUM_BROWSER=ie SELENIUM_VERSION=6
|
23
|
-
- SELENIUM_BROWSER=ie SELENIUM_VERSION=7
|
24
|
-
- SELENIUM_BROWSER=ie SELENIUM_VERSION=8
|
25
|
-
- SELENIUM_BROWSER=ie SELENIUM_VERSION=9
|
26
|
-
- SELENIUM_BROWSER=ie SELENIUM_VERSION=10
|
27
|
-
- SELENIUM_BROWSER=ie SELENIUM_VERSION=11
|
28
|
-
|
29
|
-
- SELENIUM_BROWSER=safari SELENIUM_VERSION=5.1
|
30
|
-
- SELENIUM_BROWSER=safari SELENIUM_VERSION=6.1
|
31
|
-
- SELENIUM_BROWSER=safari SELENIUM_VERSION=7.0
|
32
|
-
|
33
|
-
- SELENIUM_BROWSER=ipad SELENIUM_DEVICE="iPad 2 (5.0)"
|
34
|
-
- SELENIUM_BROWSER=iphone SELENIUM_DEVICE="iPhone 4S"
|
35
|
-
- SELENIUM_BROWSER=iphone SELENIUM_DEVICE="iPhone 5"
|
36
|
-
- SELENIUM_BROWSER=iphone SELENIUM_DEVICE="iPhone 5S"
|
37
|
-
|
38
|
-
- SELENIUM_BROWSER=android SELENIUM_DEVICE="Samsung Galaxy Nexus"
|
39
|
-
- SELENIUM_BROWSER=android SELENIUM_DEVICE="Motorola Razr Maxx HD"
|
40
|
-
- SELENIUM_BROWSER=android SELENIUM_DEVICE="LG Nexus 4"
|
41
|
-
|
42
|
-
- SELENIUM_BROWSER=chrome SELENIUM_VERSION=30
|
43
|
-
- SELENIUM_BROWSER=chrome SELENIUM_VERSION=31
|
44
|
-
|
45
|
-
matrix:
|
46
|
-
allow_failures:
|
47
|
-
# ChromeDriver be broken
|
48
|
-
- env: SELENIUM_BROWSER=chrome SELENIUM_VERSION=31
|
49
|
-
- env: SELENIUM_BROWSER=chrome SELENIUM_VERSION=30
|
50
|
-
|
51
|
-
# Something's fishy
|
52
|
-
- env: SELENIUM_BROWSER=ipad SELENIUM_DEVICE="iPad 2 (5.0)"
|
53
|
-
- env: SELENIUM_BROWSER=iphone SELENIUM_DEVICE="iPhone 5"
|
54
|
-
|
55
|
-
# Android's driver be broken
|
56
|
-
- env: SELENIUM_BROWSER=android SELENIUM_DEVICE="Samsung Galaxy Nexus"
|
57
|
-
- env: SELENIUM_BROWSER=android SELENIUM_DEVICE="Motorola Razr Maxx HD"
|
58
|
-
- env: SELENIUM_BROWSER=android SELENIUM_DEVICE="LG Nexus 4"
|
59
|
-
|
60
|
-
before_install:
|
61
|
-
- gem update bundler
|
62
|
-
- bundle --version
|
63
|
-
- gem update --system
|
64
|
-
- gem --version
|
65
|
-
|
66
|
-
before_script:
|
67
|
-
- bundle exec rackup -p 9292 &
|
68
|
-
- sleep 10
|
69
|
-
|
70
|
-
script:
|
71
|
-
- bundle exec spec/runner.rb
|
72
|
-
|
73
|
-
notifications:
|
74
|
-
irc: "irc.freenode.org#opal"
|
@@ -1,59 +0,0 @@
|
|
1
|
-
module Browser; class Window
|
2
|
-
|
3
|
-
class Scroll
|
4
|
-
def initialize(window)
|
5
|
-
@window = window
|
6
|
-
@native = window.to_n
|
7
|
-
end
|
8
|
-
|
9
|
-
if Browser.supports? 'Window.scroll'
|
10
|
-
def position
|
11
|
-
%x{
|
12
|
-
var doc = #@native.document,
|
13
|
-
root = doc.documentElement,
|
14
|
-
body = doc.body;
|
15
|
-
|
16
|
-
var x = root.scrollLeft || body.scrollLeft,
|
17
|
-
y = root.scrollTop || body.scrollTop;
|
18
|
-
}
|
19
|
-
|
20
|
-
Position.new(`x`, `y`)
|
21
|
-
end
|
22
|
-
elsif Browser.supports? 'Window.pageOffset'
|
23
|
-
def position
|
24
|
-
Position.new(`#@native.pageXOffset`, `#@native.pageYOffset`)
|
25
|
-
end
|
26
|
-
else
|
27
|
-
def position
|
28
|
-
raise NotImplementedError, 'window scroll unsupported'
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def x
|
33
|
-
position.x
|
34
|
-
end
|
35
|
-
|
36
|
-
def y
|
37
|
-
position.y
|
38
|
-
end
|
39
|
-
|
40
|
-
def to(what)
|
41
|
-
x = what[:x] || self.x
|
42
|
-
y = what[:y] || self.y
|
43
|
-
|
44
|
-
`#@native.scrollTo(#{x}, #{y})`
|
45
|
-
|
46
|
-
self
|
47
|
-
end
|
48
|
-
|
49
|
-
def by(what)
|
50
|
-
x = what[:x] || 0
|
51
|
-
y = what[:y] || 0
|
52
|
-
|
53
|
-
`#@native.scrollBy(#{x}, #{y})`
|
54
|
-
|
55
|
-
self
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
end; end
|