pageflow 15.8.0 → 16.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +183 -103
- data/README.md +0 -1
- data/Rakefile +1 -1
- data/admins/pageflow/accounts.rb +12 -16
- data/admins/pageflow/entry.rb +28 -26
- data/admins/pageflow/entry_templates.rb +5 -7
- data/admins/pageflow/sites.rb +53 -0
- data/app/assets/javascripts/pageflow/admin/entries.js +16 -7
- 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 +12 -2
- 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/common_entry_seed_helper.rb +1 -1
- data/app/helpers/pageflow/embed_code_helper.rb +1 -1
- data/app/helpers/pageflow/entries_helper.rb +16 -15
- data/app/helpers/pageflow/feeds_helper.rb +66 -0
- data/app/helpers/pageflow/page_types_helper.rb +9 -9
- data/app/helpers/pageflow/sites_helper.rb +11 -0
- data/app/helpers/pageflow/social_share_helper.rb +2 -2
- 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 +13 -31
- data/app/models/pageflow/audio_file_url_templates.rb +2 -1
- data/app/models/pageflow/{cname_theming_request_scope.rb → cname_site_request_scope.rb} +3 -3
- data/app/models/pageflow/customized_theme.rb +1 -1
- data/app/models/pageflow/draft_entry.rb +1 -1
- data/app/models/pageflow/entries_feed.rb +32 -0
- data/app/models/pageflow/entry.rb +3 -4
- data/app/models/pageflow/entry_at_revision.rb +2 -2
- data/app/models/pageflow/entry_duplicate.rb +1 -1
- data/app/models/pageflow/entry_template.rb +4 -4
- data/app/models/pageflow/home_button.rb +7 -7
- 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/permalink.rb +3 -3
- data/app/models/pageflow/permalink_directory.rb +2 -2
- data/app/models/pageflow/published_entry.rb +8 -2
- data/app/models/pageflow/revision.rb +4 -0
- data/app/models/pageflow/site.rb +67 -0
- data/app/models/pageflow/sitemaps.rb +13 -0
- data/app/models/pageflow/theme_customization.rb +1 -1
- 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/policies/pageflow/account_policy.rb +2 -2
- data/app/policies/pageflow/entry_policy.rb +2 -2
- data/app/policies/pageflow/entry_template_policy.rb +1 -1
- data/app/policies/pageflow/{theming_policy.rb → site_policy.rb} +13 -11
- data/app/views/admin/accounts/_entry_template_details.html.arb +1 -1
- data/app/views/admin/accounts/_form.html.erb +4 -22
- data/app/views/admin/accounts/_site_defaults_inline_help.html.erb +5 -0
- data/app/views/admin/entries/_form.html.erb +4 -13
- data/app/views/admin/entries/_permalink_inputs.html.erb +2 -3
- data/app/views/admin/entries/_site_input.html.erb +15 -0
- data/app/views/admin/entries/{entry_type_name_input.html.erb → entry_site_and_type_name_input.html.erb} +3 -0
- data/app/views/admin/entry_templates/_form.html.erb +5 -5
- data/app/views/admin/sites/_attributes_table.html.arb +12 -0
- data/app/views/admin/sites/_fields.html.erb +23 -0
- data/app/views/admin/sites/_form.html.erb +5 -0
- data/app/views/components/pageflow/admin/entries_tab.rb +1 -2
- data/app/views/components/pageflow/admin/entry_templates_tab.rb +10 -11
- data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
- data/app/views/components/pageflow/admin/features_tab.rb +1 -1
- data/app/views/components/pageflow/admin/sites_tab.rb +35 -0
- data/app/views/components/pageflow/admin/users_tab.rb +1 -2
- data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
- data/app/views/pageflow/editor/entries/seed.json.erb +1 -1
- data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
- data/app/views/pageflow/entries/stylesheet.css.erb +1 -1
- data/app/views/pageflow/feeds/index.atom.builder +20 -0
- data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
- data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
- data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
- data/config/initializers/admin_resource_tabs.rb +29 -12
- data/config/initializers/features.rb +1 -0
- data/config/initializers/paperclip.rb +4 -0
- data/config/locales/de.yml +42 -19
- data/config/locales/en.yml +45 -17
- data/config/routes.rb +3 -0
- data/config/spring.rb +1 -1
- data/db/migrate/20221215101134_rename_theming_to_site.rb +9 -0
- data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +34 -0
- data/db/migrate/20221219203023_add_name_to_sites.rb +5 -0
- data/db/migrate/20230103155934_associate_theme_customizations_with_sites.rb +27 -0
- 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 +455 -119
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +31 -8
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +1 -1
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +1 -1
- 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 +8 -5
- 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/pageflow_scrolled/seeds.rb +1 -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-c6672f27.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-6b05522f.js → Viewer-ee1aa590.js} +32 -161
- data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
- data/entry_types/scrolled/package/frontend/{components-487daafa.js → components-4a09bfa3.js} +185 -45
- data/entry_types/scrolled/package/frontend/{PhonePlatformContext-22e65f92.js → i18n-ddd92820.js} +162 -292
- 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 +375 -40
- 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 +2 -2
- data/entry_types/scrolled/package/widgets/defaultNavigation.js +16 -9
- data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
- data/lib/pageflow/ability_mixin.rb +21 -13
- data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
- data/lib/pageflow/admin/attributes_table_rows.rb +1 -1
- data/lib/pageflow/admin/form_inputs.rb +1 -1
- data/lib/pageflow/admin/tabs.rb +1 -1
- data/lib/pageflow/built_in_file_type.rb +7 -0
- data/lib/pageflow/configuration/permissions.rb +3 -3
- data/lib/pageflow/configuration.rb +38 -17
- data/lib/pageflow/engine.rb +60 -39
- data/lib/pageflow/entry_export_import/entry_serialization.rb +1 -1
- 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/primary_domain_entry_redirect.rb +7 -7
- data/lib/pageflow/rails_version.rb +19 -0
- data/lib/pageflow/seeds.rb +20 -17
- data/lib/pageflow/theme_customizations.rb +10 -10
- 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 +148 -37
- data/package/frontend.js +26 -2
- data/package/testHelpers.js +1 -1
- data/package/ui.js +296 -71
- data/spec/factories/accounts.rb +5 -2
- data/spec/factories/draft_entries.rb +2 -2
- data/spec/factories/entries.rb +19 -5
- data/spec/factories/entry_templates.rb +1 -1
- data/spec/factories/permalink_directory.rb +1 -1
- data/spec/factories/published_entries.rb +2 -2
- data/spec/factories/sites.rb +12 -0
- data/vendor/assets/javascripts/iscroll.js +4 -7
- metadata +84 -59
- data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
- data/app/helpers/pageflow/themings_helper.rb +0 -11
- data/app/models/pageflow/theming.rb +0 -30
- data/app/views/admin/accounts/_theming_defaults_inline_help.html.erb +0 -5
- data/app/views/admin/accounts/_theming_details.html.arb +0 -5
- data/app/views/pageflow/editor/themings/_theming.json.jbuilder +0 -1
- data/entry_types/scrolled/package/frontend/arrowRight-7e3d9dd5.js +0 -42
- data/spec/factories/themings.rb +0 -7
- /data/app/views/pageflow/entries/{_theming.css.erb → _site.css.erb} +0 -0
@@ -2,7 +2,6 @@ Pageflow.configure do |config|
|
|
2
2
|
config.for_entry_type(PageflowPaged.entry_type) do |entry_type_config|
|
3
3
|
entry_type_config.features.register('highdef_background_images')
|
4
4
|
entry_type_config.features.register('force_best_video_quality')
|
5
|
-
entry_type_config.features.register('force_fullhd_video_quality')
|
6
5
|
|
7
6
|
entry_type_config.features.register('auto_change_page')
|
8
7
|
entry_type_config.features.register('delayed_text_fade_in')
|
@@ -1,9 +1,25 @@
|
|
1
|
+
require 'pageflow/rails_version'
|
2
|
+
|
1
3
|
module PageflowPaged
|
2
4
|
# Rails integration
|
3
5
|
class Engine < ::Rails::Engine
|
4
6
|
isolate_namespace PageflowPaged
|
5
7
|
|
6
|
-
|
8
|
+
if Pageflow::RailsVersion.experimental?
|
9
|
+
lib = root.join('lib')
|
10
|
+
|
11
|
+
config.autoload_paths << lib
|
12
|
+
config.eager_load_paths << lib
|
13
|
+
|
14
|
+
initializer 'pageflow_paged.autoloading' do
|
15
|
+
Rails.autoloaders.main.ignore(
|
16
|
+
lib.join('tasks')
|
17
|
+
)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
config.paths.add('lib', eager_load: true)
|
21
|
+
end
|
22
|
+
|
7
23
|
config.i18n.load_path += Dir[config.root.join('config', 'locales', '**', '*.yml').to_s]
|
8
24
|
|
9
25
|
initializer 'pageflow_paged.assets.precompile' do |app|
|
@@ -14,7 +14,7 @@ module PageflowScrolled
|
|
14
14
|
|
15
15
|
def update
|
16
16
|
chapter = Chapter.all_for_revision(@entry.draft).find(params[:id])
|
17
|
-
chapter.
|
17
|
+
chapter.update(chapter_params)
|
18
18
|
|
19
19
|
head :no_content
|
20
20
|
rescue ActiveRecord::RecordNotFound
|
@@ -35,7 +35,7 @@ module PageflowScrolled
|
|
35
35
|
chapters = Chapter.all_for_revision(@entry.draft)
|
36
36
|
|
37
37
|
params.require(:ids).each_with_index do |id, index|
|
38
|
-
chapters.update(
|
38
|
+
chapters.find(id).update(storyline_id: storyline.id, position: index)
|
39
39
|
end
|
40
40
|
|
41
41
|
head :no_content
|
data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb
CHANGED
@@ -27,7 +27,7 @@ module PageflowScrolled
|
|
27
27
|
|
28
28
|
def update
|
29
29
|
content_element = ContentElement.all_for_revision(@entry.draft).find(params[:id])
|
30
|
-
content_element.
|
30
|
+
content_element.update(content_element_params)
|
31
31
|
|
32
32
|
head :no_content
|
33
33
|
rescue ActiveRecord::RecordNotFound
|
@@ -48,9 +48,8 @@ module PageflowScrolled
|
|
48
48
|
storyline = section.chapter.storyline
|
49
49
|
|
50
50
|
params.require(:ids).each_with_index do |id, index|
|
51
|
-
storyline.content_elements.update(id,
|
52
|
-
|
53
|
-
position: index)
|
51
|
+
storyline.content_elements.find(id).update(section_id: section.id,
|
52
|
+
position: index)
|
54
53
|
end
|
55
54
|
|
56
55
|
head :no_content
|
@@ -6,16 +6,24 @@ module PageflowScrolled
|
|
6
6
|
|
7
7
|
def create
|
8
8
|
chapter = Chapter.all_for_revision(@entry.draft).find(params[:chapter_id])
|
9
|
-
section = chapter.
|
9
|
+
section = chapter.create_section(section_params)
|
10
10
|
|
11
|
-
render partial: 'pageflow_scrolled/sections/
|
11
|
+
render partial: 'pageflow_scrolled/editor/sections/section_with_content_elements',
|
12
12
|
locals: {section: section},
|
13
13
|
status: :created
|
14
14
|
end
|
15
15
|
|
16
|
+
def duplicate
|
17
|
+
section = Section.all_for_revision(@entry.draft).find(params[:id])
|
18
|
+
|
19
|
+
render partial: 'pageflow_scrolled/editor/sections/section_with_content_elements',
|
20
|
+
locals: {section: section.chapter.duplicate_section(section)},
|
21
|
+
status: :created
|
22
|
+
end
|
23
|
+
|
16
24
|
def update
|
17
25
|
section = Section.all_for_revision(@entry.draft).find(params[:id])
|
18
|
-
section.
|
26
|
+
section.update(section_params)
|
19
27
|
|
20
28
|
head :no_content
|
21
29
|
rescue ActiveRecord::RecordNotFound
|
@@ -36,9 +44,8 @@ module PageflowScrolled
|
|
36
44
|
storyline = chapter.storyline
|
37
45
|
|
38
46
|
params.require(:ids).each_with_index do |id, index|
|
39
|
-
storyline.sections.update(id,
|
40
|
-
|
41
|
-
position: index)
|
47
|
+
storyline.sections.find(id).update(chapter_id: chapter.id,
|
48
|
+
position: index)
|
42
49
|
end
|
43
50
|
|
44
51
|
head :no_content
|
@@ -4,10 +4,12 @@ module PageflowScrolled
|
|
4
4
|
include Pageflow::EntriesControllerEnvHelper
|
5
5
|
|
6
6
|
helper Pageflow::EntriesHelper
|
7
|
+
helper Pageflow::FeedsHelper
|
7
8
|
helper Pageflow::WidgetsHelper
|
8
9
|
helper Pageflow::SocialShareHelper
|
9
10
|
helper Pageflow::MetaTagsHelper
|
10
11
|
helper Pageflow::StructuredDataHelper
|
12
|
+
helper Pageflow::TextDirectionHelper
|
11
13
|
helper FaviconHelper
|
12
14
|
|
13
15
|
def show
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module PageflowScrolled
|
2
|
+
# @api private
|
3
|
+
module CacheHelper
|
4
|
+
def cache_scrolled_entry(entry:, widget_scope:, &block)
|
5
|
+
condition =
|
6
|
+
widget_scope == :published &&
|
7
|
+
entry.feature_state('scrolled_entry_fragment_caching')
|
8
|
+
cache_if(condition, [entry, :head_and_body, widget_scope], &block)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module PageflowScrolled
|
2
|
+
module Editor
|
3
|
+
# Render editor seed data for scrolled entries.
|
4
|
+
#
|
5
|
+
# @api private
|
6
|
+
module EntryJsonSeedHelper
|
7
|
+
include PageflowScrolled::EntryJsonSeedHelper
|
8
|
+
|
9
|
+
def scrolled_entry_editor_json_seed(json, scrolled_entry)
|
10
|
+
json.key_format!(camelize: :lower)
|
11
|
+
entry_config = Pageflow.config_for(scrolled_entry)
|
12
|
+
|
13
|
+
scrolled_entry_editor_legacy_typography_variants_seed(json, entry_config)
|
14
|
+
scrolled_entry_editor_consent_vendor_host_matchers_seed(json, entry_config)
|
15
|
+
|
16
|
+
scrolled_entry_json_seed(json,
|
17
|
+
scrolled_entry,
|
18
|
+
skip_files: true,
|
19
|
+
skip_i18n: true,
|
20
|
+
include_unused_additional_seed_data: true)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def scrolled_entry_editor_legacy_typography_variants_seed(json, entry_config)
|
26
|
+
json.legacy_typography_variants(
|
27
|
+
entry_config
|
28
|
+
.legacy_typography_variants
|
29
|
+
.deep_transform_keys { |key| key.to_s.camelize(:lower) }
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def scrolled_entry_editor_consent_vendor_host_matchers_seed(json, entry_config)
|
34
|
+
json.consent_vendor_host_matchers(
|
35
|
+
entry_config
|
36
|
+
.consent_vendor_host_matchers
|
37
|
+
.transform_keys { |regexp| regexp.inspect[1..-2] }
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -6,6 +6,8 @@ module PageflowScrolled
|
|
6
6
|
include ReactServerSideRenderingHelper
|
7
7
|
include Pageflow::WidgetsHelper
|
8
8
|
include Pageflow::StructuredDataHelper
|
9
|
+
include Pageflow::TextDirectionHelper
|
10
|
+
include PageflowScrolled::CacheHelper
|
9
11
|
include FaviconHelper
|
10
12
|
include PacksHelper
|
11
13
|
include WebpackPublicPathHelper
|
@@ -17,6 +19,7 @@ module PageflowScrolled
|
|
17
19
|
:@widget_scope => :editor,
|
18
20
|
:@skip_ssr => true,
|
19
21
|
:@skip_structured_data => true,
|
22
|
+
:@skip_feed_link_tags => true,
|
20
23
|
:@seed_options => {
|
21
24
|
skip_collections: true,
|
22
25
|
include_unused_additional_seed_data: true,
|
@@ -2,22 +2,43 @@ module PageflowScrolled
|
|
2
2
|
# @api private
|
3
3
|
module PacksHelper
|
4
4
|
def scrolled_frontend_javascript_packs_tag(entry, options)
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
if defined?(Shakapacker)
|
6
|
+
javascript_pack_tag(
|
7
|
+
*scrolled_frontend_packs(entry, **options),
|
8
|
+
defer: false
|
9
|
+
)
|
10
|
+
else
|
11
|
+
javascript_packs_with_chunks_tag(
|
12
|
+
*scrolled_frontend_packs(entry, **options)
|
13
|
+
)
|
14
|
+
end
|
8
15
|
end
|
9
16
|
|
10
17
|
def scrolled_frontend_stylesheet_packs_tag(entry, options)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
18
|
+
if defined?(Shakapacker)
|
19
|
+
stylesheet_pack_tag(
|
20
|
+
*scrolled_frontend_packs(entry, **options),
|
21
|
+
media: 'all'
|
22
|
+
)
|
23
|
+
else
|
24
|
+
stylesheet_packs_with_chunks_tag(
|
25
|
+
*scrolled_frontend_packs(entry, **options),
|
26
|
+
media: 'all'
|
27
|
+
)
|
28
|
+
end
|
15
29
|
end
|
16
30
|
|
17
31
|
def scrolled_editor_javascript_packs_tag(entry)
|
18
|
-
|
19
|
-
|
20
|
-
|
32
|
+
if defined?(Shakapacker)
|
33
|
+
javascript_pack_tag(
|
34
|
+
*scrolled_editor_packs(entry),
|
35
|
+
defer: false
|
36
|
+
)
|
37
|
+
else
|
38
|
+
javascript_packs_with_chunks_tag(
|
39
|
+
*scrolled_editor_packs(entry)
|
40
|
+
)
|
41
|
+
end
|
21
42
|
end
|
22
43
|
|
23
44
|
def scrolled_frontend_packs(entry, widget_scope:)
|
data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb
CHANGED
@@ -32,6 +32,9 @@ module PageflowScrolled
|
|
32
32
|
|
33
33
|
# see https://github.com/reactjs/react-rails/issues/970#issuecomment-476338244
|
34
34
|
class WebpackerSplitChunksManifestContainer < React::ServerRendering::WebpackerManifestContainer
|
35
|
+
CLIENT_EXEC =
|
36
|
+
%r{__webpack_exec__\("./node_modules/webpack-dev-server\/client\/index\.js[^"]*"\),}
|
37
|
+
|
35
38
|
def find_asset(logical_path)
|
36
39
|
asset_paths = manifest.lookup_pack_with_chunks(logical_path, type: :javascript)
|
37
40
|
|
@@ -46,7 +49,12 @@ module PageflowScrolled
|
|
46
49
|
asset_path.slice!("#{ds.protocol}://#{ds.host_with_port}")
|
47
50
|
dev_server_asset =
|
48
51
|
URI.open("#{ds.protocol}://#{ds.host_with_port}#{asset_path}").read
|
49
|
-
|
52
|
+
|
53
|
+
# Remove webpack-dev-server client code that tries to
|
54
|
+
# interact with browser globals:
|
55
|
+
dev_server_asset.sub!(CLIENT_REQUIRE, '//\0') # for Webpack 4
|
56
|
+
dev_server_asset.sub!(CLIENT_EXEC, '/*\0*/') # for Webpack 5
|
57
|
+
|
50
58
|
dev_server_asset
|
51
59
|
end
|
52
60
|
else
|
@@ -6,9 +6,11 @@ module PageflowScrolled
|
|
6
6
|
theme_file_role: nil,
|
7
7
|
theme_file_style: :resized,
|
8
8
|
relative_url: false)
|
9
|
+
prefix = defined?(Shakapacker) ? 'static' : 'media'
|
10
|
+
|
9
11
|
path =
|
10
12
|
theme.files.dig(theme_file_role, theme_file_style) ||
|
11
|
-
asset_pack_path("
|
13
|
+
asset_pack_path("#{prefix}/pageflow-scrolled/themes/#{theme.name}/#{path}")
|
12
14
|
|
13
15
|
if relative_url
|
14
16
|
URI.parse(path).path
|
@@ -16,6 +16,23 @@ module PageflowScrolled
|
|
16
16
|
attr_accessor :revision # used on :create to lazily create storyline
|
17
17
|
before_validation :ensure_storyline, on: :create
|
18
18
|
|
19
|
+
def create_section(attributes = {})
|
20
|
+
shift_section_positions(from: attributes[:position])
|
21
|
+
|
22
|
+
section = sections.create!(attributes)
|
23
|
+
section.content_elements.create!(type_name: 'textBlock')
|
24
|
+
|
25
|
+
section
|
26
|
+
end
|
27
|
+
|
28
|
+
def duplicate_section(section)
|
29
|
+
shift_section_positions(from: section.position + 1)
|
30
|
+
|
31
|
+
section.duplicate do |new_section|
|
32
|
+
new_section.position = section.position + 1
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
19
36
|
def self.all_for_revision(revision)
|
20
37
|
joins(storyline: :revision)
|
21
38
|
.where(pageflow_scrolled_storylines: {revision_id: revision})
|
@@ -23,6 +40,12 @@ module PageflowScrolled
|
|
23
40
|
|
24
41
|
private
|
25
42
|
|
43
|
+
def shift_section_positions(from:)
|
44
|
+
sections
|
45
|
+
.where('position >= ?', from)
|
46
|
+
.update_all('position = position + 1')
|
47
|
+
end
|
48
|
+
|
26
49
|
def ensure_storyline
|
27
50
|
return if storyline.present?
|
28
51
|
unless Storyline.all_for_revision(revision).exists?
|
@@ -1,5 +1,10 @@
|
|
1
1
|
<%= stylesheet_link_tag 'pageflow_paged/editor', media: 'all' %>
|
2
|
-
|
2
|
+
|
3
|
+
<% if defined?(Shakapacker) %>
|
4
|
+
<%= stylesheet_pack_tag 'pageflow-scrolled-frontend' %>
|
5
|
+
<% else %>
|
6
|
+
<%= stylesheet_packs_with_chunks_tag 'pageflow-scrolled-frontend' %>
|
7
|
+
<% end %>
|
3
8
|
|
4
9
|
<%= scrolled_theme_properties_style_tag(entry.theme) %>
|
5
10
|
<%= scrolled_theme_stylesheet_pack_tags(entry.theme) %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
json.key_format!(camelize: :lower)
|
2
|
+
|
3
|
+
json.partial! 'pageflow_scrolled/sections/section', section: section
|
4
|
+
|
5
|
+
json.content_elements do
|
6
|
+
json.array!(section.content_elements) do |content_element|
|
7
|
+
json.partial! 'pageflow_scrolled/content_elements/content_element',
|
8
|
+
content_element: content_element
|
9
|
+
end
|
10
|
+
end
|
@@ -1,58 +1,61 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
<
|
1
|
+
<%= cache_scrolled_entry(entry: @entry, widget_scope: @widget_scope) do %>
|
2
|
+
<!DOCTYPE html>
|
3
|
+
<%= content_tag(:html, lang: @entry.locale, dir: text_direction(@entry.locale)) do %>
|
4
|
+
<head>
|
5
|
+
<title><%= pretty_entry_title(@entry) %></title>
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
<meta charset="utf-8" />
|
8
|
+
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
8
9
|
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
<%= social_share_meta_tags_for(@entry) %>
|
12
|
+
<%= meta_tags_for_entry(@entry) %>
|
13
|
+
<%= feed_link_tags_for_entry(@entry) unless @skip_feed_link_tags%>
|
12
14
|
|
13
|
-
|
15
|
+
<%= scrolled_favicons_for_entry(@entry, entry_mode: @widget_scope) %>
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
+
<%= javascript_include_tag 'pageflow_scrolled/legacy' %>
|
18
|
+
<%= scrolled_frontend_stylesheet_packs_tag(@entry, widget_scope: @widget_scope) %>
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
+
<%= scrolled_theme_properties_style_tag(@entry.theme) %>
|
21
|
+
<%= scrolled_theme_stylesheet_pack_tags(@entry.theme) %>
|
20
22
|
|
21
|
-
|
23
|
+
<%= render_widget_head_fragments(@entry, scope: @widget_scope) %>
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
<% if Rails.env.development? %>
|
26
|
+
<script>
|
27
|
+
try {
|
28
|
+
if (window.top !== window) {
|
29
|
+
window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = window.top.__REACT_DEVTOOLS_GLOBAL_HOOK__;
|
30
|
+
}
|
31
|
+
} catch (e) {
|
32
|
+
console.warn('unable to connect to top frame for connecting dev tools');
|
28
33
|
}
|
29
|
-
|
30
|
-
|
31
|
-
}
|
32
|
-
</script>
|
33
|
-
<% end %>
|
34
|
+
</script>
|
35
|
+
<% end %>
|
34
36
|
|
35
|
-
|
37
|
+
<% ssr_html = @skip_ssr ? '' : render_scrolled_entry(@entry) %>
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
<% if !@skip_ssr && (params[:frontend] == 'v2' || @entry.feature_state('frontend_v2')) %>
|
40
|
+
<%= generated_media_queries_tags_for(ssr_html) %>
|
41
|
+
<% end %>
|
42
|
+
</head>
|
43
|
+
<body>
|
44
|
+
<%= structured_data_for_entry(@entry) unless @skip_structured_data %>
|
43
45
|
|
44
|
-
|
46
|
+
<%= render 'pageflow_scrolled/entries/global_notices' %>
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
+
<div id="fullscreenRoot"></div>
|
49
|
+
<div id="root"><%= ssr_html %></div>
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
-
|
51
|
+
<div id='template-widget-container'>
|
52
|
+
<%= render_widgets(@entry, scope: @widget_scope, insert_point: :bottom_of_entry) %>
|
53
|
+
</div>
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
+
<%= scrolled_webpack_public_path_script_tag %>
|
56
|
+
<%= scrolled_frontend_javascript_packs_tag(@entry, widget_scope: @widget_scope) %>
|
55
57
|
|
56
|
-
|
57
|
-
|
58
|
+
<%= scrolled_entry_json_seed_script_tag(@entry, @seed_options || {}) %>
|
59
|
+
</body>
|
60
|
+
<% end %>
|
58
61
|
<% end %>
|
data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
content_element_vendors =
|
2
|
+
entry_config.content_element_consent_vendors.by_content_element_id(entry)
|
3
|
+
|
4
|
+
json.content_element_consent_vendors(content_element_vendors)
|
5
|
+
|
6
|
+
I18n.with_locale(entry.locale) do
|
7
|
+
json.consent_vendors do
|
8
|
+
json.array!(content_element_vendors.values.uniq) do |name|
|
9
|
+
json.name name
|
10
|
+
json.display_name t("pageflow_scrolled.consent_vendors.#{name}.name")
|
11
|
+
json.description t("pageflow_scrolled.consent_vendors.#{name}.description")
|
12
|
+
json.opt_in_prompt t("pageflow_scrolled.consent_vendors.#{name}.opt_in_prompt")
|
13
|
+
json.paradigm 'lazy opt-in'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -14,14 +14,14 @@ json.config do
|
|
14
14
|
json.default_file_rights entry.account.default_file_rights
|
15
15
|
|
16
16
|
json.legal_info do
|
17
|
-
|
17
|
+
site = entry.site
|
18
18
|
json.imprint do
|
19
|
-
json.label raw(
|
20
|
-
json.url
|
19
|
+
json.label raw(site.imprint_link_label)
|
20
|
+
json.url site.imprint_link_url
|
21
21
|
end
|
22
22
|
json.copyright do
|
23
|
-
json.label raw(
|
24
|
-
json.url
|
23
|
+
json.label raw(site.copyright_link_label)
|
24
|
+
json.url site.copyright_link_url
|
25
25
|
end
|
26
26
|
json.privacy do
|
27
27
|
json.label I18n.t('pageflow.public.privacy_notice')
|
@@ -39,6 +39,9 @@ json.config do
|
|
39
39
|
self,
|
40
40
|
include_unused: options[:include_unused_additional_seed_data])
|
41
41
|
)
|
42
|
+
|
43
|
+
json.partial! 'pageflow_scrolled/entry_json_seed/consent_vendors',
|
44
|
+
entry: entry, entry_config: entry_config
|
42
45
|
end
|
43
46
|
|
44
47
|
unless options[:skip_i18n]
|