under-os-ui 1.4.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.
- checksums.yaml +7 -0
- data/README.md +26 -0
- data/lib/assets/fontawesome-webfont.ttf +0 -0
- data/lib/assets/under-os.css +115 -0
- data/lib/core/kernel.rb +16 -0
- data/lib/under-os-ui.rb +6 -0
- data/lib/under_os/app.rb +26 -0
- data/lib/under_os/config.rb +25 -0
- data/lib/under_os/history.rb +53 -0
- data/lib/under_os/page.rb +178 -0
- data/lib/under_os/page/builder.rb +96 -0
- data/lib/under_os/page/layout.rb +43 -0
- data/lib/under_os/page/matcher.rb +128 -0
- data/lib/under_os/page/stylesheet.rb +67 -0
- data/lib/under_os/parser.rb +24 -0
- data/lib/under_os/parser/css.rb +37 -0
- data/lib/under_os/parser/html.rb +97 -0
- data/lib/under_os/ui.rb +3 -0
- data/lib/under_os/ui/alert.rb +52 -0
- data/lib/under_os/ui/button.rb +42 -0
- data/lib/under_os/ui/collection.rb +65 -0
- data/lib/under_os/ui/collection/cell.rb +21 -0
- data/lib/under_os/ui/collection/delegate.rb +70 -0
- data/lib/under_os/ui/collection/item.rb +32 -0
- data/lib/under_os/ui/collection/layout.rb +43 -0
- data/lib/under_os/ui/collection/styles.rb +15 -0
- data/lib/under_os/ui/div.rb +3 -0
- data/lib/under_os/ui/form.rb +60 -0
- data/lib/under_os/ui/icon.rb +61 -0
- data/lib/under_os/ui/icon/awesome.rb +376 -0
- data/lib/under_os/ui/icon/engine.rb +9 -0
- data/lib/under_os/ui/image.rb +31 -0
- data/lib/under_os/ui/input.rb +140 -0
- data/lib/under_os/ui/label.rb +21 -0
- data/lib/under_os/ui/locker.rb +42 -0
- data/lib/under_os/ui/navbar.rb +123 -0
- data/lib/under_os/ui/progress.rb +17 -0
- data/lib/under_os/ui/scroll.rb +102 -0
- data/lib/under_os/ui/select.rb +95 -0
- data/lib/under_os/ui/sidebar.rb +45 -0
- data/lib/under_os/ui/slider.rb +37 -0
- data/lib/under_os/ui/spinner.rb +23 -0
- data/lib/under_os/ui/style.rb +21 -0
- data/lib/under_os/ui/style/fonts.rb +56 -0
- data/lib/under_os/ui/style/margins.rb +164 -0
- data/lib/under_os/ui/style/outlining.rb +170 -0
- data/lib/under_os/ui/style/positioning.rb +183 -0
- data/lib/under_os/ui/switch.rb +26 -0
- data/lib/under_os/ui/textarea.rb +19 -0
- data/lib/under_os/ui/utils/animation.rb +101 -0
- data/lib/under_os/ui/utils/commons.rb +70 -0
- data/lib/under_os/ui/utils/dimensions.rb +37 -0
- data/lib/under_os/ui/utils/events.rb +210 -0
- data/lib/under_os/ui/utils/manipulation.rb +44 -0
- data/lib/under_os/ui/utils/position.rb +21 -0
- data/lib/under_os/ui/utils/size.rb +21 -0
- data/lib/under_os/ui/utils/styles.rb +89 -0
- data/lib/under_os/ui/utils/traversing.rb +44 -0
- data/lib/under_os/ui/utils/wrap.rb +77 -0
- data/lib/under_os/ui/view.rb +31 -0
- data/spec/assets/app.css +13 -0
- data/spec/assets/test.css +7 -0
- data/spec/assets/test.html +3 -0
- data/spec/assets/test.png +0 -0
- data/spec/assets/test_page.rb +2 -0
- data/spec/under_os/page/builder_spec.rb +128 -0
- data/spec/under_os/page/layout_spec.rb +18 -0
- data/spec/under_os/page/matcher_spec.rb +260 -0
- data/spec/under_os/page/stylesheet_spec.rb +83 -0
- data/spec/under_os/page_spec.rb +5 -0
- data/spec/under_os/parser/css_spec.rb +77 -0
- data/spec/under_os/parser/html_spec.rb +152 -0
- data/spec/under_os/parser_spec.rb +16 -0
- data/spec/under_os/ui/button_spec.rb +50 -0
- data/spec/under_os/ui/collection_spec.rb +19 -0
- data/spec/under_os/ui/div_spec.rb +24 -0
- data/spec/under_os/ui/form_spec.rb +156 -0
- data/spec/under_os/ui/icon_spec.rb +57 -0
- data/spec/under_os/ui/image_spec.rb +39 -0
- data/spec/under_os/ui/input_spec.rb +109 -0
- data/spec/under_os/ui/label_spec.rb +22 -0
- data/spec/under_os/ui/locker_spec.rb +31 -0
- data/spec/under_os/ui/progress_spec.rb +31 -0
- data/spec/under_os/ui/scroll_spec.rb +75 -0
- data/spec/under_os/ui/select_spec.rb +135 -0
- data/spec/under_os/ui/sidebar_spec.rb +35 -0
- data/spec/under_os/ui/slider_spec.rb +69 -0
- data/spec/under_os/ui/spinner_spec.rb +57 -0
- data/spec/under_os/ui/style/fonts_spec.rb +111 -0
- data/spec/under_os/ui/style/margins_spec.rb +106 -0
- data/spec/under_os/ui/style/outlining_spec.rb +101 -0
- data/spec/under_os/ui/style/positioning_spec.rb +69 -0
- data/spec/under_os/ui/style_spec.rb +19 -0
- data/spec/under_os/ui/switch_spec.rb +60 -0
- data/spec/under_os/ui/textarea_spec.rb +34 -0
- data/spec/under_os/ui/utils/commons_spec.rb +81 -0
- data/spec/under_os/ui/utils/events_spec.rb +87 -0
- data/spec/under_os/ui/utils/manipulation_spec.rb +130 -0
- data/spec/under_os/ui/utils/styles_spec.rb +140 -0
- data/spec/under_os/ui/utils/traversing_spec.rb +124 -0
- data/spec/under_os/ui/utils/wrap_spec.rb +69 -0
- data/spec/under_os/ui/view_spec.rb +39 -0
- data/under-os-ui.gemspec +23 -0
- metadata +216 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
describe UnderOs::UI::Textarea do
|
|
2
|
+
before do
|
|
3
|
+
@textarea = UnderOs::UI::Textarea.new
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
it "inherits fromthe UnderOs::UI::Input" do
|
|
7
|
+
(UnderOs::UI::Textarea < UnderOs::UI::Input).should == true
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe '#initialize' do
|
|
11
|
+
it "should spawn new textareas" do
|
|
12
|
+
@textarea.class.should == UnderOs::UI::Textarea
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should wrap the UITextView class" do
|
|
16
|
+
@textarea._.class.should == UITextView
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should assign correct tag name" do
|
|
20
|
+
@textarea.tagName.should == 'TEXTAREA'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should accept the 'value' option" do
|
|
24
|
+
textarea = UnderOs::UI::Textarea.new(value: 'boo hoo')
|
|
25
|
+
textarea.value.should == 'boo hoo'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should accept the 'keyboard' option" do
|
|
29
|
+
textarea = UnderOs::UI::Textarea.new(keyboard: 'email')
|
|
30
|
+
textarea.keyboard.should == :email
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
describe UnderOs::UI::Commons do
|
|
2
|
+
before do
|
|
3
|
+
@view = UnderOs::UI::View.new
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
describe '#id' do
|
|
7
|
+
it "should allow build views with ids" do
|
|
8
|
+
view = UnderOs::UI::View.new(id: 'my-id')
|
|
9
|
+
view.id.should == 'my-id'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should allow to change the id" do
|
|
13
|
+
view = UnderOs::UI::View.new(id: 'old-id')
|
|
14
|
+
view.id = 'new-id'
|
|
15
|
+
view.id.should == 'new-id'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe '#data' do
|
|
20
|
+
it "should allow to specify the data hash with views constructor" do
|
|
21
|
+
view = UnderOs::UI::View.new(data: {my: 'data'})
|
|
22
|
+
view.data.should == {my: 'data'}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should allow to assign the new data" do
|
|
26
|
+
view = UnderOs::UI::View.new(data: {old: 'data'})
|
|
27
|
+
view.data = {new: 'data'}
|
|
28
|
+
view.data.should == {new: 'data'}
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe '#hidden' do
|
|
33
|
+
it "shoudl return 'false' for visible views" do
|
|
34
|
+
@view.hidden.should == false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should return 'true' for hidden views" do
|
|
38
|
+
@view._.hidden = true
|
|
39
|
+
@view.hidden.should == true
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe '#visible' do
|
|
44
|
+
it "should return 'true' if the element's visible" do
|
|
45
|
+
@view.visible.should == true
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should return 'false' if the element's is hidden" do
|
|
49
|
+
@view._.hidden = true
|
|
50
|
+
@view.visible.should == false
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe '#hide' do
|
|
55
|
+
it "should hide elmements" do
|
|
56
|
+
@view.hide
|
|
57
|
+
@view.hidden.should == true
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe '#show' do
|
|
62
|
+
it "should show hidden elements" do
|
|
63
|
+
@view.hide
|
|
64
|
+
@view.show
|
|
65
|
+
@view.visible.should == true
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe '#toggle' do
|
|
70
|
+
it "should show an element if it's hidden" do
|
|
71
|
+
@view.hide
|
|
72
|
+
@view.toggle
|
|
73
|
+
@view.visible.should == true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should hide visible elements" do
|
|
77
|
+
@view.toggle
|
|
78
|
+
@view.hidden.should == true
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
class MyView < UnderOs::UI::View
|
|
2
|
+
attr_reader :args
|
|
3
|
+
|
|
4
|
+
def handler_with_event(event)
|
|
5
|
+
@args = [event]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def handler_without_event
|
|
9
|
+
@args = []
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe UnderOs::UI::Events do
|
|
14
|
+
before do
|
|
15
|
+
@view = UnderOs::UI::View.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "#on" do
|
|
19
|
+
before do
|
|
20
|
+
@tapped = false
|
|
21
|
+
@result = @view.on(:tap) { @tapped = true }
|
|
22
|
+
|
|
23
|
+
@view.emit(:tap)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "binds the event listener" do
|
|
27
|
+
@tapped.should == true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "returns the view object itself back" do
|
|
31
|
+
@result.should.be.same_as @view
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "#off" do
|
|
36
|
+
before do
|
|
37
|
+
@tapped = false
|
|
38
|
+
@view.on(:tap) { @tapped = true }
|
|
39
|
+
|
|
40
|
+
@result = @view.off(:tap)
|
|
41
|
+
|
|
42
|
+
@view.emit(:tap)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "un-binds the event listener" do
|
|
46
|
+
@tapped.should == false
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "returns the view object itself back" do
|
|
50
|
+
@result.should.be.same_as @view
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe "#emit" do
|
|
55
|
+
before do
|
|
56
|
+
@view.on(:tap) { |e| @event = e }
|
|
57
|
+
@view.emit(:tap, custom: 'param')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "emits an UI::Event" do
|
|
61
|
+
@event.class.should == UnderOs::UI::Events::Event
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "sets the event target to the view" do
|
|
65
|
+
@event.target.should.be.same_as @view
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe "named event handlers" do
|
|
70
|
+
before do
|
|
71
|
+
@view = MyView.new
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "allows to bind a method by name with an event listener" do
|
|
75
|
+
@view.on :tap, :handler_with_event
|
|
76
|
+
@view.emit(:tap)
|
|
77
|
+
@view.args.size.should == 1
|
|
78
|
+
@view.args[0].class.should == UnderOs::UI::Events::Event
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "allows to bind a method by name without an event argument" do
|
|
82
|
+
@view.on :tap, :handler_without_event
|
|
83
|
+
@view.emit(:tap)
|
|
84
|
+
@view.args.size.should == 0
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
describe UnderOs::UI::Manipulation do
|
|
2
|
+
before do
|
|
3
|
+
@v1 = UnderOs::UI::View.new
|
|
4
|
+
@v2 = UnderOs::UI::View.new
|
|
5
|
+
@v3 = UnderOs::UI::View.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe '#insert' do
|
|
9
|
+
it "should let insert views inside of each other" do
|
|
10
|
+
@v1.insert(@v2)
|
|
11
|
+
@v1.insert(@v3)
|
|
12
|
+
|
|
13
|
+
@v1.children.should == [@v2, @v3]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should let insert views on top of the subviews" do
|
|
17
|
+
@v1.insert(@v2)
|
|
18
|
+
@v1.insert(@v3, :top)
|
|
19
|
+
|
|
20
|
+
@v1.children.should == [@v3, @v2]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should return the view itself after each operation" do
|
|
24
|
+
@v1.insert(@v2).should == @v1
|
|
25
|
+
@v1.insert(@v3).should == @v1
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should accept lists of items" do
|
|
29
|
+
@v1.insert([@v2, @v3])
|
|
30
|
+
@v1.children.should == [@v2, @v3]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe '#append' do
|
|
35
|
+
it "should append other views into the current one" do
|
|
36
|
+
@v1.append(@v2)
|
|
37
|
+
@v1.append(@v3)
|
|
38
|
+
|
|
39
|
+
@v1.children.should == [@v2, @v3]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should allow to append several views as multiple arguments" do
|
|
43
|
+
@v1.append(@v2, @v3)
|
|
44
|
+
|
|
45
|
+
@v1.children.should == [@v2, @v3]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should return the view itself after each operation" do
|
|
49
|
+
@v1.append(@v2).should == @v1
|
|
50
|
+
@v1.append(@v3).should == @v1
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe '#prepend' do
|
|
55
|
+
it "should put all items on top" do
|
|
56
|
+
@v1.prepend(@v2)
|
|
57
|
+
@v1.prepend(@v3)
|
|
58
|
+
|
|
59
|
+
@v1.children.should == [@v3, @v2]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should accept several views as multiple arguments" do
|
|
63
|
+
@v1.prepend(@v2, @v3)
|
|
64
|
+
|
|
65
|
+
@v1.children.should == [@v3, @v2]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should return the view itself after each operation" do
|
|
69
|
+
@v1.prepend(@v2).should == @v1
|
|
70
|
+
@v1.prepend(@v3).should == @v1
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#insertTo' do
|
|
75
|
+
it "should allow to insert view into others" do
|
|
76
|
+
@v2.insertTo(@v1)
|
|
77
|
+
@v3.insertTo(@v1)
|
|
78
|
+
|
|
79
|
+
@v1.children.should == [@v2, @v3]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should allo to insert intems on top of the stack" do
|
|
83
|
+
@v1.insert(@v2)
|
|
84
|
+
@v3.insertTo(@v1, :top)
|
|
85
|
+
|
|
86
|
+
@v1.children.should == [@v3, @v2]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should return the view itself after each operation" do
|
|
90
|
+
@v2.insertTo(@v1).should == @v2
|
|
91
|
+
@v3.insertTo(@v1).should == @v3
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe '#remove' do
|
|
96
|
+
it "should allow to remove items from superviews" do
|
|
97
|
+
@v1.append(@v2, @v3)
|
|
98
|
+
|
|
99
|
+
@v2.remove
|
|
100
|
+
|
|
101
|
+
@v1.children.should == [@v3]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should not crash if there is no superviews" do
|
|
105
|
+
@v1.remove
|
|
106
|
+
@v2.remove
|
|
107
|
+
@v3.remove
|
|
108
|
+
true.should == true
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "should return the view iteslf back" do
|
|
112
|
+
@v1.remove.should == @v1
|
|
113
|
+
@v2.remove.should == @v2
|
|
114
|
+
@v3.remove.should == @v3
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe '#clear' do
|
|
119
|
+
before { @v1.append(@v2, @v3) }
|
|
120
|
+
|
|
121
|
+
it "should remove all the child elements" do
|
|
122
|
+
@v1.clear
|
|
123
|
+
@v1.children.should == []
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should return itself back as a reference" do
|
|
127
|
+
@v1.clear.should.be.same_as @v1
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
describe UnderOs::UI::Styles do
|
|
2
|
+
before do
|
|
3
|
+
@view = UnderOs::UI::View.new
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
describe '#style' do
|
|
7
|
+
it "should return a style handler for the view" do
|
|
8
|
+
style = @view.style
|
|
9
|
+
style.class.should == UnderOs::UI::Style
|
|
10
|
+
style.view.should.be.same_as @view._
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should cache the styles handler instance" do
|
|
14
|
+
@view.style.should.be.same_as @view.style
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should allow to set the styles as a hash" do
|
|
18
|
+
@view.style = {top: 10, left: 20}
|
|
19
|
+
@view.style.top.should == 10
|
|
20
|
+
@view.style.left.should == 20
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe '#classNames' do
|
|
25
|
+
it "should return an empty list by default" do
|
|
26
|
+
@view.classNames.should == []
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should allow to assign the lists" do
|
|
30
|
+
@view.classNames = ['one', 'two']
|
|
31
|
+
@view.classNames.should == ['one', 'two']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should remove dups on fly" do
|
|
35
|
+
@view.classNames = ['one', 'two', 'two', 'one']
|
|
36
|
+
@view.classNames.should == ['one', 'two']
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe '#className' do
|
|
41
|
+
it "should return an empty string by default" do
|
|
42
|
+
@view.className.should == ''
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should allow to assign new class names" do
|
|
46
|
+
@view.className = 'one two'
|
|
47
|
+
@view.className.should == 'one two'
|
|
48
|
+
@view.classNames.should == ['one', 'two']
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe '#hasClass' do
|
|
53
|
+
it "should return 'true' if the view has the class" do
|
|
54
|
+
@view.className = 'boo hoo'
|
|
55
|
+
@view.hasClass('boo').should == true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should return false if the view has no class" do
|
|
59
|
+
@view.className = 'boo hoo'
|
|
60
|
+
@view.hasClass('foo').should == false
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe '#addClass' do
|
|
65
|
+
it "should add the class name if it's missing" do
|
|
66
|
+
@view.addClass 'boo'
|
|
67
|
+
@view.classNames.should == ['boo']
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should not duplicat the class if it's already exists" do
|
|
71
|
+
@view.classNames = ['boo']
|
|
72
|
+
@view.addClass 'boo'
|
|
73
|
+
@view.classNames.should == ['boo']
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should return the view itself back" do
|
|
77
|
+
@view.addClass('boo').should === @view
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe '#removeClass' do
|
|
82
|
+
it "should remove the class name if it was set" do
|
|
83
|
+
@view.classNames = ['boo']
|
|
84
|
+
@view.removeClass('boo')
|
|
85
|
+
@view.classNames.should == []
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should return the view itself back" do
|
|
89
|
+
@view.removeClass('boo').should === @view
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe '#toggleClass' do
|
|
94
|
+
it "should add the class if it's missing" do
|
|
95
|
+
@view.toggleClass('test')
|
|
96
|
+
@view.classNames.should == ['test']
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "should remove the class if was set before" do
|
|
100
|
+
@view.classNames = ['test']
|
|
101
|
+
@view.toggleClass('test')
|
|
102
|
+
@view.classNames.should == []
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "should return the view itself back" do
|
|
106
|
+
@view.toggleClass('test').should === @view
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
describe '#radioClass' do
|
|
111
|
+
before do
|
|
112
|
+
@v1 = UnderOs::UI::View.new.insertTo(@view)
|
|
113
|
+
@v2 = UnderOs::UI::View.new.insertTo(@view)
|
|
114
|
+
@v3 = UnderOs::UI::View.new.insertTo(@view)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should set the class only on one element" do
|
|
118
|
+
@v2.radioClass('boo')
|
|
119
|
+
|
|
120
|
+
@v1.hasClass('boo').should == false
|
|
121
|
+
@v2.hasClass('boo').should == true
|
|
122
|
+
@v1.hasClass('boo').should == false
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "should automatically remove the class from any of the siblings" do
|
|
126
|
+
@v1.className = 'boo'
|
|
127
|
+
@v3.className = 'boo'
|
|
128
|
+
|
|
129
|
+
@v2.radioClass('boo')
|
|
130
|
+
|
|
131
|
+
@v1.hasClass('boo').should == false
|
|
132
|
+
@v2.hasClass('boo').should == true
|
|
133
|
+
@v1.hasClass('boo').should == false
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "should return the view itself back" do
|
|
137
|
+
@v2.radioClass('boo').should === @v2
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|