cmor_core_frontend 0.0.26.pre → 0.0.27.pre

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