opal-browser 0.1.0.beta1 → 0.2.0.beta1

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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +60 -0
  3. data/.yardopts +1 -1
  4. data/Gemfile +7 -2
  5. data/LICENSE +19 -0
  6. data/README.md +74 -10
  7. data/config.ru +2 -1
  8. data/index.html.erb +22 -0
  9. data/opal-browser.gemspec +9 -11
  10. data/opal/browser.rb +1 -1
  11. data/opal/browser/animation_frame.rb +66 -9
  12. data/opal/browser/canvas.rb +72 -18
  13. data/opal/browser/canvas/data.rb +1 -1
  14. data/opal/browser/console.rb +3 -37
  15. data/opal/browser/cookies.rb +80 -24
  16. data/opal/browser/css/declaration.rb +0 -5
  17. data/opal/browser/{timeout.rb → delay.rb} +13 -13
  18. data/opal/browser/dom.rb +0 -2
  19. data/opal/browser/dom/attribute.rb +6 -0
  20. data/opal/browser/dom/builder.rb +4 -8
  21. data/opal/browser/dom/character_data.rb +43 -7
  22. data/opal/browser/dom/document.rb +13 -11
  23. data/opal/browser/dom/element.rb +127 -29
  24. data/opal/browser/dom/element/image.rb +23 -0
  25. data/opal/browser/dom/element/offset.rb +27 -10
  26. data/opal/browser/dom/element/scroll.rb +32 -12
  27. data/opal/browser/dom/element/size.rb +29 -0
  28. data/opal/browser/dom/event.rb +88 -75
  29. data/opal/browser/dom/event/animation.rb +16 -4
  30. data/opal/browser/dom/event/audio_processing.rb +6 -4
  31. data/opal/browser/dom/event/base.rb +229 -64
  32. data/opal/browser/dom/event/before_unload.rb +6 -4
  33. data/opal/browser/dom/event/clipboard.rb +6 -4
  34. data/opal/browser/dom/event/close.rb +16 -4
  35. data/opal/browser/dom/event/composition.rb +16 -4
  36. data/opal/browser/dom/event/custom.rb +43 -8
  37. data/opal/browser/dom/event/device_light.rb +6 -4
  38. data/opal/browser/dom/event/device_motion.rb +17 -4
  39. data/opal/browser/dom/event/device_orientation.rb +16 -4
  40. data/opal/browser/dom/event/device_proximity.rb +6 -4
  41. data/opal/browser/dom/event/drag.rb +34 -28
  42. data/opal/browser/dom/event/focus.rb +21 -5
  43. data/opal/browser/dom/event/gamepad.rb +33 -20
  44. data/opal/browser/dom/event/hash_change.rb +6 -4
  45. data/opal/browser/dom/event/keyboard.rb +45 -23
  46. data/opal/browser/dom/event/message.rb +28 -8
  47. data/opal/browser/dom/event/mouse.rb +26 -25
  48. data/opal/browser/dom/event/page_transition.rb +6 -4
  49. data/opal/browser/dom/event/pop_state.rb +16 -4
  50. data/opal/browser/dom/event/progress.rb +16 -4
  51. data/opal/browser/dom/event/sensor.rb +6 -4
  52. data/opal/browser/dom/event/storage.rb +6 -4
  53. data/opal/browser/dom/event/touch.rb +10 -19
  54. data/opal/browser/dom/event/ui.rb +19 -3
  55. data/opal/browser/dom/event/wheel.rb +2 -2
  56. data/opal/browser/dom/mutation_observer.rb +65 -5
  57. data/opal/browser/dom/node.rb +164 -59
  58. data/opal/browser/dom/node_set.rb +4 -0
  59. data/opal/browser/dom/text.rb +16 -1
  60. data/opal/browser/event_source.rb +5 -2
  61. data/opal/browser/history.rb +51 -15
  62. data/opal/browser/http.rb +22 -7
  63. data/opal/browser/http/headers.rb +5 -0
  64. data/opal/browser/http/request.rb +40 -10
  65. data/opal/browser/immediate.rb +123 -9
  66. data/opal/browser/interval.rb +8 -13
  67. data/opal/browser/location.rb +13 -3
  68. data/opal/browser/navigator.rb +9 -6
  69. data/opal/browser/screen.rb +31 -5
  70. data/opal/browser/socket.rb +8 -4
  71. data/opal/browser/storage.rb +118 -33
  72. data/opal/browser/support.rb +232 -0
  73. data/opal/browser/utils.rb +24 -6
  74. data/opal/browser/version.rb +1 -1
  75. data/opal/browser/window.rb +1 -2
  76. data/opal/browser/window/scroll.rb +21 -11
  77. data/opal/browser/window/size.rb +16 -6
  78. data/opal/browser/window/view.rb +23 -5
  79. data/spec/dom/builder_spec.rb +19 -19
  80. data/spec/dom/document_spec.rb +6 -6
  81. data/spec/dom/element_spec.rb +5 -5
  82. data/spec/dom/event_spec.rb +20 -20
  83. data/spec/dom/mutation_observer_spec.rb +5 -5
  84. data/spec/dom/node_spec.rb +39 -27
  85. data/spec/dom_spec.rb +10 -8
  86. data/spec/event_source_spec.rb +12 -12
  87. data/spec/history_spec.rb +24 -15
  88. data/spec/http_spec.rb +18 -17
  89. data/spec/immediate_spec.rb +9 -7
  90. data/spec/runner.rb +114 -0
  91. data/spec/socket_spec.rb +8 -8
  92. data/spec/spec_helper.rb +1 -0
  93. data/spec/storage_spec.rb +6 -6
  94. data/spec/wgxpath.install.js +49 -0
  95. data/spec/window_spec.rb +2 -2
  96. metadata +21 -54
  97. data/opal/browser/compatibility.rb +0 -59
  98. data/opal/browser/compatibility/animation_frame.rb +0 -93
  99. data/opal/browser/compatibility/dom/document/window.rb +0 -15
  100. data/opal/browser/compatibility/dom/element/css.rb +0 -15
  101. data/opal/browser/compatibility/dom/element/matches.rb +0 -31
  102. data/opal/browser/compatibility/dom/element/offset.rb +0 -20
  103. data/opal/browser/compatibility/dom/element/scroll.rb +0 -25
  104. data/opal/browser/compatibility/dom/element/style.rb +0 -15
  105. data/opal/browser/compatibility/dom/mutation_observer.rb +0 -47
  106. data/opal/browser/compatibility/http/request.rb +0 -15
  107. data/opal/browser/compatibility/immediate.rb +0 -107
  108. data/opal/browser/compatibility/window/scroll.rb +0 -27
  109. data/opal/browser/compatibility/window/size.rb +0 -13
  110. data/opal/browser/compatibility/window/view.rb +0 -13
  111. data/opal/browser/dom/compatibility.rb +0 -8
  112. data/opal/browser/http/compatibility.rb +0 -1
  113. data/opal/browser/window/compatibility.rb +0 -3
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Browser::DOM::Document do
4
4
  describe '#title' do
