pageflow 16.1.0 → 16.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +70 -194
  3. data/README.md +6 -5
  4. data/app/assets/images/pageflow/admin/icons/published_with_noindex.svg +4 -0
  5. data/app/assets/javascripts/pageflow/dist/ui.js +1 -0
  6. data/app/assets/stylesheets/pageflow/admin/active_admin_patches.scss +1 -1
  7. data/app/assets/stylesheets/pageflow/admin/entries.scss +4 -0
  8. data/app/assets/stylesheets/pageflow/admin/publication_state_indicator.scss +4 -0
  9. data/app/assets/stylesheets/pageflow/editor/base.scss +0 -1
  10. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +55 -6
  11. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +12 -1
  12. data/app/assets/stylesheets/pageflow/ui/forms.scss +3 -3
  13. data/app/assets/stylesheets/pageflow/{editor/wysihtml5.scss → ui/input/text_area_input.scss} +13 -1
  14. data/app/assets/stylesheets/pageflow/ui.scss +1 -0
  15. data/app/controllers/pageflow/editor/entry_publications_controller.rb +5 -1
  16. data/app/controllers/pageflow/editor/file_import_controller.rb +1 -1
  17. data/app/controllers/pageflow/entries_controller.rb +2 -2
  18. data/app/helpers/pageflow/entries_helper.rb +2 -0
  19. data/app/helpers/pageflow/meta_tags_helper.rb +2 -1
  20. data/app/helpers/pageflow/page_types_helper.rb +4 -4
  21. data/app/helpers/pageflow/revision_file_helper.rb +3 -3
  22. data/app/helpers/pageflow/social_share_helper.rb +2 -2
  23. data/app/models/concerns/pageflow/entry_publication_states.rb +9 -0
  24. data/app/models/concerns/pageflow/uploadable_file.rb +5 -0
  25. data/app/models/pageflow/account.rb +2 -2
  26. data/app/models/pageflow/entry.rb +7 -5
  27. data/app/models/pageflow/entry_at_revision.rb +2 -0
  28. data/app/models/pageflow/image_file.rb +20 -5
  29. data/app/models/pageflow/image_file_url_templates.rb +7 -1
  30. data/app/models/pageflow/revision.rb +6 -4
  31. data/app/models/pageflow/site.rb +2 -2
  32. data/app/models/pageflow/sitemaps.rb +1 -0
  33. data/app/models/pageflow/used_file.rb +8 -0
  34. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +1 -7
  35. data/app/views/components/pageflow/admin/revisions_tab.rb +8 -0
  36. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
  37. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +1 -0
  38. data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +1 -0
  39. data/app/views/pageflow/image_files/_image_file.json.jbuilder +1 -0
  40. data/app/views/pageflow/meta_tags/_entry.html.erb +1 -0
  41. data/config/initializers/features.rb +2 -0
  42. data/config/initializers/paperclip.rb +4 -0
  43. data/config/locales/de.yml +50 -0
  44. data/config/locales/en.yml +49 -0
  45. data/db/migrate/20231024062501_add_output_presences_to_image_files.rb +5 -0
  46. data/db/migrate/20231128124523_add_noindex_to_revisions.rb +5 -0
  47. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +266 -151
  48. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +8 -2
  49. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +1 -1
  50. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +1 -1
  51. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -1
  52. data/entry_types/paged/lib/pageflow_paged/engine.rb +7 -11
  53. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +9 -3
  54. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +6 -6
  55. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +21 -37
  56. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +1 -3
  57. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +1 -6
  58. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +17 -17
  59. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +4 -0
  60. data/entry_types/scrolled/config/locales/de.yml +47 -11
  61. data/entry_types/scrolled/config/locales/en.yml +42 -10
  62. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +22 -89
  63. data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +2 -1
  64. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +8 -12
  65. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +6 -0
  66. data/entry_types/scrolled/lib/pageflow_scrolled/web_app_manifest.rb +1 -1
  67. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/dummy.rake +1 -1
  68. data/entry_types/scrolled/package/config/webpack.js +26 -0
  69. data/entry_types/scrolled/package/contentElements-editor.js +36 -23
  70. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  71. data/entry_types/scrolled/package/contentElements-frontend.js +250 -94
  72. data/entry_types/scrolled/package/editor.js +331 -147
  73. data/entry_types/scrolled/package/frontend/{EditableInlineText.module-fa9e3aff.js → EditableInlineText.module-6ee0e024.js} +463 -275
  74. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-10a1d600.js → PhonePlatformContext-b28d991a.js} +1 -1
  75. data/entry_types/scrolled/package/frontend/{ToggleFullscreenCornerButton-727cce0d.js → ToggleFullscreenCornerButton-8242f213.js} +1 -1
  76. data/entry_types/scrolled/package/frontend/{Viewer-169e14ca.js → Viewer-32cd1ac1.js} +4 -4
  77. data/entry_types/scrolled/package/frontend/{Viewer-ee1aa590.js → Viewer-6e4d14ed.js} +4 -4
  78. data/entry_types/scrolled/package/frontend/{arrowRight-92a34ccc.js → arrowRight-e42e6011.js} +2 -2
  79. data/entry_types/scrolled/package/frontend/{components-4a09bfa3.js → components-24363f97.js} +7 -6
  80. data/entry_types/scrolled/package/frontend/{i18n-ddd92820.js → i18n-71c39823.js} +84 -46
  81. data/entry_types/scrolled/package/frontend/{index-02378634.js → index-fc4b13e6.js} +3 -3
  82. data/entry_types/scrolled/package/frontend/index.css +1 -1
  83. data/entry_types/scrolled/package/frontend/index.js +90 -66
  84. data/entry_types/scrolled/package/frontend/{useContentElementEditorState-63045393.js → useContentElementEditorState-245f1986.js} +1 -1
  85. data/entry_types/scrolled/package/package.json +4 -3
  86. data/entry_types/scrolled/package/testHelpers.js +4 -2
  87. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  88. data/entry_types/scrolled/package/widgets/defaultNavigation.js +39 -4
  89. data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -0
  90. data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +49 -0
  91. data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -0
  92. data/entry_types/scrolled/package/widgets/textInlineFileRights.js +37 -0
  93. data/lib/generators/pageflow/resque/templates/resque.rake +1 -1
  94. data/lib/generators/pageflow/resque/templates/resque.rb +1 -1
  95. data/lib/generators/pageflow/routes/routes_generator.rb +1 -1
  96. data/lib/pageflow/configuration.rb +8 -1
  97. data/lib/pageflow/engine.rb +15 -58
  98. data/lib/pageflow/page_type.rb +1 -1
  99. data/lib/pageflow/paperclip_processors/webp.rb +63 -0
  100. data/lib/pageflow/rails_version.rb +2 -2
  101. data/lib/pageflow/user_mixin.rb +1 -1
  102. data/lib/pageflow/version.rb +1 -1
  103. data/package/config/jest/index.js +3 -1
  104. data/package/editor.js +272 -154
  105. data/package/frontend.js +8 -2
  106. data/package/ui.js +1 -0
  107. data/spec/factories/entries.rb +17 -0
  108. metadata +78 -56
