cmor_core_frontend 0.0.26.pre → 0.0.27.pre

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: 20c3900aef31e7b4f4557185d2ceb4878244640ee6c2a3596bff94cdc4e53b8f
4
- data.tar.gz: 2b2f00217a3374ccd596a067dc796f8bcf51ad36296cb39cdd68e3f34cb78343
3
+ metadata.gz: b1e4f4e3f4aa442e8fab43e3626c41af40cec348a936bf86dfce977742933868
4
+ data.tar.gz: b7bf673dafc6b7ab82dd44eaab5257d1ce4c35063140098929bc3a3d51502008
5
5
  SHA512:
6
- metadata.gz: f9d5a18aa0c02d58a94247f48d4e1e49a7fbfaccc836069541c6bbd4c958b4cdb24ddea2ea38e4f45403e24826e2cf6f812052e8d1f580ee760fc125b2f5c81a
7
- data.tar.gz: 1672ffb160dc76b71e55b1e348215ebf6830addce1082a75537ab2e8503513ad78980f056134589018f3a415bb4c2b2757ce7f9c190ca965971c17d1eafab663
6
+ metadata.gz: 2e3ae62fe59ac4f9fdef0613738d7ea7eb126edccfac29a00e8b3e388a3108faff27693b1fd1c3309241f3835a84c405b8061b7aada46cb789f9c014f8e3b104
7
+ data.tar.gz: 13064acd5aa035a9b65569cc937449ad0f3f291fb69c0d09a2edbabe3f8910680be32f44b1c29c14bb91d73dbfc90d9b146f2c6b87fcecca03ecb5c1843c9c47
@@ -0,0 +1,93 @@
1
+ module Cmor
2
+ module Core
3
+ module Frontend
4
+ # Usage:
5
+ #
6
+ #
7
+ # # app/controllers/application_controller.rb
8
+ # class ApplicationController < ActionController::Base
9
+ # view_helper Cmor::Core::Frontend::BreadcrumbsViewHelper, as: :breadcrumbs_helper
10
+ # end
11
+ #
12
+ class BreadcrumbsViewHelper < Rao::ViewHelper::Base
13
+ # Usage:
14
+ #
15
+ # # app/views/layouts/application.html.erb
16
+ # %html
17
+ # %body
18
+ # = breadcrumbs_helper(self).render_breadcrumbs
19
+ #
20
+ def render_breadcrumbs
21
+ breadcrumbs = [].tap do |b|
22
+ # Add breadcrumb to home page
23
+ b.push(Breadcrumb.new(label: t('.home'), url: c.main_app.root_path))
24
+
25
+ # Are we showing a cms page?
26
+ if c.controller.class.name == 'Cmor::Cms::PageController' && c.action_name == 'respond' && c.params[:page] != 'home'
27
+ # Add breadcrumb for this page
28
+ b.push(Breadcrumb.new(label: c.content_for(:title), url: c.url_for()))
29
+ end
30
+
31
+ # Are we inside a resources controller?
32
+ if c.controller.class.respond_to?(:resource_class)
33
+ # Add a breadrumb for collection page
34
+ b.push(Breadcrumb.new(label: c.controller.class.resource_class.model_name.human(count: :other), url: c.url_for(action: :index, page: nil)))
35
+
36
+ # Are we showing a single resource?
37
+ if r = c.instance_variable_get(:@resource).presence
38
+ # Is it persisted?
39
+ if r.persisted?
40
+ # Add breadcrumb to this specific resource
41
+ b.push(Breadcrumb.new(label: label_for(r), url: c.url_for(action: :show, id: r.to_param)))
42
+ end
43
+ end
44
+
45
+ # Are we showing the collection (index) page?
46
+ if r = c.instance_variable_get(:@collection).presence
47
+ # Are we paginating?
48
+ if c.params.has_key?(:page)
49
+ # Ass breadcrumb for this page
50
+ b.push(Breadcrumb.new(label: c.controller.class.resource_class.model_name.human(count: :other), url: c.url_for()))
51
+ end
52
+ end
53
+ end
54
+ end
55
+ breadcrumbs.last.url = nil
56
+ render breadcrumbs: breadcrumbs
57
+ end
58
+
59
+ def t(identifier, options = {})
60
+ if identifier.start_with?('.')
61
+ prefix = self.class.name.underscore
62
+ caller_method = caller[0].split(' ').last.gsub("'", '')
63
+ I18n.t("#{prefix}.#{caller_method}.#{identifier}", options)
64
+ else
65
+ I18n.t(identifier, options)
66
+ end
67
+ end
68
+
69
+ class Breadcrumb
70
+ extend ActiveModel::Model
71
+
72
+ attr_accessor :label, :url, :link_html_options, :li_html_options
73
+
74
+ def initialize(attrs)
75
+ attrs.reverse_merge!(link_html_options: {}, li_html_options: {})
76
+ attrs.each do |k, v|
77
+ self.send("#{k}=", v)
78
+ end
79
+ end
80
+ end
81
+
82
+ private
83
+
84
+ def label_for(resource)
85
+ Cmor::Core::Frontend::Configuration.resource_label_methods.each do |method_name|
86
+ next unless resource.respond_to?(method_name)
87
+ return resource.send(method_name)
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,8 @@
1
+ %nav{"aria-label" => "breadcrumb"}
2
+ %ol.breadcrumb
3
+ - breadcrumbs.each do |b|
4
+ %li.breadcrumb-item{ b.li_html_options }
5
+ - if b.url.nil?
6
+ = b.label
7
+ - else
8
+ = link_to(b.label, b.url, b.link_html_options)
@@ -0,0 +1,4 @@
1
+ de:
2
+ cmor/core/frontend/breadcrumbs_view_helper:
3
+ render_breadcrumbs:
4
+ home: Home
@@ -0,0 +1,4 @@
1
+ en:
2
+ cmor/core/frontend/breadcrumbs_view_helper:
3
+ render_breadcrumbs:
4
+ home: Home
@@ -5,6 +5,10 @@ module Cmor
5
5
  def configure
