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
|
@@ -30,10 +30,71 @@ module PageflowScrolled
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def install_packages
|
|
33
|
-
|
|
33
|
+
if defined?(Shakapacker)
|
|
34
|
+
run 'yarn add css-loader style-loader' \
|
|
35
|
+
' mini-css-extract-plugin css-minimizer-webpack-plugin' \
|
|
36
|
+
' postcss postcss-preset-env postcss-loader' \
|
|
37
|
+
' postcss-import postcss-url postcss-flexbugs-fixes' \
|
|
38
|
+
' @fontsource/source-sans-pro'
|
|
39
|
+
else
|
|
40
|
+
run 'yarn add postcss-url@^8.0.0 @fontsource/source-sans-pro'
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def webpack_config
|
|
45
|
+
return unless defined?(Shakapacker)
|
|
46
|
+
|
|
47
|
+
gsub_file(
|
|
48
|
+
'config/webpack/webpack.config.js',
|
|
49
|
+
"const { generateWebpackConfig } = require('shakapacker')",
|
|
50
|
+
"const { generateWebpackConfig, merge, mergeWithRules } = require('shakapacker')"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
gsub_file(
|
|
54
|
+
'config/webpack/webpack.config.js',
|
|
55
|
+
'const webpackConfig = generateWebpackConfig()',
|
|
56
|
+
<<~JS
|
|
57
|
+
const webpackConfig = merge(
|
|
58
|
+
generateWebpackConfig({
|
|
59
|
+
resolve: {
|
|
60
|
+
extensions: ['.css']
|
|
61
|
+
}
|
|
62
|
+
}),
|
|
63
|
+
require('pageflow/config/webpack5'),
|
|
64
|
+
require('pageflow-scrolled/config/webpack')
|
|
65
|
+
)
|
|
66
|
+
JS
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
gsub_file(
|
|
70
|
+
'config/webpack/webpack.config.js',
|
|
71
|
+
'module.exports = webpackConfig',
|
|
72
|
+
<<~JS
|
|
73
|
+
// Extend file rule to include mp3 extension
|
|
74
|
+
module.exports = mergeWithRules({
|
|
75
|
+
module: {
|
|
76
|
+
rules: {
|
|
77
|
+
test: 'replace',
|
|
78
|
+
type: 'match'
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
})(webpackConfig, {
|
|
82
|
+
module: {
|
|
83
|
+
rules: [
|
|
84
|
+
{
|
|
85
|
+
test: /\.(bmp|gif|jpe?g|png|tiff|ico|avif|webp|eot|otf|ttf|woff|woff2|svg|mp3)$/,
|
|
86
|
+
type: 'asset/resource'
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
JS
|
|
92
|
+
)
|
|
34
93
|
end
|
|
35
94
|
|
|
36
95
|
def webpack_environment
|
|
96
|
+
return if defined?(Shakapacker)
|
|
97
|
+
|
|
37
98
|
inject_into_file('config/webpack/environment.js',
|
|
38
99
|
before: "module.exports = environment\n") do
|
|
39
100
|
"environment.config.merge(require('pageflow/config/webpack'))\n" \
|
|
@@ -53,6 +114,8 @@ module PageflowScrolled
|
|
|
53
114
|
end
|
|
54
115
|
|
|
55
116
|
def webpacker_yml
|
|
117
|
+
return if defined?(Shakapacker)
|
|
118
|
+
|
|
56
119
|
gsub_file('config/webpacker.yml',
|
|
57
120
|
'extract_css: false',
|
|
58
121
|
'extract_css: true')
|
|
@@ -64,10 +127,29 @@ module PageflowScrolled
|
|
|
64
127
|
end
|
|
65
128
|
|
|
66
129
|
def postcss_config
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
130
|
+
if defined?(Shakapacker)
|
|
131
|
+
create_file 'postcss.config.js', <<~JS
|
|
132
|
+
module.exports = {
|
|
133
|
+
plugins: [
|
|
134
|
+
require('postcss-import'),
|
|
135
|
+
// Make relative urls in fontsource packages work
|
|
136
|
+
require('postcss-url')({url: 'rebase'}),
|
|
137
|
+
require('postcss-flexbugs-fixes'),
|
|
138
|
+
require('postcss-preset-env')({
|
|
139
|
+
autoprefixer: {
|
|
140
|
+
flexbox: 'no-2009'
|
|
141
|
+
},
|
|
142
|
+
stage: 3
|
|
143
|
+
})
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
JS
|
|
147
|
+
else
|
|
148
|
+
inject_into_file('postcss.config.js',
|
|
149
|
+
after: "require('postcss-import'),\n") do
|
|
150
|
+
" // Make relative urls in fontsource packages work\n" \
|
|
151
|
+
" require('postcss-url')({url: 'rebase'}),\n"
|
|
152
|
+
end
|
|
71
153
|
end
|
|
72
154
|
end
|
|
73
155
|
|
|
@@ -96,6 +178,7 @@ module PageflowScrolled
|
|
|
96
178
|
import 'pageflow-scrolled/frontend-server';
|
|
97
179
|
import 'pageflow-scrolled/contentElements-frontend';
|
|
98
180
|
import 'pageflow-scrolled/widgets/defaultNavigation';
|
|
181
|
+
import 'pageflow-scrolled/widgets/consentBar';
|
|
99
182
|
JS
|
|
100
183
|
end
|
|
101
184
|
|
|
@@ -108,6 +191,15 @@ module PageflowScrolled
|
|
|
108
191
|
JS
|
|
109
192
|
end
|
|
110
193
|
|
|
194
|
+
def consent_bar_widget_packs
|
|
195
|
+
widget_dir = 'app/javascript/packs/pageflow-scrolled/widgets'
|
|
196
|
+
|
|
197
|
+
create_file File.join(widget_dir, 'consentBar.js'), <<-JS
|
|
198
|
+
import 'pageflow-scrolled/widgets/consentBar';
|
|
199
|
+
import 'pageflow-scrolled/widgets/consentBar.css';
|
|
200
|
+
JS
|
|
201
|
+
end
|
|
202
|
+
|
|
111
203
|
def default_font_pack
|
|
112
204
|
create_file 'app/javascript/packs/fonts/sourceSansPro.css', <<-CSS
|
|
113
205
|
@import "@fontsource/source-sans-pro/400.css";
|
|
@@ -44,12 +44,108 @@ module PageflowScrolled
|
|
|
44
44
|
# @since 15.7
|
|
45
45
|
attr_reader :additional_frontend_seed_data
|
|
46
46
|
|
|
47
|
+
# Determine which vendors a content element will require consent
|
|
48
|
+
# for. Based on the vendor name returned here, the following
|
|
49
|
+
# translations will be used in consent UI components.
|
|
50
|
+
#
|
|
51
|
+
# pageflow_scrolled.consent_vendors.#{name}.name
|
|
52
|
+
# pageflow_scrolled.consent_vendors.#{name}.description
|
|
53
|
+
# pageflow_scrolled.consent_vendors.#{name}.opt_in_prompt
|
|
54
|
+
#
|
|
55
|
+
# @example
|
|
56
|
+
#
|
|
57
|
+
# config.content_element_consent_vendors.register(
|
|
58
|
+
# lambda |configuration:| do
|
|
59
|
+
# if configuration['provider'] == 'youtube'
|
|
60
|
+
# 'youtube'
|
|
61
|
+
# else
|
|
62
|
+
# 'vimeo'
|
|
63
|
+
# end
|
|
64
|
+
# end,
|
|
65
|
+
# content_element_type_name: 'videoEmbed'
|
|
66
|
+
# )
|
|
67
|
+
#
|
|
68
|
+
# @return [ContentElementConsentVendors]
|
|
69
|
+
# @since 16.1
|
|
70
|
+
attr_reader :content_element_consent_vendors
|
|
71
|
+
|
|
72
|
+
# Mapping from URL hosts to consent vendor names. Used for iframe
|
|
73
|
+
# embed opt-in.
|
|
74
|
+
#
|
|
75
|
+
# @exmaple
|
|
76
|
+
#
|
|
77
|
+
# entry_type_config.consent_vendor_host_matchers = {
|
|
78
|
+
# /\.some-vendor\.com$/ => 'someVendor'
|
|
79
|
+
# }
|
|
80
|
+
#
|
|
81
|
+
# @return [Hash<RegExp, String>]
|
|
82
|
+
# @since 16.1
|
|
83
|
+
attr_accessor :consent_vendor_host_matchers
|
|
84
|
+
|
|
85
|
+
# Migrate typography variants to palette colors. Before palette
|
|
86
|
+
# colors for text blocks and headings were introduced, it was
|
|
87
|
+
# already possible to color text by defining typography variants
|
|
88
|
+
# that only differ by text color. Now that color can be configured
|
|
89
|
+
# independently, those typography variants have become
|
|
90
|
+
# redundant. This option allows mapping each of those legacy
|
|
91
|
+
# typography variants to a palette color and a different
|
|
92
|
+
# typography variant that does not change color. Legacy typography
|
|
93
|
+
# variants are not displayed in the editor typography variant list
|
|
94
|
+
# box. When an element that uses a legacy typography variant is
|
|
95
|
+
# selected in the editor, the typography variant and palette color
|
|
96
|
+
# from the mapping can be shown as currently selected instead. To
|
|
97
|
+
# make this work, the corresponding Backbome model needs to be
|
|
98
|
+
# wrapped using Entry#createLegacyTypographyVariantDelegator.
|
|
99
|
+
#
|
|
100
|
+
# @example
|
|
101
|
+
#
|
|
102
|
+
# config.themes.register(
|
|
103
|
+
# :custom,
|
|
104
|
+
# typography: {
|
|
105
|
+
# # Replaced by default variant and palette color
|
|
106
|
+
# 'textBlock-paragraph-accent' => {
|
|
107
|
+
# color: 'var(--theme-accent-color)'
|
|
108
|
+
# },
|
|
109
|
+
# 'textBlock-paragraph-lg' => {
|
|
110
|
+
# font_size: '28px',
|
|
111
|
+
# },
|
|
112
|
+
# # Replaced by lg variant and palette color
|
|
113
|
+
# 'textBlock-paragraph-lgAccent' => {
|
|
114
|
+
# font_size: '28px',
|
|
115
|
+
# color: 'var(--theme-accent-color)'
|
|
116
|
+
# },
|
|
117
|
+
# },
|
|
118
|
+
# properties: {
|
|
119
|
+
# root: {
|
|
120
|
+
# accent_color: '#e10028',
|
|
121
|
+
# palette_color_accent: 'var(--theme-accent-color)'
|
|
122
|
+
# }
|
|
123
|
+
# }
|
|
124
|
+
# )
|
|
125
|
+
#
|
|
126
|
+
# config.legacy_typography_variants = {
|
|
127
|
+
# 'accent' => {
|
|
128
|
+
# palette_color: 'accent'
|
|
129
|
+
# },
|
|
130
|
+
# 'lgAccent' => {
|
|
131
|
+
# variant: 'lg',
|
|
132
|
+
# palette_color: 'accent'
|
|
133
|
+
# }
|
|
134
|
+
# }
|
|
135
|
+
#
|
|
136
|
+
# @since 16.1
|
|
137
|
+
attr_accessor :legacy_typography_variants
|
|
138
|
+
|
|
47
139
|
def initialize(*)
|
|
48
140
|
super
|
|
49
141
|
@additional_frontend_packs = AdditionalPacks.new
|
|
50
142
|
@additional_editor_packs = AdditionalPacks.new
|
|
51
143
|
|
|
52
144
|
@additional_frontend_seed_data = AdditionalSeedData.new
|
|
145
|
+
@content_element_consent_vendors = ContentElementConsentVendors.new
|
|
146
|
+
@consent_vendor_host_matchers = {}
|
|
147
|
+
|
|
148
|
+
@legacy_typography_variants = {}
|
|
53
149
|
end
|
|
54
150
|
end
|
|
55
151
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module PageflowScrolled
|
|
2
|
+
# Register consent vendors based on content element configuration
|
|
3
|
+
# data.
|
|
4
|
+
class ContentElementConsentVendors
|
|
5
|
+
# @api private
|
|
6
|
+
def initialize
|
|
7
|
+
@callables = {}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Register callable to determine consent vendor from configuration
|
|
11
|
+
# attributes for a content element type.
|
|
12
|
+
#
|
|
13
|
+
# @param callable [#call]
|
|
14
|
+
# Receives configuration keyword argument and returns
|
|
15
|
+
# @param content_element_type_name [String]
|
|
16
|
+
def register(callable, content_element_type_name:)
|
|
17
|
+
@callables[content_element_type_name] = callable
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @api private
|
|
21
|
+
def by_content_element_id(entry)
|
|
22
|
+
content_elements_with_consent_vendor(entry).each_with_object({}) { |content_element, result|
|
|
23
|
+
next unless @callables[content_element.type_name]
|
|
24
|
+
|
|
25
|
+
result[content_element.id] = @callables[content_element.type_name].call(
|
|
26
|
+
entry: entry,
|
|
27
|
+
configuration: content_element.configuration
|
|
28
|
+
)
|
|
29
|
+
}.compact
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def content_elements_with_consent_vendor(entry)
|
|
35
|
+
ContentElement.all_for_revision(entry.revision).where(type_name: @callables.keys)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
require 'rails'
|
|
2
|
+
require 'pageflow/rails_version'
|
|
2
3
|
|
|
3
4
|
module PageflowScrolled
|
|
4
5
|
# Rails integration
|
|
5
6
|
class Engine < ::Rails::Engine
|
|
6
7
|
isolate_namespace PageflowScrolled
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
if Pageflow::RailsVersion.experimental?
|
|
10
|
+
lib = root.join('lib')
|
|
11
|
+
|
|
12
|
+
config.autoload_paths << lib
|
|
13
|
+
config.eager_load_paths << lib
|
|
14
|
+
|
|
15
|
+
initializer 'pageflow_scrolled.autoloading' do
|
|
16
|
+
Rails.autoloaders.main.ignore(
|
|
17
|
+
lib.join('generators'),
|
|
18
|
+
lib.join('tasks')
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
else
|
|
22
|
+
config.paths.add('lib', eager_load: true)
|
|
23
|
+
end
|
|
24
|
+
|
|
9
25
|
config.i18n.load_path += Dir[config.root.join('config', 'locales', '**', '*.yml').to_s]
|
|
10
26
|
|
|
11
27
|
initializer 'pageflow_scrolled.assets.precompile' do |app|
|
|
@@ -10,25 +10,49 @@ module PageflowScrolled
|
|
|
10
10
|
c.file_types.register(Pageflow::BuiltInFileType.image)
|
|
11
11
|
c.file_types.register(Pageflow::BuiltInFileType.video)
|
|
12
12
|
c.file_types.register(Pageflow::BuiltInFileType.audio)
|
|
13
|
+
c.file_types.register(Pageflow::BuiltInFileType.other)
|
|
13
14
|
|
|
14
15
|
c.revision_components.register(Storyline)
|
|
15
16
|
|
|
16
17
|
c.widget_types.register(ReactWidgetType.new(name: 'defaultNavigation',
|
|
17
18
|
role: 'header'),
|
|
18
19
|
default: true)
|
|
20
|
+
c.widget_types.register(ReactWidgetType.new(name: 'consentBar',
|
|
21
|
+
role: 'consent'),
|
|
22
|
+
default: true)
|
|
19
23
|
|
|
20
24
|
c.features.register('datawrapper_chart_embed_opt_in')
|
|
21
25
|
c.features.enable_by_default('datawrapper_chart_embed_opt_in')
|
|
22
26
|
c.features.register('iframe_embed_content_element')
|
|
27
|
+
c.features.register('image_gallery_content_element')
|
|
23
28
|
c.features.register('frontend_v2')
|
|
29
|
+
c.features.register('scrolled_entry_fragment_caching')
|
|
24
30
|
|
|
25
31
|
c.additional_frontend_seed_data.register(
|
|
26
32
|
'frontendVersion',
|
|
27
33
|
FRONTEND_VERSION_SEED_DATA
|
|
28
34
|
)
|
|
35
|
+
|
|
36
|
+
c.content_element_consent_vendors.register(
|
|
37
|
+
IFRAME_EMBED_CONSENT_VENDOR,
|
|
38
|
+
content_element_type_name: 'iframeEmbed'
|
|
39
|
+
)
|
|
29
40
|
end
|
|
30
41
|
end
|
|
31
42
|
|
|
43
|
+
IFRAME_EMBED_CONSENT_VENDOR = lambda do |configuration:, entry:, **|
|
|
44
|
+
return unless configuration['requireConsent']
|
|
45
|
+
|
|
46
|
+
uri = URI.parse(configuration['source'])
|
|
47
|
+
host_matchers = Pageflow.config_for(entry).consent_vendor_host_matchers
|
|
48
|
+
|
|
49
|
+
host_matchers.detect do |matcher, _|
|
|
50
|
+
uri.host =~ matcher
|
|
51
|
+
end&.last
|
|
52
|
+
rescue URI::InvalidURIError
|
|
53
|
+
nil
|
|
54
|
+
end
|
|
55
|
+
|
|
32
56
|
FRONTEND_VERSION_SEED_DATA = lambda do |request:, entry:, **|
|
|
33
57
|
if request.params[:frontend] == 'v2' || entry.feature_state('frontend_v2')
|
|
34
58
|
2
|
|
@@ -8,9 +8,10 @@ module PageflowScrolled
|
|
|
8
8
|
#
|
|
9
9
|
# @since 15.7
|
|
10
10
|
class ReactWidgetType < Pageflow::WidgetType
|
|
11
|
-
def initialize(role:, name:)
|
|
11
|
+
def initialize(role:, name:, enabled_in_editor: true)
|
|
12
12
|
@role = role
|
|
13
13
|
@name = name
|
|
14
|
+
@enabled_in_editor = enabled_in_editor
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
attr_reader :name
|
|
@@ -23,6 +24,10 @@ module PageflowScrolled
|
|
|
23
24
|
[@role]
|
|
24
25
|
end
|
|
25
26
|
|
|
27
|
+
def enabled_in_editor?
|
|
28
|
+
@enabled_in_editor
|
|
29
|
+
end
|
|
30
|
+
|
|
26
31
|
def render(*)
|
|
27
32
|
''
|
|
28
33
|
end
|
|
@@ -33,8 +33,7 @@ namespace :pageflow_scrolled do
|
|
|
33
33
|
|
|
34
34
|
account = seeds.account(name: 'storybook-seed') do |account_in_progress|
|
|
35
35
|
account_in_progress.features_configuration =
|
|
36
|
-
account_in_progress.features_configuration.merge('scrolled_entry_type' => true
|
|
37
|
-
'frontend_v2' => true)
|
|
36
|
+
account_in_progress.features_configuration.merge('scrolled_entry_type' => true)
|
|
38
37
|
end
|
|
39
38
|
|
|
40
39
|
seeds.sample_scrolled_entry(
|