@@ -19,9 +19,9 @@ module Pageflow
19
19
  #
20
20
  # @since 15.0
21
21
  # @returns UsedFile
22
- def find_file_in_entry(file_type, file_perma_id)
23
- raise 'No entry of type PublishedEntry or DraftEntry set.' unless @entry.present?
24
- @entry.find_file_by_perma_id(file_type, file_perma_id)
22
+ def find_file_in_entry(file_type, file_perma_id, entry = @entry)
23
+ raise 'No entry of type PublishedEntry or DraftEntry set.' unless entry.present?
24
+ entry.find_file_by_perma_id(file_type, file_perma_id)
25
25
  end
26
26
  end
27
27
  end
@@ -8,7 +8,7 @@ module Pageflow
8
8
  if target.is_a?(Page)
9
9
  render('pageflow/social_share/page_meta_tags', entry: @entry, page: @entry.share_target)
10
10
  else
11
- render('pageflow/social_share/entry_meta_tags', entry: @entry)
11
+ render('pageflow/social_share/entry_meta_tags', entry: target)
12
12
  end
13
13
  end
14
14
 
@@ -55,7 +55,7 @@ module Pageflow
55
55
 
56
56
  def social_share_entry_image_tags(entry)
57
57
  share_images = []
58
- image_file = find_file_in_entry(ImageFile, entry.share_image_id)
58
+ image_file = find_file_in_entry(ImageFile, entry.share_image_id, entry)
59
59
 
