navigator 5.0.0 → 5.5.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.
@@ -3,20 +3,9 @@
3
3
  module Navigator
4
4
  # Gem identity information.
5
5
  module Identity
6
- def self.name
7
- "navigator"
8
- end
9
-
10
- def self.label
11
- "Navigator"
12
- end
13
-
14
- def self.version
15
- "5.0.0"
16
- end
17
-
18
- def self.version_label
19
- "#{label} #{version}"
20
- end
6
+ NAME = "navigator"
7
+ LABEL = "Navigator"
8
+ VERSION = "5.5.0"
9
+ VERSION_LABEL = "#{LABEL} #{VERSION}"
21
10
  end
22
11
  end
@@ -3,11 +3,11 @@
3
3
  module Navigator
4
4
  # Renders a HTML menu.
5
5
  class Menu
6
- # rubocop:disable Metrics/LineLength
6
+ # rubocop:disable Layout/LineLength
7
7
  def self.allowed_methods
8
8
  /^(div|section|header|h[1-6]|nav|ul|li|a|img|b|em|s|small|span|strong|sub|sup|form|label|select|option|input|button)$/
9
9
  end
10
- # rubocop:enable Metrics/LineLength
10
+ # rubocop:enable Layout/LineLength
11
11
 
12
12
  def initialize template,
13
13
  tag: "ul",
@@ -19,12 +19,12 @@ module Navigator
19
19
  @tag = Navigator::Tag.new tag, attributes: attributes, activator: activator
20
20
  @menu_activator = activator
21
21
  @items = []
22
- instance_eval(&block) if block_given?
22
+ instance_eval(&block) if block
23
23
  end
24
24
 
25
25
  def add name, content = nil, attributes: {}, activator: menu_activator, &block
26
26
  tag = Navigator::Tag.new name, content, attributes: attributes, activator: activator
27
- return items << tag.render unless block_given?
27
+ return items << tag.render unless block
28
28
 
29
29
  items << tag.prefix
30
30
  items << tag.content
@@ -71,7 +71,7 @@ module Navigator
71
71
  end
72
72
 
73
73
  def render
74
- [tag.prefix, tag.content, items.compact.join(""), tag.suffix].compact * ""
74
+ [tag.prefix, tag.content, items.compact.join, tag.suffix].compact.join
75
75
  end
76
76
 
77
77
  private
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: navigator
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIC/jCCAeagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
- a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0xOTAyMTcxNjAxMTFaFw0yMDAyMTcx
15
- NjAxMTFaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
13
+ MIIC/jCCAeagAwIBAgIBAzANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
+ a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMDAzMTUxNDQ1MzJaFw0yMTAzMTUx
15
+ NDQ1MzJaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
16
16
  IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6l1qpXTiomH1RfMRloyw7MiE
17
17
  xyVx/x8Yc3EupdH7uhNaTXQGyORN6aOY//1QXXMHIZ9tW74nZLhesWMSUMYy0XhB
18
18
  brs+KkurHnc9FnEJAbG7ebGvl/ncqZt72nQvaxpDxvuCBHgJAz+8i5wl6FhLw+oT
@@ -20,15 +20,15 @@ cert_chain:
20
20
  D5vkU0YlAm1r98BymuJlcQ1qdkVEI1d48ph4kcS0S0nv1RiuyVb6TCAR3Nu3VaVq
21
21
  3fPzZKJLZBx67UvXdbdicWPiUR75elI4PXpLIic3xytaF52ZJYyKZCNZJhNwfQID
22
22
  AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU0nzow9vc
