pageflow 16.0.0 → 16.1.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/CHANGELOG.md +210 -33
- data/README.md +0 -1
- data/Rakefile +1 -1
- data/admins/pageflow/entry.rb +0 -1
- data/admins/pageflow/sites.rb +3 -0
- data/app/assets/javascripts/pageflow/dist/ui.js +298 -72
- data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +10 -0
- data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +6 -1
- data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -0
- data/app/assets/stylesheets/pageflow/editor/help.scss +3 -3
- data/app/assets/stylesheets/pageflow/editor/info_box.scss +7 -0
- data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +0 -5
- data/app/assets/stylesheets/pageflow/ui/forms.scss +1 -1
- data/app/controllers/pageflow/chapters_controller.rb +2 -2
- data/app/controllers/pageflow/editor/files_controller.rb +1 -1
- data/app/controllers/pageflow/entries_controller.rb +10 -0
- data/app/controllers/pageflow/feeds_controller.rb +18 -0
- data/app/controllers/pageflow/pages_controller.rb +2 -2
- data/app/controllers/pageflow/sitemaps_controller.rb +15 -0
- data/app/controllers/pageflow/storylines_controller.rb +2 -2
- data/app/helpers/pageflow/entries_helper.rb +2 -1
- data/app/helpers/pageflow/feeds_helper.rb +66 -0
- data/app/helpers/pageflow/page_types_helper.rb +9 -9
- data/app/inputs/pageflow_permalink_input.rb +15 -3
- data/app/models/concerns/pageflow/reusable_file.rb +3 -3
- data/app/models/pageflow/account.rb +8 -0
- data/app/models/pageflow/audio_file_url_templates.rb +2 -1
- data/app/models/pageflow/draft_entry.rb +1 -1
- data/app/models/pageflow/entries_feed.rb +32 -0
- data/app/models/pageflow/image_file.rb +14 -3
- data/app/models/pageflow/membership.rb +3 -2
- data/app/models/pageflow/other_file.rb +5 -0
- data/app/models/pageflow/other_file_url_templates.rb +16 -0
- data/app/models/pageflow/published_entry.rb +6 -0
- data/app/models/pageflow/revision.rb +4 -0
- data/app/models/pageflow/site.rb +8 -0
- data/app/models/pageflow/sitemaps.rb +13 -0
- data/app/models/pageflow/used_file.rb +2 -2
- data/app/models/pageflow/video_file_url_templates.rb +3 -1
- data/app/models/pageflow/widget.rb +9 -1
- data/app/views/admin/entries/_permalink_inputs.html.erb +1 -2
- data/app/views/admin/sites/_attributes_table.html.arb +3 -0
- data/app/views/admin/sites/_fields.html.erb +6 -0
- data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
- data/app/views/components/pageflow/admin/sites_tab.rb +3 -0
- data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
- data/app/views/pageflow/feeds/index.atom.builder +20 -0
- data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
- data/config/initializers/features.rb +1 -0
- data/config/initializers/paperclip.rb +4 -0
- data/config/locales/de.yml +27 -6
- data/config/locales/en.yml +30 -4
- data/config/routes.rb +3 -0
- data/config/spring.rb +1 -1
- data/db/migrate/20230120092923_create_other_files.rb +23 -0
- data/db/migrate/20230323115745_add_feeds_enabled_to_sites.rb +5 -0
- data/db/migrate/20230323154323_add_sitemap_enabled_to_sites.rb +5 -0
- data/db/migrate/20230331103823_add_title_to_sites.rb +5 -0
- data/db/migrate/20230405103612_add_custom_feed_url_to_sites.rb +5 -0
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +445 -109
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +26 -3
- data/entry_types/paged/app/controllers/pageflow_paged/editor/entries_controller.rb +0 -2
- data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
- data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
- data/entry_types/paged/config/initializers/features.rb +0 -1
- data/entry_types/paged/lib/pageflow_paged/engine.rb +17 -1
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +3 -4
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +13 -6
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +11 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +42 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +31 -10
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +9 -1
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +3 -1
- data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +23 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +6 -1
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -5
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +10 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +44 -41
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder +16 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +3 -0
- data/entry_types/scrolled/config/initializers/features.rb +5 -0
- data/entry_types/scrolled/config/locales/consent_widget.de.yml +4 -0
- data/entry_types/scrolled/config/locales/consent_widget.en.yml +4 -0
- data/entry_types/scrolled/config/locales/de.yml +189 -8
- data/entry_types/scrolled/config/locales/en.yml +207 -2
- data/entry_types/scrolled/config/routes.rb +4 -0
- data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +97 -5
- data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +96 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +38 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +17 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +6 -1
- data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +1 -2
- data/entry_types/scrolled/package/contentElements-editor.js +307 -22
- data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
- data/entry_types/scrolled/package/contentElements-frontend.js +690 -71
- data/entry_types/scrolled/package/editor.js +616 -220
- data/entry_types/scrolled/package/frontend/{EditableInlineText.module-14c7b097.js → EditableInlineText.module-fa9e3aff.js} +1669 -1674
- data/entry_types/scrolled/package/frontend/PhonePlatformContext-10a1d600.js +32 -0
- data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-727cce0d.js +107 -0
- data/entry_types/scrolled/package/frontend/Viewer-169e14ca.js +154 -0
- data/entry_types/scrolled/package/frontend/{Viewer-b6becc57.js → Viewer-ee1aa590.js} +32 -161
- data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
- data/entry_types/scrolled/package/frontend/{components-b3160dd7.js → components-4a09bfa3.js} +185 -45
- data/entry_types/scrolled/package/frontend/{PhonePlatformContext-f6093cc6.js → i18n-ddd92820.js} +149 -107
- data/entry_types/scrolled/package/frontend/index-02378634.js +118 -0
- data/entry_types/scrolled/package/frontend/index.css +1 -1
- data/entry_types/scrolled/package/frontend/index.js +206 -54
- data/entry_types/scrolled/package/frontend/useContentElementEditorState-63045393.js +52 -0
- data/entry_types/scrolled/package/package.json +2 -1
- data/entry_types/scrolled/package/testHelpers.js +9 -2
- data/entry_types/scrolled/package/values/colors.module.css +15 -0
- data/entry_types/scrolled/package/widgets/consentBar.css +1 -0
- data/entry_types/scrolled/package/widgets/consentBar.js +426 -0
- data/entry_types/scrolled/package/widgets/defaultNavigation.css +1 -1
- data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
- data/lib/pageflow/ability_mixin.rb +5 -5
- data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
- data/lib/pageflow/built_in_file_type.rb +7 -0
- data/lib/pageflow/configuration.rb +21 -0
- data/lib/pageflow/engine.rb +60 -39
- data/lib/pageflow/entry_export_import/revision_serialization.rb +1 -1
- data/lib/pageflow/file_type.rb +2 -2
- data/lib/pageflow/global_config_api.rb +2 -2
- data/lib/pageflow/nested_revision_component.rb +23 -5
- data/lib/pageflow/rails_version.rb +19 -0
- data/lib/pageflow/seeds.rb +10 -7
- data/lib/pageflow/version.rb +1 -1
- data/lib/pageflow/widget_types.rb +4 -0
- data/package/config/webpack5.js +14 -0
- data/package/editor.js +141 -30
- data/package/frontend.js +26 -2
- data/package/testHelpers.js +1 -1
- data/package/ui.js +296 -71
- data/spec/factories/entries.rb +17 -3
- data/spec/factories/sites.rb +3 -0
- data/vendor/assets/javascripts/iscroll.js +4 -7
- metadata +65 -49
- data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
- data/entry_types/scrolled/package/frontend/arrowRight-78a7cee4.js +0 -42
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Pageflow
|
|
2
|
+
# @api private
|
|
3
|
+
class SitemapsController < Pageflow::ApplicationController
|
|
4
|
+
def index
|
|
5
|
+
site = Site.for_request(request).first!
|
|
6
|
+
return head 404 unless site.sitemap_enabled?
|
|
7
|
+
|
|
8
|
+
@entries = Sitemaps.entries_for(site: site)
|
|
9
|
+
|
|
10
|
+
respond_to do |format|
|
|
11
|
+
format.xml
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -31,7 +31,7 @@ module Pageflow
|
|
|
31
31
|
|
|
32
32
|
authorize!(:update, storyline)
|
|
33
33
|
verify_edit_lock!(storyline.entry)
|
|
34
|
-
storyline.
|
|
34
|
+
storyline.update(storyline_params)
|
|
35
35
|
|
|
36
36
|
respond_with(storyline)
|
|
37
37
|
end
|
|
@@ -42,7 +42,7 @@ module Pageflow
|
|
|
42
42
|
authorize!(:edit_outline, entry.to_model)
|
|
43
43
|
verify_edit_lock!(entry)
|
|
44
44
|
params.require(:ids).each_with_index do |id, index|
|
|
45
|
-
entry.storylines.update(
|
|
45
|
+
entry.storylines.find(id).update(position: index)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
head :no_content
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module Pageflow
|
|
2
2
|
module EntriesHelper
|
|
3
3
|
def pretty_entry_title(entry)
|
|
4
|
-
[entry.title,
|
|
4
|
+
[entry.title,
|
|
5
|
+
entry.site.title.presence || entry.site.cname_domain.presence].compact.join(' - ')
|
|
5
6
|
end
|
|
6
7
|
|
|
7
8
|
def pretty_entry_url(entry, options = {})
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Pageflow
|
|
2
|
+
# Helpers to render alternate links to atom feeds.
|
|
3
|
+
#
|
|
4
|
+
# @since 16.1
|
|
5
|
+
module FeedsHelper
|
|
6
|
+
# Render alternate links to atom feed of entries in the same site
|
|
7
|
+
# using the same locale.
|
|
8
|
+
def feed_link_tags_for_entry(entry)
|
|
9
|
+
return '' unless entry.site.feeds_enabled?
|
|
10
|
+
|
|
11
|
+
href =
|
|
12
|
+
entry.site.custom_feed_url.presence&.gsub(':locale', entry.locale) ||
|
|
13
|
+
pageflow.feed_url(
|
|
14
|
+
{
|
|
15
|
+
locale: entry.locale,
|
|
16
|
+
format: 'atom'
|
|
17
|
+
}.merge(Pageflow.config.site_url_options(entry.site) || {})
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
tag(:link,
|
|
21
|
+
rel: 'alternate',
|
|
22
|
+
type: 'application/atom+xml',
|
|
23
|
+
title: 'Feed',
|
|
24
|
+
href: href)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @api private
|
|
28
|
+
def feed_entry_content(entry)
|
|
29
|
+
FeedContent.new(self, entry).build
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @api private
|
|
33
|
+
FeedContent = Struct.new(:template, :entry) do
|
|
34
|
+
def build
|
|
35
|
+
[image_html, summary_html, link_html].compact.join
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def image_html
|
|
41
|
+
return if entry.thumbnail_file.blank?
|
|
42
|
+
|
|
43
|
+
template.content_tag(
|
|
44
|
+
:p,
|
|
45
|
+
template.tag(
|
|
46
|
+
:img,
|
|
47
|
+
src: entry.thumbnail_file.thumbnail_url(:thumbnail_large),
|
|
48
|
+
width: 560, height: 315
|
|
49
|
+
)
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def summary_html
|
|
54
|
+
template.content_tag(:p, template.raw(entry.summary))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def link_html
|
|
58
|
+
template.content_tag(
|
|
59
|
+
:p,
|
|
60
|
+
template.link_to(template.t('pageflow.public.read_more'),
|
|
61
|
+
template.social_share_entry_url(entry))
|
|
62
|
+
)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -17,16 +17,16 @@ module Pageflow
|
|
|
17
17
|
def page_type_templates(entry)
|
|
18
18
|
safe_join(Pageflow.config.page_types.map do |page_type|
|
|
19
19
|
content_tag(:script,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
render(template: page_type.template_path,
|
|
21
|
+
locals: {
|
|
22
|
+
configuration: {},
|
|
23
|
+
page: Page.new,
|
|
24
|
+
entry: entry,
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
# Required by RevisionFileHelper#find_file_in_entry
|
|
27
|
+
:@entry => entry
|
|
28
|
+
},
|
|
29
|
+
layout: false).to_str,
|
|
30
30
|
type: 'text/html', data: {template: "#{page_type.name}_page"})
|
|
31
31
|
end)
|
|
32
32
|
end
|
|
@@ -27,9 +27,9 @@ class PageflowPermalinkInput
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def permalink_inputs_html
|
|
30
|
-
return '' if options[:
|
|
30
|
+
return '' if options[:site].permalink_directories.empty?
|
|
31
31
|
|
|
32
|
-
builder.select(:directory_id,
|
|
32
|
+
builder.select(:directory_id, directory_select_options) <<
|
|
33
33
|
builder.text_field(:slug, placeholder: options[:slug_placeholder])
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -38,10 +38,22 @@ class PageflowPermalinkInput
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def wrapper_html_options
|
|
41
|
-
if options[:
|
|
41
|
+
if options[:site].permalink_directories.empty?
|
|
42
42
|
super.merge(style: 'display: none')
|
|
43
|
+
elsif options[:site].permalink_directories.one?
|
|
44
|
+
result = super
|
|
45
|
+
result.merge(class: "#{result[:class]} no_directories")
|
|
43
46
|
else
|
|
44
47
|
super
|
|
45
48
|
end
|
|
46
49
|
end
|
|
50
|
+
|
|
51
|
+
def directory_select_options
|
|
52
|
+
template.options_from_collection_for_select(
|
|
53
|
+
options[:site].permalink_directories,
|
|
54
|
+
'id',
|
|
55
|
+
'path',
|
|
56
|
+
builder.object.directory_id
|
|
57
|
+
)
|
|
58
|
+
end
|
|
47
59
|
end
|
|
@@ -30,8 +30,8 @@ module Pageflow
|
|
|
30
30
|
file_type_of_parent = Pageflow.config.file_types.find_by_model!(parent_class)
|
|
31
31
|
models_of_nested_file_types = file_type_of_parent.nested_file_types.map(&:model)
|
|
32
32
|
unless models_of_nested_file_types.include?(self.class)
|
|
33
|
-
errors
|
|
34
|
-
|
|
33
|
+
errors.add(:base, 'File type of provided parent file does not permit nesting files of '\
|
|
34
|
+
"type #{self.class.name}")
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
end
|
|
@@ -39,7 +39,7 @@ module Pageflow
|
|
|
39
39
|
def parent_belongs_to_same_entry
|
|
40
40
|
if parent_file.present?
|
|
41
41
|
unless parent_file.using_entries.include?(entry)
|
|
42
|
-
errors
|
|
42
|
+
errors.add(:base, 'Parent file does not belong to same entry as nested file')
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -2,6 +2,7 @@ module Pageflow
|
|
|
2
2
|
class AudioFileUrlTemplates
|
|
3
3
|
def call
|
|
4
4
|
{
|
|
5
|
+
original: url_template(:attachment, :original),
|
|
5
6
|
m4a: url_template(:m4a),
|
|
6
7
|
mp3: url_template(:mp3),
|
|
7
8
|
ogg: url_template(:ogg),
|
|
@@ -17,7 +18,7 @@ module Pageflow
|
|
|
17
18
|
|
|
18
19
|
def example_file
|
|
19
20
|
@example_file ||= AudioFile.new(id: 0,
|
|
20
|
-
file_name: ':basename
|
|
21
|
+
file_name: ':basename.:extension',
|
|
21
22
|
peak_data_file_name: 'audio.json')
|
|
22
23
|
end
|
|
23
24
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Pageflow
|
|
2
|
+
# @api private
|
|
3
|
+
EntriesFeed = Struct.new(:title, :locale, :custom_url, :root_url, :entries) do
|
|
4
|
+
def updated_at
|
|
5
|
+
entries.map(&:published_at).max
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
def for(site:, locale:)
|
|
10
|
+
new(
|
|
11
|
+
site.title.presence || site.host,
|
|
12
|
+
locale,
|
|
13
|
+
site.custom_feed_url&.gsub(':locale', locale),
|
|
14
|
+
site.canonical_entry_url_prefix&.gsub(':locale', locale),
|
|
15
|
+
find_entries(site, locale)
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def find_entries(site, locale)
|
|
22
|
+
Pageflow::PublishedEntry.wrap_all(
|
|
23
|
+
site
|
|
24
|
+
.entries
|
|
25
|
+
.published_without_password_protection
|
|
26
|
+
.where(pageflow_revisions: {locale: locale})
|
|
27
|
+
.order('first_published_at DESC')
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -9,7 +9,7 @@ module Pageflow
|
|
|
9
9
|
'processed_attachments'
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
before_attachment_on_s3_post_process :save_image_dimensions
|
|
13
13
|
|
|
14
14
|
def thumbnail_url(*args)
|
|
15
15
|
unless ready?
|
|
@@ -49,10 +49,10 @@ module Pageflow
|
|
|
49
49
|
ultra: {geometry: '3840x3840>',
|
|
50
50
|
format: :JPG,
|
|
51
51
|
convert_options: '-quality 90 -interlace Plane'},
|
|
52
|
-
panorama_medium: {geometry:
|
|
52
|
+
panorama_medium: {geometry: ImageFile.scale_down_to_cover(1024, 1024),
|
|
53
53
|
format: panorama_format,
|
|
54
54
|
convert_options: '-quality 90 -interlace Plane'},
|
|
55
|
-
panorama_large: {geometry:
|
|
55
|
+
panorama_large: {geometry: ImageFile.scale_down_to_cover(1920, 1080),
|
|
56
56
|
format: panorama_format,
|
|
57
57
|
convert_options: '-quality 90 -interlace Plane'}
|
|
58
58
|
)
|
|
@@ -63,6 +63,17 @@ module Pageflow
|
|
|
63
63
|
end
|
|
64
64
|
# <- UploadableFile-overrides
|
|
65
65
|
|
|
66
|
+
def self.scale_down_to_cover(width, height)
|
|
67
|
+
lambda do |image_file|
|
|
68
|
+
if image_file.width.present? && image_file.height.present? &&
|
|
69
|
+
(image_file.width <= width || image_file.height <= height)
|
|
70
|
+
'100%'
|
|
71
|
+
else
|
|
72
|
+
"#{width}x#{height}^"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
66
77
|
private
|
|
67
78
|
|
|
68
79
|
def save_image_dimensions
|
|
@@ -38,8 +38,9 @@ module Pageflow
|
|
|
38
38
|
private
|
|
39
39
|
|
|
40
40
|
def account_membership_exists
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
return if user.blank? || user.accounts.include?(entity.account)
|
|
42
|
+
|
|
43
|
+
errors.add(:base, 'Entry Membership misses presupposed Membership on account of entry')
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
def on_entry?
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Pageflow
|
|
2
|
+
# @api private
|
|
3
|
+
class OtherFileUrlTemplates
|
|
4
|
+
def call
|
|
5
|
+
{
|
|
6
|
+
original: UrlTemplate.from_attachment(example_file.attachment, :original)
|
|
7
|
+
}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def example_file
|
|
13
|
+
@example_file ||= OtherFile.new(id: 0, file_name: ':basename.:extension')
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/app/models/pageflow/site.rb
CHANGED
|
@@ -10,9 +10,9 @@ module Pageflow
|
|
|
10
10
|
@usage.configuration
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def
|
|
13
|
+
def update!(attributes)
|
|
14
14
|
super(attributes.except(:configuration))
|
|
15
|
-
@usage.
|
|
15
|
+
@usage.update!(attributes.slice(:configuration))
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def usage_id
|
|
@@ -2,6 +2,8 @@ module Pageflow
|
|
|
2
2
|
class VideoFileUrlTemplates
|
|
3
3
|
def call
|
|
4
4
|
{
|
|
5
|
+
original: url_template(:attachment, :original),
|
|
6
|
+
|
|
5
7
|
high: url_template(:mp4_high),
|
|
6
8
|
medium: url_template(:mp4_medium),
|
|
7
9
|
fullhd: url_template(:mp4_fullhd),
|
|
@@ -26,7 +28,7 @@ module Pageflow
|
|
|
26
28
|
|
|
27
29
|
def example_file
|
|
28
30
|
@example_file ||= VideoFile.new(id: 0).tap do |video_file|
|
|
29
|
-
video_file.file_name = ':basename
|
|
31
|
+
video_file.file_name = ':basename.:extension'
|
|
30
32
|
video_file.output_presences = {':pageflow_hls_qualities' => true}
|
|
31
33
|
video_file.poster_file_name = video_file.zencoder_poster.original_filename
|
|
32
34
|
end
|
|
@@ -72,7 +72,15 @@ module Pageflow
|
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
def from_db_by_role
|
|
75
|
-
Widget.all
|
|
75
|
+
reject_unknown_widget_types(Widget.all)
|
|
76
|
+
.index_by(&:role)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def reject_unknown_widget_types(widgets)
|
|
80
|
+
widgets.select do |widget|
|
|
81
|
+
widget.type_name.blank? ||
|
|
82
|
+
config.widget_types.type_name?(widget.type_name)
|
|
83
|
+
end
|
|
76
84
|
end
|
|
77
85
|
|
|
78
86
|
def defaults_by_role
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
extensible_attributes_table_for(site,
|
|
2
2
|
Pageflow.config_for(site.account)
|
|
3
3
|
.admin_attributes_table_rows.for(:site)) do
|
|
4
|
+
row :title
|
|
4
5
|
row :host, class: 'host'
|
|
5
6
|
row :account, class: 'account' do
|
|
6
7
|
link_to(site.account.name,
|
|
7
8
|
admin_account_path(site.account, tab: 'sites'))
|
|
8
9
|
end
|
|
10
|
+
row :feeds_enabled
|
|
11
|
+
row :sitemap_enabled
|
|
9
12
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<%= f.inputs do %>
|
|
2
|
+
<%= f.input :title, hint: t('pageflow.admin.sites.title_hint') %>
|
|
2
3
|
<%= f.input :cname, hint: t('pageflow.admin.sites.cname_hint') %>
|
|
3
4
|
<%= f.input :additional_cnames, hint: t('pageflow.admin.sites.additional_cnames_hint') %>
|
|
4
5
|
<%= f.input :home_url, hint: t('pageflow.admin.sites.home_url_hint') %>
|
|
@@ -11,6 +12,11 @@
|
|
|
11
12
|
<%= f.input :copyright_link_url %>
|
|
12
13
|
<%= f.input :privacy_link_url %>
|
|
13
14
|
|
|
15
|
+
<%= f.input :feeds_enabled, hint: t('pageflow.admin.sites.feeds_hint',
|
|
16
|
+
site_host: @site&.persisted? ? @site.host : '<host>') %>
|
|
17
|
+
<%= f.input :sitemap_enabled, hint: t('pageflow.admin.sites.sitemap_hint',
|
|
18
|
+
site_host: @site&.persisted? ? @site.host : '<host>') %>
|
|
19
|
+
|
|
14
20
|
<% account_config.admin_form_inputs.find_all_for(:site).each do |form_input| %>
|
|
15
21
|
<%= form_input.build(f) %>
|
|
16
22
|
<% end %>
|
|
@@ -78,8 +78,14 @@ module Pageflow
|
|
|
78
78
|
#
|
|
79
79
|
# This is also the reason we can not use SimpleDelegator here
|
|
80
80
|
# and also delegate_missing in Rails 5 would not work.
|
|
81
|
-
def method_missing(method, *args, &block)
|
|
82
|
-
|
|
81
|
+
def method_missing(method, *args, **kwargs, &block)
|
|
82
|
+
# Required for Ruby 2.6. Remove together with
|
|
83
|
+
# Pageflow::RailsVersion.experimental? conditionals.
|
|
84
|
+
if kwargs.present?
|
|
85
|
+
@context.public_send(method, *args, **kwargs, &block)
|
|
86
|
+
else
|
|
87
|
+
@context.public_send(method, *args, &block)
|
|
88
|
+
end
|
|
83
89
|
end
|
|
84
90
|
# rubocop:enable Style/MethodMissing
|
|
85
91
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
atom_feed language: @feed.locale,
|
|
2
|
+
root_url: @feed.root_url,
|
|
3
|
+
url: @feed.custom_url do |feed|
|
|
4
|
+
feed.title(@feed.title)
|
|
5
|
+
feed.updated(@feed.updated_at&.utc)
|
|
6
|
+
|
|
7
|
+
@feed.entries.each do |entry|
|
|
8
|
+
feed.entry(entry,
|
|
9
|
+
url: social_share_entry_url(entry),
|
|
10
|
+
published: entry.first_published_at.utc,
|
|
11
|
+
updated: entry.published_at.utc) do |feed_entry|
|
|
12
|
+
feed_entry.title(entry.title)
|
|
13
|
+
feed_entry.content(feed_entry_content(entry), type: 'html')
|
|
14
|
+
|
|
15
|
+
feed_entry.author do |author|
|
|
16
|
+
author.name(entry.author)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|