60
60
  if image_file
61
61
  image_url = image_file.thumbnail_url(:medium)
@@ -11,6 +11,9 @@ module Pageflow
11
11
  scope(:published_with_password_protection,
12
12
  -> { published.merge(Revision.with_password_protection) })
13
13
 
14
+ scope(:published_without_noindex,
15
+ -> { published.merge(Revision.without_noindex) })
16
+
14
17
  scope(:not_published,
15
18
  lambda do
16
19
  includes(:published_revision)
@@ -22,6 +25,8 @@ module Pageflow
22
25
  def publication_state
23
26
  if published_with_password_protection?
24
27
  'published_with_password_protection'
28
+ elsif published? && published_revision.noindex?
29
+ 'published_with_noindex'
25
30
  elsif published?
26
31
  'published_without_password_protection'
27
32
  else
@@ -45,6 +50,10 @@ module Pageflow
45
50
  published? ? published_revision.published_until : nil
46
51
  end
47
52
 
53
+ def last_published_with_noindex?
54
+ !!revisions.publications.first&.noindex
55
+ end
56
+
48
57
  module ClassMethods
49
58
  def with_publication_state(state)
50
59
  case state
@@ -38,6 +38,11 @@ module Pageflow
38
38
  end
39
39
  end
40
40
 
41
+ # see https://github.com/rails/rails/issues/50048
42
+ def file_name
43
+ attachment_on_s3_file_name
44
+ end
45
+
41
46
  def attachment
42
47
  attachment_on_s3
43
48
  end
@@ -28,11 +28,11 @@ module Pageflow
28
28
  [:features_configuration]
29
29
  end
30
30
 
31
- def self.ransackable_attributes(_auth_object)
31
+ def self.ransackable_attributes(_auth_object = nil)
32
32
  %w[id name]
33
33
  end
34
34
 
35
- def self.ransackable_associations(_auth_object)
35
+ def self.ransackable_associations(_auth_object = nil)
36
36
  []
37
37
  end
38
38
  end
@@ -29,8 +29,8 @@ module Pageflow
29
29
 
30
30
  has_many :imports, class_name: 'Pageflow::FileImport', dependent: :destroy
31
31
 
32
- has_one :draft, -> { editable }, :class_name => 'Revision'
33
- has_one :published_revision, -> { published }, :class_name => 'Revision'
32
+ has_one :draft, -> { editable }, class_name: 'Revision', inverse_of: :entry
33
+ has_one :published_revision, -> { published }, class_name: 'Revision', inverse_of: :entry
34
34
 
35
35
  has_one :edit_lock, :dependent => :destroy
36
36
 
@@ -88,6 +88,7 @@ module Pageflow
88
88
  revision.published_at = Time.now
89
89
  revision.published_until = options[:published_until]
90
90
  revision.password_protected = options[:password_protected]
91
+ revision.noindex = !!options[:noindex]
91
92
  end
92
93
  end
93
94
  end
@@ -111,6 +112,7 @@ module Pageflow
111
112
  revision.published_at = nil
112
113
  revision.published_until = nil
113
114
  revision.password_protected = nil
115
+ revision.noindex = nil
114
116
  end
115
117
  end
116
118
 
@@ -130,15 +132,15 @@ module Pageflow
130
132
  title.to_s.parameterize
131
133
  end
132
134
 
133
- def self.ransackable_attributes(_auth_object)
135
+ def self.ransackable_attributes(_auth_object = nil)
134
136
  %w[title type_name created_at edited_at first_published_at]
135
137
  end
136
138
 
137
- def self.ransackable_associations(_auth_object)
139
+ def self.ransackable_associations(_auth_object = nil)
138
140
  %w[account published_revision]
139
141
  end
140
142
 
141
- def self.ransackable_scopes(_)
143
+ def self.ransackable_scopes(_auth_object = nil)
142
144
  [:with_publication_state, :published]
143
145
  end
144
146
 
@@ -22,6 +22,7 @@ module Pageflow
22
22
  :password_digest,
23
23
  :to_model, :to_key, :to_param, :persisted?, :to_json,
24
24
  :first_published_at, :published_until, :published?,
25
+ :last_published_with_noindex?,
25
26
  :type_name,
26
27
  to: :entry)
