simple-navigation 3.1.1 → 3.2.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 +5 -0
- data/VERSION +1 -1
- data/generators/navigation_config/templates/config/navigation.rb +4 -0
- data/lib/simple_navigation.rb +2 -1
- data/lib/simple_navigation/core/configuration.rb +2 -1
- data/lib/simple_navigation/core/item.rb +13 -1
- data/lib/simple_navigation/rendering.rb +2 -1
- data/lib/simple_navigation/rendering/helpers.rb +1 -1
- data/lib/simple_navigation/rendering/renderer/text.rb +26 -0
- data/spec/lib/simple_navigation/core/configuration_spec.rb +3 -0
- data/spec/lib/simple_navigation/core/item_spec.rb +12 -0
- data/spec/lib/simple_navigation/rendering/helpers_spec.rb +9 -0
- data/spec/lib/simple_navigation/rendering/renderer/list_spec.rb +19 -0
- data/spec/lib/simple_navigation/rendering/renderer/text_spec.rb +41 -0
- metadata +8 -5
data/CHANGELOG
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
*3.2.0
|
2
|
+
|
3
|
+
* Added Renderer::Text for rendering selected navigation items without markup (useful for dynamic page titles). Credits to Tim Cowlishaw.
|
4
|
+
* Added ability to add custom markup around item names specifying a name_generator in the config file. Thanks to Jack Dempsey.
|
5
|
+
|
1
6
|
*3.1.1
|
2
7
|
|
3
8
|
* Item#selected_by_url? now strips anchors from the item's url before comparing it with the current request's url. Credits to opengovernment.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.2.0
|
@@ -17,6 +17,10 @@ SimpleNavigation::Configuration.run do |navigation|
|
|
17
17
|
# The example below would add a prefix to each key.
|
18
18
|
# navigation.id_generator = Proc.new {|key| "my-prefix-#{key}"}
|
19
19
|
|
20
|
+
# If you need to add custom html around item names, you can define a proc that will be called with the name you pass in to the navigation.
|
21
|
+
# The example below shows how to wrap items spans.
|
22
|
+
# navigation.name_generator = Proc.new {|name| "<span>#{name}</span>"}
|
23
|
+
|
20
24
|
# The auto highlight feature is turned on by default.
|
21
25
|
# This turns it off globally (for the whole plugin)
|
22
26
|
# navigation.auto_highlight = false
|
data/lib/simple_navigation.rb
CHANGED
@@ -24,7 +24,8 @@ module SimpleNavigation
|
|
24
24
|
self.registered_renderers = {
|
25
25
|
:list => SimpleNavigation::Renderer::List,
|
26
26
|
:links => SimpleNavigation::Renderer::Links,
|
27
|
-
:breadcrumbs => SimpleNavigation::Renderer::Breadcrumbs
|
27
|
+
:breadcrumbs => SimpleNavigation::Renderer::Breadcrumbs,
|
28
|
+
:text => SimpleNavigation::Renderer::Text
|
28
29
|
}
|
29
30
|
|
30
31
|
class << self
|
@@ -6,7 +6,7 @@ module SimpleNavigation
|
|
6
6
|
class Configuration
|
7
7
|
include Singleton
|
8
8
|
|
9
|
-
attr_accessor :renderer, :selected_class, :autogenerate_item_ids, :id_generator, :auto_highlight
|
9
|
+
attr_accessor :renderer, :selected_class, :autogenerate_item_ids, :id_generator, :auto_highlight, :name_generator
|
10
10
|
attr_reader :primary_navigation
|
11
11
|
|
12
12
|
class << self
|
@@ -29,6 +29,7 @@ module SimpleNavigation
|
|
29
29
|
@selected_class = 'selected'
|
30
30
|
@autogenerate_item_ids = true
|
31
31
|
@id_generator = Proc.new {|id| id.to_s }
|
32
|
+
@name_generator = Proc.new {|name| name}
|
32
33
|
@auto_highlight = true
|
33
34
|
end
|
34
35
|
|
@@ -2,7 +2,7 @@ module SimpleNavigation
|
|
2
2
|
|
3
3
|
# Represents an item in your navigation. Gets generated by the item method in the config-file.
|
4
4
|
class Item
|
5
|
-
attr_reader :key, :
|
5
|
+
attr_reader :key, :url, :sub_navigation, :method, :highlights_on
|
6
6
|
attr_writer :html_options
|
7
7
|
|
8
8
|
# see ItemContainer#item
|
@@ -25,6 +25,18 @@ module SimpleNavigation
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
# Returns the item's name. If option :apply_generator is set to true (default),
|
29
|
+
# the name will be passed to the name_generator specified in the configuration.
|
30
|
+
#
|
31
|
+
def name(options = {})
|
32
|
+
options.reverse_merge!(:apply_generator => true)
|
33
|
+
if (options[:apply_generator])
|
34
|
+
SimpleNavigation.config.name_generator.call(@name)
|
35
|
+
else
|
36
|
+
@name
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
28
40
|
# Returns true if this navigation item should be rendered as 'selected'.
|
29
41
|
# An item is selected if
|
30
42
|
#
|
@@ -6,5 +6,6 @@ module SimpleNavigation
|
|
6
6
|
autoload :List, 'simple_navigation/rendering/renderer/list'
|
7
7
|
autoload :Links, 'simple_navigation/rendering/renderer/links'
|
8
8
|
autoload :Breadcrumbs, 'simple_navigation/rendering/renderer/breadcrumbs'
|
9
|
+
autoload :Text, 'simple_navigation/rendering/renderer/text'
|
9
10
|
end
|
10
|
-
end
|
11
|
+
end
|
@@ -55,7 +55,7 @@ module SimpleNavigation
|
|
55
55
|
options[:level] = :leaves if options[:level] == :all
|
56
56
|
active_item_container = SimpleNavigation.active_item_container_for(options[:level])
|
57
57
|
if active_item_container && !active_item_container.selected_item.nil?
|
58
|
-
active_item_container.selected_item.name
|
58
|
+
active_item_container.selected_item.name(:apply_generator => false)
|
59
59
|
else
|
60
60
|
''
|
61
61
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module SimpleNavigation
|
2
|
+
module Renderer
|
3
|
+
|
4
|
+
# Renders the 'chain' of selected navigation items as simple text items, joined with an optional separator (similar to breadcrumbs, but without markup).
|
5
|
+
#
|
6
|
+
class Text < SimpleNavigation::Renderer::Base
|
7
|
+
|
8
|
+
def render(item_container)
|
9
|
+
list(item_container).compact.join(options[:join_with] || " ")
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def list(item_container)
|
15
|
+
item_container.items.inject([]) do |array, item|
|
16
|
+
if item.selected?
|
17
|
+
array + [item.name(:apply_generator => false)] + (include_sub_navigation?(item) ? list(item.sub_navigation) : [])
|
18
|
+
else
|
19
|
+
array
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -52,6 +52,9 @@ describe SimpleNavigation::Configuration do
|
|
52
52
|
it "should set the id_generator" do
|
53
53
|
@config.id_generator.should_not be_nil
|
54
54
|
end
|
55
|
+
it "should set the name_generator" do
|
56
|
+
@config.name_generator.should_not be_nil
|
57
|
+
end
|
55
58
|
end
|
56
59
|
describe 'items' do
|
57
60
|
before(:each) do
|
@@ -118,6 +118,18 @@ describe SimpleNavigation::Item do
|
|
118
118
|
|
119
119
|
end
|
120
120
|
|
121
|
+
describe 'name' do
|
122
|
+
before(:each) do
|
123
|
+
SimpleNavigation.config.stub!(:name_generator => Proc.new {|name| "<span>#{name}</span>"})
|
124
|
+
end
|
125
|
+
context 'default (generator is applied)' do
|
126
|
+
it {@item.name.should == "<span>name</span>"}
|
127
|
+
end
|
128
|
+
context 'generator is skipped' do
|
129
|
+
it {@item.name(:apply_generator => false).should == 'name'}
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
121
133
|
describe 'selected?' do
|
122
134
|
context 'explicitly selected' do
|
123
135
|
before(:each) do
|
@@ -39,6 +39,15 @@ describe SimpleNavigation::Helpers do
|
|
39
39
|
context 'container does not have selected item' do
|
40
40
|
it {@controller.active_navigation_item_name.should == ''}
|
41
41
|
end
|
42
|
+
context 'custom name generator set' do
|
43
|
+
before(:each) do
|
44
|
+
select_item(:subnav1)
|
45
|
+
SimpleNavigation.config.name_generator = Proc.new {|name| "<span>name</span>"}
|
46
|
+
end
|
47
|
+
it "should not apply the generator" do
|
48
|
+
@controller.active_navigation_item_name(:level => 1).should == 'invoices'
|
49
|
+
end
|
50
|
+
end
|
42
51
|
end
|
43
52
|
context 'no active item_container for desired level' do
|
44
53
|
it {@controller.active_navigation_item_name(:level => 5).should == ''}
|
@@ -30,6 +30,25 @@ describe SimpleNavigation::Renderer::List do
|
|
30
30
|
HTML::Selector.new('li a').select(render).should have(3).entries
|
31
31
|
end
|
32
32
|
|
33
|
+
context 'concerning item names' do
|
34
|
+
context 'with a custom name generator defined' do
|
35
|
+
before(:each) do
|
36
|
+
SimpleNavigation.config.name_generator = Proc.new {|name| "<span>name</span>"}
|
37
|
+
end
|
38
|
+
it "should apply the name generator" do
|
39
|
+
HTML::Selector.new('li a span').select(render).should have(3).entries
|
40
|
+
end
|
41
|
+
end
|
42
|
+
context 'no customer generator defined' do
|
43
|
+
before(:each) do
|
44
|
+
SimpleNavigation.config.name_generator = Proc.new {|name| "name"}
|
45
|
+
end
|
46
|
+
it "should apply the name generator" do
|
47
|
+
HTML::Selector.new('li a span').select(render).should have(0).entries
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
33
52
|
context 'concerning html attributes' do
|
34
53
|
context 'default case (no options defined for link tag)' do
|
35
54
|
it "should pass the specified html_options to the li element" do
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SimpleNavigation::Renderer::Text do
|
4
|
+
|
5
|
+
describe 'render' do
|
6
|
+
|
7
|
+
def render(current_nav=nil, options={:level => :all})
|
8
|
+
primary_navigation = primary_container
|
9
|
+
select_item(current_nav)
|
10
|
+
setup_renderer_for SimpleNavigation::Renderer::Text, :rails, options
|
11
|
+
@renderer.render(primary_navigation)
|
12
|
+
end
|
13
|
+
context 'regarding result' do
|
14
|
+
|
15
|
+
it "should render the selected page" do
|
16
|
+
render(:invoices).should == "invoices"
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'nested sub_navigation' do
|
20
|
+
it "should add an entry for each selected item" do
|
21
|
+
render(:subnav1).should == "invoices subnav1"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'with a custom seperator specified' do
|
26
|
+
it "should separate the items with the separator" do
|
27
|
+
render(:subnav1, :join_with => " | ").should == "invoices | subnav1"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'custom name generator is set' do
|
32
|
+
before(:each) do
|
33
|
+
SimpleNavigation.config.name_generator = Proc.new {|name| "<span>name</span>"}
|
34
|
+
end
|
35
|
+
it "should not apply the name generator (since it is text only)" do
|
36
|
+
render(:subnav1, :join_with => " | ").should == "invoices | subnav1"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple-navigation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 3.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 3.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andi Schacke
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-02-09 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- lib/simple_navigation/rendering/renderer/breadcrumbs.rb
|
88
88
|
- lib/simple_navigation/rendering/renderer/links.rb
|
89
89
|
- lib/simple_navigation/rendering/renderer/list.rb
|
90
|
+
- lib/simple_navigation/rendering/renderer/text.rb
|
90
91
|
- rails/init.rb
|
91
92
|
- spec/lib/simple_navigation/adapters/padrino_spec.rb
|
92
93
|
- spec/lib/simple_navigation/adapters/rails_spec.rb
|
@@ -102,6 +103,7 @@ files:
|
|
102
103
|
- spec/lib/simple_navigation/rendering/renderer/breadcrumbs_spec.rb
|
103
104
|
- spec/lib/simple_navigation/rendering/renderer/links_spec.rb
|
104
105
|
- spec/lib/simple_navigation/rendering/renderer/list_spec.rb
|
106
|
+
- spec/lib/simple_navigation/rendering/renderer/text_spec.rb
|
105
107
|
- spec/lib/simple_navigation_spec.rb
|
106
108
|
- spec/spec_helper.rb
|
107
109
|
has_rdoc: true
|
@@ -154,5 +156,6 @@ test_files:
|
|
154
156
|
- spec/lib/simple_navigation/rendering/renderer/breadcrumbs_spec.rb
|
155
157
|
- spec/lib/simple_navigation/rendering/renderer/links_spec.rb
|
156
158
|
- spec/lib/simple_navigation/rendering/renderer/list_spec.rb
|
159
|
+
- spec/lib/simple_navigation/rendering/renderer/text_spec.rb
|
157
160
|
- spec/lib/simple_navigation_spec.rb
|
158
161
|
- spec/spec_helper.rb
|