menumatic 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/README.md +3 -2
- data/lib/menumatic/engine.rb +1 -0
- data/lib/menumatic/helpers/navigation_helper.rb +3 -15
- data/lib/menumatic/navigation/item/link.rb +2 -1
- data/lib/menumatic/navigation/item/renderers.rb +14 -3
- data/lib/menumatic/navigation.rb +7 -0
- data/lib/menumatic/rails/rendering.rb +14 -0
- data/lib/menumatic/version.rb +1 -1
- data/lib/menumatic.rb +1 -1
- metadata +5 -4
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
Menumatic is a _Rails 3 exclusive_ gem which aids in developing HTML
|
4
4
|
navigation menus.
|
5
5
|
|
6
|
+
__Please note__ menumatic is still in alpha however all the features mentioned in the readme should be working as expected - at the moment we're focussed on improving test coverage to bring us up to a proper, full release.
|
6
7
|
|
7
8
|
## Philosophy
|
8
9
|
|
@@ -28,7 +29,7 @@ Then update your bundle:
|
|
28
29
|
|
29
30
|
You can then get started by generating a new navigation:
|
30
31
|
|
31
|
-
$ rails g navigation
|
32
|
+
$ rails g menumatic:navigation
|
32
33
|
|
33
34
|
This will create the file `app/navigation/application_navigation.rb` which you can use to
|
34
35
|
define the structure of your navigation items.
|
@@ -45,7 +46,7 @@ Navigations are stored in `app/navigation`. The default navigation is
|
|
45
46
|
given a name of 'application', however you can specify the name in the
|
46
47
|
generator:
|
47
48
|
|
48
|
-
$ rails g navigation application
|
49
|
+
$ rails g menumatic:navigation application
|
49
50
|
|
50
51
|
Which will generate a navigation called
|
51
52
|
`app/navigation/application_navigation.rb` and the basic stylesheet.
|
data/lib/menumatic/engine.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Menumatic
|
2
2
|
module Helpers
|
3
3
|
module NavigationHelper
|
4
|
-
def
|
4
|
+
def menumatic(navigation_id = :application, options = {})
|
5
5
|
options[:level] ||= nil # single level to render, overrides any other level settings
|
6
6
|
options[:levels] ||= [options[:level]].delete_if{ |l| l.blank? }
|
7
7
|
|
@@ -9,9 +9,9 @@ module Menumatic
|
|
9
9
|
options[:groups] ||= [options[:groups]].delete_if{ |g| g.blank? }
|
10
10
|
|
11
11
|
options[:class] ||= ""
|
12
|
-
options[:class] += "navigation #{navigation_id}"
|
12
|
+
options[:class] += "navigation #{navigation_id.to_s}"
|
13
13
|
|
14
|
-
navigation = load_navigation(navigation_id)
|
14
|
+
navigation = Menumatic::Navigation::Base.load_navigation(navigation_id.to_sym)
|
15
15
|
navigation.root.render(request, options)
|
16
16
|
end
|
17
17
|
|
@@ -19,18 +19,6 @@ module Menumatic
|
|
19
19
|
navigation = load_navigation(navigation_id)
|
20
20
|
navigation.root.render_sitemap(document, request, options)
|
21
21
|
end
|
22
|
-
|
23
|
-
def load_navigation(navigation_id)
|
24
|
-
# Eager load the requested navgation (allows for use of normal if/unless statements)
|
25
|
-
Menumatic::Navigation::Base.destroy_all
|
26
|
-
load "app/navigation/#{navigation_id}_navigation.rb"
|
27
|
-
Menumatic::Navigation::Base.get(navigation_id)
|
28
|
-
end
|
29
|
-
|
30
|
-
def navigation_group(navigation_id, group_id, options = {})
|
31
|
-
options = options.merge({:group => group_id})
|
32
|
-
navigation(navigation_id, options)
|
33
|
-
end
|
34
22
|
end
|
35
23
|
end
|
36
24
|
end
|
@@ -26,7 +26,7 @@ module Menumatic
|
|
26
26
|
unless list.blank?
|
27
27
|
list_options = html_options.merge({})
|
28
28
|
list_options[:class] += " level_#{options[:current_level]}"
|
29
|
-
list_options[:class] += " depth_#{
|
29
|
+
list_options[:class] += " depth_#{depth_count(request, options)}" if options[:current_level] == 1
|
30
30
|
if on_valid_level?(options[:levels], options[:current_level]) || options[:current_level] == 1
|
31
31
|
list = content_tag(options[:wrapper_tag], list.html_safe, list_options)
|
32
32
|
else
|
@@ -92,8 +92,19 @@ module Menumatic
|
|
92
92
|
0
|
93
93
|
end
|
94
94
|
|
95
|
+
def depth_count(request, options = {})
|
96
|
+
return options[:levels].count unless options[:levels].empty?
|
97
|
+
count_active_descendants(request)
|
98
|
+
end
|
99
|
+
|
95
100
|
def paths_match?(request)
|
96
|
-
|
101
|
+
if self.is_link?
|
102
|
+
self.active_paths.each do |path|
|
103
|
+
return true if path.is_a?(Regexp) && (request.fullpath =~ path || request.url =~ path)
|
104
|
+
return true if path.is_a?(String) && (request.fullpath == path || request.url == path)
|
105
|
+
end
|
106
|
+
return request.fullpath == self.destination || request.url == self.destination if self.active_paths.empty?
|
107
|
+
end
|
97
108
|
end
|
98
109
|
|
99
110
|
def on_valid_level?(levels, current_level)
|
@@ -101,7 +112,7 @@ module Menumatic
|
|
101
112
|
end
|
102
113
|
|
103
114
|
def levels_to_i(levels_in_words)
|
104
|
-
levels_in_words.map{ |word| @@level_options.index(word.to_sym) + 1 }
|
115
|
+
levels_in_words.map{ |word| word.is_a?(Symbol) ? @@level_options.index(word.to_sym) + 1 : word }
|
105
116
|
end
|
106
117
|
end
|
107
118
|
end
|
data/lib/menumatic/navigation.rb
CHANGED
@@ -38,6 +38,13 @@ module Menumatic
|
|
38
38
|
def destroy_all
|
39
39
|
@@navigations = {}
|
40
40
|
end
|
41
|
+
|
42
|
+
def load_navigation(navigation_id)
|
43
|
+
# Eager load the requested navgation (allows for use of normal if/unless statements)
|
44
|
+
Menumatic::Navigation::Base.destroy_all
|
45
|
+
load "app/navigation/#{navigation_id}_navigation.rb"
|
46
|
+
Menumatic::Navigation::Base.get(navigation_id)
|
47
|
+
end
|
41
48
|
end
|
42
49
|
|
43
50
|
def initialize(id)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ActionView
|
2
|
+
module Rendering
|
3
|
+
def render_with_navigation_option(options = {}, locals = {}, &block)
|
4
|
+
if options.has_key? :navigation
|
5
|
+
navigation_id = options[:navigation]
|
6
|
+
options.delete(:navigation)
|
7
|
+
menumatic(navigation_id, options)
|
8
|
+
else
|
9
|
+
render_without_navigation_option(options, locals, &block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
alias_method_chain :render, :navigation_option
|
13
|
+
end
|
14
|
+
end
|
data/lib/menumatic/version.rb
CHANGED
data/lib/menumatic.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module Menumatic
|
2
2
|
module Helpers
|
3
3
|
autoload :NavigationHelper, 'menumatic/helpers/navigation_helper'
|
4
|
-
ActionController::Base.helper(Menumatic::Helpers::NavigationHelper)
|
5
4
|
end
|
6
5
|
|
7
6
|
module Navigation
|
@@ -20,4 +19,5 @@ module Menumatic
|
|
20
19
|
end
|
21
20
|
|
22
21
|
require 'menumatic/rails/routes'
|
22
|
+
require 'menumatic/rails/rendering'
|
23
23
|
require 'menumatic/engine'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: menumatic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nicholas Bruning
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-10 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/menumatic/navigation/item/link.rb
|
58
58
|
- lib/menumatic/navigation/item/navigators.rb
|
59
59
|
- lib/menumatic/navigation/item/renderers.rb
|
60
|
+
- lib/menumatic/rails/rendering.rb
|
60
61
|
- lib/menumatic/rails/routes.rb
|
61
62
|
- lib/menumatic/version.rb
|
62
63
|
- menumatic.gemspec
|