effective_pages 3.1.1 → 3.2.0
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/app/datatables/effective_pages_datatable.rb +4 -2
- data/app/datatables/effective_pages_menu_datatable.rb +4 -4
- data/app/helpers/effective_menus_helper.rb +9 -1
- data/app/models/effective/page.rb +24 -6
- data/app/views/admin/pages/_form_menu.html.haml +3 -2
- data/app/views/admin/pages/_form_page.html.haml +12 -13
- data/app/views/effective/pages/_menu.html.haml +10 -8
- data/app/views/effective/pages/_page_menu.html.haml +9 -5
- data/db/migrate/01_create_effective_pages.rb.erb +4 -0
- data/lib/effective_pages/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '06898ad2ffae38015ec40dbeeefb1a46e468a7df73e933c69c194d06415123cc'
|
4
|
+
data.tar.gz: 74916bd3ca8fe11dbac3b6ac6b6085cc73cc9fd381fdf96aacd46fed82a3ba72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27fc19935dabbad5e6710ad06a9ea883d04a983541ae5308d706c62bc5546c295a922a6143fb9778980fd80ec26817c1d68ea7025b32d6950558da8af09290de
|
7
|
+
data.tar.gz: 1789579e269f287c2b4db33748d3039f6bc0b152506a0c597ebcbbbd58c8064f38cb240c2de4f76740bd01b620ffcb64c2dbbbda8eee822a513de5d9ea46c322
|
@@ -15,8 +15,6 @@ class EffectivePagesDatatable < Effective::Datatable
|
|
15
15
|
col :updated_at, visible: false
|
16
16
|
|
17
17
|
col :title
|
18
|
-
col :menu_title
|
19
|
-
col :menu_name
|
20
18
|
|
21
19
|
col :slug do |page|
|
22
20
|
link_to(page.slug, effective_pages.page_path(page), target: '_blank')
|
@@ -27,6 +25,10 @@ class EffectivePagesDatatable < Effective::Datatable
|
|
27
25
|
col :layout, visible: false
|
28
26
|
col :tempate, visible: false
|
29
27
|
|
28
|
+
col :menu_name
|
29
|
+
col :menu_title
|
30
|
+
col :menu_group
|
31
|
+
|
30
32
|
col :menu_url, visible: false
|
31
33
|
col :menu_parent, search: { collection: admin_menu_parent_collection(), grouped: true }
|
32
34
|
col :menu_position, visible: false
|
@@ -16,12 +16,12 @@ class EffectivePagesMenuDatatable < Effective::Datatable
|
|
16
16
|
|
17
17
|
# We only support depth 2 and 3.
|
18
18
|
col :menu_children, label: 'Children' do |page|
|
19
|
-
page.menu_children.map do |child|
|
19
|
+
page.menu_children.group_by(&:menu_group).values.flatten.map do |child|
|
20
20
|
content_tag(:div, class: 'col-resource_item') do
|
21
|
-
link = link_to(child, effective_pages.edit_admin_page_path(child))
|
21
|
+
link = link_to(child.admin_menu_label, effective_pages.edit_admin_page_path(child))
|
22
22
|
|
23
|
-
list = child.menu_children.map do |child|
|
24
|
-
content_tag(:li, link_to(child, effective_pages.edit_admin_page_path(child)))
|
23
|
+
list = child.menu_children.group_by(&:menu_group).values.flatten.map do |child|
|
24
|
+
content_tag(:li, link_to(child.admin_menu_label, effective_pages.edit_admin_page_path(child)))
|
25
25
|
end
|
26
26
|
|
27
27
|
link + (content_tag(:ul, list.join.html_safe) if list.present?).to_s
|
@@ -67,7 +67,15 @@ module EffectiveMenusHelper
|
|
67
67
|
# You can only select root level pages and immediate children
|
68
68
|
pages.map do |page|
|
69
69
|
[[page.to_s, page.id, page.menu_name]] + page.menu_children.map do |child|
|
70
|
-
|
70
|
+
label = content_tag(:div) do
|
71
|
+
arrow = "→"
|
72
|
+
group = content_tag(:span, child.menu_group, class: 'badge badge-info') if child.menu_group.present?
|
73
|
+
title = child.menu_to_s
|
74
|
+
|
75
|
+
[arrow, group, title].compact.join(' ').html_safe
|
76
|
+
end
|
77
|
+
|
78
|
+
[child.to_s, child.to_param, { 'data-html': label }, child.menu_name]
|
71
79
|
end
|
72
80
|
end.flatten(1).group_by(&:last)
|
73
81
|
end
|
@@ -29,12 +29,13 @@ module Effective
|
|
29
29
|
slug :string
|
30
30
|
|
31
31
|
# Menu stuff
|
32
|
-
menu :boolean
|
33
|
-
menu_name :string
|
32
|
+
menu :boolean # Should this be displayed on the menu at all?
|
33
|
+
menu_name :string # When I'm a root level item, this is the menu I render underneath
|
34
|
+
menu_group :string # Used for design. Group by menu_group to display full dropdowns.
|
34
35
|
|
35
|
-
menu_title :string
|
36
|
-
menu_url :string
|
37
|
-
menu_position :integer
|
36
|
+
menu_title :string # Displayed on the menu instead of title
|
37
|
+
menu_url :string # Redirect to this url instead of the page url
|
38
|
+
menu_position :integer # Position in the menu
|
38
39
|
|
39
40
|
# Access
|
40
41
|
roles_mask :integer
|
@@ -59,7 +60,10 @@ module Effective
|
|
59
60
|
validates :layout, presence: true
|
60
61
|
validates :template, presence: true
|
61
62
|
|
62
|
-
validates :menu_name, if: -> { menu_root? && EffectivePages.menus.present? }
|
63
|
+
validates :menu_name, presence: true, if: -> { menu_root? && EffectivePages.menus.present? }
|
64
|
+
|
65
|
+
# Doesn't make sense for a top level item to have a menu group
|
66
|
+
validates :menu_group, absence: true, if: -> { menu_root? && EffectivePages.menus.present? }
|
63
67
|
|
64
68
|
# validates :menu_position, if: -> { menu? },
|
65
69
|
# presence: true, uniqueness: { scope: [:menu_name, :menu_parent_id] }
|
@@ -69,6 +73,7 @@ module Effective
|
|
69
73
|
scope :draft, -> { where(draft: true) }
|
70
74
|
scope :published, -> { where(draft: false) }
|
71
75
|
scope :sorted, -> { order(:title) }
|
76
|
+
|
72
77
|
scope :on_menu, -> { where(menu: true) }
|
73
78
|
scope :except_home, -> { where.not(title: 'Home') }
|
74
79
|
|
@@ -79,10 +84,23 @@ module Effective
|
|
79
84
|
scope :for_menu_root, -> (name) { for_menu(name).menu_deep.root_level }
|
80
85
|
scope :root_level, -> { where(menu_parent_id: nil) }
|
81
86
|
|
87
|
+
scope :menu_root_with_children, -> { menu_parents.where(menu_parent_id: nil) }
|
88
|
+
scope :menu_roots, -> { where(menu: true).where(menu_parent_id: nil) }
|
89
|
+
scope :menu_parents, -> { where(menu: true).where(id: Effective::Page.select('menu_parent_id')) }
|
90
|
+
scope :menu_children, -> { where(menu: true).where.not(menu_parent_id: nil) }
|
91
|
+
|
92
|
+
scope :for_sitemap, -> {
|
93
|
+
published.where(menu: false).or(published.where(menu: true).where.not(id: menu_root_with_children))
|
94
|
+
}
|
95
|
+
|
82
96
|
def to_s
|
83
97
|
title
|
84
98
|
end
|
85
99
|
|
100
|
+
def menu_to_s
|
101
|
+
(menu_title.presence || title)
|
102
|
+
end
|
103
|
+
|
86
104
|
# As per has_many_rich_texts
|
87
105
|
def body
|
88
106
|
rich_text_body
|
@@ -14,14 +14,15 @@
|
|
14
14
|
= f.hidden_field :menu_name, value: menus.first
|
15
15
|
|
16
16
|
= f.show_if :menu_root_level, false do
|
17
|
-
= f.select :menu_parent_id, admin_menu_parent_collection(f.object), required: true, grouped: true
|
17
|
+
= f.select :menu_parent_id, admin_menu_parent_collection(f.object), required: true, grouped: true, hint: 'Displayed on the menu underneath this parent'
|
18
|
+
= f.text_field :menu_group, hint: 'Displayed on the menu in this group or column'
|
18
19
|
|
19
20
|
= f.text_field :menu_title, hint: "Display this title on menus instead of full page title"
|
20
21
|
|
21
22
|
= f.text_field :menu_url, label: "Redirect to path or url instead of displaying page",
|
22
23
|
hint: "Must start with http(s):// or /"
|
23
24
|
|
24
|
-
= f
|
25
|
+
= effective_submit(f)
|
25
26
|
|
26
27
|
- if page.menu_parent.present?
|
27
28
|
.mb-4
|
@@ -25,21 +25,20 @@
|
|
25
25
|
|
26
26
|
= render partial: '/admin/pages/additional_fields', locals: { page: page, form: f, f: f }
|
27
27
|
|
28
|
-
- if f.object.persisted?
|
29
|
-
-
|
30
|
-
.
|
31
|
-
%
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
= render '/admin/pages/rich_text_areas', page: page, f: f
|
28
|
+
- if f.object.persisted? && f.object.menu_root_with_children?
|
29
|
+
.alert.alert-info.my-3.pl-0
|
30
|
+
%ul.mb-0
|
31
|
+
%li This page is a top level menu item with at least one child page
|
32
|
+
%li It will render on the menu as a dropdown link
|
33
|
+
%li Users will not be able to click access page via the menu
|
34
|
+
%li Visiting the page URL directly will return a 404 error
|
35
|
+
%li If you want this page to be accessible while also being a top level menu item, it needs to have no child pages
|
36
|
+
|
37
|
+
- if f.object.persisted? && !f.object.menu_root_with_children?
|
38
|
+
= render '/admin/pages/rich_text_areas', page: page, f: f
|
40
39
|
|
41
40
|
-# This is for duplicate
|
42
41
|
- if f.object.new_record? && f.object.rich_texts.present?
|
43
|
-
= render
|
42
|
+
= render '/admin/pages/rich_text_areas', page: page, f: f
|
44
43
|
|
45
44
|
= effective_submit(f)
|
@@ -10,13 +10,15 @@
|
|
10
10
|
- menu_children = page.menu_children
|
11
11
|
|
12
12
|
- if menu_children.blank?
|
13
|
-
= nav_link_to(
|
13
|
+
= nav_link_to(page.menu_to_s, (page.menu_url.presence || effective_pages.page_path(page)))
|
14
14
|
|
15
|
-
-
|
16
|
-
= nav_dropdown(page.
|
17
|
-
- menu_children.each do |
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
- if menu_children.present?
|
16
|
+
= nav_dropdown(page.menu_to_s, groups: true) do
|
17
|
+
- menu_children.group_by(&:menu_group).each do |menu_group, pages|
|
18
|
+
= nav_dropdown_group(menu_group) do
|
19
|
+
- pages.each do |page|
|
20
|
+
- next unless EffectiveResources.authorized?(self, :show, page)
|
21
|
+
- next if (page.authenticate_user || page.roles.present?) && current_user.blank?
|
22
|
+
- next if page.roles.present? && (current_user.roles & page.roles).blank?
|
21
23
|
|
22
|
-
|
24
|
+
= nav_link_to(page.menu_to_s, (page.menu_url.presence || effective_pages.page_path(page)))
|
@@ -5,9 +5,13 @@
|
|
5
5
|
- if menu_children.blank? && page.menu_parent&.menu_children.present?
|
6
6
|
- menu_children = page.menu_parent&.menu_children
|
7
7
|
|
8
|
-
- menu_children.each do |
|
9
|
-
-
|
10
|
-
|
11
|
-
- next if page.roles.present? && (current_user.roles & page.roles).blank?
|
8
|
+
- menu_children.group_by(&:menu_group).each do |menu_group, pages|
|
9
|
+
- if menu_group.present?
|
10
|
+
%h6= menu_group
|
12
11
|
|
13
|
-
|
12
|
+
- pages.each do |page|
|
13
|
+
- next unless EffectiveResources.authorized?(self, :show, page)
|
14
|
+
- next if (page.authenticate_user || page.roles.present?) && current_user.blank?
|
15
|
+
- next if page.roles.present? && (current_user.roles & page.roles).blank?
|
16
|
+
|
17
|
+
= nav_link_to(page.menu_to_s, (page.menu_url.presence || effective_pages.page_path(page)))
|
@@ -15,8 +15,12 @@ class CreateEffectivePages < ActiveRecord::Migration[4.2]
|
|
15
15
|
t.integer :roles_mask, default: 0
|
16
16
|
|
17
17
|
t.integer :menu_parent_id
|
18
|
+
|
18
19
|
t.boolean :menu, default: false
|
20
|
+
|
19
21
|
t.string :menu_name
|
22
|
+
t.string :menu_group
|
23
|
+
|
20
24
|
t.string :menu_title
|
21
25
|
t.string :menu_url
|
22
26
|
t.integer :menu_position
|
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: 3.
|
4
|
+
version: 3.2.0
|
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: 2022-10-
|
11
|
+
date: 2022-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|