simple-navigation 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ .DS_Store
2
+ rdoc
3
+ pkg
data/CHANGELOG CHANGED
@@ -1,4 +1,10 @@
1
- *master
1
+ *1.3.0
2
+
3
+ * render_all_levels-option allows to render all subnavigation independent from the active primary navigation ('full open tree'). Userful for javascript menus. Thanks to Richard Hulse.
4
+ * ability to turn off automatic generation of dom_ids for the list items (autogenerate_item_ids). Credits again to Richard Hulse.
5
+ * ability to specify dom_class for primary and secondary lists. Thanks Richard!
6
+
7
+ *1.2.2
2
8
 
3
9
  * renderers now have access to request_forgery_protection stuff (this allows delete-links as navigation-items)
4
10
 
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
+ :patch: 0
2
3
  :major: 1
3
- :minor: 2
4
- :patch: 2
4
+ :minor: 3
@@ -7,6 +7,15 @@ SimpleNavigation::Configuration.run do |navigation|
7
7
  # Specify the class that will be applied to active navigation items. Defaults to 'selected'
8
8
  # navigation.selected_class = 'your_selected_class'
9
9
 
10
+ # Normally only the current sub menu is renderedwhen render_navigation is called
11
+ # setting this to true render all submenus which is useful for javascript
12
+ # driven hovering menus like the jquery superfish plugin
13
+ # navigation.render_all_levels = true
14
+
15
+ # Item keys are normally added to list items.
16
+ # this setting turns that off
17
+ # navigation.autogenerate_item_ids = false
18
+
10
19
  # Define the primary navigation
11
20
  navigation.items do |primary|
12
21
  # Add an item to the primary navigation. The following params apply:
@@ -28,6 +37,11 @@ SimpleNavigation::Configuration.run do |navigation|
28
37
  # thus you can use all the methods and vars you have available in the views.
29
38
  primary.item :key_3, 'Admin', url, :class => 'special', :if => Proc.new { current_user.admin? }
30
39
  primary.item :key_4, 'Account', url, :unless => Proc.new { logged_in? }
40
+
41
+ # you can also specify a css id or class to attach to this particular level
42
+ # works for all levels of the menu
43
+ # primary.dom_id = 'menu-id'
44
+ # primary.dom_class = 'menu-class'
31
45
 
32
46
  end
33
47
 
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + "/rails/init"
data/install.rb ADDED
@@ -0,0 +1,5 @@
1
+ begin
2
+ puts IO.read(File.join(File.dirname(__FILE__), 'README'))
3
+ rescue Exception => e
4
+ puts "The following error ocurred while installing the plugin: #{e.message}"
5
+ end
@@ -8,6 +8,8 @@ module SimpleNavigation
8
8
 
9
9
  attr_accessor :renderer
10
10
  attr_accessor :selected_class
11
+ attr_accessor :render_all_levels
12
+ attr_accessor :autogenerate_item_ids
11
13
  attr_reader :primary_navigation
12
14
 
13
15
  class << self
@@ -38,6 +40,8 @@ module SimpleNavigation
38
40
  def initialize
39
41
  @renderer = SimpleNavigation::Renderer::List
40
42
  @selected_class = 'selected'
43
+ @render_all_levels = false
44
+ @autogenerate_item_ids = true
41
45
  end
42
46
 
43
47
  # Yields an SimpleNavigation::ItemContainer for adding navigation items
@@ -3,6 +3,7 @@ module SimpleNavigation
3
3
  # Represents an item in your navigation. Gets generated by the item method in the config-file.
4
4
  class Item
5
5
  attr_reader :key, :name, :url, :sub_navigation, :method
6
+ attr_writer :html_options
6
7
 
7
8
  # see ItemContainer#item
8
9
  def initialize(key, name, url, options, sub_nav_block)
@@ -25,7 +26,7 @@ module SimpleNavigation
25
26
  # Returns the html-options hash for the item, i.e. the options specified for this item in the config-file.
26
27
  # It also adds the 'selected' class to the list of classes if necessary.
27
28
  def html_options(current_navigation)
