pageflow 15.8.0 → 16.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +183 -103
  3. data/README.md +0 -1
  4. data/Rakefile +1 -1
  5. data/admins/pageflow/accounts.rb +12 -16
  6. data/admins/pageflow/entry.rb +28 -26
  7. data/admins/pageflow/entry_templates.rb +5 -7
  8. data/admins/pageflow/sites.rb +53 -0
  9. data/app/assets/javascripts/pageflow/admin/entries.js +16 -7
  10. data/app/assets/javascripts/pageflow/dist/ui.js +298 -72
  11. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +10 -0
  12. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +6 -1
  13. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -0
  14. data/app/assets/stylesheets/pageflow/editor/help.scss +3 -3
  15. data/app/assets/stylesheets/pageflow/editor/info_box.scss +7 -0
  16. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +0 -5
  17. data/app/assets/stylesheets/pageflow/ui/forms.scss +1 -1
  18. data/app/controllers/pageflow/chapters_controller.rb +2 -2
  19. data/app/controllers/pageflow/editor/files_controller.rb +1 -1
  20. data/app/controllers/pageflow/entries_controller.rb +12 -2
  21. data/app/controllers/pageflow/feeds_controller.rb +18 -0
  22. data/app/controllers/pageflow/pages_controller.rb +2 -2
  23. data/app/controllers/pageflow/sitemaps_controller.rb +15 -0
  24. data/app/controllers/pageflow/storylines_controller.rb +2 -2
  25. data/app/helpers/pageflow/common_entry_seed_helper.rb +1 -1
  26. data/app/helpers/pageflow/embed_code_helper.rb +1 -1
  27. data/app/helpers/pageflow/entries_helper.rb +16 -15
  28. data/app/helpers/pageflow/feeds_helper.rb +66 -0
  29. data/app/helpers/pageflow/page_types_helper.rb +9 -9
  30. data/app/helpers/pageflow/sites_helper.rb +11 -0
  31. data/app/helpers/pageflow/social_share_helper.rb +2 -2
  32. data/app/inputs/pageflow_permalink_input.rb +15 -3
  33. data/app/models/concerns/pageflow/reusable_file.rb +3 -3
  34. data/app/models/pageflow/account.rb +13 -31
  35. data/app/models/pageflow/audio_file_url_templates.rb +2 -1
  36. data/app/models/pageflow/{cname_theming_request_scope.rb → cname_site_request_scope.rb} +3 -3
  37. data/app/models/pageflow/customized_theme.rb +1 -1
  38. data/app/models/pageflow/draft_entry.rb +1 -1
  39. data/app/models/pageflow/entries_feed.rb +32 -0
  40. data/app/models/pageflow/entry.rb +3 -4
  41. data/app/models/pageflow/entry_at_revision.rb +2 -2
  42. data/app/models/pageflow/entry_duplicate.rb +1 -1
  43. data/app/models/pageflow/entry_template.rb +4 -4
  44. data/app/models/pageflow/home_button.rb +7 -7
  45. data/app/models/pageflow/image_file.rb +14 -3
  46. data/app/models/pageflow/membership.rb +3 -2
  47. data/app/models/pageflow/other_file.rb +5 -0
  48. data/app/models/pageflow/other_file_url_templates.rb +16 -0
  49. data/app/models/pageflow/permalink.rb +3 -3
  50. data/app/models/pageflow/permalink_directory.rb +2 -2
  51. data/app/models/pageflow/published_entry.rb +8 -2
  52. data/app/models/pageflow/revision.rb +4 -0
  53. data/app/models/pageflow/site.rb +67 -0
  54. data/app/models/pageflow/sitemaps.rb +13 -0
  55. data/app/models/pageflow/theme_customization.rb +1 -1
  56. data/app/models/pageflow/used_file.rb +2 -2
  57. data/app/models/pageflow/video_file_url_templates.rb +3 -1
  58. data/app/models/pageflow/widget.rb +9 -1
  59. data/app/policies/pageflow/account_policy.rb +2 -2
  60. data/app/policies/pageflow/entry_policy.rb +2 -2
  61. data/app/policies/pageflow/entry_template_policy.rb +1 -1
  62. data/app/policies/pageflow/{theming_policy.rb → site_policy.rb} +13 -11
  63. data/app/views/admin/accounts/_entry_template_details.html.arb +1 -1
  64. data/app/views/admin/accounts/_form.html.erb +4 -22
  65. data/app/views/admin/accounts/_site_defaults_inline_help.html.erb +5 -0
  66. data/app/views/admin/entries/_form.html.erb +4 -13
  67. data/app/views/admin/entries/_permalink_inputs.html.erb +2 -3
  68. data/app/views/admin/entries/_site_input.html.erb +15 -0
  69. data/app/views/admin/entries/{entry_type_name_input.html.erb → entry_site_and_type_name_input.html.erb} +3 -0
  70. data/app/views/admin/entry_templates/_form.html.erb +5 -5
  71. data/app/views/admin/sites/_attributes_table.html.arb +12 -0
  72. data/app/views/admin/sites/_fields.html.erb +23 -0
  73. data/app/views/admin/sites/_form.html.erb +5 -0
  74. data/app/views/components/pageflow/admin/entries_tab.rb +1 -2
  75. data/app/views/components/pageflow/admin/entry_templates_tab.rb +10 -11
  76. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
  77. data/app/views/components/pageflow/admin/features_tab.rb +1 -1
  78. data/app/views/components/pageflow/admin/sites_tab.rb +35 -0
  79. data/app/views/components/pageflow/admin/users_tab.rb +1 -2
  80. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
  81. data/app/views/pageflow/editor/entries/seed.json.erb +1 -1
  82. data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
  83. data/app/views/pageflow/entries/stylesheet.css.erb +1 -1
  84. data/app/views/pageflow/feeds/index.atom.builder +20 -0
  85. data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
  86. data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
  87. data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
  88. data/config/initializers/admin_resource_tabs.rb +29 -12
  89. data/config/initializers/features.rb +1 -0
  90. data/config/initializers/paperclip.rb +4 -0
  91. data/config/locales/de.yml +42 -19
  92. data/config/locales/en.yml +45 -17
  93. data/config/routes.rb +3 -0
  94. data/config/spring.rb +1 -1
  95. data/db/migrate/20221215101134_rename_theming_to_site.rb +9 -0
  96. data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +34 -0
  97. data/db/migrate/20221219203023_add_name_to_sites.rb +5 -0
  98. data/db/migrate/20230103155934_associate_theme_customizations_with_sites.rb +27 -0
  99. data/db/migrate/20230120092923_create_other_files.rb +23 -0
  100. data/db/migrate/20230323115745_add_feeds_enabled_to_sites.rb +5 -0
  101. data/db/migrate/20230323154323_add_sitemap_enabled_to_sites.rb +5 -0
  102. data/db/migrate/20230331103823_add_title_to_sites.rb +5 -0
  103. data/db/migrate/20230405103612_add_custom_feed_url_to_sites.rb +5 -0
  104. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +455 -119
  105. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +31 -8
  106. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +1 -1
  107. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +1 -1
  108. data/entry_types/paged/app/controllers/pageflow_paged/editor/entries_controller.rb +0 -2
  109. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
  110. data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
  111. data/entry_types/paged/config/initializers/features.rb +0 -1
  112. data/entry_types/paged/lib/pageflow_paged/engine.rb +17 -1
  113. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
  114. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +3 -4
  115. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +13 -6
  116. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -0
  117. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +11 -0
  118. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +42 -0
  119. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
  120. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +31 -10
  121. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +9 -1
  122. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +3 -1
  123. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +23 -0
  124. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +6 -1
  125. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -5
  126. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +10 -0
  127. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +44 -41
  128. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder +16 -0
  129. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +8 -5
  130. data/entry_types/scrolled/config/initializers/features.rb +5 -0
  131. data/entry_types/scrolled/config/locales/consent_widget.de.yml +4 -0
  132. data/entry_types/scrolled/config/locales/consent_widget.en.yml +4 -0
  133. data/entry_types/scrolled/config/locales/de.yml +189 -8
  134. data/entry_types/scrolled/config/locales/en.yml +207 -2
  135. data/entry_types/scrolled/config/routes.rb +4 -0
  136. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +97 -5
  137. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
  138. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +96 -0
  139. data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +38 -0
  140. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +17 -1
  141. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -0
  142. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +6 -1
  143. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +1 -1
  144. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +1 -2
  145. data/entry_types/scrolled/package/contentElements-editor.js +307 -22
  146. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  147. data/entry_types/scrolled/package/contentElements-frontend.js +690 -71
  148. data/entry_types/scrolled/package/editor.js +616 -220
  149. data/entry_types/scrolled/package/frontend/{EditableInlineText.module-c6672f27.js → EditableInlineText.module-fa9e3aff.js} +1669 -1674
  150. data/entry_types/scrolled/package/frontend/PhonePlatformContext-10a1d600.js +32 -0
  151. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-727cce0d.js +107 -0
  152. data/entry_types/scrolled/package/frontend/Viewer-169e14ca.js +154 -0
  153. data/entry_types/scrolled/package/frontend/{Viewer-6b05522f.js → Viewer-ee1aa590.js} +32 -161
  154. data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
  155. data/entry_types/scrolled/package/frontend/{components-487daafa.js → components-4a09bfa3.js} +185 -45
  156. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-22e65f92.js → i18n-ddd92820.js} +162 -292
  157. data/entry_types/scrolled/package/frontend/index-02378634.js +118 -0
  158. data/entry_types/scrolled/package/frontend/index.css +1 -1
  159. data/entry_types/scrolled/package/frontend/index.js +375 -40
  160. data/entry_types/scrolled/package/frontend/useContentElementEditorState-63045393.js +52 -0
  161. data/entry_types/scrolled/package/package.json +2 -1
  162. data/entry_types/scrolled/package/testHelpers.js +9 -2
  163. data/entry_types/scrolled/package/values/colors.module.css +15 -0
  164. data/entry_types/scrolled/package/widgets/consentBar.css +1 -0
  165. data/entry_types/scrolled/package/widgets/consentBar.js +426 -0
  166. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  167. data/entry_types/scrolled/package/widgets/defaultNavigation.js +16 -9
  168. data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
  169. data/lib/pageflow/ability_mixin.rb +21 -13
  170. data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
  171. data/lib/pageflow/admin/attributes_table_rows.rb +1 -1
  172. data/lib/pageflow/admin/form_inputs.rb +1 -1
  173. data/lib/pageflow/admin/tabs.rb +1 -1
  174. data/lib/pageflow/built_in_file_type.rb +7 -0
  175. data/lib/pageflow/configuration/permissions.rb +3 -3
  176. data/lib/pageflow/configuration.rb +38 -17
  177. data/lib/pageflow/engine.rb +60 -39
  178. data/lib/pageflow/entry_export_import/entry_serialization.rb +1 -1
  179. data/lib/pageflow/entry_export_import/revision_serialization.rb +1 -1
  180. data/lib/pageflow/file_type.rb +2 -2
  181. data/lib/pageflow/global_config_api.rb +2 -2
  182. data/lib/pageflow/nested_revision_component.rb +23 -5
  183. data/lib/pageflow/primary_domain_entry_redirect.rb +7 -7
  184. data/lib/pageflow/rails_version.rb +19 -0
  185. data/lib/pageflow/seeds.rb +20 -17
  186. data/lib/pageflow/theme_customizations.rb +10 -10
  187. data/lib/pageflow/version.rb +1 -1
  188. data/lib/pageflow/widget_types.rb +4 -0
  189. data/package/config/webpack5.js +14 -0
  190. data/package/editor.js +148 -37
  191. data/package/frontend.js +26 -2
  192. data/package/testHelpers.js +1 -1
  193. data/package/ui.js +296 -71
  194. data/spec/factories/accounts.rb +5 -2
  195. data/spec/factories/draft_entries.rb +2 -2
  196. data/spec/factories/entries.rb +19 -5
  197. data/spec/factories/entry_templates.rb +1 -1
  198. data/spec/factories/permalink_directory.rb +1 -1
  199. data/spec/factories/published_entries.rb +2 -2
  200. data/spec/factories/sites.rb +12 -0
  201. data/vendor/assets/javascripts/iscroll.js +4 -7
  202. metadata +84 -59
  203. data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
  204. data/app/helpers/pageflow/themings_helper.rb +0 -11
  205. data/app/models/pageflow/theming.rb +0 -30
  206. data/app/views/admin/accounts/_theming_defaults_inline_help.html.erb +0 -5
  207. data/app/views/admin/accounts/_theming_details.html.arb +0 -5
  208. data/app/views/pageflow/editor/themings/_theming.json.jbuilder +0 -1
  209. data/entry_types/scrolled/package/frontend/arrowRight-7e3d9dd5.js +0 -42
  210. data/spec/factories/themings.rb +0 -7
  211. /data/app/views/pageflow/entries/{_theming.css.erb → _site.css.erb} +0 -0
