pageflow 16.0.0 → 16.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +210 -33
- data/README.md +0 -1
- data/Rakefile +1 -1
- data/admins/pageflow/entry.rb +0 -1
- data/admins/pageflow/sites.rb +3 -0
- data/app/assets/javascripts/pageflow/dist/ui.js +298 -72
- data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +10 -0
- data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +6 -1
- data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -0
- data/app/assets/stylesheets/pageflow/editor/help.scss +3 -3
- data/app/assets/stylesheets/pageflow/editor/info_box.scss +7 -0
- data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +0 -5
- data/app/assets/stylesheets/pageflow/ui/forms.scss +1 -1
- data/app/controllers/pageflow/chapters_controller.rb +2 -2
- data/app/controllers/pageflow/editor/files_controller.rb +1 -1
- data/app/controllers/pageflow/entries_controller.rb +10 -0
- data/app/controllers/pageflow/feeds_controller.rb +18 -0
- data/app/controllers/pageflow/pages_controller.rb +2 -2
- data/app/controllers/pageflow/sitemaps_controller.rb +15 -0
- data/app/controllers/pageflow/storylines_controller.rb +2 -2
- data/app/helpers/pageflow/entries_helper.rb +2 -1
- data/app/helpers/pageflow/feeds_helper.rb +66 -0
- data/app/helpers/pageflow/page_types_helper.rb +9 -9
- data/app/inputs/pageflow_permalink_input.rb +15 -3
- data/app/models/concerns/pageflow/reusable_file.rb +3 -3
- data/app/models/pageflow/account.rb +8 -0
- data/app/models/pageflow/audio_file_url_templates.rb +2 -1
- data/app/models/pageflow/draft_entry.rb +1 -1
- data/app/models/pageflow/entries_feed.rb +32 -0
- data/app/models/pageflow/image_file.rb +14 -3
- data/app/models/pageflow/membership.rb +3 -2
- data/app/models/pageflow/other_file.rb +5 -0
- data/app/models/pageflow/other_file_url_templates.rb +16 -0
- data/app/models/pageflow/published_entry.rb +6 -0
- data/app/models/pageflow/revision.rb +4 -0
- data/app/models/pageflow/site.rb +8 -0
- data/app/models/pageflow/sitemaps.rb +13 -0
- data/app/models/pageflow/used_file.rb +2 -2
- data/app/models/pageflow/video_file_url_templates.rb +3 -1
- data/app/models/pageflow/widget.rb +9 -1
- data/app/views/admin/entries/_permalink_inputs.html.erb +1 -2
- data/app/views/admin/sites/_attributes_table.html.arb +3 -0
- data/app/views/admin/sites/_fields.html.erb +6 -0
- data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
- data/app/views/components/pageflow/admin/sites_tab.rb +3 -0
- data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
- data/app/views/pageflow/feeds/index.atom.builder +20 -0
- data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
- data/config/initializers/features.rb +1 -0
- data/config/initializers/paperclip.rb +4 -0
- data/config/locales/de.yml +27 -6
- data/config/locales/en.yml +30 -4
- data/config/routes.rb +3 -0
- data/config/spring.rb +1 -1
- data/db/migrate/20230120092923_create_other_files.rb +23 -0
- data/db/migrate/20230323115745_add_feeds_enabled_to_sites.rb +5 -0
- data/db/migrate/20230323154323_add_sitemap_enabled_to_sites.rb +5 -0
- data/db/migrate/20230331103823_add_title_to_sites.rb +5 -0
- data/db/migrate/20230405103612_add_custom_feed_url_to_sites.rb +5 -0
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +445 -109
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +26 -3
- data/entry_types/paged/app/controllers/pageflow_paged/editor/entries_controller.rb +0 -2
- data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
- data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
- data/entry_types/paged/config/initializers/features.rb +0 -1
- data/entry_types/paged/lib/pageflow_paged/engine.rb +17 -1
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +3 -4
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +13 -6
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +11 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +42 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +31 -10
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +9 -1
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +3 -1
- data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +23 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +6 -1
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -5
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +10 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +44 -41
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder +16 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +3 -0
- data/entry_types/scrolled/config/initializers/features.rb +5 -0
- data/entry_types/scrolled/config/locales/consent_widget.de.yml +4 -0
- data/entry_types/scrolled/config/locales/consent_widget.en.yml +4 -0
- data/entry_types/scrolled/config/locales/de.yml +189 -8
- data/entry_types/scrolled/config/locales/en.yml +207 -2
- data/entry_types/scrolled/config/routes.rb +4 -0
- data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +97 -5
- data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +96 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +38 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +17 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +6 -1
- data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +1 -2
- data/entry_types/scrolled/package/contentElements-editor.js +307 -22
- data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
- data/entry_types/scrolled/package/contentElements-frontend.js +690 -71
- data/entry_types/scrolled/package/editor.js +616 -220
- data/entry_types/scrolled/package/frontend/{EditableInlineText.module-14c7b097.js → EditableInlineText.module-fa9e3aff.js} +1669 -1674
- data/entry_types/scrolled/package/frontend/PhonePlatformContext-10a1d600.js +32 -0
- data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-727cce0d.js +107 -0
- data/entry_types/scrolled/package/frontend/Viewer-169e14ca.js +154 -0
- data/entry_types/scrolled/package/frontend/{Viewer-b6becc57.js → Viewer-ee1aa590.js} +32 -161
- data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
- data/entry_types/scrolled/package/frontend/{components-b3160dd7.js → components-4a09bfa3.js} +185 -45
- data/entry_types/scrolled/package/frontend/{PhonePlatformContext-f6093cc6.js → i18n-ddd92820.js} +149 -107
- data/entry_types/scrolled/package/frontend/index-02378634.js +118 -0
- data/entry_types/scrolled/package/frontend/index.css +1 -1
- data/entry_types/scrolled/package/frontend/index.js +206 -54
- data/entry_types/scrolled/package/frontend/useContentElementEditorState-63045393.js +52 -0
- data/entry_types/scrolled/package/package.json +2 -1
- data/entry_types/scrolled/package/testHelpers.js +9 -2
- data/entry_types/scrolled/package/values/colors.module.css +15 -0
- data/entry_types/scrolled/package/widgets/consentBar.css +1 -0
- data/entry_types/scrolled/package/widgets/consentBar.js +426 -0
- data/entry_types/scrolled/package/widgets/defaultNavigation.css +1 -1
- data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
- data/lib/pageflow/ability_mixin.rb +5 -5
- data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
- data/lib/pageflow/built_in_file_type.rb +7 -0
- data/lib/pageflow/configuration.rb +21 -0
- data/lib/pageflow/engine.rb +60 -39
- data/lib/pageflow/entry_export_import/revision_serialization.rb +1 -1
- data/lib/pageflow/file_type.rb +2 -2
- data/lib/pageflow/global_config_api.rb +2 -2
- data/lib/pageflow/nested_revision_component.rb +23 -5
- data/lib/pageflow/rails_version.rb +19 -0
- data/lib/pageflow/seeds.rb +10 -7
- data/lib/pageflow/version.rb +1 -1
- data/lib/pageflow/widget_types.rb +4 -0
- data/package/config/webpack5.js +14 -0
- data/package/editor.js +141 -30
- data/package/frontend.js +26 -2
- data/package/testHelpers.js +1 -1
- data/package/ui.js +296 -71
- data/spec/factories/entries.rb +17 -3
- data/spec/factories/sites.rb +3 -0
- data/vendor/assets/javascripts/iscroll.js +4 -7
- metadata +65 -49
- data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
- data/entry_types/scrolled/package/frontend/arrowRight-78a7cee4.js +0 -42
@@ -1,5 +1,5 @@
|
|
1
1
|
this.pageflow = this.pageflow || {};
|
2
|
-
this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, Backbone, ChildViewContainer, IScroll, jquery_minicolors, wysihtml5, Cocktail) {
|
2
|
+
this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, Backbone, ChildViewContainer, IScroll, jquery_minicolors, wysihtml5, jqueryUi, Cocktail) {
|
3
3
|
'use strict';
|
4
4
|
|
5
5
|
Marionette = Marionette && Marionette.hasOwnProperty('default') ? Marionette['default'] : Marionette;
|
@@ -1067,6 +1067,107 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1067
1067
|
}
|
1068
1068
|
});
|
1069
1069
|
|
1070
|
+
function _defineProperty(obj, key, value) {
|
1071
|
+
if (key in obj) {
|
1072
|
+
Object.defineProperty(obj, key, {
|
1073
|
+
value: value,
|
1074
|
+
enumerable: true,
|
1075
|
+
configurable: true,
|
1076
|
+
writable: true
|
1077
|
+
});
|
1078
|
+
} else {
|
1079
|
+
obj[key] = value;
|
1080
|
+
}
|
1081
|
+
|
1082
|
+
return obj;
|
1083
|
+
}
|
1084
|
+
|
1085
|
+
function ownKeys(object, enumerableOnly) {
|
1086
|
+
var keys = Object.keys(object);
|
1087
|
+
|
1088
|
+
if (Object.getOwnPropertySymbols) {
|
1089
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
1090
|
+
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
1091
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
1092
|
+
});
|
1093
|
+
keys.push.apply(keys, symbols);
|
1094
|
+
}
|
1095
|
+
|
1096
|
+
return keys;
|
1097
|
+
}
|
1098
|
+
|
1099
|
+
function _objectSpread2(target) {
|
1100
|
+
for (var i = 1; i < arguments.length; i++) {
|
1101
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
1102
|
+
|
1103
|
+
if (i % 2) {
|
1104
|
+
ownKeys(Object(source), true).forEach(function (key) {
|
1105
|
+
_defineProperty(target, key, source[key]);
|
1106
|
+
});
|
1107
|
+
} else if (Object.getOwnPropertyDescriptors) {
|
1108
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
1109
|
+
} else {
|
1110
|
+
ownKeys(Object(source)).forEach(function (key) {
|
1111
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
1112
|
+
});
|
1113
|
+
}
|
1114
|
+
}
|
1115
|
+
|
1116
|
+
return target;
|
1117
|
+
}
|
1118
|
+
|
1119
|
+
var attributeBinding = {
|
1120
|
+
setupBooleanAttributeBinding: function setupBooleanAttributeBinding(optionName, updateMethod) {
|
1121
|
+
this.setupAttributeBinding(optionName, updateMethod, Boolean);
|
1122
|
+
},
|
1123
|
+
getBooleanAttributBoundOption: function getBooleanAttributBoundOption(optionName) {
|
1124
|
+
return this.getAttributeBoundOption(optionName, Boolean);
|
1125
|
+
},
|
1126
|
+
setupAttributeBinding: function setupAttributeBinding(optionName, updateMethod) {
|
1127
|
+
var _this = this;
|
1128
|
+
|
1129
|
+
var normalize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (value) {
|
1130
|
+
return value;
|
1131
|
+
};
|
1132
|
+
var binding = this.options["".concat(optionName, "Binding")];
|
1133
|
+
var view = this;
|
1134
|
+
|
1135
|
+
if (binding) {
|
1136
|
+
_.flatten([binding]).forEach(function (attribute) {
|
1137
|
+
_this.listenTo(_this.model, 'change:' + attribute, update);
|
1138
|
+
});
|
1139
|
+
}
|
1140
|
+
|
1141
|
+
update();
|
1142
|
+
|
1143
|
+
function update() {
|
1144
|
+
updateMethod.call(view, view.getAttributeBoundOption(optionName, normalize));
|
1145
|
+
}
|
1146
|
+
},
|
1147
|
+
getAttributeBoundOption: function getAttributeBoundOption(optionName) {
|
1148
|
+
var _this2 = this;
|
1149
|
+
|
1150
|
+
var normalize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (value) {
|
1151
|
+
return value;
|
1152
|
+
};
|
1153
|
+
var binding = this.options["".concat(optionName, "Binding")];
|
1154
|
+
var bindingValueOptionName = "".concat(optionName, "BindingValue");
|
1155
|
+
var value = Array.isArray(binding) ? binding.map(function (attribute) {
|
1156
|
+
return _this2.model.get(attribute);
|
1157
|
+
}) : this.model.get(binding);
|
1158
|
+
|
1159
|
+
if (bindingValueOptionName in this.options) {
|
1160
|
+
return value === this.options[bindingValueOptionName];
|
1161
|
+
} else if (typeof this.options[optionName] === 'function') {
|
1162
|
+
return normalize(this.options[optionName](value));
|
1163
|
+
} else if (optionName in this.options) {
|
1164
|
+
return normalize(this.options[optionName]);
|
1165
|
+
} else if (binding) {
|
1166
|
+
return normalize(value);
|
1167
|
+
}
|
1168
|
+
}
|
1169
|
+
};
|
1170
|
+
|
1070
1171
|
/**
|
1071
1172
|
* Mixin for input views handling common concerns like labels,
|
1072
1173
|
* inline help, visiblity and disabling.
|
@@ -1196,7 +1297,7 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1196
1297
|
* @mixin
|
1197
1298
|
*/
|
1198
1299
|
|
1199
|
-
var inputView = {
|
1300
|
+
var inputView = _objectSpread2(_objectSpread2({}, attributeBinding), {}, {
|
1200
1301
|
ui: {
|
1201
1302
|
label: 'label',
|
1202
1303
|
labelText: 'label .name',
|
@@ -1240,8 +1341,8 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1240
1341
|
this.ui.labelText.text(this.labelText());
|
1241
1342
|
this.updateInlineHelp();
|
1242
1343
|
this.setLabelFor();
|
1243
|
-
this.
|
1244
|
-
this.
|
1344
|
+
this.setupBooleanAttributeBinding('disabled', this.updateDisabled);
|
1345
|
+
this.setupBooleanAttributeBinding('visible', this.updateVisible);
|
1245
1346
|
},
|
1246
1347
|
|
1247
1348
|
/**
|
@@ -1290,7 +1391,7 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1290
1391
|
}
|
1291
1392
|
},
|
1292
1393
|
isDisabled: function isDisabled() {
|
1293
|
-
return this.
|
1394
|
+
return this.getBooleanAttributBoundOption('disabled');
|
1294
1395
|
},
|
1295
1396
|
updateDisabled: function updateDisabled() {
|
1296
1397
|
this.$el.toggleClass('input-disabled', !!this.isDisabled());
|
@@ -1308,46 +1409,9 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1308
1409
|
}
|
1309
1410
|
},
|
1310
1411
|
updateVisible: function updateVisible() {
|
1311
|
-
this.$el.toggleClass('
|
1312
|
-
},
|
1313
|
-
setupAttributeBinding: function setupAttributeBinding(optionName, updateMethod) {
|
1314
|
-
var _this = this;
|
1315
|
-
|
1316
|
-
var binding = this.options["".concat(optionName, "Binding")];
|
1317
|
-
var view = this;
|
1318
|
-
|
1319
|
-
if (binding) {
|
1320
|
-
_.flatten([binding]).forEach(function (attribute) {
|
1321
|
-
_this.listenTo(_this.model, 'change:' + attribute, update);
|
1322
|
-
});
|
1323
|
-
}
|
1324
|
-
|
1325
|
-
update();
|
1326
|
-
|
1327
|
-
function update() {
|
1328
|
-
updateMethod.call(view, view.getAttributeBoundOption(optionName));
|
1329
|
-
}
|
1330
|
-
},
|
1331
|
-
getAttributeBoundOption: function getAttributeBoundOption(optionName) {
|
1332
|
-
var _this2 = this;
|
1333
|
-
|
1334
|
-
var binding = this.options["".concat(optionName, "Binding")];
|
1335
|
-
var bindingValueOptionName = "".concat(optionName, "BindingValue");
|
1336
|
-
var value = Array.isArray(binding) ? binding.map(function (attribute) {
|
1337
|
-
return _this2.model.get(attribute);
|
1338
|
-
}) : this.model.get(binding);
|
1339
|
-
|
1340
|
-
if (bindingValueOptionName in this.options) {
|
1341
|
-
return value === this.options[bindingValueOptionName];
|
1342
|
-
} else if (typeof this.options[optionName] === 'function') {
|
1343
|
-
return !!this.options[optionName](value);
|
1344
|
-
} else if (optionName in this.options) {
|
1345
|
-
return !!this.options[optionName];
|
1346
|
-
} else if (binding) {
|
1347
|
-
return !!value;
|
1348
|
-
}
|
1412
|
+
this.$el.toggleClass('hidden_via_binding', this.getBooleanAttributBoundOption('visible') === false);
|
1349
1413
|
}
|
1350
|
-
};
|
1414
|
+
});
|
1351
1415
|
|
1352
1416
|
function template$4(data) {
|
1353
1417
|
var __p = '';
|
@@ -1466,6 +1530,125 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1466
1530
|
}
|
1467
1531
|
});
|
1468
1532
|
|
1533
|
+
function _classCallCheck(instance, Constructor) {
|
1534
|
+
if (!(instance instanceof Constructor)) {
|
1535
|
+
throw new TypeError("Cannot call a class as a function");
|
1536
|
+
}
|
1537
|
+
}
|
1538
|
+
|
1539
|
+
function _defineProperties(target, props) {
|
1540
|
+
for (var i = 0; i < props.length; i++) {
|
1541
|
+
var descriptor = props[i];
|
1542
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
1543
|
+
descriptor.configurable = true;
|
1544
|
+
if ("value" in descriptor) descriptor.writable = true;
|
1545
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
1546
|
+
}
|
1547
|
+
}
|
1548
|
+
|
1549
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
1550
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
1551
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
1552
|
+
return Constructor;
|
1553
|
+
}
|
1554
|
+
|
1555
|
+
/**
|
1556
|
+
* Input view for a number.
|
1557
|
+
*
|
1558
|
+
* See {@link inputView} for further options.
|
1559
|
+
*
|
1560
|
+
* @param {Object} [options]
|
1561
|
+
*
|
1562
|
+
* @param {string} [options.locale]
|
1563
|
+
* Locale used to fomat and parse numbers.
|
1564
|
+
*
|
1565
|
+
* @class
|
1566
|
+
*/
|
1567
|
+
|
1568
|
+
var NumberInputView = Marionette.ItemView.extend({
|
1569
|
+
mixins: [inputView],
|
1570
|
+
template: function template() {
|
1571
|
+
return "\n <label>\n <span class=\"name\"></span>\n <span class=\"inline_help\"></span>\n </label>\n <input type=\"text\" dir=\"auto\" />\n ";
|
1572
|
+
},
|
1573
|
+
ui: {
|
1574
|
+
input: 'input'
|
1575
|
+
},
|
1576
|
+
events: {
|
1577
|
+
'change': 'onChange'
|
1578
|
+
},
|
1579
|
+
initialize: function initialize() {
|
1580
|
+
this.parser = new NumberParser(this.options.locale);
|
1581
|
+
},
|
1582
|
+
onRender: function onRender() {
|
1583
|
+
this.load();
|
1584
|
+
this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
|
1585
|
+
},
|
1586
|
+
onChange: function onChange() {
|
1587
|
+
this.save();
|
1588
|
+
this.load();
|
1589
|
+
},
|
1590
|
+
onClose: function onClose() {
|
1591
|
+
this.save();
|
1592
|
+
},
|
1593
|
+
save: function save() {
|
1594
|
+
var inputValue = this.ui.input.val();
|
1595
|
+
this.model.set(this.options.propertyName, this.parser.parse(inputValue) || 0);
|
1596
|
+
},
|
1597
|
+
load: function load() {
|
1598
|
+
var input = this.ui.input;
|
1599
|
+
var value = this.model.get(this.options.propertyName) || 0;
|
1600
|
+
input.val(value.toLocaleString(this.options.locale, {
|
1601
|
+
useGrouping: false
|
1602
|
+
}));
|
1603
|
+
},
|
1604
|
+
displayValidationError: function displayValidationError(message) {
|
1605
|
+
this.$el.addClass('invalid');
|
1606
|
+
this.ui.input.attr('title', message);
|
1607
|
+
},
|
1608
|
+
resetValidationError: function resetValidationError(message) {
|
1609
|
+
this.$el.removeClass('invalid');
|
1610
|
+
this.ui.input.attr('title', '');
|
1611
|
+
}
|
1612
|
+
});
|
1613
|
+
|
1614
|
+
var NumberParser = /*#__PURE__*/function () {
|
1615
|
+
function NumberParser(locale) {
|
1616
|
+
_classCallCheck(this, NumberParser);
|
1617
|
+
|
1618
|
+
var format = new Intl.NumberFormat(locale);
|
1619
|
+
var parts = format.formatToParts(12345.6);
|
1620
|
+
var numerals = Array.from({
|
1621
|
+
length: 10
|
1622
|
+
}).map(function (_, i) {
|
1623
|
+
return format.format(i);
|
1624
|
+
});
|
1625
|
+
var index = new Map(numerals.map(function (d, i) {
|
1626
|
+
return [d, i];
|
1627
|
+
}));
|
1628
|
+
this._group = new RegExp("[".concat(parts.find(function (d) {
|
1629
|
+
return d.type === "group";
|
1630
|
+
}).value, "]"), "g");
|
1631
|
+
this._decimal = new RegExp("[".concat(parts.find(function (d) {
|
1632
|
+
return d.type === "decimal";
|
1633
|
+
}).value, "]"));
|
1634
|
+
this._numeral = new RegExp("[".concat(numerals.join(""), "]"), "g");
|
1635
|
+
|
1636
|
+
this._index = function (d) {
|
1637
|
+
return index.get(d);
|
1638
|
+
};
|
1639
|
+
}
|
1640
|
+
|
1641
|
+
_createClass(NumberParser, [{
|
1642
|
+
key: "parse",
|
1643
|
+
value: function parse(string) {
|
1644
|
+
string = string.trim().replace(this._group, "").replace(this._decimal, ".").replace(this._numeral, this._index);
|
1645
|
+
return string ? +string : NaN;
|
1646
|
+
}
|
1647
|
+
}]);
|
1648
|
+
|
1649
|
+
return NumberParser;
|
1650
|
+
}();
|
1651
|
+
|
1469
1652
|
/**
|
1470
1653
|
* Text based input view that can display a placeholder.
|
1471
1654
|
*
|
@@ -1676,11 +1859,15 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1676
1859
|
this.ui.input.minicolors({
|
1677
1860
|
changeDelay: 200,
|
1678
1861
|
change: _.bind(function (color) {
|
1862
|
+
this._saving = true;
|
1863
|
+
|
1679
1864
|
if (color === this.defaultValue()) {
|
1680
1865
|
this.model.unset(this.options.propertyName);
|
1681
1866
|
} else {
|
1682
1867
|
this.model.set(this.options.propertyName, color);
|
1683
1868
|
}
|
1869
|
+
|
1870
|
+
this._saving = false;
|
1684
1871
|
}, this)
|
1685
1872
|
});
|
1686
1873
|
this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
|
@@ -1709,7 +1896,10 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
1709
1896
|
}
|
1710
1897
|
},
|
1711
1898
|
load: function load() {
|
1712
|
-
|
1899
|
+
if (!this._saving) {
|
1900
|
+
this.ui.input.minicolors('value', this.model.get(this.options.propertyName) || this.defaultValue());
|
1901
|
+
}
|
1902
|
+
|
1713
1903
|
this.$el.toggleClass('is_default', !this.model.has(this.options.propertyName));
|
1714
1904
|
},
|
1715
1905
|
refreshPicker: function refreshPicker() {
|
@@ -2292,21 +2482,6 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
2292
2482
|
}
|
2293
2483
|
});
|
2294
2484
|
|
2295
|
-
function _defineProperty(obj, key, value) {
|
2296
|
-
if (key in obj) {
|
2297
|
-
Object.defineProperty(obj, key, {
|
2298
|
-
value: value,
|
2299
|
-
enumerable: true,
|
2300
|
-
configurable: true,
|
2301
|
-
writable: true
|
2302
|
-
});
|
2303
|
-
} else {
|
2304
|
-
obj[key] = value;
|
2305
|
-
}
|
2306
|
-
|
2307
|
-
return obj;
|
2308
|
-
}
|
2309
|
-
|
2310
2485
|
function template$9(data) {
|
2311
2486
|
var __p = '';
|
2312
2487
|
__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';
|
@@ -2573,6 +2748,25 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
2573
2748
|
*
|
2574
2749
|
* @param {Object} [options]
|
2575
2750
|
*
|
2751
|
+
* @param {number} [options.defaultValue]
|
2752
|
+
* Defaults value to display if property is not set.
|
2753
|
+
*
|
2754
|
+
* @param {number} [options.minValue=0]
|
2755
|
+
* Value when dragging slider to the very left.
|
2756
|
+
*
|
2757
|
+
* @param {number} [options.maxValue=100]
|
2758
|
+
* Value when dragging slider to the very right.
|
2759
|
+
*
|
2760
|
+
* @param {string} [options.unit="%"]
|
2761
|
+
* Unit to display after value.
|
2762
|
+
*
|
2763
|
+
* @param {function} [options.displayText]
|
2764
|
+
* Function that receives value and returns custom text to display as value.
|
2765
|
+
*
|
2766
|
+
* @param {boolean} [options.saveOnSlide]
|
2767
|
+
* Already update the model while dragging the handle - not only after
|
2768
|
+
* handle has been released.
|
2769
|
+
*
|
2576
2770
|
* @class
|
2577
2771
|
*/
|
2578
2772
|
|
@@ -2585,15 +2779,27 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
2585
2779
|
value: '.value'
|
2586
2780
|
},
|
2587
2781
|
events: {
|
2588
|
-
'slidechange': 'save'
|
2782
|
+
'slidechange': 'save',
|
2783
|
+
'slide': 'handleSlide'
|
2589
2784
|
},
|
2590
2785
|
onRender: function onRender() {
|
2786
|
+
var _this = this;
|
2787
|
+
|
2591
2788
|
this.ui.widget.slider({
|
2592
|
-
animate: 'fast'
|
2593
|
-
|
2594
|
-
|
2789
|
+
animate: 'fast'
|
2790
|
+
});
|
2791
|
+
this.setupAttributeBinding('minValue', function (value) {
|
2792
|
+
return _this.updateSliderOption('min', value || 0);
|
2793
|
+
});
|
2794
|
+
this.setupAttributeBinding('maxValue', function (value) {
|
2795
|
+
return _this.updateSliderOption('max', value || 100);
|
2595
2796
|
});
|
2596
2797
|
this.load();
|
2798
|
+
this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
|
2799
|
+
},
|
2800
|
+
updateSliderOption: function updateSliderOption(name, value) {
|
2801
|
+
this.ui.widget.slider('option', name, value);
|
2802
|
+
this.updateText(this.ui.widget.slider('value'));
|
2597
2803
|
},
|
2598
2804
|
updateDisabled: function updateDisabled(disabled) {
|
2599
2805
|
this.$el.toggleClass('disabled', !!disabled);
|
@@ -2604,11 +2810,15 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
2604
2810
|
this.ui.widget.slider('enable');
|
2605
2811
|
}
|
2606
2812
|
},
|
2607
|
-
|
2608
|
-
|
2609
|
-
|
2610
|
-
this.
|
2611
|
-
|
2813
|
+
handleSlide: function handleSlide(event, ui) {
|
2814
|
+
this.updateText(ui.value);
|
2815
|
+
|
2816
|
+
if (this.options.saveOnSlide) {
|
2817
|
+
this.save(event, ui);
|
2818
|
+
}
|
2819
|
+
},
|
2820
|
+
save: function save(event, ui) {
|
2821
|
+
this.model.set(this.options.propertyName, ui.value);
|
2612
2822
|
},
|
2613
2823
|
load: function load() {
|
2614
2824
|
var value;
|
@@ -2619,7 +2829,18 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
2619
2829
|
value = 'defaultValue' in this.options ? this.options.defaultValue : 0;
|
2620
2830
|
}
|
2621
2831
|
|
2622
|
-
this.ui.widget.slider('option', 'value', value);
|
2832
|
+
this.ui.widget.slider('option', 'value', this.clampValue(value));
|
2833
|
+
this.updateText(value);
|
2834
|
+
},
|
2835
|
+
clampValue: function clampValue(value) {
|
2836
|
+
var min = this.ui.widget.slider('option', 'min');
|
2837
|
+
var max = this.ui.widget.slider('option', 'max');
|
2838
|
+
return Math.min(max, Math.max(min, value));
|
2839
|
+
},
|
2840
|
+
updateText: function updateText(value) {
|
2841
|
+
var unit = 'unit' in this.options ? this.options.unit : '%';
|
2842
|
+
var text = 'displayText' in this.options ? this.options.displayText(value) : value + unit;
|
2843
|
+
this.ui.value.text(text);
|
2623
2844
|
}
|
2624
2845
|
});
|
2625
2846
|
|
@@ -3013,7 +3234,10 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
3013
3234
|
return view;
|
3014
3235
|
},
|
3015
3236
|
appendSubview: function appendSubview(view) {
|
3016
|
-
|
3237
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
3238
|
+
to = _ref.to;
|
3239
|
+
|
3240
|
+
return (to || this.$el).append(this.subview(view).el);
|
3017
3241
|
},
|
3018
3242
|
onClose: function onClose() {
|
3019
3243
|
if (this.subviews) {
|
@@ -3082,6 +3306,7 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
3082
3306
|
exports.IconTableCellView = IconTableCellView;
|
3083
3307
|
exports.JsonInputView = JsonInputView;
|
3084
3308
|
exports.LabelOnlyView = LabelOnlyView;
|
3309
|
+
exports.NumberInputView = NumberInputView;
|
3085
3310
|
exports.Object = BaseObject;
|
3086
3311
|
exports.PresenceTableCellView = PresenceTableCellView;
|
3087
3312
|
exports.ProxyUrlInputView = ProxyUrlInputView;
|
@@ -3100,6 +3325,7 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
3100
3325
|
exports.TooltipView = TooltipView;
|
3101
3326
|
exports.UrlDisplayView = UrlDisplayView;
|
3102
3327
|
exports.UrlInputView = UrlInputView;
|
3328
|
+
exports.attributeBinding = attributeBinding;
|
3103
3329
|
exports.cssModulesUtils = cssModulesUtils;
|
3104
3330
|
exports.i18nUtils = i18nUtils;
|
3105
3331
|
exports.inputView = inputView;
|
@@ -3111,4 +3337,4 @@ this.pageflow._uiGlobalInterop = (function (exports, Marionette, _, $, I18n$1, B
|
|
3111
3337
|
|
3112
3338
|
return exports;
|
3113
3339
|
|
3114
|
-
}({}, Backbone.Marionette, _, jQuery, I18n, Backbone, Backbone.ChildViewContainer, IScroll, jQuery, wysihtml5, Cocktail));
|
3340
|
+
}({}, Backbone.Marionette, _, jQuery, I18n, Backbone, Backbone.ChildViewContainer, IScroll, jQuery, wysihtml5, jQuery, Cocktail));
|
@@ -62,4 +62,14 @@ $pageflow-permalink-input-directory-background-position: null !default;
|
|
62
62
|
padding-left: 0;
|
63
63
|
flex: 1;
|
64
64
|
}
|
65
|
+
|
66
|
+
&.no_directories {
|
67
|
+
select {
|
68
|
+
display: none;
|
69
|
+
}
|
70
|
+
|
71
|
+
input {
|
72
|
+
padding-left: $pageflow-permalink-input-directory-padding-left;
|
73
|
+
}
|
74
|
+
}
|
65
75
|
}
|
@@ -10,6 +10,11 @@
|
|
10
10
|
@include icon-only-button;
|
11
11
|
}
|
12
12
|
|
13
|
+
> button.ellipsis_icon {
|
14
|
+
@include fa-ellipsis-v-icon;
|
15
|
+
width: 31px;
|
16
|
+
}
|
17
|
+
|
13
18
|
&.full_width {
|
14
19
|
width: 100%;
|
15
20
|
|
@@ -26,7 +31,7 @@
|
|
26
31
|
@include transition(visibility 100ms, opacity 100ms);
|
27
32
|
|
28
33
|
position: absolute;
|
29
|
-
z-index:
|
34
|
+
z-index: 6;
|
30
35
|
padding: 1px;
|
31
36
|
border: solid 1px var(--ui-on-surface-color-lighter);
|
32
37
|
border-radius: rounded(sm);
|
@@ -162,11 +162,11 @@
|
|
162
162
|
}
|
163
163
|
|
164
164
|
.editor .help_button {
|
165
|
-
@include background-icon-
|
166
|
-
|
165
|
+
@include background-icon-left($color: var(--ui-primary-color),
|
166
|
+
$font-size: 16px, $left: 5px, $top: 50%);
|
167
167
|
@include help-circled-icon;
|
168
168
|
|
169
|
-
padding: 7px
|
169
|
+
padding: 7px 5px 0 28px;
|
170
170
|
float: right;
|
171
171
|
height: 20px;
|
172
172
|
cursor: pointer;
|
@@ -31,7 +31,7 @@ module Pageflow
|
|
31
31
|
|
32
32
|
authorize!(:update, chapter)
|
33
33
|
verify_edit_lock!(chapter.entry)
|
34
|
-
chapter.
|
34
|
+
chapter.update(chapter_params)
|
35
35
|
|
36
36
|
respond_with(chapter)
|
37
37
|
end
|
@@ -43,7 +43,7 @@ module Pageflow
|
|
43
43
|
authorize!(:edit_outline, storyline.entry)
|
44
44
|
verify_edit_lock!(storyline.entry)
|
45
45
|
params.require(:ids).each_with_index do |id, index|
|
46
|
-
entry.chapters.update(
|
46
|
+
entry.chapters.find(id).update(storyline_id: storyline.id, position: index)
|
47
47
|
end
|
48
48
|
|
49
49
|
head :no_content
|
@@ -85,11 +85,21 @@ module Pageflow
|
|
85
85
|
|
86
86
|
delegate_to_rack_app!(entry.entry_type.frontend_app) do |_status, headers, _body|
|
87
87
|
allow_iframe_for_embed(headers)
|
88
|
+
apply_cache_control(entry, headers)
|
88
89
|
end
|
89
90
|
end
|
90
91
|
|
91
92
|
def allow_iframe_for_embed(headers)
|
92
93
|
headers.except!('X-Frame-Options') if params[:embed]
|
93
94
|
end
|
95
|
+
|
96
|
+
def apply_cache_control(entry, headers)
|
97
|
+
config = Pageflow.config_for(entry)
|
98
|
+
|
99
|
+
return if config.public_entry_cache_control_header.blank?
|
100
|
+
return if entry.password_protected?
|
101
|
+
|
102
|
+
headers['Cache-Control'] = config.public_entry_cache_control_header
|
103
|
+
end
|
94
104
|
end
|
95
105
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Pageflow
|
2
|
+
# @api private
|
3
|
+
class FeedsController < Pageflow::ApplicationController
|
4
|
+
def index
|
5
|
+
site = Site.for_request(request).first!
|
6
|
+
return head 404 unless site.feeds_enabled?
|
7
|
+
|
8
|
+
@feed = EntriesFeed.for(
|
9
|
+
site: site,
|
10
|
+
locale: params[:locale]
|
11
|
+
)
|
12
|
+
|
13
|
+
respond_to do |format|
|
14
|
+
format.atom
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -20,7 +20,7 @@ module Pageflow
|
|
20
20
|
|
21
21
|
authorize!(:update, page)
|
22
22
|
verify_edit_lock!(page.chapter.entry)
|
23
|
-
page.
|
23
|
+
page.update(page_params)
|
24
24
|
|
25
25
|
respond_with(page)
|
26
26
|
end
|
@@ -32,7 +32,7 @@ module Pageflow
|
|
32
32
|
authorize!(:edit_outline, entry.to_model)
|
33
33
|
verify_edit_lock!(chapter.entry)
|
34
34
|
params.require(:ids).each_with_index do |id, index|
|
35
|
-
entry.pages.update(
|
35
|
+
entry.pages.find(id).update(chapter_id: chapter.id, position: index)
|
36
36
|
end
|
37
37
|
|
38
38
|
head :no_content
|