28
- default_options = {:id => key.to_s}
29
+ default_options = self.autogenerate_item_ids? ? {:id => key.to_s} : {}
29
30
  options = default_options.merge(@html_options)
30
31
  options[:class] = [@html_options[:class], self.selected_class(current_navigation)].flatten.compact.join(' ')
31
32
  options.delete(:class) if options[:class].blank?
@@ -36,6 +37,12 @@ module SimpleNavigation
36
37
  selected?(current_navigation) ? SimpleNavigation.config.selected_class : nil
37
38
  end
38
39
 
40
+
41
+ protected
42
+
43
+ def autogenerate_item_ids?
44
+ SimpleNavigation.config.autogenerate_item_ids
45
+ end
39
46
 
40
47
  end
41
48
  end
@@ -4,7 +4,7 @@ module SimpleNavigation
4
4
  class ItemContainer
5
5
 
6
6
  attr_reader :items
7
- attr_accessor :renderer, :dom_id
7
+ attr_accessor :renderer, :dom_id, :dom_class
8
8
 
9
9
  def initialize #:nodoc:
10
10
  @items = []
@@ -13,10 +13,16 @@ module SimpleNavigation
13
13
  list_content = item_container.items.inject([]) do |list, item|
14
14
  html_options = item.html_options(current_navigation)
15
15
  li_content = link_to(item.name, item.url, :class => item.selected_class(current_navigation), :method => item.method)
16
- li_content << (item.sub_navigation.render(current_sub_navigation)) if include_sub_navigation && item.sub_navigation && item.selected?(current_navigation)
16
+ if item.sub_navigation
17
+ if SimpleNavigation.config.render_all_levels
18
+ li_content << (item.sub_navigation.render(current_sub_navigation))
19
+ else
20
+ li_content << (item.sub_navigation.render(current_sub_navigation)) if include_sub_navigation && item.selected?(current_navigation)
21
+ end
22
+ end
17
23
  list << content_tag(:li, li_content, html_options)
18
24
  end
19
- content_tag(:ul, list_content, {:id => item_container.dom_id})
25
+ content_tag(:ul, list_content, {:id => item_container.dom_id, :class => item_container.dom_class})
20
26
  end
21
27
 
22
28
  end