23
- 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBANgfX7kPZkJvsbdWMvbe
24
- DUUYxRTqTUzCDpLd2p3sQvgLMKjTNSKt6CFq/kh+98b6RCgO6DqiVfxvOEq02dvf
25
- ebMN/ylQqan2FgiAs1rpP0/D4C0MlBjoDktsT+2IyLol1KmkDB20ExJ4Sf1GRNdA
26
- hpWOtcgqHtmrc7xzgB6BuyoYufrKKUlCO3ewTM4C375D2qO7hIdKuMOO3CdPMtSk
27
- OrWpbzCL+nbbXqeoqiHgZaUvcyyQrGj5sQRxMTzuMXzzQxtHnuTuKrcz16HMTX/O
28
- dKvURM+1PwDCzC5tvRwjhUJIizau6+MtkFCvJHmaAj1aZL3odcPejHj5Hxt/0CUW
29
- y84=
23
+ 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAIHhAlD3po4sTYqacXaQ
24
+ XI9jIhrfMy//2PgbHWcETtlJPBeNUbbSNBABcllUHKqYsVDlSvSmss034KSWNR8F
25
+ bF1GcloicyvcCC4y6IoW4it0COAcdeaaxkxiBSgKdQFpff9REnDlIKK4uQ9lLxIo
26
+ Y2G5xubiziKZkyfWFuSr67PIjW3Bu673D1JVBArhA1qbgQmYQcy1CkGOjo+iO8Nf
27
+ 7u/QSfBHb+r/bXhKscDgPpnKwbUmvgO2+94zJG9KsrmIydlzYfsD09aXKx0t6Xy4
28
+ 2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
+ QWc=
30
30
  -----END CERTIFICATE-----
31
- date: 2020-01-01 00:00:00.000000000 Z
31
+ date: 2020-12-13 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rails
@@ -45,240 +45,30 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: '6.0'
47
47
  - !ruby/object:Gem::Dependency
48
- name: bundler-audit
48
+ name: refinements
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.6'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '0.6'
61
- - !ruby/object:Gem::Dependency
62
- name: capybara
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '3.1'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '3.1'
75
- - !ruby/object:Gem::Dependency
76
- name: gemsmith
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '14.0'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '14.0'
89
- - !ruby/object:Gem::Dependency
90
- name: git-cop
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '4.0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '4.0'
103
- - !ruby/object:Gem::Dependency
104
- name: guard-rspec
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '4.7'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '4.7'
117
- - !ruby/object:Gem::Dependency
118
- name: pg
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '1.2'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '1.2'
131
- - !ruby/object:Gem::Dependency
132
- name: pry
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '0.12'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '0.12'
145
- - !ruby/object:Gem::Dependency
146
- name: pry-byebug
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '3.7'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '3.7'
159
- - !ruby/object:Gem::Dependency
160
- name: rake
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '13.0'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '13.0'
173
- - !ruby/object:Gem::Dependency
174
- name: reek
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '5.4'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: '5.4'
187
- - !ruby/object:Gem::Dependency
188
- name: rspec-rails
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '3.9'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '3.9'
201
- - !ruby/object:Gem::Dependency
202
- name: rubocop
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - "~>"
206
- - !ruby/object:Gem::Version
207
- version: '0.78'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - "~>"
213
- - !ruby/object:Gem::Version
214
- version: '0.78'
215
- - !ruby/object:Gem::Dependency
216
- name: rubocop-performance
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - "~>"
220
- - !ruby/object:Gem::Version
221
- version: '1.5'
222
- type: :development
223
- prerelease: false
224
- version_requirements: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - "~>"
227
- - !ruby/object:Gem::Version
228
- version: '1.5'
229
- - !ruby/object:Gem::Dependency
230
- name: rubocop-rake
231
- requirement: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - "~>"
234
- - !ruby/object:Gem::Version
235
- version: '0.5'
236
- type: :development
237
- prerelease: false
238
- version_requirements: !ruby/object:Gem::Requirement
239
- requirements:
240
- - - "~>"
241
- - !ruby/object:Gem::Version
242
- version: '0.5'
243
- - !ruby/object:Gem::Dependency
244
- name: rubocop-rspec
245
- requirement: !ruby/object:Gem::Requirement
246
- requirements:
247
- - - "~>"
248
- - !ruby/object:Gem::Version
249
- version: '1.37'
250
- type: :development
251
- prerelease: false
252
- version_requirements: !ruby/object:Gem::Requirement
253
- requirements:
254
- - - "~>"
255
- - !ruby/object:Gem::Version
256
- version: '1.37'
257
- - !ruby/object:Gem::Dependency
258
- name: simplecov
259
- requirement: !ruby/object:Gem::Requirement
260
- requirements:
261
- - - "~>"
262
- - !ruby/object:Gem::Version
263
- version: '0.17'
264
- type: :development
53
+ version: '7.16'
54
+ type: :runtime
265
55
  prerelease: false
