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
@@ -10,15 +10,8 @@ module Pageflow
10
10
 
11
11
  has_many :pages, through: :chapters
12
12
 
13
- delegate :entry, to: :revision
14
-
15
- def copy_to(revision)
16
- storyline = dup
17
- revision.storylines << storyline
13
+ nested_revision_components :chapters
18
14
 
19
- chapters.each do |chapter|
20
- chapter.copy_to(storyline)
21
- end
22
- end
15
+ delegate :entry, to: :revision
23
16
  end
24
17
  end
@@ -1,7 +1,8 @@
1
1
  <div id="login">
2
2
  <h2><%= render_or_call_method_or_proc_on(self, active_admin_application.site_title) %> - <%= title t('pageflow.initial_password.title') %></h2>
3
3
 
4
- <%= devise_error_messages! %>
4
+ <%= render "devise/shared/error_messages", resource: resource %>
5
+
5
6
  <%= active_admin_form_for(resource, as: resource_name, url: admin_initial_password_path, html: { method: :put }) do |f|
6
7
  f.inputs do
7
8
  f.input :password
@@ -1,4 +1,4 @@
1
- json.(theme, :name)
1
+ json.(theme, :name, :options)
2
2
 
3
3
  json.preview_image_url(image_url(theme.preview_image_path))
4
4
  json.preview_thumbnail_url(image_url(theme.preview_thumbnail_path))
@@ -0,0 +1,5 @@
1
+ Pageflow.configure do |config|
2
+ # Can be moved to PageflowPaged::Plugin once Pageflow::Storyline has
3
+ # been renamed to PageflowPaged::Storyline.
4
+ config.revision_components.register(Pageflow::Storyline)
5
+ end
@@ -2218,6 +2218,21 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2218
2218
  }
2219
2219
  });
2220
2220
 
2221
+ function _defineProperty(obj, key, value) {
2222
+ if (key in obj) {
2223
+ Object.defineProperty(obj, key, {
2224
+ value: value,
2225
+ enumerable: true,
2226
+ configurable: true,
2227
+ writable: true
2228
+ });
2229
+ } else {
2230
+ obj[key] = value;
2231
+ }
2232
+
2233
+ return obj;
2234
+ }
2235
+
2221
2236
  function template$9(data) {
2222
2237
  var __p = '';
2223
2238
  __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';
@@ -2260,24 +2275,32 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2260
2275
  this.validate();
2261
2276
  },
2262
2277
  onChange: function onChange() {
2263
- var view = this;
2264
- this.saveDisplayProperty();
2265
- this.validate().done(function () {
2266
- view.save();
2278
+ var _this = this;
2279
+
2280
+ this.validate().then(function () {
2281
+ return _this.save();
2282
+ }, function () {
2283
+ return _this.saveDisplayProperty();
2267
2284
  });
2268
2285
  },
2269
2286
  saveDisplayProperty: function saveDisplayProperty() {
2287
+ this.model.unset(this.options.propertyName, {
2288
+ silent: true
2289
+ });
2270
2290
  this.model.set(this.options.displayPropertyName, this.ui.input.val());
2271
- this.model.unset(this.options.propertyName);
2272
2291
  },
2273
2292
  save: function save() {
2274
- var view = this;
2275
- $.when(this.transformPropertyValue(this.ui.input.val())).then(function (value) {
2276
- view.model.set(view.options.propertyName, value);
2293
+ var _this2 = this;
2294
+
2295
+ var value = this.ui.input.val();
2296
+ $.when(this.transformPropertyValue(value)).then(function (transformedValue) {
2297
+ var _this2$model$set;
2298
+
2299
+ _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));
2277
2300
  });
2278
2301
  },
2279
2302
  load: function load() {
2280
- this.ui.input.val(this.model.get(this.options.displayPropertyName));
2303
+ this.ui.input.val(this.model.has(this.options.displayPropertyName) ? this.model.get(this.options.displayPropertyName) : this.model.get(this.options.propertyName));
2281
2304
  this.onLoad();
2282
2305
  },
2283
2306
 
@@ -2912,7 +2935,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2912
2935
  };
2913
2936
  })();