@@ -1,4 +1,4 @@
1
- var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, ChildViewContainer, IScroll, jquery_minicolors, wysihtml5, Cocktail, frontend, frontend$1) {
1
+ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, ChildViewContainer, IScroll, jquery_minicolors, wysihtml5, jqueryUi, Cocktail, frontend, frontend$1) {
2
2
  'use strict';
3
3
 
4
4
  Backbone = Backbone && Backbone.hasOwnProperty('default') ? Backbone['default'] : Backbone;
@@ -1062,6 +1062,107 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1062
1062
  }, this), 200);
1063
1063
  }
1064
1064
  });
1065
+
1066
+ function _defineProperty(obj, key, value) {
1067
+ if (key in obj) {
1068
+ Object.defineProperty(obj, key, {
1069
+ value: value,
1070
+ enumerable: true,
1071
+ configurable: true,
1072
+ writable: true
1073
+ });
1074
+ } else {
1075
+ obj[key] = value;
1076
+ }
1077
+
1078
+ return obj;
1079
+ }
1080
+
1081
+ function ownKeys(object, enumerableOnly) {
1082
+ var keys = Object.keys(object);
1083
+
1084
+ if (Object.getOwnPropertySymbols) {
1085
+ var symbols = Object.getOwnPropertySymbols(object);
1086
+ if (enumerableOnly) symbols = symbols.filter(function (sym) {
1087
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
1088
+ });
1089
+ keys.push.apply(keys, symbols);
1090
+ }
1091
+
1092
+ return keys;
1093
+ }
1094
+
1095
+ function _objectSpread2(target) {
1096
+ for (var i = 1; i < arguments.length; i++) {
1097
+ var source = arguments[i] != null ? arguments[i] : {};
1098
+
1099
+ if (i % 2) {
1100
+ ownKeys(Object(source), true).forEach(function (key) {
1101
+ _defineProperty(target, key, source[key]);
1102
+ });
1103
+ } else if (Object.getOwnPropertyDescriptors) {
1104
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
1105
+ } else {
1106
+ ownKeys(Object(source)).forEach(function (key) {
1107
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
1108
+ });
1109
+ }
1110
+ }
1111
+
1112
+ return target;
1113
+ }
1114
+
1115
+ var attributeBinding = {
1116
+ setupBooleanAttributeBinding: function setupBooleanAttributeBinding(optionName, updateMethod) {
1117
+ this.setupAttributeBinding(optionName, updateMethod, Boolean);
1118
+ },
1119
+ getBooleanAttributBoundOption: function getBooleanAttributBoundOption(optionName) {
1120
+ return this.getAttributeBoundOption(optionName, Boolean);
1121
+ },
1122
+ setupAttributeBinding: function setupAttributeBinding(optionName, updateMethod) {
1123
+ var _this = this;
1124
+
1125
+ var normalize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (value) {
1126
+ return value;
1127
+ };
1128
+ var binding = this.options["".concat(optionName, "Binding")];
1129
+ var view = this;
1130
+
1131
+ if (binding) {
1132
+ _.flatten([binding]).forEach(function (attribute) {
1133
+ _this.listenTo(_this.model, 'change:' + attribute, update);
1134
+ });
1135
+ }
1136
+
1137
+ update();
1138
+
1139
+ function update() {
1140
+ updateMethod.call(view, view.getAttributeBoundOption(optionName, normalize));
1141
+ }
1142
+ },
1143
+ getAttributeBoundOption: function getAttributeBoundOption(optionName) {
1144
+ var _this2 = this;
1145
+
1146
+ var normalize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (value) {
1147
+ return value;
1148
+ };
1149
+ var binding = this.options["".concat(optionName, "Binding")];
1150
+ var bindingValueOptionName = "".concat(optionName, "BindingValue");
1151
+ var value = Array.isArray(binding) ? binding.map(function (attribute) {
1152
+ return _this2.model.get(attribute);
1153
+ }) : this.model.get(binding);
1154
+
1155
+ if (bindingValueOptionName in this.options) {
1156
+ return value === this.options[bindingValueOptionName];
1157
+ } else if (typeof this.options[optionName] === 'function') {
1158
+ return normalize(this.options[optionName](value));
1159
+ } else if (optionName in this.options) {
1160
+ return normalize(this.options[optionName]);
1161
+ } else if (binding) {
1162
+ return normalize(value);
1163
+ }
1164
+ }
1165
+ };
1065
1166
  /**
1066
1167
  * Mixin for input views handling common concerns like labels,
1067
1168
  * inline help, visiblity and disabling.
@@ -1191,7 +1292,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1191
1292
  * @mixin
1192
1293
  */
