pageflow 15.4.0 → 15.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pageflow might be problematic. Click here for more details.

Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +94 -166
  3. data/admins/pageflow/user.rb +0 -2
  4. data/app/assets/javascripts/pageflow/dist/ui.js +32 -9
  5. data/app/assets/javascripts/pageflow/editor/vendor.js +1 -0
  6. data/app/assets/stylesheets/pageflow/themes/default/page.scss +7 -0
  7. data/app/models/pageflow/chapter.rb +3 -9
  8. data/app/models/pageflow/page.rb +1 -4
  9. data/app/models/pageflow/revision.rb +0 -4
  10. data/app/models/pageflow/storyline.rb +2 -9
  11. data/app/views/pageflow/admin/initial_passwords/edit.html.erb +2 -1
  12. data/app/views/pageflow/themes/_theme.json.jbuilder +1 -1
  13. data/config/initializers/revision_components.rb +5 -0
  14. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +37 -13
  15. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +19 -6
  16. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +28 -0
  17. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +3 -9
  18. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +1 -4
  19. data/entry_types/scrolled/app/models/pageflow_scrolled/section.rb +3 -9
  20. data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +1 -9
  21. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/_global_notices.html.erb +10 -0
  22. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +6 -3
  23. data/entry_types/scrolled/config/locales/de.yml +14 -0
  24. data/entry_types/scrolled/config/locales/en.yml +15 -49
  25. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +43 -6
  26. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +26 -0
  27. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/create_bundle_symlinks_for_yarn.rake +32 -0
  28. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/dummy.rake +8 -0
  29. data/entry_types/scrolled/lib/tasks/{pageflow_scrolled_tasks.rake → pageflow_scrolled/storybook.rake} +53 -14
  30. data/entry_types/scrolled/package/contentElements-editor.js +66 -7
  31. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  32. data/entry_types/scrolled/package/contentElements-frontend.js +109 -52
  33. data/entry_types/scrolled/package/editor.js +34 -25
  34. data/entry_types/scrolled/package/frontend/EditableText-7093fd0e.js +1071 -0
  35. data/entry_types/scrolled/package/frontend/Viewer-e49e7807.js +387 -0
  36. data/entry_types/scrolled/package/frontend/{Wavesurfer-b88b02e0.js → Wavesurfer-0adf5667.js} +1 -1
  37. data/entry_types/scrolled/package/frontend/{components-3ead1b4a.js → components-6a6793ca.js} +2 -1
  38. data/entry_types/scrolled/package/frontend/i18n-4dc6c377.js +1092 -0
  39. data/entry_types/scrolled/package/frontend/index.css +2 -2
  40. data/entry_types/scrolled/package/frontend/index.js +358 -179
  41. data/entry_types/scrolled/package/frontend/useBrowserFeature-91a4c29d.js +33 -0
  42. data/entry_types/scrolled/package/package.json +3 -5
  43. data/lib/generators/pageflow/initializer/templates/pageflow.rb +0 -7
  44. data/lib/pageflow/entry_export_import/revision_serialization.rb +15 -13
  45. data/lib/pageflow/entry_export_import/revision_serialization/import.rb +18 -26
  46. data/lib/pageflow/entry_type_configuration.rb +1 -0
  47. data/lib/pageflow/nested_revision_component.rb +49 -0
  48. data/lib/pageflow/revision_component.rb +6 -2
  49. data/lib/pageflow/user_mixin.rb +2 -1
  50. data/lib/pageflow/version.rb +1 -1
  51. data/package/editor.js +2 -1
  52. data/package/frontend.js +13 -2
  53. data/package/ui.js +32 -9
  54. data/spec/factories/test_revision_components.rb +4 -0
  55. metadata +18 -10
  56. data/entry_types/scrolled/package/frontend/EditableText-43c50894.js +0 -2161
