opal-browser 0.2.0 → 0.3.0

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 (201) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/build.yml +95 -0
  3. data/.gitignore +2 -0
  4. data/Gemfile +17 -3
  5. data/LICENSE +2 -1
  6. data/README.md +116 -54
  7. data/Rakefile +29 -1
  8. data/config.ru +20 -3
  9. data/docs/polyfills.md +24 -0
  10. data/examples/2048/Gemfile +7 -0
  11. data/examples/2048/README.md +13 -0
  12. data/examples/2048/app/application.rb +169 -0
  13. data/examples/2048/config.ru +9 -0
  14. data/examples/canvas/Gemfile +7 -0
  15. data/examples/canvas/README.md +9 -0
  16. data/examples/canvas/app/application.rb +55 -0
  17. data/examples/canvas/config.ru +9 -0
  18. data/examples/component/Gemfile +7 -0
  19. data/examples/component/README.md +10 -0
  20. data/examples/component/app/application.rb +66 -0
  21. data/examples/component/config.ru +9 -0
  22. data/examples/integrations/README.md +24 -0
  23. data/examples/integrations/dynamic-rack-opal-sprockets-server/Gemfile +7 -0
  24. data/examples/integrations/dynamic-rack-opal-sprockets-server/README.md +16 -0
  25. data/examples/integrations/dynamic-rack-opal-sprockets-server/app/application.rb +6 -0
  26. data/examples/integrations/dynamic-rack-opal-sprockets-server/config.ru +9 -0
  27. data/examples/integrations/dynamic-roda-roda-sprockets/.gitignore +1 -0
  28. data/examples/integrations/dynamic-roda-roda-sprockets/Gemfile +8 -0
  29. data/examples/integrations/dynamic-roda-roda-sprockets/README.md +22 -0
  30. data/examples/integrations/dynamic-roda-roda-sprockets/Rakefile +4 -0
  31. data/examples/integrations/dynamic-roda-roda-sprockets/app/application.rb +6 -0
  32. data/examples/integrations/dynamic-roda-roda-sprockets/app.rb +32 -0
  33. data/examples/integrations/dynamic-roda-roda-sprockets/config.ru +3 -0
  34. data/examples/integrations/dynamic-roda-tilt/.gitignore +1 -0
  35. data/examples/integrations/dynamic-roda-tilt/Gemfile +9 -0
  36. data/examples/integrations/dynamic-roda-tilt/README.md +17 -0
  37. data/examples/integrations/dynamic-roda-tilt/Rakefile +6 -0
  38. data/examples/integrations/dynamic-roda-tilt/app/application.rb +6 -0
  39. data/examples/integrations/dynamic-roda-tilt/app.rb +50 -0
  40. data/examples/integrations/dynamic-roda-tilt/config.ru +3 -0
  41. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/Gemfile +8 -0
  42. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/README.md +16 -0
  43. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/app/application.rb +6 -0
  44. data/examples/integrations/dynamic-sinatra-opal-sprockets-server/config.ru +29 -0
  45. data/examples/integrations/static-bash/.gitignore +2 -0
  46. data/examples/integrations/static-bash/Gemfile +4 -0
  47. data/examples/integrations/static-bash/README.md +8 -0
  48. data/examples/integrations/static-bash/app/application.rb +6 -0
  49. data/examples/integrations/static-bash/build.sh +4 -0
  50. data/examples/integrations/static-bash/index.html +10 -0
  51. data/examples/integrations/static-bash-opal-parser/.gitignore +3 -0
  52. data/examples/integrations/static-bash-opal-parser/Gemfile +4 -0
  53. data/examples/integrations/static-bash-opal-parser/README.md +10 -0
  54. data/examples/integrations/static-bash-opal-parser/build.sh +4 -0
  55. data/examples/integrations/static-bash-opal-parser/index.html +19 -0
  56. data/examples/integrations/static-rake/.gitignore +1 -0
  57. data/examples/integrations/static-rake/Gemfile +5 -0
  58. data/examples/integrations/static-rake/README.md +7 -0
  59. data/examples/integrations/static-rake/Rakefile +10 -0
  60. data/examples/integrations/static-rake/app/application.rb +6 -0
  61. data/examples/integrations/static-rake/index.html +9 -0
  62. data/examples/integrations/static-rake-guard/.gitignore +1 -0
  63. data/examples/integrations/static-rake-guard/Gemfile +7 -0
  64. data/examples/integrations/static-rake-guard/Guardfile +3 -0
  65. data/examples/integrations/static-rake-guard/README.md +10 -0
  66. data/examples/integrations/static-rake-guard/Rakefile +10 -0
  67. data/examples/integrations/static-rake-guard/app/application.rb +6 -0
  68. data/examples/integrations/static-rake-guard/index.html +9 -0
  69. data/examples/svg/.gitignore +1 -0
  70. data/examples/svg/Gemfile +5 -0
  71. data/examples/svg/README.md +7 -0
  72. data/examples/svg/Rakefile +10 -0
  73. data/examples/svg/app/application.rb +11 -0
  74. data/examples/svg/index.html +17 -0
  75. data/examples/svg/index.svg +6 -0
  76. data/index.html.erb +2 -3
  77. data/opal/browser/audio/node.rb +121 -0
  78. data/opal/browser/audio/param_schedule.rb +43 -0
  79. data/opal/browser/audio.rb +66 -0
  80. data/opal/browser/blob.rb +94 -0
  81. data/opal/browser/canvas/data.rb +1 -1
  82. data/opal/browser/canvas/gradient.rb +1 -1
  83. data/opal/browser/canvas/style.rb +3 -1
  84. data/opal/browser/canvas/text.rb +1 -1
  85. data/opal/browser/canvas.rb +17 -3
  86. data/opal/browser/console.rb +3 -1
  87. data/opal/browser/cookies.rb +16 -7
  88. data/opal/browser/crypto.rb +79 -0
  89. data/opal/browser/css/declaration.rb +1 -1
  90. data/opal/browser/css/rule.rb +1 -1
  91. data/opal/browser/css/style_sheet.rb +2 -2
  92. data/opal/browser/css.rb +23 -7
  93. data/opal/browser/database/sql.rb +7 -8
  94. data/opal/browser/delay.rb +16 -0
  95. data/opal/browser/dom/attribute.rb +1 -1
  96. data/opal/browser/dom/builder.rb +29 -10
  97. data/opal/browser/dom/document.rb +81 -13
  98. data/opal/browser/dom/document_fragment.rb +18 -0
  99. data/opal/browser/dom/document_or_shadow_root.rb +19 -0
  100. data/opal/browser/dom/element/attributes.rb +28 -4
  101. data/opal/browser/dom/element/button.rb +31 -0
  102. data/opal/browser/dom/element/custom.rb +177 -0
  103. data/opal/browser/dom/element/data.rb +17 -2
  104. data/opal/browser/dom/element/editable.rb +47 -0
  105. data/opal/browser/dom/element/form.rb +38 -0
  106. data/opal/browser/dom/element/iframe.rb +37 -0
  107. data/opal/browser/dom/element/image.rb +2 -0
  108. data/opal/browser/dom/element/input.rb +36 -0
  109. data/opal/browser/dom/element/media.rb +17 -0
  110. data/opal/browser/dom/element/scroll.rb +106 -74
  111. data/opal/browser/dom/element/select.rb +6 -0
  112. data/opal/browser/dom/element/size.rb +12 -0
  113. data/opal/browser/dom/element/template.rb +2 -0
  114. data/opal/browser/dom/element/textarea.rb +2 -0
  115. data/opal/browser/dom/element.rb +193 -48
  116. data/opal/browser/dom/mutation_observer.rb +2 -2
  117. data/opal/browser/dom/node.rb +53 -13
  118. data/opal/browser/dom/node_set.rb +11 -2
  119. data/opal/browser/dom/shadow_root.rb +12 -0
  120. data/opal/browser/dom/text.rb +2 -2
  121. data/opal/browser/dom.rb +38 -5
  122. data/opal/browser/effects.rb +170 -4
  123. data/opal/browser/event/all.rb +26 -0
  124. data/opal/browser/event/animation.rb +2 -0
  125. data/opal/browser/event/audio_processing.rb +2 -0
  126. data/opal/browser/event/base.rb +35 -4
  127. data/opal/browser/event/before_unload.rb +2 -0
  128. data/opal/browser/event/clipboard.rb +9 -0
  129. data/opal/browser/event/close.rb +2 -0
  130. data/opal/browser/event/composition.rb +2 -0
  131. data/opal/browser/event/custom.rb +1 -1
  132. data/opal/browser/event/data_transfer.rb +95 -0
  133. data/opal/browser/event/device_light.rb +2 -0
  134. data/opal/browser/event/device_motion.rb +2 -0
  135. data/opal/browser/event/device_orientation.rb +2 -0
  136. data/opal/browser/event/device_proximity.rb +2 -0
  137. data/opal/browser/event/drag.rb +9 -5
  138. data/opal/browser/event/focus.rb +2 -0
  139. data/opal/browser/event/gamepad.rb +3 -1
  140. data/opal/browser/event/hash_change.rb +2 -0
  141. data/opal/browser/event/keyboard.rb +14 -1
  142. data/opal/browser/event/message.rb +2 -0
  143. data/opal/browser/event/mouse.rb +10 -6
  144. data/opal/browser/event/page_transition.rb +2 -0
  145. data/opal/browser/event/pop_state.rb +2 -0
  146. data/opal/browser/event/progress.rb +2 -0
  147. data/opal/browser/event/sensor.rb +2 -0
  148. data/opal/browser/event/storage.rb +2 -0
  149. data/opal/browser/event/touch.rb +2 -0
  150. data/opal/browser/event/wheel.rb +2 -0
  151. data/opal/browser/event.rb +26 -116
  152. data/opal/browser/event_source.rb +1 -1
  153. data/opal/browser/form_data.rb +225 -0
  154. data/opal/browser/history.rb +4 -8
  155. data/opal/browser/http/request.rb +32 -10
  156. data/opal/browser/http/response.rb +5 -1
  157. data/opal/browser/http.rb +0 -2
  158. data/opal/browser/immediate.rb +0 -2
  159. data/opal/browser/location.rb +7 -1
  160. data/opal/browser/navigator.rb +105 -4
  161. data/opal/browser/polyfill/visual_viewport.rb +216 -0
  162. data/opal/browser/screen.rb +2 -2
  163. data/opal/browser/setup/base.rb +6 -0
  164. data/opal/browser/setup/full.rb +13 -0
  165. data/opal/browser/setup/large.rb +17 -0
  166. data/opal/browser/setup/mini.rb +8 -0
  167. data/opal/browser/setup/traditional.rb +10 -0
  168. data/opal/browser/socket.rb +3 -3
  169. data/opal/browser/storage.rb +2 -2
  170. data/opal/browser/support.rb +13 -1
  171. data/opal/browser/utils.rb +94 -14
  172. data/opal/browser/version.rb +1 -1
  173. data/opal/browser/visual_viewport.rb +39 -0
  174. data/opal/browser/window/size.rb +14 -0
  175. data/opal/browser/window/view.rb +15 -0
  176. data/opal/browser/window.rb +29 -16
  177. data/opal/browser.rb +1 -11
  178. data/opal-browser.gemspec +3 -3
  179. data/spec/database/sql_spec.rb +43 -35
  180. data/spec/delay_spec.rb +15 -12
  181. data/spec/dom/document_spec.rb +10 -8
  182. data/spec/dom/element/custom_spec.rb +106 -0
  183. data/spec/dom/element/subclass_spec.rb +144 -0
  184. data/spec/dom/element_spec.rb +42 -0
  185. data/spec/dom/mutation_observer_spec.rb +12 -8
  186. data/spec/dom/node_spec.rb +48 -0
  187. data/spec/dom_spec.rb +8 -0
  188. data/spec/event_source_spec.rb +15 -12
  189. data/spec/{dom/event_spec.rb → event_spec.rb} +44 -15
  190. data/spec/history_spec.rb +23 -19
  191. data/spec/http_spec.rb +19 -31
  192. data/spec/immediate_spec.rb +5 -4
  193. data/spec/interval_spec.rb +18 -9
  194. data/spec/native_cached_wrapper_spec.rb +46 -0
  195. data/spec/runner.rb +37 -62
  196. data/spec/socket_spec.rb +15 -12
  197. data/spec/spec_helper.rb +2 -1
  198. data/spec/spec_helper_promise.rb.erb +25 -0
  199. metadata +119 -16
  200. data/.travis.yml +0 -74
  201. 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.0
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-11-17 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: opal
@@ -16,48 +17,125 @@ 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"
50
57
  - Gemfile
