pageflow 16.0.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 +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(
|