mtl 1.1.2 → 1.1.4

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
  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