51
58
  - LICENSE
52
59
  - README.md
53
60
  - Rakefile
54
61
  - config.ru
62
+ - docs/polyfills.md
63
+ - examples/2048/Gemfile
64
+ - examples/2048/README.md
65
+ - examples/2048/app/application.rb
66
+ - examples/2048/config.ru
67
+ - examples/canvas/Gemfile
68
+ - examples/canvas/README.md
69
+ - examples/canvas/app/application.rb
70
+ - examples/canvas/config.ru
71
+ - examples/component/Gemfile
72
+ - examples/component/README.md
73
+ - examples/component/app/application.rb
74
+ - examples/component/config.ru
75
+ - examples/integrations/README.md
76
+ - examples/integrations/dynamic-rack-opal-sprockets-server/Gemfile
77
+ - examples/integrations/dynamic-rack-opal-sprockets-server/README.md
78
+ - examples/integrations/dynamic-rack-opal-sprockets-server/app/application.rb
79
+ - examples/integrations/dynamic-rack-opal-sprockets-server/config.ru
80
+ - examples/integrations/dynamic-roda-roda-sprockets/.gitignore
81
+ - examples/integrations/dynamic-roda-roda-sprockets/Gemfile
82
+ - examples/integrations/dynamic-roda-roda-sprockets/README.md
83
+ - examples/integrations/dynamic-roda-roda-sprockets/Rakefile
84
+ - examples/integrations/dynamic-roda-roda-sprockets/app.rb
85
+ - examples/integrations/dynamic-roda-roda-sprockets/app/application.rb
86
+ - examples/integrations/dynamic-roda-roda-sprockets/config.ru
87
+ - examples/integrations/dynamic-roda-tilt/.gitignore
88
+ - examples/integrations/dynamic-roda-tilt/Gemfile
89
+ - examples/integrations/dynamic-roda-tilt/README.md
90
+ - examples/integrations/dynamic-roda-tilt/Rakefile
91
+ - examples/integrations/dynamic-roda-tilt/app.rb
92
+ - examples/integrations/dynamic-roda-tilt/app/application.rb
93
+ - examples/integrations/dynamic-roda-tilt/config.ru
94
+ - examples/integrations/dynamic-sinatra-opal-sprockets-server/Gemfile
95
+ - examples/integrations/dynamic-sinatra-opal-sprockets-server/README.md
96
+ - examples/integrations/dynamic-sinatra-opal-sprockets-server/app/application.rb
97
+ - examples/integrations/dynamic-sinatra-opal-sprockets-server/config.ru
98
+ - examples/integrations/static-bash-opal-parser/.gitignore
99
+ - examples/integrations/static-bash-opal-parser/Gemfile
100
+ - examples/integrations/static-bash-opal-parser/README.md
101
+ - examples/integrations/static-bash-opal-parser/build.sh
102
+ - examples/integrations/static-bash-opal-parser/index.html
103
+ - examples/integrations/static-bash/.gitignore
104
+ - examples/integrations/static-bash/Gemfile
105
+ - examples/integrations/static-bash/README.md
106
+ - examples/integrations/static-bash/app/application.rb
107
+ - examples/integrations/static-bash/build.sh
108
+ - examples/integrations/static-bash/index.html
109
+ - examples/integrations/static-rake-guard/.gitignore
110
+ - examples/integrations/static-rake-guard/Gemfile
111
+ - examples/integrations/static-rake-guard/Guardfile
112
+ - examples/integrations/static-rake-guard/README.md
113
+ - examples/integrations/static-rake-guard/Rakefile
114
+ - examples/integrations/static-rake-guard/app/application.rb
115
+ - examples/integrations/static-rake-guard/index.html
116
+ - examples/integrations/static-rake/.gitignore
117
+ - examples/integrations/static-rake/Gemfile
118
+ - examples/integrations/static-rake/README.md
119
+ - examples/integrations/static-rake/Rakefile
120
+ - examples/integrations/static-rake/app/application.rb
121
+ - examples/integrations/static-rake/index.html
122
+ - examples/svg/.gitignore
123
+ - examples/svg/Gemfile
124
+ - examples/svg/README.md
125
+ - examples/svg/Rakefile
126
+ - examples/svg/app/application.rb
127
+ - examples/svg/index.html
128
+ - examples/svg/index.svg
55
129
  - index.html.erb
