effective_posts 1.1.9 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +4 -9
  4. data/app/controllers/admin/posts_controller.rb +10 -125
  5. data/app/controllers/effective/posts_controller.rb +20 -15
  6. data/app/datatables/effective_posts_datatable.rb +3 -1
  7. data/app/helpers/effective_posts_helper.rb +8 -27
  8. data/app/mailers/effective/posts_mailer.rb +2 -1
  9. data/app/models/effective/post.rb +45 -60
  10. data/app/views/admin/posts/_form.html.haml +8 -11
  11. data/app/views/admin/posts/excerpts.html.haml +2 -2
  12. data/app/views/effective/posts/_form.html.haml +2 -3
  13. data/app/views/effective/posts/_post.html.haml +1 -1
  14. data/app/views/effective/posts/_recent_posts.html.haml +1 -4
  15. data/app/views/effective/posts/_sidebar.html.haml +1 -2
  16. data/app/views/effective/posts/show.html.haml +1 -2
  17. data/app/views/effective/posts/submitted.html.haml +1 -1
  18. data/config/effective_posts.rb +2 -37
  19. data/config/routes.rb +7 -10
  20. data/db/migrate/01_create_effective_posts.rb.erb +1 -2
  21. data/lib/effective_posts.rb +14 -49
  22. data/lib/effective_posts/engine.rb +1 -1
  23. data/lib/effective_posts/version.rb +1 -1
  24. metadata +9 -60
  25. data/app/assets/javascripts/effective/snippets/read_more_divider.js.coffee +0 -22
  26. data/app/helpers/effective_truncate_html_helper.rb +0 -73
  27. data/app/models/effective/access_denied.rb +0 -17
  28. data/app/models/effective/datatables/posts.rb +0 -40
  29. data/app/models/effective/snippets/read_more_divider.rb +0 -11
  30. data/app/views/admin/posts/_actions.html.haml +0 -13
  31. data/app/views/admin/posts/edit.html.haml +0 -3
  32. data/app/views/admin/posts/new.html.haml +0 -3
  33. data/app/views/effective/snippets/_read_more_divider.html.haml +0 -9
@@ -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,40 +0,0 @@
1
- if Gem::Version.new(EffectiveDatatables::VERSION) < Gem::Version.new('3.0')
2
- module Effective
3
- module Datatables
4
- class Posts < Effective::Datatable
5
- datatable do
6
- default_order :published_at, :desc
7
-
8
- table_column :published_at
9
- table_column :id, visible: false
10
-
11
- table_column :title
12
- col :slug, visible: false
13
- table_column :category, filter: { type: :select, values: EffectivePosts.categories }
14
-
15
- if EffectivePosts.submissions_enabled
16
- table_column :approved, column: 'NOT(draft)', as: :boolean do |post|
17
- post.draft ? 'No' : 'Yes'
18
- end
19
-
20
- table_column :draft, visible: false
21
- else
22
- table_column :draft
23
- end
24
-
25
- table_column :start_at
26
- table_column :end_at, visible: false
27
- table_column :location, visible: false
28
-
29
- table_column :created_at, label: 'Submitted at', visible: false
30
-
31
- table_column :actions, sortable: false, filter: false, partial: '/admin/posts/actions'
32
- end
33
-
34
- def collection
35
- Effective::Post.all
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,11 +0,0 @@
1
- module Effective
2
- module Snippets
3
- class ReadMoreDivider < Snippet
4
- TOKEN = "<div style='display: none;'>READ_MORE_DIVIDER</div>"
5
-
6
- def snippet_attributes
7
- super + [:throwaway]
8
- end
9
- end
10
- end
11
- 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,3 +0,0 @@
1
- %h1.effective-admin-heading= @page_title
2
-
3
- = render partial: 'form', as: :post, object: @post
@@ -1,3 +0,0 @@
1
- %h1.effective-admin-heading= @page_title
2
-
3
- = render partial: 'form', as: :post, object: @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
-