6
6
  yield self
7
7
  end
8
+
9
+ mattr_accessor(:resource_label_methods) do
10
+ %i(human name email to_s)
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -1,5 +1,6 @@
1
1
  require 'cmor'
2
2
  require 'cmor_core'
3
+ require 'rao-view_helper'
3
4
  require 'rails_eu_gdpr'
4
5
 
5
6
  require 'cmor/core/frontend'
@@ -1,2 +1,7 @@
1
1
  Cmor::Core::Frontend.configure do |config|
2
+ # Methods, that will be tried on a resource to generate a nice title
3
+ #
4
+ # Default: config.resource_label_methods = %i(human name email to_s)
5
+ #
6
+ config.resource_label_methods = %i(human name email to_s)
2
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmor_core_frontend
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.26.pre
4
+ version: 0.0.27.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Vasquez Angel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-21 00:00:00.000000000 Z
11
+ date: 2019-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.26.pre
33
+ version: 0.0.27.pre
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.26.pre
40
+ version: 0.0.27.pre
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -290,6 +290,20 @@ dependencies:
290
290
  - - ">="
291
291
  - !ruby/object:Gem::Version
292
292
  version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: rao-view_helper
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
293
307
  description: Cmor::Core::Frontend Module.
294
308
  email:
295
309
  - roberto@vasquez-angel.de
@@ -299,6 +313,10 @@ extra_rdoc_files: []
299
313
  files:
300
314
  - MIT-LICENSE
301
315
  - Rakefile
316
+ - app/view_helpers/cmor/core/frontend/breadcrumbs_view_helper.rb
317
+ - app/views/cmor/core/frontend/breadcrumbs_view_helper/_render_breadcrumbs.html.haml
318
+ - config/locales/de.yml
319
+ - config/locales/en.yml
302
320
  - lib/cmor/core/frontend.rb
303
321
  - lib/cmor/core/frontend/configuration.rb
304
322
  - lib/cmor/core/frontend/engine.rb