cmor_core_frontend 0.0.33.pre → 0.0.34.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: 0aa3995a69282b711058c8f8922b0e3142a433df42e1852c90e03b6473034a03
4
- data.tar.gz: 6485345b0db9b24db3005c54e0cd99058ad9a39a32a0be6d94895300e21d2aa5
3
+ metadata.gz: cac22dcf3ca45849904fe9f317d1fd94ec3d573837e1164564bc49433fd5c76f
4
+ data.tar.gz: d921cd757e6d7a53eb93379b2d8166463bb21680d829db5211a8133937255fe9
5
5
  SHA512:
6
- metadata.gz: 7897cd23ca2f3d008bb3613f921f8b26878324196c6a4fcc2c611928f138a0149c06baa029db020ce938a90813940e52a00b34e64e9d53250aebc77ad46e9431
7
- data.tar.gz: 38077f7648fccb511f544ead55442b6422f8c33cb607c94e3a5a181988eb26b1a1d676ca196cc1cef6d3be0bc61309709db13941ddd49b61a40435d6e74ab915
6
+ metadata.gz: ec65f2aae3fa1b769f6b951db30c6a7e791410f8db21b09f0604502e1ddf380433067346d05cfaccd65d5422edcc4ebd381856d1e6b66fa1b8f30340484cb3a6
7
+ data.tar.gz: 2e782987e5675c9ed4f0e590e548969e27aac29ea3392be9874d2fa37a756f4c2212ea9f07ff11cfdf50135261815b6d6839044792fca9f8475368904d1e81bb
@@ -0,0 +1,20 @@
1
+ module Cmor
2
+ module Core
3
+ module Frontend
4
+ module Breadcrumb
5
+ class Base
6
+ extend ActiveModel::Model
7
+
8
+ attr_accessor :label, :url, :link_html_options, :li_html_options
9
+
10
+ def initialize(attrs)
11
+ attrs.reverse_merge!(link_html_options: {}, li_html_options: {})
12
+ attrs.each do |k, v|
13
+ self.send("#{k}=", v)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -17,15 +17,25 @@ module Cmor
17
17
  # %body
18
18
  # = breadcrumbs_helper(self).render_breadcrumbs
19
19
  #
20
- def render_breadcrumbs
20
+ # Excluding elements:
21
+ #
22
+ # You can exclude breadcrumbs by passing the exclude option by index or :last or :first:
23
+ #
24
+ # = breadcrumbs_helper(self).render_breadcrumbs(exclude: :first)
25
+ #
26
+ # You can configure the first breadcrumb in the initializer by setting the first_breadcrumb options.
27
+ #
28
+ def render_breadcrumbs(options = {})
29
+ options.reverse_merge!(exclude: [])
30
+ exclude = options.delete(:exclude)
21
31
  breadcrumbs = [].tap do |b|
22
32
  # Add breadcrumb to home page
23
- b.push(Breadcrumb.new(label: t('.home'), url: c.main_app.root_path))
33
+ b.push(instance_exec(&Cmor::Core::Frontend::Configuration.first_breadcrumb))
24
34
 
25
35
  # Are we showing a cms page?
26
36
  if c.controller.class.name == 'Cmor::Cms::PageController' && c.action_name == 'respond' && c.params[:page] != 'home'
27
37
  # Add breadcrumb for this page
28
- b.push(Breadcrumb.new(label: c.content_for(:title), url: c.url_for()))
38
+ b.push(Cmor::Core::Frontend::Breadcrumb::Base.new(label: c.content_for(:title), url: c.url_for()))
29
39
  end
30
40
 
31
41
  # Are we inside a resources controller?
@@ -34,14 +44,14 @@ module Cmor
34
44
  b.push(breadcrumb_for_current_engine)
35
45
 
36
46
  # Add a breadrumb for collection page
37
- b.push(Breadcrumb.new(label: c.controller.class.resource_class.model_name.human(count: :other), url: c.url_for(action: :index, page: nil)))
47
+ b.push(Cmor::Core::Frontend::Breadcrumb::Base.new(label: c.controller.class.resource_class.model_name.human(count: :other), url: c.url_for(action: :index, page: nil)))
38
48
 
39
49
  # Are we showing a single resource?
40
50
  if r = c.instance_variable_get(:@resource).presence
41
51
  # Is it persisted?
42
52
  if r.persisted?
43
53
  # Add breadcrumb to this specific resource
44
- b.push(Breadcrumb.new(label: label_for(r), url: c.url_for(action: :show, id: r.to_param)))
54
+ b.push(Cmor::Core::Frontend::Breadcrumb::Base.new(label: label_for(r), url: c.url_for(action: :show, id: r.to_param)))
45
55
  end
46
56
  end
47
57
 
@@ -50,7 +60,7 @@ module Cmor
50
60
  # Are we paginating?
51
61
  if c.params.has_key?(:page)
52
62
  # Ass breadcrumb for this page
