effective_posts 1.1.11 → 2.0.3
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 +5 -58
- data/app/controllers/admin/posts_controller.rb +10 -125
- data/app/controllers/effective/posts_controller.rb +20 -15
- data/app/datatables/effective_posts_datatable.rb +3 -1
- data/app/helpers/effective_posts_helper.rb +12 -31
- data/app/mailers/effective/posts_mailer.rb +2 -1
- data/app/models/effective/post.rb +46 -61
- data/app/views/admin/posts/_form.html.haml +8 -11
- data/app/views/admin/posts/excerpts.html.haml +2 -2
- data/app/views/effective/posts/_form.html.haml +2 -3
- data/app/views/effective/posts/_post.html.haml +1 -1
- data/app/views/effective/posts/_sidebar.html.haml +1 -2
- data/app/views/effective/posts/show.html.haml +1 -2
- data/app/views/effective/posts/submitted.html.haml +1 -1
- data/config/effective_posts.rb +2 -37
- data/config/routes.rb +22 -28
- data/db/migrate/01_create_effective_posts.rb.erb +1 -2
- data/lib/effective_posts.rb +14 -50
- data/lib/effective_posts/engine.rb +1 -1
- data/lib/effective_posts/version.rb +1 -1
- metadata +5 -55
- data/app/assets/javascripts/effective/snippets/read_more_divider.js.coffee +0 -22
- data/app/helpers/effective_truncate_html_helper.rb +0 -73
- data/app/models/effective/access_denied.rb +0 -17
- data/app/models/effective/snippets/read_more_divider.rb +0 -11
- data/app/views/admin/posts/_actions.html.haml +0 -13
- data/app/views/admin/posts/edit.html.haml +0 -3
- data/app/views/admin/posts/new.html.haml +0 -3
- data/app/views/effective/snippets/_read_more_divider.html.haml +0 -9
|
@@ -10,7 +10,7 @@ module EffectivePosts
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
# Set up our default configuration options.
|
|
13
|
-
initializer "effective_posts.defaults", :
|
|
13
|
+
initializer "effective_posts.defaults", before: :load_config_initializers do |app|
|
|
14
14
|
# Set up our defaults, as per our initializer template
|
|
15
15
|
eval File.read("#{config.root}/config/effective_posts.rb")
|
|
16
16
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: effective_posts
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.3
|
|
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-05 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: sass
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -38,20 +38,6 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: nokogiri
|
|
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_bootstrap
|
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,7 +53,7 @@ dependencies:
|
|
|
67
53
|
- !ruby/object:Gem::Version
|
|
68
54
|
version: '0'
|
|
69
55
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
56
|
+
name: effective_resources
|
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
|
72
58
|
requirements:
|
|
73
59
|
- - ">="
|
|
@@ -82,34 +68,6 @@ dependencies:
|
|
|
82
68
|
version: '0'
|
|
83
69
|
- !ruby/object:Gem::Dependency
|
|
84
70
|
name: effective_datatables
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 4.0.0
|
|
90
|
-
type: :runtime
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 4.0.0
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: effective_regions
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - ">="
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0'
|
|
104
|
-
type: :runtime
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - ">="
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: effective_resources
|
|
113
71
|
requirement: !ruby/object:Gem::Requirement
|
|
114
72
|
requirements:
|
|
115
73
|
- - ">="
|
|
@@ -132,7 +90,6 @@ extra_rdoc_files: []
|
|
|
132
90
|
files:
|
|
133
91
|
- MIT-LICENSE
|
|
134
92
|
- README.md
|
|
135
|
-
- app/assets/javascripts/effective/snippets/read_more_divider.js.coffee
|
|
136
93
|
- app/assets/javascripts/effective_posts.js
|
|
137
94
|
- app/assets/javascripts/effective_posts/additional_fields.js.coffee
|
|
138
95
|
- app/assets/stylesheets/effective_posts.scss
|
|
@@ -140,18 +97,12 @@ files:
|
|
|
140
97
|
- app/controllers/effective/posts_controller.rb
|
|
141
98
|
- app/datatables/effective_posts_datatable.rb
|
|
142
99
|
- app/helpers/effective_posts_helper.rb
|
|
143
|
-
- app/helpers/effective_truncate_html_helper.rb
|
|
144
100
|
- app/mailers/effective/posts_mailer.rb
|
|
145
|
-
- app/models/effective/access_denied.rb
|
|
146
101
|
- app/models/effective/post.rb
|
|
147
|
-
- app/models/effective/snippets/read_more_divider.rb
|
|
148
|
-
- app/views/admin/posts/_actions.html.haml
|
|
149
102
|
- app/views/admin/posts/_form.html.haml
|
|
150
103
|
- app/views/admin/posts/_roles.html.haml
|
|
151
|
-
- app/views/admin/posts/edit.html.haml
|
|
152
104
|
- app/views/admin/posts/excerpts.html.haml
|
|
153
105
|
- app/views/admin/posts/index.html.haml
|
|
154
|
-
- app/views/admin/posts/new.html.haml
|
|
155
106
|
- app/views/effective/posts/_additional_fields.html.haml
|
|
156
107
|
- app/views/effective/posts/_categories.html.haml
|
|
157
108
|
- app/views/effective/posts/_event.html.haml
|
|
@@ -168,7 +119,6 @@ files:
|
|
|
168
119
|
- app/views/effective/posts/show.html.haml
|
|
169
120
|
- app/views/effective/posts/submitted.html.haml
|
|
170
121
|
- app/views/effective/posts_mailer/post_submitted_to_admin.html.haml
|
|
171
|
-
- app/views/effective/snippets/_read_more_divider.html.haml
|
|
172
122
|
- app/views/layouts/effective_posts_mailer_layout.html.haml
|
|
173
123
|
- config/effective_posts.rb
|
|
174
124
|
- config/routes.rb
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
CKEDITOR.dialog.add 'read_more_divider', (editor) -> # Must match the class name of the snippet
|
|
2
|
-
title: 'Read more divider',
|
|
3
|
-
minWidth: 200,
|
|
4
|
-
minHeight: 100,
|
|
5
|
-
contents: [
|
|
6
|
-
{
|
|
7
|
-
id: 'read_more_info', # Just an html id, doesn't really matter what is here
|
|
8
|
-
elements: [
|
|
9
|
-
{
|
|
10
|
-
id: 'throwaway'
|
|
11
|
-
type: 'html',
|
|
12
|
-
html: 'Insert a read more divider to separate excerpt content from the full content.',
|
|
13
|
-
setup: (widget) -> this.setValue(widget.data.throwaway)
|
|
14
|
-
commit: (widget) -> widget.setData('throwaway', 'throwaway')
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
type: 'html',
|
|
18
|
-
html: 'Anything above the read more divider will be treated as excerpt content<br>and everything below the divider will also be included in the full content.'
|
|
19
|
-
}
|
|
20
|
-
]
|
|
21
|
-
}
|
|
22
|
-
]
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
module EffectiveTruncateHtmlHelper
|
|
2
|
-
# Truncates HTML or text to a certain inner_text character limit.
|
|
3
|
-
#
|
|
4
|
-
# If given HTML, the underlying markup may be much longer than length, but the displayed text
|
|
5
|
-
# will be no longer than (length + omission) characters.
|
|
6
|
-
def truncate_html(text, length_or_content = 200, omission = '...')
|
|
7
|
-
doc = Nokogiri::HTML::DocumentFragment.parse(text)
|
|
8
|
-
|
|
9
|
-
if length_or_content.kind_of?(String)
|
|
10
|
-
content = (Nokogiri::HTML::DocumentFragment.parse(length_or_content).children.first.inner_text rescue length_or_content)
|
|
11
|
-
doc.tap { |doc| _truncate_node_to_content(doc, content, omission) }.inner_html
|
|
12
|
-
elsif length_or_content.kind_of?(Integer)
|
|
13
|
-
doc.tap { |doc| _truncate_node_to_length(doc, length_or_content, omission) }.inner_html
|
|
14
|
-
else
|
|
15
|
-
raise 'Unsupported datatype passed to second argument of truncate_html. Expecting integer or string.'
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def _truncate_node_to_content(node, content, omission, seen = false)
|
|
20
|
-
if seen == true
|
|
21
|
-
node.remove
|
|
22
|
-
elsif node.children.blank?
|
|
23
|
-
index = node.content.index(content)
|
|
24
|
-
|
|
25
|
-
if index.present?
|
|
26
|
-
if node.parent.try(:content) == content # If my parent node just has my text in it, remove parent node too
|
|
27
|
-
node.parent.remove
|
|
28
|
-
elsif index == 0
|
|
29
|
-
node.remove
|
|
30
|
-
else
|
|
31
|
-
node.content = truncate(node.content, length: index+omission.to_s.length, separator: ' ', omission: omission)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
seen = true
|
|
35
|
-
end
|
|
36
|
-
else
|
|
37
|
-
node.children.each { |child| seen = _truncate_node_to_content(child, content, omission, seen) }
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
seen
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def _truncate_node_to_length(node, length, omission)
|
|
45
|
-
if node.inner_text.length <= length
|
|
46
|
-
# Do nothing, we're already reached base case
|
|
47
|
-
elsif node.name == 'a'
|
|
48
|
-
node.remove # I don't want to truncate anything in a link
|
|
49
|
-
elsif node.children.blank?
|
|
50
|
-
# I need to truncate myself, and I'm certainly a text node
|
|
51
|
-
if node.text?
|
|
52
|
-
node.content = truncate(node.content, length: length+omission.to_s.length, separator: ' ', omission: omission)
|
|
53
|
-
else
|
|
54
|
-
node.remove
|
|
55
|
-
end
|
|
56
|
-
else # Go through all the children, and delete anything after the length has been reached
|
|
57
|
-
child_length = 0
|
|
58
|
-
|
|
59
|
-
node.children.each do |child|
|
|
60
|
-
child_length > length ? (child.remove) : (child_length += child.inner_text.length)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# We have now removed all nodes after length, but the last node is longer than our length
|
|
64
|
-
# child_length is the inner_text length of all included nodes
|
|
65
|
-
# And we only have to truncate the last child to get under length
|
|
66
|
-
|
|
67
|
-
child = node.children.last
|
|
68
|
-
child_max_length = length - (child_length - child.inner_text.length)
|
|
69
|
-
|
|
70
|
-
_truncate_node_to_length(child, child_max_length, omission)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
unless defined?(Effective::AccessDenied)
|
|
2
|
-
module Effective
|
|
3
|
-
class AccessDenied < StandardError
|
|
4
|
-
attr_reader :action, :subject
|
|
5
|
-
|
|
6
|
-
def initialize(message = nil, action = nil, subject = nil)
|
|
7
|
-
@message = message
|
|
8
|
-
@action = action
|
|
9
|
-
@subject = subject
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def to_s
|
|
13
|
-
@message || I18n.t(:'unauthorized.default', :default => 'Access Denied')
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
= dropdown(variation: :dropleft) do
|
|
2
|
-
- if datatable.admin_namespace?
|
|
3
|
-
- if EffectivePosts.submissions_enabled && EffectivePosts.submissions_require_approval && !post.approved?
|
|
4
|
-
= dropdown_link_to 'Approve', effective_posts.admin_approve_post_path(post)
|
|
5
|
-
|
|
6
|
-
= dropdown_link_to 'Edit', effective_posts.edit_admin_post_path(post)
|
|
7
|
-
- if EffectivePosts.use_fullscreen_editor
|
|
8
|
-
= dropdown_link_to 'Edit Content', effective_post_path(post, edit: true), title: 'Edit Content', 'data-no-turbolink': true, 'data-turbolinks': false, target: '_blank'
|
|
9
|
-
|
|
10
|
-
= dropdown_link_to 'View', effective_post_path(post), target: '_blank'
|
|
11
|
-
|
|
12
|
-
= dropdown_link_to "Delete", effective_posts.admin_post_path(post),
|
|
13
|
-
data: { method: :delete, confirm: "Really delete #{post}?" }
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
- if effectively_editting?
|
|
2
|
-
%p.show-block-adjust{:style => 'border-top: 2px dashed black; text-align: center;', :title => 'anything above this line will be treated as excerpt content'}
|
|
3
|
-
%span{:style => 'background: #ddd; display: inline-block; padding: 0px 6px 4px 6px; border-radius: 0px 0px 10px 10px;'}
|
|
4
|
-
Read more...
|
|
5
|
-
- else
|
|
6
|
-
= Effective::Snippets::ReadMoreDivider::TOKEN.html_safe
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|