under-os-ui 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +26 -0
  3. data/lib/assets/fontawesome-webfont.ttf +0 -0
  4. data/lib/assets/under-os.css +115 -0
  5. data/lib/core/kernel.rb +16 -0
  6. data/lib/under-os-ui.rb +6 -0
  7. data/lib/under_os/app.rb +26 -0
  8. data/lib/under_os/config.rb +25 -0
  9. data/lib/under_os/history.rb +53 -0
  10. data/lib/under_os/page.rb +178 -0
  11. data/lib/under_os/page/builder.rb +96 -0
  12. data/lib/under_os/page/layout.rb +43 -0
  13. data/lib/under_os/page/matcher.rb +128 -0
  14. data/lib/under_os/page/stylesheet.rb +67 -0
  15. data/lib/under_os/parser.rb +24 -0
  16. data/lib/under_os/parser/css.rb +37 -0
  17. data/lib/under_os/parser/html.rb +97 -0
  18. data/lib/under_os/ui.rb +3 -0
  19. data/lib/under_os/ui/alert.rb +52 -0
  20. data/lib/under_os/ui/button.rb +42 -0
  21. data/lib/under_os/ui/collection.rb +65 -0
  22. data/lib/under_os/ui/collection/cell.rb +21 -0
  23. data/lib/under_os/ui/collection/delegate.rb +70 -0
  24. data/lib/under_os/ui/collection/item.rb +32 -0
  25. data/lib/under_os/ui/collection/layout.rb +43 -0
  26. data/lib/under_os/ui/collection/styles.rb +15 -0
  27. data/lib/under_os/ui/div.rb +3 -0
  28. data/lib/under_os/ui/form.rb +60 -0
  29. data/lib/under_os/ui/icon.rb +61 -0
  30. data/lib/under_os/ui/icon/awesome.rb +376 -0
  31. data/lib/under_os/ui/icon/engine.rb +9 -0
  32. data/lib/under_os/ui/image.rb +31 -0
  33. data/lib/under_os/ui/input.rb +140 -0
  34. data/lib/under_os/ui/label.rb +21 -0
  35. data/lib/under_os/ui/locker.rb +42 -0
  36. data/lib/under_os/ui/navbar.rb +123 -0
  37. data/lib/under_os/ui/progress.rb +17 -0
  38. data/lib/under_os/ui/scroll.rb +102 -0
  39. data/lib/under_os/ui/select.rb +95 -0
  40. data/lib/under_os/ui/sidebar.rb +45 -0
  41. data/lib/under_os/ui/slider.rb +37 -0
  42. data/lib/under_os/ui/spinner.rb +23 -0
  43. data/lib/under_os/ui/style.rb +21 -0
  44. data/lib/under_os/ui/style/fonts.rb +56 -0
  45. data/lib/under_os/ui/style/margins.rb +164 -0
  46. data/lib/under_os/ui/style/outlining.rb +170 -0
  47. data/lib/under_os/ui/style/positioning.rb +183 -0
  48. data/lib/under_os/ui/switch.rb +26 -0
  49. data/lib/under_os/ui/textarea.rb +19 -0
  50. data/lib/under_os/ui/utils/animation.rb +101 -0
  51. data/lib/under_os/ui/utils/commons.rb +70 -0
  52. data/lib/under_os/ui/utils/dimensions.rb +37 -0
  53. data/lib/under_os/ui/utils/events.rb +210 -0
  54. data/lib/under_os/ui/utils/manipulation.rb +44 -0
  55. data/lib/under_os/ui/utils/position.rb +21 -0
  56. data/lib/under_os/ui/utils/size.rb +21 -0
  57. data/lib/under_os/ui/utils/styles.rb +89 -0
  58. data/lib/under_os/ui/utils/traversing.rb +44 -0
  59. data/lib/under_os/ui/utils/wrap.rb +77 -0
  60. data/lib/under_os/ui/view.rb +31 -0
  61. data/spec/assets/app.css +13 -0
  62. data/spec/assets/test.css +7 -0
  63. data/spec/assets/test.html +3 -0
  64. data/spec/assets/test.png +0 -0
  65. data/spec/assets/test_page.rb +2 -0
  66. data/spec/under_os/page/builder_spec.rb +128 -0
  67. data/spec/under_os/page/layout_spec.rb +18 -0
  68. data/spec/under_os/page/matcher_spec.rb +260 -0
  69. data/spec/under_os/page/stylesheet_spec.rb +83 -0
  70. data/spec/under_os/page_spec.rb +5 -0
  71. data/spec/under_os/parser/css_spec.rb +77 -0
  72. data/spec/under_os/parser/html_spec.rb +152 -0
  73. data/spec/under_os/parser_spec.rb +16 -0
  74. data/spec/under_os/ui/button_spec.rb +50 -0
  75. data/spec/under_os/ui/collection_spec.rb +19 -0
  76. data/spec/under_os/ui/div_spec.rb +24 -0
  77. data/spec/under_os/ui/form_spec.rb +156 -0
  78. data/spec/under_os/ui/icon_spec.rb +57 -0
  79. data/spec/under_os/ui/image_spec.rb +39 -0
  80. data/spec/under_os/ui/input_spec.rb +109 -0
  81. data/spec/under_os/ui/label_spec.rb +22 -0
  82. data/spec/under_os/ui/locker_spec.rb +31 -0
  83. data/spec/under_os/ui/progress_spec.rb +31 -0
  84. data/spec/under_os/ui/scroll_spec.rb +75 -0
  85. data/spec/under_os/ui/select_spec.rb +135 -0
  86. data/spec/under_os/ui/sidebar_spec.rb +35 -0
  87. data/spec/under_os/ui/slider_spec.rb +69 -0
  88. data/spec/under_os/ui/spinner_spec.rb +57 -0
  89. data/spec/under_os/ui/style/fonts_spec.rb +111 -0
  90. data/spec/under_os/ui/style/margins_spec.rb +106 -0
  91. data/spec/under_os/ui/style/outlining_spec.rb +101 -0
  92. data/spec/under_os/ui/style/positioning_spec.rb +69 -0
  93. data/spec/under_os/ui/style_spec.rb +19 -0
  94. data/spec/under_os/ui/switch_spec.rb +60 -0
  95. data/spec/under_os/ui/textarea_spec.rb +34 -0
  96. data/spec/under_os/ui/utils/commons_spec.rb +81 -0
  97. data/spec/under_os/ui/utils/events_spec.rb +87 -0
  98. data/spec/under_os/ui/utils/manipulation_spec.rb +130 -0
  99. data/spec/under_os/ui/utils/styles_spec.rb +140 -0
  100. data/spec/under_os/ui/utils/traversing_spec.rb +124 -0
  101. data/spec/under_os/ui/utils/wrap_spec.rb +69 -0
  102. data/spec/under_os/ui/view_spec.rb +39 -0
  103. data/under-os-ui.gemspec +23 -0
  104. metadata +216 -0