53
- b.push(Breadcrumb.new(label: c.controller.class.resource_class.model_name.human(count: :other), url: c.url_for()))
63
+ b.push(Cmor::Core::Frontend::Breadcrumb::Base.new(label: c.controller.class.resource_class.model_name.human(count: :other), url: c.url_for()))
54
64
  end
55
65
  end
56
66
  end
@@ -61,10 +71,22 @@ module Cmor
61
71
  b.push(breadcrumb_for_current_engine)
62
72
 
63
73
  # Add a text breadcrumb for the service name
64
- b.push(Breadcrumb.new(label: c.controller.class.service_class.model_name.human))
74
+ b.push(Cmor::Core::Frontend::Breadcrumb::Base.new(label: c.controller.class.service_class.model_name.human))
65
75
  end
66
76
  end
77
+
67
78
  breadcrumbs.last.url = nil
79
+
80
+ if exclude.any?
81
+ if exclude.include?(:last)
82
+ breadcrumbs.pop
83
+ end
84
+ exclude.keep_if{ |e| e.is_a?(Integer) }.sort.reverse.each { |index| breadcrumbs.delete_at(index) }
85
+ if exclude.include?(:first)
86
+ breadcrumbs.shift
87
+ end
88
+ end
89
+
68
90
  render breadcrumbs: breadcrumbs
69
91
  end
70
92
 
@@ -76,7 +98,7 @@ module Cmor
76
98
  end
77
99
 
78
100
  def breadcrumb_for_engine(engine)
79
- Breadcrumb.new(label: I18n.t("classes.#{engine.name.underscore}"))
101
+ Cmor::Core::Frontend::Breadcrumb::Base.new(label: I18n.t("classes.#{engine.name.underscore}"))
80
102
  end
81
103
 
82
104
  def current_engine
@@ -91,26 +113,24 @@ module Cmor
91
113
  def t(identifier, options = {})
92
114
  if identifier.start_with?('.')
93
115
  prefix = self.class.name.underscore
94
- caller_method = caller[0].split(' ').last.gsub("'", '')
116
+
117
+ # Check if we are in a proc by matching the caller string
118
+ caller_method = if caller[0] =~ /\(required\)>/
119
+ # If yes omit the last call (that has to be instance_exec) and
120
+ # fetch the previous one that should be the method that is really
121
+ # calling us.
122
+ caller[2].split(' ').last.gsub("'", '').gsub("`", '')
123
+ else
124
+ # Otherwise take the first caller
125
+ caller[0].split(' ').last.gsub("'", '').gsub("`", '')
126
+ end
127
+
95
128
  I18n.t("#{prefix}.#{caller_method}.#{identifier}", options)
96
129
  else
97
130
  I18n.t(identifier, options)
98
131
  end
99
132
  end
100
133
 
101
- class Breadcrumb
102
- extend ActiveModel::Model
103
-
104
- attr_accessor :label, :url, :link_html_options, :li_html_options
105
-
106
- def initialize(attrs)
107
- attrs.reverse_merge!(link_html_options: {}, li_html_options: {})
108
- attrs.each do |k, v|
109
- self.send("#{k}=", v)
110
- end
111
- end
112
- end
113
-
114
134
  private
115
135
 
116
136
  def label_for(resource)
@@ -6,6 +6,10 @@ module Cmor
6
6
  yield self
7
7
  end
8
8
 
9
+ mattr_accessor(:first_breadcrumb) do
10
+ ->() { Cmor::Core::Frontend::Breadcrumb::Base.new(label: t('.home'), url: c.main_app.root_path) }
11
+ end
12
+
9
13
  mattr_accessor(:resource_label_methods) do
10
14
  %i(human name email to_s)
11
15
  end
@@ -4,4 +4,10 @@ Cmor::Core::Frontend.configure do |config|
4
4
  # Default: config.resource_label_methods = %i(human name email to_s)
5
5
  #
6
6
  config.resource_label_methods = %i(human name email to_s)
7
+
8
+ # Sets the first breadcrumb. This is usually the home link.
9
+ #
10
+ # Default: config.first_breadcrumb = ->() { Cmor::Core::Frontend::Breadcrumb::Base.new(label: t('.home'), url: c.main_app.root_path) }
11
+ #
12
+ config.first_breadcrumb = ->() { Cmor::Core::Frontend::Breadcrumb::Base.new(label: t('.home'), url: c.main_app.root_path) }
7
13
  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.33.pre
4
+ version: 0.0.34.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-08-04 00:00:00.000000000 Z
11
+ date: 2019-08-08 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.33.pre
33
+ version: 0.0.34.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.33.pre
40
+ version: 0.0.34.pre
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -313,6 +313,7 @@ extra_rdoc_files: []
313
313
  files:
314
314
  - MIT-LICENSE
315
315
  - Rakefile
316
+ - app/breadcrumbs/cmor/core/frontend/breadcrumb/base.rb
316
317
  - app/view_helpers/cmor/core/frontend/breadcrumbs_view_helper.rb
317
318
  - app/views/cmor/core/frontend/breadcrumbs_view_helper/_render_breadcrumbs.html.haml
318
319
  - config/locales/de.yml