opal-browser 0.2.0 → 0.3.3

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 (202) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/build.yml +78 -0
  3. data/.gitignore +3 -0
  4. data/CHANGELOG.md +11 -0
  5. data/Gemfile +17 -3
  6. data/LICENSE +2 -1
  7. data/README.md +131 -54
  8. data/Rakefile +29 -1
  9. data/config.ru +20 -3
  10. data/docs/polyfills.md +24 -0
  11. data/examples/2048/Gemfile +6 -0
  12. data/examples/2048/README.md +13 -0
  13. data/examples/2048/app/application.rb +169 -0
  14. data/examples/2048/config.ru +9 -0
  15. data/examples/canvas/Gemfile +6 -0
  16. data/examples/canvas/README.md +9 -0
  17. data/examples/canvas/app/application.rb +55 -0
  18. data/examples/canvas/config.ru +9 -0
  19. data/examples/component/Gemfile +6 -0
  20. data/examples/component/README.md +10 -0
  21. data/examples/component/app/application.rb +66 -0
  22. data/examples/component/config.ru +9 -0
  23. data/examples/integrations/README.md +24 -0
  24. data/examples/integrations/dynamic-rack-opal-sprockets-server/Gemfile +6 -0
  25. data/examples/integrations/dynamic-rack-opal-sprockets-server/README.md +16 -0
  26. data/examples/integrations/dynamic-rack-opal-sprockets-server/app/application.rb +6 -0
  27. data/examples/integrations/dynamic-rack-opal-sprockets-server/config.ru +9 -0
  28. data/examples/integrations/dynamic-roda-roda-sprockets/.gitignore +1 -0
  29. data/examples/integrations/dynamic-roda-roda-sprockets/Gemfile +7 -0
  30. data/examples/integrations/dynamic-roda-roda-sprockets/README.md +22 -0
  31. data/examples/integrations/dynamic-roda-roda-sprockets/Rakefile +4 -0
  32. data/examples/integrations/dynamic-roda-roda-sprockets/app/application.rb +6 -0
  33. data/examples/integrations/dynamic-roda-roda-sprockets/app.rb +32 -0
  34. data/examples/integrations/dynamic-roda-roda-sprockets/config.ru +3 -0
  35. data/examples/integrations/dynamic-roda-tilt/.gitignore +1 -0
  36. data/examples/integrations/dynamic-roda-tilt/Gemfile +8 -0
  37. data/examples/integrations/dynamic-roda-tilt/README.md +17 -0
  38. data/examples/integrations/dynamic-roda-tilt/Rakefile +6 -0
  39. data/examples/integrations/dynamic-roda-tilt/app/application.rb +6 -0
  40. data/examples/integrations/dynamic-roda-tilt/app.rb +50 -0
  41. data/examples/integrations/dynamic-roda-tilt/config.ru +3 -0
  42. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/Gemfile +7 -0
  43. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/README.md +16 -0
  44. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/app/application.rb +6 -0
  45. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/config.ru +29 -0
  46. data/examples/integrations/static-bash/.gitignore +2 -0
  47. data/examples/integrations/static-bash/Gemfile +3 -0
  48. data/examples/integrations/static-bash/README.md +8 -0
  49. data/examples/integrations/static-bash/app/application.rb +6 -0
  50. data/examples/integrations/static-bash/build.sh +4 -0
  51. data/examples/integrations/static-bash/index.html +10 -0
  52. data/examples/integrations/static-bash-opal-parser/.gitignore +3 -0
  53. data/examples/integrations/static-bash-opal-parser/Gemfile +3 -0
  54. data/examples/integrations/static-bash-opal-parser/README.md +10 -0
  55. data/examples/integrations/static-bash-opal-parser/build.sh +4 -0
  56. data/examples/integrations/static-bash-opal-parser/index.html +19 -0
  57. data/examples/integrations/static-rake/.gitignore +1 -0
  58. data/examples/integrations/static-rake/Gemfile +4 -0
  59. data/examples/integrations/static-rake/README.md +7 -0
  60. data/examples/integrations/static-rake/Rakefile +10 -0
  61. data/examples/integrations/static-rake/app/application.rb +6 -0
  62. data/examples/integrations/static-rake/index.html +9 -0
  63. data/examples/integrations/static-rake-guard/.gitignore +1 -0
  64. data/examples/integrations/static-rake-guard/Gemfile +6 -0
  65. data/examples/integrations/static-rake-guard/Guardfile +3 -0
  66. data/examples/integrations/static-rake-guard/README.md +10 -0
  67. data/examples/integrations/static-rake-guard/Rakefile +10 -0
  68. data/examples/integrations/static-rake-guard/app/application.rb +6 -0
  69. data/examples/integrations/static-rake-guard/index.html +9 -0
  70. data/examples/svg/.gitignore +1 -0
  71. data/examples/svg/Gemfile +4 -0
  72. data/examples/svg/README.md +7 -0
  73. data/examples/svg/Rakefile +10 -0
  74. data/examples/svg/app/application.rb +11 -0
  75. data/examples/svg/index.html +17 -0
  76. data/examples/svg/index.svg +6 -0
  77. data/index.html.erb +2 -3
  78. data/opal/browser/audio/node.rb +121 -0
  79. data/opal/browser/audio/param_schedule.rb +43 -0
  80. data/opal/browser/audio.rb +66 -0
  81. data/opal/browser/blob.rb +94 -0
  82. data/opal/browser/canvas/data.rb +1 -1
  83. data/opal/browser/canvas/gradient.rb +1 -1
  84. data/opal/browser/canvas/style.rb +3 -1
  85. data/opal/browser/canvas/text.rb +1 -1
  86. data/opal/browser/canvas.rb +17 -3
  87. data/opal/browser/console.rb +3 -1
  88. data/opal/browser/cookies.rb +72 -34
  89. data/opal/browser/crypto.rb +79 -0
  90. data/opal/browser/css/declaration.rb +1 -1
  91. data/opal/browser/css/rule.rb +1 -1
  92. data/opal/browser/css/style_sheet.rb +2 -2
  93. data/opal/browser/css.rb +23 -7
  94. data/opal/browser/database/sql.rb +7 -8
  95. data/opal/browser/delay.rb +16 -0
  96. data/opal/browser/dom/attribute.rb +1 -1
  97. data/opal/browser/dom/builder.rb +29 -10
  98. data/opal/browser/dom/document.rb +81 -13
  99. data/opal/browser/dom/document_fragment.rb +18 -0
  100. data/opal/browser/dom/document_or_shadow_root.rb +19 -0
  101. data/opal/browser/dom/element/attributes.rb +28 -4
  102. data/opal/browser/dom/element/button.rb +31 -0
  103. data/opal/browser/dom/element/custom.rb +177 -0
  104. data/opal/browser/dom/element/data.rb +17 -2
  105. data/opal/browser/dom/element/editable.rb +47 -0
  106. data/opal/browser/dom/element/form.rb +38 -0
  107. data/opal/browser/dom/element/iframe.rb +37 -0
  108. data/opal/browser/dom/element/image.rb +2 -0
  109. data/opal/browser/dom/element/input.rb +36 -0
  110. data/opal/browser/dom/element/media.rb +17 -0
  111. data/opal/browser/dom/element/scroll.rb +106 -74
  112. data/opal/browser/dom/element/select.rb +6 -0
  113. data/opal/browser/dom/element/size.rb +12 -0
  114. data/opal/browser/dom/element/template.rb +2 -0
  115. data/opal/browser/dom/element/textarea.rb +2 -0
  116. data/opal/browser/dom/element.rb +194 -50
  117. data/opal/browser/dom/mutation_observer.rb +2 -2
  118. data/opal/browser/dom/node.rb +53 -13
  119. data/opal/browser/dom/node_set.rb +13 -2
  120. data/opal/browser/dom/shadow_root.rb +12 -0
  121. data/opal/browser/dom/text.rb +2 -2
  122. data/opal/browser/dom.rb +38 -5
  123. data/opal/browser/effects.rb +170 -4
  124. data/opal/browser/event/all.rb +26 -0
  125. data/opal/browser/event/animation.rb +2 -0
  126. data/opal/browser/event/audio_processing.rb +2 -0
  127. data/opal/browser/event/base.rb +35 -4
  128. data/opal/browser/event/before_unload.rb +2 -0
  129. data/opal/browser/event/clipboard.rb +9 -0
  130. data/opal/browser/event/close.rb +2 -0
  131. data/opal/browser/event/composition.rb +2 -0
  132. data/opal/browser/event/custom.rb +1 -1
  133. data/opal/browser/event/data_transfer.rb +95 -0
  134. data/opal/browser/event/device_light.rb +2 -0
  135. data/opal/browser/event/device_motion.rb +2 -0
  136. data/opal/browser/event/device_orientation.rb +2 -0
  137. data/opal/browser/event/device_proximity.rb +2 -0
  138. data/opal/browser/event/drag.rb +9 -5
  139. data/opal/browser/event/focus.rb +2 -0
  140. data/opal/browser/event/gamepad.rb +3 -1
  141. data/opal/browser/event/hash_change.rb +2 -0
  142. data/opal/browser/event/keyboard.rb +14 -1
  143. data/opal/browser/event/message.rb +2 -0
  144. data/opal/browser/event/mouse.rb +10 -6
  145. data/opal/browser/event/page_transition.rb +2 -0
  146. data/opal/browser/event/pop_state.rb +2 -0
  147. data/opal/browser/event/progress.rb +2 -0
  148. data/opal/browser/event/sensor.rb +2 -0
  149. data/opal/browser/event/storage.rb +2 -0
  150. data/opal/browser/event/touch.rb +2 -0
  151. data/opal/browser/event/wheel.rb +2 -0
  152. data/opal/browser/event.rb +26 -116
  153. data/opal/browser/event_source.rb +1 -1
  154. data/opal/browser/form_data.rb +225 -0
  155. data/opal/browser/history.rb +4 -8
  156. data/opal/browser/http/request.rb +32 -10
  157. data/opal/browser/http/response.rb +5 -1
  158. data/opal/browser/http.rb +0 -2
  159. data/opal/browser/immediate.rb +0 -2
  160. data/opal/browser/location.rb +7 -1
  161. data/opal/browser/navigator.rb +105 -4
  162. data/opal/browser/polyfill/visual_viewport.rb +216 -0
  163. data/opal/browser/screen.rb +2 -2
  164. data/opal/browser/setup/base.rb +6 -0
  165. data/opal/browser/setup/full.rb +13 -0
  166. data/opal/browser/setup/large.rb +17 -0
  167. data/opal/browser/setup/mini.rb +8 -0
  168. data/opal/browser/setup/traditional.rb +10 -0
  169. data/opal/browser/socket.rb +3 -3
  170. data/opal/browser/storage.rb +2 -2
  171. data/opal/browser/support.rb +46 -22
  172. data/opal/browser/utils.rb +94 -14
  173. data/opal/browser/version.rb +1 -1
  174. data/opal/browser/visual_viewport.rb +39 -0
  175. data/opal/browser/window/size.rb +14 -0
  176. data/opal/browser/window/view.rb +15 -0
  177. data/opal/browser/window.rb +29 -16
  178. data/opal/browser.rb +1 -11
  179. data/opal-browser.gemspec +3 -3
  180. data/spec/database/sql_spec.rb +43 -35
  181. data/spec/delay_spec.rb +15 -12
  182. data/spec/dom/document_spec.rb +10 -8
  183. data/spec/dom/element/custom_spec.rb +106 -0
  184. data/spec/dom/element/subclass_spec.rb +144 -0
  185. data/spec/dom/element_spec.rb +42 -0
  186. data/spec/dom/mutation_observer_spec.rb +12 -8
  187. data/spec/dom/node_spec.rb +48 -0
  188. data/spec/dom_spec.rb +8 -0
  189. data/spec/event_source_spec.rb +15 -12
  190. data/spec/{dom/event_spec.rb → event_spec.rb} +44 -15
  191. data/spec/history_spec.rb +23 -19
  192. data/spec/http_spec.rb +19 -31
  193. data/spec/immediate_spec.rb +5 -4
  194. data/spec/interval_spec.rb +18 -9
  195. data/spec/native_cached_wrapper_spec.rb +46 -0
  196. data/spec/runner.rb +37 -62
  197. data/spec/socket_spec.rb +15 -12
  198. data/spec/spec_helper.rb +2 -1
  199. data/spec/spec_helper_promise.rb.erb +25 -0
  200. metadata +120 -16
  201. data/.travis.yml +0 -74
  202. 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