27
28
 
@@ -35,6 +36,7 @@ module Pageflow
35
36
  :locale,
36
37
  :author, :publisher, :keywords,
37
38
  :published_at,
39
+ :noindex?,
38
40
  :configuration,
39
41
  to: :revision)
40
42
 
@@ -2,6 +2,9 @@ module Pageflow
2
2
  class ImageFile < ApplicationRecord
3
3
  include UploadableFile
4
4
  include ImageAndTextTrackProcessingStateMachine
5
+ include OutputSource
6
+
7
+ before_post_process :set_output_presences
5
8
 
6
9
  # used in paperclip initializer to interpolate the storage path
7
10
  # needs to be "processed_attachments" for images for legacy reasons
@@ -35,19 +38,19 @@ module Pageflow
35
38
  panorama_format = File.extname(attachment.original_filename) == '.png' ? :PNG : :JPG
36
39
 
37
40
  Pageflow
38
- .config.thumbnail_styles
41
+ .config.thumbnail_styles.transform_values { |options| options.merge(style_defaults) }
39
42
  .merge(
40
43
  print: {geometry: '300x300>',
41
- format: :JPG,
44
+ **style_defaults,
42
45
  convert_options: '-quality 10 -interlace Plane'},
43
46
  medium: {geometry: '1024x1024>',
44
- format: :JPG,
47
+ **style_defaults,
45
48
  convert_options: '-quality 70 -interlace Plane'},
46
49
  large: {geometry: '1920x1920>',
47
- format: :JPG,
50
+ **style_defaults,
48
51
  convert_options: '-quality 70 -interlace Plane'},
49
52
  ultra: {geometry: '3840x3840>',
50
- format: :JPG,
53
+ **style_defaults,
51
54
  convert_options: '-quality 90 -interlace Plane'},
52
55
  panorama_medium: {geometry: ImageFile.scale_down_to_cover(1024, 1024),
53
56
  format: panorama_format,
@@ -82,5 +85,17 @@ module Pageflow
82
85
  self.height = geo.height
83
86
  rescue Paperclip::Errors::NotIdentifiedByImageMagickError
84
87
  end
88
+
89
+ def style_defaults
90
+ if output_present?(:webp)
91
+ {format: :webp, processors: [:pageflow_webp]}
92
+ else
93
+ {format: :JPG}
94
+ end
95
+ end
96
+
97
+ def set_output_presences
98
+ self.output_presences = {webp: true} if entry&.feature_state('webp_images')
99
+ end
85
100
  end
86
101
  end
@@ -2,12 +2,18 @@ module Pageflow
2
2
  class ImageFileUrlTemplates
3
3
  def call
4
4
  styles.each_with_object({}) do |style, result|
5
- result[style] = UrlTemplate.from_attachment(example_file.attachment, style)
5
+ result[style] = replace_extension_with_placeholder(
6
+ UrlTemplate.from_attachment(example_file.attachment, style)
7
+ )
6
8
  end
7
9
  end
8
10
 
9
11
  private
10
12
 
13
+ def replace_extension_with_placeholder(url)
14
+ url.gsub(/.JPG$/, '.:processed_extension')
15
+ end
16
+
11
17
  def styles
12
18
  example_file.attachment_styles(example_file.attachment).keys + [:original]
13
19
  end
@@ -65,6 +65,8 @@ module Pageflow
65
65
  scope(:with_password_protection, -> { where('password_protected IS TRUE') })
66
66
  scope(:without_password_protection, -> { where('password_protected IS NOT TRUE') })
67
67
 
68
+ scope(:without_noindex, -> { where('noindex IS NOT TRUE') })
69
+
68
70
  scope :editable, -> { where('frozen_at IS NULL') }
69
71
  scope :frozen, -> { where('frozen_at IS NOT NULL') }
70
72
 
@@ -204,6 +206,10 @@ module Pageflow
204
206
  .merge(read_attribute(:configuration) || {})
205
207
  end
206
208
 
209
+ def self.ransackable_attributes(_auth_object = nil)
210
+ %w[published_at]
211
+ end
212
+
207
213
  private
208
214
 
209
215
  def files(model)
@@ -232,9 +238,5 @@ module Pageflow
232
238
  def available_themes
233
239
  @available_themes ||= Pageflow.config_for(entry).themes
234
240
  end
235
-
236
- def self.ransackable_attributes(_auth_object)
237
- %w[published_at]
238
- end
239
241
  end
240
242
  end
@@ -56,11 +56,11 @@ module Pageflow
56
56
  first_paged_entry_template.theme_name
57
57
  end
58
58
 
59
- def self.ransackable_attributes(_auth_object)
59
+ def self.ransackable_attributes(_auth_object = nil)
60
60
  %w[name]
61
61
  end
62
62
 
63
- def self.ransackable_associations(_auth_object)
63
+ def self.ransackable_associations(_auth_object = nil)
64
64
  %w[account]
65
65
  end
66
66
  end
@@ -6,6 +6,7 @@ module Pageflow
6
6
  site
7
7
  .entries
8
8
  .published_without_password_protection
9
+ .published_without_noindex
9
10
  .order('first_published_at DESC')
10
11
  )
11
12
  end
@@ -23,6 +23,14 @@ module Pageflow
23
23
  @usage.perma_id
24
24
  end
25
25
 
26
+ def cache_key
27
+ [@file.cache_key, @usage.cache_key].join('-')
28
+ end
29
+
30
+ def cache_key_with_version
31
+ [@file.cache_key_with_version, @usage.cache_key_with_version].join('-')
32
+ end
33
+
26
34
  # Not delegated by default. Required to allow using instances in
27
35
  # Active Record conditions.
28
36
 
@@ -79,13 +79,7 @@ module Pageflow
79
79
  # This is also the reason we can not use SimpleDelegator here
80
80
  # and also delegate_missing in Rails 5 would not work.
81
81
  def method_missing(method, *args, **kwargs, &block)
82
- # Required for Ruby 2.6. Remove together with
83
- # Pageflow::RailsVersion.experimental? conditionals.
84
- if kwargs.present?
85
- @context.public_send(method, *args, **kwargs, &block)
86
- else
87
- @context.public_send(method, *args, &block)
88
- end
82
+ @context.public_send(method, *args, **kwargs, &block)
89
83
  end
90
84
  # rubocop:enable Style/MethodMissing
91
85
  end
@@ -39,6 +39,14 @@ module Pageflow
39
39
  end
40
40
  end
41
41
 
42
+ if revision.noindex?
43
+ span(class: 'publication_state_indicator published_with_noindex') do
44
+ span(class: 'tooltip_bubble') do
45
+ t('pageflow.admin.entries.noindex')
46
+ end
47
+ end
48
+ end
49
+
42
50
  if revision.password_protected?
43
51
  span(class: 'publication_state_indicator published_with_password_protection') do
44
52
  span(class: 'tooltip_bubble') do
@@ -4,6 +4,7 @@ json.call(Pageflow.config,
4
4
  :default_published_until_duration_in_months,
5
5
  :available_locales,
6
6
  :available_public_locales,
7
+ :available_file_licenses,
7
8
  :available_text_track_kinds,
8
9
  :available_share_providers)
9
10
  json.file_types Pageflow.config_for(entry).file_types do |file_type|
@@ -6,6 +6,7 @@ json.default_file_rights entry.account.default_file_rights
6
6
  json.published(entry.published?)
7
7
  json.publishable(can?(:publish, entry.to_model))
8
8
  json.password_protected(entry.password_digest.present?)
9
+ json.last_published_with_noindex(entry.last_published_with_noindex?)
9
10
 
10
11
  json.metadata do
11
12
  json.(entry,
@@ -6,6 +6,7 @@ json.entry do
6
6
  json.(@entry_publication.entry, :published_until)
7
7
  json.published(@entry_publication.entry.published?)
8
8
  json.password_protected(@entry_publication.entry.password_digest.present?)
9
+ json.last_published_with_noindex(@entry_publication.entry.last_published_with_noindex?)
9
10
  end
10
11
  json.exhausted_html(render_html_partial('pageflow/editor/quotas/published_entries_exhausted',
11
12
  entry: @entry_publication.entry,
@@ -1,2 +1,3 @@
1
1
  json.call(image_file, :width, :height)
2
+ json.processed_extension image_file.output_present?(:webp) ? 'webp' : 'JPG'
2
3
  json.created_at image_file.created_at.try(:utc).try(:iso8601, 0)
@@ -2,3 +2,4 @@
2
2
  <% if keywords.present? %><meta name="keywords" content="<%= keywords %>"><% end %>
3
3
  <% if author.present? %><meta name="author" content="<%= author %>"><% end %>
4
4
  <% if publisher.present? %><meta name="publisher" content="<%= publisher %>"><% end %>
5
+ <% if noindex %><meta name="robots" content="noindex"><% end %>
@@ -1,5 +1,7 @@
1
1
  Pageflow.configure do |config|
2
+ config.features.register('webp_images')
2
3
  config.features.register('highdef_video_encoding')
3
4
  config.features.register('force_fullhd_video_quality')
5
+ config.features.register('large_player_pool')
4
6
  config.features.register('selectable_themes')
5
7
  end
@@ -1,5 +1,6 @@
1
1
  require 'pageflow/paperclip_processors/vtt'
2
2
  require 'pageflow/paperclip_processors/audio_waveform'
3
+ require 'pageflow/paperclip_processors/webp'
3
4
  require 'pageflow/paperclip_processors/noop'
4
5
 
5
6
  Paperclip.interpolates(:pageflow_s3_root) do |_attachment, _style|
@@ -33,6 +34,9 @@ Paperclip.interpolates(:pageflow_hls_qualities) do |attachment, _style|
33
34
  end
34
35
 
35
36
  Paperclip.configure do |config|
37
+ config.register_processor(:pageflow_webp,
38
+ Pageflow::PaperclipProcessors::Webp)
39
+
36
40
  config.register_processor(:pageflow_vtt,
37
41
  Pageflow::PaperclipProcessors::Vtt)
38
42
 
@@ -443,6 +443,7 @@ de:
443
443
  pageflow/entry:
444
444
  publication_states:
445
445
  not_published: Nicht veröffentlicht
446
+ published_with_noindex: Veröffentlicht aber aus Suchmaschinen ausgeschlossen
446
447
  published_with_password_protection: Mit Passwortschutz veröffentlicht
447
448
  published_without_password_protection: Ohne Passwortschutz veröffentlicht
448
449
  share_providers:
@@ -826,6 +827,7 @@ de:
826
827
  members: Mitglieder
827
828
  no_members: Es sind keine Redakteure zugeordnet.
828
829
  no_revisions: Bisher keine Revisionen
830
+ noindex: Aus Suchmaschinen ausgeschlossen
829
831
  not_allowed_to_see_entry_types: Sie sind nicht berechtigt, die verfügbaren Beitrags-Typen für dieses Konto abzurufen
830
832
  not_published: Nicht veröffentlicht
831
833
  password_protected: Mit Passwortschutz
@@ -1125,6 +1127,10 @@ de:
1125
1127
  file_name:
1126
1128
  column_header: Dateiname
1127
1129
  label: Dateiname
1130
+ license:
1131
+ blank: "(Nicht angegeben)"
1132
+ inline_help: Fügt der Rechteangabe im Beitrag einen Link zur Lizenz hinzu.
1133
+ label: Lizenz
1128
1134
  original_url:
1129
1135
  label: Original
1130
1136
  rights:
@@ -1134,6 +1140,21 @@ de:
1134
1140
  column_header: Rechte
1135
1141
  inline_help: Wird im Copyright-Bereich des Beitrags angezeigt.
1136
1142
  label: Rechte
1143
+ rights_display:
1144
+ inline_help: |-
1145
+ Lege fest, ob die Rechteangabe der Datei in der
1146
+ zusammenfassenden Liste in der Info-Box angezeigt werden
1147
+ soll oder unmittelbar an der Stelle im Beitrag, wo die
1148
+ Datei verwendet wird.
1149
+ label: Rechte anzeigen
1150
+ values:
1151
+ credits: In der Info-Box
1152
+ inline: Am verwendenden Element
1153
+ source_url:
1154
+ inline_help: |-
1155
+ Rechteangabe mit einem Link zur ursprünglichen Quelle
1156
+ oder zum Author der Datei versehen.
1157
+ label: Quell-URL
1137
1158
  text_tracks:
1138
1159
  label: Untertitel
1139
1160
  settings_dialog_tabs:
@@ -1351,6 +1372,12 @@ de:
1351
1372
  already_published_without_password_help: Dieser Beitrag ist im Moment ohne Passwortschutz veröffentlicht. Nach Festlegen eines Passworts ist kein öffentlicher Zugriff mehr möglich.
1352
1373
  date: Datum
1353
1374
  files_pending_notice: Bitte warten Sie bis alle Dateien des Beitrags verarbeitet wurden und überprüfen Sie das Ergebnis. Der Beitrag kann dann veröffentlicht werden.
1375
+ noindex: Suchmaschinen ausschließen
1376
+ noindex_help: |
1377
+ Ein Meta-Tag setzen, das Crawler von Suchmaschinen wie
1378
+ Google oder Bing anweist, den veröffentlichten Beitrag
1379
+ nicht in den Index aufzunehmen. Der Beitrag erscheint
1380
+ daher nicht in Suchergebnissen.
1354
1381
  not_published_notice: Dieser Beitrag ist zur Zeit nicht veröffentlicht.
1355
1382
  password: Passwort
1356
1383
  password_help: Teilen Sie Ihren veröffentlichten Beitrag nur mit bestimmten Personen. Besucher benötigen dann das von Ihnen festgelegte Passwort, um den Beitrag ansehen zu können.
@@ -1513,6 +1540,25 @@ de:
1513
1540
  label: Übersicht-Button anzeigen
1514
1541
  overview_button_enabled_disabled:
1515
1542
  inline_help: Diese Funktion steht in diesem Theme nicht zur Verfügung.
1543
+ file_licenses:
1544
+ cc_by_4:
1545
+ name: CC-BY 4.0
1546
+ url: https://creativecommons.org/licenses/by/4.0/
1547
+ cc_by_nc_4:
1548
+ name: CC-BY-NC 4.0
1549
+ url: https://creativecommons.org/licenses/by-nc/4.0/
1550
+ cc_by_nc_nd_4:
1551
+ name: CC-BY-NC-ND 4.0
1552
+ url: https://creativecommons.org/licenses/by-nc-nd/4.0/
1553
+ cc_by_nc_sa_4:
1554
+ name: CC-BY-NC-SA 4.0
1555
+ url: https://creativecommons.org/licenses/by-sa-nc/4.0/
1556
+ cc_by_nd_4:
1557
+ name: CC-BY-ND 4.0
1558
+ url: https://creativecommons.org/licenses/by-nd/4.0/
1559
+ cc_by_sa_4:
1560
+ name: CC-BY-SA 4.0
1561
+ url: https://creativecommons.org/licenses/by-sa/4.0/
1516
1562
  help_entries:
1517
1563
  files:
1518
1564
  menu_item: Dateien verwalten
@@ -1748,6 +1794,8 @@ de:
1748
1794
  tr: Türkisch
1749
1795
  unknown: "(Unbekannt)"
1750
1796
  zh: Chinesisch
1797
+ large_player_pool:
1798
+ feature_name: Vergrößerter Player-Pool
1751
1799
  media_loading_spinner:
1752
1800
  widget_type_name: Media
1753
1801
  page_transitions:
@@ -1920,6 +1968,8 @@ de:
1920
1968
  page_type_name: Video
1921
1969
  waveform_player_controls:
1922
1970
  feature_name: Waveform-Steuerlement-Variante für Audio-Seite
1971
+ webp_images:
1972
+ feature_name: webp Bilder
1923
1973
  widgets:
1924
1974
  none: "(Kein)"
1925
1975
  roles:
@@ -443,6 +443,7 @@ en:
443
443
  pageflow/entry:
444
444
  publication_states:
445
445
  not_published: Not published
446
+ published_with_noindex: Published but excluded from search engines
446
447
  published_with_password_protection: Published with password protection
447
448
  published_without_password_protection: Published without password protection
448
449
  share_providers:
@@ -826,6 +827,7 @@ en:
826
827
  members: Members
827
828
  no_members: No members assigned
828
829
  no_revisions: No versions yet
830
+ noindex: Excluded from search engines
829
831
  not_allowed_to_see_entry_types: You are not allowed to access the available story types for this account.
830
832
  not_published: Not yet published
831
833
  password_protected: Password protected
@@ -1123,6 +1125,10 @@ en:
1123
1125
  file_name:
1124
1126
  column_header: File name
1125
1127
  label: File name
1128
+ license:
1129
+ blank: "(Not specified)"
1130
+ inline_help: Adds a link to the license in the credit note.
1131
+ label: License
1126
1132
  original_url:
1127
1133
  label: Original
1128
1134
  rights:
@@ -1132,6 +1138,20 @@ en:
1132
1138
  column_header: Rights
1133
1139
  inline_help: Displayed in copyright area of story.
1134
1140
  label: Rights
1141
+ rights_display:
1142
+ inline_help: |-
1143
+ Decide if the file's credit note should be displayed in
1144
+ the summary list in the info box, or right at the place
1145
+ in the entry where the file is used.
1146
+ label: Display rights
1147
+ values:
1148
+ credits: In the info box
1149
+ inline: At the element where it is used
1150
+ source_url:
1151
+ inline_help: |-
1152
+ Turns the credit note into a link to the original source
1153
+ or to the author of the file.
1154
+ label: Source URL
1135
1155
  text_tracks:
1136
1156
  label: Subtitles
1137
1157
  settings_dialog_tabs:
@@ -1349,6 +1369,12 @@ en:
1349
1369
  already_published_without_password_help: This story is published without a password at the moment. Setting a password will prevent public access from now on.
1350
1370
  date: Date
1351
1371
  files_pending_notice: Please wait until all files have been processed and check the results. You may then publish your story.
1372
+ noindex: Exclude from search engines
1373
+ noindex_help: |
1374
+ Set a meta tag that instructs crawlers of search engines
1375
+ like Google or Bing to not include the published entry in
1376
+ the index. The entry will, thus, not show up in search
1377
+ results.
1352
1378
  not_published_notice: This story is currently not published.
1353
1379
  password: Password
1354
1380
  password_help: Restrict access to the published version of this story. Visitors will have to enter a password.
@@ -1511,6 +1537,25 @@ en:
1511
1537
  label: Show 'Overview' button
1512
1538
  overview_button_enabled_disabled:
1513
1539
  inline_help: This option is not available for your theme.
1540
+ file_licenses:
1541
+ cc_by_4:
1542
+ name: CC-BY 4.0
1543
+ url: https://creativecommons.org/licenses/by/4.0/
1544
+ cc_by_nc_4:
1545
+ name: CC-BY-NC 4.0
1546
+ url: https://creativecommons.org/licenses/by-nc/4.0/
1547
+ cc_by_nc_nd_4:
1548
+ name: CC-BY-NC-ND 4.0
1549
+ url: https://creativecommons.org/licenses/by-nc-nd/4.0/
1550
+ cc_by_nc_sa_4:
1551
+ name: CC-BY-NC-SA 4.0
1552
+ url: https://creativecommons.org/licenses/by-sa-nc/4.0/
1553
+ cc_by_nd_4:
1554
+ name: CC-BY-ND 4.0
1555
+ url: https://creativecommons.org/licenses/by-nd/4.0/
1556
+ cc_by_sa_4:
1557
+ name: CC-BY-SA 4.0
1558
+ url: https://creativecommons.org/licenses/by-sa/4.0/
1514
1559
  help_entries:
1515
1560
  files:
1516
1561
  menu_item: Manage Files
@@ -1741,6 +1786,8 @@ en:
1741
1786
  tr: Turkish
1742
1787
  unknown: "(Unknown)"
1743
1788
  zh: Chinese
1789
+ large_player_pool:
1790
+ feature_name: Large Player-Pool
1744
1791
  media_loading_spinner:
1745
1792
  widget_type_name: Media
1746
1793
  page_transitions:
@@ -1916,6 +1963,8 @@ en:
1916
1963
  page_type_name: Video
1917
1964
  waveform_player_controls:
1918
1965
  feature_name: Waveform player controls variant for audio page
1966
+ webp_images:
1967
+ feature_name: webp images
1919
1968
  widgets:
1920
1969
  none: "(none)"
1921
1970
  roles:
@@ -0,0 +1,5 @@
1
+ class AddOutputPresencesToImageFiles < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :pageflow_image_files, :output_presences, :text
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddNoindexToRevisions < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :pageflow_revisions, :noindex, :boolean
4
+ end
5
+ end