@@ -0,0 +1,33 @@
1
+ import { browser } from 'pageflow/frontend';
2
+ import React, { createContext, useContext, useState, useEffect } from 'react';
3
+ import { _ as _slicedToArray } from './i18n-4dc6c377.js';
4
+
5
+ var BrowserFeaturesAvailableContext = createContext(); // Browser feature detection is not available during server side
6
+ // rendering. To prevent mismatches during hydration, we keep features
7
+ // disabled in the initial render. Since hydration only starts after
8
+ // feature detection has finished, we can immediately re-render once
9
+ // the provider has mounted.
10
+
11
+ function BrowserFeaturesProvider(_ref) {
12
+ var children = _ref.children;
13
+
14
+ var _useState = useState(false),
15
+ _useState2 = _slicedToArray(_useState, 2),
16
+ isAvailable = _useState2[0],
17
+ setIsAvailable = _useState2[1];
18
+
19
+ useEffect(function () {
20
+ return setIsAvailable(true);
21
+ }, []);
22
+ return (
23
+ /*#__PURE__*/
24
+ React.createElement(BrowserFeaturesAvailableContext.Provider, {
25
+ value: isAvailable
26
+ }, children)
27
+ );
28
+ }
29
+ function useBrowserFeature(name) {
30
+ return useContext(BrowserFeaturesAvailableContext) && browser.has(name);
31
+ }
32
+
33
+ export { BrowserFeaturesProvider as B, useBrowserFeature as u };
@@ -7,6 +7,7 @@
7
7
  "author": "Codevise Solutions GmbH <info@codevise.de>",
8
8
  "license": "MIT",
9
9
  "dependencies": {
10
+ "@egjs/view360": "^3.4.3",
10
11
  "core-js": "^3.6.5",
11
12
  "debounce": "^1.2.0",
12
13
  "deep-assign": "^3.0.0",
@@ -22,19 +23,16 @@
22
23
  "react-tooltip": "^3.11.1",
23
24
  "react_ujs": "^2.6.1",
24
25
  "reselect": "^4.0.0",
26
+ "screenfull": "^5.1.0",
25
27
  "slate": "^0.57.3",
26
28
  "slate-react": "^0.57.3",
27
29
  "slugify": "^1.4.6",
28
30
  "striptags": "^3.1.1",
29
31
  "use-context-selector": "^1.2.11",
30
- "video.js": "6.2.7",
31
- "videojs-contrib-dash": "2.11.0",
32
+ "video.js": "https://github.com/tf/video.js#pageflow-scrolled-5",
32
33
  "wavesurfer.js": "https://github.com/tf/wavesurfer.js#patches",
33
34
  "whatwg-fetch": "^3.0.0"
34
35
  },