5
5
  it 'should get the document title' do
6
- $document.title.should be_kind_of(String)
6
+ expect($document.title).to be_a(String)
7
7
  end
8
8
  end
9
9
 
@@ -11,7 +11,7 @@ describe Browser::DOM::Document do
11
11
  it 'should set the document title' do
12
12
  old = $document.title
13
13
  $document.title = 'lol'
14
- $document.title.should == 'lol'
14
+ expect($document.title).to eq('lol')
15
15
  $document.title = old
16
16
  end
17
17
  end
@@ -22,19 +22,19 @@ describe Browser::DOM::Document do
22
22
  HTML
23
23
 
24
24
  it "should get element by id" do
25
- $document["lol"].should == `#{$document.to_n}.getElementById('lol')`
25
+ expect($document["lol"]).to eq(`document.getElementById('lol')`)
26
26
  end
27
27
 
28
28
  it "should get element by css" do
29
- $document["lol"].should == `#{$document.to_n}.getElementById('lol')`
29
+ expect($document["#lol"]).to eq(`document.getElementById('lol')`)
30
30
  end
31
31
 
32
32
  it "should get element by xpath" do
33
- $document["//*[@id='lol']"].should == `#{$document.to_n}.getElementById('lol')`
33
+ expect($document["//*[@id='lol']"]).to eq(`document.getElementById('lol')`)
34
34
  end