266
56
  version_requirements: !ruby/object:Gem::Requirement
267
57
  requirements:
268
58
  - - "~>"
269
59
  - !ruby/object:Gem::Version
270
- version: '0.17'
271
- description:
60
+ version: '7.16'
61
+ description:
272
62
  email:
273
63
  - brooke@alchemists.io
274
64
  executables: []
275
65
  extensions: []
276
66
  extra_rdoc_files:
277
- - README.md
278
- - LICENSE.md
67
+ - README.adoc
68
+ - LICENSE.adoc
279
69
  files:
280
- - LICENSE.md
281
- - README.md
70
+ - LICENSE.adoc
71
+ - README.adoc
282
72
  - app/helpers/navigator/navigation_helper.rb
283
73
  - lib/navigator.rb
284
74
  - lib/navigator/engine.rb
@@ -286,14 +76,15 @@ files:
286
76
  - lib/navigator/menu.rb
287
77
  - lib/navigator/tag.rb
288
78
  - lib/navigator/tag_activator.rb
289
- homepage: https://github.com/bkuhlmann/navigator
79
+ homepage: https://www.alchemists.io/projects/navigator
290
80
  licenses:
291
81
  - Apache-2.0
292
82
  metadata:
293
- source_code_uri: https://github.com/bkuhlmann/navigator
294
- changelog_uri: https://github.com/bkuhlmann/navigator/blob/master/CHANGES.md
295
83
  bug_tracker_uri: https://github.com/bkuhlmann/navigator/issues
296
- post_install_message:
84
+ changelog_uri: https://www.alchemists.io/projects/navigator/changes.html
85
+ documentation_uri: https://www.alchemists.io/projects/navigator
86
+ source_code_uri: https://github.com/bkuhlmann/navigator
87
+ post_install_message:
297
88
  rdoc_options: []
298
89
  require_paths:
299
90
  - lib
@@ -308,8 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
308
99
  - !ruby/object:Gem::Version
309
100
  version: '0'
310
101
  requirements: []
311
- rubygems_version: 3.1.2
312
- signing_key:
102
+ rubygems_version: 3.2.0
103
+ signing_key:
313
104
  specification_version: 4
314
105
  summary: Enhances Rails with a DSL for menu navigation.
315
106
  test_files: []