56
130
  - lib/opal-browser.rb
57
131
  - lib/opal/browser.rb
58
132
  - opal-browser.gemspec
59
133
  - opal/browser.rb
60
134
  - opal/browser/animation_frame.rb
135
+ - opal/browser/audio.rb
136
+ - opal/browser/audio/node.rb
137
+ - opal/browser/audio/param_schedule.rb
138
+ - opal/browser/blob.rb
61
139
  - opal/browser/canvas.rb
62
140
  - opal/browser/canvas/data.rb
63
141
  - opal/browser/canvas/gradient.rb
@@ -65,6 +143,7 @@ files:
65
143
  - opal/browser/canvas/text.rb
66
144
  - opal/browser/console.rb
67
145
  - opal/browser/cookies.rb
146
+ - opal/browser/crypto.rb
68
147
  - opal/browser/css.rb
69
148
  - opal/browser/css/declaration.rb
70
149
  - opal/browser/css/rule.rb
@@ -81,11 +160,18 @@ files:
81
160
  - opal/browser/dom/comment.rb
82
161
  - opal/browser/dom/document.rb
83
162
  - opal/browser/dom/document_fragment.rb
163
+ - opal/browser/dom/document_or_shadow_root.rb
84
164
  - opal/browser/dom/element.rb
85
165
  - opal/browser/dom/element/attributes.rb