35
35
 
36
36
  it "should return nil if it can't find anything" do
37
- $document["doo-dah"].should be_nil
37
+ expect($document["doo-dah"]).to be_nil
38
38
  end
39
39
  end
40
40
  end
@@ -7,7 +7,7 @@ describe Browser::DOM::Element do
7
7
  HTML
8
8
 
9
9
  it 'gets the proper id' do
10
- $document["lol"].id.should == 'lol'
10
+ expect($document["lol"].id).to eq('lol')
11
11
  end
12
12
  end
13
13
 
@@ -20,11 +20,11 @@ describe Browser::DOM::Element do
20
20
  HTML
21
21
 
22
22
  it 'gives an empty array when no class is set' do
23
- $document["class-names-2"].class_names.should == []
23
+ expect($document["class-names-2"].class_names).to eq([])
24
24
  end
25
25
 
26
26
  it 'gives an array of class names' do
27
- $document["class-names-1"].class_names.should == %w[a b c]
27
+ expect($document["class-names-1"].class_names).to eq(%w[a b c])
28
28
  end
29
29
  end
30
30
 
@@ -36,11 +36,11 @@ describe Browser::DOM::Element do
36
36
  HTML
37
37
 
38
38
  it 'matches on class and id' do
39
- $document[:matches].matches?('#matches.not.me').should be_truthy
39
+ expect($document[:matches].matches?('#matches.not.me')).to be_truthy
40
40
  end
41
41
 
42
42
  it 'matches on class and name' do
43
- $document[:matches].first_element_child.matches?('span.yes').should be_truthy
43
+ expect($document[:matches].first_element_child.matches?('span.yes')).to be_truthy
44
44
  end
45
45
  end
46
46
  end
@@ -16,13 +16,13 @@ describe Browser::DOM::Event do
16
16
  count += 1
17
17
  end
18
18
 
19
- count.should == 0
19
+ expect(count).to eq(0)
20
20
  elem.trigger :click
21
- count.should == 1
21
+ expect(count).to eq(1)
22
22
  elem.trigger :click
23
- count.should == 2
23
+ expect(count).to eq(2)
24
24
  elem.trigger 'mouse:down'
25
- count.should == 2
25
+ expect(count).to eq(2)
26
26
  end
27
27
 
28
28
  it "listens for custom events" do
@@ -33,19 +33,19 @@ describe Browser::DOM::Event do
33
33
  count += 1
34
34
  end
35
35
 
36
- count.should == 0
36
+ expect(count).to eq(0)
37
37
  elem.trigger :huehue
38
- count.should == 1
38
+ expect(count).to eq(1)
39
39
  elem.trigger :huehue
40
- count.should == 2
40
+ expect(count).to eq(2)
41
41
  end
42
42
 
43
43
  async "passes an event to the handler" do
44
44
  elem = $document["event-spec"]
45
45
 
46
46
  elem.on :click do |event|