2914
2937
 
2915
- function _defineProperty(obj, key, value) {
2938
+ function _defineProperty$1(obj, key, value) {
2916
2939
  if (key in obj) {
2917
2940
  Object.defineProperty(obj, key, {
2918
2941
  value: value,
@@ -2947,7 +2970,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2947
2970
 
2948
2971
  if (i % 2) {
2949
2972
  ownKeys(Object(source), true).forEach(function (key) {
2950
- _defineProperty(target, key, source[key]);
2973
+ _defineProperty$1(target, key, source[key]);
2951
2974
  });
2952
2975
  } else if (Object.getOwnPropertyDescriptors) {
2953
2976
  Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
@@ -6409,7 +6432,8 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6409
6432
 
6410
6433
  model.set(options.foreignKeyAttribute, parentModel.id);
6411
6434
  });
6412
- this.listenTo(parentModel, 'destroy', function () {
6435
+ this.listenTo(parentModel, 'destroy dependentDestroy', function () {
6436
+ this.invoke('trigger', 'dependentDestroy');
6413
6437
  this.clear();
6414
6438
  });
6415
6439
 
@@ -6825,7 +6849,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6825
6849
  function modelLifecycleTrackingView(_ref) {
6826
6850
  var classNames = _ref.classNames;
6827
6851
  return {
6828
- events: _defineProperty({}, "click .".concat(classNames.retryButton), function click() {
6852
+ events: _defineProperty$1({}, "click .".concat(classNames.retryButton), function click() {
6829
6853
  editor.failures.retry();
6830
6854
  return false;
6831
6855
  }),
@@ -4724,7 +4724,11 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
4724
4724
  loop: options.loop,
4725
4725
  controls: options.controls,
4726
4726
  html5: {
4727
- nativeCaptions: !isAudio && browser.has('iphone platform')
4727
+ nativeCaptions: !isAudio && browser.has('iphone platform'),
4728
+ // Only used by pageflow-scrolled
4729
+ vhs: {
4730
+ useBandwidthFromLocalStorage: true
4731
+ }
4728
4732
  },
4729
4733
  bufferUnderrunWaiting: true,
4730
4734
  fallbackToMutedAutoplay: !isAudio,
@@ -4830,7 +4834,8 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
4830
4834
  loop = _ref$loop === void 0 ? false : _ref$loop,
4831
4835
  _ref$controls = _ref.controls,
4832
4836
  controls = _ref$controls === void 0 ? false : _ref$controls,
4833
- altText = _ref.altText;
4837
+ altText = _ref.altText,
4838
+ onRelease = _ref.onRelease;
4834
4839
  var player = undefined;
4835
4840
 
4836
4841
  if (!this.unAllocatedPlayers[playerType]) {
@@ -4858,6 +4863,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
4858
4863
  player.updateMediaEventsContext(mediaEventsContextData);
4859
4864
  this.allocatedPlayers[playerType].push(player);
4860
4865
  player.playerId = playerId || this.allocatedPlayers[playerType].length;
4866
+ player.releaseCallback = onRelease;
4861
4867
  return player;
4862
4868
  } else {
4863
4869
  console.log('no player found for allocation');
@@ -4883,6 +4889,11 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
4883
4889
  player.poster('');
4884
4890
  clearTextTracks(player);
4885
4891
  this.unAllocatedPlayers[type].push(player);
4892
+
4893
+ if (player.releaseCallback) {
4894
+ player.releaseCallback();
4895
+ player.releaseCallback = null;
4896
+ }
4886
4897
  }
4887
4898
  }
4888
4899
  }, {
@@ -5499,9 +5510,14 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
5499
5510
  return new ChapterFilter(state$1.entryData);
5500
5511
  };
5501
5512
 
5513
+ var readyDeferred = new $.Deferred();
5514
+ var ready = readyDeferred.promise();
5515
+
5502
5516
  var cookieNotice = {
5503
5517
  request: function request() {
5504
- events.trigger('cookie_notice:request');
5518
+ ready.then(function () {
5519
+ events.trigger('cookie_notice:request');
5520
+ });
5505
5521
  }
5506
5522
  };
5507
5523
 
@@ -7026,9 +7042,6 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
7026
7042
  });
7027
7043
  })($);
7028
7044
 
7029
- var readyDeferred = new $.Deferred();
7030
- var ready = readyDeferred.promise();
7031
-
7032
7045
  (function ($) {
7033
7046
  var boundaries = {
7034
7047
  back: 'top',
@@ -4,5 +4,33 @@ module PageflowScrolled
4
4
  def scrolled_theme_asset_path(theme, path)
5
5
  asset_pack_path("media/pageflow-scrolled/themes/#{theme.name}/#{path}")
6
6
  end
7
+
8
+ def scrolled_theme_stylesheet_pack_tags(theme)
9
+ safe_join(theme.options.fetch(:stylesheet_packs, []).map do |pack|
10
+ stylesheet_pack_tag(pack, media: 'all')
11
+ end)
12
+ end
13
+
14
+ def scrolled_theme_properties_style_tag(theme)
15
+ declarations = [
16
+ scrolled_theme_deep_declarations(theme.options.fetch(:font_family, {}), 'font_family'),
17
+ scrolled_theme_deep_declarations(theme.options.fetch(:colors, {}), 'color')
18
+ ].flatten
19
+
20
+ content_tag('style', raw(":root {\n#{declarations.join("\n")}\n}\n"))
21
+ end
22
+
23
+ private
24
+
25
+ def scrolled_theme_deep_declarations(hash, suffix, prefix = [])
26
+ hash.flat_map do |key, value|
27
+ if value.is_a?(Hash)
28
+ scrolled_theme_deep_declarations(value, suffix, [*prefix, key])
29
+ else
30
+ name = [*prefix, key, suffix].join('_')
31
+ "--theme-#{name.dasherize}: #{value};"
32
+ end
33
+ end
34
+ end
7
35
  end
8
36
  end
@@ -2,6 +2,7 @@ module PageflowScrolled
2
2
  class Chapter < Pageflow::ApplicationRecord
3
3
  include Pageflow::SerializedConfiguration
4
4
  include Pageflow::AutoGeneratedPermaId
5
+ include Pageflow::NestedRevisionComponent
5
6
 
6
7
  belongs_to :storyline, touch: true
7
8
  has_many :sections,
@@ -10,6 +11,8 @@ module PageflowScrolled
10
11
  inverse_of: :chapter
11
12
  has_many :content_elements, through: :sections
12
13
 
14
+ nested_revision_components :sections
15
+
13
16
  attr_accessor :revision # used on :create to lazily create storyline
14
17
  before_validation :ensure_storyline, on: :create
15
18
 
@@ -18,15 +21,6 @@ module PageflowScrolled
18
21
  .where(pageflow_scrolled_storylines: {revision_id: revision})
19
22
  end
20
23
 
21
- def copy_to(storyline)
22
- chapter = dup
23
- storyline.chapters << chapter
24
-
25
- sections.each do |section|
26
- section.copy_to(chapter)
27
- end
28
- end
29
-
30
24
  private
31
25
 
32
26
  def ensure_storyline
@@ -3,6 +3,7 @@ module PageflowScrolled
3
3
  class ContentElement < Pageflow::ApplicationRecord
4
4
  include Pageflow::SerializedConfiguration
5
5
  include Pageflow::AutoGeneratedPermaId
6
+ include Pageflow::NestedRevisionComponent
6
7
 
7
8
  belongs_to :section
8
9
 
@@ -11,10 +12,6 @@ module PageflowScrolled
11
12
  .where(pageflow_scrolled_storylines: {revision_id: revision})
12
13
  end
13
14
 
14
- def copy_to(section)
15
- section.content_elements << dup
16
- end
17
-
18
15
  # @api private
19
16
  class Batch
20
17
  def initialize(section, items)
@@ -2,6 +2,7 @@ module PageflowScrolled
2
2
  class Section < Pageflow::ApplicationRecord
3
3
  include Pageflow::SerializedConfiguration
4
4
  include Pageflow::AutoGeneratedPermaId
5
+ include Pageflow::NestedRevisionComponent
5
6
 
6
7
  belongs_to :chapter
7
8
  has_many :content_elements,
@@ -9,18 +10,11 @@ module PageflowScrolled
9
10
  dependent: :destroy,
10
11
  inverse_of: :section
11
12
 
13
+ nested_revision_components :content_elements
14
+
12
15
  def self.all_for_revision(revision)
13
16
  joins(chapter: {storyline: :revision})
14
17
  .where(pageflow_scrolled_storylines: {revision_id: revision})
15
18
  end
16
-
17
- def copy_to(chapter)
18
- section = dup
19
- chapter.sections << section
20
-
21
- content_elements.each do |content_element|
22
- content_element.copy_to(section)
23
- end
24
- end
25
19
  end
26
20
  end
@@ -26,14 +26,6 @@ module PageflowScrolled
26
26
  -> { reorder(CONTENT_ELEMENTS_ORDER) },
27
27
  through: :sections
28
28
 
29
- def copy_to(revision)
30
- storyline = dup
31
- storyline.revision = revision
32
- storyline.save!
33
-
34
- chapters.each do |chapter|
35
- chapter.copy_to(storyline)
36
- end
37
- end
29
+ nested_revision_components :chapters
38
30
  end
39
31
  end
@@ -0,0 +1,10 @@
1
+ <div class="globalNotices">
2
+ <div class="unsupported">
3
+ <%= t('pageflow_scrolled.public.unsupported_browser') %>
4
+ </div>
5
+ <noscript>
6
+ <div>
7
+ <%= t('pageflow_scrolled.public.js_required') %>
8
+ </div>
9
+ </noscript>
10
+ </div>
@@ -6,7 +6,8 @@
6
6
  <meta charset="utf-8" />
7
7
  <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
8
 
9
- <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700&display=swap" rel="stylesheet">
9
+ <%= scrolled_theme_stylesheet_pack_tags(@entry.theme) %>
10
+ <%= scrolled_theme_properties_style_tag(@entry.theme) %>
10
11
 
11
12
  <%= social_share_meta_tags_for(@entry) %>
12
13
  <%= meta_tags_for_entry(@entry) %>
@@ -15,7 +16,7 @@
15
16
 
16
17
  <%= javascript_include_tag 'pageflow_scrolled/legacy' %>
17
18
 
18
- <%= stylesheet_pack_tag 'pageflow-scrolled-theme' %>
19
+ <%= stylesheet_pack_tag 'pageflow-scrolled-theme', media: 'all' %>
19
20
 
20
21
  <%= render_widget_head_fragments(@entry, scope: @widget_scope) %>
21
22
 
@@ -34,7 +35,9 @@
34
35
  <body>
35
36
  <%= structured_data_for_entry(@entry) unless @skip_structured_data %>
36
37
 
37
- <noscript>You need to enable JavaScript to run this app.</noscript>
38
+ <%= render 'pageflow_scrolled/entries/global_notices' %>
39
+
40
+ <div id="fullscreenRoot"></div>
38
41
  <div id="root"><%= render_scrolled_entry(@entry) unless @skip_ssr %></div>
39
42
 
40
43
  <div id='template-widget-container'>
@@ -28,6 +28,7 @@ de:
28
28
  left: Links eingerückt
29
29
  right: Rechts eingerückt
30
30
  sticky: Sticky
31
+ wide: Breit
31
32
  content_elements:
32
33
  dataWrapperChart:
33
34
  attributes:
@@ -183,6 +184,14 @@ de:
183
184
  name: Video Embed
184
185
  tabs:
185
186
  general: Video-Embed
187
+ vrImage:
188
+ attributes:
189
+ image:
190
+ label: 360°-Bild
191
+ initialPitch:
192
+ label: Initialer Gierungswinkel
193
+ initialYaw:
194
+ label: Initialer Neigungswinkel
186
195
  edit_chapter:
187
196
  attributes:
188
197
  summary:
@@ -583,6 +592,10 @@ de:
583
592
  public:
584
593
  chart:
585
594
  default_title: Interaktives Diagramm
595
+ enter_fullscreen: Vollbild
596
+ exit_fullscreen: Vollbild verlassen
597
+ image_rights: Bildrechte
598
+ js_required: Bitte aktivieren Sie JavaScript, um diese Website korrekt anzuzeigen.
586
599
  languages:
587
600
  ar: Arabisch
588
601
  cs: Tschechisch
@@ -643,6 +656,7 @@ de:
643
656
  opt_out:
644
657
  prompt: Um externe Dienste auszuschalten, %{link} klicken.
645
658
  prompt_link: hier
659
+ unsupported_browser: Diese Website verwendet Funktionen, die Ihr Browser nicht unterstützt. Bitte aktualisieren Sie Ihren Browser auf eine aktuelle Version.
646
660
  video_qualities:
647
661
  annotations:
648
662
  4k: 4K
@@ -28,6 +28,7 @@ en:
28
28
  left: Floated left
29
29
  right: Floated right
30
30
  sticky: Sticky
31
+ wide: Wide
31
32
  content_elements:
32
33
  dataWrapperChart:
33
34
  attributes:
@@ -183,6 +184,14 @@ en:
183
184
  name: Video Embed
184
185
  tabs:
185
186
  general: Video-Embed
187
+ vrImage:
188
+ attributes:
189
+ image:
190
+ label: 360° Image
191
+ initialPitch:
192
+ label: Initial Pitch
193
+ initialYaw:
194
+ label: Initial Yaw
186
195
  edit_chapter:
187
196
  attributes:
188
197
  summary:
@@ -368,55 +377,7 @@ en:
368
377
  The switch at the bottom of the sidebar next to the help button can be used to switch to the phone preview. This allows you to test how your entry looks and works in portrait format.
369
378
  sections:
370
379
  menu_item: Section Options
371
- text: |-
372
- # Section Options
373
-
374
- A click in an empty area of a section will display a selection rectangle around the section. On the right side of the selection rectangle you will find a button with a pencil icon that allows you to edit the options of the section in the sidebar.
375
-
376
- ## Layout
377
-
378
- The **Foreground Positioning** option allows you to select how the contents of the section should be arranged horizontally. For example, if the background of the section is on the right side, text and content elements can be positioned on the left side and vice versa. For backgrounds in the total or a centred motif, the content elements can be positioned in the middle.
379
-
380
- By selecting a **gradient function**, a sufficient contrast between text and background can be ensured. With the **shadow**, the background is darkened or lightened with a colour gradient. With the **Card** setting, the content elements are displayed on a surface with rounded corners.
381
-
382
- ## Background
383
-
384
- Either an **image**, a **colour** or a **video loop** can be displayed in the background of the section. For background images and video, the important (to be emphasised, essential) part of the image can be marked. This motif area is then initially not covered by the scrolling foreground in both desktop and mobile device displays. Further information about the "motif areas" here.
385
-
386
- The **Background image (portrait)** option can be used to optionally specify an alternative image to be used if the screen aspect ratio of a terminal device is higher than wide, for example on smartphones and tablets in portrait mode. The image can be configured as an alternative to the background image in landscape mode, from which otherwise important parts might be cut off.
387
-
388
- ## Atmo Audio
389
-
390
- With the **"Atmo"**, each section can play sound in the background, regardless of the content element. It can be determined whether a sound can only be heard in one section or continues over several sections without interruption. Simply select the same audio file for the following sections under **Options** as Atmo. In this way chapters can be acoustically separated from each other and coherent pages can be interwoven more strongly.
391
-
392
- When playing audio and video, you can also select whether the background sound should continue to play normally or more quietly during media playback, or whether it should fade out completely. The setting of the ambience sounds can be accessed on each page via the **Options** tab. If the atmosphere disturbs you while editing your entry in the editor, you can temporarily mute it with the key combination **Alt + a**. To reactivate the Atmo, simply press **Alt + a** again.
393
-
394
-
395
- ## Transitions
396
-
397
- For each section a transition effect to the next section can be selected. The transition has a different effect on the background and the foreground. To set the transition from the currently selected section to the next, **click in the background of the section** and then on the **arrow button** in the upper right corner. The following **transitions** are available
398
-
399
- ## Crossfade
400
-
401
- Soft fade from section A to section B.
402
-
403
- ## Scroll in/out
404
-
405
- Both sections are scrolled in and out.
406
-
407
- ## Overlay
408
-
409
- Section B overlays section A from below.
410
-
411
- ## Expose
412
-
413
- Section A moves up as you scroll and exposes the section B below.
414
-
415
- ## Scrolling with static backgrounds
416
-
417
- Section B scrolls over the static section A.
418
-
419
- The selected setting always defines the transition from the previous to the currently selected section. The transition affects the background and foreground differently. The **Cross-Fade All** and **Cross-Fade Background Only** effects are only available when the **Use Full Viewport-Height** option is enabled.
380
+ text: "# Section Options\n\nA click in an empty area of a section will display a selection rectangle around the section. On the right side of the selection rectangle you will find a button with a pencil icon that allows you to edit the options of the section in the sidebar.\n\n## Layout\n\nThe **Foreground Positioning** option allows you to select how the contents of the section should be arranged horizontally. For example, if the background of the section is on the right side, text and content elements can be positioned on the left side and vice versa. For backgrounds in the total or a centred motif, the content elements can be positioned in the middle.\n\nBy selecting a **gradient function**, a sufficient contrast between text and background can be ensured. With the **shadow**, the background is darkened or lightened with a colour gradient. With the **Card** setting, the content elements are displayed on a surface with rounded corners.\n\n## Background\n\nEither an **image**, a **colour** or a **video loop** can be displayed in the background of the section. For background images and video, the important (to be emphasised, essential) part of the image can be marked. This motif area is then initially not covered by the scrolling foreground in both desktop and mobile device displays. Further information about the \"motif areas\" here.\n\nThe **Background image (portrait)** option can be used to optionally specify an alternative image to be used if the screen aspect ratio of a terminal device is higher than wide, for example on smartphones and tablets in portrait mode. The image can be configured as an alternative to the background image in landscape mode, from which otherwise important parts might be cut off.\n\n## Atmo Audio\n\nWith the **\"Atmo\"**, each section can play sound in the background, regardless of the content element. It can be determined whether a sound can only be heard in one section or continues over several sections without interruption. Simply select the same audio file for the following sections under **Options** as Atmo. In this way chapters can be acoustically separated from each other and coherent pages can be interwoven more strongly.\n\nWhen playing audio and video, you can also select whether the background sound should continue to play normally or more quietly during media playback, or whether it should fade out completely. The setting of the ambience sounds can be accessed on each page via the **Options** tab. If the atmosphere disturbs you while editing your entry in the editor, you can temporarily mute it with the key combination **Alt + a**. To reactivate the Atmo, simply press **Alt + a** again.\n\n\n## Transitions\n\nA **transition effect** can be selected between every two sections. \nClick in the background of a section to select it. On the right side \nof the selection rectangle, buttons with two interlocking arrows as \nsymbols appear at the borders of the neighbouring sections. \n\nClick on one of the buttons to select the transition effect for the section \nborder in the sidebar.\n\nThe **Fade** effect is only available between sections for which the \n**Full Viewport Height** option has been activated.\n"
420
381
  inline_editing:
421
382
  add_content_element: Add new element
422
383
  cancel: Cancel
@@ -450,6 +411,10 @@ en:
450
411
  public:
451
412
  chart:
452
413
  default_title: Interactive chart
414
+ enter_fullscreen: Fullscreen
415
+ exit_fullscreen: Exit fullscreen
416
+ image_rights: Image rights
417
+ js_required: Please activate JavaScript to make this website display correctly.
453
418
  languages:
454
419
  ar: Arabic
455
420
  cs: Czech
@@ -510,6 +475,7 @@ en:
510
475
  opt_out:
511
476
  prompt: To opt out of displaying external embeds, change your settings %{link}.
512
477
  prompt_link: here
478
+ unsupported_browser: This website uses features that your browser doesn't support. Please upgrade to a recent version of your browser.
513
479
  video_qualities:
514
480
  annotations:
515
481
  4k: 4K