@@ -0,0 +1,76 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{simple-navigation}
5
+ s.version = "1.3.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Andi Schacke"]
9
+ s.date = %q{2009-06-16}
10
+ s.description = %q{Simple Navigation is a ruby library for creating a navigation (optionally with sub navigation) for your rails app.}
11
+ s.email = %q{andreas.schacke@gmail.com}
12
+ s.extra_rdoc_files = [
13
+ "README"
14
+ ]
15
+ s.files = [
16
+ ".gitignore",
17
+ "CHANGELOG",
18
+ "CHANGELOG",
19
+ "README",
20
+ "Rakefile",
21
+ "VERSION.yml",
22
+ "generators/navigation_config/USAGE",
23
+ "generators/navigation_config/navigation_config_generator.rb",
24
+ "generators/navigation_config/templates/config/navigation.rb",
25
+ "init.rb",
26
+ "install.rb",
27
+ "lib/simple_navigation.rb",
28
+ "lib/simple_navigation/configuration.rb",
29
+ "lib/simple_navigation/controller_methods.rb",
30
+ "lib/simple_navigation/helpers.rb",
31
+ "lib/simple_navigation/item.rb",
32
+ "lib/simple_navigation/item_container.rb",
33
+ "lib/simple_navigation/renderer/base.rb",
34
+ "lib/simple_navigation/renderer/list.rb",
35
+ "rails/init.rb",
36
+ "simple-navigation.gemspec",
37
+ "spec/lib/simple_navigation/configuration_spec.rb",
38
+ "spec/lib/simple_navigation/controller_methods_spec.rb",
39
+ "spec/lib/simple_navigation/helpers_spec.rb",
40
+ "spec/lib/simple_navigation/item_container_spec.rb",
41
+ "spec/lib/simple_navigation/item_spec.rb",
42
+ "spec/lib/simple_navigation/renderer/base_spec.rb",
43
+ "spec/lib/simple_navigation/renderer/list_spec.rb",
44
+ "spec/lib/simple_navigation_spec.rb",
45
+ "spec/spec_helper.rb",
46
+ "uninstall.rb"
47
+ ]
48
+ s.has_rdoc = true
49
+ s.homepage = %q{http://github.com/andi/simple-navigation}
50
+ s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
51
+ s.require_paths = ["lib"]
52
+ s.rubyforge_project = %q{andi}
53
+ s.rubygems_version = %q{1.3.1}
54
+ s.summary = %q{Simple Navigation is a ruby library for creating a navigation (optionally with sub navigation) for your rails app.}
55
+ s.test_files = [
56
+ "spec/lib/simple_navigation/configuration_spec.rb",
57
+ "spec/lib/simple_navigation/controller_methods_spec.rb",
58
+ "spec/lib/simple_navigation/helpers_spec.rb",
59
+ "spec/lib/simple_navigation/item_container_spec.rb",
60
+ "spec/lib/simple_navigation/item_spec.rb",
61
+ "spec/lib/simple_navigation/renderer/base_spec.rb",
62
+ "spec/lib/simple_navigation/renderer/list_spec.rb",
63
+ "spec/lib/simple_navigation_spec.rb",
64
+ "spec/spec_helper.rb"
65
+ ]
66
+
67
+ if s.respond_to? :specification_version then
68
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
69
+ s.specification_version = 2
70
+
71
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
72
+ else
73
+ end
74
+ else
75
+ end
76
+ end
@@ -64,6 +64,12 @@ describe SimpleNavigation::Configuration do
64
64
  it "should set the selected_class to 'selected' as default" do
65
65
  @config.selected_class.should == 'selected'
66
66
  end
67
+ it "should set render_all_levels to false as default" do
68
+ @config.render_all_levels.should be_false
69
+ end
70
+ it "should set autogenerate_item_ids to true as default" do
71
+ @config.autogenerate_item_ids.should be_true
72
+ end
67
73
  end
68
74
  describe 'items' do
69
75
  before(:each) do
@@ -100,21 +100,47 @@ describe SimpleNavigation::Item do
100
100
  end
101
101
 
102
102
  describe 'id' do
103
- context 'with id defined in options' do
103
+ context 'with autogenerate_item_ids == true' do
104
104
  before(:each) do
105
- @options = {:id => 'my_id'}
106
- @item = SimpleNavigation::Item.new(:my_key, 'name', 'url', @options, nil)
105
+ @item = SimpleNavigation::Item.new(:my_key, 'name', 'url', {}, nil)
106
+ @item.stub!(:autogenerate_item_ids? => true)
107
+ end
108
+ context 'with id defined in options' do
109
+ before(:each) do
110
+ @item.html_options = {:id => 'my_id'}
111
+ end
112
+ it {@item.html_options(:bla)[:id].should == 'my_id'}
107
113
  end
108
- it {@item.html_options(:bla)[:id].should == 'my_id'}
109
- end
110
114
 
111
- context 'with no id definied in options (using default id)' do
115
+ context 'with no id definied in options (using default id)' do
116
+ before(:each) do
117
+ @item.html_options = {}
118
+ end
119
+ it {@item.html_options(:bla)[:id].should == 'my_key'}
120
+ end
121
+ end
122
+
123
+ context 'with autogenerate_item_ids == false' do
112
124
  before(:each) do
113
- @options = {}
114
- @item = SimpleNavigation::Item.new(:my_key, 'name', 'url', @options, nil)
125
+ @item = SimpleNavigation::Item.new(:my_key, 'name', 'url', {}, nil)
126
+ @item.stub!(:autogenerate_item_ids? => false)
127
+ end
128
+ context 'with id defined in options' do
129
+ before(:each) do
130
+ @item.html_options = {:id => 'my_id'}
131
+ end
132
+ it {@item.html_options(:bla)[:id].should == 'my_id'}
115
133
  end
116
- it {@item.html_options(:bla)[:id].should == 'my_key'}
134
+
135
+ context 'with no id definied in options (using default id)' do
136
+ before(:each) do
137
+ @item.html_options = {}
138
+ end
139
+ it {@item.html_options(:bla)[:id].should be_nil}
140
+ end
141
+
117
142
  end
143
+
118
144
  end
119
145
 
120
146
  end
@@ -23,6 +23,7 @@ describe SimpleNavigation::Renderer::List do
23
23
  def item_container(items)
24
24
  container = SimpleNavigation::ItemContainer.new
25
25
  container.dom_id = 'nav_dom_id'
26
+ container.dom_class = 'nav_dom_class'
26
27
  container.instance_variable_set(:@items, items)
27
28
  container
28
29
  end
@@ -43,6 +44,9 @@ describe SimpleNavigation::Renderer::List do
43
44
  it "the rendered ul-tag should have the specified dom_id" do
44
45
  HTML::Selector.new('ul#nav_dom_id').select(render).should have(1).entries
45
46
  end
47
+ it "the rendered ul-tag should have the specified class" do
48
+ HTML::Selector.new('ul.nav_dom_class').select(render).should have(1).entries
49
+ end
46
50
  it "should render a li tag for each item" do
47
51
  HTML::Selector.new('li').select(render).should have(3).entries
48
52
  end
@@ -88,6 +92,26 @@ describe SimpleNavigation::Renderer::List do
88
92
  it "should be possible to identify sub items using an html selector (using ids)" do
89
93
  HTML::Selector.new('#invoices #subnav1').select(render(:invoices, true)).should have(1).entries
90
94
  end
95
+ context 'render_all_levels = false' do
96
+ before(:each) do
97
+ SimpleNavigation.config.render_all_levels = false
98
+ end
99
+ it "should not render the invoices submenu if the user-primary is active" do
100
+ HTML::Selector.new('#invoices #subnav1').select(render(:users, true)).should be_empty
101
+ HTML::Selector.new('#invoices #subnav2').select(render(:users, true)).should be_empty
102
+ end
103
+ end
104
+
105
+ context 'render_all_levels = true' do
106
+ before(:each) do
107
+ SimpleNavigation.config.render_all_levels = true
108
+ end
109
+ it "should render the invoices submenu even if the user-primary is active" do
110
+ HTML::Selector.new('#invoices #subnav1').select(render(:users, true)).should have(1).entry
111
+ HTML::Selector.new('#invoices #subnav2').select(render(:users, true)).should have(1).entry
112
+ end
113
+ end
114
+
91
115
  end
92
116
 
93
117
  end
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-navigation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andi Schacke
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-14 00:00:00 +02:00
12
+ date: 2009-06-16 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -22,12 +22,16 @@ extensions: []
22
22
  extra_rdoc_files:
23
23
  - README
24
24
  files:
25
+ - .gitignore
25
26
  - CHANGELOG
27
+ - README
26
28
  - Rakefile
27
29
  - VERSION.yml
28
30
  - generators/navigation_config/USAGE
29
31
  - generators/navigation_config/navigation_config_generator.rb
30
32
  - generators/navigation_config/templates/config/navigation.rb
33
+ - init.rb
34
+ - install.rb
31
35
  - lib/simple_navigation.rb
32
36
  - lib/simple_navigation/configuration.rb
33
37
  - lib/simple_navigation/controller_methods.rb
@@ -37,6 +41,7 @@ files:
37
41
  - lib/simple_navigation/renderer/base.rb
38
42
  - lib/simple_navigation/renderer/list.rb
39
43
  - rails/init.rb
44
+ - simple-navigation.gemspec
40
45
  - spec/lib/simple_navigation/configuration_spec.rb
41
46
  - spec/lib/simple_navigation/controller_methods_spec.rb
42
47
  - spec/lib/simple_navigation/helpers_spec.rb
@@ -46,7 +51,7 @@ files:
46
51
  - spec/lib/simple_navigation/renderer/list_spec.rb
47
52
  - spec/lib/simple_navigation_spec.rb
48
53
  - spec/spec_helper.rb
49
- - README
54
+ - uninstall.rb
50
55
  has_rdoc: true
51
56
  homepage: http://github.com/andi/simple-navigation
52
57
  post_install_message: