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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 428963389c75ff1c66fda33c1e8c17c3baa70c31
4
- data.tar.gz: f33cece0832c200004a076e203381eebc7ad00ea
3
+ metadata.gz: 44b92a6793c60cb944ae9c28cd6f9150822fd50a
4
+ data.tar.gz: f3835d1ab87ff6bfa760afbb412968199d8fab2c
5
5
  SHA512:
6
- metadata.gz: ba1357900bcad16026ea726a049c637a614963f3e04c48be22d0c533ebc1bf5e7bfc27a756a9ab74c0f1a8c2c651143040aafbe99be524ce20ff86cc2be5c40a
7
- data.tar.gz: bf18bb5f6f05d03d12d02006d16b9b7cfa48a8e3bf8a79fa78e40cd2617e80c279b6ecfa9a4457c861368347f0f805edfb8541a1c28c6e98752c3f85c4277398
6
+ metadata.gz: 64d0e8d7462b7047f29674d0cdfd5983e7a86e7191d1cd2f26bd2f212721b14b5391f5b23617a90e0e123590ce0273d6285dda6e8a086c8501a2f54bd210b403
7
+ data.tar.gz: 8525dc5946545f84f4dd750b24f5b59b8397acbeefe3ebd71f8f95a085224d1d42778690387bcaf130f0618c1091cceb4b1b195a8bd2b35c85668270e705865a
@@ -1,25 +1,23 @@
1
1
  <header class="<%= mtl_class %>">
2
- <nav>
3
- <div class="nav-wrapper">
4
- <%- if mtl_back %>
5
- <%= link_to mtl_back, class: 'mtl-layout-default-header-back left' do %>
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
- <%- if mtl_title %>
15
- <h1 class="page-title">
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
- <%- if mtl_content %>
21
- <%= mtl_content %>
22
- <%- end %>
23
- </div>
24
- </nav>
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: 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, params = {})
408
- CardFilePresenter.new(self).render(filename, href, params)
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
@@ -1,5 +1,5 @@
1
1
  module Mtl
2
- VERSION = '1.1.2'.freeze
2
+ VERSION = '1.1.4'.freeze
3
3
  MATERIALIZE_VERSION = '0.98.0'.freeze
4
4
  ICONS_VERSION = '2.2.3'.freeze
5
5
  LODASH_VERSION = '4.14.1'.freeze
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'mtl/version'
@@ -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.2
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-08 00:00:00.000000000 Z
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