166
+ - opal/browser/dom/element/button.rb
167
+ - opal/browser/dom/element/custom.rb
86
168
  - opal/browser/dom/element/data.rb
169
+ - opal/browser/dom/element/editable.rb
170
+ - opal/browser/dom/element/form.rb
171
+ - opal/browser/dom/element/iframe.rb
87
172
  - opal/browser/dom/element/image.rb
88
173
  - opal/browser/dom/element/input.rb
174
+ - opal/browser/dom/element/media.rb
89
175
  - opal/browser/dom/element/offset.rb
90
176
  - opal/browser/dom/element/position.rb
91
177
  - opal/browser/dom/element/scroll.rb
@@ -96,9 +182,11 @@ files:
96
182
  - opal/browser/dom/mutation_observer.rb
97
183
  - opal/browser/dom/node.rb
98
184
  - opal/browser/dom/node_set.rb
185
+ - opal/browser/dom/shadow_root.rb
99
186
  - opal/browser/dom/text.rb
100
187
  - opal/browser/effects.rb
101
188
  - opal/browser/event.rb
189
+ - opal/browser/event/all.rb
102
190
  - opal/browser/event/animation.rb
103
191
  - opal/browser/event/audio_processing.rb
104
192
  - opal/browser/event/base.rb
@@ -107,6 +195,7 @@ files:
107
195
  - opal/browser/event/close.rb
