opal-jquery 0.0.1
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.
- data/.gitignore +5 -0
- data/.travis.yml +8 -0
- data/Gemfile +11 -0
- data/LICENSE +19 -0
- data/README.md +297 -0
- data/Rakefile +57 -0
- data/docs/post.html +3 -0
- data/docs/pre.html +18 -0
- data/lib/opal-jquery.rb +4 -0
- data/lib/opal-jquery/document.rb +47 -0
- data/lib/opal-jquery/element.rb +380 -0
- data/lib/opal-jquery/event.rb +39 -0
- data/lib/opal-jquery/http.rb +113 -0
- data/lib/opal-jquery/kernel.rb +6 -0
- data/lib/opal-jquery/local_storage.rb +25 -0
- data/opal-jquery.gemspec +16 -0
- data/spec/data/simple.txt +1 -0
- data/spec/data/user.json +4 -0
- data/spec/document_spec.rb +91 -0
- data/spec/element/after_spec.rb +33 -0
- data/spec/element/animations_spec.rb +50 -0
- data/spec/element/append_spec.rb +36 -0
- data/spec/element/append_to_spec.rb +25 -0
- data/spec/element/at_spec.rb +41 -0
- data/spec/element/attributes_spec.rb +202 -0
- data/spec/element/before_spec.rb +33 -0
- data/spec/element/class_name_spec.rb +82 -0
- data/spec/element/css_spec.rb +52 -0
- data/spec/element/display_spec.rb +45 -0
- data/spec/element/inspect_spec.rb +26 -0
- data/spec/element/length_spec.rb +5 -0
- data/spec/element/traversing_spec.rb +150 -0
- data/spec/element_spec.rb +107 -0
- data/spec/event_spec.rb +66 -0
- data/spec/http_spec.rb +49 -0
- data/spec/index.html +13 -0
- data/spec/local_storage_spec.rb +51 -0
- data/spec/spec_helper.rb +1 -0
- data/vendor/jquery.js +4 -0
- metadata +105 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
describe "Element#before" do
|
2
|
+
before do
|
3
|
+
@div = Document.parse <<-HTML
|
4
|
+
<div id="before-spec">
|
5
|
+
<div id="some-header" class="kapow"></div>
|
6
|
+
<div id="foo" class="before-spec-first"></div>
|
7
|
+
<div id="bar" class="before-spec-first"></div>
|
8
|
+
<div id="baz"></div>
|
9
|
+
</div>
|
10
|
+
HTML
|
11
|
+
|
12
|
+
@div.append_to_body
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
@div.remove
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should insert the given html string before each element" do
|
20
|
+
el = Document['.before-spec-first']
|
21
|
+
el.size.should == 2
|
22
|
+
|
23
|
+
el.before '<p class="woosh"></p>'
|
24
|
+
|
25
|
+
Document['#foo'].prev.class_name.should == "woosh"
|
26
|
+
Document['#bar'].prev.class_name.should == "woosh"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should insert the given DOM element before this element" do
|
30
|
+
Document['#baz'].before Document['#some-header']
|
31
|
+
Document['#baz'].prev.id.should == "some-header"
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
describe "Element#class_name" do
|
2
|
+
before do
|
3
|
+
@div = Document.parse <<-HTML
|
4
|
+
<div id="class-name-spec">
|
5
|
+
<div id="foo" class="whiskey"></div>
|
6
|
+
<div id="bar" class="scotch brandy"></div>
|
7
|
+
<div id="baz" class=""></div>
|
8
|
+
<div id="buz"></div>
|
9
|
+
|
10
|
+
<div class="red dark"></div>
|
11
|
+
<div class="red light"></div>
|
12
|
+
</div>
|
13
|
+
HTML
|
14
|
+
|
15
|
+
@div.append_to_body
|
16
|
+
end
|
17
|
+
|
18
|
+
after do
|
19
|
+
@div.remove
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return the elements' class name" do
|
23
|
+
Document.id('foo').class_name.should == "whiskey"
|
24
|
+
Document.id('bar').class_name.should == "scotch brandy"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return an empty string for element with no class name" do
|
28
|
+
Document.id('baz').class_name.should == ""
|
29
|
+
Document.id('buz').class_name.should == ""
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return class name for first element if more than 1 in set" do
|
33
|
+
Document.find('.red').class_name.should == "red dark"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return an empty string for instances with no elements" do
|
37
|
+
Document.find('.no-elements').class_name.should == ""
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "Element#class_name=" do
|
42
|
+
before do
|
43
|
+
@div = Document.parse <<-HTML
|
44
|
+
<div id="class-name-set-spec">
|
45
|
+
<div id="foo" class=""></div>
|
46
|
+
<div id="bar" class="oranges"></div>
|
47
|
+
|
48
|
+
<div id="baz" class="banana"></div>
|
49
|
+
<div id="buz" class="banana"></div>
|
50
|
+
</div>
|
51
|
+
HTML
|
52
|
+
|
53
|
+
@div.append_to_body
|
54
|
+
end
|
55
|
+
|
56
|
+
after do
|
57
|
+
@div.remove
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should set the given class name on the element" do
|
61
|
+
Document.id('foo').class_name = "apples"
|
62
|
+
Document.id('foo').class_name.should == "apples"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should replace any existing class name" do
|
66
|
+
bar = Document.id('bar')
|
67
|
+
bar.class_name.should == "oranges"
|
68
|
+
|
69
|
+
bar.class_name = "lemons"
|
70
|
+
bar.class_name.should == "lemons"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should set the class name on all elements in instance" do
|
74
|
+
el = Document.find '.banana'
|
75
|
+
el.length.should == 2
|
76
|
+
|
77
|
+
el.class_name = "pop"
|
78
|
+
|
79
|
+
Document.id('baz').class_name.should == "pop"
|
80
|
+
Document.id('buz').class_name.should == "pop"
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
describe "Element#css" do
|
2
|
+
before do
|
3
|
+
@div = Document.parse <<-HTML
|
4
|
+
<div id="css-spec">
|
5
|
+
<div id="foo" style="background-color:rgb(15,99,30); color:;"></div>
|
6
|
+
<div id="bar"></div>
|
7
|
+
<div id="hash"></div>
|
8
|
+
</div>
|
9
|
+
HTML
|
10
|
+
|
11
|
+
@div.append_to_body
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
@div.remove
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "with a given name" do
|
19
|
+
it "returns the value of the CSS property for the given name" do
|
20
|
+
Document.id('foo').css('backgroundColor').should be_kind_of(String)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return an empty string when no style property is defined for name" do
|
24
|
+
Document.id('foo').css('color').should be_kind_of(String)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "with a name and value" do
|
29
|
+
it "should set the CSS property to the given value" do
|
30
|
+
Document.id('bar').css('backgroundColor', 'blue')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns self" do
|
34
|
+
bar = Document.id('bar')
|
35
|
+
bar.css("background", "green").should equal(bar)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "with a set of names and values" do
|
40
|
+
it "should set the properties" do
|
41
|
+
hash = Document.id("hash")
|
42
|
+
hash.css(:width => "100px", :height => "200px")
|
43
|
+
hash.css("width").should be_kind_of(String)
|
44
|
+
hash.css("height").should be_kind_of(String)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return self" do
|
48
|
+
hash = Document.id("hash")
|
49
|
+
hash.css(:border => "1px solid #000").should equal(hash)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
describe "Element display methods" do
|
2
|
+
before do
|
3
|
+
@div = Document.parse <<-HTML
|
4
|
+
<div id="css-spec">
|
5
|
+
<div id="shown"></div>
|
6
|
+
<div id="hidden" style="display: none"></div>
|
7
|
+
</div>
|
8
|
+
HTML
|
9
|
+
|
10
|
+
@div.append_to_body
|
11
|
+
end
|
12
|
+
|
13
|
+
after do
|
14
|
+
@div.remove
|
15
|
+
end
|
16
|
+
|
17
|
+
it "hides an element" do
|
18
|
+
element = Document.id('shown')
|
19
|
+
element.css('display').should == 'block'
|
20
|
+
element.hide
|
21
|
+
element.css('display').should == 'none'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "shows an element" do
|
25
|
+
element = Document.id('hidden')
|
26
|
+
element.css('display').should == 'none'
|
27
|
+
element.show
|
28
|
+
element.css('display').should == 'block'
|
29
|
+
end
|
30
|
+
|
31
|
+
it "toggles on a hidden element" do
|
32
|
+
element = Document.id('hidden')
|
33
|
+
element.css('display').should == 'none'
|
34
|
+
element.toggle
|
35
|
+
element.css('display').should == 'block'
|
36
|
+
end
|
37
|
+
|
38
|
+
it "toggles off a displayed element" do
|
39
|
+
element = Document.id('shown')
|
40
|
+
element.css('display').should == 'block'
|
41
|
+
element.toggle
|
42
|
+
element.css('display').should == 'none'
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
describe "Element#inspect" do
|
2
|
+
before do
|
3
|
+
@div = Document.parse <<-HTML
|
4
|
+
<div id="insert-spec">
|
5
|
+
<div id="foo"></div>
|
6
|
+
<div class="bar"></div>
|
7
|
+
<p id="lol" class="bar"></div>
|
8
|
+
</div>
|
9
|
+
HTML
|
10
|
+
|
11
|
+
@div.append_to_body
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
@div.remove
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return a string representation of the elements" do
|
19
|
+
Document.id('foo').inspect.should == '[<div id="foo">]'
|
20
|
+
Document.find('.bar').inspect.should == '[<div class="bar">, <p id="lol" class="bar">]'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return '[]' when called on empty element set" do
|
24
|
+
Document['.inspect-spec-none'].inspect.should == '[]'
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
describe Element do
|
2
|
+
before do
|
3
|
+
@div = Document.parse <<-HTML
|
4
|
+
<div id="traversing-spec">
|
5
|
+
<div id="foo" class="traversing-class"></div>
|
6
|
+
<div id="bar" class="traversing-class">
|
7
|
+
<p>Hey</p>
|
8
|
+
<p>There</p>
|
9
|
+
</div>
|
10
|
+
<div id="baz" class="main-content-wrapper">
|
11
|
+
<div><p></p></div>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
HTML
|
15
|
+
|
16
|
+
@div.append_to_body
|
17
|
+
end
|
18
|
+
|
19
|
+
after do
|
20
|
+
@div.remove
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#children' do
|
24
|
+
it "should return a new collection of all direct children of element" do
|
25
|
+
Document.id('foo').children.size.should == 0
|
26
|
+
Document.id('bar').children.size.should == 2
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should only return direct children" do
|
30
|
+
c = Document.id('baz').children
|
31
|
+
c.size.should == 1
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#each' do
|
36
|
+
it "should loop over each element passing element to block" do
|
37
|
+
result = []
|
38
|
+
Document.find('.traversing-class').each do |e|
|
39
|
+
result << e.id
|
40
|
+
end
|
41
|
+
|
42
|
+
result.should == ['foo', 'bar']
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should not call the block with an empty element set" do
|
46
|
+
Document.find('.bad-each-class').each do
|
47
|
+
raise "shouldn't get here"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#find' do
|
53
|
+
it "should match all elements within scope of receiver" do
|
54
|
+
foo = Document['#traversing-spec']
|
55
|
+
foo.find('.traversing-class').size.should == 2
|
56
|
+
foo.find('.main-content-wrapper').size.should == 1
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should return an empty collection if there are no matching elements" do
|
60
|
+
bar = Document['#bar']
|
61
|
+
bar.find('.some-non-existant-class').size.should == 0
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#first' do
|
66
|
+
it "should return the first element in the receiver" do
|
67
|
+
Document.find('.traversing-class').first.id.should == 'foo'
|
68
|
+
Document.id('baz').first.id.should == 'baz'
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return nil when receiver has no elements" do
|
72
|
+
Document.find('.some-random-class').first.should == nil
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "Element#next" do
|
78
|
+
before do
|
79
|
+
@div = Document.parse <<-HTML
|
80
|
+
<div id="next-spec">
|
81
|
+
<div id="foo"></div>
|
82
|
+
<div id="bar"></div>
|
83
|
+
</div>
|
84
|
+
HTML
|
85
|
+
|
86
|
+
@div.append_to_body
|
87
|
+
end
|
88
|
+
|
89
|
+
after do
|
90
|
+
@div.remove
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should return the next sibling" do
|
94
|
+
Document.id('foo').next.id.should == "bar"
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should return an empty instance when no next element" do
|
98
|
+
Document.id('bar').next.size.should == 0
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "Element#parent" do
|
103
|
+
before do
|
104
|
+
@div = Document.parse <<-HTML
|
105
|
+
<div id="foo">
|
106
|
+
<div id="bar">
|
107
|
+
<div id="baz"></div>
|
108
|
+
<div id="buz"></div>
|
109
|
+
</div>
|
110
|
+
</div>
|
111
|
+
HTML
|
112
|
+
|
113
|
+
@div.append_to_body
|
114
|
+
end
|
115
|
+
|
116
|
+
after do
|
117
|
+
@div.remove
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should return the parent of the element" do
|
121
|
+
Document.id('bar').parent.id.should == "foo"
|
122
|
+
Document.id('baz').parent.id.should == "bar"
|
123
|
+
Document.id('buz').parent.id.should == "bar"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "Element#succ" do
|
128
|
+
before do
|
129
|
+
@div = Document.parse <<-HTML
|
130
|
+
<div id="succ-spec">
|
131
|
+
<div id="foo"></div>
|
132
|
+
<div id="bar"></div>
|
133
|
+
</div>
|
134
|
+
HTML
|
135
|
+
|
136
|
+
@div.append_to_body
|
137
|
+
end
|
138
|
+
|
139
|
+
after do
|
140
|
+
@div.remove
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should return the next sibling" do
|
144
|
+
Document.id('foo').succ.id.should == "bar"
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should return an empty instance when no next element" do
|
148
|
+
Document.id('bar').succ.size.should == 0
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
describe Element do
|
2
|
+
before do
|
3
|
+
@div = Document.parse <<-HTML
|
4
|
+
<div id="on-spec">
|
5
|
+
<div id="foo">
|
6
|
+
<div id="bar" class="apples"></div>
|
7
|
+
</div>
|
8
|
+
<div id="baz"></div>
|
9
|
+
</div>
|
10
|
+
HTML
|
11
|
+
|
12
|
+
@div.append_to_body
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
@div.remove
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#on' do
|
20
|
+
it 'adds an event listener onto the elements' do
|
21
|
+
count = 0
|
22
|
+
foo = Document['#foo']
|
23
|
+
|
24
|
+
foo.on(:click) { count += 1 }
|
25
|
+
count.should == 0
|
26
|
+
foo.trigger(:click)
|
27
|
+
count.should == 1
|
28
|
+
foo.trigger(:click)
|
29
|
+
count.should == 2
|
30
|
+
foo.trigger(:mousedown)
|
31
|
+
count.should == 2
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'takes an optional second parameter to delegate events' do
|
35
|
+
count = 0
|
36
|
+
foo = Document['#foo']
|
37
|
+
bar = Document['#bar']
|
38
|
+
|
39
|
+
foo.on(:click, '#bar') { count += 1 }
|
40
|
+
count.should == 0
|
41
|
+
foo.trigger(:click)
|
42
|
+
count.should == 0
|
43
|
+
bar.trigger(:click)
|
44
|
+
count.should == 1
|
45
|
+
bar.trigger(:click)
|
46
|
+
count.should == 2
|
47
|
+
bar.trigger(:mousedown)
|
48
|
+
count.should == 2
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'can listen for non-browser events' do
|
52
|
+
count = 0
|
53
|
+
foo = Document['#foo']
|
54
|
+
|
55
|
+
foo.on('opal-is-mega-lolz') { count += 1 }
|
56
|
+
count.should == 0
|
57
|
+
foo.trigger('opal-is-mega-lolz')
|
58
|
+
count.should == 1
|
59
|
+
foo.trigger('opal-is-mega-lolz')
|
60
|
+
count.should == 2
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'returns the given handler' do
|
64
|
+
handler = proc {}
|
65
|
+
Document['#foo'].on(:click, &handler).should == handler
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'has an Event instance passed to the handler' do
|
69
|
+
foo = Document['#foo']
|
70
|
+
foo.on :click do |evt|
|
71
|
+
evt.should be_kind_of(Event)
|
72
|
+
end
|
73
|
+
foo.trigger(:click)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '#off' do
|
78
|
+
it 'removes event handlers that were added using #on' do
|
79
|
+
count = 0
|
80
|
+
foo = Document['#foo']
|
81
|
+
|
82
|
+
handler = foo.on(:click) { count += 1 }
|
83
|
+
count.should == 0
|
84
|
+
foo.trigger(:click)
|
85
|
+
count.should == 1
|
86
|
+
foo.off(:click, handler)
|
87
|
+
count.should == 1
|
88
|
+
foo.trigger(:click)
|
89
|
+
count.should == 1
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'removes event handlers added with a selector' do
|
93
|
+
count = 0
|
94
|
+
foo = Document['#foo']
|
95
|
+
bar = Document['#bar']
|
96
|
+
|
97
|
+
handler = foo.on(:click, '#bar') { count += 1 }
|
98
|
+
count.should == 0
|
99
|
+
bar.trigger(:click)
|
100
|
+
count.should == 1
|
101
|
+
foo.off(:click, '#bar', handler)
|
102
|
+
count.should == 1
|
103
|
+
bar.trigger(:click)
|
104
|
+
count.should == 1
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|