1193
1294
 
1194
- var inputView = {
1295
+ var inputView = _objectSpread2(_objectSpread2({}, attributeBinding), {}, {
1195
1296
  ui: {
1196
1297
  label: 'label',
1197
1298
  labelText: 'label .name',
@@ -1235,8 +1336,8 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1235
1336
  this.ui.labelText.text(this.labelText());
1236
1337
  this.updateInlineHelp();
1237
1338
  this.setLabelFor();
1238
- this.setupAttributeBinding('disabled', this.updateDisabled);
1239
- this.setupAttributeBinding('visible', this.updateVisible);
1339
+ this.setupBooleanAttributeBinding('disabled', this.updateDisabled);
1340
+ this.setupBooleanAttributeBinding('visible', this.updateVisible);
1240
1341
  },
1241
1342
 
1242
1343
  /**
@@ -1285,7 +1386,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1285
1386
  }
1286
1387
  },
1287
1388
  isDisabled: function isDisabled() {
1288
- return this.getAttributeBoundOption('disabled');
1389
+ return this.getBooleanAttributBoundOption('disabled');
1289
1390
  },
1290
1391
  updateDisabled: function updateDisabled() {
1291
1392
  this.$el.toggleClass('input-disabled', !!this.isDisabled());
@@ -1303,46 +1404,9 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1303
1404
  }
1304
1405
  },
1305
1406
  updateVisible: function updateVisible() {
1306
- this.$el.toggleClass('input-hidden_via_binding', this.getAttributeBoundOption('visible') === false);
1307
- },
1308
- setupAttributeBinding: function setupAttributeBinding(optionName, updateMethod) {
1309
- var _this = this;
1310
-
1311
- var binding = this.options["".concat(optionName, "Binding")];
1312
- var view = this;
1313
-
1314
- if (binding) {
1315
- _.flatten([binding]).forEach(function (attribute) {
1316
- _this.listenTo(_this.model, 'change:' + attribute, update);
1317
- });
1318
- }
1319
-
1320
- update();
1321
-
1322
- function update() {
1323
- updateMethod.call(view, view.getAttributeBoundOption(optionName));
1324
- }
1325
- },
1326
- getAttributeBoundOption: function getAttributeBoundOption(optionName) {
1327
- var _this2 = this;
1328
-
1329
- var binding = this.options["".concat(optionName, "Binding")];
1330
- var bindingValueOptionName = "".concat(optionName, "BindingValue");
1331
- var value = Array.isArray(binding) ? binding.map(function (attribute) {
1332
- return _this2.model.get(attribute);
1333
- }) : this.model.get(binding);
1334
-
1335
- if (bindingValueOptionName in this.options) {
1336
- return value === this.options[bindingValueOptionName];
1337
- } else if (typeof this.options[optionName] === 'function') {
1338
- return !!this.options[optionName](value);
1339
- } else if (optionName in this.options) {
1340
- return !!this.options[optionName];
1341
- } else if (binding) {
1342
- return !!value;
1343
- }
1407
+ this.$el.toggleClass('hidden_via_binding', this.getBooleanAttributBoundOption('visible') === false);
1344
1408
  }
1345
- };
1409
+ });
1346
1410
 
1347
1411
  function template$4(data) {
1348
1412
  var __p = '';
@@ -1460,6 +1524,125 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1460
1524
  this.ui.link.attr('href', url);
1461
1525
  }
1462
1526
  });
1527
+
1528
+ function _classCallCheck(instance, Constructor) {
1529
+ if (!(instance instanceof Constructor)) {
1530
+ throw new TypeError("Cannot call a class as a function");
1531
+ }
1532
+ }
1533
+
1534
+ function _defineProperties(target, props) {
1535
+ for (var i = 0; i < props.length; i++) {
1536
+ var descriptor = props[i];
1537
+ descriptor.enumerable = descriptor.enumerable || false;
1538
+ descriptor.configurable = true;
1539
+ if ("value" in descriptor) descriptor.writable = true;
1540
+ Object.defineProperty(target, descriptor.key, descriptor);
1541
+ }
1542
+ }
1543
+
1544
+ function _createClass(Constructor, protoProps, staticProps) {
1545
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
1546
+ if (staticProps) _defineProperties(Constructor, staticProps);
1547
+ return Constructor;
1548
+ }
1549
+ /**
1550
+ * Input view for a number.
1551
+ *
1552
+ * See {@link inputView} for further options.
1553
+ *
1554
+ * @param {Object} [options]
1555
+ *
1556
+ * @param {string} [options.locale]
1557
+ * Locale used to fomat and parse numbers.
1558
+ *
1559
+ * @class
1560
+ */
1561
+
1562
+
1563
+ var NumberInputView = Marionette.ItemView.extend({
1564
+ mixins: [inputView],
1565
+ template: function template() {
1566
+ return "\n <label>\n <span class=\"name\"></span>\n <span class=\"inline_help\"></span>\n </label>\n <input type=\"text\" dir=\"auto\" />\n ";
1567
+ },
1568
+ ui: {
1569
+ input: 'input'
1570
+ },
1571
+ events: {
1572
+ 'change': 'onChange'
1573
+ },
1574
+ initialize: function initialize() {
1575
+ this.parser = new NumberParser(this.options.locale);
1576
+ },
1577
+ onRender: function onRender() {
1578
+ this.load();
1579
+ this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
1580
+ },
1581
+ onChange: function onChange() {
1582
+ this.save();
1583
+ this.load();
1584
+ },
1585
+ onClose: function onClose() {
1586
+ this.save();
1587
+ },
1588
+ save: function save() {
1589
+ var inputValue = this.ui.input.val();
1590
+ this.model.set(this.options.propertyName, this.parser.parse(inputValue) || 0);
1591
+ },
1592
+ load: function load() {
1593
+ var input = this.ui.input;
1594
+ var value = this.model.get(this.options.propertyName) || 0;
1595
+ input.val(value.toLocaleString(this.options.locale, {
1596
+ useGrouping: false
1597
+ }));
1598
+ },
1599
+ displayValidationError: function displayValidationError(message) {
1600
+ this.$el.addClass('invalid');
1601
+ this.ui.input.attr('title', message);
1602
+ },
1603
+ resetValidationError: function resetValidationError(message) {
1604
+ this.$el.removeClass('invalid');
1605
+ this.ui.input.attr('title', '');
1606
+ }
1607
+ });
1608
+
1609
+ var NumberParser = /*#__PURE__*/function () {
1610
+ function NumberParser(locale) {
1611
+ _classCallCheck(this, NumberParser);
1612
+
1613
+ var format = new Intl.NumberFormat(locale);
1614
+ var parts = format.formatToParts(12345.6);
1615
+ var numerals = Array.from({
1616
+ length: 10
1617
+ }).map(function (_, i) {
1618
+ return format.format(i);
1619
+ });
1620
+ var index = new Map(numerals.map(function (d, i) {
1621
+ return [d, i];
1622
+ }));
1623
+ this._group = new RegExp("[".concat(parts.find(function (d) {
1624
+ return d.type === "group";
1625
+ }).value, "]"), "g");
1626
+ this._decimal = new RegExp("[".concat(parts.find(function (d) {
1627
+ return d.type === "decimal";
1628
+ }).value, "]"));
1629
+ this._numeral = new RegExp("[".concat(numerals.join(""), "]"), "g");
1630
+
1631
+ this._index = function (d) {
1632
+ return index.get(d);
1633
+ };
1634
+ }
1635
+
1636
+ _createClass(NumberParser, [{
1637
+ key: "parse",
1638
+ value: function parse(string) {
1639
+ string = string.trim().replace(this._group, "").replace(this._decimal, ".").replace(this._numeral, this._index);
1640
+ return string ? +string : NaN;
1641
+ }
1642
+ }]);
1643
+
1644
+ return NumberParser;
1645
+ }();
1463
1646
  /**
1464
1647
  * Text based input view that can display a placeholder.
1465
1648
  *
@@ -1482,6 +1665,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1482
1665
  * inside a given model.
1483
1666
  */
1484
1667
 
1668
+
1485
1669
  var inputWithPlaceholderText = {
1486
1670
  onRender: function onRender() {
1487
1671
  this.updatePlaceholder();
@@ -1669,11 +1853,15 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1669
1853
  this.ui.input.minicolors({
1670
1854
  changeDelay: 200,
1671
1855
  change: _.bind(function (color) {
1856
+ this._saving = true;
1857
+
1672
1858
  if (color === this.defaultValue()) {
1673
1859
  this.model.unset(this.options.propertyName);
1674
1860
  } else {
1675
1861
  this.model.set(this.options.propertyName, color);
1676
1862
  }
1863
+
1864
+ this._saving = false;
1677
1865
  }, this)
1678
1866
  });
1679
1867
  this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
@@ -1702,7 +1890,10 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1702
1890
  }
1703
1891
  },
1704
1892
  load: function load() {
1705
- this.ui.input.minicolors('value', this.model.get(this.options.propertyName) || this.defaultValue());
1893
+ if (!this._saving) {
1894
+ this.ui.input.minicolors('value', this.model.get(this.options.propertyName) || this.defaultValue());
1895
+ }
1896
+
1706
1897
  this.$el.toggleClass('is_default', !this.model.has(this.options.propertyName));
1707
1898
  },
1708
1899
  refreshPicker: function refreshPicker() {
@@ -2258,21 +2449,6 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2258
2449
  }
2259
2450
  });
2260
2451
 
2261
- function _defineProperty(obj, key, value) {
2262
- if (key in obj) {
2263
- Object.defineProperty(obj, key, {
2264
- value: value,
2265
- enumerable: true,
2266
- configurable: true,
2267
- writable: true
2268
- });
2269
- } else {
2270
- obj[key] = value;
2271
- }
2272
-
2273
- return obj;
2274
- }
2275
-
2276
2452
  function template$9(data) {
2277
2453
  var __p = '';
2278
2454
  __p += '<label>\n <span class="name"></span>\n <span class="inline_help"></span>\n</label>\n<input type="text" />\n<div class="validation"></div>\n';
@@ -2537,6 +2713,25 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2537
2713
  *
2538
2714
  * @param {Object} [options]
2539
2715
  *
2716
+ * @param {number} [options.defaultValue]
2717
+ * Defaults value to display if property is not set.
2718
+ *
2719
+ * @param {number} [options.minValue=0]
2720
+ * Value when dragging slider to the very left.
2721
+ *
2722
+ * @param {number} [options.maxValue=100]
2723
+ * Value when dragging slider to the very right.
2724
+ *
2725
+ * @param {string} [options.unit="%"]
2726
+ * Unit to display after value.
2727
+ *
2728
+ * @param {function} [options.displayText]
2729
+ * Function that receives value and returns custom text to display as value.
2730
+ *
2731
+ * @param {boolean} [options.saveOnSlide]
2732
+ * Already update the model while dragging the handle - not only after
2733
+ * handle has been released.
2734
+ *
2540
2735
  * @class
2541
2736
  */
2542
2737
 
@@ -2550,15 +2745,27 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2550
2745
  value: '.value'
2551
2746
  },
2552
2747
  events: {
2553
- 'slidechange': 'save'
2748
+ 'slidechange': 'save',
2749
+ 'slide': 'handleSlide'
2554
2750
  },
2555
2751
  onRender: function onRender() {
2752
+ var _this = this;
2753
+
2556
2754
  this.ui.widget.slider({
2557
- animate: 'fast',
2558
- min: 'minValue' in this.options ? this.options.minValue : 0,
2559
- max: 'maxValue' in this.options ? this.options.maxValue : 100
2755
+ animate: 'fast'
2756
+ });
2757
+ this.setupAttributeBinding('minValue', function (value) {
2758
+ return _this.updateSliderOption('min', value || 0);
2759
+ });
2760
+ this.setupAttributeBinding('maxValue', function (value) {
2761
+ return _this.updateSliderOption('max', value || 100);
2560
2762
  });
2561
2763
  this.load();
2764
+ this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
2765
+ },
2766
+ updateSliderOption: function updateSliderOption(name, value) {
2767
+ this.ui.widget.slider('option', name, value);
2768
+ this.updateText(this.ui.widget.slider('value'));
2562
2769
  },
2563
2770
  updateDisabled: function updateDisabled(disabled) {
2564
2771
  this.$el.toggleClass('disabled', !!disabled);
@@ -2569,11 +2776,15 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2569
2776
  this.ui.widget.slider('enable');
2570
2777
  }
2571
2778
  },
