effective_pages 3.5.0 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/app/controllers/admin/permalinks_controller.rb +15 -0
- data/app/controllers/admin/taggings_controller.rb +8 -0
- data/app/controllers/admin/tags_controller.rb +13 -0
- data/app/controllers/effective/permalinks_controller.rb +21 -0
- data/app/datatables/admin/effective_taggings_datatable.rb +18 -0
- data/app/datatables/admin/effective_tags_datatable.rb +16 -0
- data/app/datatables/effective_permalinks_datatable.rb +18 -0
- data/app/helpers/effective_alerts_helper.rb +1 -0
- data/app/helpers/effective_permalinks_helper.rb +20 -0
- data/app/helpers/effective_tags_helper.rb +4 -0
- data/app/models/concerns/acts_as_tagged.rb +46 -0
- data/app/models/effective/page.rb +42 -0
- data/app/models/effective/permalink.rb +53 -0
- data/app/models/effective/tag.rb +27 -0
- data/app/models/effective/tagging.rb +26 -0
- data/app/views/admin/pages/_form.html.haml +3 -0
- data/app/views/admin/pages/_form_tags.html.haml +4 -0
- data/app/views/admin/permalinks/_form.html.haml +7 -0
- data/app/views/admin/permalinks/_form_permalink.html.haml +8 -0
- data/app/views/admin/taggings/_form.html.haml +3 -0
- data/app/views/admin/taggings/_form_tagging.html.haml +4 -0
- data/app/views/admin/tags/_form.html.haml +7 -0
- data/app/views/admin/tags/_form_tag.html.haml +4 -0
- data/app/views/effective/tags/_fields.html.haml +1 -0
- data/config/effective_pages.rb +3 -0
- data/config/locales/effective_pages.en.yml +4 -0
- data/config/routes.rb +11 -6
- data/db/migrate/01_create_effective_pages.rb.erb +26 -0
- data/lib/effective_pages/engine.rb +11 -0
- data/lib/effective_pages/version.rb +1 -1
- data/lib/effective_pages.rb +1 -1
- data/lib/generators/effective_pages/install_generator.rb +1 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 955cae35489cf5133d4e988126070fb86de48849bb75d832b2acc43fc709d1b8
|
4
|
+
data.tar.gz: dc820dc28af2c81dbfaa4158ce1196209ec173dab3f16255121dab37e87586eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a5e86f7a5c65d13432dd2701b7366f5d1a0ab4a7032bc9cc81ba278fc57e5d2777e8b4f339d28a1a61a48ca996adb0473ccf6c54487c80e363600fd4fd4a4a7
|
7
|
+
data.tar.gz: e967b492ab869e6bd1f02f523317e30899dcffe14a1a767162af5d1d7bd8df195e306da9cabbc2cbfedb01b509b588c5e6bf16aad402d1aaa82b86fc2c82c8ee
|
data/README.md
CHANGED
@@ -211,6 +211,10 @@ if user.is?(:admin)
|
|
211
211
|
end
|
212
212
|
```
|
213
213
|
|
214
|
+
## Search
|
215
|
+
|
216
|
+
If you use `pg_search` then `Effective::Pages` will be also included on its `multisearch` by default, allowing you to search across all pages.
|
217
|
+
|
214
218
|
## License
|
215
219
|
|
216
220
|
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Admin
|
2
|
+
class PermalinksController < ApplicationController
|
3
|
+
before_action(:authenticate_user!) if defined?(Devise)
|
4
|
+
before_action { EffectiveResources.authorize!(self, :admin, :effective_pages) }
|
5
|
+
|
6
|
+
include Effective::CrudController
|
7
|
+
|
8
|
+
page_title 'Permalinks'
|
9
|
+
|
10
|
+
def permitted_params
|
11
|
+
params.require(:effective_permalink).permit!
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Admin
|
2
|
+
class TagsController < ApplicationController
|
3
|
+
before_action(:authenticate_user!) if defined?(Devise)
|
4
|
+
before_action { EffectiveResources.authorize!(self, :admin, :effective_pages) }
|
5
|
+
|
6
|
+
include Effective::CrudController
|
7
|
+
|
8
|
+
def permitted_params
|
9
|
+
params.require(:effective_tag).permit!
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Effective
|
2
|
+
class PermalinksController < ApplicationController
|
3
|
+
def redirect
|
4
|
+
@permalink = Effective::Permalink.find_by! slug: params[:slug]
|
5
|
+
|
6
|
+
authorize! :redirect, @permalink
|
7
|
+
|
8
|
+
redirect_to redirect_path_for(@permalink), allow_other_host: (@permalink.target == :url)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def redirect_path_for(permalink)
|
14
|
+
permalink.target == :attachment ? attachment_url(permalink.attachment) : permalink.url
|
15
|
+
end
|
16
|
+
|
17
|
+
def attachment_url(permalink)
|
18
|
+
Rails.application.routes.url_helpers.rails_blob_path(permalink, only_path: true)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Admin::EffectiveTaggingsDatatable < Effective::Datatable
|
2
|
+
|
3
|
+
datatable do
|
4
|
+
col :id, visible: false
|
5
|
+
|
6
|
+
col :tag
|
7
|
+
col :taggable
|
8
|
+
|
9
|
+
col :created_at
|
10
|
+
|
11
|
+
actions_col
|
12
|
+
end
|
13
|
+
|
14
|
+
collection do
|
15
|
+
Effective::Tagging.deep.all
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class EffectivePermalinksDatatable < Effective::Datatable
|
2
|
+
|
3
|
+
datatable do
|
4
|
+
col :id, visible: false
|
5
|
+
col :updated_at, visible: false
|
6
|
+
|
7
|
+
col :title
|
8
|
+
col :slug
|
9
|
+
col :summary
|
10
|
+
|
11
|
+
actions_col
|
12
|
+
end
|
13
|
+
|
14
|
+
collection do
|
15
|
+
Effective::Permalink.deep.all
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EffectivePermalinksHelper
|
4
|
+
|
5
|
+
def permalinks
|
6
|
+
@_effective_permalinks ||= Effective::Permalink.deep.order(:id)
|
7
|
+
end
|
8
|
+
|
9
|
+
def permalink_to(permalink_or_slug, options = {})
|
10
|
+
permalink =
|
11
|
+
if permalink_or_slug.kind_of?(String)
|
12
|
+
Effective::Permalink.find_by(slug: slug)
|
13
|
+
else
|
14
|
+
permalink_or_slug
|
15
|
+
end
|
16
|
+
|
17
|
+
link_to permalink, permalink.redirect_path, options
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ActsAsTagged
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
module Base
|
5
|
+
def acts_as_tagged(*options)
|
6
|
+
@acts_as_tagged = options || []
|
7
|
+
include ::ActsAsTagged
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
included do
|
12
|
+
has_many :taggings, as: :taggable, class_name: 'Effective::Tagging', dependent: :delete_all
|
13
|
+
|
14
|
+
has_many :tags, through: :taggings, class_name: 'Effective::Tag'
|
15
|
+
|
16
|
+
accepts_nested_attributes_for :tags, reject_if: :all_blank, allow_destroy: true
|
17
|
+
|
18
|
+
#
|
19
|
+
# Create or assign tags based on the input
|
20
|
+
#
|
21
|
+
# @param [Array<String, Integer>] input An array of tag names and/or tag ids, with a possible blank string
|
22
|
+
#
|
23
|
+
# @return [void]
|
24
|
+
#
|
25
|
+
def tags=(input)
|
26
|
+
input = (input - ['']).group_by { |value| value.gsub(/\D/, '').to_i > 0 }
|
27
|
+
|
28
|
+
ids = (input[true] || []).map(&:to_i)
|
29
|
+
names = input[false] || []
|
30
|
+
|
31
|
+
# Delete any existing Tags that aren't in this array
|
32
|
+
tags.each { |tag| tag.mark_for_destruction unless ids.include?(tag.id) }
|
33
|
+
|
34
|
+
# Create any new Tags
|
35
|
+
ids.each do |tag_id|
|
36
|
+
taggings.find { |tagging| tagging.tag_id == tag_id } || self.tags << Effective::Tag.where(id: tag_id).first!
|
37
|
+
end
|
38
|
+
|
39
|
+
names.each { |name| self.tags.build(name: name) }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module ClassMethods
|
44
|
+
def acts_as_tagged?; true; end
|
45
|
+
end
|
46
|
+
end
|
@@ -1,5 +1,38 @@
|
|
1
1
|
module Effective
|
2
2
|
class Page < ActiveRecord::Base
|
3
|
+
if defined?(PgSearch)
|
4
|
+
include PgSearch::Model
|
5
|
+
|
6
|
+
pg_search_scope :search,
|
7
|
+
against: [
|
8
|
+
:title,
|
9
|
+
:menu_title,
|
10
|
+
:meta_description,
|
11
|
+
:slug,
|
12
|
+
],
|
13
|
+
associated_against: {
|
14
|
+
rich_texts: [:body],
|
15
|
+
},
|
16
|
+
using: { tsearch: { highlight: true }, trigram: { word_similarity: true } }
|
17
|
+
|
18
|
+
multisearchable against: [
|
19
|
+
:title,
|
20
|
+
:menu_title,
|
21
|
+
:meta_description,
|
22
|
+
:slug,
|
23
|
+
],
|
24
|
+
associated_against: {
|
25
|
+
rich_texts: [:body],
|
26
|
+
},
|
27
|
+
using: {
|
28
|
+
trigram: {},
|
29
|
+
tsearch: {
|
30
|
+
highlight: true,
|
31
|
+
}
|
32
|
+
},
|
33
|
+
ranked_by: ":trigram" # Could rank by any column/expression, e.g.: (books.num_pages * :trigram) + (:tsearch / 2.0)
|
34
|
+
end
|
35
|
+
|
3
36
|
attr_accessor :current_user
|
4
37
|
attr_accessor :menu_root_level
|
5
38
|
|
@@ -13,6 +46,7 @@ module Effective
|
|
13
46
|
|
14
47
|
acts_as_role_restricted
|
15
48
|
acts_as_slugged
|
49
|
+
acts_as_tagged
|
16
50
|
has_many_rich_texts
|
17
51
|
|
18
52
|
log_changes if respond_to?(:log_changes)
|
@@ -76,6 +110,14 @@ module Effective
|
|
76
110
|
published.where(menu: false).or(published.where(menu: true).where.not(id: menu_root_with_children))
|
77
111
|
}
|
78
112
|
|
113
|
+
# Maybe change paginate to be an isolated function instead of a scope, so we can use it with PgSearch::Document when doing a whole app search?
|
114
|
+
scope :paginate, -> (page: nil, per_page: nil) {
|
115
|
+
page = (page || 1).to_i
|
116
|
+
offset = [(page - 1), 0].max * per_page
|
117
|
+
|
118
|
+
limit(per_page).offset(offset)
|
119
|
+
}
|
120
|
+
|
79
121
|
before_validation(if: -> { menu? && menu_position.blank? }) do
|
80
122
|
self.menu_position = (self.class.where(menu_parent: menu_parent).maximum(:menu_position) || -1) + 1
|
81
123
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Effective
|
2
|
+
class Permalink < ApplicationRecord
|
3
|
+
self.table_name = (EffectivePages.permalinks_table_name || :permalinks).to_s
|
4
|
+
|
5
|
+
has_one_attached :attachment
|
6
|
+
has_one_purgable :attachment
|
7
|
+
|
8
|
+
acts_as_slugged
|
9
|
+
|
10
|
+
log_changes if respond_to?(:log_changes)
|
11
|
+
|
12
|
+
scope :deep, -> { with_attached_attachment }
|
13
|
+
|
14
|
+
effective_resource do
|
15
|
+
title :string
|
16
|
+
slug :string
|
17
|
+
|
18
|
+
url :string
|
19
|
+
|
20
|
+
summary :text
|
21
|
+
|
22
|
+
timestamps
|
23
|
+
end
|
24
|
+
|
25
|
+
validate :attachment_and_url_cannot_both_be_present
|
26
|
+
|
27
|
+
validates :title, presence: true
|
28
|
+
validates :attachment, presence: true, if: -> { url.blank? }
|
29
|
+
validates :url, presence: true, if: -> { attachment.blank? }, url: true
|
30
|
+
|
31
|
+
public
|
32
|
+
|
33
|
+
def to_s
|
34
|
+
title.presence || model_name.human
|
35
|
+
end
|
36
|
+
|
37
|
+
def redirect_path
|
38
|
+
"/permalinks/#{slug}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def target
|
42
|
+
url.present? ? :url : :attachment
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def attachment_and_url_cannot_both_be_present
|
48
|
+
if url.present? && (attachment.attached? && !attachment.marked_for_destruction?)
|
49
|
+
self.errors.add(:base, 'Attachment and URL cannot both be present')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Effective
|
2
|
+
class Tag < ApplicationRecord
|
3
|
+
self.table_name = (EffectivePages.tags_table_name || :tags).to_s
|
4
|
+
|
5
|
+
log_changes if respond_to?(:log_changes)
|
6
|
+
|
7
|
+
has_many :taggings, class_name: 'Effective::Tagging', dependent: :delete_all
|
8
|
+
|
9
|
+
scope :deep, -> { all }
|
10
|
+
scope :sorted, -> { order(:name) }
|
11
|
+
|
12
|
+
effective_resource do
|
13
|
+
name :string
|
14
|
+
|
15
|
+
timestamps
|
16
|
+
end
|
17
|
+
|
18
|
+
validates :name, presence: true
|
19
|
+
validates :name, uniqueness: true
|
20
|
+
|
21
|
+
public
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
name.presence || model_name.human
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Effective
|
2
|
+
class Tagging < ApplicationRecord
|
3
|
+
self.table_name = (EffectivePages.taggings_table_name || :taggings).to_s
|
4
|
+
|
5
|
+
belongs_to :tag, class_name: 'Effective::Tag'
|
6
|
+
belongs_to :taggable, polymorphic: true
|
7
|
+
|
8
|
+
scope :deep, -> { all }
|
9
|
+
|
10
|
+
effective_resource do
|
11
|
+
tag_id :integer
|
12
|
+
taggable_id :integer
|
13
|
+
taggable_type :string
|
14
|
+
|
15
|
+
timestamps
|
16
|
+
end
|
17
|
+
|
18
|
+
validates :tag_id, uniqueness: { scope: [:taggable_type, :taggable_id] }
|
19
|
+
|
20
|
+
public
|
21
|
+
|
22
|
+
def to_s
|
23
|
+
name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
= effective_form_with(model: [:admin, permalink], engine: true) do |f|
|
2
|
+
= f.text_field :title, required: true, hint: 'Title of the permalink to be displayed'
|
3
|
+
= f.text_field :slug, required: true, hint: 'Slug for link of the permalink'
|
4
|
+
= f.text_field :summary, required: true, hint: 'Summary explanation of the permalink not displayed'
|
5
|
+
= f.url_field :url, required: false, hint: 'The link if redirecting to a website or specific page'
|
6
|
+
= f.file_field :attachment, required: false, hint: 'The attachment of the permalink if redirecting to a document, image or other file'
|
7
|
+
|
8
|
+
= effective_submit(f)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.select :tag_ids, Effective::Tag.all, tags: true, hint: 'Select existing tags or type and hit Enter to create a new tag'
|
data/config/effective_pages.rb
CHANGED
@@ -4,6 +4,9 @@ EffectivePages.setup do |config|
|
|
4
4
|
config.page_banners_table_name = :page_banners
|
5
5
|
config.carousel_items_table_name = :carousel_items
|
6
6
|
config.alerts_table_name = :alerts
|
7
|
+
config.permalinks_table_name = :permalinks
|
8
|
+
config.tags_table_name = :tags
|
9
|
+
config.taggings_table_name = :taggings
|
7
10
|
|
8
11
|
# The menu names a page can belong to
|
9
12
|
config.menus = [:main, :footer]
|
data/config/routes.rb
CHANGED
@@ -2,15 +2,20 @@
|
|
2
2
|
|
3
3
|
EffectivePages::Engine.routes.draw do
|
4
4
|
namespace :admin do
|
5
|
-
resources :pages,
|
6
|
-
resources :page_sections,
|
7
|
-
resources :page_banners,
|
8
|
-
resources :menus,
|
9
|
-
resources :carousel_items,
|
10
|
-
resources :alerts,
|
5
|
+
resources :pages, except: [:show]
|
6
|
+
resources :page_sections, only: [:index, :edit, :update]
|
7
|
+
resources :page_banners, except: [:show]
|
8
|
+
resources :menus, only: [:index]
|
9
|
+
resources :carousel_items, except: [:show]
|
10
|
+
resources :alerts, except: [:show]
|
11
|
+
resources :permalinks, except: [:show]
|
12
|
+
resources :tags, except: [:show]
|
13
|
+
resources :taggings, only: [:index]
|
11
14
|
end
|
12
15
|
|
13
16
|
scope module: 'effective' do
|
17
|
+
get '/permalinks/:slug', to: 'permalinks#redirect', as: :permalink_redirect
|
18
|
+
|
14
19
|
match '*id', to: 'pages#show', via: :get, as: :page, constraints: lambda { |req|
|
15
20
|
Effective::Page.find_by_slug_or_id(req.path_parameters[:id] || '/').present?
|
16
21
|
}
|
@@ -81,6 +81,29 @@ class CreateEffectivePages < ActiveRecord::Migration[4.2]
|
|
81
81
|
t.timestamps
|
82
82
|
end
|
83
83
|
|
84
|
+
create_table <%= @permalinks_table_name %>, if_not_exists: true do |t|
|
85
|
+
t.string :title
|
86
|
+
t.string :slug
|
87
|
+
t.string :url
|
88
|
+
t.text :summary
|
89
|
+
|
90
|
+
t.timestamps
|
91
|
+
end
|
92
|
+
|
93
|
+
create_table <%= @tags_table_name %>, if_not_exists: true do |t|
|
94
|
+
t.string :name
|
95
|
+
|
96
|
+
t.timestamps
|
97
|
+
end
|
98
|
+
|
99
|
+
create_table <%= @taggings_table_name %>, if_not_exists: true do |t|
|
100
|
+
t.integer :tag_id
|
101
|
+
t.integer :taggable_id
|
102
|
+
t.string :taggable_type
|
103
|
+
|
104
|
+
t.timestamps
|
105
|
+
end
|
106
|
+
|
84
107
|
end
|
85
108
|
|
86
109
|
def self.down
|
@@ -89,6 +112,9 @@ class CreateEffectivePages < ActiveRecord::Migration[4.2]
|
|
89
112
|
drop_table <%= @page_sections_table_name %>
|
90
113
|
drop_table <%= @carousel_items_table_name %>
|
91
114
|
drop_table <%= @alerts_table_name %>
|
115
|
+
drop_table <%= @permalinks_table_name %>
|
116
|
+
drop_table <%= @tags_table_name %>
|
117
|
+
drop_table <%= @taggings_table_name %>
|
92
118
|
end
|
93
119
|
|
94
120
|
end
|
@@ -2,6 +2,15 @@ module EffectivePages
|
|
2
2
|
class Engine < ::Rails::Engine
|
3
3
|
engine_name 'effective_pages'
|
4
4
|
|
5
|
+
# Include acts_as_tagged concern and allow any ActiveRecord object to call it
|
6
|
+
initializer 'effective_pages.active_record' do |app|
|
7
|
+
app.config.to_prepare do
|
8
|
+
ActiveSupport.on_load :active_record do
|
9
|
+
ActiveRecord::Base.extend(ActsAsTagged::Base)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
5
14
|
# Include Helpers to base application
|
6
15
|
initializer 'effective_pages.action_controller' do |app|
|
7
16
|
app.config.to_prepare do
|
@@ -12,6 +21,8 @@ module EffectivePages
|
|
12
21
|
helper EffectivePageBannersHelper
|
13
22
|
helper EffectiveMenusHelper
|
14
23
|
helper EffectiveAlertsHelper
|
24
|
+
helper EffectivePermalinksHelper
|
25
|
+
helper EffectiveTagsHelper
|
15
26
|
end
|
16
27
|
end
|
17
28
|
end
|
data/lib/effective_pages.rb
CHANGED
@@ -7,7 +7,7 @@ require 'effective_pages/version'
|
|
7
7
|
module EffectivePages
|
8
8
|
def self.config_keys
|
9
9
|
[
|
10
|
-
:pages_table_name, :page_sections_table_name, :page_banners_table_name, :carousel_items_table_name, :alerts_table_name,
|
10
|
+
:pages_table_name, :page_sections_table_name, :page_banners_table_name, :carousel_items_table_name, :alerts_table_name, :permalinks_table_name, :tags_table_name, :taggings_table_name,
|
11
11
|
:pages_path, :excluded_pages, :layouts_path, :excluded_layouts,
|
12
12
|
:site_og_image, :site_og_image_width, :site_og_image_height,
|
13
13
|
:site_title, :site_title_suffix, :fallback_meta_description, :google_analytics_code,
|
@@ -25,6 +25,7 @@ module EffectivePages
|
|
25
25
|
@page_banners_table_name = ':' + EffectivePages.page_banners_table_name.to_s
|
26
26
|
@carousel_items_table_name = ':' + EffectivePages.carousel_items_table_name.to_s
|
27
27
|
@alerts_table_name = ':' + EffectivePages.alerts_table_name.to_s
|
28
|
+
@permalinks_table_name = ':' + EffectivePages.permalinks_table_name.to_s
|
28
29
|
|
29
30
|
migration_template ('../' * 3) + 'db/migrate/01_create_effective_pages.rb.erb', 'db/migrate/create_effective_pages.rb'
|
30
31
|
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: 3.
|
4
|
+
version: 3.7.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: 2023-06-
|
11
|
+
date: 2023-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -84,24 +84,37 @@ files:
|
|
84
84
|
- app/controllers/admin/page_banners_controller.rb
|
85
85
|
- app/controllers/admin/page_sections_controller.rb
|
86
86
|
- app/controllers/admin/pages_controller.rb
|
87
|
+
- app/controllers/admin/permalinks_controller.rb
|
88
|
+
- app/controllers/admin/taggings_controller.rb
|
89
|
+
- app/controllers/admin/tags_controller.rb
|
87
90
|
- app/controllers/effective/pages_controller.rb
|
91
|
+
- app/controllers/effective/permalinks_controller.rb
|
92
|
+
- app/datatables/admin/effective_taggings_datatable.rb
|
93
|
+
- app/datatables/admin/effective_tags_datatable.rb
|
88
94
|
- app/datatables/effective_alerts_datatable.rb
|
89
95
|
- app/datatables/effective_carousel_items_datatable.rb
|
90
96
|
- app/datatables/effective_page_banners_datatable.rb
|
91
97
|
- app/datatables/effective_page_sections_datatable.rb
|
92
98
|
- app/datatables/effective_pages_datatable.rb
|
93
99
|
- app/datatables/effective_pages_menu_datatable.rb
|
100
|
+
- app/datatables/effective_permalinks_datatable.rb
|
94
101
|
- app/helpers/effective_alerts_helper.rb
|
95
102
|
- app/helpers/effective_carousels_helper.rb
|
96
103
|
- app/helpers/effective_menus_helper.rb
|
97
104
|
- app/helpers/effective_page_banners_helper.rb
|
98
105
|
- app/helpers/effective_page_sections_helper.rb
|
99
106
|
- app/helpers/effective_pages_helper.rb
|
107
|
+
- app/helpers/effective_permalinks_helper.rb
|
108
|
+
- app/helpers/effective_tags_helper.rb
|
109
|
+
- app/models/concerns/acts_as_tagged.rb
|
100
110
|
- app/models/effective/alert.rb
|
101
111
|
- app/models/effective/carousel_item.rb
|
102
112
|
- app/models/effective/page.rb
|
103
113
|
- app/models/effective/page_banner.rb
|
104
114
|
- app/models/effective/page_section.rb
|
115
|
+
- app/models/effective/permalink.rb
|
116
|
+
- app/models/effective/tag.rb
|
117
|
+
- app/models/effective/tagging.rb
|
105
118
|
- app/views/admin/alerts/_form.html.haml
|
106
119
|
- app/views/admin/alerts/_form_alert.html.haml
|
107
120
|
- app/views/admin/carousel_items/_form.html.haml
|
@@ -117,11 +130,19 @@ files:
|
|
117
130
|
- app/views/admin/pages/_form_access.html.haml
|
118
131
|
- app/views/admin/pages/_form_menu.html.haml
|
119
132
|
- app/views/admin/pages/_form_page.html.haml
|
133
|
+
- app/views/admin/pages/_form_tags.html.haml
|
120
134
|
- app/views/admin/pages/_rich_text_areas.html.haml
|
135
|
+
- app/views/admin/permalinks/_form.html.haml
|
136
|
+
- app/views/admin/permalinks/_form_permalink.html.haml
|
137
|
+
- app/views/admin/taggings/_form.html.haml
|
138
|
+
- app/views/admin/taggings/_form_tagging.html.haml
|
139
|
+
- app/views/admin/tags/_form.html.haml
|
140
|
+
- app/views/admin/tags/_form_tag.html.haml
|
121
141
|
- app/views/effective/alerts/_alert.html.haml
|
122
142
|
- app/views/effective/carousels/_carousel.html.haml
|
123
143
|
- app/views/effective/pages/_menu.html.haml
|
124
144
|
- app/views/effective/pages/_page_menu.html.haml
|
145
|
+
- app/views/effective/tags/_fields.html.haml
|
125
146
|
- app/views/layouts/_google_analytics.html.erb
|
126
147
|
- config/effective_pages.rb
|
127
148
|
- config/locales/effective_pages.en.yml
|