bootstrap-navbar 3.0.3 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42b50125e5cfbaeefeb0532a526446e435e9c3a6741a73f674ca44063a3cb6a6
4
- data.tar.gz: 1c6af44914b1aee007b6e47d544f106db2d61a7a36a28a93a04489bc7fc7c77c
3
+ metadata.gz: 1c052de755ae4a79228172a5542806fcbc43b938203d6d9791d210543bb14d72
4
+ data.tar.gz: 46311e56c6a5e5dc824db02ca9377c8c1798d046807103aaf7428960b696b3bf
5
5
  SHA512:
6
- metadata.gz: 19b33b5f6c6c5d51520d124fb18f9e71fd1f873cad6187cb06b8f1d7c16a67747482210e928f9538880b58c41e66b4d7970d93b5fac9346ccfc84f5e83383583
7
- data.tar.gz: 4a5c150fffcb612bfe1a1df5f4b2b2f79a5701fe60f81514233145e4e78c567938d369b1afb89a7ec8f591c7ce2aca9e18769cca600626af9a8450baa368c7f3
6
+ metadata.gz: 14629006361ae67397f55ba652a84845ba4ef1ae505a52c29f3c7486b19e078e8d796453cb880921b393dbe157e80ac7020438e040d49222bc363d13cafb04c6
7
+ data.tar.gz: 61cdb5083e9b9421df76db12078d3ef12faf735fe53ecafd3fdfaece19502a040314ae6615d0f390e77a715431198ac42a926260e7e1d7f46f4d3415994e723e
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/bootstrap-navbar.png)](http://badge.fury.io/rb/bootstrap-navbar)
4
4
  [![Build Status](https://secure.travis-ci.org/bootstrap-ruby/bootstrap-navbar.png)](http://travis-ci.org/bootstrap-ruby/bootstrap-navbar)
5
- [![Dependency Status](https://gemnasium.com/bootstrap-ruby/bootstrap-navbar.png)](https://gemnasium.com/bootstrap-ruby/bootstrap-navbar)
6
5
  [![Code Climate](https://codeclimate.com/github/bootstrap-ruby/bootstrap-navbar.png)](https://codeclimate.com/github/bootstrap-ruby/bootstrap-navbar)
7
6
 
8
7
  Helpers to generate a Bootstrap style navbar
@@ -103,3 +102,7 @@ See [CHANGELOG](CHANGELOG.md)
103
102
  3. Commit your changes (`git commit -am 'Add some feature'`)
104
103
  4. Push to the branch (`git push origin my-new-feature`)
105
104
  5. Create new Pull Request
105
+
106
+ ## Support
107
+
108
+ If you like this project, consider [buying me a coffee](https://www.buymeacoffee.com/279lcDtbF)! :)
@@ -15,14 +15,14 @@ module BootstrapNavbar::Helpers
15
15
  def attributes_for_tag(hash)
16
16
  string = hash.map { |k, v| %(#{k}="#{v}") }.join(' ')
17
17
  if string.length > 0
18
- ' ' << string
18
+ ' '.dup << string
19
19
  else
20
20
  string
21
21
  end
22
22
  end
23
23
 
24
24
  def current_url_or_sub_url?(url)
25
- return false if url == '#'
25
+ return false if url == '#' || url =~ /\Atel:/
26
26
  uri, current_uri = [url, current_url].map do |url|
27
27
  URI.parse(url)
28
28
  end
@@ -2,11 +2,26 @@ module BootstrapNavbar::Helpers::Bootstrap4
2
2
  def navbar(options = {}, &block)
3
3
  options = options.dup
4
4
  container = options.key?(:container) ? options.delete(:container) : false
5
+ brand = if options[:brand]
6
+ prepare_html <<~HTML
7
+ <a href="#{options.delete(:brand_url) || '/'}" class="navbar-brand">
8
+ #{options.delete(:brand)}
9
+ </a>
10
+ HTML
11
+ end
5
12
  wrapper options do
6
13
  if container
7
- container(&block)
14
+ container container do
15
+ prepare_html <<~HTML
16
+ #{brand}
17
+ #{capture(&block) if block_given?}
18
+ HTML
19
+ end
8
20
  else
9
- capture(&block) if block_given?
21
+ prepare_html <<~HTML
22
+ #{brand}
23
+ #{capture(&block) if block_given?}
24
+ HTML
10
25
  end
11
26
  end
12
27
  end
@@ -26,29 +41,29 @@ module BootstrapNavbar::Helpers::Bootstrap4
26
41
  'aria-expanded' => false,
27
42
  'aria-label' => 'Toggle navigation'
28
43
  )
29
- prepare_html <<-HTML.chomp!
30
- <button#{toggler_attributes}>
31
- <span class="navbar-toggler-icon"></span>
32
- </button>
33
- <div#{attributes}>
34
- #{capture(&block) if block_given?}
35
- </div>
36
- HTML
44
+ prepare_html <<~HTML
45
+ <button#{toggler_attributes}>
46
+ <span class="navbar-toggler-icon"></span>
47
+ </button>
48
+ <div#{attributes}>
49
+ #{capture(&block) if block_given?}
50
+ </div>
51
+ HTML
37
52
  end
38
53
 
39
54
  def navbar_group(options = {}, &block)
40
55
  options = options.dup
41
56
  options[:class] = [options[:class], 'navbar-nav'].compact.join(' ')
42
57
  attributes = attributes_for_tag(options)
43
- prepare_html <<-HTML.chomp!
44
- <ul#{attributes}>
45
- #{capture(&block) if block_given?}
46
- </ul>
47
- HTML
58
+ prepare_html <<~HTML
59
+ <ul#{attributes}>
60
+ #{capture(&block) if block_given?}
61
+ </ul>
62
+ HTML
48
63
  end
49
64
 
50
65
  def navbar_item(text, url = nil, list_item_options = nil, link_options = nil, &block)
51
- text, url, list_item_options, link_options = capture(&block), text, url, list_item_options if block_given?
66
+ text, url, list_item_options, link_options = capture(&block), text, (url || {}), list_item_options if block_given?
52
67
  url ||= '#'
53
68
  list_item_options = list_item_options ? list_item_options.dup : {}
54
69
  link_options = link_options ? link_options.dup : {}
@@ -58,88 +73,92 @@ HTML
58
73
  link_options[:class] = link_options[:class].join(' ')
59
74
  list_item_attributes = attributes_for_tag(list_item_options)
60
75
  link_attributes = attributes_for_tag(link_options)
61
- prepare_html <<-HTML.chomp!
62
- <li#{list_item_attributes}>
63
- <a href="#{url}"#{link_attributes}>
64
- #{text}
65
- </a>
66
- </li>
67
- HTML
76
+ prepare_html <<~HTML
77
+ <li#{list_item_attributes}>
78
+ <a href="#{url}"#{link_attributes}>
79
+ #{text}
80
+ </a>
81
+ </li>
82
+ HTML
68
83
  end
69
84
 
70
- def navbar_dropdown(text, id = '', list_item_options = {}, link_options = {}, &block)
85
+ def navbar_dropdown(text, list_item_options = {}, link_options = {}, wrapper_options = {}, &block)
71
86
  list_item_options, link_options = list_item_options.dup, link_options.dup
72
87
  list_item_options[:class] = [list_item_options[:class], 'nav-item', 'dropdown'].compact.join(' ')
73
88
  list_item_attributes = attributes_for_tag(list_item_options)
74
89
  link_options[:class] = [link_options[:class], 'nav-link', 'dropdown-toggle'].compact.join(' ')
75
- id ||= "navbarDropdownMenuLink#{text}"
76
90
  link_attributes = attributes_for_tag(link_options)
77
- prepare_html <<-HTML.chomp!
78
- <li#{list_item_attributes}>
79
- <a href="#" data-toggle="dropdown" id="##{id}" aria-haspopup="true" aria-expanded="false" role="button" #{link_attributes}>#{text}</a>
80
- <div class="dropdown-menu" aria-labelledby="#{id}">
81
- #{capture(&block) if block_given?}
82
- </div>
83
- </li>
84
- HTML
91
+ wrapper_options = { class: [*wrapper_options.delete(:class), 'dropdown-menu'].compact.join(' ') }
92
+ if id = link_options[:id]
93
+ wrapper_options[:'aria-labelledby'] = id
94
+ end
95
+ wrapper_attributes = attributes_for_tag(wrapper_options)
96
+ prepare_html <<~HTML
97
+ <li#{list_item_attributes}>
98
+ <a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" role="button"#{link_attributes}>#{text}</a>
99
+ <div#{wrapper_attributes}>
100
+ #{capture(&block) if block_given?}
101
+ </div>
102
+ </li>
103
+ HTML
85
104
  end
86
105
 
87
- def navbar_dropdown_item(text, url = '#', link_options = {}, &block)
106
+ def navbar_dropdown_item(text, url = nil, link_options = {}, &block)
107
+ text, url, link_options = capture(&block), text, (url || {}) if block_given?
108
+ url ||= '#'
88
109
  link_options = link_options.dup
89
110
  link_options[:class] = [link_options[:class], 'dropdown-item'].compact
90
111
  link_options[:class] << 'active' if current_url_or_sub_url?(url)
91
112
  link_options[:class] = link_options[:class].join(' ')
92
113
  link_attributes = attributes_for_tag(link_options)
93
- prepare_html <<-HTML.chomp!
94
- <a href="#{url}"#{link_attributes}>
95
- #{text}
96
- </a>
97
- HTML
114
+ prepare_html <<~HTML
115
+ <a href="#{url}"#{link_attributes}>
116
+ #{text}
117
+ </a>
118
+ HTML
98
119
  end
99
120
 
100
121
  def navbar_dropdown_divider
101
- prepare_html <<-HTML.chomp!
102
- <div class="dropdown-divider"></div>
103
- HTML
122
+ '<div class="dropdown-divider"></div>'
104
123
  end
105
124
 
106
125
  private
107
126
 
108
- def container(&block)
109
- prepare_html <<-HTML.chomp!
110
- <div class="container">
111
- #{capture(&block) if block_given?}
112
- </div>
113
- HTML
114
- end
115
-
116
- def brand_link(text, url = nil)
117
- prepare_html <<-HTML.chomp!
118
- <a href="#{url || '/'}" class="navbar-brand">
119
- #{text}
120
- </a>
121
- HTML
127
+ def container(container, &block)
128
+ container_class = [
129
+ 'container',
130
+ (container unless container == true)
131
+ ].compact.join('-')
132
+ attributes = attributes_for_tag(class: container_class)
133
+ prepare_html <<~HTML
134
+ <div#{attributes}>
135
+ #{capture(&block) if block_given?}
136
+ </div>
137
+ HTML
122
138
  end
123
139
 
124
140
  def wrapper(options, &block)
125
141
  options = options.dup
126
142
  options[:class] = [options[:class], 'navbar'].compact
127
143
  options[:class] << "navbar-#{options.key?(:color_scheme) ? options.delete(:color_scheme) : 'dark'}"
128
- options[:class] << "bg-#{options.delete(:bg) || 'dark'}" unless options[:bg] == false
144
+ if bg = options.delete(:bg)
145
+ options[:class] << "bg-#{bg == true ? 'dark' : bg}"
146
+ end
129
147
  if options.key?(:sticky) && options.delete(:sticky) === true
130
148
  options[:class] << 'sticky-top'
131
149
  elsif options.key?(:placement)
132
150
  options[:class] << "fixed-#{options.delete(:placement)}"
133
151
  end
134
- options[:class] << "navbar-expand-#{options.delete(:expand_at) || 'sm'}"
152
+ expand_at = options.delete(:expand_at)
153
+ unless expand_at == true
154
+ options[:class] << "navbar-expand#{"-#{expand_at}" if expand_at}"
155
+ end
135
156
  options[:class] = options[:class].join(' ')
136
- brand = brand_link(options.delete(:brand), options.delete(:brand_url)) if options[:brand]
137
157
  attributes = attributes_for_tag(options)
138
- prepare_html <<-HTML.chomp!
139
- <nav#{attributes}>
140
- #{brand}
141
- #{capture(&block) if block_given?}
142
- </nav>
143
- HTML
158
+ prepare_html <<~HTML
159
+ <nav#{attributes}>
160
+ #{capture(&block) if block_given?}
161
+ </nav>
162
+ HTML
144
163
  end
145
164
  end
@@ -1,3 +1,3 @@
1
1
  module BootstrapNavbar
2
- VERSION = '3.0.3'
2
+ VERSION = '3.1.0'
3
3
  end
@@ -141,4 +141,22 @@ describe BootstrapNavbar::Helpers::Bootstrap4 do
141
141
  end
142
142
  end
143
143
  end
144
+
145
+ describe '#navbar_dropdown' do
146
+ context 'with block' do
147
+ it 'generates the correct HTML' do
148
+ expect(renderer.navbar_dropdown('Foo', 'foo') { 'link-text' }).to have_tag(:li, with: { class: 'nav-item dropdown'}) do
149
+ with_tag :div, with: { class: 'dropdown-menu' }
150
+ end
151
+ end
152
+ end
153
+
154
+ context 'with right aligned menu' do
155
+ it 'generates the correct HTML' do
156
+ expect(renderer.navbar_dropdown('Foo', 'foo', { wrapper_class: 'dropdown-menu-right' }) { 'link-text' }).to have_tag(:li, with: { class: 'nav-item dropdown' }) do
157
+ with_tag :div, with: { class: 'dropdown-menu dropdown-menu-right' }
158
+ end
159
+ end
160
+ end
161
+ end
144
162
  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: 3.0.3
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Meurer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-17 00:00:00.000000000 Z
11
+ date: 2020-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -153,7 +153,7 @@ homepage: http://bootstrap-ruby.github.io/bootstrap-navbar
153
153
  licenses:
154
154
  - MIT
155
155
  metadata: {}
156
- post_install_message:
156
+ post_install_message:
157
157
  rdoc_options: []
158
158
  require_paths:
159
159
  - lib
@@ -168,9 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
170
  requirements: []
171
- rubyforge_project:
172
- rubygems_version: 2.7.6
173
- signing_key:
171
+ rubygems_version: 3.1.3
172
+ signing_key:
174
173
  specification_version: 4
175
174
  summary: Helpers to generate a Bootstrap style navbar
176
175
  test_files: