bootstrap-navbar 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/CHANGELOG.md +4 -0
- data/README.md +2 -2
- data/bootstrap-navbar.gemspec +2 -3
- data/lib/bootstrap-navbar/helpers.rb +4 -5
- data/lib/bootstrap-navbar/helpers/bootstrap2.rb +35 -50
- data/lib/bootstrap-navbar/helpers/bootstrap3.rb +34 -49
- data/lib/bootstrap-navbar/helpers/bootstrap4.rb +30 -46
- data/lib/bootstrap-navbar/version.rb +1 -1
- data/spec/bootstrap-navbar/helpers_spec.rb +30 -8
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edb6e5a1db3492adc9a4db8de92cc9d3e3b62350
|
4
|
+
data.tar.gz: 9ffa64927759a09172cad2abf3d54b71a071716a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e7765b69cb4cea0f7e3e67d00236da40fb1890c58fdf0739e3617d6f7c3402a859395cf4e8decb60d3e97fdf4d202dd4c50f2da7d4895ca97cecc8418a7bdc1
|
7
|
+
data.tar.gz: ff518322e2ff2da4e7990c42f987cd55745726ae2a1636bac0bbd18fff06b39aee64366d9123f40c238df3184499fb64c3f5be46c2fe667622f65df902d74f05
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -65,7 +65,7 @@ When deciding whether a navbar link is marked as current, the following steps ar
|
|
65
65
|
* If the link target is one of the root paths (only "/" by default), the link is only marked as current if the target is the current path.
|
66
66
|
* Otherwise the link is marked as current if the target is the current path or a sub path of the current path.
|
67
67
|
|
68
|
-
In certain cases
|
68
|
+
In certain cases you might want to treat more paths as root paths, e.g. when different locales are mapped at "/en", "/de" etc. This can be achieved by setting the `root_paths` configuration.
|
69
69
|
|
70
70
|
```ruby
|
71
71
|
BootstrapNavbar.configure do |config|
|
@@ -73,7 +73,7 @@ BootstrapNavbar.configure do |config|
|
|
73
73
|
end
|
74
74
|
```
|
75
75
|
|
76
|
-
With this configuration, if your brand link would be
|
76
|
+
With this configuration, if your brand link would be "/en" for example, it would not be marked as current if you are on "/en/some-page".
|
77
77
|
|
78
78
|
### Mix in the helpers into the rendering engine (required)
|
79
79
|
|
data/bootstrap-navbar.gemspec
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
lib = File.expand_path('../lib', __FILE__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
|
@@ -25,7 +23,8 @@ Gem::Specification.new do |gem|
|
|
25
23
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
26
24
|
gem.add_development_dependency 'rspec-html-matchers', '~> 0.6'
|
27
25
|
gem.add_development_dependency 'guard-rspec', '~> 4.2'
|
28
|
-
gem.add_development_dependency 'padrino-helpers', '~> 0.
|
26
|
+
gem.add_development_dependency 'padrino-helpers', '~> 0.13.3' # padrino-support 0.14.0 dropped the dependency on activesupport, which we need
|
29
27
|
gem.add_development_dependency 'bootstrap-sass', '3.0.2.0'
|
28
|
+
gem.add_development_dependency 'bootstrap', '4.0.0.alpha6'
|
30
29
|
gem.add_runtime_dependency 'gem_config', '~> 0.3'
|
31
30
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
module BootstrapNavbar::Helpers
|
2
2
|
def self.included(base)
|
3
3
|
if BootstrapNavbar.configuration.bootstrap_version.nil?
|
4
|
-
|
5
|
-
bootstrap_sass_version = Gem.loaded_specs['bootstrap-sass'].version
|
6
|
-
bootstrap_version = bootstrap_sass_version.segments.take(3).join('.')
|
7
|
-
BootstrapNavbar.configuration.bootstrap_version = bootstrap_version
|
8
|
-
else
|
4
|
+
unless bootstrap_gem = %w(bootstrap bootstrap-sass).detect { |gem| Gem.loaded_specs.keys.include?(gem) }
|
9
5
|
raise 'Bootstrap version is not configured.'
|
10
6
|
end
|
7
|
+
bootstrap_gem_version = Gem.loaded_specs[bootstrap_gem].version
|
8
|
+
bootstrap_version = bootstrap_gem_version.segments.take(3).join('.')
|
9
|
+
BootstrapNavbar.configuration.bootstrap_version = bootstrap_version
|
11
10
|
end
|
12
11
|
helper_version = BootstrapNavbar.configuration.bootstrap_version[0]
|
13
12
|
base.send :include, const_get("Bootstrap#{helper_version}")
|
@@ -9,11 +9,10 @@ module BootstrapNavbar::Helpers::Bootstrap2
|
|
9
9
|
|
10
10
|
def navbar_group(options = {}, &block)
|
11
11
|
options = options.dup
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
attributes = attributes_for_tag({ class: css_classes.join(' ') }.merge(options))
|
12
|
+
options[:class] = [options[:class], 'nav'].compact
|
13
|
+
options[:class] << "pull-#{options.delete(:pull)}" if options.key?(:pull)
|
14
|
+
options[:class] = options[:class].join(' ')
|
15
|
+
attributes = attributes_for_tag(options)
|
17
16
|
prepare_html <<-HTML.chomp!
|
18
17
|
<ul#{attributes}>
|
19
18
|
#{capture(&block) if block_given?}
|
@@ -23,19 +22,14 @@ HTML
|
|
23
22
|
|
24
23
|
def navbar_item(name = nil, path = nil, list_item_options = nil, link_options = nil, &block)
|
25
24
|
name, path, list_item_options, link_options = capture(&block), name, path, list_item_options if block_given?
|
26
|
-
path
|
27
|
-
list_item_options = list_item_options
|
28
|
-
link_options = link_options
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
{ class: list_item_css_classes.join(' ') }
|
35
|
-
.delete_if { |k, v| v.empty? }
|
36
|
-
.merge(list_item_options)
|
37
|
-
)
|
38
|
-
link_attributes = attributes_for_tag(link_options)
|
25
|
+
path ||= '#'
|
26
|
+
list_item_options = list_item_options ? list_item_options.dup : {}
|
27
|
+
link_options = link_options ? link_options.dup : {}
|
28
|
+
list_item_options[:class] = [list_item_options[:class]].compact
|
29
|
+
list_item_options[:class] << 'active' if current_url_or_sub_url?(path)
|
30
|
+
list_item_options[:class] = list_item_options[:class].join(' ')
|
31
|
+
list_item_attributes = attributes_for_tag(list_item_options)
|
32
|
+
link_attributes = attributes_for_tag(link_options)
|
39
33
|
prepare_html <<-HTML.chomp!
|
40
34
|
<li#{list_item_attributes}>
|
41
35
|
<a href="#{path}"#{link_attributes}>
|
@@ -58,11 +52,9 @@ HTML
|
|
58
52
|
|
59
53
|
def navbar_sub_dropdown(name, list_item_options = {}, link_options = {}, &block)
|
60
54
|
list_item_options, link_options = list_item_options.dup, link_options.dup
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
list_item_attributes = attributes_for_tag({ class: list_item_css_classes.join(' ') }.merge(list_item_options))
|
65
|
-
link_attributes = attributes_for_tag(link_options)
|
55
|
+
list_item_options[:class] = [list_item_options.delete(:class), 'dropdown-submenu'].compact.join(' ')
|
56
|
+
list_item_attributes = attributes_for_tag(list_item_options)
|
57
|
+
link_attributes = attributes_for_tag(link_options)
|
66
58
|
prepare_html <<-HTML.chomp!
|
67
59
|
<li#{list_item_attributes}>
|
68
60
|
<a href="#"#{link_attributes}>
|
@@ -86,9 +78,8 @@ HTML
|
|
86
78
|
end
|
87
79
|
|
88
80
|
def navbar_text(text = nil, pull = nil, &block)
|
89
|
-
css_classes = %w(navbar-text)
|
90
|
-
|
91
|
-
end
|
81
|
+
css_classes = %w(navbar-text)
|
82
|
+
css_classes << "pull-#{pull}" if pull
|
92
83
|
prepare_html <<-HTML.chomp!
|
93
84
|
<p class="#{css_classes.join(' ')}">
|
94
85
|
#{block_given? ? capture(&block) : text}
|
@@ -105,18 +96,14 @@ HTML
|
|
105
96
|
def wrapper(options, html_options, &block)
|
106
97
|
options, html_options = options.dup, html_options.dup
|
107
98
|
position = case
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
css_classes << html_options.delete(:class)
|
117
|
-
end
|
118
|
-
attribute_hash = { class: css_classes.join(' ') }.merge(html_options)
|
119
|
-
attributes = attributes_for_tag(attribute_hash)
|
99
|
+
when options.key?(:static) then "static-#{options[:static]}"
|
100
|
+
when options.key?(:fixed) then "fixed-#{options[:fixed]}"
|
101
|
+
end
|
102
|
+
html_options[:class] = [html_options[:class], 'navbar'].compact
|
103
|
+
html_options[:class] << "navbar-#{position}" if position
|
104
|
+
html_options[:class] << 'navbar-inverse' if options[:inverse]
|
105
|
+
html_options[:class] = html_options[:class].join(' ')
|
106
|
+
attributes = attributes_for_tag(html_options)
|
120
107
|
prepare_html <<-HTML.chomp!
|
121
108
|
<div#{attributes}>
|
122
109
|
#{capture(&block) if block_given?}
|
@@ -134,14 +121,13 @@ HTML
|
|
134
121
|
|
135
122
|
def container(brand, brand_link, responsive, fluid, &block)
|
136
123
|
css_class = fluid ? 'container-fluid' : 'container'
|
137
|
-
content = []
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
end
|
124
|
+
content = []
|
125
|
+
content << responsive_button if responsive
|
126
|
+
content << navbar_brand_link(brand, brand_link) if brand || brand_link
|
127
|
+
content << if responsive
|
128
|
+
responsive_wrapper(&block)
|
129
|
+
else
|
130
|
+
capture(&block) if block_given?
|
145
131
|
end
|
146
132
|
prepare_html <<-HTML.chomp!
|
147
133
|
<div class="#{css_class}">
|
@@ -151,10 +137,9 @@ HTML
|
|
151
137
|
end
|
152
138
|
|
153
139
|
def responsive_wrapper(&block)
|
154
|
-
css_classes = %w(nav-collapse)
|
155
|
-
|
156
|
-
|
157
|
-
attributes = attributes_for_tag({ class: css_classes.join(' ') })
|
140
|
+
css_classes = %w(nav-collapse)
|
141
|
+
css_classes << 'collapse' if BootstrapNavbar.configuration.bootstrap_version >= '2.2.0'
|
142
|
+
attributes = attributes_for_tag(class: css_classes.join(' '))
|
158
143
|
prepare_html <<-HTML.chomp!
|
159
144
|
<div#{attributes}>
|
160
145
|
#{capture(&block) if block_given?}
|
@@ -14,10 +14,8 @@ module BootstrapNavbar::Helpers::Bootstrap3
|
|
14
14
|
def navbar_header(options = {}, &block)
|
15
15
|
options = options.dup
|
16
16
|
brand, brand_link = options.delete(:brand), options.delete(:brand_link)
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
|
17
|
+
options[:class] = [options[:class], 'navbar-header'].compact.join(' ')
|
18
|
+
attributes = attributes_for_tag(options)
|
21
19
|
prepare_html <<-HTML.chomp!
|
22
20
|
<div#{attributes}>
|
23
21
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapsable">
|
@@ -34,10 +32,9 @@ HTML
|
|
34
32
|
|
35
33
|
def navbar_collapse(options = {}, &block)
|
36
34
|
options = options.dup
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), id: 'navbar-collapsable'))
|
35
|
+
options[:class] = [options[:class], 'collapse', 'navbar-collapse'].compact.join(' ')
|
36
|
+
options[:id] ||= 'navbar-collapsable'
|
37
|
+
attributes = attributes_for_tag(options)
|
41
38
|
prepare_html <<-HTML.chomp!
|
42
39
|
<div#{attributes}>
|
43
40
|
#{capture(&block) if block_given?}
|
@@ -47,11 +44,10 @@ HTML
|
|
47
44
|
|
48
45
|
def navbar_group(options = {}, &block)
|
49
46
|
options = options.dup
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
|
47
|
+
options[:class] = [options[:class], 'nav', 'navbar-nav'].compact
|
48
|
+
options[:class] << "navbar-#{options.delete(:align)}" if options.key?(:align)
|
49
|
+
options[:class] = options[:class].join(' ')
|
50
|
+
attributes = attributes_for_tag(options)
|
55
51
|
prepare_html <<-HTML.chomp!
|
56
52
|
<ul#{attributes}>
|
57
53
|
#{capture(&block) if block_given?}
|
@@ -61,18 +57,13 @@ HTML
|
|
61
57
|
|
62
58
|
def navbar_item(text, url = nil, list_item_options = nil, link_options = nil, &block)
|
63
59
|
text, url, list_item_options, link_options = capture(&block), text, url, list_item_options if block_given?
|
64
|
-
url
|
65
|
-
list_item_options = list_item_options
|
66
|
-
link_options = link_options
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
list_item_attributes = attributes_for_tag(
|
72
|
-
{ class: list_item_css_classes.join(' ') }
|
73
|
-
.delete_if { |k, v| v.empty? }
|
74
|
-
.merge(list_item_options)
|
75
|
-
)
|
60
|
+
url ||= '#'
|
61
|
+
list_item_options = list_item_options ? list_item_options.dup : {}
|
62
|
+
link_options = link_options ? link_options.dup : {}
|
63
|
+
list_item_options[:class] = [list_item_options[:class]].compact
|
64
|
+
list_item_options[:class] << 'active' if current_url_or_sub_url?(url)
|
65
|
+
list_item_options[:class] = list_item_options[:class].join(' ')
|
66
|
+
list_item_attributes = attributes_for_tag(list_item_options)
|
76
67
|
link_attributes = attributes_for_tag(link_options)
|
77
68
|
prepare_html <<-HTML.chomp!
|
78
69
|
<li#{list_item_attributes}>
|
@@ -85,12 +76,11 @@ HTML
|
|
85
76
|
|
86
77
|
def navbar_form(url, options = {}, &block)
|
87
78
|
options = options.dup
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), role: role))
|
79
|
+
options[:class] = [options[:class], 'navbar-form'].compact
|
80
|
+
options[:class] << "navbar-#{options.delete(:align)}" if options.key?(:align)
|
81
|
+
options[:class] = options[:class].join(' ')
|
82
|
+
options[:role] ||= 'form'
|
83
|
+
attributes = attributes_for_tag(options)
|
94
84
|
prepare_html <<-HTML.chomp!
|
95
85
|
<form action="#{url}" #{attributes}>
|
96
86
|
#{capture(&block) if block_given?}
|
@@ -99,13 +89,11 @@ HTML
|
|
99
89
|
end
|
100
90
|
|
101
91
|
def navbar_text(text = nil, options = {}, &block)
|
102
|
-
raise StandardError, 'Please provide either the "text" parameter or a block.' if
|
92
|
+
raise StandardError, 'Please provide either the "text" parameter or a block.' if !!text == block_given?
|
103
93
|
options = options.dup
|
104
94
|
text ||= capture(&block)
|
105
|
-
|
106
|
-
|
107
|
-
end
|
108
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
|
95
|
+
options[:class] = [options[:class], 'navbar-text'].compact.join(' ')
|
96
|
+
attributes = attributes_for_tag(options)
|
109
97
|
prepare_html <<-HTML.chomp!
|
110
98
|
<p#{attributes}>#{text}</p>
|
111
99
|
HTML
|
@@ -113,11 +101,9 @@ HTML
|
|
113
101
|
|
114
102
|
def navbar_button(text, options = {})
|
115
103
|
options = options.dup
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
type = options.delete(:type) || 'button'
|
120
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), type: type))
|
104
|
+
options[:class] = [options[:class], 'btn', 'navbar-btn'].compact.join(' ')
|
105
|
+
options[:type] ||= 'button'
|
106
|
+
attributes = attributes_for_tag(options)
|
121
107
|
prepare_html <<-HTML.chomp!
|
122
108
|
<button#{attributes}>#{text}</button>
|
123
109
|
HTML
|
@@ -177,14 +163,13 @@ HTML
|
|
177
163
|
|
178
164
|
def wrapper(options, &block)
|
179
165
|
options = options.dup
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' '), role: role))
|
166
|
+
options[:class] = [options[:class], 'navbar'].compact
|
167
|
+
options[:class] << "navbar-#{options.delete(:inverse) ? 'inverse' : 'default'}"
|
168
|
+
options[:class] << "navbar-fixed-#{options.delete(:fixed)}" if options.key?(:fixed)
|
169
|
+
options[:class] << 'navbar-static-top' if options.delete(:static)
|
170
|
+
options[:class] = options[:class].join(' ')
|
171
|
+
options[:role] ||= 'navigation'
|
172
|
+
attributes = attributes_for_tag(options)
|
188
173
|
prepare_html <<-HTML.chomp!
|
189
174
|
<nav#{attributes}>
|
190
175
|
#{capture(&block) if block_given?}
|
@@ -17,31 +17,29 @@ module BootstrapNavbar::Helpers::Bootstrap4
|
|
17
17
|
toggleable = options.delete(:toggleable)
|
18
18
|
toggleable = 'xs' if toggleable == true
|
19
19
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
20
|
+
options[:class] = [options[:class], 'collapse'].compact
|
21
|
+
options[:class] << "navbar-toggleable-#{toggleable}" if toggleable
|
22
|
+
options[:class] = options[:class].join(' ')
|
24
23
|
toggler_css_classes = %w(navbar-toggler).tap do |css_classes|
|
25
24
|
if toggleable
|
26
25
|
following_grid_size = case toggleable
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
26
|
+
when 'xs' then 'sm'
|
27
|
+
when 'sm' then 'md'
|
28
|
+
when 'md' then 'lg'
|
29
|
+
when 'lg' then 'xl'
|
30
|
+
else fail %(Unexpected "toggleable" parameter: #{toggleable}. Must be "xs", "sm", "md", "lg" or `true` (equals "xs").)
|
31
|
+
end
|
34
32
|
css_classes << "hidden-#{following_grid_size}-up"
|
35
33
|
end
|
36
34
|
end
|
37
|
-
|
38
|
-
attributes = attributes_for_tag(options
|
35
|
+
options[:id] ||= 'navbar-collapsable'
|
36
|
+
attributes = attributes_for_tag(options)
|
39
37
|
toggler_attributes = attributes_for_tag(
|
40
38
|
class: toggler_css_classes.join(' '),
|
41
39
|
type: 'button',
|
42
40
|
'data-toggle' => 'collapse',
|
43
|
-
'data-target' => "##{id}",
|
44
|
-
'aria-controls' => id,
|
41
|
+
'data-target' => "##{options[:id]}",
|
42
|
+
'aria-controls' => options[:id],
|
45
43
|
'aria-expanded' => false,
|
46
44
|
'aria-label' => 'Toggle navigation'
|
47
45
|
)
|
@@ -57,10 +55,8 @@ HTML
|
|
57
55
|
|
58
56
|
def navbar_group(options = {}, &block)
|
59
57
|
options = options.dup
|
60
|
-
|
61
|
-
|
62
|
-
end
|
63
|
-
attributes = attributes_for_tag(options.reverse_merge(class: css_classes.join(' ')))
|
58
|
+
options[:class] = [options[:class], 'nav', 'navbar-nav'].compact.join(' ')
|
59
|
+
attributes = attributes_for_tag(options)
|
64
60
|
prepare_html <<-HTML.chomp!
|
65
61
|
<ul#{attributes}>
|
66
62
|
#{capture(&block) if block_given?}
|
@@ -70,26 +66,15 @@ HTML
|
|
70
66
|
|
71
67
|
def navbar_item(text, url = nil, list_item_options = nil, link_options = nil, &block)
|
72
68
|
text, url, list_item_options, link_options = capture(&block), text, url, list_item_options if block_given?
|
73
|
-
url
|
74
|
-
list_item_options = list_item_options
|
75
|
-
link_options = link_options
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
list_item_attributes = attributes_for_tag(
|
84
|
-
{ class: list_item_css_classes.join(' ') }
|
85
|
-
.delete_if { |k, v| v.empty? }
|
86
|
-
.merge(list_item_options)
|
87
|
-
)
|
88
|
-
link_attributes = attributes_for_tag(
|
89
|
-
{ class: link_css_classes.join(' ') }
|
90
|
-
.delete_if { |k, v| v.empty? }
|
91
|
-
.merge(link_options)
|
92
|
-
)
|
69
|
+
url ||= '#'
|
70
|
+
list_item_options = list_item_options ? list_item_options.dup : {}
|
71
|
+
link_options = link_options ? link_options.dup : {}
|
72
|
+
list_item_options[:class] = [list_item_options[:class], 'nav-item'].compact
|
73
|
+
list_item_options[:class] << 'active' if current_url_or_sub_url?(url)
|
74
|
+
list_item_options[:class] = list_item_options[:class].join(' ')
|
75
|
+
link_options[:class] = [link_options[:class], 'nav-link'].compact.join(' ')
|
76
|
+
list_item_attributes = attributes_for_tag(list_item_options)
|
77
|
+
link_attributes = attributes_for_tag(link_options)
|
93
78
|
prepare_html <<-HTML.chomp!
|
94
79
|
<li#{list_item_attributes}>
|
95
80
|
<a href="#{url}"#{link_attributes}>
|
@@ -119,14 +104,13 @@ HTML
|
|
119
104
|
|
120
105
|
def wrapper(options, &block)
|
121
106
|
options = options.dup
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
end
|
107
|
+
options[:class] = [options[:class], 'navbar'].compact
|
108
|
+
options[:class] << "navbar-#{options.key?(:color_scheme) ? options.delete(:color_scheme) : 'dark'}"
|
109
|
+
options[:class] << "bg-#{options.delete(:bg) || 'primary'}" unless options[:bg] == false
|
110
|
+
options[:class] << "navbar-#{options.delete(:placement)}" if options.key?(:placement)
|
111
|
+
options[:class] = options[:class].join(' ')
|
128
112
|
brand = brand_link(options[:brand], options[:brand_url]) if options[:brand]
|
129
|
-
attributes = attributes_for_tag(options
|
113
|
+
attributes = attributes_for_tag(options)
|
130
114
|
prepare_html <<-HTML.chomp!
|
131
115
|
<nav#{attributes}>
|
132
116
|
#{brand}
|
@@ -21,16 +21,20 @@ describe BootstrapNavbar::Helpers do
|
|
21
21
|
BootstrapNavbar.configuration.unset :bootstrap_version
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
def remove_gems_from_loaded_specs(*gems)
|
25
|
+
loaded_specs = Gem.loaded_specs.dup
|
26
|
+
gems.each do |gem|
|
27
|
+
loaded_specs.delete(gem)
|
28
|
+
end
|
29
|
+
allow(Gem).to receive(:loaded_specs).and_return(loaded_specs)
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when neither the bootstrap-sass gem nor the bootstrap gem is not loaded' do
|
25
33
|
before do
|
26
|
-
|
27
|
-
loaded_specs = Gem.loaded_specs.dup
|
28
|
-
loaded_specs.delete('bootstrap-sass')
|
29
|
-
allow(Gem).to receive(:loaded_specs).and_return(loaded_specs)
|
34
|
+
remove_gems_from_loaded_specs('bootstrap-sass', 'bootstrap')
|
30
35
|
end
|
31
36
|
|
32
37
|
it 'raises an exception' do
|
33
|
-
expect(Gem.loaded_specs.keys).to_not include('bootstrap-sass')
|
34
38
|
expect do
|
35
39
|
Class.new do
|
36
40
|
include BootstrapNavbar::Helpers
|
@@ -39,9 +43,12 @@ describe BootstrapNavbar::Helpers do
|
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
42
|
-
context 'when bootstrap-sass gem is loaded' do
|
46
|
+
context 'when only the bootstrap-sass gem is loaded' do
|
47
|
+
before do
|
48
|
+
remove_gems_from_loaded_specs('bootstrap')
|
49
|
+
end
|
50
|
+
|
43
51
|
it 'sniffs the Bootstrap version from bootstrap-sass' do
|
44
|
-
expect(Gem.loaded_specs.keys).to include('bootstrap-sass')
|
45
52
|
expect do
|
46
53
|
Class.new do
|
47
54
|
include BootstrapNavbar::Helpers
|
@@ -50,6 +57,21 @@ describe BootstrapNavbar::Helpers do
|
|
50
57
|
expect(BootstrapNavbar.configuration.bootstrap_version).to eq('3.0.2')
|
51
58
|
end
|
52
59
|
end
|
60
|
+
|
61
|
+
context 'when only the bootstrap gem is loaded' do
|
62
|
+
before do
|
63
|
+
remove_gems_from_loaded_specs('bootstrap-sass')
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'sniffs the Bootstrap version from bootstrap-sass' do
|
67
|
+
expect do
|
68
|
+
Class.new do
|
69
|
+
include BootstrapNavbar::Helpers
|
70
|
+
end
|
71
|
+
end.to_not raise_exception
|
72
|
+
expect(BootstrapNavbar.configuration.bootstrap_version).to eq('4.0.0')
|
73
|
+
end
|
74
|
+
end
|
53
75
|
end
|
54
76
|
end
|
55
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootstrap-navbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Meurer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.13.3
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.13.3
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bootstrap-sass
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 3.0.2.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: bootstrap
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 4.0.0.alpha6
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 4.0.0.alpha6
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: gem_config
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -155,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
169
|
version: '0'
|
156
170
|
requirements: []
|
157
171
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.6.
|
172
|
+
rubygems_version: 2.6.11
|
159
173
|
signing_key:
|
160
174
|
specification_version: 4
|
161
175
|
summary: Helpers to generate a Bootstrap style navbar
|