mtl 1.1.2 → 1.1.4
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.
- checksums.yaml +4 -4
- data/app/views/mtl/header.html.erb +18 -20
- data/lib/mtl/rails/navbar_presenter.rb +41 -0
- data/lib/mtl/rails/view_helpers.rb +51 -5
- data/lib/mtl/version.rb +1 -1
- data/mtl.gemspec +1 -0
- data/spec/mtl/rails/navbar_presenter_spec.rb +106 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44b92a6793c60cb944ae9c28cd6f9150822fd50a
|
4
|
+
data.tar.gz: f3835d1ab87ff6bfa760afbb412968199d8fab2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64d0e8d7462b7047f29674d0cdfd5983e7a86e7191d1cd2f26bd2f212721b14b5391f5b23617a90e0e123590ce0273d6285dda6e8a086c8501a2f54bd210b403
|
7
|
+
data.tar.gz: 8525dc5946545f84f4dd750b24f5b59b8397acbeefe3ebd71f8f95a085224d1d42778690387bcaf130f0618c1091cceb4b1b195a8bd2b35c85668270e705865a
|
@@ -1,25 +1,23 @@
|
|
1
1
|
<header class="<%= mtl_class %>">
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
<i class="material-icons">arrow_back</i>
|
7
|
-
<%- end %>
|
8
|
-
<%- elsif mtl_menu %>
|
9
|
-
<%= link_to "##{mtl_menu}", class: 'mtl-layout-default-header-toggle left hide-on-large-only', 'data-activates': mtl_menu, 'data-mtl-nav': 'side' do %>
|
10
|
-
<i class="material-icons">menu</i>
|
11
|
-
<%- end %>
|
2
|
+
<%= mtl_navbar fixed: mtl_fixed do |nav| %>
|
3
|
+
<%- if mtl_back %>
|
4
|
+
<%= link_to mtl_back, class: 'mtl-layout-default-header-back left' do %>
|
5
|
+
<i class="material-icons">arrow_back</i>
|
12
6
|
<%- end %>
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
<%= mtl_title %>
|
17
|
-
</h1>
|
7
|
+
<%- elsif mtl_menu %>
|
8
|
+
<%= link_to "##{mtl_menu}", class: 'mtl-layout-default-header-toggle left hide-on-large-only', 'data-activates': mtl_menu, 'data-mtl-nav': 'side' do %>
|
9
|
+
<i class="material-icons">menu</i>
|
18
10
|
<%- end %>
|
11
|
+
<%- end %>
|
19
12
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
</
|
24
|
-
|
13
|
+
<%- if mtl_title %>
|
14
|
+
<h1 class="page-title">
|
15
|
+
<%= mtl_title %>
|
16
|
+
</h1>
|
17
|
+
<%- end %>
|
18
|
+
|
19
|
+
<%- if mtl_content %>
|
20
|
+
<%= capture(nav, &mtl_content) %>
|
21
|
+
<%- end %>
|
22
|
+
<%- end %>
|
25
23
|
</header>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Mtl
|
2
|
+
module Rails
|
3
|
+
# Private
|
4
|
+
# Specialised renderer for the navbar element
|
5
|
+
class NavbarPresenter
|
6
|
+
attr_reader :view
|
7
|
+
|
8
|
+
def initialize(view)
|
9
|
+
@view = view
|
10
|
+
@extended_options = {}
|
11
|
+
@extended_block = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def render(options = {}, &block)
|
15
|
+
nav = view.content_tag :nav, view.safe_join([render_main(options, &block),
|
16
|
+
render_extended(@extended_options, &@extended_block)].compact),
|
17
|
+
class: @extended_block ? 'nav-extended' : nil
|
18
|
+
|
19
|
+
nav = view.content_tag :div, nav, class: 'navbar-fixed' if options[:fixed]
|
20
|
+
nav
|
21
|
+
end
|
22
|
+
|
23
|
+
def extended(options = {}, &block)
|
24
|
+
@extended_options = options
|
25
|
+
@extended_block = block
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def render_main(options = {}, &block)
|
32
|
+
view.content_tag(:div, view.capture(self, &block), class: [options[:class], 'nav-wrapper'].flatten.compact)
|
33
|
+
end
|
34
|
+
|
35
|
+
def render_extended(options = {}, &block)
|
36
|
+
return unless block_given?
|
37
|
+
view.content_tag(:div, view.capture(&block), class: [options[:class], 'nav-content'].flatten.compact)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'mtl/rails/card_file_presenter'
|
3
|
+
require 'mtl/rails/navbar_presenter'
|
3
4
|
|
4
5
|
module Mtl
|
5
6
|
module Rails
|
@@ -260,6 +261,37 @@ module Mtl
|
|
260
261
|
# data-method="delete" data-confirm="Sure?">close</i>
|
261
262
|
# </a>
|
262
263
|
# ```
|
264
|
+
#
|
265
|
+
# # Navbars
|
266
|
+
#
|
267
|
+
# Basic usage:
|
268
|
+
#
|
269
|
+
# ```haml
|
270
|
+
# = mtl_navbar do
|
271
|
+
# Hello
|
272
|
+
# ```
|
273
|
+
#
|
274
|
+
# Fixed navbar:
|
275
|
+
# ```haml
|
276
|
+
# = mtl_navbar fixed: true do
|
277
|
+
# Hello
|
278
|
+
# ```
|
279
|
+
#
|
280
|
+
# Extended navbar:
|
281
|
+
# ```haml
|
282
|
+
# = mtl_navbar do |nav|
|
283
|
+
# Hello
|
284
|
+
# = nav.extended do
|
285
|
+
# Hellobis
|
286
|
+
# ```
|
287
|
+
#
|
288
|
+
# Extended and fixed navbar:
|
289
|
+
# ```haml
|
290
|
+
# = mtl_navbar fixed: true do |nav|
|
291
|
+
# Hello
|
292
|
+
# = nav.extended do
|
293
|
+
# Hellobis
|
294
|
+
# ```
|
263
295
|
module ViewHelpers
|
264
296
|
# Renders a flat button which does not visually lift like the raised buttons.
|
265
297
|
#
|
@@ -325,17 +357,18 @@ module Mtl
|
|
325
357
|
# nav menu to show / hide on mobile devices. The default used is `nav-menu`.
|
326
358
|
# When set to `false`, this button is skipped.
|
327
359
|
# @param class [String, Array] (HTML CLASS) additional, custom css class on header
|
328
|
-
# @yield Additional content to be rendered as part of the header
|
360
|
+
# @yield Additional content to be rendered as part of the header, with a navbar object as argument,
|
361
|
+
# to also build the extended navigation if needed (by passing another block to nav.extended)
|
329
362
|
# @return [String] HTML safe string
|
330
363
|
def mtl_header(title = translate('.title', default: 'Menu'), **options, &block)
|
331
|
-
mtl_content = block_given? ? capture(&block) : nil
|
332
364
|
mtl_class = ['mtl-layout-default-header', options[:class]].compact.flatten.join(' ')
|
333
365
|
|
334
366
|
render file: 'mtl/header', locals: {
|
335
|
-
mtl_content:
|
367
|
+
mtl_content: block,
|
336
368
|
mtl_title: title.presence,
|
337
369
|
mtl_back: options.fetch(:back, false),
|
338
370
|
mtl_menu: options.fetch(:menu, 'nav-menu'),
|
371
|
+
mtl_fixed: options.fetch(:fixed, false),
|
339
372
|
mtl_class: mtl_class
|
340
373
|
}
|
341
374
|
end
|
@@ -404,8 +437,21 @@ module Mtl
|
|
404
437
|
# @option options [String] :data-mtl-delete URL to use as the delete action, if any
|
405
438
|
# @param options [Hash] additional options passed to `content_tag`
|
406
439
|
# @return [String] HTML safe String
|
407
|
-
def mtl_card_file(filename, href,
|
408
|
-
CardFilePresenter.new(self).render(filename, href,
|
440
|
+
def mtl_card_file(filename, href, options = {})
|
441
|
+
CardFilePresenter.new(self).render(filename, href, options)
|
442
|
+
end
|
443
|
+
|
444
|
+
# Renders a navbar, wrapping the given block as content. Options also allows to fix the navbar and/or include
|
445
|
+
# an extended navigation
|
446
|
+
#
|
447
|
+
# @option options [Boolean] :fixed Define if the header has to be fixed or not
|
448
|
+
# @option options [String/Array] :class Additional class to add the to nav-wrapper
|
449
|
+
# @yield Content to be rendered into the navbar, with a navbar object as argument, to also build the
|
450
|
+
# extended navigation if needed (by passing another block to nav.extended)
|
451
|
+
# @option yield.extended options [String/Array] :class Additional class to add the to nav-extended
|
452
|
+
# @return [String] HTML safe String
|
453
|
+
def mtl_navbar(options = {}, &block)
|
454
|
+
NavbarPresenter.new(self).render(options, &block)
|
409
455
|
end
|
410
456
|
end
|
411
457
|
end
|
data/lib/mtl/version.rb
CHANGED
data/mtl.gemspec
CHANGED
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'action_view'
|
3
|
+
require 'mtl/rails/navbar_presenter'
|
4
|
+
require 'mtl/rails/view_helpers'
|
5
|
+
|
6
|
+
RSpec.describe Mtl::Rails::NavbarPresenter, dom: true do
|
7
|
+
let(:view) { ActionView::Base.new }
|
8
|
+
subject { described_class.new(view) }
|
9
|
+
|
10
|
+
before do
|
11
|
+
view.send(:extend, Mtl::Rails::ViewHelpers)
|
12
|
+
end
|
13
|
+
|
14
|
+
context '#render' do
|
15
|
+
it 'renders a basic navbar with the given content' do
|
16
|
+
expect(subject.render { 'Hello' }).to match_dom <<-HTML
|
17
|
+
<nav>
|
18
|
+
<div class="nav-wrapper">
|
19
|
+
Hello
|
20
|
+
</div>
|
21
|
+
</nav>
|
22
|
+
HTML
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'renders a basic navbar with the given content and some custom class on the wrapper' do
|
26
|
+
expect(subject.render(class: 'custom-class') { 'Hello' }).to match_dom <<-HTML
|
27
|
+
<nav>
|
28
|
+
<div class="custom-class nav-wrapper">
|
29
|
+
Hello
|
30
|
+
</div>
|
31
|
+
</nav>
|
32
|
+
HTML
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'renders a fixed navbar with the given content' do
|
36
|
+
expect(subject.render(fixed: true) { 'Hello' }).to match_dom <<-HTML
|
37
|
+
<div class="navbar-fixed">
|
38
|
+
<nav>
|
39
|
+
<div class="nav-wrapper">
|
40
|
+
Hello
|
41
|
+
</div>
|
42
|
+
</nav>
|
43
|
+
</div>
|
44
|
+
HTML
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'renders a navbar with the given content and the extended content' do
|
48
|
+
expect(subject.render do |nav|
|
49
|
+
nav.extended do
|
50
|
+
'Hellobis'
|
51
|
+
end
|
52
|
+
|
53
|
+
'Hello'
|
54
|
+
end).to match_dom <<-HTML
|
55
|
+
<nav class="nav-extended">
|
56
|
+
<div class="nav-wrapper">
|
57
|
+
Hello
|
58
|
+
</div>
|
59
|
+
<div class="nav-content">
|
60
|
+
Hellobis
|
61
|
+
</div>
|
62
|
+
</nav>
|
63
|
+
HTML
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'renders a navbar with the given content and the extended content and some custom class on the ext wrapper' do
|
67
|
+
expect(subject.render do |nav|
|
68
|
+
nav.extended(class: 'custom-bis') do
|
69
|
+
'Hellobis'
|
70
|
+
end
|
71
|
+
|
72
|
+
'Hello'
|
73
|
+
end).to match_dom <<-HTML
|
74
|
+
<nav class="nav-extended">
|
75
|
+
<div class="nav-wrapper">
|
76
|
+
Hello
|
77
|
+
</div>
|
78
|
+
<div class="custom-bis nav-content">
|
79
|
+
Hellobis
|
80
|
+
</div>
|
81
|
+
</nav>
|
82
|
+
HTML
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'renders a fixed navbar with the given content and the extended content' do
|
86
|
+
expect(subject.render(fixed: true) do |nav|
|
87
|
+
nav.extended do
|
88
|
+
'Hellobis'
|
89
|
+
end
|
90
|
+
|
91
|
+
'Hello'
|
92
|
+
end).to match_dom <<-HTML
|
93
|
+
<div class="navbar-fixed">
|
94
|
+
<nav class="nav-extended">
|
95
|
+
<div class="nav-wrapper">
|
96
|
+
Hello
|
97
|
+
</div>
|
98
|
+
<div class="nav-content">
|
99
|
+
Hellobis
|
100
|
+
</div>
|
101
|
+
</nav>
|
102
|
+
</div>
|
103
|
+
HTML
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mtl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Plüss
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-03
|
13
|
+
date: 2017-04-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: railties
|
@@ -171,12 +171,14 @@ files:
|
|
171
171
|
- lib/generators/mtl/templates/simple_form.rb
|
172
172
|
- lib/mtl.rb
|
173
173
|
- lib/mtl/rails/card_file_presenter.rb
|
174
|
+
- lib/mtl/rails/navbar_presenter.rb
|
174
175
|
- lib/mtl/rails/view_helpers.rb
|
175
176
|
- lib/mtl/simple_form/suffix.rb
|
176
177
|
- lib/mtl/version.rb
|
177
178
|
- mtl.gemspec
|
178
179
|
- package.json
|
179
180
|
- spec/mtl/rails/card_file_presenter_spec.rb
|
181
|
+
- spec/mtl/rails/navbar_presenter_spec.rb
|
180
182
|
- spec/mtl/rails/view_helpers_spec.rb
|
181
183
|
- spec/mtl/simple_form/suffix_spec.rb
|
182
184
|
- spec/mtl_spec.rb
|