semantic_navigation 0.0.6 → 0.0.8
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 +10 -1
- data/README.md +33 -4
- data/Rakefile +3 -0
- data/lib/generators/semantic_navigation/install/install_generator.rb +20 -0
- data/lib/generators/semantic_navigation/install/templates/semantic_navigation.en.yml +2 -0
- data/lib/generators/semantic_navigation/install/templates/semantic_navigation.rb +25 -0
- data/lib/semantic_navigation.rb +2 -0
- data/lib/semantic_navigation/configuration.rb +52 -44
- data/lib/semantic_navigation/core.rb +4 -0
- data/lib/semantic_navigation/core/base.rb +21 -0
- data/lib/semantic_navigation/core/leaf.rb +25 -0
- data/lib/semantic_navigation/core/navigation.rb +35 -0
- data/lib/semantic_navigation/core/node.rb +29 -0
- data/lib/semantic_navigation/helper_methods.rb +14 -17
- data/lib/semantic_navigation/railtie.rb +14 -6
- data/lib/semantic_navigation/renderers.rb +8 -0
- data/lib/semantic_navigation/renderers/acts_as_breadcrumb.rb +39 -0
- data/lib/semantic_navigation/renderers/acts_as_list.rb +46 -0
- data/lib/semantic_navigation/renderers/bread_crumb.rb +50 -0
- data/lib/semantic_navigation/renderers/list.rb +44 -0
- data/lib/semantic_navigation/renderers/render_helpers.rb +113 -0
- data/lib/semantic_navigation/twitter_bootstrap/breadcrumb.rb +58 -0
- data/lib/semantic_navigation/twitter_bootstrap/list.rb +76 -0
- data/lib/semantic_navigation/twitter_bootstrap/tabs.rb +70 -0
- data/lib/semantic_navigation/version.rb +1 -1
- data/semantic_navigation.gemspec +3 -3
- data/spec/lib/semantic_navigation/configuration_spec.rb +55 -0
- data/spec/lib/semantic_navigation/custom_renderer.rb +3 -0
- data/spec/lib/semantic_navigation/helper_methods_spec.rb +1 -0
- data/spec/lib/semantic_navigation_spec.rb +1 -0
- data/spec/spec_helper.rb +8 -0
- metadata +32 -14
- data/lib/semantic_navigation/core/procs.rb +0 -15
- data/lib/semantic_navigation/core/render.rb +0 -94
- data/lib/semantic_navigation/item.rb +0 -118
- data/lib/tasks/semantic_navigation.rake +0 -8
- data/lib/tasks/templates/semantic_navigation.rb +0 -53
data/semantic_navigation.gemspec
CHANGED
@@ -9,7 +9,8 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["megacoder@rambler.ru"]
|
10
10
|
s.homepage = "https://github.com/fr33z3/semantic_navigation"
|
11
11
|
s.summary = %q{Make the navigation in your Rails app by several lines}
|
12
|
-
s.description = %q{Simply and customizable navigation in the Rails application
|
12
|
+
s.description = %q{Simply and customizable navigation in the Ruby on Rails 3 application.
|
13
|
+
Predefined bootstrap renderers}
|
13
14
|
|
14
15
|
s.rubyforge_project = "semantic_navigation"
|
15
16
|
|
@@ -19,7 +20,6 @@ Gem::Specification.new do |s|
|
|
19
20
|
s.require_paths = ["lib"]
|
20
21
|
|
21
22
|
# specify any dependencies here; for example:
|
22
|
-
s.add_development_dependency "rspec", "2.
|
23
|
+
s.add_development_dependency "rspec", ">=2.0.1"
|
23
24
|
s.add_runtime_dependency "rails", ">=3.0.0"
|
24
|
-
#s.add_runtime_dependency "fileutils"
|
25
25
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SemanticNavigation::Configuration do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@config_class = SemanticNavigation::Configuration
|
7
|
+
default_renderers = @config_class.class_variable_get("@@renderers")
|
8
|
+
default_renderers.keys.should == [:list, :breadcrumb, :bootstrap_breadcrumb, :bootstrap_list, :bootstrap_tabs, :bootstrap_pills]
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#navigate' do
|
12
|
+
it 'should accept navigation method' do
|
13
|
+
@config_class.class_variable_get("@@navigations").should == {}
|
14
|
+
SemanticNavigation::Configuration.run do
|
15
|
+
navigate :navigation
|
16
|
+
end
|
17
|
+
navigations = @config_class.class_variable_get("@@navigations")
|
18
|
+
navigations[:navigation].should_not be_nil
|
19
|
+
navigations[:navigation].id.should == :navigation
|
20
|
+
navigations[:navigation].instance_variable_get("@i18n_name").should == 'semantic_navigation.navigation'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#styles_for' do
|
25
|
+
it 'should save the proc' do
|
26
|
+
|
27
|
+
SemanticNavigation::Configuration.run do
|
28
|
+
styles_for :navigation do
|
29
|
+
navigation_default_classes [:default]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
render_styles = @config_class.class_variable_get("@@render_styles")
|
34
|
+
render_styles[:navigation].should_not be_nil
|
35
|
+
render_styles[:navigation].class.should == Proc
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'register_render' do
|
40
|
+
it 'should get the name and render class and reg as renderer' do
|
41
|
+
@config_class.register_renderer(:some_renderer,CustomRenderer)
|
42
|
+
renderers = @config_class.class_variable_get("@@renderers")
|
43
|
+
renderers[:some_renderer].should_not be_nil
|
44
|
+
renderers[:some_renderer].should == CustomRenderer
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should receive only renderer class and make a renderer name for itself' do
|
48
|
+
@config_class.register_renderer(CustomRenderer)
|
49
|
+
renderers = @config_class.class_variable_get("@@renderers")
|
50
|
+
renderers[:custom_renderer].should_not be_nil
|
51
|
+
renderers[:custom_renderer].should == CustomRenderer
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)+'/semantic_navigation/custom_renderer')
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semantic_navigation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &11286240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.
|
21
|
+
version: 2.0.1
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *11286240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &11285680 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,8 +32,9 @@ dependencies:
|
|
32
32
|
version: 3.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
description: Simply and customizable navigation in the Rails application
|
35
|
+
version_requirements: *11285680
|
36
|
+
description: ! "Simply and customizable navigation in the Ruby on Rails 3 application.\n
|
37
|
+
\ Predefined bootstrap renderers"
|
37
38
|
email:
|
38
39
|
- megacoder@rambler.ru
|
39
40
|
executables: []
|
@@ -45,17 +46,34 @@ files:
|
|
45
46
|
- Gemfile
|
46
47
|
- README.md
|
47
48
|
- Rakefile
|
49
|
+
- lib/generators/semantic_navigation/install/install_generator.rb
|
50
|
+
- lib/generators/semantic_navigation/install/templates/semantic_navigation.en.yml
|
51
|
+
- lib/generators/semantic_navigation/install/templates/semantic_navigation.rb
|
48
52
|
- lib/semantic_navigation.rb
|
49
53
|
- lib/semantic_navigation/configuration.rb
|
50
|
-
- lib/semantic_navigation/core
|
51
|
-
- lib/semantic_navigation/core/
|
54
|
+
- lib/semantic_navigation/core.rb
|
55
|
+
- lib/semantic_navigation/core/base.rb
|
56
|
+
- lib/semantic_navigation/core/leaf.rb
|
57
|
+
- lib/semantic_navigation/core/navigation.rb
|
58
|
+
- lib/semantic_navigation/core/node.rb
|
52
59
|
- lib/semantic_navigation/helper_methods.rb
|
53
|
-
- lib/semantic_navigation/item.rb
|
54
60
|
- lib/semantic_navigation/railtie.rb
|
61
|
+
- lib/semantic_navigation/renderers.rb
|
62
|
+
- lib/semantic_navigation/renderers/acts_as_breadcrumb.rb
|
63
|
+
- lib/semantic_navigation/renderers/acts_as_list.rb
|
64
|
+
- lib/semantic_navigation/renderers/bread_crumb.rb
|
65
|
+
- lib/semantic_navigation/renderers/list.rb
|
66
|
+
- lib/semantic_navigation/renderers/render_helpers.rb
|
67
|
+
- lib/semantic_navigation/twitter_bootstrap/breadcrumb.rb
|
68
|
+
- lib/semantic_navigation/twitter_bootstrap/list.rb
|
69
|
+
- lib/semantic_navigation/twitter_bootstrap/tabs.rb
|
55
70
|
- lib/semantic_navigation/version.rb
|
56
|
-
- lib/tasks/semantic_navigation.rake
|
57
|
-
- lib/tasks/templates/semantic_navigation.rb
|
58
71
|
- semantic_navigation.gemspec
|
72
|
+
- spec/lib/semantic_navigation/configuration_spec.rb
|
73
|
+
- spec/lib/semantic_navigation/custom_renderer.rb
|
74
|
+
- spec/lib/semantic_navigation/helper_methods_spec.rb
|
75
|
+
- spec/lib/semantic_navigation_spec.rb
|
76
|
+
- spec/spec_helper.rb
|
59
77
|
homepage: https://github.com/fr33z3/semantic_navigation
|
60
78
|
licenses: []
|
61
79
|
post_install_message:
|
@@ -1,94 +0,0 @@
|
|
1
|
-
module SemanticNavigation
|
2
|
-
module Core
|
3
|
-
module Render
|
4
|
-
|
5
|
-
def render(last_level = nil)
|
6
|
-
return nil if !render_item?
|
7
|
-
if @parent
|
8
|
-
level_condition = last_level.nil? ? true : @level < last_level
|
9
|
-
sub = (@active || show_submenu?) && level_condition ? render_submenu(last_level) : nil
|
10
|
-
view_object.content_tag(:li, item_link(classes) + sub, :id => li_id, :class => classes)
|
11
|
-
else
|
12
|
-
render_submenu
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def render_submenu(last_level = nil)
|
17
|
-
if @sub_items.count > 0
|
18
|
-
sub = @sub_items.map{|s| s.render(last_level)}.sum
|
19
|
-
view_object.content_tag(:ul, sub, :id => ul_id, :class => menu_classes) if sub != 0
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def set_as_active
|
24
|
-
@active = true
|
25
|
-
@parent.set_as_active if @parent
|
26
|
-
end
|
27
|
-
|
28
|
-
def find_active_item
|
29
|
-
item = nil
|
30
|
-
if active?
|
31
|
-
item = self
|
32
|
-
elsif @active
|
33
|
-
@sub_items.each do |s|
|
34
|
-
buff = s.find_active_item
|
35
|
-
item = buff if !buff.nil?
|
36
|
-
end
|
37
|
-
end
|
38
|
-
item
|
39
|
-
end
|
40
|
-
|
41
|
-
def render_breadcrumb
|
42
|
-
breadcrumb = nil
|
43
|
-
if @active
|
44
|
-
if @name
|
45
|
-
breadcrumb = view_object.content_tag(:li, item_link(breadcrumb_classes) + breadcrumb_divider, :id => li_id) if @name
|
46
|
-
end
|
47
|
-
buff = @sub_items.map{|s| s.render_breadcrumb}.find{|s| !s.nil?}
|
48
|
-
if !breadcrumb.nil?
|
49
|
-
breadcrumb += buff if !buff.nil?
|
50
|
-
else
|
51
|
-
breadcrumb = buff
|
52
|
-
end
|
53
|
-
end
|
54
|
-
breadcrumb = view_object.content_tag(:ul, breadcrumb, :id => ul_id, :class => breadcrumb_menu_classes) if !@parent
|
55
|
-
breadcrumb
|
56
|
-
end
|
57
|
-
|
58
|
-
def render_levels levels
|
59
|
-
if levels.is_a? Fixnum
|
60
|
-
levels = [levels]
|
61
|
-
else
|
62
|
-
levels = levels.to_a
|
63
|
-
end
|
64
|
-
item = find_active_item
|
65
|
-
return nil if item.nil?
|
66
|
-
while item.level > levels.first-1 && item.level != 0
|
67
|
-
item = item.parent
|
68
|
-
end
|
69
|
-
item.level == levels.first-1 ? item.render_submenu(levels.last) : nil
|
70
|
-
end
|
71
|
-
|
72
|
-
def render_from level_num
|
73
|
-
item = find_active_item
|
74
|
-
return nil if item.nil?
|
75
|
-
while item.level > level_num-1 && item.level != 0
|
76
|
-
item = item.parent
|
77
|
-
end
|
78
|
-
item.level == level_num-1 ? item.render_submenu : nil
|
79
|
-
end
|
80
|
-
|
81
|
-
private
|
82
|
-
|
83
|
-
def active?
|
84
|
-
!@parent.nil? ? view_object.current_page?(@url_options) : false
|
85
|
-
end
|
86
|
-
|
87
|
-
def item_link(classes_string)
|
88
|
-
view_object.link_to @name, @url_options, :class => classes_string, :id => a_id
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
@@ -1,118 +0,0 @@
|
|
1
|
-
require 'semantic_navigation/core/render'
|
2
|
-
require 'semantic_navigation/core/procs'
|
3
|
-
module SemanticNavigation
|
4
|
-
class Item
|
5
|
-
include Core::Render
|
6
|
-
include Core::Procs
|
7
|
-
|
8
|
-
#Menu variables
|
9
|
-
@@active_class = 'active'
|
10
|
-
@@show_active_class = true
|
11
|
-
@@show_menu_id = true
|
12
|
-
@@show_submenu = false
|
13
|
-
|
14
|
-
#Item variables
|
15
|
-
@@show_name_id = true
|
16
|
-
@@show_item_id = true
|
17
|
-
|
18
|
-
#Breadcrumb variables
|
19
|
-
@@breadcrumb_divider = "/"
|
20
|
-
@@breadcrumb_active_class = 'active'
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
attr_accessor :active_class, :show_active_class, :show_menu_id,
|
25
|
-
:show_item_id, :show_name_id, :show_submenu,
|
26
|
-
:menu_prefix, :item_prefix, :name_prefix,
|
27
|
-
:item_classes, :menu_classes,
|
28
|
-
:name, :parent, :level
|
29
|
-
|
30
|
-
def initialize(id, args, parent)
|
31
|
-
@item_id = id
|
32
|
-
@name = args.first
|
33
|
-
@url_options = args.second
|
34
|
-
@parent = parent
|
35
|
-
@sub_items = []
|
36
|
-
|
37
|
-
set_as_active if active?
|
38
|
-
end
|
39
|
-
|
40
|
-
def method_missing(name, *args)
|
41
|
-
item = SemanticNavigation::Item.new(name.to_s, args, self)
|
42
|
-
item.level = @level + 1
|
43
|
-
@sub_items << item
|
44
|
-
yield item if block_given?
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.set_default_option(name, value)
|
48
|
-
class_variable_set("@@#{name}".to_sym, value)
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def ul_id
|
54
|
-
prefix = @menu_prefix.nil? ? @@menu_prefix : @menu_prefix
|
55
|
-
flag = @show_menu_id.nil? ? @@show_menu_id : @show_menu_id
|
56
|
-
flag ? prefix+@item_id : nil
|
57
|
-
end
|
58
|
-
|
59
|
-
def li_id
|
60
|
-
prefix = @item_prefix.nil? ? @@item_prefix : @item_prefix
|
61
|
-
flag = @show_item_id.nil? ? @@show_item_id : @show_item_id
|
62
|
-
flag ? prefix+@item_id : nil
|
63
|
-
end
|
64
|
-
|
65
|
-
def a_id
|
66
|
-
prefix = @name_prefix.nil? ? @@name_prefix : @name_prefix
|
67
|
-
flag = @show_name_id.nil? ? @@show_name_id : @show_name_id
|
68
|
-
flag ? prefix+@item_id : nil
|
69
|
-
end
|
70
|
-
|
71
|
-
def classes
|
72
|
-
class_array = []
|
73
|
-
class_array << item_classes
|
74
|
-
active_class = @active_class.nil? ? @@active_class : @active_class
|
75
|
-
flag = @show_active_class.nil? ? @@show_active_class : @show_active_class
|
76
|
-
if @active && flag
|
77
|
-
class_array << active_class
|
78
|
-
end
|
79
|
-
class_array.flatten.join(' ')
|
80
|
-
end
|
81
|
-
|
82
|
-
def breadcrumb_classes
|
83
|
-
class_array = []
|
84
|
-
class_array += item_classes.to_a
|
85
|
-
class_array.push(@@breadcrumb_active_class) if active?
|
86
|
-
class_array
|
87
|
-
end
|
88
|
-
|
89
|
-
def view_object
|
90
|
-
@@view_object
|
91
|
-
end
|
92
|
-
|
93
|
-
def show_submenu?
|
94
|
-
@show_submenu.nil? ? @@show_submenu : @show_submenu
|
95
|
-
end
|
96
|
-
|
97
|
-
def breadcrumb_divider
|
98
|
-
@@breadcrumb_divider.html_safe if !active?
|
99
|
-
end
|
100
|
-
|
101
|
-
def breadcrumb_menu_classes
|
102
|
-
if @@breadcrumb_classes.is_a? Array
|
103
|
-
return @@breadcrumb_classes.join(' ')
|
104
|
-
else
|
105
|
-
return @@breadcrumb_classes
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def menu_classes
|
110
|
-
if @menu_classes.is_a? Array
|
111
|
-
return @menu_classes.join(' ')
|
112
|
-
else
|
113
|
-
return @menu_classes
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
#This file need to create the navigation in your app.
|
2
|
-
#You can learn more about how to customize your menu reading the wiki
|
3
|
-
#Wiki pages link: https://github.com/fr33z3/semantic_navigation/wiki/_pages
|
4
|
-
SemanticNavigation::Configuration.run do |config|
|
5
|
-
|
6
|
-
#What's the name of the active item class will be (the dafault is 'active')
|
7
|
-
#config.active_class = 'active';
|
8
|
-
|
9
|
-
#Do you want to show active class? (default = true)
|
10
|
-
#config.show_active_class = true
|
11
|
-
|
12
|
-
#Create the item ids (in the `li` tag) automatically (default = true)?
|
13
|
-
#config.show_item_id = true
|
14
|
-
|
15
|
-
#Create the menu ids (in the `ul` tag) automatically (default = true)?
|
16
|
-
#config.show_menu_id = true
|
17
|
-
|
18
|
-
#Create the name id (in the `a` tag) automatically (default = true)?
|
19
|
-
#config.show_name_id = true
|
20
|
-
|
21
|
-
#Show the submenu only when the menu is active (default = false)
|
22
|
-
#config.show_submenu = false
|
23
|
-
|
24
|
-
#Add menu prefix (`ul` tag)
|
25
|
-
#config.menu_prefix = 'menu_'
|
26
|
-
|
27
|
-
#Add item prefix (`li` tag)
|
28
|
-
#config.item_prefix = 'item_'
|
29
|
-
|
30
|
-
#Add name preifx (`a` tag)
|
31
|
-
#config.name_prefix = 'name_'
|
32
|
-
|
33
|
-
#Define breadcrumb divider
|
34
|
-
#config.breadcrumb_divider = "<span class ='divider'>/</span>"
|
35
|
-
|
36
|
-
#Define breadcrumb classes
|
37
|
-
#config.breadcrumb_classes = "breadcrumb"
|
38
|
-
|
39
|
-
#Define breadcrumb active class name (default = 'active')
|
40
|
-
#config.breadcrumb_active_class = 'active'
|
41
|
-
|
42
|
-
#That's the creation of the `navigation` menu
|
43
|
-
#config.navigation {|n|
|
44
|
-
# n.dashboard 'Dashboard', :controller => :dashboard, :action => :index do |d|
|
45
|
-
# d.first 'First', :controller => :first, :action => :index do |f|
|
46
|
-
# f.sub_first 'Sub First', sub_first_index_path
|
47
|
-
# f.sub_second 'Sub Second', :controller => :sub_second, :action => :index
|
48
|
-
# end
|
49
|
-
# end
|
50
|
-
# n.second 'Help', :controller => :second, :action => :index
|
51
|
-
#}
|
52
|
-
|
53
|
-
end
|