effective_pages 2.0.8 → 3.0.2
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 +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +11 -70
- data/app/controllers/admin/menus_controller.rb +6 -48
- data/app/controllers/admin/pages_controller.rb +11 -102
- data/app/controllers/effective/pages_controller.rb +14 -8
- data/app/datatables/effective_pages_datatable.rb +20 -2
- data/app/datatables/effective_pages_menu_datatable.rb +38 -0
- data/app/helpers/effective_menus_helper.rb +31 -136
- data/app/helpers/effective_pages_helper.rb +4 -2
- data/app/models/effective/page.rb +65 -22
- data/app/views/admin/menus/index.html.haml +10 -2
- data/app/views/admin/pages/_form.html.haml +20 -25
- data/app/views/admin/pages/_form_access.html.haml +10 -0
- data/app/views/admin/pages/_form_content.html.haml +3 -0
- data/app/views/admin/pages/_form_menu.html.haml +16 -0
- data/app/views/admin/pages/_form_page.html.haml +31 -0
- data/app/views/admin/pages/_rich_text_areas.html.haml +2 -0
- data/app/views/effective/pages/_menu.html.haml +20 -0
- data/config/effective_pages.rb +9 -38
- data/config/routes.rb +6 -9
- data/db/migrate/01_create_effective_pages.rb.erb +12 -30
- data/lib/effective_pages.rb +17 -61
- data/lib/effective_pages/version.rb +1 -1
- data/lib/generators/effective_pages/install_generator.rb +1 -1
- data/lib/generators/templates/example.html.haml +4 -5
- data/lib/tasks/effective_pages_tasks.rake +1 -1
- metadata +11 -38
- data/app/datatables/effective_menus_datatable.rb +0 -16
- data/app/helpers/effective_breadcrumbs_helper.rb +0 -41
- data/app/helpers/effective_menus_admin_helper.rb +0 -8
- data/app/models/effective/access_denied.rb +0 -17
- data/app/models/effective/menu.rb +0 -172
- data/app/models/effective/menu_item.rb +0 -78
- data/app/views/admin/menu_items/_actions.html.haml +0 -4
- data/app/views/admin/menu_items/_expand.html.haml +0 -2
- data/app/views/admin/menu_items/_item.html.haml +0 -13
- data/app/views/admin/menu_items/_new.html.haml +0 -3
- data/app/views/admin/menus/_actions.html.haml +0 -2
- data/app/views/admin/menus/_form.html.haml +0 -4
- data/app/views/admin/menus/edit.html.haml +0 -3
- data/app/views/admin/menus/new.html.haml +0 -3
- data/app/views/admin/menus/show.html.haml +0 -39
- data/app/views/admin/pages/_actions.html.haml +0 -7
- data/app/views/admin/pages/_roles.html.haml +0 -1
- data/app/views/admin/pages/edit.html.haml +0 -3
- data/app/views/admin/pages/index.html.haml +0 -6
- data/app/views/admin/pages/new.html.haml +0 -3
@@ -0,0 +1,20 @@
|
|
1
|
+
- raise('expected a menu') unless menu.present?
|
2
|
+
- menu = menu.to_s
|
3
|
+
|
4
|
+
- Effective::Page.for_menu_root(menu).each do |page|
|
5
|
+
- next unless EffectiveResources.authorized?(self, :show, page)
|
6
|
+
- next if (page.authenticate_user || page.roles.present?) && current_user.blank?
|
7
|
+
- next if page.roles.present? && !current_user.roles.include?(page.roles)
|
8
|
+
|
9
|
+
- menu_children = page.menu_children.select { |page| page.menu_name == menu }
|
10
|
+
|
11
|
+
- if menu_children.blank?
|
12
|
+
= nav_link_to(page, page.menu_url.presence || effective_pages.page_path(page))
|
13
|
+
- else
|
14
|
+
= nav_dropdown(page.to_s) do
|
15
|
+
- ([page] + menu_children).each do |page|
|
16
|
+
- next unless EffectiveResources.authorized?(self, :show, page)
|
17
|
+
- next if (page.authenticate_user || page.roles.present?) && current_user.blank?
|
18
|
+
- next if page.roles.present? && !current_user.roles.include?(page.roles)
|
19
|
+
|
20
|
+
= nav_link_to(page, page.menu_url.presence || effective_pages.page_path(page))
|
data/config/effective_pages.rb
CHANGED
@@ -1,13 +1,18 @@
|
|
1
1
|
EffectivePages.setup do |config|
|
2
2
|
config.pages_table_name = :pages
|
3
|
-
|
4
|
-
|
3
|
+
|
4
|
+
# The menu names a page can belong to
|
5
|
+
config.menus = [:main, :footer]
|
5
6
|
|
6
7
|
# The directory where your page templates live
|
7
8
|
# Any files in this directory will be automatically available when
|
8
9
|
# creating/editting an Effective::Page from the Admin screens
|
9
10
|
# Relative to app/views/
|
10
|
-
config.pages_path = '
|
11
|
+
config.pages_path = 'effective/pages/'
|
12
|
+
|
13
|
+
# The directory where your layouts live
|
14
|
+
# Relative to app/views/
|
15
|
+
config.layouts_path = 'layouts/'
|
11
16
|
|
12
17
|
# Excluded Pages
|
13
18
|
# Any page templates from the above directory that should be excluded
|
@@ -39,44 +44,10 @@ EffectivePages.setup do |config|
|
|
39
44
|
config.silence_missing_meta_description_warnings = false
|
40
45
|
config.silence_missing_canonical_url_warnings = false
|
41
46
|
|
42
|
-
|
43
47
|
# Display the effective roles 'choose roles' input when an admin creates a new post
|
44
48
|
config.use_effective_roles = false
|
45
49
|
|
46
|
-
# Authorization Method
|
47
|
-
#
|
48
|
-
# This method is called by all controller actions with the appropriate action and resource
|
49
|
-
# If the method returns false, an Effective::AccessDenied Error will be raised (see README.md for complete info)
|
50
|
-
#
|
51
|
-
# Use via Proc (and with CanCan):
|
52
|
-
# config.authorization_method = Proc.new { |controller, action, resource| can?(action, resource) }
|
53
|
-
#
|
54
|
-
# Use via custom method:
|
55
|
-
# config.authorization_method = :my_authorization_method
|
56
|
-
#
|
57
|
-
# And then in your application_controller.rb:
|
58
|
-
#
|
59
|
-
# def my_authorization_method(action, resource)
|
60
|
-
# current_user.is?(:admin)
|
61
|
-
# end
|
62
|
-
#
|
63
|
-
# Or disable the check completely:
|
64
|
-
# config.authorization_method = false
|
65
|
-
config.authorization_method = Proc.new { |controller, action, resource| authorize!(action, resource) && resource.roles_permit?(current_user) } # CanCanCan
|
66
|
-
# Use effective_roles: resource.roles_permit?(current_user)
|
67
|
-
|
68
50
|
# Layout Settings
|
69
|
-
#
|
70
|
-
|
71
|
-
# The layout for the EffectivePages admin screen
|
72
|
-
config.layout = {
|
73
|
-
:admin => 'application'
|
74
|
-
}
|
75
|
-
|
76
|
-
# All effective_page menu options
|
77
|
-
config.menu = {
|
78
|
-
:apply_active_class => true, # Add an .active class to the appropriate li item based on current page url
|
79
|
-
:maxdepth => 2 # 2 by default, strict bootstrap3 doesnt support dropdowns in your dropdowns
|
80
|
-
}
|
51
|
+
# config.layout = { admin: 'admin' }
|
81
52
|
|
82
53
|
end
|
data/config/routes.rb
CHANGED
@@ -1,23 +1,20 @@
|
|
1
|
-
class EffectivePagesConstraint
|
2
|
-
def self.matches?(request)
|
3
|
-
Effective::Page.find(request.path_parameters[:id] || '/').present? rescue false
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
1
|
EffectivePages::Engine.routes.draw do
|
8
2
|
namespace :admin do
|
9
3
|
resources :pages, except: [:show]
|
4
|
+
resources :menus, only: [:index]
|
10
5
|
end
|
11
6
|
|
12
|
-
scope :
|
13
|
-
|
7
|
+
scope module: 'effective' do
|
8
|
+
match '*id', to: 'pages#show', via: :get, as: :page, constraints: lambda { |req|
|
9
|
+
Effective::Page.find_by_slug_or_id(req.path_parameters[:id] || '/').present?
|
10
|
+
}
|
14
11
|
end
|
15
12
|
end
|
16
13
|
|
17
14
|
# Automatically mount the engine as an append
|
18
15
|
Rails.application.routes.append do
|
19
16
|
unless Rails.application.routes.routes.find { |r| r.name == 'effective_pages' }
|
20
|
-
mount EffectivePages::Engine => '/', :
|
17
|
+
mount EffectivePages::Engine => '/', as: 'effective_pages'
|
21
18
|
end
|
22
19
|
end
|
23
20
|
|
@@ -4,49 +4,31 @@ class CreateEffectivePages < ActiveRecord::Migration[4.2]
|
|
4
4
|
t.string :title
|
5
5
|
t.string :meta_description
|
6
6
|
|
7
|
-
t.boolean :draft, :
|
7
|
+
t.boolean :draft, default: false
|
8
8
|
|
9
|
-
t.string :layout, :
|
9
|
+
t.string :layout, default: 'application'
|
10
10
|
t.string :template
|
11
11
|
|
12
12
|
t.string :slug
|
13
|
-
|
13
|
+
|
14
|
+
t.boolean :authenticate_user, default: false
|
15
|
+
t.integer :roles_mask, default: 0
|
16
|
+
|
17
|
+
t.integer :menu_parent_id
|
18
|
+
t.boolean :menu, default: false
|
19
|
+
t.string :menu_name
|
20
|
+
t.string :menu_url
|
21
|
+
t.integer :menu_position
|
14
22
|
|
15
23
|
t.datetime :updated_at
|
16
24
|
t.datetime :created_at
|
17
25
|
end
|
18
|
-
add_index <%= @pages_table_name %>, :slug, :unique => true
|
19
|
-
|
20
|
-
create_table <%= @menus_table_name %> do |t|
|
21
|
-
t.string :title
|
22
|
-
t.timestamps
|
23
|
-
end
|
24
|
-
|
25
|
-
create_table <%= @menu_items_table_name %> do |t|
|
26
|
-
t.integer :menu_id
|
27
26
|
|
28
|
-
|
29
|
-
t.string :menuable_type
|
30
|
-
|
31
|
-
t.string :title
|
32
|
-
|
33
|
-
t.string :url
|
34
|
-
t.string :special
|
35
|
-
|
36
|
-
t.string :classes
|
37
|
-
t.boolean :new_window, :default => false
|
38
|
-
t.integer :roles_mask, :default => nil
|
39
|
-
|
40
|
-
t.integer :lft
|
41
|
-
t.integer :rgt
|
42
|
-
end
|
43
|
-
add_index <%= @menu_items_table_name %>, :lft
|
27
|
+
add_index <%= @pages_table_name %>, :slug, :unique => true
|
44
28
|
end
|
45
29
|
|
46
30
|
def self.down
|
47
31
|
drop_table <%= @pages_table_name %>
|
48
|
-
drop_table <%= @menus_table_name %>
|
49
|
-
drop_table <%= @menu_items_table_name %>
|
50
32
|
end
|
51
33
|
|
52
34
|
end
|
data/lib/effective_pages.rb
CHANGED
@@ -1,86 +1,42 @@
|
|
1
1
|
require 'effective_datatables'
|
2
|
-
require '
|
2
|
+
require 'effective_resources'
|
3
3
|
require 'effective_roles'
|
4
4
|
require 'effective_pages/engine'
|
5
5
|
require 'effective_pages/version'
|
6
6
|
|
7
7
|
module EffectivePages
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
mattr_accessor :site_og_image_width
|
18
|
-
mattr_accessor :site_og_image_height
|
19
|
-
|
20
|
-
mattr_accessor :site_title
|
21
|
-
mattr_accessor :site_title_suffix
|
22
|
-
mattr_accessor :fallback_meta_description
|
23
|
-
|
24
|
-
mattr_accessor :silence_missing_page_title_warnings
|
25
|
-
mattr_accessor :silence_missing_meta_description_warnings
|
26
|
-
mattr_accessor :silence_missing_canonical_url_warnings
|
27
|
-
|
28
|
-
mattr_accessor :use_effective_roles
|
29
|
-
|
30
|
-
mattr_accessor :menu
|
31
|
-
mattr_accessor :authorization_method
|
32
|
-
mattr_accessor :layout
|
33
|
-
|
34
|
-
def self.setup
|
35
|
-
yield self
|
8
|
+
def self.config_keys
|
9
|
+
[
|
10
|
+
:pages_table_name,
|
11
|
+
:pages_path, :excluded_pages, :layouts_path, :excluded_layouts,
|
12
|
+
:site_og_image, :site_og_image_width, :site_og_image_height,
|
13
|
+
:site_title, :site_title_suffix, :fallback_meta_description,
|
14
|
+
:silence_missing_page_title_warnings, :silence_missing_meta_description_warnings, :silence_missing_canonical_url_warnings,
|
15
|
+
:use_effective_roles, :menus, :layout
|
16
|
+
]
|
36
17
|
end
|
37
18
|
|
38
|
-
|
39
|
-
@_exceptions ||= [Effective::AccessDenied, (CanCan::AccessDenied if defined?(CanCan)), (Pundit::NotAuthorizedError if defined?(Pundit))].compact
|
40
|
-
|
41
|
-
return !!authorization_method unless authorization_method.respond_to?(:call)
|
42
|
-
controller = controller.controller if controller.respond_to?(:controller)
|
43
|
-
|
44
|
-
begin
|
45
|
-
!!(controller || self).instance_exec((controller || self), action, resource, &authorization_method)
|
46
|
-
rescue *@_exceptions
|
47
|
-
false
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.authorize!(controller, action, resource)
|
52
|
-
raise Effective::AccessDenied.new('Access Denied', action, resource) unless authorized?(controller, action, resource)
|
53
|
-
end
|
54
|
-
|
55
|
-
# Remove leading and trailing '/' characters
|
56
|
-
# Will return: "effective/pages"
|
57
|
-
def self.pages_path=(filepath)
|
58
|
-
filepath = filepath.to_s
|
59
|
-
filepath = filepath[1..-1] if filepath.starts_with?('/')
|
60
|
-
@@pages_path = filepath.chomp('/')
|
61
|
-
end
|
19
|
+
include EffectiveGem
|
62
20
|
|
63
21
|
def self.templates
|
64
|
-
ApplicationController.view_paths.map { |path| Dir[
|
22
|
+
ApplicationController.view_paths.map { |path| Dir[File.join(path, pages_path, '**')] }.flatten.map do |file|
|
65
23
|
name = File.basename(file).split('.').first
|
66
24
|
next if name.starts_with?('_')
|
67
25
|
next if Array(EffectivePages.excluded_pages).map { |str| str.to_s }.include?(name)
|
68
26
|
name
|
69
|
-
end.compact
|
27
|
+
end.compact.sort
|
70
28
|
end
|
71
29
|
|
72
30
|
def self.layouts
|
73
|
-
|
31
|
+
return [] if layouts_path.blank?
|
32
|
+
|
33
|
+
ApplicationController.view_paths.map { |path| Dir[File.join(path, layouts_path, '**')] }.flatten.map do |file|
|
74
34
|
name = File.basename(file).split('.').first
|
75
35
|
next if name.starts_with?('_')
|
76
36
|
next if name.include?('mailer')
|
77
37
|
next if Array(EffectivePages.excluded_layouts).map { |str| str.to_s }.include?(name)
|
78
38
|
name
|
79
|
-
end.compact
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.permitted_params
|
83
|
-
@@permitted_params ||= [:title, :meta_description, :draft, :layout, :template, :slug, roles: []]
|
39
|
+
end.compact.sort
|
84
40
|
end
|
85
41
|
|
86
42
|
end
|
@@ -32,7 +32,7 @@ module EffectivePages
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def setup_routes
|
35
|
-
inject_into_file 'config/routes.rb', "\n # if you want EffectivePages to render the home / root page\n # uncomment the following line and create an Effective::Page with slug == 'home' \n # root :
|
35
|
+
inject_into_file 'config/routes.rb', "\n # if you want EffectivePages to render the home / root page\n # uncomment the following line and create an Effective::Page with slug == 'home' \n # root to: 'Effective::Pages#show', id: 'home'\n", :before => /root (:?)to.*/
|
36
36
|
end
|
37
37
|
|
38
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '6'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: effective_datatables
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 4.0.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: effective_regions
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: effective_resources
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,33 +78,20 @@ files:
|
|
92
78
|
- app/controllers/admin/menus_controller.rb
|
93
79
|
- app/controllers/admin/pages_controller.rb
|
94
80
|
- app/controllers/effective/pages_controller.rb
|
95
|
-
- app/datatables/effective_menus_datatable.rb
|
96
81
|
- app/datatables/effective_pages_datatable.rb
|
97
|
-
- app/
|
98
|
-
- app/helpers/effective_menus_admin_helper.rb
|
82
|
+
- app/datatables/effective_pages_menu_datatable.rb
|
99
83
|
- app/helpers/effective_menus_helper.rb
|
100
84
|
- app/helpers/effective_pages_helper.rb
|
101
|
-
- app/models/effective/access_denied.rb
|
102
|
-
- app/models/effective/menu.rb
|
103
|
-
- app/models/effective/menu_item.rb
|
104
85
|
- app/models/effective/page.rb
|
105
|
-
- app/views/admin/menu_items/_actions.html.haml
|
106
|
-
- app/views/admin/menu_items/_expand.html.haml
|
107
|
-
- app/views/admin/menu_items/_item.html.haml
|
108
|
-
- app/views/admin/menu_items/_new.html.haml
|
109
|
-
- app/views/admin/menus/_actions.html.haml
|
110
|
-
- app/views/admin/menus/_form.html.haml
|
111
|
-
- app/views/admin/menus/edit.html.haml
|
112
86
|
- app/views/admin/menus/index.html.haml
|
113
|
-
- app/views/admin/menus/new.html.haml
|
114
|
-
- app/views/admin/menus/show.html.haml
|
115
|
-
- app/views/admin/pages/_actions.html.haml
|
116
87
|
- app/views/admin/pages/_additional_fields.html.haml
|
117
88
|
- app/views/admin/pages/_form.html.haml
|
118
|
-
- app/views/admin/pages/
|
119
|
-
- app/views/admin/pages/
|
120
|
-
- app/views/admin/pages/
|
121
|
-
- app/views/admin/pages/
|
89
|
+
- app/views/admin/pages/_form_access.html.haml
|
90
|
+
- app/views/admin/pages/_form_content.html.haml
|
91
|
+
- app/views/admin/pages/_form_menu.html.haml
|
92
|
+
- app/views/admin/pages/_form_page.html.haml
|
93
|
+
- app/views/admin/pages/_rich_text_areas.html.haml
|
94
|
+
- app/views/effective/pages/_menu.html.haml
|
122
95
|
- config/effective_pages.rb
|
123
96
|
- config/routes.rb
|
124
97
|
- db/migrate/01_create_effective_pages.rb.erb
|
@@ -1,16 +0,0 @@
|
|
1
|
-
class EffectiveMenusDatatable < Effective::Datatable
|
2
|
-
|
3
|
-
datatable do
|
4
|
-
col :id, visible: false
|
5
|
-
col :updated_at, visible: false
|
6
|
-
|
7
|
-
col :title
|
8
|
-
|
9
|
-
actions_col partial: 'admin/menus/actions', partial_as: :menu
|
10
|
-
end
|
11
|
-
|
12
|
-
collection do
|
13
|
-
Effective::Menu.all
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module EffectiveBreadcrumbsHelper
|
2
|
-
def render_breadcrumbs(menu, page)
|
3
|
-
menu = Effective::Menu.find_by_title(menu.to_s) if menu.kind_of?(String) || menu.kind_of?(Symbol)
|
4
|
-
return "Menu '#{menu}' does not exist".html_safe unless menu.present?
|
5
|
-
|
6
|
-
return breadcrumbs_fallback(page) if !page.present?
|
7
|
-
|
8
|
-
menu_item = if page.kind_of?(Effective::Page)
|
9
|
-
url = effective_pages.page_path(page)
|
10
|
-
menu.menu_items.find { |item| item.menuable == page || item.title == page.title || item.url == url }
|
11
|
-
elsif page.kind_of?(String)
|
12
|
-
downcased = page.downcase
|
13
|
-
menu.menu_items.find { |item| item.title.downcase == downcased || item.url == downcased }
|
14
|
-
else
|
15
|
-
menu.menu_items.find { |item| item.menuable == page || item.title == page || item.url == page }
|
16
|
-
end
|
17
|
-
|
18
|
-
return breadcrumbs_fallback(page) unless menu_item.present?
|
19
|
-
|
20
|
-
parents = menu.menu_items.select { |item| item.lft < menu_item.lft && item.rgt > menu_item.rgt }
|
21
|
-
|
22
|
-
content_tag(:ol, class: 'breadcrumb') do
|
23
|
-
(
|
24
|
-
parents.map { |parent| content_tag(:li, link_to(parent.title, parent.url.presence || '#', title: parent.title)) } +
|
25
|
-
[content_tag(:li, page.try(:title) || page, class: 'active')]
|
26
|
-
).join().html_safe
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
alias_method :render_breadcrumb, :render_breadcrumbs
|
31
|
-
|
32
|
-
def breadcrumbs_fallback(page = nil, root: 'Home')
|
33
|
-
content_tag(:ol, class: 'breadcrumb') do
|
34
|
-
[
|
35
|
-
content_tag(:li, link_to(root, root_path, title: root)),
|
36
|
-
content_tag(:li, ((page.title if page.respond_to?(:title)) || page || @page_title || 'Here'), class: 'active')
|
37
|
-
].join().html_safe
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|