pageflow 16.1.0 → 16.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/package/editor.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import Backbone from 'backbone';
2
2
  import _ from 'underscore';
3
- import { Object as Object$1, ConfigurationEditorTabView, TextInputView, UrlDisplayView, TabsView, ConfigurationEditorView, CollectionView, tooltipContainer, SelectInputView, inputView, TextAreaInputView, CheckBoxGroupInputView, i18nUtils, TableView, TextTableCellView, PresenceTableCellView, SortableCollectionView, attributeBinding, DeleteRowTableCellView, CheckBoxInputView, SliderInputView, IconTableCellView } from 'pageflow/ui';
3
+ import { Object as Object$1, TabsView, ConfigurationEditorView, CollectionView, tooltipContainer, SelectInputView, inputView, TextInputView, TextAreaInputView, CheckBoxGroupInputView, i18nUtils, ConfigurationEditorTabView, SeparatorView, UrlDisplayView, TableView, TextTableCellView, PresenceTableCellView, SortableCollectionView, attributeBinding, DeleteRowTableCellView, CheckBoxInputView, SliderInputView, IconTableCellView } from 'pageflow/ui';
4
4
  export * from 'pageflow/ui';
5
5
  import Cocktail from 'cocktail';
6
6
  import I18n$1 from 'i18n-js';
@@ -315,58 +315,6 @@ _.each(['each', 'map', 'reduce', 'first', 'find', 'contains', 'filter'], functio
315
315
  };
316
316
  });
317
317
 
318
- var state = window.pageflow || {};
319
-
320
- function template(data) {
321
- var __p = '';
322
- __p += '';
323
- return __p
324
- }
325
-
326
- var EditFileView = Marionette.ItemView.extend({
327
- template: template,
328
- className: 'edit_file',
329
- onRender: function onRender() {
330
- var fileType = this.model.fileType();
331
- var entry = this.options.entry || state.entry;
332
- var tab = new ConfigurationEditorTabView({
333
- model: this.model.configuration,
334
- attributeTranslationKeyPrefixes: ['pageflow.editor.files.attributes.' + fileType.collectionName, 'pageflow.editor.files.common_attributes', 'pageflow.editor.nested_files.' + fileType.collectionName, 'pageflow.editor.nested_files.common_attributes']
335
- });
336
-
337
- if (this.options.displayFileName) {
338
- tab.input('file_name', TextInputView, {
339
- model: this.model,
340
- disabled: true
341
- });
342
- }
343
-
344
- tab.input('rights', TextInputView, {
345
- model: this.model,
346
- placeholder: entry.get('default_file_rights')
347
- });
348
-
349
- _(this.fileTypeInputs()).each(function (options) {
350
- tab.input(options.name, options.inputView, options.inputViewOptions);
351
- });
352
-
353
- tab.input('original_url', UrlDisplayView, {
354
- model: this.model
355
- });
356
- this.appendSubview(tab);
357
- },
358
- fileTypeInputs: function fileTypeInputs() {
359
- var fileType = this.model.fileType();
360
- return _.chain(fileType.configurationEditorInputs).map(function (inputs) {
361
- if (_.isFunction(inputs)) {
362
- return inputs(this.model);
363
- } else {
364
- return inputs;
365
- }
366
- }, this).flatten().value();
367
- }
368
- });
369
-
370
318
  var app = new Marionette.Application();
371
319
 
372
320
  var dialogView = {
@@ -383,7 +331,7 @@ var dialogView = {
383
331
  }
384
332
  };
385
333
 