- # wait until there's a spot in the parallel jobs
43
- begin
44
- loop do
45
- state = JSON.parse(RestClient.get(plan).to_str)
46
-
47
- if state["parallel_sessions_running"] < state["parallel_sessions_max_allowed"]
48
- break
49
- end
50
-
51
- print '.'
52
- sleep 30
53
- end
54
-
55
- browser = Selenium::WebDriver.for(:remote, url: hub, desired_capabilities: cap)
56
- browser.navigate.to('http://localhost:9292')
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::TimeOutError; end
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: 1200, interval: 30).until {
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::TimeOutError
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
- browser.save_screenshot('screenshot.png')
120
- response = RestClient.post('https://api.imgur.com/3/upload',
121
- { image: File.open('screenshot.png') },
122
- { 'Authorization' => 'Client-ID 1979876fe2a097e' })
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
- print " ("
125
- print JSON.parse(response.to_str)['data']['link']
126
- puts ")"
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
- async 'creates a socket' do
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
- async {
13
- expect(e.target).to be_a(Browser::Socket)
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
- async 'receives messages' do
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
- async {
23
- expect(e.data).to eq('lol')
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
- async 'sends messages' do
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
- async {
38
- expect(e.data).to eq('omg')
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
@@ -1,5 +1,6 @@
1
+ require 'spec_helper_promise'
1
2
  require 'browser'
2
- require 'browser/console'
3
+ require 'console'
3
4
 
4
5
  module HtmlHelper
5
6
  # Add some html code to the body tag ready for testing. This will
@@ -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.2.0
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - meh.
8
- autorequire:
8
+ - hmdne
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-07-18 00:00:00.000000000 Z
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: '0'
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: '0'
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
- rubyforge_project:
196
- rubygems_version: 2.4.5
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