breadcrumbs_on_rails 0.1.1 → 0.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.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -3,8 +3,6 @@
|
|
3
3
|
BreadcrumbsOnRails is a simple Ruby on Rails plugin for creating and managing a breadcrumb navigation for a Rails project.
|
4
4
|
It provides helpers for creating navigation elements with a flexible interface.
|
5
5
|
|
6
|
-
Note. This documentation file is a work in progress. Please be patient.
|
7
|
-
|
8
6
|
|
9
7
|
== Requirements
|
10
8
|
|
@@ -19,7 +17,7 @@ Note. This documentation file is a work in progress. Please be patient.
|
|
19
17
|
This is the preferred way to install BreadcrumbsOnRails and the best way if you want install a stable version.
|
20
18
|
The GEM is hosted on {Gemcutter}[http://gemcutter.org/gems/tabs_on_rails].
|
21
19
|
|
22
|
-
$ gem install breadcrumbs_on_rails --source http://gemcutter.org
|
20
|
+
$ gem install breadcrumbs_on_rails --source http://gemcutter.org
|
23
21
|
|
24
22
|
With Rails >= 2.2, you can specify the GEM dependency in your environment.rb file so that Rails will automatically check the requirement on startup.
|
25
23
|
|
@@ -28,7 +26,7 @@ With Rails >= 2.2, you can specify the GEM dependency in your environment.rb fil
|
|
28
26
|
# other configurations
|
29
27
|
# ...
|
30
28
|
|
31
|
-
config.gem "breadcrumbs_on_rails", :source => "http://gemcutter.org
|
29
|
+
config.gem "breadcrumbs_on_rails", :source => "http://gemcutter.org"
|
32
30
|
|
33
31
|
end
|
34
32
|
|
@@ -41,7 +39,155 @@ This is the preferred way if you want to live on the edge and install a developm
|
|
41
39
|
|
42
40
|
== Usage
|
43
41
|
|
44
|
-
|
42
|
+
Having a breadcrumb navigation menu in your Rails app using BreadcrumbsOnRails is really straightforward.
|
43
|
+
|
44
|
+
In your controller, call <tt>add_breadcrumb</tt> to push a new element on the breadcrumb stack. <tt>add_breadcrumb</tt> requires two arguments: the name of the breadcrumb and the target path.
|
45
|
+
|
46
|
+
class MyController
|
47
|
+
|
48
|
+
add_breadcrumb "home", root_path
|
49
|
+
add_breadcrumb "my", my_path
|
50
|
+
|
51
|
+
def index
|
52
|
+
# ...
|
53
|
+
|
54
|
+
add_breadcrumb "index", index_path
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
In your view, you can render the breadcrumb menu with the <tt>render_breadcrumbs</tt> helper.
|
60
|
+
|
61
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
62
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
63
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
64
|
+
<head>
|
65
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
66
|
+
<title>untitled</title>
|
67
|
+
</head>
|
68
|
+
|
69
|
+
<body>
|
70
|
+
<%= render_breadcrumbs %>
|
71
|
+
</body>
|
72
|
+
</html>
|
73
|
+
|
74
|
+
<tt>render_breadcrumbs</tt> understands a limited set of options. For example, you can pass change the default separator with the <tt>:separator</tt> option.
|
75
|
+
|
76
|
+
<body>
|
77
|
+
<%= render_breadcrumbs :separator => ' / ' %>
|
78
|
+
</body>
|
79
|
+
|
80
|
+
More complex customizations require a custom Builder (documentation yet to come).
|
81
|
+
|
82
|
+
=== Breadcrumb Element
|
83
|
+
|
84
|
+
A breadcrumbs menu is composed by a number of <tt>Element</tt> objects. Each object contains two attributes: the name of the breadcrumb and the target path.
|
85
|
+
|
86
|
+
When you call <tt>add_breadcrumb</tt>, the method automatically creates a new <tt>Element</tt> object for you and append it to the breadcrumbs stack. <tt>Element</tt> name and path can be one of the following Ruby types:
|
87
|
+
|
88
|
+
<ul>
|
89
|
+
<li>Symbol</li>
|
90
|
+
<li>Proc</li>
|
91
|
+
<li>String</li>
|
92
|
+
</ul>
|
93
|
+
|
94
|
+
==== Symbol
|
95
|
+
|
96
|
+
If the value is a Symbol, the library calls the corresponding method defined in the same context the and sets the <tt>Element</tt> attribute to the returned value.
|
97
|
+
|
98
|
+
class MyController
|
99
|
+
|
100
|
+
# The Name is set to the value returned by
|
101
|
+
# the :root_name method.
|
102
|
+
add_breadcrumb :root_name, root_path
|
103
|
+
|
104
|
+
protected
|
105
|
+
|
106
|
+
def root_name
|
107
|
+
"the name"
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
==== Proc
|
113
|
+
|
114
|
+
If the value is a Proc, the library calls the proc passing the current view context as argument and sets the <tt>Element</tt> attribute to the returned value. This is useful if you want to postpone the execution to get access to some special methods/variables created in your controller action.
|
115
|
+
|
116
|
+
class MyController
|
117
|
+
|
118
|
+
# The Name is set to the value returned by
|
119
|
+
# the :root_name method.
|
120
|
+
add_breadcrumb Proc.new { |c| c.my_helper_method },
|
121
|
+
root_path
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
==== String
|
126
|
+
|
127
|
+
If the value is a Proc, the library sets the <tt>Element</tt> attribute to the string value.
|
128
|
+
|
129
|
+
class MyController
|
130
|
+
|
131
|
+
# The Name is set to the value returned by
|
132
|
+
# the :root_name method.
|
133
|
+
add_breadcrumb "homepage", "http://example.com/"
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
=== Restricting set_tab scope
|
139
|
+
|
140
|
+
The <tt>add_breadcrumb</tt> method understands all options you are used to pass to a Rails controller filter.
|
141
|
+
In fact, behind the scenes this method uses a <tt>before_filter</tt> to store the tab in the <tt>@breadcrumbs</tt> variable.
|
142
|
+
|
143
|
+
Taking advantage of Rails filter options, you can restrict a tab to a selected group of actions in the same controller.
|
144
|
+
|
145
|
+
class PostsController < ApplicationController
|
146
|
+
add_breadcrumb "admin", admin_path
|
147
|
+
add_breadcrumb "posts, posts_path, :only => %w(index show)
|
148
|
+
end
|
149
|
+
|
150
|
+
class ApplicationController < ActionController::Base
|
151
|
+
add_breadcrumb "admin", admin_path, :if => :admin_controller?
|
152
|
+
|
153
|
+
def admin_controller?
|
154
|
+
self.class.name =~ /^Admin(::|Controller)/
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
=== Internationalization and Localization
|
159
|
+
|
160
|
+
BreadcrumbsOnRails is compatible with the standard Rails internationalization framework.
|
161
|
+
|
162
|
+
For example, if you want to localize your menu, define a new breadcrumbs node in your .yml file with all the keys for your elements.
|
163
|
+
|
164
|
+
# config/locales/en.yml
|
165
|
+
en:
|
166
|
+
breadcrumbs:
|
167
|
+
homepage: Homepage
|
168
|
+
first: First
|
169
|
+
second: Second
|
170
|
+
third: Third
|
171
|
+
|
172
|
+
# config/locales/it.yml
|
173
|
+
it:
|
174
|
+
breadcrumbs:
|
175
|
+
homepage: Homepage
|
176
|
+
first: Primo
|
177
|
+
second: Secondo
|
178
|
+
third: Terzo
|
179
|
+
|
180
|
+
In your controller, use the <tt>I18n.t</tt> method.
|
181
|
+
|
182
|
+
class PostsController < ApplicationController
|
183
|
+
add_breadcrumb I18n.t("breadcrumbs.first"), first_path
|
184
|
+
add_breadcrumb I18n.t("breadcrumbs.second"), second_path, :only => %w(second)
|
185
|
+
add_breadcrumb I18n.t("breadcrumbs.third"), third_path, :only => %w(third)
|
186
|
+
end
|
187
|
+
|
188
|
+
class ApplicationController < ActionController::Base
|
189
|
+
add_breadcrumb I18n.t("breadcrumbs.homepage"), root_path
|
190
|
+
end
|
45
191
|
|
46
192
|
|
47
193
|
== Documentation
|
@@ -52,13 +198,13 @@ For the full documentation, development roadmap and more information please visi
|
|
52
198
|
|
53
199
|
== Credits
|
54
200
|
|
55
|
-
Author:: {Simone Carletti}[http://www.simonecarletti.com
|
201
|
+
Author:: {Simone Carletti}[http://www.simonecarletti.com] <weppos@weppos.net>
|
56
202
|
|
57
203
|
|
58
204
|
== Resources
|
59
205
|
|
60
206
|
* {Homepage}[http://code.simonecarletti.com/breadonrails]
|
61
|
-
* {GitHub}[http://github.com/weppos/breadcrumbs_on_rails
|
207
|
+
* {GitHub}[http://github.com/weppos/breadcrumbs_on_rails]
|
62
208
|
|
63
209
|
|
64
210
|
== License
|
@@ -15,9 +15,9 @@
|
|
15
15
|
|
16
16
|
|
17
17
|
module BreadcrumbsOnRails
|
18
|
-
|
18
|
+
|
19
19
|
module ControllerMixin
|
20
|
-
|
20
|
+
|
21
21
|
def self.included(base)
|
22
22
|
base.extend ClassMethods
|
23
23
|
base.send :helper, HelperMethods
|
@@ -98,10 +98,10 @@ module BreadcrumbsOnRails
|
|
98
98
|
else
|
99
99
|
content
|
100
100
|
end
|
101
|
-
end
|
102
|
-
|
101
|
+
end
|
102
|
+
|
103
103
|
end
|
104
|
-
|
104
|
+
|
105
105
|
end
|
106
106
|
|
107
107
|
end
|