semantic_navigation 0.0.14 → 0.1.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.
- data/Changelog.md +6 -1
- data/README.md +3 -3
- data/lib/generators/semantic_navigation/breadcrumb_renderer/breadcrumb_renderer_generator.rb +19 -0
- data/lib/generators/semantic_navigation/breadcrumb_renderer/templates/breadcrumb_renderer.rb +62 -0
- data/lib/generators/semantic_navigation/install/install_generator.rb +2 -2
- data/lib/generators/semantic_navigation/install/templates/semantic_navigation.rb +5 -5
- data/lib/generators/semantic_navigation/list_renderer/list_renderer_generator.rb +19 -0
- data/lib/generators/semantic_navigation/list_renderer/templates/list_renderer.rb +64 -0
- data/lib/semantic_navigation/configuration.rb +10 -10
- data/lib/semantic_navigation/core.rb +8 -4
- data/lib/semantic_navigation/core/base.rb +8 -8
- data/lib/semantic_navigation/core/leaf.rb +5 -33
- data/lib/semantic_navigation/core/name_methods.rb +24 -0
- data/lib/semantic_navigation/core/navigation.rb +23 -12
- data/lib/semantic_navigation/core/node.rb +6 -34
- data/lib/semantic_navigation/core/url_methods.rb +24 -0
- data/lib/semantic_navigation/railtie.rb +17 -7
- data/lib/semantic_navigation/renderers/acts_as_breadcrumb.rb +8 -8
- data/lib/semantic_navigation/renderers/acts_as_list.rb +34 -33
- data/lib/semantic_navigation/renderers/bread_crumb.rb +5 -5
- data/lib/semantic_navigation/renderers/list.rb +9 -9
- data/lib/semantic_navigation/renderers/render_helpers.rb +19 -32
- data/lib/semantic_navigation/twitter_bootstrap/breadcrumb.rb +8 -8
- data/lib/semantic_navigation/twitter_bootstrap/list.rb +15 -15
- data/lib/semantic_navigation/twitter_bootstrap/tabs.rb +14 -14
- data/lib/semantic_navigation/version.rb +1 -1
- data/spec/lib/semantic_navigation/configuration_spec.rb +50 -42
- data/spec/lib/semantic_navigation/core/navigation_spec.rb +58 -0
- data/spec/lib/semantic_navigation/helper_methods_spec.rb +31 -31
- data/spec/lib/semantic_navigation/twitter_bootstrap/breadcrumb_spec.rb +46 -46
- data/spec/lib/semantic_navigation/twitter_bootstrap/list_spec.rb +49 -49
- data/spec/lib/semantic_navigation_spec.rb +4 -1
- metadata +14 -9
- data/spec/lib/semantic_navigation/custom_renderer.rb +0 -3
@@ -10,7 +10,7 @@ describe SemanticNavigation::HelperMethods do
|
|
10
10
|
|
11
11
|
describe "#navigation_for" do
|
12
12
|
|
13
|
-
before :each do
|
13
|
+
before :each do
|
14
14
|
SemanticNavigation::Configuration.stub!(:new).and_return (@config_instance = mock)
|
15
15
|
end
|
16
16
|
|
@@ -41,43 +41,43 @@ describe SemanticNavigation::HelperMethods do
|
|
41
41
|
|
42
42
|
it 'should return name for an active item' do
|
43
43
|
SemanticNavigation::Configuration.navigate :some_menu do
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
item :first, '/first', :name => 'First'
|
45
|
+
item :second, '/second', :name => 'Second'
|
46
|
+
end
|
47
|
+
@view_instance.should_receive(:current_page?).with('/first').and_return false
|
48
|
+
@view_instance.should_receive(:current_page?).with('/second').and_return true
|
49
|
+
result = @view_instance.active_item_for :some_menu
|
50
|
+
result.should == 'Second'
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should return name for a last level' do
|
54
54
|
SemanticNavigation::Configuration.navigate :some_menu do
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
55
|
+
item :first_node, '/first_node', :name => 'First node' do
|
56
|
+
item :first, '/first', :name => 'First'
|
57
|
+
end
|
58
|
+
item :second_node, 'second_node', :name => 'Second node' do
|
59
|
+
item :second, '/second', :name => 'Second'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
@view_instance.should_receive(:current_page?).exactly(4).times.and_return(false, false,true,false) # First, First node, Second, Second node
|
63
|
+
result = @view_instance.active_item_for :some_menu
|
64
|
+
result.should == 'Second'
|
65
|
+
end
|
66
66
|
|
67
67
|
it 'should return name for a requested level' do
|
68
68
|
SemanticNavigation::Configuration.navigate :some_menu do
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
69
|
+
item :first_node, '/first_node', :name => 'First node' do
|
70
|
+
item :first, '/first', :name => 'First'
|
71
|
+
end
|
72
|
+
item :second_node, 'second_node', :name => 'Second node' do
|
73
|
+
item :second, '/second', :name => 'Second'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
@view_instance.should_receive(:current_page?).exactly(4).times.and_return(false, false,true,false) # First, First node, Second, Second node
|
77
|
+
result = @view_instance.active_item_for :some_menu, 1
|
78
|
+
result.should == 'Second node'
|
79
|
+
end
|
80
80
|
|
81
81
|
end
|
82
82
|
|
83
|
-
end
|
83
|
+
end
|
@@ -2,33 +2,33 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe SemanticNavigation::TwitterBootstrap::Breadcrumb do
|
4
4
|
before :each do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
class ViewObject
|
6
|
+
attr_accessor :output_buffer
|
7
|
+
include ActionView::Helpers::TagHelper
|
8
|
+
include SemanticNavigation::HelperMethods
|
9
|
+
include ActionView::Helpers::UrlHelper
|
10
|
+
end
|
11
11
|
@configuration = SemanticNavigation::Configuration
|
12
|
-
|
13
|
-
|
12
|
+
@configuration.register_renderer :bootstrap_breadcrumb, SemanticNavigation::TwitterBootstrap::Breadcrumb
|
13
|
+
@view_object = ViewObject.new
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should render empty ul tag for empty navigation' do
|
17
|
-
|
17
|
+
|
18
18
|
@configuration.run do
|
19
19
|
navigate :menu do
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
result = @view_object.navigation_for :menu, :as => :bootstrap_breadcrumb
|
24
24
|
result.should == "<ul class=\"breadcrumb\"></ul>"
|
25
|
-
end
|
25
|
+
end
|
26
26
|
|
27
27
|
it 'should render one level navigation breadcrumb' do
|
28
28
|
@configuration.run do
|
29
29
|
navigate :menu do
|
30
|
-
|
31
|
-
|
30
|
+
item :url1, 'url1', :name => 'url1'
|
31
|
+
item :url2, 'url2', :name => 'url2'
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -45,12 +45,12 @@ describe SemanticNavigation::TwitterBootstrap::Breadcrumb do
|
|
45
45
|
it 'should render one multilevel navigation breadcrumb' do
|
46
46
|
@configuration.run do
|
47
47
|
navigate :menu do
|
48
|
-
|
48
|
+
item :url1, 'url1', :name => 'url1' do
|
49
49
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
50
|
-
|
51
|
-
|
50
|
+
end
|
51
|
+
item :url2, 'url2', :name => 'url2' do
|
52
52
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
53
|
-
|
53
|
+
end
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -69,17 +69,17 @@ it 'should render one multilevel navigation breadcrumb' do
|
|
69
69
|
"suburl1",
|
70
70
|
"</li>",
|
71
71
|
"</ul>"].join
|
72
|
-
end
|
72
|
+
end
|
73
73
|
|
74
74
|
it 'should render last item as link if :last_as_link => true' do
|
75
75
|
@configuration.run do
|
76
76
|
navigate :menu do
|
77
|
-
|
77
|
+
item :url1, 'url1', :name => 'url1' do
|
78
78
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
79
|
-
|
80
|
-
|
79
|
+
end
|
80
|
+
item :url2, 'url2', :name => 'url2' do
|
81
81
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
82
|
-
|
82
|
+
end
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
@@ -99,18 +99,18 @@ it 'should render one multilevel navigation breadcrumb' do
|
|
99
99
|
"suburl1",
|
100
100
|
"</a>",
|
101
101
|
"</li>",
|
102
|
-
"</ul>"].join
|
102
|
+
"</ul>"].join
|
103
103
|
end
|
104
104
|
|
105
105
|
it 'should render only root level' do
|
106
106
|
@configuration.run do
|
107
107
|
navigate :menu do
|
108
|
-
|
108
|
+
item :url1, 'url1', :name => 'url1' do
|
109
109
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
110
|
-
|
111
|
-
|
110
|
+
end
|
111
|
+
item :url2, 'url2', :name => 'url2' do
|
112
112
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
113
|
-
|
113
|
+
end
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -121,18 +121,18 @@ it 'should render one multilevel navigation breadcrumb' do
|
|
121
121
|
"<li>",
|
122
122
|
"url1",
|
123
123
|
"</li>",
|
124
|
-
"</ul>"].join
|
124
|
+
"</ul>"].join
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'should render second level' do
|
128
128
|
@configuration.run do
|
129
129
|
navigate :menu do
|
130
|
-
|
130
|
+
item :url1, 'url1', :name => 'url1' do
|
131
131
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
132
|
-
|
133
|
-
|
132
|
+
end
|
133
|
+
item :url2, 'url2', :name => 'url2' do
|
134
134
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
135
|
-
|
135
|
+
end
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
@@ -143,22 +143,22 @@ it 'should render one multilevel navigation breadcrumb' do
|
|
143
143
|
"<li>",
|
144
144
|
"suburl1",
|
145
145
|
"</li>",
|
146
|
-
"</ul>"].join
|
146
|
+
"</ul>"].join
|
147
147
|
end
|
148
148
|
|
149
149
|
it 'should render the exact levels' do
|
150
150
|
@configuration.run do
|
151
151
|
navigate :menu do
|
152
|
-
|
152
|
+
item :url1, 'url1', :name => 'url1' do
|
153
153
|
item :suburl1, 'suburl1', :name => 'suburl1' do
|
154
|
-
|
154
|
+
item :subsub1, 'subsub1', :name => 'subsub1'
|
155
155
|
end
|
156
|
-
|
157
|
-
|
156
|
+
end
|
157
|
+
item :url2, 'url2', :name => 'url2' do
|
158
158
|
item :suburl2, 'suburl2', :name => 'suburl2' do
|
159
|
-
|
159
|
+
item :subsub2, 'subsub2', :name => 'subsub2'
|
160
160
|
end
|
161
|
-
|
161
|
+
end
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
@@ -182,21 +182,21 @@ it 'should render one multilevel navigation breadcrumb' do
|
|
182
182
|
it 'should render navigation except some item' do
|
183
183
|
@configuration.run do
|
184
184
|
navigate :menu do
|
185
|
-
|
185
|
+
item :url1, 'url1', :name => 'url1' do
|
186
186
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
187
|
-
|
188
|
-
|
187
|
+
end
|
188
|
+
item :url2, 'url2', :name => 'url2' do
|
189
189
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
190
|
-
|
190
|
+
end
|
191
191
|
end
|
192
192
|
end
|
193
|
-
|
193
|
+
|
194
194
|
@view_object.should_receive(:current_page?).and_return(true, false, false, false)
|
195
195
|
result = @view_object.navigation_for :menu, :except_for => [:suburl1], :as => :bootstrap_breadcrumb
|
196
196
|
result.should == ["<ul class=\"breadcrumb\">",
|
197
197
|
"<li>",
|
198
198
|
"url1",
|
199
199
|
"</li>",
|
200
|
-
"</ul>"].join
|
200
|
+
"</ul>"].join
|
201
201
|
end
|
202
|
-
end
|
202
|
+
end
|
@@ -3,33 +3,33 @@ require 'spec_helper'
|
|
3
3
|
describe SemanticNavigation::TwitterBootstrap::List do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
class ViewObject
|
7
|
+
attr_accessor :output_buffer
|
8
|
+
include ActionView::Helpers::TagHelper
|
9
|
+
include SemanticNavigation::HelperMethods
|
10
|
+
include ActionView::Helpers::UrlHelper
|
11
|
+
end
|
12
12
|
@configuration = SemanticNavigation::Configuration
|
13
|
-
|
14
|
-
|
13
|
+
@configuration.register_renderer :bootstrap_list, SemanticNavigation::TwitterBootstrap::List
|
14
|
+
@view_object = ViewObject.new
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'should render empty ul tag for empty navigation' do
|
18
|
-
|
18
|
+
|
19
19
|
@configuration.run do
|
20
20
|
navigate :menu do
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
result = @view_object.navigation_for :menu, :as => :bootstrap_list
|
25
25
|
result.should == "<ul class=\"nav nav-list\"></ul>"
|
26
|
-
end
|
26
|
+
end
|
27
27
|
|
28
28
|
it 'should render one level navigation' do
|
29
29
|
@configuration.run do
|
30
30
|
navigate :menu do
|
31
|
-
|
32
|
-
|
31
|
+
item :url1, 'url1', :name => 'url1'
|
32
|
+
item :url2, 'url2', :name => 'url2'
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -51,12 +51,12 @@ describe SemanticNavigation::TwitterBootstrap::List do
|
|
51
51
|
it 'should render one multilevel navigation' do
|
52
52
|
@configuration.run do
|
53
53
|
navigate :menu do
|
54
|
-
|
54
|
+
item :url1, 'url1', :name => 'url1' do
|
55
55
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
56
|
-
|
57
|
-
|
56
|
+
end
|
57
|
+
item :url2, 'url2', :name => 'url2' do
|
58
58
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
59
|
-
|
59
|
+
end
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -87,17 +87,17 @@ it 'should render one multilevel navigation' do
|
|
87
87
|
"</ul>",
|
88
88
|
"</li>",
|
89
89
|
"</ul>"].join
|
90
|
-
end
|
90
|
+
end
|
91
91
|
|
92
92
|
it 'should render only root level' do
|
93
93
|
@configuration.run do
|
94
94
|
navigate :menu do
|
95
|
-
|
95
|
+
item :url1, 'url1', :name => 'url1' do
|
96
96
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
97
|
-
|
98
|
-
|
97
|
+
end
|
98
|
+
item :url2, 'url2', :name => 'url2' do
|
99
99
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
100
|
-
|
100
|
+
end
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -113,18 +113,18 @@ it 'should render one multilevel navigation' do
|
|
113
113
|
"url2",
|
114
114
|
"</a>",
|
115
115
|
"</li>",
|
116
|
-
"</ul>"].join
|
116
|
+
"</ul>"].join
|
117
117
|
end
|
118
118
|
|
119
119
|
it 'should render second level if some item of first level is active' do
|
120
120
|
@configuration.run do
|
121
121
|
navigate :menu do
|
122
|
-
|
122
|
+
item :url1, 'url1', :name => 'url1' do
|
123
123
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
124
|
-
|
125
|
-
|
124
|
+
end
|
125
|
+
item :url2, 'url2', :name => 'url2' do
|
126
126
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
127
|
-
|
127
|
+
end
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
@@ -137,22 +137,22 @@ it 'should render one multilevel navigation' do
|
|
137
137
|
"suburl1",
|
138
138
|
"</a>",
|
139
139
|
"</li>",
|
140
|
-
"</ul>"].join
|
140
|
+
"</ul>"].join
|
141
141
|
end
|
142
142
|
|
143
143
|
it 'should render the exact levels' do
|
144
144
|
@configuration.run do
|
145
145
|
navigate :menu do
|
146
|
-
|
146
|
+
item :url1, 'url1', :name => 'url1' do
|
147
147
|
item :suburl1, 'suburl1', :name => 'suburl1' do
|
148
|
-
|
148
|
+
item :subsub1, 'subsub1', :name => 'subsub1'
|
149
149
|
end
|
150
|
-
|
151
|
-
|
150
|
+
end
|
151
|
+
item :url2, 'url2', :name => 'url2' do
|
152
152
|
item :suburl2, 'suburl2', :name => 'suburl2' do
|
153
|
-
|
153
|
+
item :subsub2, 'subsub2', :name => 'subsub2'
|
154
154
|
end
|
155
|
-
|
155
|
+
end
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
@@ -182,18 +182,18 @@ it 'should render one multilevel navigation' do
|
|
182
182
|
"</li>",
|
183
183
|
"</ul>",
|
184
184
|
"</li>",
|
185
|
-
"</ul>"].join
|
185
|
+
"</ul>"].join
|
186
186
|
end
|
187
187
|
|
188
188
|
it 'should render navigation except some item' do
|
189
189
|
@configuration.run do
|
190
190
|
navigate :menu do
|
191
|
-
|
191
|
+
item :url1, 'url1', :name => 'url1' do
|
192
192
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
193
|
-
|
194
|
-
|
193
|
+
end
|
194
|
+
item :url2, 'url2', :name => 'url2' do
|
195
195
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
196
|
-
|
196
|
+
end
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
@@ -211,18 +211,18 @@ it 'should render one multilevel navigation' do
|
|
211
211
|
"</li>",
|
212
212
|
"</ul>",
|
213
213
|
"</li>",
|
214
|
-
"</ul>"].join
|
214
|
+
"</ul>"].join
|
215
215
|
end
|
216
216
|
|
217
217
|
it 'should render navigation except some items' do
|
218
218
|
@configuration.run do
|
219
219
|
navigate :menu do
|
220
|
-
|
220
|
+
item :url1, 'url1', :name => 'url1' do
|
221
221
|
item :suburl1, 'suburl1', :name => 'suburl1'
|
222
|
-
|
223
|
-
|
222
|
+
end
|
223
|
+
item :url2, 'url2', :name => 'url2' do
|
224
224
|
item :suburl2, 'suburl2', :name => 'suburl2'
|
225
|
-
|
225
|
+
end
|
226
226
|
end
|
227
227
|
end
|
228
228
|
|
@@ -235,8 +235,8 @@ it 'should render one multilevel navigation' do
|
|
235
235
|
"<ul>",
|
236
236
|
"</ul>",
|
237
237
|
"</li>",
|
238
|
-
"</ul>"].join
|
239
|
-
end
|
238
|
+
"</ul>"].join
|
239
|
+
end
|
240
240
|
|
241
241
|
it 'should render divider' do
|
242
242
|
@configuration.run do
|
@@ -283,7 +283,7 @@ it 'should render one multilevel navigation' do
|
|
283
283
|
"item_name",
|
284
284
|
"</a>",
|
285
285
|
"</li>",
|
286
|
-
"</ul>"].join
|
286
|
+
"</ul>"].join
|
287
287
|
end
|
288
288
|
|
289
289
|
it 'should render node with icon' do
|
@@ -310,7 +310,7 @@ it 'should render one multilevel navigation' do
|
|
310
310
|
"</li>",
|
311
311
|
"</ul>",
|
312
312
|
"</li>",
|
313
|
-
"</ul>"].join
|
313
|
+
"</ul>"].join
|
314
314
|
end
|
315
315
|
|
316
|
-
end
|
316
|
+
end
|