108
196
  - opal/browser/event/composition.rb
109
197
  - opal/browser/event/custom.rb
198
+ - opal/browser/event/data_transfer.rb
110
199
  - opal/browser/event/device_light.rb
111
200
  - opal/browser/event/device_motion.rb
112
201
  - opal/browser/event/device_orientation.rb
@@ -127,6 +216,7 @@ files:
127
216
  - opal/browser/event/ui.rb
128
217
  - opal/browser/event/wheel.rb
129
218
  - opal/browser/event_source.rb
219
+ - opal/browser/form_data.rb
130
220
  - opal/browser/history.rb
131
221
  - opal/browser/http.rb
132
222
  - opal/browser/http/binary.rb
@@ -137,14 +227,20 @@ files:
137
227
  - opal/browser/interval.rb
138
228
  - opal/browser/location.rb
139
229
  - opal/browser/navigator.rb
230
+ - opal/browser/polyfill/visual_viewport.rb
140
231
  - opal/browser/screen.rb
232
+ - opal/browser/setup/base.rb
233
+ - opal/browser/setup/full.rb
234
+ - opal/browser/setup/large.rb
235
+ - opal/browser/setup/mini.rb
236
+ - opal/browser/setup/traditional.rb
141
237
  - opal/browser/socket.rb