@@ -0,0 +1,111 @@
1
+ describe UnderOs::UI::Style::Fonts do
2
+ before do
3
+ @view = UnderOs::UI::View.new
4
+ end
5
+
6
+ describe 'fontFamily' do
7
+ before { @view = UnderOs::UI::Label.new(text: "Hello")}
8
+
9
+ it "should return the view's font family name" do
10
+ @view.style.fontFamily.should == @view._.font.familyName
11
+ end
12
+
13
+ it "allows to set a new family name" do
14
+ @view.style.fontFamily = "Chalkduster"
15
+ @view._.font.familyName.should == "Chalkduster"
16
+ end
17
+
18
+ it "should keep the original font-size" do
19
+ @view.style.fontSize = 20
20
+ @view.style.fontFamily = "Chalkduster"
21
+ @view._.font.pointSize.should == 20.0
22
+ end
23
+ end
24
+
25
+ describe "fontSize" do
26
+ before { @view = UnderOs::UI::Label.new(text: "Hello")}
27
+
28
+ it "returns the labels current font-size" do
29
+ @view.style.fontSize.should == @view._.font.pointSize
30
+ end
31
+
32
+ it "allows to the new font size" do
33
+ @view.style.fontSize = 40
34
+ @view._.font.pointSize.should == 40.0
35
+ end
36
+
37
+ it "keeps the original font family" do
38
+ @view.style.fontFamily = "Chalkduster"
39
+ @view.style.fontSize = 30
40
+ @view._.font.familyName.should == "Chalkduster"
41
+ end
42
+ end
43
+
44
+ describe 'text-align' do
45
+
46
+ it "should not crash when called on unsupported elements" do
47
+ @view.style.textAlign = 'left'
48
+ true.should == true
49
+ end
50
+
51
+ describe 'with a label' do
52
+ before do
53
+ @view = UnderOs::UI::Label.new(text: "Hello")
54
+ end
55
+
56
+ it "should allow to align the text to the left" do
57
+ @view.style.textAlign = 'left'
58
+ @view._.textAlignment.should == NSTextAlignmentLeft
59
+ @view.style.textAlign.should == 'left'
60
+ end
61
+
62
+ it "should allow to align the text to the right" do
63
+ @view.style.textAlign = 'right'
64
+ @view._.textAlignment.should == NSTextAlignmentRight
65
+ @view.style.textAlign.should == 'right'
66
+ end
67
+
68
+ it "should allow to align the text to the center" do
69
+ @view.style.textAlign = 'center'
70
+ @view._.textAlignment.should == NSTextAlignmentCenter
71
+ @view.style.textAlign.should == 'center'
72
+ end
73
+
74
+ # it "should allow to align the text to fill the size" do
75
+ # @view.style.textAlign = 'justify'
76
+ # @view._.textAlignment.should == NSTextAlignmentJustified
77
+ # @view.style.textAlign.should == 'justify'
78
+ # end
79
+ end
80
+
81
+ describe 'with a button' do
82
+ before do
83
+ @view = UnderOs::UI::Button.new(text: "Hello")
84
+ end
85
+
86
+ it "should allow to align the text to the left" do
87
+ @view.style.textAlign = 'left'
88
+ @view._.contentHorizontalAlignment.should == UIControlContentHorizontalAlignmentLeft
89
+ @view.style.textAlign.should == 'left'
90
+ end
91
+
92
+ it "should allow to align the text to the right" do
93
+ @view.style.textAlign = 'right'
94
+ @view._.contentHorizontalAlignment.should == UIControlContentHorizontalAlignmentRight
95
+ @view.style.textAlign.should == 'right'
96
+ end
97
+
98
+ it "should allow to align the text to the center" do
99
+ @view.style.textAlign = 'center'
100
+ @view._.contentHorizontalAlignment.should == UIControlContentHorizontalAlignmentCenter
101
+ @view.style.textAlign.should == 'center'
102
+ end
103
+
104
+ it "should allow to align the text to fill the size" do
105
+ @view.style.textAlign = 'justify'
106
+ @view._.contentHorizontalAlignment.should == UIControlContentHorizontalAlignmentFill
107
+ @view.style.textAlign.should == 'justify'
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,106 @@
1
+ describe UnderOs::UI::Style::Margins do
2
+ before do
3
+ @view = UnderOs::UI::View.new
4
+ @style = @view.style
5
+ end
6
+
7
+ describe '#display' do
8
+ it "should return :block by default" do
9
+ @view.style.display.should == :block
10
+ end
11
+
12
+ it "should understand the 'none' value" do
13
+ @view.style.display = 'none'
14
+ @view.hidden.should == true
15
+ @view.style.display.should == :none
16
+ end
17
+
18
+ it "should understand the 'block' value" do
19
+ @view.style.display = 'block'
20
+ @view.visible.should == true
21
+ @view.style.display.should == :block
22
+ end
23
+ end
24
+
25
+ describe '#margin' do
26
+ it "should return an array of zeros by default" do
27
+ @style.margin.should == [0, 0, 0, 0]
28
+ end
29
+
30
+ it 'should accept simple numbers' do
31
+ @style.margin = 10
32
+ @style.margin.should == [10, 10, 10, 10]
33
+ end
34
+
35
+ it "should accept arrays" do
36
+ @style.margin = [20]
37
+ @style.margin.should == [20, 20, 20, 20]
38
+ end
39
+
40
+ it "should accept two dim arrays" do
41
+ @style.margin = [10, 20]
42
+ @style.margin.should == [10, 20, 10, 20]
43
+ end
44
+
45
+ it "should accept four dims arrays" do
46
+ @style.margin = [10, 20, 30, 40]
47
+ @style.margin.should == [10, 20, 30, 40]
48
+ end
49
+
50
+ it "should accept single value strings" do
51
+ @style.margin = '10px'
52
+ @style.margin.should == [10, 10, 10, 10]
53
+ end
54
+
55
+ it "should accept two value strings" do
56
+ @style.margin = '10px 20'
57
+ @style.margin.should == [10, 20, 10, 20]
58
+ end
59
+
60
+ it "should accept the four values strings" do
61
+ @style.margin = '10px 20 30px 40'
62
+ @style.margin.should == [10, 20, 30, 40]
63
+ end
64
+ end
65
+
66
+ describe '#padding' do
67
+ it "should return an array of zeros by default" do
68
+ @style.padding.should == [0, 0, 0, 0]
69
+ end
70
+
71
+ it 'should accept simple numbers' do
72
+ @style.padding = 10
73
+ @style.padding.should == [10, 10, 10, 10]
74
+ end
75
+
76
+ it "should accept arrays" do
77
+ @style.padding = [20]
78
+ @style.padding.should == [20, 20, 20, 20]
79
+ end
80
+
81
+ it "should accept two dim arrays" do
82
+ @style.padding = [10, 20]
83
+ @style.padding.should == [10, 20, 10, 20]
84
+ end
85
+
86
+ it "should accept four dims arrays" do
87
+ @style.padding = [10, 20, 30, 40]
88
+ @style.padding.should == [10, 20, 30, 40]
89
+ end
90
+
91
+ it "should accept single value strings" do
92
+ @style.padding = '10px'
93
+ @style.padding.should == [10, 10, 10, 10]
94
+ end
95
+
96
+ it "should accept two value strings" do
97
+ @style.padding = '10px 20'
98
+ @style.padding.should == [10, 20, 10, 20]
99
+ end
100
+
101
+ it "should accept the four values strings" do
102
+ @style.padding = '10px 20 30px 40'
103
+ @style.padding.should == [10, 20, 30, 40]
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,101 @@
1
+ describe UnderOs::UI::Style::Outlining do
2
+ before do
3
+ @view = UnderOs::UI::View.new
4
+ @style = @view.style
5
+ end
6
+
7
+ describe '#borderRadius' do
8
+ it "should allow to set it" do
9
+ @style.borderRadius = 10
10
+ @style.borderRadius.should == 10
11
+ end
12
+
13
+ it "should change the view's layout property" do
14
+ @style.borderRadius = 20
15
+ @view._.clipsToBounds.should == true
16
+ @view._.layer.cornerRadius.should == 20
17
+ end
18
+ end
19
+
20
+ describe '#color' do
21
+ describe 'buttons' do
22
+ before do
23
+ @button = UnderOs::UI::Button.new
24
+ end
25
+
26
+ it "should allow to set the colors" do
27
+ @button.style.color = UIColor.redColor
28
+ @button._.titleColorForState(UIControlStateNormal).should == UIColor.redColor
29
+ end
30
+
31
+ it "should return the curent button color" do
32
+ @button.style.color = UIColor.yellowColor
33
+ @button.style.color.should == UIColor.yellowColor
34
+ end
35
+ end
36
+
37
+ describe 'label' do
38
+ before do
39
+ @label = UnderOs::UI::Label.new
40
+ end
41
+
42
+ it "should change the text color" do
43
+ @label.style.color = UIColor.redColor
44
+ @label._.textColor.should == UIColor.redColor
45
+ end
46
+
47
+ it "should return the current text color" do
48
+ @label.style.color = UIColor.yellowColor
49
+ @label.style.color.should == UIColor.yellowColor
50
+ end
51
+ end
52
+
53
+ describe 'spinner' do
54
+ before do
55
+ @spinner = UnderOs::UI::Spinner.new
56
+ end
57
+
58
+ it "should change the color of the spinner" do
59
+ @spinner.style.color = UIColor.redColor
60
+ @spinner._.color.should == UIColor.redColor
61
+ end
62
+
63
+ it "should return the current spinner color" do
64
+ @spinner.style.color = UIColor.yellowColor
65
+ @spinner.style.color.should == UIColor.yellowColor
66
+ end
67
+ end
68
+ end
69
+
70
+ describe '#boxShadow' do
71
+ it "recognizes the x, y values" do
72
+ @view.style.boxShadow = "1px 2px"
73
+ @view.style.boxShadow.should == "1.0 2.0 3.0 0.0 #ff0000"
74
+ end
75
+
76
+ it "recognizes the x, y, radius values" do
77
+ @view.style.boxShadow = "-1 -2 4"
78
+ @view.style.boxShadow.should == "-1.0 -2.0 4.0 0.0 #ff0000"
79
+ end
80
+
81
+ it "recognizes the x, y, radius, opacity values" do
82
+ @view.style.boxShadow = "4 5 6 7"
83
+ @view.style.boxShadow.should == "4.0 5.0 6.0 7.0 #ff0000"
84
+ end
85
+
86
+ it "recognizes the x, y, radius, opacity, color values" do
87
+ @view.style.boxShadow = "4 5 6 7 blue"
88
+ @view.style.boxShadow.should == "4.0 5.0 6.0 7.0 #ff0000"
89
+ end
90
+
91
+ it "recognizes the x, y, radius, color values" do
92
+ @view.style.boxShadow = "4 5 6 blue"
93
+ @view.style.boxShadow.should == "4.0 5.0 6.0 0.0 #ff0000"
94
+ end
95
+
96
+ it "recognizes the x, y, color values" do
97
+ @view.style.boxShadow = "4 5 green"
98
+ @view.style.boxShadow.should == "4.0 5.0 3.0 0.0 #ff0000"
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,69 @@
1
+ describe UnderOs::UI::Style::Positioning do
2
+ before do
3
+ @view = UnderOs::UI::View.new
4
+ @style = @view.style
5
+ end
6
+
7
+ describe '#contentWidth' do
8
+ before do
9
+ @view = UnderOs::UI::Scroll.new
10
+ end
11
+
12
+ it "should allow to set the content sizes" do
13
+ @view.style.contentWidth = 100
14
+ @view.style.contentHeight = 200
15
+
16
+ @view.style.contentWidth.should == 100
17
+ @view.style.contentHeight.should == 200
18
+ end
19
+ end
20
+
21
+ describe '#zIndex' do
22
+ it "should return 0 by default" do
23
+ @view.style.zIndex.should == 0
24
+ end
25
+
26
+ it "should allow to change it" do
27
+ @view.style.zIndex = 100
28
+ @view.style.zIndex.should == 100
29
+ end
30
+ end
31
+
32
+ describe 'scroller related styles' do
33
+ before do
34
+ @view = UnderOs::UI::Scroll.new
35
+ end
36
+
37
+ describe '#overflow' do
38
+ it "accepts 'hidden'" do
39
+ @view.style.overflow = :hidden
40
+ @view.style.overflowX.should == :hidden
41
+ @view.style.overflowY.should == :hidden
42
+ end
43
+
44
+ it "accepts 'scroll'" do
45
+ @view.style.overflow = :scroll
46
+ @view.style.overflowX.should == :scroll
47
+ @view.style.overflowY.should == :scroll
48
+ end
49
+
50
+ it "accepts 'x'" do
51
+ @view.style.overflow = 'x'
52
+ @view.style.overflowX.should == :scroll
53
+ @view.style.overflowY.should == :hidden
54
+ end
55
+
56
+ it "accepts 'y'" do
57
+ @view.style.overflow = 'y'
58
+ @view.style.overflowX.should == :hidden
59
+ @view.style.overflowY.should == :scroll
60
+ end
61
+
62
+ it "falls back to 'visible'" do
63
+ @view.style.overflow = 'weird stuff'
64
+ @view.style.overflowX.should == :scroll
65
+ @view.style.overflowY.should == :scroll
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,19 @@
1
+ describe UnderOs::UI::Style do
2
+ before do
3
+ @view = UnderOs::UI::View.new
4
+ @style = @view.style
5
+ end
6
+
7
+ it "should be an instance of UnderOs::UI::Style" do
8
+ @style.class.should == UnderOs::UI::Style
9
+ end
10
+
11
+ it "should incapsulate the Element's raw uiview object" do
12
+ @style.view.should === @view._
13
+ end
14
+
15
+ it "should always return the same object" do
16
+ @view.style.should === @style
17
+ end
18
+
19
+ end
@@ -0,0 +1,60 @@
1
+ describe UnderOs::UI::Switch do
2
+ before do
3
+ @switch = UnderOs::UI::Switch.new
4
+ end
5
+
6
+ it "inherits fromthe UnderOs::UI::Input" do
7
+ (UnderOs::UI::Switch < UnderOs::UI::Input).should == true
8
+ end
9
+
10
+ describe '#initialize' do
11
+ it "should spawn new switchs" do
12
+ @switch.class.should == UnderOs::UI::Switch
13
+ end
14
+
15
+ it "should wrap the UISwitch class" do
16
+ @switch._.class.should == UISwitch
17
+ end
18
+
19
+ it "should assign correct tag name" do
20
+ @switch.tagName.should == 'SWITCH'
21
+ end
22
+
23
+ it "should accept the 'value' option" do
24
+ switch = UnderOs::UI::Switch.new(value: 'smth')
25
+ switch.value.should == 'smth'
26
+ end
27
+
28
+ it "should accept the 'checked' option" do
29
+ switch = UnderOs::UI::Switch.new(checked: true)
30
+ switch.checked.should == true
31
+ end
32
+ end
33
+
34
+ describe '#value' do
35
+ it "should save the value correctly" do
36
+ @switch.value = 'something'
37
+ @switch.value.should == 'something'
38
+ end
39
+ end
40
+
41
+ describe '#checked' do
42
+ it "should allow to flip the switch on" do
43
+ @switch.checked = true
44
+ @switch._.on?.should == true
45
+ end
46
+
47
+ it "should allow to flip the switch off" do
48
+ @switch.checked = false
49
+ @switch._.on?.should == false
50
+ end
51
+
52
+ it "should return the state back correctly" do
53
+ @switch.checked = true
54
+ @switch.checked.should == true
55
+
56
+ @switch.checked = false
57
+ @switch.checked.should == false
58
+ end
59
+ end
60
+ end