pageflow 16.1.0 → 17.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -221
  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/feature_target.rb +1 -1
  25. data/app/models/concerns/pageflow/output_source.rb +1 -1
  26. data/app/models/concerns/pageflow/serialized_configuration.rb +1 -1
  27. data/app/models/concerns/pageflow/uploadable_file.rb +5 -0
  28. data/app/models/pageflow/account.rb +2 -2
  29. data/app/models/pageflow/entry.rb +7 -5
  30. data/app/models/pageflow/entry_at_revision.rb +2 -0
  31. data/app/models/pageflow/entry_template.rb +4 -1
  32. data/app/models/pageflow/image_file.rb +20 -5
  33. data/app/models/pageflow/image_file_url_templates.rb +7 -1
  34. data/app/models/pageflow/revision.rb +7 -5
  35. data/app/models/pageflow/site.rb +2 -2
  36. data/app/models/pageflow/sitemaps.rb +1 -0
  37. data/app/models/pageflow/theme_customization.rb +2 -2
  38. data/app/models/pageflow/used_file.rb +8 -0
  39. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +1 -7
  40. data/app/views/components/pageflow/admin/revisions_tab.rb +8 -0
  41. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
  42. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +1 -0
  43. data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +1 -0
  44. data/app/views/pageflow/image_files/_image_file.json.jbuilder +1 -0
  45. data/app/views/pageflow/meta_tags/_entry.html.erb +1 -0
  46. data/config/initializers/features.rb +2 -0
  47. data/config/initializers/paperclip.rb +4 -0
  48. data/config/locales/de.yml +50 -0
  49. data/config/locales/en.yml +49 -0
  50. data/db/migrate/20231024062501_add_output_presences_to_image_files.rb +5 -0
  51. data/db/migrate/20231128124523_add_noindex_to_revisions.rb +5 -0
  52. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +266 -151
  53. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +8 -2
  54. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +1 -1
  55. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +1 -1
  56. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -1
  57. data/entry_types/paged/lib/pageflow_paged/engine.rb +7 -11
  58. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +9 -3
  59. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +6 -6
  60. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +21 -37
  61. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +1 -3
  62. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +1 -6
  63. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +17 -18
  64. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +4 -0
  65. data/entry_types/scrolled/config/locales/de.yml +47 -11
  66. data/entry_types/scrolled/config/locales/en.yml +42 -10
  67. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +22 -89
  68. data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +2 -1
  69. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +8 -12
  70. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +6 -0
  71. data/entry_types/scrolled/lib/pageflow_scrolled/web_app_manifest.rb +1 -1
  72. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/dummy.rake +1 -1
  73. data/entry_types/scrolled/package/config/webpack.js +26 -0
  74. data/entry_types/scrolled/package/contentElements-editor.js +36 -23
  75. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  76. data/entry_types/scrolled/package/contentElements-frontend.js +250 -94
  77. data/entry_types/scrolled/package/editor.js +331 -147
  78. data/entry_types/scrolled/package/frontend/{EditableInlineText.module-fa9e3aff.js → EditableInlineText.module-6ee0e024.js} +463 -275
  79. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-10a1d600.js → PhonePlatformContext-b28d991a.js} +1 -1
  80. data/entry_types/scrolled/package/frontend/{ToggleFullscreenCornerButton-727cce0d.js → ToggleFullscreenCornerButton-8242f213.js} +1 -1
  81. data/entry_types/scrolled/package/frontend/{Viewer-169e14ca.js → Viewer-32cd1ac1.js} +4 -4
  82. data/entry_types/scrolled/package/frontend/{Viewer-ee1aa590.js → Viewer-6e4d14ed.js} +4 -4
  83. data/entry_types/scrolled/package/frontend/{arrowRight-92a34ccc.js → arrowRight-e42e6011.js} +2 -2
  84. data/entry_types/scrolled/package/frontend/{components-4a09bfa3.js → components-24363f97.js} +7 -6
  85. data/entry_types/scrolled/package/frontend/{i18n-ddd92820.js → i18n-71c39823.js} +84 -46
  86. data/entry_types/scrolled/package/frontend/{index-02378634.js → index-fc4b13e6.js} +3 -3
  87. data/entry_types/scrolled/package/frontend/index.css +1 -1
  88. data/entry_types/scrolled/package/frontend/index.js +90 -66
  89. data/entry_types/scrolled/package/frontend/{useContentElementEditorState-63045393.js → useContentElementEditorState-245f1986.js} +1 -1
  90. data/entry_types/scrolled/package/package.json +4 -3
  91. data/entry_types/scrolled/package/testHelpers.js +4 -2
  92. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  93. data/entry_types/scrolled/package/widgets/defaultNavigation.js +39 -4
  94. data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -0
  95. data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +49 -0
  96. data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -0
  97. data/entry_types/scrolled/package/widgets/textInlineFileRights.js +37 -0
  98. data/lib/generators/pageflow/resque/templates/resque.rake +1 -1
  99. data/lib/generators/pageflow/resque/templates/resque.rb +1 -1
  100. data/lib/generators/pageflow/routes/routes_generator.rb +4 -3
  101. data/lib/pageflow/configuration.rb +8 -1
  102. data/lib/pageflow/engine.rb +15 -58
  103. data/lib/pageflow/page_type.rb +1 -1
  104. data/lib/pageflow/paperclip_processors/webp.rb +63 -0
  105. data/lib/pageflow/rails_version.rb +2 -2
  106. data/lib/pageflow/user_mixin.rb +1 -1
  107. data/lib/pageflow/version.rb +1 -1
  108. data/package/config/jest/index.js +3 -1
  109. data/package/editor.js +272 -154
  110. data/package/frontend.js +8 -2
  111. data/package/ui.js +1 -0
  112. data/spec/factories/entries.rb +17 -0
  113. metadata +78 -56
@@ -8,7 +8,7 @@ module Pageflow
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  included do
11
- serialize :output_presences, JSON
11
+ serialize :output_presences, coder: JSON
12
12
  end
13
13
 
14
14
  def present_outputs
@@ -7,7 +7,7 @@ module Pageflow
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- serialize :configuration, JSON
10
+ serialize :configuration, coder: JSON
11
11
  end
12
12
 
13
13
  def configuration
@@ -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,9 +2,12 @@ module Pageflow
2
2
  class EntryTemplate < ApplicationRecord
3
3
  include ThemeReferencer
4
4
  include SerializedConfiguration
5
- serialize :default_share_providers, JSON
5
+
6
+ serialize :default_share_providers, coder: JSON
7
+
6
8
  belongs_to :site
7
9
  delegate :enabled_feature_names, to: :site
10
+
8
11
  has_many :widgets, as: :subject, dependent: :destroy
9
12
 
10
13
  validates :site, presence: true
@@ -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
@@ -15,7 +15,7 @@ module Pageflow
15
15
 
16
16
  include ThemeReferencer
17
17
 
18
- serialize :share_providers, JSON
18
+ serialize :share_providers, coder: JSON
19
19
 
20
20
  belongs_to :entry, touch: :edited_at
21
21
  belongs_to :creator, class_name: 'User', optional: true
@@ -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
@@ -6,8 +6,8 @@ module Pageflow
6
6
  class ThemeCustomization < ApplicationRecord
7
7
  belongs_to :site
8
8
 
9
- serialize :overrides, JSON
10
- serialize :selected_file_ids, JSON
9
+ serialize :overrides, coder: JSON
10
+ serialize :selected_file_ids, coder: JSON
11
11
 
12
12
  has_many :uploaded_files, class_name: 'ThemeCustomizationFile'
13
13
 
@@ -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