opal-browser 0.1.0.beta1 → 0.2.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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