metadata.gz.sig CHANGED
Binary file
data/README.md DELETED
@@ -1,419 +0,0 @@
1
- <p align="center">
2
- <img src="navigator.png" alt="Navigator Icon"/>
3
- </p>
4
-
5
- # Navigator
6
-
7
- [![Gem Version](https://badge.fury.io/rb/navigator.svg)](http://badge.fury.io/rb/navigator)
8
- [![Code Climate Maintainability](https://api.codeclimate.com/v1/badges/2f8632ec1f734ea9561a/maintainability)](https://codeclimate.com/github/bkuhlmann/navigator/maintainability)
9
- [![Code Climate Test Coverage](https://api.codeclimate.com/v1/badges/2f8632ec1f734ea9561a/test_coverage)](https://codeclimate.com/github/bkuhlmann/navigator/test_coverage)
10
- [![Circle CI Status](https://circleci.com/gh/bkuhlmann/navigator.svg?style=svg)](https://circleci.com/gh/bkuhlmann/navigator)
11
-
12
- Enhances Rails with a DSL for menu navigation.
13
-
14
- <!-- Tocer[start]: Auto-generated, don't remove. -->
15
-
16
- ## Table of Contents
17
-
18
- - [Features](#features)
19
- - [Requirements](#requirements)
20
- - [Setup](#setup)
21
- - [Usage](#usage)
22
- - [Unordered List (simple)](#unordered-list-simple)
23
- - [Unordered List (with attributes)](#unordered-list-with-attributes)
24
- - [Unordered List (with multiple data attributes)](#unordered-list-with-multiple-data-attributes)
25
- - [Nav (with links)](#nav-with-links)
26
- - [Foundation Menu](#foundation-menu)
27
- - [Bootstrap Dropdown](#bootstrap-dropdown)
28
- - [Menu Helpers](#menu-helpers)
29
- - [Customization](#customization)
30
- - [Tests](#tests)
31
- - [Versioning](#versioning)
32
- - [Code of Conduct](#code-of-conduct)
33
- - [Contributions](#contributions)
34
- - [License](#license)
35
- - [History](#history)
36
- - [Credits](#credits)
37
-
38
- <!-- Tocer[finish]: Auto-generated, don't remove. -->
39
-
40
- ## Features
41
-
42
- - Provides a DSL for building navigation menus.
43
- - Supports auto-detection/highlighting of active menu items based on current path (customizable for
44
- non-path usage too).
45
- - Supports sub-menus, nested tags, HTML attributes, etc.
46
- - Supports the following HTML tags:
47
- - div
48
- - section
49
- - header
50
- - h1 - h6
51
- - nav
52
- - ul
53
- - li
54
- - a
55
- - img
56
- - b
57
- - em
58
- - s
59
- - small
60
- - span
61
- - strong
62
- - sub
63
- - sup
64
- - form
65
- - label
66
- - select
67
- - option
68
- - input
69
- - button
70
- - Provides `link`, `image`, and `item` convenience methods for succinct ways to build commonly used
71
- menu elements.
72
-
73
- ## Requirements
74
-
75
- 1. [Ruby 2.6.x](https://www.ruby-lang.org).
76
- 1. [Ruby on Rails 5.x.x](http://rubyonrails.org).
77
-
78
- ## Setup
79
-
80
- Type the following to install:
81
-
82
- gem install navigator
83
-
84
- Add the following to your Gemfile:
85
-
86
- gem "navigator"
87
-
88
- ## Usage
89
-
90
- The following are examples using the navigation view helper:
91
-
92
- ### Unordered List (simple)
93
-
94
- Code:
95
-
96
- navigation do
97
- item "Dashboard", "/dashboard"
98
- item "News", "/posts"
99
- end
100
-
101
- Result:
102
-
103
- <ul>
104
- <li><a href="/dashboard">Dashboard</a></li>
105
- <li><a href="/posts">Posts</a></li>
106
- </ul>
107
-
108
- ### Unordered List (with attributes)
109
-
110
- Code:
111
-
112
- navigation "ul", attributes: {class: "nav"} do
113
- item "Dashboard", "/dashboard", item_attributes: {class: "active"}
114
- item "News", "/posts"
115
- end
116
-
117
- Result:
118
-
119
- <ul class="nav">
120
- <li class="active"><a href="/dashboard">Dashboard</a></li>
121
- <li><a href="/posts">Posts</a></li>
122
- </ul>
123
-
124
- ### Unordered List (with multiple data attributes)
125
-
126
- Code:
127
-
128
- navigation do
129
- item "Home", "/home", item_attributes: {data: {id: 1, type: "public"}}
130
- end
131
-
132
- Result:
133
-
134
- <ul>
135
- <li data-id="1" data-type="public"><a href="/home">Home</a></li>
136
- </ul>
137
-
138
- *TIP: Nested data-- attributes can be applied to any menu item in the same manner as Rails view
139
- helpers.*
140
-
141
- ### Nav (with links)
142
-
143
- Code:
144
-
145
- navigation "nav" do
146
- a "Dashboard", attributes: {href: "/dashboard"}
147
- a "News", attributes: {href: "/posts"}
148
- end
149
-
150
- Result:
151
-
152
- <nav>
153
- <a href="/dashboard">Dashboard</a>
154
- <a href="/posts">Posts</a>
155
- </nav>
156
-
157
- ### Foundation Menu
158
-
159
- Code:
160
-
161
- navigation "nav", attributes: {class: "top-bar", "data-topbar" => nil} do
162
- ul attributes: {class: "title-area"} do
163
- li attributes: {class: "name"} do
164
- h1 do
165
- a "Demo", attributes: {href: "/home"}
166
- end
167
- end
168
- end
169
-
170
- section attributes: {class: "top-bar-section"} do
171
- ul attributes: {class: "left"} do
172
- item "Home", "/"
173
- item "About", "/about"
174
- end
175
-
176
- ul attributes: {class: "right"} do
177
- item "v1.0.0", '#'
178
- end
179
-
180
- ul attributes: {class: "right"} do
181
- item "Login", "/login", link_attributes: {class: "button tiny round"}
182
- end
183
- end
184
- end
185
-
186
- Result:
187
-
188
- <nav class="top-bar" data-topbar="">
189
- <ul class="title-area">
190
- <li class="name">
191
- <h1><a href="/" class="active">Demo</a></h1>
192
- </li>
193
- </ul>
194
-
195
- <section class="top-bar-section">
196
- <ul class="left">
197
- <li class="active"><a href="/">Home</a></li>
198
- <li><a href="/about">About</a></li>
199
- </ul>
200
-
201
- <ul class="right">
202
- <li><a href="#">v1.0.0</a></li>
203
- </ul>
204
-
205
- <ul class="right">
206
- <li><a class="button tiny round" href="/login">Login</a></li>
207
- </ul>
208
- </section>
209
- </nav>
210
-
211
- ### Bootstrap Dropdown
212
-
213
- Code:
214
-
215
- navigation "nav" do
216
- item "Dashboard", admin_dashboard_path
217
- li attributes: {class: "dropdown"} do
218
- a "Manage", attributes: {href: "#", class: "dropdown-toggle", "data-toggle" => "dropdown"} do
219
- b attributes: {class: "caret"}
220
- end
221
- ul attributes: {class: "dropdown-menu"} do
222
- item "Dashboard", admin_dashboard_path
223
- item "Users", admin_users_path
224
- end
225
- end
226
- end
227
-
228
- Result:
229
-
230
- <ul class="nav">
231
- <li><a href="/admin/dashboard">Dashboard</a></li>
232
- <li class="dropdown">
233
- <a data-toggle="dropdown" class="dropdown-toggle" href="#">
234
- Manage
235
- <b class="caret"></b>
236
- </a>
237
- <ul class="dropdown-menu">
238
- <li><a href="/admin/dashboard">Dashboard</a></li>
239
- <li><a href="/admin/users">Users</a></li>
240
- </ul>
241
- </li>
242
- </ul>
243
-
244
- ### Menu Helpers
245
-
246
- There are several convenience methods, in addition to the standard HTML tags, that can make for
247
- shorter lines of code. The following describes each:
248
-
249
- When building links, the default is:
250
-
251
- navigation "nav", activator: activator do
252
- a "Home", attributes: {href: home_path}
253
- end
254
-
255
- ...but can be written as:
256
-
257
- navigation "nav", activator: activator do
258
- link "Home", home_path
259
- end
260
-
261
- When building images, the default is:
262
-
263
- navigation "nav", activator: activator do
264
- img attributes: {src: "https://placehold.it/50x50", alt: "Example"}
265
- end
266
-
267
- ...but can be written as:
268
-
269
- navigation "nav", activator: activator do
270
- image "https://placehold.it/50x50", "Example"
271
- end
272
-
273
- When building menu items, the default is:
274
-
275
- navigation "nav", activator: activator do
276
- li do
277
- a "Home", attributes: {href: home_path}
278
- end
279
- end
280
-
281
- ...but can be written as:
282
-
283
- navigation "nav", activator: activator do
284
- item "Home", "/dashboard"
285
- end
286
-
287
- These are just a few, simple, examples of what can be achieved. See the specs for additional usage
288
- and customization.
289
-
290
- ## Customization
291
-
292
- The `navigation` view helper can accept an optional `Navigator::TagActivator` instance. Example:
293
-
294
- # Code
295
- activator = Navigator::TagActivator.new search_value: request.env["PATH_INFO"]
296
-
297
- navigation "nav", activator: activator do
298
- link "Home", home_path
299
- link "About", about_path
300
- end
301
-
302
- <!-- Result -->
303
- <nav>
304
- <a href="/home" class="active">Home</a>
305
- <a href="/about" class="active">About</a>
306
- </nav>
307
-
308
- This is the default behavior for all navigation menus and is how menu items automaticaly get the
309
- "active" class when the item URL (in this case "/home") matches the `request.env[“PATH_INFO"]` to
310
- indicate current page/active tab.
311
-
312
- `Navigator::TagActivator` instances can be configured as follows:
313
-
314
- - search_key = Optional. The HTML tag attribute to search for. Default: :href.
315
- - search_value = Required. The value to match against the search_key value in order to update the
316
- value of the target_key. Default: nil.
317
- - target_key = Optional. The HTML tag attribute key value to update when the search_value and
318
- search_key value match. Default: :class.
319
- - target_value = Optional. The value to be applied to the target_key value. If no value exists, then
320
- the value is added. Otherwise, if a value exists then the value is appended to the existing value.
321
- Default: "active".
322
-
323
- This customization allows for more sophisticated detection/updating of active HTML tags. For
324
- example, the example code (above) could be rewritten to use `data-*` attributes and customized
325
- styles as follows:
326
-
327
- # Code
328
- activator = Navigator::TagActivator.new search_key: "data-id",
329
- search_value: "123",
330
- target_key: "data-style"
331
- target_value: "current"
332
-
333
- navigation "nav", activator: activator do
334
- link "Home", home_path, attributes: {data: {id: "123", data-style="info"}}
335
- link "About", about_path attributes: {data: {id: "789"}}
336
- end
337
-
338
- <!-- Result -->
339
- <nav>
340
- <a href="/home" data-id="123" data-style="info current">Home</a>
341
- <a href="/about" data-id="789">About</a>
342
- </nav>
343
-
344
- Lastly, the search value can be a *regular expression* to make things easier when dealing with
345
- complicated routes, sub- menus, etc. Example:
346
-
347
- # Code
348
- profile_activator = Navigator::TagActivator.new search_value: /^profile.+/
349
-
350
- navigation do
351
- item "Dashboard", dashboard_path
352
- li activator: profile_activator do
353
- link "Profile", '#'
354
-
355
- ul do
356
- item "Addresses", profile_addresses_path
357
- item "Emails", profile_emails_path
358
- end
359
- end
360
- end
361
-
362
- <!-- Result -->
363
- <ul>
364
- <li><a href="/dashboard">Dashboard</a></li>
365
- <li class="active">
366
- <a href="#">Profile</a>
367
- <ul>
368
- <li><a href="profile/addresses">Addresses</a></li>
369
- <li><a href="profile/emails">Emails</a></li>
370
- </ul>
371
- </li>
372
- </ul>
373
-
374
- Assuming either the `Addresses` or `Emails` menu item was clicked, the `Profile` menu item would be
375
- active due to the regular expression (i.e. `/^profile.+/`) matching one of the the `profile/*`
376
- paths.
377
-
378
- ## Tests
379
-
380
- To test, run:
381
-
382
- bundle exec rake
383
-
384
- To test the dummy application, run:
385
-
386
- cd spec/dummy
387
- bin/rails server
388
-
389
- ## Versioning
390
-
391
- Read [Semantic Versioning](https://semver.org) for details. Briefly, it means:
392
-
393
- - Major (X.y.z) - Incremented for any backwards incompatible public API changes.
394
- - Minor (x.Y.z) - Incremented for new, backwards compatible, public API enhancements/fixes.
395
- - Patch (x.y.Z) - Incremented for small, backwards compatible, bug fixes.
396
-
397
- ## Code of Conduct
398
-
399
- Please note that this project is released with a [CODE OF CONDUCT](CODE_OF_CONDUCT.md). By
400
- participating in this project you agree to abide by its terms.
401
-
402
- ## Contributions
403
-
404
- Read [CONTRIBUTING](CONTRIBUTING.md) for details.
405
-
406
- ## License
407
-
408
- Copyright 2012 [Alchemists](https://www.alchemists.io).
409
- Read [LICENSE](LICENSE.md) for details.
410
-
411
- ## History
412
-
413
- Read [CHANGES](CHANGES.md) for details.
414
- Built with [Gemsmith](https://github.com/bkuhlmann/gemsmith).
415
-
416
- ## Credits
417
-
418
- Developed by [Brooke Kuhlmann](https://www.alchemists.io) at
419
- [Alchemists](https://www.alchemists.io).