47
- run_async {
48
- event.should be_kind_of Browser::DOM::Event
47
+ async {
48
+ expect(event).to be_a(Browser::DOM::Event)
49
49
  }
50
50
  end
51
51
 
@@ -56,22 +56,22 @@ describe Browser::DOM::Event do
56
56
  elem = $document["event-spec"]
57
57
 
58
58
  elem.on :bazinga do |event, foo, bar, baz|
59
- run_async {
60
- foo.should == 1
61
- bar.should == 2
62
- baz.should == 3
59
+ async {
60
+ expect(foo).to eq(1)
61
+ expect(bar).to eq(2)
62
+ expect(baz).to eq(3)
63
63
  }
64
64
  end
65
65
 
66
66
  elem.trigger :bazinga, 1, 2, 3
67
67
  end
68
68
 
69
- async "works with deferred elements" do
69
+ async "works with delegated events" do
70
70
  elem = $document["event-spec"]
71
71
 
72
72
  elem.on :bazinga, 'span.nami' do
73
- run_async {
74
- true.should be_truthy
73
+ async {
74
+ expect(true).to be_truthy
75
75
  }
76
76
  end
77
77
 
@@ -97,11 +97,11 @@ describe Browser::DOM::Event do
97
97
  end
98
98
 
99
99
  elem.trigger :click
100
- count.should == 2
100
+ expect(count).to eq(2)
101
101
 
102
102
  elem.off :click
103
103
  elem.trigger :click
104
- count.should == 2
104
+ expect(count).to eq(2)
105
105
  end
106
106
 
107
107
  it "removes only the passed handler" do
@@ -117,11 +117,11 @@ describe Browser::DOM::Event do
117
117
  end
118
118
 
119
119
  elem.trigger :click
120
- count.should == 2
120
+ expect(count).to eq(2)
121
121
 
122
122
  cb.off
123
123
  elem.trigger :click
124
- count.should == 3
124
+ expect(count).to eq(3)
125
125
  end
126
126
  end
127
127
  end
@@ -9,8 +9,8 @@ describe Browser::DOM::MutationObserver do
9
9
 
10
10
  async 'notifies additions' do
11
11
  obs = Browser::DOM::MutationObserver.new {|mutations|
12
- run_async {
13
- mutations.first.added.first.name.should == 'DIV'
12
+ async {
13
+ expect(mutations.first.added.first.name).to eq('DIV')
14
14
  }
15
15
 
16
16
  obs.disconnect
@@ -23,8 +23,8 @@ describe Browser::DOM::MutationObserver do
23
23
 
24
24
  async 'notifies removals' do
25
25
  obs = Browser::DOM::MutationObserver.new {|mutations|
26
- run_async {
27
- mutations.first.removed.first.name.should == 'SPAN'
26
+ async {
27
+ expect(mutations.first.removed.first.name).to eq('SPAN')
28
28
  }
29
29
 
30
30
  obs.disconnect
@@ -34,4 +34,4 @@ describe Browser::DOM::MutationObserver do
34
34
 
35
35
  $document[:mutate].first_element_child.remove
36
36
  end
37
- end
37
+ end if Browser::DOM::MutationObserver.supported?
@@ -5,22 +5,22 @@ describe Browser::DOM::Node do
5
5
  html '<div id="lol"></div>'
6
6
 
7
7
  it 'should work when the other argument is the native counterpart' do
8
- $document["lol"].should == `document.getElementById("lol")`
8
+ expect($document["lol"]).to eq(`document.getElementById("lol")`)
9
9
  end
10
10
 
11
11
  it 'should work when the other argument is the same DOM::Node' do
12
12
  el = $document["lol"]
13
- el.should == el
13
+ expect(el).to eq(el)
14
14
  end
15
15
 
16
16
  it 'should work when the other argument is another DOM::Node' do
17
- $document["lol"].should == $document["lol"]
17
+ expect($document["lol"]).to eq($document["lol"])
18
18
  end
19
19
  end
20
20
 
21
21
  describe "#document?" do
22
22
  it "should be true for document" do
23
- $document.document?.should be_truthy
23
+ expect($document.document?).to be_truthy
24
24
  end
25
25
  end
26
26
 
@@ -28,7 +28,7 @@ describe Browser::DOM::Node do
28
28
  html '<div id="lol"></div>'
29
29
 
30
30
  it "should be true for <div id='lol'>" do
31
- $document["#lol"].element?.should be_truthy
31
+ expect($document["#lol"].element?).to be_truthy
32
32
  end
33
33
  end
34
34
 
@@ -36,7 +36,7 @@ describe Browser::DOM::Node do
36
36
  html '<div id="omg">lol</div>'
37
37
 
38
38
  it "should be true for the first child of <div id='lol'>" do
39
- $document["#omg"].child.text?.should be_truthy
39
+ expect($document["#omg"].child.text?).to be_truthy
40
40
  end
41
41
  end
42
42
 
@@ -48,13 +48,13 @@ describe Browser::DOM::Node do
48
48
  it 'should get all ancestors' do
49
49
  ancestors = $document["incest"].ancestors
50
50
 
51
- ancestors[0].name.should == 'STRONG'
52
- ancestors[1].name.should == 'SPAN'
53
- ancestors[2].name.should == 'DIV'
51
+ expect(ancestors[0].name).to eq('STRONG')
52
+ expect(ancestors[1].name).to eq('SPAN')
53
+ expect(ancestors[2].name).to eq('DIV')
54
54
  end
55
55
 
56
56
  it 'should get only the selected ancestors' do
57
- $document["incest"].ancestors('strong').length.should == 1
57
+ expect($document["incest"].ancestors('strong').length).to eq(1)
58
58
  end
59
59
  end
60
60
 
@@ -64,81 +64,93 @@ describe Browser::DOM::Node do
64
64
  HTML
65
65
 
66
66
  it 'gets the first child properly' do
67
- $document["test-1"].child.id.should == "test-2"
67
+ expect($document["test-1"].child.id).to eq('test-2')
68
68
  end
69
69
 
70
70
  it 'returns nil if there is no child' do
71
- $document["test-2"].child.should be_nil
71
+ expect($document["test-2"].child).to be_nil
72
72
  end
73
73
  end
74
74
 
75
75
  describe '#next' do
76
76
  html <<-HTML
77
77
  <div id="spec-1"></div>
78
+ a
78
79
  <div id="spec-2"></div>
80
+ b
79
81
  <div id="spec-3"></div>
82
+ c
80
83
  HTML
81
84
 
82
85
  it 'should return the next sibling' do
83
- $document["spec-1"].next.text?.should be_truthy
84
- $document["spec-1"].next.next.id.should == 'spec-2'
86
+ expect($document["spec-1"].next.text?).to be_truthy
87
+ expect($document["spec-1"].next.next.id).to eq('spec-2')
85
88
  end
86
89
 
87
90
  it 'should return nil when there is no next sibling' do
88
- $document["spec-3"].next.text?.should be_truthy
89
- $document["spec-3"].next.next.should be_nil
91
+ expect($document["spec-3"].next.text?).to be_truthy
92
+ expect($document["spec-3"].next.next).to be_nil
90
93
  end
91
94
  end
92
95
 
93
96
  describe '#next_element' do
94
97
  html <<-HTML
95
98
  <div id="spec-1"></div>
99
+ a
96
100
  <div id="spec-2"></div>
101
+ b
97
102
  <div id="spec-3"></div>
103
+ c
98
104
  HTML
99
105
 
100
106
  it 'should return the next element sibling' do
101
- $document["spec-1"].next_element.id.should == 'spec-2'
102
- $document["spec-2"].next_element.id.should == 'spec-3'
107
+ expect($document["spec-1"].next_element.id).to eq('spec-2')
108
+ expect($document["spec-2"].next_element.id).to eq('spec-3')
103
109
  end
104
110
 
105
111
  it 'should return nil when there is no next element sibling' do
106
- $document["spec-3"].next_element.should be_nil
112
+ expect($document["spec-3"].next_element).to be_nil
107
113
  end
108
114
  end
109
115
 
110
116
  describe '#previous' do
111
117
  html <<-HTML
118
+ a
112
119
  <div id="spec-1"></div>
120
+ b
113
121
  <div id="spec-2"></div>
122
+ c
114
123
  <div id="spec-3"></div>
115
124
  HTML
116
125
 
117
126
  it 'should return the previous sibling' do
118
- $document["spec-2"].previous.text?.should be_truthy
119
- $document["spec-2"].previous.previous.id.should == 'spec-1'
127
+ expect($document["spec-2"].previous.text?).to be_truthy
128
+ expect($document["spec-2"].previous.previous.id).to eq('spec-1')
120
129
  end
121
130
 
122
131
  it 'should return nil when there is no previous sibling' do
123
- $document["spec-1"].previous.text?.should be_truthy
124
- $document["spec-1"].previous.previous.should be_nil
132
+ expect($document["spec-1"].previous.text?).to be_truthy
133
+ expect($document["spec-1"].previous.previous).to be_nil
125
134
  end
126
135
  end
127
136
 
128
137
  describe '#previous_element' do
129
138
  html <<-HTML
139
+ a
130
140
  <div id="spec-1"></div>
141
+ b
131
142
  <div id="spec-2"></div>
143
+ c
132
144
  <div id="spec-3"></div>
133
145
  HTML
134
146
 
135
147
  it 'should return the previous element sibling' do
136
- $document["spec-2"].previous_element.id.should == 'spec-1'
137
- $document["spec-3"].previous_element.id.should == 'spec-2'
148
+ expect($document["spec-2"].previous_element.id).to eq('spec-1')
149
+ expect($document["spec-3"].previous_element.id).to eq('spec-2')
138
150
  end
139
151
 
140
152
  it 'should return nil when there is no previous element sibling' do
141
- $document["spec-1"].previous_element.should be_nil
153
+ expect($document["spec-1"].previous_element).to be_nil
142
154
  end
143
155
  end
144
156
 
@@ -148,7 +160,7 @@ describe Browser::DOM::Node do
148
160
  HTML
149
161
 
150
162
  it 'should get the whole text for elements' do
151
- $document["inner"].inner_text.should == "I like trains. And turtles."
163
+ expect($document["inner"].inner_text).to eq('I like trains. And turtles.')
152
164
  end
153
165
  end
154
166
  end
@@ -1,13 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Browser::DOM do
4
- html <<-HTML
5
- <div class="spec"></div>
6
- <div class="sock"></div>
7
- HTML
3
+ describe 'Kernel' do
4
+ describe '.DOM()' do
5
+ html <<-HTML
6
+ <div class="spec"></div>
7
+ <div class="sock"></div>
8
+ HTML
8
9
 
9
- it "parses the HTML" do
10
- $document['.spec'].element?.should be_truthy
11
- $document['.sock'].element?.should be_truthy
10
+ it "parses HTML" do
11
+ expect($document['.spec'].element?).to be_truthy
12
+ expect($document['.sock'].element?).to be_truthy
13
+ end
12
14
  end
13
15
  end
@@ -5,11 +5,11 @@ describe Browser::EventSource do
5
5
  async 'creates it' do
6
6
  Browser::EventSource.new '/events' do |es|
7
7
  es.on :open do |e|
8
- run_async {
9
- e.target.should be_kind_of Browser::EventSource
10
- }
11
-
12
8
  es.close
9
+
10
+ async {
11
+ expect(e.target).to be_a(Browser::EventSource)
12
+ }
13
13
  end
14
14
  end
15
15
  end
@@ -17,12 +17,12 @@ describe Browser::EventSource do
17
17
  async 'receives an unnamed event' do
18
18
  Browser::EventSource.new '/events' do |es|
19
19
  es.on :message do |e|
20
- run_async {
21
- e.data.should == 'lol'
22
- }
23
-
24
20
  e.off
25
21
  es.close
22
+
23
+ async {
24
+ expect(e.data).to eq('lol')
25
+ }
26
26
  end
27
27
  end
28
28
  end
@@ -30,12 +30,12 @@ describe Browser::EventSource do
30
30
  async 'receives a named event' do
31
31
  Browser::EventSource.new '/events' do |es|
32
32
  es.on :custom do |e|
33
- run_async {
34
- e.data.should == 'omg'
35
- }
36
-
37
33
  e.off
38
34
  es.close
35
+
36
+ async {
37
+ expect(e.data).to eq('omg')
38
+ }
39
39
  end
40
40
  end
41
41
  end