35
- "resolutions": {
36
- "video.js": "6.2.7"
37
- },
38
36
  "peerDependencies": {
39
37
  "pageflow": "15.1.0",
40
38
  "react": "^16.9.0",
@@ -5,7 +5,6 @@ Pageflow.configure do |config|
5
5
 
6
6
  # Entry type plugins
7
7
  config.plugin(PageflowPaged.plugin)
8
- config.plugin(PageflowScrolled.plugin)
9
8
 
10
9
  # Plugins that provide page types and widget types.
11
10
  config.plugin(Pageflow.built_in_page_types_plugin)
@@ -23,12 +22,6 @@ Pageflow.configure do |config|
23
22
  # config.themes.register(:my_custom_theme)
24
23
  end
25
24
 
26
- config.for_entry_type(PageflowScrolled.entry_type) do |entry_type_config|
27
- entry_type_config.themes.register(:default,
28
- logo_alt_text: 'Pageflow',
29
- theme_color: '#ffffff')
30
- end
31
-
32
25
  # String to interpolate into paths of files generated by paperclip
33
26
  # preprocessors. This allows to refresh cdn caches after
34
27
  # reprocessing attachments.
@@ -10,19 +10,6 @@ module Pageflow
10
10
  widgets: {
11
11
  except: [:subject_id, :subject_type]
12
12
  },
13
- storylines: {
14
- except: :revision_id,
15
- include: {
16
- chapters: {
17
- except: :storyline_id,
18
- include: {
19
- pages: {
20
- except: :chapter_id
21
- }
22
- }
23
- }
24
- }
25
- },
26
13
  file_usages: {
27
14
  except: [:revision_id],
28
15
  include: {
@@ -51,6 +38,21 @@ module Pageflow
51
38
  revision_component
52
39
  .attributes.except('revision_id')
53
40
  .merge('class_name' => revision_component.class.name)
41
+ .merge('components' => serialize_nested_revision_components(revision_component))
42
+ end
43
+ end
44
+
45
+ def serialize_nested_revision_components(revision_component)
46
+ collection_names = revision_component.nested_revision_component_collection_names
47
+
48
+ collection_names.each_with_object({}) do |collection_name, result|
49
+ collection = revision_component.send(collection_name)
50
+
51
+ result[collection_name] = collection.map do |nested_component|
52
+ nested_component
53
+ .attributes
54
+ .merge('components' => serialize_nested_revision_components(nested_component))
55
+ end
54
56
  end
55
57
  end
56
58
  end
@@ -17,7 +17,6 @@ module Pageflow
17
17
  Revision.transaction do
18
18
  revision = create_revision(data)
19
19
 
20
- create_storylines_chapters_and_pages(revision, data['storylines'])
21
20
  create_widgets(revision, data['widgets'])
22
21
  create_revision_components(revision, data['components'])
23
22
  create_files(revision, data['file_usages'])
@@ -46,30 +45,6 @@ module Pageflow
46
45
  end
47
46
  end
48
47
 
49
- def create_storylines_chapters_and_pages(revision, storylines_data)
50
- storylines_data.each do |storyline_data|
51
- chapters_data = storyline_data.delete('chapters')
52
- storyline = revision.storylines.create!(storyline_data.except(*DEFAULT_REMOVAL_COLUMNS))
53
-
54
- create_chapters_and_pages(storyline, chapters_data)
55
- end
56
- end
57
-
58
- def create_chapters_and_pages(storyline, chapters_data)
59
- chapters_data.each do |chapter_data|
60
- pages_data = chapter_data.delete('pages')
61
- chapter = storyline.chapters.create!(chapter_data.except(*DEFAULT_REMOVAL_COLUMNS))
62
-
63
- create_pages(chapter, pages_data)
64
- end
65
- end
66
-
67
- def create_pages(chapter, pages_data)
68
- pages_data.each do |page_data|
69
- chapter.pages.create!(page_data.except(*DEFAULT_REMOVAL_COLUMNS))
70
- end
71
- end
72
-
73
48
  def create_widgets(revision, widgets_data)
74
49
  widgets_data.each do |widget_data|
75
50
  revision.widgets.create!(widget_data.except(*DEFAULT_REMOVAL_COLUMNS))
@@ -78,9 +53,26 @@ module Pageflow
78
53
 
79
54
  def create_revision_components(revision, revision_components_data)
80
55
  revision_components_data.each do |component_data|
56
+ nested_compontents_data = component_data.delete('components')
57
+
81
58
  component_model = component_data.delete('class_name').constantize
82
59
  component_data['revision_id'] = revision.id
83
- component_model.create!(component_data.except(*DEFAULT_REMOVAL_COLUMNS))
60
+ component = component_model.create!(component_data.except(*DEFAULT_REMOVAL_COLUMNS))
61
+
62
+ create_nested_revision_components(component, nested_compontents_data)
63
+ end
64
+ end
65
+
66
+ def create_nested_revision_components(revision_component, nested_compontents_data)
67
+ nested_compontents_data.each do |collection_name, components_data|
68
+ components_data.each do |component_data|
69
+ nested_compontents_data = component_data.delete('components')
70
+
71
+ collection = revision_component.send(collection_name)
72
+ nested_component = collection.create!(component_data.except(*DEFAULT_REMOVAL_COLUMNS))
73
+
74
+ create_nested_revision_components(nested_component, nested_compontents_data)
75
+ end
84
76
  end
85
77
  end
86
78
 
@@ -11,6 +11,7 @@ module Pageflow
11
11
 
12
12
  attr_reader :features
13
13
 
14
+ delegate :file_importers, to: :@config
14
15
  delegate :file_types, to: :@config
15
16
  delegate :help_entries, to: :@config
16
17
  delegate :hooks, to: :@config
@@ -0,0 +1,49 @@
1
+ module Pageflow
2
+ # Include in models that are declared as nested revision components
3
+ # of other revision components.
4
+ #
5
+ # @since 15.5
6
+ module NestedRevisionComponent
7
+ # Shared functionality of revision components and nested revision
8
+ # components.
9
+ module Container
10
+ extend ActiveSupport::Concern
11
+
12
+ included do
13
+ cattr_accessor :nested_revision_component_collection_names, default: []
14
+ end
15
+
16
+ # @api private
17
+ def copy_nested_revision_component_to(record)
18
+ nested_revision_component_collection_names.each do |collection_name|
19
+ send(collection_name).each do |nested|
20
+ nested.copy_to(record.send(collection_name))
21
+ end
22
+ end
23
+ end
24
+
25
+ # Macro methods to declare nested revision components
26
+ module ClassMethods
27
+ # Call this macro in the body of a class which includes
28
+ # `RevisionComponent` or `NestedRevisionComponent` and pass
29
+ # the name of an association that shall be included when the
30
+ # revision component is copied to a new revision. The
31
+ # associated model needs to be a `NestedRevisionComponent`.
32
+ def nested_revision_components(*collection_names)
33
+ self.nested_revision_component_collection_names = collection_names
34
+ end
35
+ end
36
+ end
37
+
38
+ extend ActiveSupport::Concern
39
+ include Container
40
+
41
+ # @api private
42
+ def copy_to(collection)
43
+ record = dup
44
+ collection << record
45
+
46
+ copy_nested_revision_component_to(record)
47
+ end
48
+ end
49
+ end
@@ -2,8 +2,9 @@ module Pageflow
2
2
  # RevisionComponent represents a model that is attached to the revision
3
3
  # mechanism of Pageflow.
4
4
  #
5
- # In order to be used as a ComponentModel a model is required to
6
- # have an integer field `perma_id` and a belongs_to field `revision`.
5
+ # In order to be used as a revision component, a model is required
6
+ # to have an integer field `perma_id` and a `revision_id` foreign
7
+ # key.
7
8
  module RevisionComponent
8
9
  extend ActiveSupport::Concern
9
10
 
@@ -13,6 +14,7 @@ module Pageflow
13
14
 
14
15
  included do
15
16
  include AutoGeneratedPermaId
17
+ include NestedRevisionComponent::Container
16
18
 
17
19
  belongs_to :revision, class_name: 'Pageflow::Revision', touch: true
18
20
  end
@@ -21,6 +23,8 @@ module Pageflow
21
23
  record = dup
22
24
  record.revision = revision
23
25
  record.save!
26
+
27
+ copy_nested_revision_component_to(record)
24
28
  end
25
29
 
26
30
  module ClassMethods
@@ -24,6 +24,7 @@ module Pageflow
24
24
  has_many :revisions, class_name: 'Pageflow::Revision', foreign_key: :creator_id
25
25
 
26
26
  validates :first_name, :last_name, presence: true
27
+ validates_inclusion_of :locale, in: Pageflow.config.available_locales.map(&:to_s)
27
28
 
28
29
  scope :admins, -> { where(admin: true) }
29
30
  end
@@ -41,7 +42,7 @@ module Pageflow
41
42
  end
42
43
 
43
44
  def locale
44
- super.presence || I18n.default_locale
45
+ super.presence || I18n.default_locale.to_s
45
46
  end
46
47
 
47
48
  def update_with_password(attributes)
@@ -1,3 +1,3 @@
1
1
  module Pageflow
2
- VERSION = '15.4.0'.freeze
2
+ VERSION = '15.5.0'.freeze
3
3
  end
data/package/editor.js CHANGED
@@ -3578,7 +3578,8 @@ var ForeignKeySubsetCollection = SubsetCollection.extend({
3578
3578
 
3579
3579
  model.set(options.foreignKeyAttribute, parentModel.id);
3580
3580
  });
3581
- this.listenTo(parentModel, 'destroy', function () {
3581
+ this.listenTo(parentModel, 'destroy dependentDestroy', function () {
3582
+ this.invoke('trigger', 'dependentDestroy');
3582
3583
  this.clear();
3583
3584
  });
3584
3585
 
data/package/frontend.js CHANGED
@@ -1911,7 +1911,11 @@ var createMediaPlayer = function createMediaPlayer(options) {
1911
1911
  loop: options.loop,
1912
1912
  controls: options.controls,
1913
1913
  html5: {
1914
- nativeCaptions: !isAudio && browser.has('iphone platform')
1914
+ nativeCaptions: !isAudio && browser.has('iphone platform'),
1915
+ // Only used by pageflow-scrolled
1916
+ vhs: {
1917
+ useBandwidthFromLocalStorage: true
1918
+ }
1915
1919
  },
1916
1920
  bufferUnderrunWaiting: true,
1917
1921
  fallbackToMutedAutoplay: !isAudio,
@@ -2017,7 +2021,8 @@ function () {
2017
2021
  loop = _ref$loop === void 0 ? false : _ref$loop,
2018
2022
  _ref$controls = _ref.controls,
2019
2023
  controls = _ref$controls === void 0 ? false : _ref$controls,
2020
- altText = _ref.altText;
2024
+ altText = _ref.altText,
2025
+ onRelease = _ref.onRelease;
2021
2026
  var player = undefined;
2022
2027
 
2023
2028
  if (!this.unAllocatedPlayers[playerType]) {
@@ -2045,6 +2050,7 @@ function () {
2045
2050
  player.updateMediaEventsContext(mediaEventsContextData);
2046
2051
  this.allocatedPlayers[playerType].push(player);
2047
2052
  player.playerId = playerId || this.allocatedPlayers[playerType].length;
2053
+ player.releaseCallback = onRelease;
2048
2054
  return player;
2049
2055
  } else {
2050
2056
  console.log('no player found for allocation');
@@ -2070,6 +2076,11 @@ function () {
2070
2076
  player.poster('');
2071
2077
  clearTextTracks(player);
2072
2078
  this.unAllocatedPlayers[type].push(player);
2079
+
2080
+ if (player.releaseCallback) {
2081
+ player.releaseCallback();
2082
+ player.releaseCallback = null;
2083
+ }
2073
2084
  }
2074
2085
  }
2075
2086
  }, {
data/package/ui.js CHANGED
@@ -2243,6 +2243,21 @@ var TextAreaInputView = Marionette.ItemView.extend({
2243
2243
  }
2244
2244
  });
2245
2245
 
2246
+ function _defineProperty(obj, key, value) {
2247
+ if (key in obj) {
2248
+ Object.defineProperty(obj, key, {
2249
+ value: value,
2250
+ enumerable: true,
2251
+ configurable: true,
2252
+ writable: true
2253
+ });
2254
+ } else {
2255
+ obj[key] = value;
2256
+ }
2257
+
2258
+ return obj;
2259
+ }
2260
+
2246
2261
  function template$9(data) {
2247
2262
  var __p = '';
2248
2263
  __p += '<label>\n <span class="name"></span>\n <span class="inline_help"></span>\n</label>\n<input type="text" />\n<div class="validation"></div>\n';
@@ -2285,24 +2300,32 @@ var UrlInputView = Marionette.Layout.extend(
2285
2300
  this.validate();
2286
2301
  },
2287
2302
  onChange: function onChange() {
2288
- var view = this;
2289
- this.saveDisplayProperty();
2290
- this.validate().done(function () {
2291
- view.save();
2303
+ var _this = this;
2304
+
2305
+ this.validate().then(function () {
2306
+ return _this.save();
2307
+ }, function () {
2308
+ return _this.saveDisplayProperty();
2292
2309
  });
2293
2310
  },
2294
2311
  saveDisplayProperty: function saveDisplayProperty() {
2312
+ this.model.unset(this.options.propertyName, {
2313
+ silent: true
2314
+ });
2295
2315
  this.model.set(this.options.displayPropertyName, this.ui.input.val());
2296
- this.model.unset(this.options.propertyName);
2297
2316
  },
2298
2317
  save: function save() {
2299
- var view = this;
2300
- $.when(this.transformPropertyValue(this.ui.input.val())).then(function (value) {
2301
- view.model.set(view.options.propertyName, value);
2318
+ var _this2 = this;
2319
+
2320
+ var value = this.ui.input.val();
2321
+ $.when(this.transformPropertyValue(value)).then(function (transformedValue) {
2322
+ var _this2$model$set;
2323
+
2324
+ _this2.model.set((_this2$model$set = {}, _defineProperty(_this2$model$set, _this2.options.displayPropertyName, value), _defineProperty(_this2$model$set, _this2.options.propertyName, transformedValue), _this2$model$set));
2302
2325
  });
2303
2326
  },
2304
2327
  load: function load() {
2305
- this.ui.input.val(this.model.get(this.options.displayPropertyName));
2328
+ this.ui.input.val(this.model.has(this.options.displayPropertyName) ? this.model.get(this.options.displayPropertyName) : this.model.get(this.options.propertyName));
2306
2329
  this.onLoad();
2307
2330
  },
2308
2331
 
@@ -3,5 +3,9 @@ module Pageflow
3
3
  factory :test_revision_component, class: 'Pageflow::TestRevisionComponent' do
4
4
  text { 'Some text' }
5
5
  end
6
+
7
+ factory :test_composite_revision_component, class: 'Pageflow::TestCompositeRevisionComponent' do
8
+ text { 'Some text' }
9
+ end
6
10
  end
7
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pageflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.4.0
4
+ version: 15.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Codevise Solutions Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-08 00:00:00.000000000 Z
11
+ date: 2021-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -64,14 +64,14 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 4.4.0
67
+ version: 4.7.3
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 4.4.0
74
+ version: 4.7.3
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: yajl-ruby
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -1602,6 +1602,7 @@ files:
1602
1602
  - config/initializers/features.rb
1603
1603
  - config/initializers/help_entries.rb
1604
1604
  - config/initializers/paperclip.rb
1605
+ - config/initializers/revision_components.rb
1605
1606
  - config/initializers/symmetric_encryption.rb
1606
1607
  - config/initializers/view_components.rb
1607
1608
  - config/initializers/zencoder.rb
@@ -1720,6 +1721,7 @@ files:
1720
1721
  - entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_body.html.erb
1721
1722
  - entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb
1722
1723
  - entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder
1724
+ - entry_types/scrolled/app/views/pageflow_scrolled/entries/_global_notices.html.erb
1723
1725
  - entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb
1724
1726
  - entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder
1725
1727
  - entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder
@@ -1743,23 +1745,29 @@ files:
1743
1745
  - entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDesktop.svg
1744
1746
  - entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoMobile.svg
1745
1747
  - entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/unmute.mp3
1748
+ - entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt
1746
1749
  - entry_types/scrolled/lib/pageflow_scrolled.rb
1747
1750
  - entry_types/scrolled/lib/pageflow_scrolled/configuration.rb
1748
1751
  - entry_types/scrolled/lib/pageflow_scrolled/engine.rb
1749
1752
  - entry_types/scrolled/lib/pageflow_scrolled/plugin.rb
1750
1753
  - entry_types/scrolled/lib/pageflow_scrolled/seeds.rb
1751
- - entry_types/scrolled/lib/tasks/pageflow_scrolled_tasks.rake
1754
+ - entry_types/scrolled/lib/tasks/pageflow_scrolled/create_bundle_symlinks_for_yarn.rake
1755
+ - entry_types/scrolled/lib/tasks/pageflow_scrolled/dummy.rake
1756
+ - entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake
1752
1757
  - entry_types/scrolled/package/contentElements-editor.js
1753
1758
  - entry_types/scrolled/package/contentElements-frontend.css
1754
1759
  - entry_types/scrolled/package/contentElements-frontend.js
1755
1760
  - entry_types/scrolled/package/editor.js
1756
1761
  - entry_types/scrolled/package/frontend-server.js
1757
- - entry_types/scrolled/package/frontend/EditableText-43c50894.js
1758
- - entry_types/scrolled/package/frontend/Wavesurfer-b88b02e0.js
1759
- - entry_types/scrolled/package/frontend/components-3ead1b4a.js
1762
+ - entry_types/scrolled/package/frontend/EditableText-7093fd0e.js
1763
+ - entry_types/scrolled/package/frontend/Viewer-e49e7807.js
1764
+ - entry_types/scrolled/package/frontend/Wavesurfer-0adf5667.js
1765
+ - entry_types/scrolled/package/frontend/components-6a6793ca.js
1760
1766
  - entry_types/scrolled/package/frontend/getPrototypeOf-63c7c8e8.js
1767
+ - entry_types/scrolled/package/frontend/i18n-4dc6c377.js
1761
1768
  - entry_types/scrolled/package/frontend/index.css
1762
1769
  - entry_types/scrolled/package/frontend/index.js
1770
+ - entry_types/scrolled/package/frontend/useBrowserFeature-91a4c29d.js
1763
1771
  - entry_types/scrolled/package/package.json
1764
1772
  - entry_types/scrolled/spec/factories/chapters.rb
1765
1773
  - entry_types/scrolled/spec/factories/content_elements.rb
@@ -1850,6 +1858,7 @@ files:
1850
1858
  - lib/pageflow/help_entries.rb
1851
1859
  - lib/pageflow/help_entry.rb
1852
1860
  - lib/pageflow/hooks.rb
1861
+ - lib/pageflow/nested_revision_component.rb
1853
1862
  - lib/pageflow/news_item_api.rb
1854
1863
  - lib/pageflow/page_type.rb
1855
1864
  - lib/pageflow/page_type_feature.rb
@@ -1956,8 +1965,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1956
1965
  - !ruby/object:Gem::Version
1957
1966
  version: '0'
1958
1967
  requirements: []
1959
- rubyforge_project:
1960
- rubygems_version: 2.7.9
1968
+ rubygems_version: 3.0.8
1961
1969
  signing_key:
1962
1970
  specification_version: 4
1963
1971
  summary: Multimedia story telling for the web.