effective_pages 3.5.0 → 3.7.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/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
|