142
238
  - opal/browser/storage.rb
143
239
  - opal/browser/support.rb
144
240
  - opal/browser/utils.rb
145
241
  - opal/browser/version.rb
242
+ - opal/browser/visual_viewport.rb
146
243
  - opal/browser/window.rb
147
- - opal/browser/window/scroll.rb
148
244
  - opal/browser/window/size.rb
149
245
  - opal/browser/window/view.rb
150
246
  - opal/opal-browser.rb
@@ -154,22 +250,26 @@ files:
154
250
  - spec/dom/builder_spec.rb
155
251
  - spec/dom/document_spec.rb
156
252
  - spec/dom/element/attributes_spec.rb
253
+ - spec/dom/element/custom_spec.rb
254
+ - spec/dom/element/subclass_spec.rb
157
255
  - spec/dom/element_spec.rb
158
- - spec/dom/event_spec.rb
159
256
  - spec/dom/mutation_observer_spec.rb
160
257
  - spec/dom/node_set_spec.rb
161
258
  - spec/dom/node_spec.rb
162
259
  - spec/dom_spec.rb
163
260
  - spec/event_source_spec.rb
261
+ - spec/event_spec.rb
164
262
  - spec/history_spec.rb
165
263
  - spec/http_spec.rb
166
264
  - spec/immediate_spec.rb
167
265
  - spec/interval_spec.rb
168
266
  - spec/json2.js
267
+ - spec/native_cached_wrapper_spec.rb
169
268
  - spec/runner.rb
170
269
  - spec/sizzle.js
171
270
  - spec/socket_spec.rb
172
271
  - spec/spec_helper.rb
272
+ - spec/spec_helper_promise.rb.erb
173
273
  - spec/storage_spec.rb
174
274
  - spec/wgxpath.install.js
175
275
  - spec/window_spec.rb
@@ -177,7 +277,7 @@ homepage: http://github.com/opal/opal-browser
177
277
  licenses:
178
278
  - MIT
179
279
  metadata: {}
180
- post_install_message:
280
+ post_install_message:
181
281
  rdoc_options: []
182
282
  require_paths:
183
283
  - lib
@@ -192,9 +292,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
292
  - !ruby/object:Gem::Version
193
293
  version: '0'
194
294
  requirements: []
195
- rubyforge_project:
196
- rubygems_version: 2.4.5
197
- signing_key:
295
+ rubygems_version: 3.2.22
296
+ signing_key:
198
297
  specification_version: 4
199
298
  summary: Browser support for Opal.
200
299
  test_files:
@@ -204,22 +303,26 @@ test_files:
204
303
  - spec/dom/builder_spec.rb
205
304
  - spec/dom/document_spec.rb
206
305
  - spec/dom/element/attributes_spec.rb
306
+ - spec/dom/element/custom_spec.rb
307
+ - spec/dom/element/subclass_spec.rb
207
308
  - spec/dom/element_spec.rb
208
- - spec/dom/event_spec.rb
209
309
  - spec/dom/mutation_observer_spec.rb
210
310
  - spec/dom/node_set_spec.rb
211
311
  - spec/dom/node_spec.rb
212
312
  - spec/dom_spec.rb
213
313
  - spec/event_source_spec.rb
314
+ - spec/event_spec.rb
214
315
  - spec/history_spec.rb
215
316
  - spec/http_spec.rb
216
317
  - spec/immediate_spec.rb
217
318
  - spec/interval_spec.rb
218
319
  - spec/json2.js
320
+ - spec/native_cached_wrapper_spec.rb
219
321
  - spec/runner.rb
220
322
  - spec/sizzle.js
221
323
  - spec/socket_spec.rb
222
324
  - spec/spec_helper.rb
325
+ - spec/spec_helper_promise.rb.erb
223
326
  - spec/storage_spec.rb
224
327
  - spec/wgxpath.install.js
225
328
  - 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