2572
- save: function save() {
2573
- var value = this.ui.widget.slider('option', 'value');
2574
- var unit = 'unit' in this.options ? this.options.unit : '%';
2575
- this.ui.value.text(value + unit);
2576
- this.model.set(this.options.propertyName, value);
2779
+ handleSlide: function handleSlide(event, ui) {
2780
+ this.updateText(ui.value);
2781
+
2782
+ if (this.options.saveOnSlide) {
2783
+ this.save(event, ui);
2784
+ }
2785
+ },
2786
+ save: function save(event, ui) {
2787
+ this.model.set(this.options.propertyName, ui.value);
2577
2788
  },
2578
2789
  load: function load() {
2579
2790
  var value;
@@ -2584,7 +2795,18 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2584
2795
  value = 'defaultValue' in this.options ? this.options.defaultValue : 0;
2585
2796
  }
2586
2797
 
2587
- this.ui.widget.slider('option', 'value', value);
2798
+ this.ui.widget.slider('option', 'value', this.clampValue(value));
2799
+ this.updateText(value);
2800
+ },
2801
+ clampValue: function clampValue(value) {
2802
+ var min = this.ui.widget.slider('option', 'min');
2803
+ var max = this.ui.widget.slider('option', 'max');
2804
+ return Math.min(max, Math.max(min, value));
2805
+ },
2806
+ updateText: function updateText(value) {
2807
+ var unit = 'unit' in this.options ? this.options.unit : '%';
2808
+ var text = 'displayText' in this.options ? this.options.displayText(value) : value + unit;
2809
+ this.ui.value.text(text);
2588
2810
  }
