From 38af7a75fe88a219a9b0211b15ccfe6628e48cbc Mon Sep 17 00:00:00 2001 From: Djamil Legato Date: Tue, 20 Apr 2021 22:17:21 -0700 Subject: [PATCH] Initial setup for new copy page modal (#1738) --- CHANGELOG.md | 1 + blueprints/admin/pages/copy.yaml | 63 +++++++++++++++++++ languages/en.yaml | 1 + themes/grav/app/pages/page/add.js | 4 +- themes/grav/js/admin.min.js | 2 +- .../partials/blueprints-copy.html.twig | 22 +++++++ 6 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 blueprints/admin/pages/copy.yaml create mode 100644 themes/grav/templates/partials/blueprints-copy.html.twig diff --git a/CHANGELOG.md b/CHANGELOG.md index ec302e6d..ea77b3be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * Removed sourcemaps references from fork-awesome.min.css [#2122](https://github.com/getgrav/grav-plugin-admin/issues/2122) * Support native spell checkers in CodeMirror editor [#1266](https://github.com/getgrav/grav-plugin-admin/issues/1266) * Added new 'Content Highlight' color to presets + * Copying Pages now prompts a dedicated modal that allows for picking title, folder name, parent location, page template and visibility [#1738](https://github.com/getgrav/grav-plugin-admin/issues/1738) 1. [](#bugfix) * Moved preset CSS compile to earlier in the process to ensure compilation happens in time. * Prevent Save actions from Flex Objects to trigger the unsaved unload notice [#2125](https://github.com/getgrav/grav-plugin-admin/issues/2125) diff --git a/blueprints/admin/pages/copy.yaml b/blueprints/admin/pages/copy.yaml new file mode 100644 index 00000000..3bac0b18 --- /dev/null +++ b/blueprints/admin/pages/copy.yaml @@ -0,0 +1,63 @@ +rules: + slug: + pattern: '[a-zA-Zа-яA-Я0-9_\-]+' + min: 1 + max: 200 + +form: + validation: loose + fields: + + section: + type: section + title: PLUGIN_ADMIN.COPY_PAGE + + title: + type: text + label: PLUGIN_ADMIN.PAGE_TITLE + help: PLUGIN_ADMIN.PAGE_TITLE_HELP + validate: + required: true + + folder: + type: text + label: PLUGIN_ADMIN.FOLDER_NAME + help: PLUGIN_ADMIN.FOLDER_NAME_HELP + validate: + rule: slug + required: true + + route: + type: parents + label: PLUGIN_ADMIN.PARENT_PAGE + classes: fancy + validate: + required: true + + + name: + type: select + classes: fancy + label: PLUGIN_ADMIN.PAGE_FILE + help: PLUGIN_ADMIN.PAGE_FILE_HELP + data-options@: '\Grav\Plugin\AdminPlugin::pagesTypes' + data-default@: '\Grav\Plugin\Admin\Admin::getLastPageName' + validate: + required: true + + visible: + type: toggle + label: PLUGIN_ADMIN.VISIBLE + help: PLUGIN_ADMIN.VISIBLE_HELP + highlight: '' + default: '' + options: + '': Auto + 1: PLUGIN_ADMIN.YES + 0: PLUGIN_ADMIN.NO + validate: + type: bool + required: true + + blueprint: + type: blueprint diff --git a/languages/en.yaml b/languages/en.yaml index fe6a1cdd..e16c156d 100644 --- a/languages/en.yaml +++ b/languages/en.yaml @@ -548,6 +548,7 @@ PLUGIN_ADMIN: REVERSE_PROXY_HELP: "Enable this if you are behind a reverse proxy and you are having trouble with URLs containing incorrect ports" INVALID_FRONTMATTER_COULD_NOT_SAVE: "Invalid frontmatter, could not save" ADD_FOLDER: "Add Folder" + COPY_PAGE: "Copy Page" PROXY_URL: "Proxy URL" PROXY_URL_HELP: "Enter the proxy HOST or IP and PORT" NOTHING_TO_SAVE: "Nothing to Save" diff --git a/themes/grav/app/pages/page/add.js b/themes/grav/app/pages/page/add.js index af2645c5..86fcfcd8 100644 --- a/themes/grav/app/pages/page/add.js +++ b/themes/grav/app/pages/page/add.js @@ -4,8 +4,8 @@ import request from '../../utils/request'; import { config } from 'grav-config'; let custom = false; -let folder = $('[data-remodal-id="modal"] input[name="data[folder]"], [data-remodal-id="module"] input[name="data[folder]"]'); -let title = $('[data-remodal-id="modal"] input[name="data[title]"], [data-remodal-id="module"] input[name="data[title]"]'); +let folder = $('[data-remodal-id="modal"] input[name="data[folder]"], [data-remodal-id="module"] input[name="data[folder]"], [data-remodal-id="modal-page-copy"] input[name="data[folder]"]'); +let title = $('[data-remodal-id="modal"] input[name="data[title]"], [data-remodal-id="module"] input[name="data[title]"], [data-remodal-id="modal-page-copy"] input[name="data[title]"]'); let getFields = (type, target) => { target = $(target); let query = `[data-remodal-id="${target.closest('[data-remodal-id]').data('remodal-id')}"]`; diff --git a/themes/grav/js/admin.min.js b/themes/grav/js/admin.min.js index 806ab57e..2068dd43 100644 --- a/themes/grav/js/admin.min.js +++ b/themes/grav/js/admin.min.js @@ -380,7 +380,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_jquery_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/jquery-utils */ \"./app/utils/jquery-utils.js\");\n/* harmony import */ var _utils_request__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/request */ \"./app/utils/request.js\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nvar custom = false;\nvar folder = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-remodal-id=\"modal\"] input[name=\"data[folder]\"], [data-remodal-id=\"module\"] input[name=\"data[folder]\"]');\nvar title = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-remodal-id=\"modal\"] input[name=\"data[title]\"], [data-remodal-id=\"module\"] input[name=\"data[title]\"]');\n\nvar getFields = function getFields(type, target) {\n target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(target);\n var query = \"[data-remodal-id=\\\"\".concat(target.closest('[data-remodal-id]').data('remodal-id'), \"\\\"]\");\n return {\n title: type === 'title' ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(target) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"\".concat(query, \" input[name=\\\"data[title]\\\"]\")),\n folder: type === 'folder' ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(target) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"\".concat(query, \" input[name=\\\"data[folder]\\\"]\"))\n };\n};\n\ntitle.on('input focus blur', function (event) {\n if (custom) {\n return true;\n }\n\n var elements = getFields('title', event.currentTarget);\n var slug = jquery__WEBPACK_IMPORTED_MODULE_0___default().slugify(elements.title.val(), {\n custom: {\n \"'\": ''\n }\n });\n elements.folder.val(slug);\n});\nfolder.on('input', function (event) {\n var elements = getFields('folder', event.currentTarget);\n var input = elements.folder.get(0);\n var value = elements.folder.val();\n var selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n value = value.toLowerCase().replace(/\\s/g, '-').replace(/[^a-z0-9_\\-]/g, '');\n elements.folder.val(value);\n custom = !!value; // restore cursor position\n\n input.setSelectionRange(selection.start, selection.end);\n});\nfolder.on('focus blur', function (event) {\n return getFields('title', event.currentTarget).title.trigger('input');\n});\njquery__WEBPACK_IMPORTED_MODULE_0___default()(document).on('change', '[name=\"data[route]\"]', function (event) {\n var rawroute = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget).val();\n var pageTemplate = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[name=\"data[name]\"]');\n var URI = \"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_3__.config.base_url_relative, \"/ajax.json/task\").concat(grav_config__WEBPACK_IMPORTED_MODULE_3__.config.param_sep, \"getChildTypes\");\n\n if (pageTemplate.length === 0) {\n return;\n }\n\n (0,_utils_request__WEBPACK_IMPORTED_MODULE_2__.default)(URI, {\n method: 'post',\n body: {\n rawroute: rawroute\n }\n }, function (response) {\n var type = response.child_type;\n\n if (type !== '' && type !== 'default') {\n pageTemplate.val(type);\n pageTemplate.data('selectize').setValue(type);\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3BhZ2VzL3BhZ2UvYWRkLmpzP2IyMjgiXSwibmFtZXMiOlsiY3VzdG9tIiwiZm9sZGVyIiwiJCIsInRpdGxlIiwiZ2V0RmllbGRzIiwidHlwZSIsInRhcmdldCIsInF1ZXJ5IiwiY2xvc2VzdCIsImRhdGEiLCJvbiIsImV2ZW50IiwiZWxlbWVudHMiLCJjdXJyZW50VGFyZ2V0Iiwic2x1ZyIsInZhbCIsImlucHV0IiwiZ2V0IiwidmFsdWUiLCJzZWxlY3Rpb24iLCJzdGFydCIsInNlbGVjdGlvblN0YXJ0IiwiZW5kIiwic2VsZWN0aW9uRW5kIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJ0cmlnZ2VyIiwiZG9jdW1lbnQiLCJyYXdyb3V0ZSIsInBhZ2VUZW1wbGF0ZSIsIlVSSSIsImNvbmZpZyIsImxlbmd0aCIsInJlcXVlc3QiLCJtZXRob2QiLCJib2R5IiwicmVzcG9uc2UiLCJjaGlsZF90eXBlIiwic2V0VmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLE1BQU0sR0FBRyxLQUFiO0FBQ0EsSUFBSUMsTUFBTSxHQUFHQyw2Q0FBQyxDQUFDLDZHQUFELENBQWQ7QUFDQSxJQUFJQyxLQUFLLEdBQUdELDZDQUFDLENBQUMsMkdBQUQsQ0FBYjs7QUFDQSxJQUFJRSxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDQyxJQUFELEVBQU9DLE1BQVAsRUFBa0I7QUFDOUJBLFFBQU0sR0FBR0osNkNBQUMsQ0FBQ0ksTUFBRCxDQUFWO0FBQ0EsTUFBSUMsS0FBSyxnQ0FBd0JELE1BQU0sQ0FBQ0UsT0FBUCxDQUFlLG1CQUFmLEVBQW9DQyxJQUFwQyxDQUF5QyxZQUF6QyxDQUF4QixRQUFUO0FBRUEsU0FBTztBQUNITixTQUFLLEVBQUVFLElBQUksS0FBSyxPQUFULEdBQW1CSCw2Q0FBQyxDQUFDSSxNQUFELENBQXBCLEdBQStCSiw2Q0FBQyxX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WSxDQUFDZixHQUFiLENBQWlCVixJQUFqQjtBQUNBeUIsa0JBQVksQ0FBQ3JCLElBQWIsQ0FBa0IsV0FBbEIsRUFBK0I4QixRQUEvQixDQUF3Q2xDLElBQXhDO0FBQ0g7QUFDSixHQVRNLENBQVA7QUFVSCxDQW5CRCIsImZpbGUiOiIuL2FwcC9wYWdlcy9wYWdlL2FkZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJy4uLy4uL3V0aWxzL2pxdWVyeS11dGlscyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ2dyYXYtY29uZmlnJztcblxubGV0IGN1c3RvbSA9IGZhbHNlO1xubGV0IGZvbGRlciA9ICQoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJtb2RhbFwiXSBpbnB1dFtuYW1lPVwiZGF0YVtmb2xkZXJdXCJdLCBbZGF0YS1yZW1vZGFsLWlkPVwibW9kdWxlXCJdIGlucHV0W25hbWU9XCJkYXRhW2ZvbGRlcl1cIl0nKTtcbmxldCB0aXRsZSA9ICQoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJtb2RhbFwiXSBpbnB1dFtuYW1lPVwiZGF0YVt0aXRsZV1cIl0sIFtkYXRhLXJlbW9kYWwtaWQ9XCJtb2R1bGVcIl0gaW5wdXRbbmFtZT1cImRhdGFbdGl0bGVdXCJdJyk7XG5sZXQgZ2V0RmllbGRzID0gKHR5cGUsIHRhcmdldCkgPT4ge1xuICAgIHRhcmdldCA9ICQodGFyZ2V0KTtcbiAgICBsZXQgcXVlcnkgPSBgW2RhdGEtcmVtb2RhbC1pZD1cIiR7dGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXJlbW9kYWwtaWRdJykuZGF0YSgncmVtb2RhbC1pZCcpfVwiXWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogdHlwZSA9PT0gJ3RpdGxlJyA/ICQodGFyZ2V0KSA6ICQoYCR7cXVlcnl9IGlucHV0W25hbWU9XCJkYXRhW3RpdGxlXVwiXWApLFxuICAgICAgICBmb2xkZXI6IHR5cGUgPT09ICdmb2xkZXInID8gJCh0YXJnZXQpIDogJChgJHtxdWVyeX0gaW5wdXRbbmFtZT1cImRhdGFbZm9sZGVyXVwiXWApXG4gICAgfTtcbn07XG5cbnRpdGxlLm9uKCdpbnB1dCBmb2N1cyBibHVyJywgKGV2ZW50KSA9PiB7XG4gICAgaWYgKGN1c3RvbSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIGxldCBlbGVtZW50cyA9IGdldEZpZWxkcygndGl0bGUnLCBldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgIGxldCBzbHVnID0gJC5zbHVnaWZ5KGVsZW1lbnRzLnRpdGxlLnZhbCgpLCB7Y3VzdG9tOiB7XCInXCI6ICcnfX0pO1xuICAgIGVsZW1lbnRzLmZvbGRlci52YWwoc2x1Zyk7XG59KTtcblxuZm9sZGVyLm9uKCdpbnB1dCcsIChldmVudCkgPT4ge1xuICAgIGxldCBlbGVtZW50cyA9IGdldEZpZWxkcygnZm9sZGVyJywgZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICBsZXQgaW5wdXQgPSBlbGVtZW50cy5mb2xkZXIuZ2V0KDApO1xuICAgIGxldCB2YWx1ZSA9IGVsZW1lbnRzLmZvbGRlci52YWwoKTtcbiAgICBsZXQgc2VsZWN0aW9uID0ge1xuICAgICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcblxuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgJy0nKS5yZXBsYWNlKC9bXmEtejAtOV9cXC1dL2csICcnKTtcbiAgICBlbGVtZW50cy5mb2xkZXIudmFsKHZhbHVlKTtcbiAgICBjdXN0b20gPSAhIXZhbHVlO1xuXG4gICAgLy8gcmVzdG9yZSBjdXJzb3IgcG9zaXRpb25cbiAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24uc3RhcnQsIHNlbGVjdGlvbi5lbmQpO1xuXG59KTtcblxuZm9sZGVyLm9uKCdmb2N1cyBibHVyJywgKGV2ZW50KSA9PiBnZXRGaWVsZHMoJ3RpdGxlJywgZXZlbnQuY3VycmVudFRhcmdldCkudGl0bGUudHJpZ2dlcignaW5wdXQnKSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJkYXRhW3JvdXRlXVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJhd3JvdXRlID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS52YWwoKTtcbiAgICBjb25zdCBwYWdlVGVtcGxhdGUgPSAkKCdbbmFtZT1cImRhdGFbbmFtZV1cIl0nKTtcbiAgICBjb25zdCBVUkkgPSBgJHtjb25maWcuYmFzZV91cmxfcmVsYXRpdmV9L2FqYXguanNvbi90YXNrJHtjb25maWcucGFyYW1fc2VwfWdldENoaWxkVHlwZXNgO1xuXG4gICAgaWYgKHBhZ2VUZW1wbGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlcXVlc3QoVVJJLCB7XG4gICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICBib2R5OiB7IHJhd3JvdXRlIH1cbiAgICB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlc3BvbnNlLmNoaWxkX3R5cGU7XG4gICAgICAgIGlmICh0eXBlICE9PSAnJyAmJiB0eXBlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHBhZ2VUZW1wbGF0ZS52YWwodHlwZSk7XG4gICAgICAgICAgICBwYWdlVGVtcGxhdGUuZGF0YSgnc2VsZWN0aXplJykuc2V0VmFsdWUodHlwZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./app/pages/page/add.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_jquery_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/jquery-utils */ \"./app/utils/jquery-utils.js\");\n/* harmony import */ var _utils_request__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/request */ \"./app/utils/request.js\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nvar custom = false;\nvar folder = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-remodal-id=\"modal\"] input[name=\"data[folder]\"], [data-remodal-id=\"module\"] input[name=\"data[folder]\"], [data-remodal-id=\"modal-page-copy\"] input[name=\"data[folder]\"]');\nvar title = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-remodal-id=\"modal\"] input[name=\"data[title]\"], [data-remodal-id=\"module\"] input[name=\"data[title]\"], [data-remodal-id=\"modal-page-copy\"] input[name=\"data[title]\"]');\n\nvar getFields = function getFields(type, target) {\n target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(target);\n var query = \"[data-remodal-id=\\\"\".concat(target.closest('[data-remodal-id]').data('remodal-id'), \"\\\"]\");\n return {\n title: type === 'title' ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(target) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"\".concat(query, \" input[name=\\\"data[title]\\\"]\")),\n folder: type === 'folder' ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(target) : jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"\".concat(query, \" input[name=\\\"data[folder]\\\"]\"))\n };\n};\n\ntitle.on('input focus blur', function (event) {\n if (custom) {\n return true;\n }\n\n var elements = getFields('title', event.currentTarget);\n var slug = jquery__WEBPACK_IMPORTED_MODULE_0___default().slugify(elements.title.val(), {\n custom: {\n \"'\": ''\n }\n });\n elements.folder.val(slug);\n});\nfolder.on('input', function (event) {\n var elements = getFields('folder', event.currentTarget);\n var input = elements.folder.get(0);\n var value = elements.folder.val();\n var selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n value = value.toLowerCase().replace(/\\s/g, '-').replace(/[^a-z0-9_\\-]/g, '');\n elements.folder.val(value);\n custom = !!value; // restore cursor position\n\n input.setSelectionRange(selection.start, selection.end);\n});\nfolder.on('focus blur', function (event) {\n return getFields('title', event.currentTarget).title.trigger('input');\n});\njquery__WEBPACK_IMPORTED_MODULE_0___default()(document).on('change', '[name=\"data[route]\"]', function (event) {\n var rawroute = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget).val();\n var pageTemplate = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[name=\"data[name]\"]');\n var URI = \"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_3__.config.base_url_relative, \"/ajax.json/task\").concat(grav_config__WEBPACK_IMPORTED_MODULE_3__.config.param_sep, \"getChildTypes\");\n\n if (pageTemplate.length === 0) {\n return;\n }\n\n (0,_utils_request__WEBPACK_IMPORTED_MODULE_2__.default)(URI, {\n method: 'post',\n body: {\n rawroute: rawroute\n }\n }, function (response) {\n var type = response.child_type;\n\n if (type !== '' && type !== 'default') {\n pageTemplate.val(type);\n pageTemplate.data('selectize').setValue(type);\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3BhZ2VzL3BhZ2UvYWRkLmpzP2IyMjgiXSwibmFtZXMiOlsiY3VzdG9tIiwiZm9sZGVyIiwiJCIsInRpdGxlIiwiZ2V0RmllbGRzIiwidHlwZSIsInRhcmdldCIsInF1ZXJ5IiwiY2xvc2VzdCIsImRhdGEiLCJvbiIsImV2ZW50IiwiZWxlbWVudHMiLCJjdXJyZW50VGFyZ2V0Iiwic2x1ZyIsInZhbCIsImlucHV0IiwiZ2V0IiwidmFsdWUiLCJzZWxlY3Rpb24iLCJzdGFydCIsInNlbGVjdGlvblN0YXJ0IiwiZW5kIiwic2VsZWN0aW9uRW5kIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJ0cmlnZ2VyIiwiZG9jdW1lbnQiLCJyYXdyb3V0ZSIsInBhZ2VUZW1wbGF0ZSIsIlVSSSIsImNvbmZpZyIsImxlbmd0aCIsInJlcXVlc3QiLCJtZXRob2QiLCJib2R5IiwicmVzcG9uc2UiLCJjaGlsZF90eXBlIiwic2V0VmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLE1BQU0sR0FBRyxLQUFiO0FBQ0EsSUFBSUMsTUFBTSxHQUFHQyw2Q0FBQyxDQUFDLDZLQUFELENBQWQ7QUFDQSxJQUFJQyxLQUFLLEdBQUdELDZDQUFDLENBQUMsMEtBQUQsQ0FBYjs7QUFDQSxJQUFJRSxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDQyxJQUFELEVBQU9DLE1BQVAsRUFBa0I7QUFDOUJBLFFBQU0sR0FBR0osNkNBQUMsQ0FBQ0ksTUFBRCxDQUFWO0FBQ0EsTUFBSUMsS0FBSyxnQ0FBd0JELE1BQU0sQ0FBQ0UsT0FBUCxDQUFlLG1CQUFmLEVBQW9DQyxJQUFwQyxDQUF5QyxZQUF6QyxDQUF4QixRQUFUO0FBRUEsU0FBTztBQUNITixTQUFLLEVBQUVFLElBQUksS0FBSyxPQUFULEdBQW1CSCw2Q0FBQyxDQUFDSSxNQUFELENBQXBCLEdBQStCSiw2Q0FBQyxX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WSxDQUFDZixHQUFiLENBQWlCVixJQUFqQjtBQUNBeUIsa0JBQVksQ0FBQ3JCLElBQWIsQ0FBa0IsV0FBbEIsRUFBK0I4QixRQUEvQixDQUF3Q2xDLElBQXhDO0FBQ0g7QUFDSixHQVRNLENBQVA7QUFVSCxDQW5CRCIsImZpbGUiOiIuL2FwcC9wYWdlcy9wYWdlL2FkZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJy4uLy4uL3V0aWxzL2pxdWVyeS11dGlscyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ2dyYXYtY29uZmlnJztcblxubGV0IGN1c3RvbSA9IGZhbHNlO1xubGV0IGZvbGRlciA9ICQoJ1tkYXRhLXJlbW9kYWwtaWQ9XCJtb2RhbFwiXSBpbnB1dFtuYW1lPVwiZGF0YVtmb2xkZXJdXCJdLCBbZGF0YS1yZW1vZGFsLWlkPVwibW9kdWxlXCJdIGlucHV0W25hbWU9XCJkYXRhW2ZvbGRlcl1cIl0sIFtkYXRhLXJlbW9kYWwtaWQ9XCJtb2RhbC1wYWdlLWNvcHlcIl0gaW5wdXRbbmFtZT1cImRhdGFbZm9sZGVyXVwiXScpO1xubGV0IHRpdGxlID0gJCgnW2RhdGEtcmVtb2RhbC1pZD1cIm1vZGFsXCJdIGlucHV0W25hbWU9XCJkYXRhW3RpdGxlXVwiXSwgW2RhdGEtcmVtb2RhbC1pZD1cIm1vZHVsZVwiXSBpbnB1dFtuYW1lPVwiZGF0YVt0aXRsZV1cIl0sIFtkYXRhLXJlbW9kYWwtaWQ9XCJtb2RhbC1wYWdlLWNvcHlcIl0gaW5wdXRbbmFtZT1cImRhdGFbdGl0bGVdXCJdJyk7XG5sZXQgZ2V0RmllbGRzID0gKHR5cGUsIHRhcmdldCkgPT4ge1xuICAgIHRhcmdldCA9ICQodGFyZ2V0KTtcbiAgICBsZXQgcXVlcnkgPSBgW2RhdGEtcmVtb2RhbC1pZD1cIiR7dGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXJlbW9kYWwtaWRdJykuZGF0YSgncmVtb2RhbC1pZCcpfVwiXWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogdHlwZSA9PT0gJ3RpdGxlJyA/ICQodGFyZ2V0KSA6ICQoYCR7cXVlcnl9IGlucHV0W25hbWU9XCJkYXRhW3RpdGxlXVwiXWApLFxuICAgICAgICBmb2xkZXI6IHR5cGUgPT09ICdmb2xkZXInID8gJCh0YXJnZXQpIDogJChgJHtxdWVyeX0gaW5wdXRbbmFtZT1cImRhdGFbZm9sZGVyXVwiXWApXG4gICAgfTtcbn07XG5cbnRpdGxlLm9uKCdpbnB1dCBmb2N1cyBibHVyJywgKGV2ZW50KSA9PiB7XG4gICAgaWYgKGN1c3RvbSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIGxldCBlbGVtZW50cyA9IGdldEZpZWxkcygndGl0bGUnLCBldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgIGxldCBzbHVnID0gJC5zbHVnaWZ5KGVsZW1lbnRzLnRpdGxlLnZhbCgpLCB7Y3VzdG9tOiB7XCInXCI6ICcnfX0pO1xuICAgIGVsZW1lbnRzLmZvbGRlci52YWwoc2x1Zyk7XG59KTtcblxuZm9sZGVyLm9uKCdpbnB1dCcsIChldmVudCkgPT4ge1xuICAgIGxldCBlbGVtZW50cyA9IGdldEZpZWxkcygnZm9sZGVyJywgZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICBsZXQgaW5wdXQgPSBlbGVtZW50cy5mb2xkZXIuZ2V0KDApO1xuICAgIGxldCB2YWx1ZSA9IGVsZW1lbnRzLmZvbGRlci52YWwoKTtcbiAgICBsZXQgc2VsZWN0aW9uID0ge1xuICAgICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcblxuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgJy0nKS5yZXBsYWNlKC9bXmEtejAtOV9cXC1dL2csICcnKTtcbiAgICBlbGVtZW50cy5mb2xkZXIudmFsKHZhbHVlKTtcbiAgICBjdXN0b20gPSAhIXZhbHVlO1xuXG4gICAgLy8gcmVzdG9yZSBjdXJzb3IgcG9zaXRpb25cbiAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb24uc3RhcnQsIHNlbGVjdGlvbi5lbmQpO1xuXG59KTtcblxuZm9sZGVyLm9uKCdmb2N1cyBibHVyJywgKGV2ZW50KSA9PiBnZXRGaWVsZHMoJ3RpdGxlJywgZXZlbnQuY3VycmVudFRhcmdldCkudGl0bGUudHJpZ2dlcignaW5wdXQnKSk7XG5cbiQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW25hbWU9XCJkYXRhW3JvdXRlXVwiXScsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJhd3JvdXRlID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS52YWwoKTtcbiAgICBjb25zdCBwYWdlVGVtcGxhdGUgPSAkKCdbbmFtZT1cImRhdGFbbmFtZV1cIl0nKTtcbiAgICBjb25zdCBVUkkgPSBgJHtjb25maWcuYmFzZV91cmxfcmVsYXRpdmV9L2FqYXguanNvbi90YXNrJHtjb25maWcucGFyYW1fc2VwfWdldENoaWxkVHlwZXNgO1xuXG4gICAgaWYgKHBhZ2VUZW1wbGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlcXVlc3QoVVJJLCB7XG4gICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICBib2R5OiB7IHJhd3JvdXRlIH1cbiAgICB9LCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlc3BvbnNlLmNoaWxkX3R5cGU7XG4gICAgICAgIGlmICh0eXBlICE9PSAnJyAmJiB0eXBlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHBhZ2VUZW1wbGF0ZS52YWwodHlwZSk7XG4gICAgICAgICAgICBwYWdlVGVtcGxhdGUuZGF0YSgnc2VsZWN0aXplJykuc2V0VmFsdWUodHlwZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./app/pages/page/add.js\n"); /***/ }), diff --git a/themes/grav/templates/partials/blueprints-copy.html.twig b/themes/grav/templates/partials/blueprints-copy.html.twig new file mode 100644 index 00000000..cb10f2e1 --- /dev/null +++ b/themes/grav/templates/partials/blueprints-copy.html.twig @@ -0,0 +1,22 @@ +{% set form_id = form_id ? form_id : 'blueprints' %} +{% set scope = scope ?: 'data.' %} + +
+ {% for field in blueprints.fields %} + {% if field.type %} + {% set value = field.name ? (form.value(field.name) ?? data.value(field.name)) : data.toArray %} +
+ {% include ["forms/fields/#{field.type}/#{field.type}.html.twig", 'forms/fields/text/text.html.twig'] %} +
+ {% endif %} + {% endfor %} + + +
+ + +
+ + {{ nonce_field('admin-form', 'admin-nonce')|raw }} + +