386
- function template$1(data) {
334
+ function template(data) {
387
335
  var __t, __p = '';
388
336
  __p += '<div class="box">\n <div class="content">\n <h1 class="dialog-header"></h1>\n </div>\n\n <div class="footer">\n <a href="" class="close">\n ' +
389
337
  ((__t = ( I18n.t('pageflow.editor.templates.file_settings_dialog.close') )) == null ? '' : __t) +
@@ -392,7 +340,7 @@ return __p
392
340
  }
393
341
 
394
342
  var FileSettingsDialogView = Marionette.ItemView.extend({
395
- template: template$1,
343
+ template: template,
396
344
  className: 'file_settings_dialog editor dialog',
397
345
  mixins: [dialogView],
398
346
  ui: {
@@ -423,11 +371,11 @@ FileSettingsDialogView.open = function (options) {
423
371
  app.dialogRegion.show(new FileSettingsDialogView(options));
424
372
  };
425
373
 
426
- function template$2(data) {
374
+ function template$1(data) {
427
375
  var __t, __p = '';
428
- __p += '<a class="edit" href="" title="' +
376
+ __p += '<span class="value"></span>\n<a class="edit" href="" title="' +
429
377
  ((__t = ( I18n.t('pageflow.editor.templates.file_meta_data_item_value_view.edit') )) == null ? '' : __t) +
430
- '">\n</a>\n<span class="value"></span>\n';
378
+ '">\n</a>\n\n';
431
379
  return __p
432
380
  }
433
381
 
@@ -450,7 +398,8 @@ return __p
450
398
  */
451
399
 
452
400
  var FileMetaDataItemValueView = Marionette.ItemView.extend({
453
- template: template$2,
401
+ template: template$1,
402
+ className: 'value_wrapper',
454
403
  ui: {
455
404
  value: '.value',
456
405
  editLink: '.edit'
@@ -492,7 +441,13 @@ var TextFileMetaDataItemValueView = FileMetaDataItemValueView.extend({
492
441
  model = this.model;
493
442
  }
494
443
 
495
- return model.get(this.options.name);
444
+ var value = model.get(this.options.name);
445
+
446
+ if (value && this.options.formatValue) {
447
+ return this.options.formatValue(value);
448
+ }
449
+
450
+ return value;
496
451
  }
497
452
  });
498
453
 
@@ -505,6 +460,7 @@ var FileType = Object$1.extend({
505
460
  this.paramKey = options.paramKey;
506
461
  this.i18nKey = options.i18nKey;
507
462
  this.nestedFileTypes = [];
463
+ this.settingsDialogTabs = options.settingsDialogTabs || [];
508
464
  this.confirmUploadTableColumns = options.confirmUploadTableColumns || [];
509
465
  this.configurationEditorInputs = [].concat(options.configurationEditorInputs || []);
510
466
  this.configurationUpdaters = options.configurationUpdaters || [];
@@ -512,17 +468,8 @@ var FileType = Object$1.extend({
512
468
  this.nestedFilesOrder = options.nestedFilesOrder;
513
469
  this.skipUploadConfirmation = options.skipUploadConfirmation || false;
514
470
  this.filters = options.filters || [];
515
- this.metaDataAttributes = [{
516
- name: 'rights',
517
- valueView: TextFileMetaDataItemValueView,
518
- valueViewOptions: {
519
- settingsDialogTabLink: 'general'
520
- }
521
- }].concat(options.metaDataAttributes || []);
522
- this.settingsDialogTabs = [{
523
- name: 'general',
524
- view: EditFileView
525
- }].concat(options.settingsDialogTabs || []);
471
+ this.noExtendedFileRights = options.noExtendedFileRights;
472
+ this.metaDataAttributes = options.metaDataAttributes || [];
526
473
 
527
474
  if (typeof options.matchUpload === 'function') {
528
475
  this.matchUpload = options.matchUpload;
@@ -562,6 +509,8 @@ var FileTypes = Object$1.extend({
562
509
  initialize: function initialize() {
563
510
  this.clientSideConfigs = [];
564
511
  this.clientSideConfigModifications = {};
512
+ this.commonSettingsDialogTabs = [];
513
+ this.commonMetaDataAttributes = [];
565
514
  },
566
515
  register: function register(name, config) {
567
516
  if (this._setup) {
@@ -591,10 +540,9 @@ var FileTypes = Object$1.extend({
591
540
  throw 'Missing client side config for file type "' + serverSideConfig.collectionName + '"';
592
541
  }
593
542
 
594
- _(_this.clientSideConfigModifications[serverSideConfig.collectionName]).each(function (modification) {
595
- this.lintModification(modification, serverSideConfig.collectionName);
596
- this.applyModification(clientSideConfig, modification);
597
- }, _this);
543
+ _this.applyCommonConfig(clientSideConfig);
544
+
545
+ _this.applyModifications(serverSideConfig, clientSideConfig);
598
546
 
599
547
  return _.extend({}, serverSideConfig, clientSideConfig);
600
548
  }).sortBy(function (config) {
@@ -613,6 +561,16 @@ var FileTypes = Object$1.extend({
613
561
  })));
614
562
  });
615
563
  },
564
+ applyCommonConfig: function applyCommonConfig(clientSideConfig) {
565
+ clientSideConfig.settingsDialogTabs = this.commonSettingsDialogTabs.concat(clientSideConfig.settingsDialogTabs || []);
566
+ clientSideConfig.metaDataAttributes = this.commonMetaDataAttributes.concat(clientSideConfig.metaDataAttributes || []);
567
+ },
568
+ applyModifications: function applyModifications(serverSideConfig, clientSideConfig) {
569
+ _(this.clientSideConfigModifications[serverSideConfig.collectionName]).each(function (modification) {
570
+ this.lintModification(modification, serverSideConfig.collectionName);
571
+ this.applyModification(clientSideConfig, modification);
572
+ }, this);
573
+ },
616
574
  lintModification: function lintModification(modification, collectionName) {
617
575
  var unmodifyableProperties = _.difference(_.keys(modification), this.modifyableProperties);
618
576
 
@@ -895,6 +853,8 @@ var WidgetTypes = Object$1.extend({
895
853
  }
896
854
  });
897
855
 
856
+ var state = window.pageflow || {};
857
+
898
858
  /**
899
859
  * Interface for engines providing editor extensions.
900
860
  * @alias editor
@@ -905,6 +865,7 @@ var EditorApi = Object$1.extend(
905
865
  {
906
866
  initialize: function initialize(options) {
907
867
  this.router = options && options.router;
868
+ this.entryType = {};
908
869
  this.sideBarRoutings = [];
909
870
  this.mainMenuItems = [];
910
871
  this.initializers = [];
@@ -974,6 +935,9 @@ var EditorApi = Object$1.extend(
974
935
  * Checks to see if the browser is supported.
975
936
  * @param {function} options.browserNotSupportedView
976
937
  * Backbone view that will be rendered if the browser is not supported.
938
+ * @param {boolean} [options.supportsExtendedFileRights]
939
+ * Offer additional inputs for files to specify source url, license and default
940
+ * display location.
977
941
  */
978
942
  registerEntryType: function registerEntryType(name, options) {
979
943
  this.entryType = _objectSpread2({
@@ -3364,7 +3328,7 @@ var Entry = Backbone.Model.extend({
3364
3328
  },
3365
3329
  parse: function parse(response, options) {
3366
3330
  if (response) {
3367
- this.set(_.pick(response, 'published', 'published_until', 'password_protected'));
3331
+ this.set(_.pick(response, 'published', 'published_until', 'password_protected', 'last_published_with_noindex'));
3368
3332
 
3369
3333
  this._setFiles(response, {
3370
3334
  add: false,
@@ -3894,7 +3858,7 @@ function _slicedToArray(arr, i) {
3894
3858
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
3895
3859
  }
3896
3860
 
3897
- function template$3(data) {
3861
+ function template$2(data) {
3898
3862
  var __t, __p = '';
3899
3863
  __p += '<a class="back">' +
3900
3864
  ((__t = ( I18n.t('pageflow.editor.templates.back_button_decorator.outline') )) == null ? '' : __t) +
@@ -3903,7 +3867,7 @@ return __p
3903
3867
  }
3904
3868
 
3905
3869
  var BackButtonDecoratorView = Marionette.Layout.extend({
3906
- template: template$3,
3870
+ template: template$2,
3907
3871
  className: 'back_button_decorator',
3908
3872
  events: {
3909
3873
  'click a.back': 'goBack'
@@ -3922,7 +3886,7 @@ var BackButtonDecoratorView = Marionette.Layout.extend({
3922
3886
  }
3923
3887
  });
3924
3888
 
3925
- function template$4(data) {
3889
+ function template$3(data) {
3926
3890
  var __t, __p = '';
3927
3891
  __p += '<input type="checkbox">\n<label class="file_name"></label>\n<span class="duration"></span>\n\n<div class="actions">\n <a class="remove" title="' +
3928
3892
  ((__t = ( I18n.t('pageflow.editor.templates.confirmable_file_item.remove') )) == null ? '' : __t) +
@@ -3932,7 +3896,7 @@ return __p
3932
3896
 
3933
3897
  var ConfirmableFileItemView = Marionette.ItemView.extend({
3934
3898
  tagName: 'li',
3935
- template: template$4,
3899
+ template: template$3,
3936
3900
  ui: {
3937
3901
  fileName: '.file_name',
3938
3902
  duration: '.duration',
@@ -3965,7 +3929,7 @@ var ConfirmableFileItemView = Marionette.ItemView.extend({
3965
3929
  }
3966
3930
  });
3967
3931
 
3968
- function template$5(data) {
3932
+ function template$4(data) {
3969
3933
  var __t, __p = '';
3970
3934
  __p += '<div class="blank_slate">\n <p>\n ' +
3971
3935
  ((__t = ( I18n.t('pageflow.editor.templates.confirm_encoding.all_released') )) == null ? '' : __t) +
@@ -3984,7 +3948,7 @@ return __p
3984
3948
  }
3985
3949
 
3986
3950
  var ConfirmEncodingView = Marionette.ItemView.extend({
3987
- template: template$5,
3951
+ template: template$4,
3988
3952
  className: 'confirm_encoding',
3989
3953
  ui: {
3990
3954
  blankSlate: '.blank_slate',
@@ -4138,7 +4102,7 @@ var failureIndicatingView = modelLifecycleTrackingView({
4138
4102
  }
4139
4103
  });
4140
4104
 
4141
- function template$6(data) {
4105
+ function template$5(data) {
4142
4106
  var __t, __p = '';
4143
4107
  __p += '<a class="close" href="#">' +
4144
4108
  ((__t = ( I18n.t('pageflow.editor.templates.edit_entry.close') )) == null ? '' : __t) +
@@ -4155,7 +4119,7 @@ return __p
4155
4119
  }
4156
4120
 
4157
4121
  var EditEntryView = Marionette.Layout.extend({
4158
- template: template$6,
4122
+ template: template$5,
4159
4123
  mixins: [failureIndicatingView, tooltipContainer],
4160
4124
  ui: {
4161
4125
  publishButton: 'a.publish',
@@ -4237,7 +4201,7 @@ var EditEntryView = Marionette.Layout.extend({
4237
4201
  }
4238
4202
  });
4239
4203
 
4240
- function template$7(data) {
4204
+ function template$6(data) {
4241
4205
  var __t, __p = '';
4242
4206
  __p += '<div class="widget_type">\n</div>\n<a class="settings" title="' +
4243
4207
  ((__t = ( I18n.t('pageflow.editor.templates.widget_item.settings') )) == null ? '' : __t) +
@@ -4246,7 +4210,7 @@ return __p
4246
4210
  }
4247
4211
 
4248
4212
  var WidgetItemView = Marionette.Layout.extend({
4249
- template: template$7,
4213
+ template: template$6,
4250
4214
  tagName: 'li',
4251
4215
  className: 'widget_item',
4252
4216
  regions: {
@@ -4283,14 +4247,14 @@ var WidgetItemView = Marionette.Layout.extend({
4283
4247
  }
4284
4248
  });
4285
4249
 
4286
- function template$8(data) {
4250
+ function template$7(data) {
4287
4251
  var __p = '';
4288
4252
  __p += '<ol class="widgets">\n</ol>\n';
4289
4253
  return __p
4290
4254
  }
4291
4255
 
4292
4256
  var EditWidgetsView = Marionette.Layout.extend({
4293
- template: template$8,
4257
+ template: template$7,
4294
4258
  ui: {
4295
4259
  widgets: '.widgets'
4296
4260
  },
@@ -4306,14 +4270,14 @@ var EditWidgetsView = Marionette.Layout.extend({
4306
4270
  }
4307
4271
  });
4308
4272
 
4309
- function template$9(data) {
4273
+ function template$8(data) {
4310
4274
  var __p = '';
4311
4275
  __p += '<div class="image"></div>\n<div class="label"></div>\n';
4312
4276
  return __p
4313
4277
  }
4314
4278
 
4315
4279
  var BackgroundPositioningPreviewView = Marionette.ItemView.extend({
4316
- template: template$9,
4280
+ template: template$8,
4317
4281
  className: 'preview',
4318
4282
  modelEvents: {
4319
4283
  change: 'update'
@@ -4344,14 +4308,14 @@ var BackgroundPositioningPreviewView = Marionette.ItemView.extend({
4344
4308
  }
4345
4309
  });
4346
4310
 
4347
- function template$a(data) {
4311
+ function template$9(data) {
4348
4312
  var __p = '';
4349
4313
  __p += '<div class="container">\n <div class="slider horizontal">\n </div>\n <div class="slider vertical">\n </div>\n <div class="percent horizontal">\n <input type="number" min="0" max="100">\n %\n </div>\n <div class="percent vertical">\n <input type="number" min="0" max="100">\n %\n </div>\n</div>\n';
4350
4314
  return __p
4351
4315
  }
4352
4316
 
4353
4317
  var BackgroundPositioningSlidersView = Marionette.ItemView.extend({
4354
- template: template$a,
4318
+ template: template$9,
4355
4319
  className: '',
4356
4320
  ui: {
4357
4321
  container: '.container',
@@ -4432,7 +4396,7 @@ var BackgroundPositioningSlidersView = Marionette.ItemView.extend({
4432
4396
  }
4433
4397
  });
4434
4398
 
4435
- function template$b(data) {
4399
+ function template$a(data) {
4436
4400
  var __t, __p = '';
4437
4401
  __p += '<div class="box">\n <div class="content">\n <h2 class="dialog-header">' +
4438
4402
  ((__t = ( I18n.t('pageflow.editor.templates.background_positioning.title') )) == null ? '' : __t) +
@@ -4449,7 +4413,7 @@ return __p
4449
4413
  }
4450
4414
 
4451
4415
  var BackgroundPositioningView = Marionette.ItemView.extend({
4452
- template: template$b,
4416
+ template: template$a,
4453
4417
  className: 'background_positioning editor dialog',
4454
4418
  mixins: [dialogView],
4455
4419
  ui: {
@@ -4503,14 +4467,14 @@ BackgroundPositioningView.open = function (options) {
4503
4467
  app.dialogRegion.show(new BackgroundPositioningView(options));
4504
4468
  };
4505
4469
 
4506
- function template$c(data) {
4470
+ function template$b(data) {
4507
4471
  var __p = '';
4508
4472
  __p += '<div class="label"></div>\n<a href="#"></a>\n';
4509
4473
  return __p
4510
4474
  }
4511
4475
 
4512
4476
  var DropDownButtonItemView = Marionette.ItemView.extend({
4513
- template: template$c,
4477
+ template: template$b,
4514
4478
  tagName: 'li',
4515
4479
  className: 'drop_down_button_item',
4516
4480
  ui: {
@@ -4524,6 +4488,10 @@ var DropDownButtonItemView = Marionette.ItemView.extend({
4524
4488
  }
4525
4489
 
4526
4490
  event.preventDefault();
4491
+
4492
+ if (this.model.get('kind') === 'checkBox' || this.model.get('kind') === 'radio') {
4493
+ event.stopPropagation();
4494
+ }
4527
4495
  }
4528
4496
  },
4529
4497
  modelEvents: {
@@ -4543,7 +4511,11 @@ var DropDownButtonItemView = Marionette.ItemView.extend({
4543
4511
  this.ui.label.text(this.model.get('label'));
4544
4512
  this.$el.toggleClass('is_selectable', !!this.model.selected);
4545
4513
  this.$el.toggleClass('is_disabled', !!this.model.get('disabled'));
4514
+ this.$el.toggleClass('is_hidden', !!this.model.get('hidden'));
4515
+ this.$el.toggleClass('has_check_box', this.model.get('kind') === 'checkBox');
4516
+ this.$el.toggleClass('has_radio', this.model.get('kind') === 'radio');
4546
4517
  this.$el.toggleClass('is_checked', !!this.model.get('checked'));
4518
+ this.$el.toggleClass('separated', !!this.model.get('separated'));
4547
4519
  this.$el.data('name', this.model.get('name'));
4548
4520
  }
4549
4521
  });
@@ -4560,7 +4532,7 @@ var DropDownButtonItemListView = function DropDownButtonItemListView(options) {
4560
4532
  });
4561
4533
  };
4562
4534
 
4563
- function template$d(data) {
4535
+ function template$c(data) {
4564
4536
  var __p = '';
4565
4537
  __p += '<button></button>\n\n<div class="drop_down_button_menu">\n</div>\n';
4566
4538
  return __p
@@ -4609,7 +4581,7 @@ return __p
4609
4581
  */
4610
4582
 
4611
4583
  var DropDownButtonView = Marionette.ItemView.extend({
4612
- template: template$d,
4584
+ template: template$c,
4613
4585
  className: 'drop_down_button',
4614
4586
  ui: {
4615
4587
  button: '> button',
@@ -4686,7 +4658,7 @@ var DropDownButtonView = Marionette.ItemView.extend({
4686
4658
  }
4687
4659
  });
4688
4660
 
4689
- function template$e(data) {
4661
+ function template$d(data) {
4690
4662
  var __p = '';
4691
4663
  __p += '<div class="pictogram"></div>\n';
4692
4664
  return __p
@@ -4694,7 +4666,7 @@ return __p
4694
4666
 
4695
4667
  var FileThumbnailView = Marionette.ItemView.extend({
4696
4668
  className: 'file_thumbnail',
4697
- template: template$e,
4669
+ template: template$d,
4698
4670
  modelEvents: {
4699
4671
  'change:state': 'update'
4700
4672
  },
@@ -4836,15 +4808,7 @@ var FileInputView = Marionette.ItemView.extend({
4836
4808
 
4837
4809
  if (file) {
4838
4810
  _.each(this.options.dropDownMenuItems, function (item) {
4839
- items.add(new FileInputView.CustomMenuItem({
4840
- name: item.name,
4841
- label: item.label
4842
- }, {
4843
- inputModel: _this.model,
4844
- propertyName: _this.options.propertyName,
4845
- file: file,
4846
- selected: item.selected
4847
- }));
4811
+ items.add(_this._createCustomMenuItem(file, item));
4848
4812
  });
4849
4813
 
4850
4814
  items.add(new FileInputView.EditFileSettingsMenuItem({
@@ -4857,6 +4821,31 @@ var FileInputView = Marionette.ItemView.extend({
4857
4821
 
4858
4822
  return items;
4859
4823
  },
4824
+ _createCustomMenuItem: function _createCustomMenuItem(file, item) {
4825
+ var _this2 = this;
4826
+
4827
+ var options = {
4828
+ inputModel: this.model,
4829
+ propertyName: this.options.propertyName,
4830
+ file: file
4831
+ };
4832
+
4833
+ if (typeof item === 'function') {
4834
+ return new item({}, options);
4835
+ } else {
4836
+ return new FileInputView.CustomMenuItem({
4837
+ name: item.name,
4838
+ label: item.label,
4839
+ checked: item.checked,
4840
+ items: item.items && new Backbone.Collection(item.items.map(function (item) {
4841
+ return _this2._createCustomMenuItem(file, item);
4842
+ }))
4843
+ }, _objectSpread2(_objectSpread2({}, options), {}, {
4844
+ selected: item.selected,
4845
+ items: item.items
4846
+ }));
4847
+ }
4848
+ },
4860
4849
  _listenToNestedTextTrackFiles: function _listenToNestedTextTrackFiles(file) {
4861
4850
  if (this.textTrackFiles) {
4862
4851
  this.stopListening(this.textTrackFiles);
@@ -4931,6 +4920,7 @@ FileInputView.DefaultTextTrackFileMenuItem = Backbone.Model.extend({
4931
4920
  this.update();
4932
4921
  },
4933
4922
  update: function update() {
4923
+ this.set('kind', 'radio');
4934
4924
  this.set('checked', this.options.textTrackFile == this.getDefaultTextTrackFile());
4935
4925
  this.set('name', this.options.textTrackFile ? null : 'no_default_text_track');
4936
4926
  this.set('label', this.options.textTrackFile ? this.options.textTrackFile.displayLabel() : this.options.textTrackFiles.length ? I18n$1.t('pageflow.editor.views.inputs.file_input.auto_default_text_track') : I18n$1.t('pageflow.editor.views.inputs.file_input.no_default_text_track'));
@@ -4947,14 +4937,14 @@ FileInputView.DefaultTextTrackFileMenuItem = Backbone.Model.extend({
4947
4937
  }
4948
4938
  });
4949
4939
 
4950
- function template$f(data) {
4940
+ function template$e(data) {
4951
4941
  var __p = '';
4952
4942
  __p += '<div class="spinner">\n <div class="rect1"></div>\n <div class="rect2"></div>\n <div class="rect3"></div>\n <div class="rect4"></div>\n <div class="rect5"></div>\n</div>\n';
4953
4943
  return __p
4954
4944
  }
4955
4945
 
4956
4946
  var LoadingView = Marionette.ItemView.extend({
4957
- template: template$f,
4947
+ template: template$e,
4958
4948
  className: 'loading',
4959
4949
  tagName: 'li'
4960
4950
  });
@@ -4977,7 +4967,7 @@ var selectableView = {
4977
4967
  }
4978
4968
  };
4979
4969
 
4980
- function template$g(data) {
4970
+ function template$f(data) {
4981
4971
  var __t, __p = '';
4982
4972
  __p += '<span class="theme_name"></span>\n<span class="button_or_checkmark">\n <p class="theme_in_use"></p>\n <a class="use_theme">' +
4983
4973
  ((__t = ( I18n.t('pageflow.editor.templates.theme.use') )) == null ? '' : __t) +
@@ -4987,7 +4977,7 @@ return __p
4987
4977
 
4988
4978
  var ThemeItemView = Marionette.ItemView.extend({
4989
4979
  tagName: 'li',
4990
- template: template$g,
4980
+ template: template$f,
4991
4981
  className: 'theme_item',
4992
4982
  mixins: [selectableView],
4993
4983
  selectionAttribute: 'theme',
@@ -5018,7 +5008,7 @@ var ThemeItemView = Marionette.ItemView.extend({
5018
5008
  }
5019
5009
  });
5020
5010
 
5021
- function template$h(data) {
5011
+ function template$g(data) {
5022
5012
  var __t, __p = '';
5023
5013
  __p += '<div class="box">\n <h1 class="dialog-header">\n ' +
5024
5014
  ((__t = ( I18n.t('pageflow.editor.templates.change_theme_dialog.header') )) == null ? '' : __t) +
@@ -5033,7 +5023,7 @@ return __p
5033
5023
  }
5034
5024
 
5035
5025
  var ChangeThemeDialogView = Marionette.ItemView.extend({
5036
- template: template$h,
5026
+ template: template$g,
5037
5027
  className: 'change_theme dialog editor',
5038
5028
  mixins: [dialogView],
5039
5029
  ui: {
@@ -5101,14 +5091,14 @@ ChangeThemeDialogView.changeTheme = function (options) {
5101
5091
  }).promise();
5102
5092
  };
5103
5093
 
5104
- function template$i(data) {
5094
+ function template$h(data) {
5105
5095
  var __p = '';
5106
5096
  __p += '\n';
5107
5097
  return __p
5108
5098
  }
5109
5099
 
5110
5100
  var StaticThumbnailView = Marionette.ItemView.extend({
5111
- template: template$i,
5101
+ template: template$h,
5112
5102
  className: 'static_thumbnail',
5113
5103
  modelEvents: {
5114
5104
  'change:configuration': 'update'
@@ -5172,7 +5162,7 @@ var ModelThumbnailView = Marionette.View.extend({
5172
5162
  }
5173
5163
  });
5174
5164
 
5175
- function template$j(data) {
5165
+ function template$i(data) {
5176
5166
  var __p = '';
5177
5167
  __p += '<label>\n <span class="name"></span>\n <span class="inline_help"></span>\n</label>\n<div class="title"></div>\n<button class="unset"></button>\n<button class="choose"></button>\n';
5178
5168
  return __p
@@ -5188,7 +5178,7 @@ var ReferenceInputView = Marionette.ItemView.extend(
5188
5178
  /** @lends ReferenceInputView.prototype */
5189
5179
  {
5190
5180
  mixins: [inputView],
5191
- template: template$j,
5181
+ template: template$i,
5192
5182
  className: 'reference_input',
5193
5183
  ui: {
5194
5184
  title: '.title',
@@ -5287,7 +5277,7 @@ var ThemeInputView = ReferenceInputView.extend({
5287
5277
  }
5288
5278
  });
5289
5279
 
5290
- function template$k(data) {
5280
+ function template$j(data) {
5291
5281
  var __t, __p = '';
5292
5282
  __p += '<a class="back">' +
5293
5283
  ((__t = ( I18n.t('pageflow.editor.templates.edit_meta_data.outline') )) == null ? '' : __t) +
@@ -5300,7 +5290,7 @@ return __p
5300
5290
  }
5301
5291
 
5302
5292
  var EditMetaDataView = Marionette.Layout.extend({
5303
- template: template$k,
5293
+ template: template$j,
5304
5294
  className: 'edit_meta_data',
5305
5295
  mixins: [failureIndicatingView],
5306
5296
  regions: {
@@ -5400,7 +5390,7 @@ var EditMetaDataView = Marionette.Layout.extend({
5400
5390
  }
5401
5391
  });
5402
5392
 
5403
- function template$l(data) {
5393
+ function template$k(data) {
5404
5394
  var __t, __p = '';
5405
5395
  __p += '<a class="back">' +
5406
5396
  ((__t = ( I18n.t('pageflow.editor.templates.edit_widget.back') )) == null ? '' : __t) +
@@ -5409,7 +5399,7 @@ return __p
5409
5399
  }
5410
5400
 
5411
5401
  var EditWidgetView = Marionette.ItemView.extend({
5412
- template: template$l,
5402
+ template: template$k,
5413
5403
  className: 'edit_widget',
5414
5404
  events: {
5415
5405
  'click a.back': function clickABack() {
@@ -5441,7 +5431,7 @@ var loadable = modelLifecycleTrackingView({
5441
5431
  }
5442
5432
  });
5443
5433
 
5444
- function template$m(data) {
5434
+ function template$l(data) {
5445
5435
  var __p = '';
5446
5436
  __p += '<span class="file_thumbnail"></span>\n\n<span class="file_name"></span>\n';
5447
5437
  return __p
@@ -5449,7 +5439,7 @@ return __p
5449
5439
 
5450
5440
  var ExplorerFileItemView = Marionette.ItemView.extend({
5451
5441
  tagName: 'li',
5452
- template: template$m,
5442
+ template: template$l,
5453
5443
  mixins: [loadable, selectableView],
5454
5444
  selectionAttribute: 'file',
5455
5445
  ui: {
@@ -5486,14 +5476,14 @@ var ExplorerFileItemView = Marionette.ItemView.extend({
5486
5476
  }
5487
5477
  });
5488
5478
 
5489
- function template$n(data) {
5479
+ function template$m(data) {
5490
5480
  var __p = '';
5491
5481
  __p += '<a href="">\n <span class="title"></span>\n</a>\n';
5492
5482
  return __p
5493
5483
  }
5494
5484
 
5495
5485
  var OtherEntryItemView = Marionette.ItemView.extend({
5496
- template: template$n,
5486
+ template: template$m,
5497
5487
  className: 'other_entry_item',
5498
5488
  tagName: 'li',
5499
5489
  mixins: [selectableView],
@@ -5508,7 +5498,7 @@ var OtherEntryItemView = Marionette.ItemView.extend({
5508
5498
  }
5509
5499
  });
5510
5500
 
5511
- function template$o(data) {
5501
+ function template$n(data) {
5512
5502
  var __t, __p = '';
5513
5503
  __p +=
5514
5504
  ((__t = ( I18n.t('pageflow.editor.templates.other_entries_blank_slate.none_available') )) == null ? '' : __t) +
@@ -5534,7 +5524,7 @@ var OtherEntriesCollectionView = Marionette.View.extend({
5534
5524
  selection: this.options.selection
5535
5525
  },
5536
5526
  blankSlateViewConstructor: Marionette.ItemView.extend({
5537
- template: template$o,
5527
+ template: template$n,
5538
5528
  tagName: 'li',
5539
5529
  className: 'blank_slate'
5540
5530
  }),
@@ -5545,7 +5535,7 @@ var OtherEntriesCollectionView = Marionette.View.extend({
5545
5535
  }
5546
5536
  });
5547
5537
 
5548
- function template$p(data) {
5538
+ function template$o(data) {
5549
5539
  var __t, __p = '';
5550
5540
  __p += '<div class="box">\n <h1 class="dialog-header">\n ' +
5551
5541
  ((__t = ( I18n.t('pageflow.editor.templates.files_explorer.reuse_files') )) == null ? '' : __t) +
@@ -5574,7 +5564,7 @@ return __p
5574
5564
  }
5575
5565
 
5576
5566
  var FilesExplorerView = Marionette.ItemView.extend({
5577
- template: template$p,
5567
+ template: template$o,
5578
5568
  className: 'files_explorer editor dialog',
5579
5569
  mixins: [dialogView],
5580
5570
  ui: {
@@ -5661,7 +5651,7 @@ FilesExplorerView.open = function (options) {
5661
5651
  app.dialogRegion.show(new FilesExplorerView(options));
5662
5652
  };
5663
5653
 
5664
- function template$q(data) {
5654
+ function template$p(data) {
5665
5655
  var __p = '';
5666
5656
  __p += '<th></th>\n<td></td>';
5667
5657
  return __p
@@ -5669,17 +5659,18 @@ return __p
5669
5659
 
5670
5660
  var FileMetaDataItemView = Marionette.ItemView.extend({
5671
5661
  tagName: 'tr',
5672
- template: template$q,
5662
+ template: template$p,
5673
5663
  ui: {
5674
5664
  label: 'th',
5675
5665
  value: 'td'
5676
5666
  },
5677
5667
  onRender: function onRender() {
5678
- this.subview(new this.options.valueView(_.extend({
5679
- el: this.ui.value,
5668
+ this.appendSubview(new this.options.valueView(_.extend({
5680
5669
  model: this.model,
5681
5670
  name: this.options.name
5682
- }, this.options.valueViewOptions || {})));
5671
+ }, this.options.valueViewOptions || {})), {
5672
+ to: this.ui.value
5673
+ });
5683
5674
  this.ui.label.text(this.labelText());
5684
5675
  },
5685
5676
  labelText: function labelText() {
@@ -5691,7 +5682,7 @@ var FileMetaDataItemView = Marionette.ItemView.extend({
5691
5682
  }
5692
5683
  });
5693
5684
 
5694
- function template$r(data) {
5685
+ function template$q(data) {
5695
5686
  var __p = '';
5696
5687
  __p += '<p class="percent"></p>\n<p class="description"></p>\n<p class="error_message"></p>';
5697
5688
  return __p
@@ -5700,7 +5691,7 @@ return __p
5700
5691
  var FileStageItemView = Marionette.ItemView.extend({
5701
5692
  tagName: 'li',
5702
5693
  className: 'file_stage_item',
5703
- template: template$r,
5694
+ template: template$q,
5704
5695
  ui: {
5705
5696
  description: '.description',
5706
5697
  percent: '.percent',
@@ -5741,7 +5732,7 @@ var FileStageItemView = Marionette.ItemView.extend({
5741
5732
  }
5742
5733
  });
5743
5734
 
5744
- function template$s(data) {
5735
+ function template$r(data) {
5745
5736
  var __t, __p = '';
5746
5737
  __p += '<span class="file_thumbnail"></span>\n\n<span class="file_name"></span>\n<a class="select">' +
5747
5738
  ((__t = ( I18n.t('pageflow.editor.templates.file_item.select') )) == null ? '' : __t) +
@@ -5765,7 +5756,7 @@ return __p
5765
5756
 
5766
5757
  var FileItemView = Marionette.ItemView.extend({
5767
5758
  tagName: 'li',
5768
- template: template$s,
5759
+ template: template$r,
5769
5760
  mixins: [loadable],
5770
5761
  ui: {
5771
5762
  fileName: '.file_name',
@@ -5880,7 +5871,7 @@ var FileItemView = Marionette.ItemView.extend({
5880
5871
  }
5881
5872
  });
5882
5873
 
5883
- function template$t(data) {
5874
+ function template$s(data) {
5884
5875
  var __t, __p = '';
5885
5876
  __p += '<div class="filtered_files-banner">\n <span class="filtered_files-banner_prefix">\n ' +
5886
5877
  ((__t = ( I18n.t('pageflow.editor.views.filtered_files_view.banner_prefix') )) == null ? '' : __t) +
@@ -5899,7 +5890,7 @@ return __p
5899
5890
  }
5900
5891
 
5901
5892
  var FilteredFilesView = Marionette.ItemView.extend({
5902
- template: template$t,
5893
+ template: template$s,
5903
5894
  className: 'filtered_files',
5904
5895
  ui: {
5905
5896
  banner: '.filtered_files-banner',
@@ -5963,7 +5954,7 @@ var FilteredFilesView = Marionette.ItemView.extend({
5963
5954
  }
5964
5955
  });
5965
5956
 
5966
- function template$u(data) {
5957
+ function template$t(data) {
5967
5958
  var __t, __p = '';
5968
5959
  __p += '<div class="box choose_importer_box">\n <h1 class="dialog-header">' +
5969
5960
  ((__t = ( I18n.t('pageflow.editor.views.files_view.importer.heading') )) == null ? '' : __t) +
@@ -5973,7 +5964,7 @@ __p += '<div class="box choose_importer_box">\n <h1 class="dialog-header">' +
5973
5964
  return __p
5974
5965
  }
5975
5966
 
5976
- function template$v(data) {
5967
+ function template$u(data) {
5977
5968
  var __t, __p = '';
5978
5969
  __p += '<button class=\'importer\' data-key=\'' +
5979
5970
  ((__t = ( data.fileImporter.key )) == null ? '' : __t) +
@@ -5988,7 +5979,7 @@ return __p
5988
5979
  }
5989
5980
 
5990
5981
  var ImporterSelectView = Marionette.ItemView.extend({
5991
- template: template$v,
5982
+ template: template$u,
5992
5983
  className: 'importer_select',
5993
5984
  tagName: 'li',
5994
5985
  events: {
@@ -6005,7 +5996,7 @@ var ImporterSelectView = Marionette.ItemView.extend({
6005
5996
  });
6006
5997
 
6007
5998
  var ChooseImporterView = Marionette.ItemView.extend({
6008
- template: template$u,
5999
+ template: template$t,
6009
6000
  className: 'choose_importer editor dialog',
6010
6001
  mixins: [dialogView],
6011
6002
  ui: {
@@ -6040,7 +6031,7 @@ ChooseImporterView.open = function (options) {
6040
6031
  app.dialogRegion.show(new ChooseImporterView(options).render());
6041
6032
  };
6042
6033
 
6043
- function template$w(data) {
6034
+ function template$v(data) {
6044
6035
  var __t, __p = '';
6045
6036
  __p += '<div class="box file_importer_box">\n <h1 class="dialog-header">' +
6046
6037
  ((__t = ( I18n.t('pageflow.editor.file_importers.'+data.importerKey+'.dialog_label') )) == null ? '' : __t) +
@@ -6054,7 +6045,7 @@ __p += '<div class="box file_importer_box">\n <h1 class="dialog-header">' +
6054
6045
  return __p
6055
6046
  }
6056
6047
 
6057
- function template$x(data) {
6048
+ function template$w(data) {
6058
6049
  var __t, __p = '';
6059
6050
  __p += '<div class="box">\n <h1 class="dialog-header">' +
6060
6051
  ((__t = ( I18n.t('pageflow.editor.templates.confirm_upload.header') )) == null ? '' : __t) +
@@ -6070,6 +6061,73 @@ __p += '<div class="box">\n <h1 class="dialog-header">' +
6070
6061
  return __p
6071
6062
  }
6072
6063
 
6064
+ function template$x(data) {
6065
+ var __p = '';
6066
+ __p += '';
6067
+ return __p
6068
+ }
6069
+
6070
+ var EditFileView = Marionette.ItemView.extend({
6071
+ template: template$x,
6072
+ className: 'edit_file',
6073
+ onRender: function onRender() {
6074
+ var fileType = this.model.fileType();
6075
+ var entry = this.options.entry || state.entry;
6076
+ var tab = new ConfigurationEditorTabView({
6077
+ model: this.model.configuration,
6078
+ attributeTranslationKeyPrefixes: ['pageflow.editor.files.attributes.' + fileType.collectionName, 'pageflow.editor.files.common_attributes', 'pageflow.editor.nested_files.' + fileType.collectionName, 'pageflow.editor.nested_files.common_attributes']
6079
+ });
6080
+
6081
+ if (this.options.displayFileName) {
6082
+ tab.input('file_name', TextInputView, {
6083
+ model: this.model,
6084
+ disabled: true
6085
+ });
6086
+ }
6087
+
6088
+ tab.input('rights', TextInputView, {
6089
+ model: this.model,
6090
+ placeholder: entry.get('default_file_rights')
6091
+ });
6092
+
6093
+ if (editor.entryType.supportsExtendedFileRights && !fileType.noExtendedFileRights) {
6094
+ tab.input('source_url', TextInputView);
6095
+ tab.input('license', SelectInputView, {
6096
+ includeBlank: true,
6097
+ blankTranslationKey: 'pageflow.editor.files.common_attributes.license.blank',
6098
+ values: state.config.availableFileLicenses,
6099
+ texts: state.config.availableFileLicenses.map(function (name) {
6100
+ return I18n$1.t("pageflow.file_licenses.".concat(name, ".name"));
6101
+ })
6102
+ });
6103
+ tab.input('rights_display', SelectInputView, {
6104
+ values: ['credits', 'inline']
6105
+ });
6106
+ }
6107
+
6108
+ tab.view(SeparatorView);
6109
+
6110
+ _(this.fileTypeInputs()).each(function (options) {
6111
+ tab.input(options.name, options.inputView, options.inputViewOptions);
6112
+ });
6113
+
6114
+ tab.input('original_url', UrlDisplayView, {
6115
+ model: this.model
6116
+ });
6117
+ this.appendSubview(tab);
6118
+ },
6119
+ fileTypeInputs: function fileTypeInputs() {
6120
+ var fileType = this.model.fileType();
6121
+ return _.chain(fileType.configurationEditorInputs).map(function (inputs) {
6122
+ if (_.isFunction(inputs)) {
6123
+ return inputs(this.model);
6124
+ } else {
6125
+ return inputs;
6126
+ }
6127
+ }, this).flatten().value();
6128
+ }
6129
+ });
6130
+
6073
6131
  var UploadableFilesView = Marionette.View.extend({
6074
6132
  className: 'uploadable_files',
6075
6133
  initialize: function initialize() {
@@ -6116,7 +6174,7 @@ var UploadableFilesView = Marionette.View.extend({
6116
6174
  });
6117
6175
 
6118
6176
  var ConfirmFileImportUploadView = Marionette.Layout.extend({
6119
- template: template$x,
6177
+ template: template$w,
6120
6178
  className: 'confirm_upload editor dialog',
6121
6179
  mixins: [dialogView],
6122
6180
  regions: {
@@ -6186,7 +6244,7 @@ ConfirmFileImportUploadView.open = function (options) {
6186
6244
  };
6187
6245
 
6188
6246
  var FilesImporterView = Marionette.ItemView.extend({
6189
- template: template$w,
6247
+ template: template$v,
6190
6248
  className: 'files_importer editor dialog',
6191
6249
  mixins: [dialogView],
6192
6250
  ui: {
@@ -6244,7 +6302,10 @@ var FilesImporterView = Marionette.ItemView.extend({
6244
6302
  content_type: file.type,
6245
6303
  file_size: -1,
6246
6304
  rights: file.rights,
6247
- source_url: file.url
6305
+ source_url: file.url,
6306
+ configuration: {
6307
+ source_url: file.source_url
6308
+ }
6248
6309
  }, {
6249
6310
  fileType: fileType
6250
6311
  });
@@ -6481,7 +6542,11 @@ __p += '<div class="files_pending notice">\n <p>' +
6481
6542
  ((__t = ( I18n.t('pageflow.editor.templates.publish_entry.date') )) == null ? '' : __t) +
6482
6543
  '\n <input type="text" name="publish_until">\n </label>\n\n <label>\n ' +
6483
6544
  ((__t = ( I18n.t('pageflow.editor.templates.publish_entry.time') )) == null ? '' : __t) +
6484
- '\n <input type="text" name="publish_until_time" value="00:00">\n </label>\n </div>\n\n <div class="check_box_input">\n <input id="publish_password_protected" type="checkbox" name="password_protected" value="1">\n <label for="publish_password_protected">\n <span class="name">\n ' +
6545
+ '\n <input type="text" name="publish_until_time" value="00:00">\n </label>\n </div>\n\n <div class="check_box_input">\n <input id="publish_with_noindex" type="checkbox" name="noindex" value="1">\n <label for="publish_with_noindex">\n <span class="name">\n ' +
6546
+ ((__t = ( I18n.t('pageflow.editor.templates.publish_entry.noindex') )) == null ? '' : __t) +
6547
+ '\n </span>\n <span class="inline_help">\n ' +
6548
+ ((__t = ( I18n.t('pageflow.editor.templates.publish_entry.noindex_help') )) == null ? '' : __t) +
6549
+ '\n </span>\n </label>\n </div>\n\n <div class="check_box_input">\n <input id="publish_password_protected" type="checkbox" name="password_protected" value="1">\n <label for="publish_password_protected">\n <span class="name">\n ' +
6485
6550
  ((__t = ( I18n.t('pageflow.editor.templates.publish_entry.password_protected') )) == null ? '' : __t) +
6486
6551
  '\n </span>\n <span class="inline_help">\n ' +
6487
6552
  ((__t = ( I18n.t('pageflow.editor.templates.publish_entry.password_help') )) == null ? '' : __t) +
@@ -6518,6 +6583,7 @@ var PublishEntryView = Marionette.ItemView.extend({
6518
6583
  passwordFields: '.password_fields',
6519
6584
  userNameField: 'input[name=user_name]',
6520
6585
  passwordField: 'input[name=password]',
6586
+ noindexCheckBox: 'input[name=noindex]',
6521
6587
  alreadyPublishedWithPassword: '.already_published_with_password',
6522
6588
  previouslyPublishedWithPassword: '.previously_published_with_password',
6523
6589
  alreadyPublishedWithoutPassword: '.already_published_without_password',
@@ -6580,6 +6646,7 @@ var PublishEntryView = Marionette.ItemView.extend({
6580
6646
  this.ui.passwordField.val(this.randomPassword());
6581
6647
  }
6582
6648
 
6649
+ this.ui.noindexCheckBox.prop('checked', this.model.get('last_published_with_noindex'));
6583
6650
  this.ui.alreadyPublishedWithPassword.toggle(this.model.get('published') && this.model.get('password_protected'));
6584
6651
  this.ui.previouslyPublishedWithPassword.toggle(!this.model.get('published') && this.model.get('password_protected'));
6585
6652
  this.ui.alreadyPublishedWithoutPassword.toggle(this.model.get('published') && !this.model.get('password_protected')); // Helpers
@@ -6620,7 +6687,8 @@ var PublishEntryView = Marionette.ItemView.extend({
6620
6687
  this.options.entryPublication.publish({
6621
6688
  published_until: publishedUntil,
6622
6689
  password_protected: this.ui.passwordProtectedCheckBox.is(':checked'),
6623
- password: this.ui.passwordField.val()
6690
+ password: this.ui.passwordField.val(),
6691
+ noindex: this.ui.noindexCheckBox.is(':checked')
6624
6692
  }).fail(function () {
6625
6693
  alert('Beim Veröffentlichen ist ein Fehler aufgetreten');
6626
6694
  }).always(function () {
@@ -7801,7 +7869,7 @@ var ListView = Marionette.ItemView.extend({
7801
7869
  });
7802
7870
 
7803
7871
  var ConfirmUploadView = Marionette.Layout.extend({
7804
- template: template$x,
7872
+ template: template$w,
7805
7873
  className: 'confirm_upload editor dialog',
7806
7874
  mixins: [dialogView],
7807
7875
  regions: {
@@ -8101,11 +8169,60 @@ app.addInitializer(function () {
8101
8169
  });
8102
8170
  });
8103
8171
 
8172
+ function _arrayWithoutHoles(arr) {
8173
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
8174
+ }
8175
+
8176
+ function _iterableToArray(iter) {
8177
+ if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
8178
+ }
8179
+
8180
+ function _nonIterableSpread() {
8181
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
8182
+ }
8183
+
8184
+ function _toConsumableArray(arr) {
8185
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
8186
+ }
8187
+
8104
8188
  var OtherFile = UploadableFile.extend({
8105
8189
  thumbnailPictogram: 'other'
8106
8190
  });
8107
8191
 
8108
8192
  app.addInitializer(function (options) {
8193
+ editor.fileTypes.commonMetaDataAttributes = [{
8194
+ name: 'rights',
8195
+ valueView: TextFileMetaDataItemValueView,
8196
+ valueViewOptions: {
8197
+ settingsDialogTabLink: 'general'
8198
+ }
8199
+ }];
8200
+
8201
+ if (editor.entryType.supportsExtendedFileRights) {
8202
+ editor.fileTypes.commonMetaDataAttributes = [].concat(_toConsumableArray(editor.fileTypes.commonMetaDataAttributes), [{
8203
+ name: 'source_url',
8204
+ valueView: TextFileMetaDataItemValueView,
8205
+ valueViewOptions: {
8206
+ fromConfiguration: true,
8207
+ settingsDialogTabLink: 'general'
8208
+ }
8209
+ }, {
8210
+ name: 'license',
8211
+ valueView: TextFileMetaDataItemValueView,
8212
+ valueViewOptions: {
8213
+ fromConfiguration: true,
8214
+ formatValue: function formatValue(value) {
8215
+ return I18n$1.t("pageflow.file_licenses.".concat(value, ".name"));
8216
+ },
8217
+ settingsDialogTabLink: 'general'
8218
+ }
8219
+ }]);
8220
+ }
8221
+
8222
+ editor.fileTypes.commonSettingsDialogTabs = [{
8223
+ name: 'general',
8224
+ view: EditFileView
8225
+ }];
8109
8226
  var textTracksMetaDataAttribute = {
8110
8227
  name: 'text_tracks',
8111
8228
  valueView: TextTracksFileMetaDataItemValueView,
@@ -8165,6 +8282,7 @@ app.addInitializer(function (options) {
8165
8282
  return upload.name.match(/\.vtt$/) || upload.name.match(/\.srt$/);
8166
8283
  },
8167
8284
  skipUploadConfirmation: true,
8285
+ noExtendedFileRights: true,
8168
8286
  configurationEditorInputs: [{
8169
8287
  name: 'label',
8170
8288
  inputView: TextInputView,