2589
2811
  });
2590
2812
 
@@ -2971,7 +3193,10 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2971
3193
  return view;
2972
3194
  },
2973
3195
  appendSubview: function appendSubview(view) {
2974
- return this.$el.append(this.subview(view).el);
3196
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
3197
+ to = _ref.to;
3198
+
3199
+ return (to || this.$el).append(this.subview(view).el);
2975
3200
  },
2976
3201
  onClose: function onClose() {
2977
3202
  if (this.subviews) {
@@ -3056,7 +3281,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3056
3281
  return obj;
3057
3282
  }
3058
3283
 
3059
- function ownKeys(object, enumerableOnly) {
3284
+ function ownKeys$1(object, enumerableOnly) {
3060
3285
  var keys = Object.keys(object);
3061
3286
 
3062
3287
  if (Object.getOwnPropertySymbols) {
@@ -3070,18 +3295,18 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3070
3295
  return keys;
3071
3296
  }
3072
3297
 
3073
- function _objectSpread2(target) {
3298
+ function _objectSpread2$1(target) {
3074
3299
  for (var i = 1; i < arguments.length; i++) {
3075
3300
  var source = arguments[i] != null ? arguments[i] : {};
3076
3301
 
3077
3302
  if (i % 2) {
3078
- ownKeys(Object(source), true).forEach(function (key) {
3303
+ ownKeys$1(Object(source), true).forEach(function (key) {
3079
3304
  _defineProperty$1(target, key, source[key]);
3080
3305
  });
3081
3306
  } else if (Object.getOwnPropertyDescriptors) {
3082
3307
  Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
3083
3308
  } else {
3084
- ownKeys(Object(source)).forEach(function (key) {
3309
+ ownKeys$1(Object(source)).forEach(function (key) {
3085
3310
  Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
3086
3311
  });
3087
3312
  }
@@ -3252,7 +3477,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3252
3477
  });
3253
3478
  var validFileTypeTranslationList = {
3254
3479
  validFileTypeTranslations: function validFileTypeTranslations(validFileTypes) {
3255
- return _.map(validFileTypes, function (validFileType) {
3480
+ return validFileTypes.map(function (validFileType) {
3256
3481
  return I18n$1.t('activerecord.models.' + validFileType.i18nKey + '.other');
3257
3482
  }).join(', ');
3258
3483
  }
@@ -3282,7 +3507,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3282
3507
  initialize: function initialize(upload, options) {
3283
3508
  var editor = options.editor;
3284
3509
  var fileType = options.fileType;
3285
- var validFileTypes = editor.nextUploadTargetFile.fileType().nestedFileTypes.fileTypes;
3510
+ var validFileTypes = editor.nextUploadTargetFile.fileType().nestedFileTypes;
3286
3511
  var validFileTypeTranslations = this.validFileTypeTranslations(validFileTypes);
3287
3512
  var typeI18nKey = fileType.i18nKey;
3288
3513
  var typeSingularTranslation = I18n$1.t('activerecord.models.' + typeI18nKey + '.one');
@@ -3590,22 +3815,31 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3590
3815
  this.clientSideConfigModifications[name].push(config);
3591
3816
  },
3592
3817
  setup: function setup(serverSideConfigs) {
3818
+ var _this = this;
3819
+
3593
3820
  var clientSideConfigs = this.clientSideConfigs;
3594
3821
  this._setup = true;
3595
- this.collection = new FileTypesCollection(_.map(serverSideConfigs, function (serverSideConfig) {
3822
+
3823
+ var configs = _.chain(serverSideConfigs).map(function (serverSideConfig) {
3596
3824
  var clientSideConfig = clientSideConfigs[serverSideConfig.collectionName];
3597
3825
 
3598
3826
  if (!clientSideConfig) {
3599
3827
  throw 'Missing client side config for file type "' + serverSideConfig.collectionName + '"';
3600
3828
  }
3601
3829
 
3602
- _(this.clientSideConfigModifications[serverSideConfig.collectionName]).each(function (modification) {
3830
+ _(_this.clientSideConfigModifications[serverSideConfig.collectionName]).each(function (modification) {
3603
3831
  this.lintModification(modification, serverSideConfig.collectionName);
3604
3832
  this.applyModification(clientSideConfig, modification);
3605
- }, this);
3833
+ }, _this);
3606
3834
 
3607
- return new FileType(_.extend({}, serverSideConfig, clientSideConfig));
3608
- }, this));
3835
+ return _.extend({}, serverSideConfig, clientSideConfig);
3836
+ }).sortBy(function (config) {
3837
+ return config.priority || 10;
3838
+ }).value();
3839
+
3840
+ this.collection = new FileTypesCollection(_.map(configs, function (config) {
3841
+ return new FileType(config);
3842
+ }));
3609
3843
  var those = this;
3610
3844
 
3611
3845
  _.map(serverSideConfigs, function (serverSideConfig) {
@@ -3970,7 +4204,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3970
4204
  * Backbone view that will be rendered if the browser is not supported.
3971
4205
  */
3972
4206
  registerEntryType: function registerEntryType(name, options) {
3973
- this.entryType = _objectSpread2({
4207
+ this.entryType = _objectSpread2$1({
3974
4208
  name: name
3975
4209
  }, options);
3976
4210
  },
@@ -4111,10 +4345,12 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
4111
4345
  * Trigger selection of the given file type with the given
4112
4346
  * handler. Payload hash is passed to selection handler as options.
4113
4347
  *
4114
- * @param {string|{name: string, filter: string}} fileType
4348
+ * @param {string|{name: string, filter: string}|{defaultTab: string, filter: string}} fileType
4115
4349
  * Either collection name of a file type or and object containing
4116
4350
  * the collection name a file type and a the name of a file type
4117
- * filter.
4351
+ * filter or an object containingn a defaultTab property that controls
4352
+ * which tab will visible initially, while allowing selecting files of
4353
+ * any type.
4118
4354
  *
4119
4355
  * @param {string} handlerName
4120
4356
  * The name of a handler registered via {@link
@@ -4140,7 +4376,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
4140
4376
  };
4141
4377
  }
4142
4378
 
4143
- this.navigate('/files/' + fileType.name + '?handler=' + handlerName + '&payload=' + encodeURIComponent(JSON.stringify(payload)) + (fileType.filter ? '&filter=' + fileType.filter : ''), {
4379
+ this.navigate('/files/' + (fileType.defaultTab ? "".concat(fileType.defaultTab, ":default") : fileType.name) + '?handler=' + handlerName + '&payload=' + encodeURIComponent(JSON.stringify(payload)) + (fileType.filter ? '&filter=' + fileType.filter : ''), {
4144
4380
  trigger: true
4145
4381
  });
4146
4382
  },
@@ -4154,7 +4390,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
4154
4390
  * whether the page is a valid selection
4155
4391
  */
4156
4392
  selectPage: function selectPage(options) {
4157
- return this.pageSelectionView.selectPage(_objectSpread2(_objectSpread2({}, options), {}, {
4393
+ return this.pageSelectionView.selectPage(_objectSpread2$1(_objectSpread2$1({}, options), {}, {
4158
4394
  entry: state.entry
4159
4395
  }));
4160
4396
  },
@@ -4164,7 +4400,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
4164
4400
  }
4165
4401
 
4166
4402
  var payloadJson = JSON.parse(decodeURIComponent(encodedPayload));
4167
- return new this.fileSelectionHandlers[handlerName](_objectSpread2(_objectSpread2({}, payloadJson), {}, {
4403
+ return new this.fileSelectionHandlers[handlerName](_objectSpread2$1(_objectSpread2$1({}, payloadJson), {}, {
4168
4404
  entry: state.entry
4169
4405
  }));
4170
4406
  },
@@ -5660,10 +5896,10 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
5660
5896
  },
5661
5897
  handleError: function handleError() {}
5662
5898
  });
5663
- var Theming = Backbone.Model.extend({
5664
- modelName: 'theming',
5665
- i18nKey: 'pageflow/theming',
5666
- collectionName: 'themings'
5899
+ var Site = Backbone.Model.extend({
5900
+ modelName: 'site',
5901
+ i18nKey: 'pageflow/site',
5902
+ collectionName: 'sites'
5667
5903
  });
5668
5904
  var ChapterConfiguration = Configuration.extend({
5669
5905
  modelName: 'chapter',
@@ -6465,7 +6701,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6465
6701
  attrs: {
6466
6702
  collection: collectionName,
6467
6703
  files: selections.toJSON().map(function (item, index) {
6468
- return _objectSpread2(_objectSpread2({}, item), {}, {
6704
+ return _objectSpread2$1(_objectSpread2$1({}, item), {}, {
6469
6705
  url: selections.at(index).get('source_url')
6470
6706
  });
6471
6707
  })
@@ -6515,6 +6751,13 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6515
6751
  var parent = options.parent;
6516
6752
  var parentModel = options.parentModel;
6517
6753
  this.autoConsolidatePositions = options.autoConsolidatePositions;
6754
+ this.listenTo(this, 'add', function (model) {
6755
+ if (options.parentReferenceAttribute) {
6756
+ model[options.parentReferenceAttribute] = parentModel;
6757
+ }
6758
+
6759
+ model.set(options.foreignKeyAttribute, parentModel.id);
6760
+ });
6518
6761
  SubsetCollection.prototype.constructor.call(this, {
6519
6762
  parent: parent,
6520
6763
  parentModel: parentModel,
@@ -6525,13 +6768,6 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6525
6768
  return item.get('position');
6526
6769
  }
6527
6770
  });
6528
- this.listenTo(this, 'add', function (model) {
6529
- if (options.parentReferenceAttribute) {
6530
- model[options.parentReferenceAttribute] = parentModel;
6531
- }
6532
-
6533
- model.set(options.foreignKeyAttribute, parentModel.id);
6534
- });
6535
6771
  this.listenTo(parentModel, 'destroy dependentDestroy', function () {
6536
6772
  this.invoke('trigger', 'dependentDestroy');
6537
6773
  this.clear();
@@ -6775,6 +7011,64 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6775
7011
  }
6776
7012
  });
6777
7013
 
7014
+ function _arrayWithHoles$1(arr) {
7015
+ if (Array.isArray(arr)) return arr;
7016
+ }
7017
+
7018
+ function _iterableToArrayLimit$1(arr, i) {
7019
+ if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
7020
+ var _arr = [];
7021
+ var _n = true;
7022
+ var _d = false;
7023
+ var _e = undefined;
7024
+
7025
+ try {
7026
+ for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
7027
+ _arr.push(_s.value);
7028
+
7029
+ if (i && _arr.length === i) break;
7030
+ }
7031
+ } catch (err) {
7032
+ _d = true;
7033
+ _e = err;
7034
+ } finally {
7035
+ try {
7036
+ if (!_n && _i["return"] != null) _i["return"]();
7037
+ } finally {
7038
+ if (_d) throw _e;
7039
+ }
7040
+ }
7041
+
7042
+ return _arr;
7043
+ }
7044
+
7045
+ function _arrayLikeToArray$1(arr, len) {
7046
+ if (len == null || len > arr.length) len = arr.length;
7047
+
7048
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
7049
+ arr2[i] = arr[i];
7050
+ }
7051
+
7052
+ return arr2;
7053
+ }
7054
+
7055
+ function _unsupportedIterableToArray$1(o, minLen) {
7056
+ if (!o) return;
7057
+ if (typeof o === "string") return _arrayLikeToArray$1(o, minLen);
7058
+ var n = Object.prototype.toString.call(o).slice(8, -1);
7059
+ if (n === "Object" && o.constructor) n = o.constructor.name;
7060
+ if (n === "Map" || n === "Set") return Array.from(n);
7061
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen);
7062
+ }
7063
+
7064
+ function _nonIterableRest$1() {
7065
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
7066
+ }
7067
+
7068
+ function _slicedToArray$1(arr, i) {
7069
+ return _arrayWithHoles$1(arr) || _iterableToArrayLimit$1(arr, i) || _unsupportedIterableToArray$1(arr, i) || _nonIterableRest$1();
7070
+ }
7071
+
6778
7072
  function template$3$1(data) {
6779
7073
  var __t,
6780
7074
  __p = '';
@@ -7440,6 +7734,13 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
7440
7734
  * Require click to open menu. By default, menu opens on when the
7441
7735
  * mouse enters the button.
7442
7736
  *
7737
+ * @param {String} [options.alignMenu]
7738
+ * "right" to align menu on the right. Aligned on the left by
7739
+ * default.
7740
+ *
7741
+ * @param {String} [options.buttonClassName]
7742
+ * CSS class name for button element.
7743
+ *
7443
7744
  * ## Item Models
7444
7745
  *
7445
7746
  * The following model attributes can be used to control the
@@ -7480,7 +7781,9 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
7480
7781
  this.$el.toggleClass('full_width', !!this.options.fullWidth);
7481
7782
  this.ui.button.toggleClass('has_icon_and_text', !!this.options.label);
7482
7783
  this.ui.button.toggleClass('has_icon_only', !this.options.label);
7784
+ this.ui.button.toggleClass('ellipsis_icon', !!this.options.ellipsisIcon);
7483
7785
  this.ui.button.text(this.options.label);
7786
+ this.ui.button.addClass(this.options.buttonClassName);
7484
7787
  this.ui.menu.append(this.subview(new DropDownButtonItemListView({
7485
7788
  items: this.options.items
7486
7789
  })).el);
@@ -7504,7 +7807,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
7504
7807
  var offset = this.$el.offset();
7505
7808
  this.ui.menu.css({
7506
7809
  top: offset.top + this.$el.height(),
7507
- left: offset.left,
7810
+ left: this.options.alignMenu === 'right' ? offset.left + this.$el.width() - this.ui.menu.outerWidth() : offset.left,
7508
7811
  width: this.options.fullWidth ? this.$el.width() : null
7509
7812
  });
7510
7813
  },
@@ -7638,6 +7941,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
7638
7941
  if (dropDownMenuItems.length) {
7639
7942
  this.appendSubview(new DropDownButtonView({
7640
7943
  items: dropDownMenuItems,
7944
+ ellipsisIcon: true,
7641
7945
  openOnClick: true
7642
7946
  }));
7643
7947
  }
@@ -8185,7 +8489,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
8185
8489
  configurationEditor.tab('widgets', function () {
8186
8490
  editor.entryType.appearanceInputs && editor.entryType.appearanceInputs(this, {
8187
8491
  entry: entry,
8188
- theming: state.theming
8492
+ site: state.site
8189
8493
  });
8190
8494
  entry.widgets && this.view(EditWidgetsView, {
8191
8495
  model: entry,
@@ -9170,7 +9474,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9170
9474
  this.$el.append(this.subview(this.tabsView).el);
9171
9475
  },
9172
9476
  tab: function tab(fileType) {
9173
- var selectionMode = this.options.tabName === fileType.collectionName;
9477
+ var selectionMode = this.options.allowSelectingAny || this.options.tabName === fileType.collectionName;
9174
9478
  this.tabsView.tab(fileType.collectionName, _.bind(function () {
9175
9479
  return this.subview(new FilteredFilesView({
9176
9480
  entry: state.entry,
@@ -9318,10 +9622,10 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9318
9622
  this.ui.publishUntilField.datepicker('setDate', publishedUntil);
9319
9623
  this.ui.publishUntilTimeField.val(timeStr(publishedUntil));
9320
9624
  } else {
9321
- this.ui.publishUntilField.datepicker('setDate', oneYearFromNow());
9625
+ this.ui.publishUntilField.datepicker('setDate', this.defaultPublishedUntilDate());
9322
9626
  }
9323
9627
 
9324
- this.ui.userNameField.val(state.account.get('name'));
9628
+ this.ui.userNameField.val(this.options.account.get('name'));
9325
9629
 
9326
9630
  if (this.model.get('password_protected')) {
9327
9631
  this.ui.passwordProtectedCheckBox.prop('checked', true);
@@ -9341,12 +9645,6 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9341
9645
  return ("0" + val).slice(-2);
9342
9646
  }
9343
9647
  }
9344
-
9345
- function oneYearFromNow() {
9346
- var date = new Date();
9347
- date.setFullYear(date.getFullYear() + 1);
9348
- return date;
9349
- }
9350
9648
  },
9351
9649
  save: function save() {
9352
9650
  var publishedUntil = null;
@@ -9421,6 +9719,11 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9421
9719
  return false;
9422
9720
  }
9423
9721
  },
9722
+ defaultPublishedUntilDate: function defaultPublishedUntilDate() {
9723
+ var date = new Date();
9724
+ date.setMonth(date.getMonth() + this.options.config.defaultPublishedUntilDurationInMonths);
9725
+ return date;
9726
+ },
9424
9727
  enableSave: function enableSave() {
9425
9728
  this.ui.saveButton.removeAttr('disabled');
9426
9729
  },
@@ -9520,10 +9823,16 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9520
9823
  }));
9521
9824
  },
9522
9825
  files: function files(collectionName, handler, payload, filterName) {
9826
+ var _split = (collectionName || '').split(':'),
9827
+ _split2 = _slicedToArray$1(_split, 2),
9828
+ tabName = _split2[0],
9829
+ suffix = _split2[1];
9830
+
9523
9831
  this.region.show(new FilesView({
9524
9832
  model: this.entry,
9525
9833
  selectionHandler: handler && editor.createFileSelectionHandler(handler, payload),
9526
- tabName: collectionName,
9834
+ tabName: tabName,
9835
+ allowSelectingAny: suffix === 'default',
9527
9836
  filterName: filterName
9528
9837
  }));
9529
9838
  editor.setDefaultHelpEntry('pageflow.help_entries.files');
@@ -9550,7 +9859,9 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9550
9859
  publish: function publish() {
9551
9860
  this.region.show(PublishEntryView.create({
9552
9861
  model: this.entry,
9553
- entryPublication: new EntryPublication()
9862
+ account: state.account,
9863
+ entryPublication: new EntryPublication(),
9864
+ config: state.config
9554
9865
  }));
9555
9866
  editor.setDefaultHelpEntry('pageflow.help_entries.publish');
9556
9867
  },
@@ -9909,7 +10220,15 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9909
10220
  });
9910
10221
  var InfoBoxView = Marionette.View.extend({
9911
10222
  className: 'info_box',
10223
+ mixins: [attributeBinding],
10224
+ initialize: function initialize() {
10225
+ this.setupBooleanAttributeBinding('visible', this.updateVisible);
10226
+ },
10227
+ updateVisible: function updateVisible() {
10228
+ this.$el.toggleClass('hidden_via_binding', this.getBooleanAttributBoundOption('visible') === false);
10229
+ },
9912
10230
  render: function render() {
10231
+ this.$el.addClass(this.options.level);
9913
10232
  this.$el.html(this.options.text);
9914
10233
  return this;
9915
10234
  }
@@ -10785,6 +11104,9 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10785
11104
  editor.applyDefaultHelpEntry();
10786
11105
  });
10787
11106
  });
11107
+ var OtherFile = UploadableFile.extend({
11108
+ thumbnailPictogram: 'other'
11109
+ });
10788
11110
  app.addInitializer(function (options) {
10789
11111
  var textTracksMetaDataAttribute = {
10790
11112
  name: 'text_tracks',
@@ -10894,6 +11216,18 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10894
11216
  binding: 'label'
10895
11217
  }
10896
11218
  });
11219
+ editor.fileTypes.register('other_files', {
11220
+ model: OtherFile,
11221
+ metaDataAttributes: [altMetaDataAttribute],
11222
+ matchUpload: function matchUpload() {
11223
+ return true;
11224
+ },
11225
+ priority: 100,
11226
+ configurationEditorInputs: [{
11227
+ name: 'alt',
11228
+ inputView: TextInputView
11229
+ }]
11230
+ });
10897
11231
  editor.fileTypes.setup(options.config.fileTypes);
10898
11232
  });
10899
11233
  app.addInitializer(function (options) {
@@ -10918,7 +11252,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10918
11252
  state.entry = editor.createEntryModel(options, {
10919
11253
  widgets: widgets
10920
11254
  });
10921
- state.theming = new Theming(options.theming);
11255
+ state.site = new Site(options.site);
10922
11256
  state.account = new Backbone.Model(options.account);
10923
11257
  widgets.subject = state.entry;
10924
11258
  state.storylineOrdering = new StorylineOrdering(state.storylines, state.pages);
@@ -11032,7 +11366,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11032
11366
  this.chapters = options.chapters;
11033
11367
  this.pages = options.pages;
11034
11368
  },
11035
- getThemingOption: function getThemingOption(name) {
11369
+ getSiteOption: function getSiteOption(name) {
11036
11370
  return this.entry.getTheme().get(name);
11037
11371
  },
11038
11372
  getFile: function getFile(collectionName, permaId) {
@@ -11651,7 +11985,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11651
11985
  var appearanceInputs = function appearanceInputs(tabView, options) {
11652
11986
  var entry = options.entry;
11653
11987
  var theme = entry.getTheme();
11654
- var theming = options.theming;
11988
+ var site = options.site;
11655
11989
  tabView.input('manual_start', CheckBoxInputView);
11656
11990
  tabView.input('emphasize_chapter_beginning', CheckBoxInputView);
11657
11991
  tabView.input('emphasize_new_pages', CheckBoxInputView);
@@ -11666,7 +12000,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11666
12000
 
11667
12001
  if (theme.hasHomeButton()) {
11668
12002
  tabView.input('home_url', TextInputView, {
11669
- placeholder: theming.get('pretty_url'),
12003
+ placeholder: site.get('pretty_url'),
11670
12004
  visibleBinding: 'home_button_enabled'
11671
12005
  });
11672
12006
  }
@@ -12485,6 +12819,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12485
12819
  exports.NestedFilesView = NestedFilesView;
12486
12820
  exports.NestedTypeError = NestedTypeError;
12487
12821
  exports.NotificationsView = NotificationsView;
12822
+ exports.NumberInputView = NumberInputView;
12488
12823
  exports.Object = BaseObject;
12489
12824
  exports.OrderedPageLinksCollection = OrderedPageLinksCollection;
12490
12825
  exports.OtherEntriesCollection = OtherEntriesCollection;
@@ -12516,6 +12851,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12516
12851
  exports.SidebarController = SidebarController;
12517
12852
  exports.SidebarFooterView = SidebarFooterView;
12518
12853
  exports.SidebarRouter = SidebarRouter;
12854
+ exports.Site = Site;
12519
12855
  exports.SliderInputView = SliderInputView;
12520
12856
  exports.SortableCollectionView = SortableCollectionView;
12521
12857
  exports.StaticThumbnailView = StaticThumbnailView;
@@ -12543,7 +12879,6 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12543
12879
  exports.ThemeInputView = ThemeInputView;
12544
12880
  exports.ThemeItemView = ThemeItemView;
12545
12881
  exports.ThemesCollection = ThemesCollection;
12546
- exports.Theming = Theming;
12547
12882
  exports.TooltipView = TooltipView;
12548
12883
  exports.UnmatchedUploadError = UnmatchedUploadError;
12549
12884
  exports.UploadError = UploadError;
@@ -12561,6 +12896,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12561
12896
  exports.WidgetsCollection = WidgetsCollection;
12562
12897
  exports.addAndReturnModel = addAndReturnModel;
12563
12898
  exports.app = app;
12899
+ exports.attributeBinding = attributeBinding;
12564
12900
  exports.authenticationProvider = authenticationProvider;
12565
12901
  exports.configurationContainer = configurationContainer;
12566
12902
  exports.cssModulesUtils = cssModulesUtils;
@@ -12596,4 +12932,4 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12596
12932
 
12597
12933
  return exports;
12598
12934
 
12599
- }({}, Backbone, _, Backbone.Marionette, jQuery, I18n, Backbone.ChildViewContainer, IScroll, jQuery, wysihtml5, Cocktail, pageflow, pageflow));
12935
+ }({}, Backbone, _, Backbone.Marionette, jQuery, I18n, Backbone.ChildViewContainer, IScroll, jQuery, wysihtml5, jQuery, Cocktail, pageflow, pageflow));