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
@@ -4075,7 +4075,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
|
|
4075
4075
|
};
|
4076
4076
|
|
4077
4077
|
player.targetVolume = function () {
|
4078
|
-
return settings.get('volume') * volumeFactor;
|
4078
|
+
return (options.ignoreVolumeSetting ? 1 : settings.get('volume')) * volumeFactor;
|
4079
4079
|
};
|
4080
4080
|
|
4081
4081
|
function listenToVolumeSetting() {
|
@@ -4446,7 +4446,21 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
|
|
4446
4446
|
mediaPlayer.volumeFading = volumeFading;
|
4447
4447
|
mediaPlayer.loadWaiting = loadWaiting;
|
4448
4448
|
mediaPlayer.hooks = hooks;
|
4449
|
-
mediaPlayer.asyncPlay = asyncPlay;
|
4449
|
+
mediaPlayer.asyncPlay = asyncPlay; // Replacement for Underscore's throttle, because scrolled entries
|
4450
|
+
// don't have Underscore anymore
|
4451
|
+
|
4452
|
+
function throttle(func, timeFrame) {
|
4453
|
+
var lastTime = 0;
|
4454
|
+
return function (options) {
|
4455
|
+
var now = new Date();
|
4456
|
+
func = func.bind(this);
|
4457
|
+
|
4458
|
+
if (now - lastTime >= timeFrame) {
|
4459
|
+
func(options);
|
4460
|
+
lastTime = now;
|
4461
|
+
}
|
4462
|
+
};
|
4463
|
+
}
|
4450
4464
|
|
4451
4465
|
var mediaEvents = function mediaEvents(player, context) {
|
4452
4466
|
function triggerMediaEvent(name) {
|
@@ -4466,6 +4480,9 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
|
|
4466
4480
|
player.on('timeupdate', function () {
|
4467
4481
|
triggerMediaEvent('timeupdate');
|
4468
4482
|
});
|
4483
|
+
player.on('timeupdate', throttle(function () {
|
4484
|
+
triggerMediaEvent('timeupdate_throttled');
|
4485
|
+
}, 5000));
|
4469
4486
|
player.on('pause', function () {
|
4470
4487
|
triggerMediaEvent('pause');
|
4471
4488
|
});
|
@@ -4984,6 +5001,9 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
|
|
4984
5001
|
player.on('timeupdate', function () {
|
4985
5002
|
triggerMediaEvent('timeupdate');
|
4986
5003
|
});
|
5004
|
+
player.on('timeupdate', throttle(function () {
|
5005
|
+
triggerMediaEvent('timeupdate_throttled');
|
5006
|
+
}, 5000));
|
4987
5007
|
player.on('pause', function () {
|
4988
5008
|
triggerMediaEvent('pause');
|
4989
5009
|
});
|
@@ -5125,11 +5145,13 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
|
|
5125
5145
|
nativeCaptions: !isAudio && browser.has('iphone platform'),
|
5126
5146
|
// Only used by pageflow-scrolled
|
5127
5147
|
vhs: {
|
5128
|
-
useBandwidthFromLocalStorage: true
|
5148
|
+
useBandwidthFromLocalStorage: true,
|
5149
|
+
usePlayerObjectFit: true
|
5129
5150
|
}
|
5130
5151
|
},
|
5131
5152
|
bufferUnderrunWaiting: true,
|
5132
5153
|
fallbackToMutedAutoplay: !isAudio,
|
5154
|
+
ignoreVolumeSetting: true,
|
5133
5155
|
volumeFading: true,
|
5134
5156
|
hooks: {},
|
5135
5157
|
mediaEvents: true,
|
@@ -5358,6 +5380,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
|
|
5358
5380
|
tagName: type
|
5359
5381
|
});
|
5360
5382
|
mediaEl.setAttribute('src', blankSources[type].src);
|
5383
|
+
player.muted(true);
|
5361
5384
|
this.unAllocatedPlayers[type].push(player);
|
5362
5385
|
return player;
|
5363
5386
|
}
|
@@ -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
|