From c03da191293e1b5ed9a8315ea4be4ebf14e5e484 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 6 May 2022 12:44:22 +0300 Subject: [PATCH 1/7] Added configuration strings to English language --- languages/en.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/languages/en.yaml b/languages/en.yaml index 3d82bcdfc..87ebb0c64 100644 --- a/languages/en.yaml +++ b/languages/en.yaml @@ -454,8 +454,11 @@ PLUGIN_ADMIN: IMAGES_DEBUG_HELP: "Show an overlay over images indicating the pixel depth of the image when working with retina for example" IMAGES_LOADING: "Image loading behavior" IMAGES_LOADING_HELP: "The loading attribute allows a browser to defer loading offscreen images and iframes until users scroll near them. loading supports three values: auto, lazy, eager" + + # Removed in Grav 1.8 IMAGES_SEOFRIENDLY: "SEO-Friendly Image names" IMAGES_SEOFRIENDLY_HELP: "When enabled, the image name is displayed first, then a smaller hash to reflect processed operations" + UPLOAD_LIMIT: "File upload limit" UPLOAD_LIMIT_HELP: "Set maximum upload size in bytes (0 is unlimited)" ENABLE_MEDIA_TIMESTAMP: "Enable timestamps on media" @@ -1142,3 +1145,7 @@ PLUGIN_ADMIN: AVATAR: "Avatar Generator" AVATAR_HELP: "Multiavatar is a locally generated avatar. Gravatar is an external service that uses your email address to pull a preconfigured Avatar remotely" AVATAR_HASH: "NOTE: Optional Avatar custom 'hash' string" + IMAGES_TITLE: "Images" + LEGACY_MEDIA_MUTATION: "Legacy Media Manipulation Compatibility" + LEGACY_MEDIA_MUTATION_HELP: "Enable this setting only if image manipulation broke after Grav update." + BACKWARD_COMPATIBILITY: "Backward Compatibility" From d2b75dc4ee0a3912901789f08b06cc97a2c1c611 Mon Sep 17 00:00:00 2001 From: Djamil Legato Date: Mon, 6 Jun 2022 15:02:46 -0700 Subject: [PATCH 2/7] Exposed `UriToMarkdown` util (`Grav.default.Utils.UriToMarkdown`) in admin, to convert links/images. --- .gitignore | 1 + CHANGELOG.md | 6 + themes/grav/app/main.js | 3 +- themes/grav/js/admin.min.js | 3832 ++++++++++++++++++----------------- 4 files changed, 1926 insertions(+), 1916 deletions(-) diff --git a/.gitignore b/.gitignore index 77d394441..ddab4e4a3 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ tests/_support/_generated/* tests/cache/* tests/error.log /crowdin.yaml +.vscode diff --git a/CHANGELOG.md b/CHANGELOG.md index da183e2e8..9ab184f8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.10.33.2 +## mm/dd/2022 + +1. [](#improved) + * Exposed `UriToMarkdown` util (`Grav.default.Utils.UriToMarkdown`) in admin, to convert links/images. + # v1.10.33.1 ## 04/25/2022 diff --git a/themes/grav/app/main.js b/themes/grav/app/main.js index 820c35d80..6edfca996 100644 --- a/themes/grav/app/main.js +++ b/themes/grav/app/main.js @@ -4,6 +4,7 @@ import '@babel/polyfill'; import $ from 'jquery'; import './utils/remodal'; import 'simplebar/dist/simplebar.min.js'; +import { UriToMarkdown } from './forms/fields/files.js'; import GPM, { Instance as gpm } from './utils/gpm'; import KeepAlive from './utils/keepalive'; import Updates, { Instance as updates, Notifications, Feed } from './updates'; @@ -68,5 +69,5 @@ export default { Instance: MediaFilterInstance }, Scrollbar: { Scrollbar: { deprecated: true }, Instance: { deprecated: true } }, - Utils: { request, toastr, Cookies } + Utils: { request, toastr, Cookies, UriToMarkdown } }; diff --git a/themes/grav/js/admin.min.js b/themes/grav/js/admin.min.js index a5583badf..3da9f860e 100644 --- a/themes/grav/js/admin.min.js +++ b/themes/grav/js/admin.min.js @@ -711,6 +711,9 @@ var external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery }); // EXTERNAL MODULE: ./node_modules/simplebar/dist/simplebar.min.js var simplebar_min = __webpack_require__(85766); +// EXTERNAL MODULE: ./node_modules/dropzone/dist/dropzone.js +var dist_dropzone = __webpack_require__(32025); +var dropzone_default = /*#__PURE__*/__webpack_require__.n(dist_dropzone); // EXTERNAL MODULE: ./node_modules/toastr/toastr.js var toastr = __webpack_require__(8901); var toastr_default = /*#__PURE__*/__webpack_require__.n(toastr); @@ -847,191 +850,6 @@ function userFeedbackError(error) { external_jQuery_default()(__webpack_require__.g).on('beforeunload._ajax', function () { UNLOADING = true; }); -// EXTERNAL MODULE: ./node_modules/events/events.js -var events = __webpack_require__(17187); -var events_default = /*#__PURE__*/__webpack_require__.n(events); -;// CONCATENATED MODULE: ./app/utils/gpm.js -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - - - - -var GPM = /*#__PURE__*/function (_EventEmitter) { - _inherits(GPM, _EventEmitter); - - var _super = _createSuper(GPM); - - function GPM() { - var _this; - - var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; - - _classCallCheck(this, GPM); - - _this = _super.call(this); - _this.payload = {}; - _this.raw = {}; - _this.action = action; - return _this; - } - - _createClass(GPM, [{ - key: "setPayload", - value: function setPayload() { - var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - this.payload = payload; - this.emit('payload', payload); - return this; - } - }, { - key: "setAction", - value: function setAction() { - var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; - this.action = action; - this.emit('action', action); - return this; - } - }, { - key: "fetch", - value: function (_fetch) { - function fetch() { - return _fetch.apply(this, arguments); - } - - fetch.toString = function () { - return _fetch.toString(); - }; - - return fetch; - }(function () { - var _this2 = this; - - var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { - return true; - }; - var flush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var data = new FormData(); - data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); - - if (flush) { - data.append('flush', true); - } - - this.emit('fetching', this); - fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getUpdates"), { - credentials: 'same-origin', - method: 'post', - body: data - }).then(function (response) { - _this2.raw = response; - return response; - }).then(parseStatus).then(parseJSON).then(function (response) { - return _this2.response(response); - }).then(function (response) { - return callback(response, _this2.raw); - }).then(function (response) { - return _this2.emit('fetched', _this2.payload, _this2.raw, _this2); - })["catch"](userFeedbackError); - }) - }, { - key: "response", - value: function response(_response) { - this.payload = _response; - return _response; - } - }]); - - return GPM; -}((events_default())); - - -var Instance = new GPM(); -;// CONCATENATED MODULE: ./app/utils/keepalive.js -function keepalive_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function keepalive_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function keepalive_createClass(Constructor, protoProps, staticProps) { if (protoProps) keepalive_defineProperties(Constructor.prototype, protoProps); if (staticProps) keepalive_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - - - -var MAX_SAFE_DELAY = 2147483647; - -var KeepAlive = /*#__PURE__*/function () { - function KeepAlive() { - keepalive_classCallCheck(this, KeepAlive); - - this.active = false; - } - - keepalive_createClass(KeepAlive, [{ - key: "start", - value: function start() { - var _this = this; - - var timeout = external_GravAdmin_namespaceObject.config.admin_timeout / 1.5 * 1000; - this.timer = setInterval(function () { - return _this.fetch(); - }, Math.min(timeout, MAX_SAFE_DELAY)); - this.active = true; - } - }, { - key: "stop", - value: function stop() { - clearInterval(this.timer); - this.active = false; - } - }, { - key: "fetch", - value: function (_fetch) { - function fetch() { - return _fetch.apply(this, arguments); - } - - fetch.toString = function () { - return _fetch.toString(); - }; - - return fetch; - }(function () { - var data = new FormData(); - data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); - fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "keepAlive"), { - credentials: 'same-origin', - method: 'post', - body: data - })["catch"](userFeedbackError); - }) - }]); - - return KeepAlive; -}(); - -/* harmony default export */ const keepalive = (new KeepAlive()); -// EXTERNAL MODULE: ./node_modules/mout/array/unique.js -var unique = __webpack_require__(79863); -var unique_default = /*#__PURE__*/__webpack_require__.n(unique); ;// CONCATENATED MODULE: ./app/utils/request.js @@ -1074,2196 +892,2378 @@ var request = function request(url) { }; /* harmony default export */ const utils_request = (request); -;// CONCATENATED MODULE: ./app/updates/notifications.js -function notifications_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +;// CONCATENATED MODULE: ./app/forms/fields/files.js +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function notifications_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -function notifications_createClass(Constructor, protoProps, staticProps) { if (protoProps) notifications_defineProperties(Constructor.prototype, protoProps); if (staticProps) notifications_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + // import EXIF from 'exif-js'; + // translations -var canFetchNotifications = function canFetchNotifications() { - return external_GravAdmin_namespaceObject.config.notifications.enabled; +var Dictionary = { + dictCancelUpload: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD, + dictCancelUploadConfirmation: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD_CONFIRMATION, + dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_DEFAULT_MESSAGE, + dictFallbackMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_MESSAGE, + dictFallbackText: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_TEXT, + dictFileTooBig: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FILE_TOO_BIG, + dictInvalidFileType: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_INVALID_FILE_TYPE, + dictMaxFilesExceeded: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_MAX_FILES_EXCEEDED, + dictRemoveFile: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_REMOVE_FILE, + dictResponseError: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_RESPONSE_ERROR }; +(dropzone_default()).autoDiscover = false; +(dropzone_default()).options.gravPageDropzone = {}; -var notificationsFilters = function notificationsFilters() { - return external_GravAdmin_namespaceObject.config.notifications.filters; -}; +(dropzone_default()).confirm = function (question, accepted, rejected) { + var doc = external_jQuery_default()(document); + var modalSelector = '[data-remodal-id="delete-media"]'; -var Notifications = /*#__PURE__*/function () { - function Notifications() { - notifications_classCallCheck(this, Notifications); - } + var removeEvents = function removeEvents() { + doc.off('confirmation', modalSelector, accept); + doc.off('cancellation', modalSelector, reject); + external_jQuery_default()(modalSelector).find('.remodal-confirm').removeClass('pointer-events-disabled'); + }; - notifications_createClass(Notifications, [{ - key: "fetch", - value: // Grav.default.Notifications.fetch() - function fetch() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref$filter = _ref.filter, - filter = _ref$filter === void 0 ? notificationsFilters() : _ref$filter, - _ref$refresh = _ref.refresh, - refresh = _ref$refresh === void 0 ? false : _ref$refresh; + var accept = function accept() { + accepted && accepted(); + removeEvents(); + }; - if (!canFetchNotifications()) { - return false; - } + var reject = function reject() { + rejected && rejected(); + removeEvents(); + }; - var feed = external_jQuery_default()('#notifications'); - var loader = feed.find('.widget-loader'); - var content = feed.find('.widget-content > ul'); - loader.find('div').remove(); - loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); - loader.show(); - content.hide(); + (external_jQuery_default()).remodal.lookup[external_jQuery_default()(modalSelector).data('remodal')].open(); + doc.on('confirmation', modalSelector, accept); + doc.on('cancellation', modalSelector, reject); +}; - var processNotifications = function processNotifications(response) { - var notifications = response.notifications; - external_jQuery_default()('#notifications').find('.widget-content > ul').empty(); - - if (notifications) { - Object.keys(notifications).forEach(function (location) { - return Notifications.processLocation(location, notifications[location]); - }); - } - }; +var DropzoneMediaConfig = { + timeout: 0, + thumbnailWidth: 200, + thumbnailHeight: 150, + addRemoveLinks: false, + dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROP_FILES_HERE_TO_UPLOAD.replace(/</g, '<').replace(/>/g, '>'), + dictRemoveFileConfirmation: '[placeholder]', + previewTemplate: "\n ").trim() +}; // global.EXIF = EXIF; - utils_request("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getNotifications"), { - method: 'post', - body: { - refresh: refresh, - filter: filter - } - }, function (response) { - processNotifications(response); - })["catch"](function () { - var widget = external_jQuery_default()('#notifications .widget-content'); - widget.find('.widget-loader').find('div').remove(); - widget.find('.widget-loader').append('
Failed to retrieve notifications
').find('.fa-spin').removeClass('fa-spin fa-refresh').addClass('fa-warning'); - }); - } - }], [{ - key: "addShowAllInFeed", - value: function addShowAllInFeed() { - external_jQuery_default()('#notifications ul').append('
  • Show all
  • '); - } - }, { - key: "showNotificationInFeed", - value: function showNotificationInFeed(notification) { - var notifications = external_jQuery_default()('#notifications').removeClass('hidden'); - var loader = notifications.find('.widget-loader').hide(); - var content = notifications.find('.widget-content > ul').show(); - loader.find('div').remove(); - loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); - content.append(notification).find('li:nth-child(n+11)').addClass('hidden'); // hide all items > 10 +var ACCEPT_FUNC = function ACCEPT_FUNC(file, done, settings) { + var resolution = settings.resolution; + if (!resolution) return done(); + var reader = new FileReader(); + var error = ''; + var hasMin = resolution.min && (resolution.min.width || resolution.min.height); + var hasMax = resolution.max && (resolution.max.width || resolution.max.height); - if (content.find('li.hidden').length) { - Notifications.addShowAllInFeed(); + if (hasMin || !(settings.resizeWidth || settings.resizeHeight) && hasMax) { + reader.onload = function (event) { + if (!/image\//.test(file.type)) { + done(); + return; } - } - }, { - key: "showNotificationInTop", - value: function showNotificationInTop(notification) { - var container = external_jQuery_default()('.top-notifications-container'); - var dummy = external_jQuery_default()('
    ').html(notification); - container.removeClass('hidden').append(dummy.children()); - dummy.children().slideDown(150); - } - }, { - key: "showNotificationInDashboard", - value: function showNotificationInDashboard(notification) { - var container = external_jQuery_default()('.dashboard-notifications-container'); - var dummy = external_jQuery_default()('
    ').html(notification); - container.removeClass('hidden').append(dummy.children()); - dummy.children().slideDown(150); - } - }, { - key: "showNotificationInPlugins", - value: function showNotificationInPlugins(notification) { - var container = external_jQuery_default()('.plugins-notifications-container'); - var dummy = external_jQuery_default()('
    ').html(notification); - container.removeClass('hidden').append(dummy.children()); - dummy.children().slideDown(150); - } - }, { - key: "showNotificationInThemes", - value: function showNotificationInThemes(notification) { - var container = external_jQuery_default()('.themes-notifications-container'); - var dummy = external_jQuery_default()('
    ').html(notification); - container.removeClass('hidden').append(dummy.children()); - dummy.children().slideDown(150); - } - }, { - key: "processLocation", - value: function processLocation(location, notification) { - switch (location) { - case 'feed': - Notifications.showNotificationInFeed(notification); - break; - case 'top': - if (!notification.read) { - Notifications.showNotificationInTop(notification); - } + var image = new Image(); + image.src = event.target.result; - break; + image.onerror = function () { + done(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_UPLOAD); + }; - case 'dashboard': - if (!notification.read) { - Notifications.showNotificationInDashboard(notification); - } + image.onload = function () { + var _this = this; - break; + if (resolution.min) { + Object.keys(resolution.min).forEach(function (attr) { + if (resolution.min[attr] && _this[attr] < resolution.min[attr]) { + error += external_GravAdmin_namespaceObject.translations.PLUGIN_FORM.RESOLUTION_MIN.replace(/{{attr}}/g, attr).replace(/{{min}}/g, resolution.min[attr]); + } + }); + } - case 'plugins': - if (!notification.read) { - Notifications.showNotificationInPlugins(notification); + if (!(settings.resizeWidth || settings.resizeHeight)) { + if (resolution.max) { + Object.keys(resolution.max).forEach(function (attr) { + if (resolution.max[attr] && _this[attr] > resolution.max[attr]) { + error += external_GravAdmin_namespaceObject.translations.PLUGIN_FORM.RESOLUTION_MAX.replace(/{{attr}}/g, attr).replace(/{{max}}/g, resolution.max[attr]); + } + }); } + } - break; + URL.revokeObjectURL(image.src); // release memory - case 'themes': - if (!notification.read) { - Notifications.showNotificationInThemes(notification); - } + return error ? done(error) : done(); + }; + }; - break; - } - } - }]); + reader.readAsDataURL(file); + } else { + return error ? done(error) : done(); + } +}; - return Notifications; -}(); +var FilesField = /*#__PURE__*/function () { + function FilesField() { + var _this2 = this; -var notifications = new Notifications(); -/* harmony default export */ const updates_notifications = (notifications); + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$container = _ref.container, + container = _ref$container === void 0 ? '.dropzone.files-upload' : _ref$container, + _ref$options = _ref.options, + options = _ref$options === void 0 ? {} : _ref$options; -if (canFetchNotifications()) { - notifications.fetch(); - /* Hide a notification and store it hidden */ - // + _classCallCheck(this, FilesField); - external_jQuery_default()(document).on('click', '[data-notification-action="hide-notification"]', function (event) { - var notification_id = external_jQuery_default()(event.target).parents('.hide-notification').data('notification-id'); - var url = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/notifications.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "hideNotification/notification_id").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(notification_id); - utils_request(url, { - method: 'post' - }, function () {}); - external_jQuery_default()(event.target).parents('.single-notification').hide(); - }); - external_jQuery_default()(document).on('click', '[data-notification-action="hide-notification"]', function (event) { - var target = external_jQuery_default()(event.currentTarget); - var notification = target.parent(); - notification.slideUp(function () { - return notification.remove(); + this.container = external_jQuery_default()(container); + + if (!this.container.length) { + return; + } + + this.urls = {}; + this.customPost = this.container.data('filePostAdd') || {}; + this.options = Object.assign({}, Dictionary, DropzoneMediaConfig, { + klass: this, + url: this.container.data('file-url-add') || external_GravAdmin_namespaceObject.config.current_url, + acceptedFiles: this.container.data('media-types'), + init: this.initDropzone + }, this.container.data('dropzone-options'), options); + this.options = Object.assign({}, this.options, { + accept: function accept(file, done) { + ACCEPT_FUNC(file, done, this.options); + } }); - }); - external_jQuery_default()(document).on('click', '[data-notification-action="show-all-notifications"]', function (event) { - external_jQuery_default()('#notifications .show-all').hide(); - external_jQuery_default()('#notifications .hidden').removeClass('hidden'); - }); - external_jQuery_default()(document).on('click', '[data-refresh="notifications"]', function (event) { - event.preventDefault(); - notifications.fetch({ - filter: ['feed'], - refresh: true + this.dropzone = new (dropzone_default())(container, this.options); + this.dropzone.on('complete', this.onDropzoneComplete.bind(this)); + this.dropzone.on('success', this.onDropzoneSuccess.bind(this)); + this.dropzone.on('addedfile', this.onDropzoneAddedFile.bind(this)); + this.dropzone.on('removedfile', this.onDropzoneRemovedFile.bind(this)); + this.dropzone.on('sending', this.onDropzoneSending.bind(this)); + this.dropzone.on('error', this.onDropzoneError.bind(this)); + this.container.on('mouseenter', '[data-dz-view]', function (e) { + var value = JSON.parse(_this2.container.find('[name][type="hidden"]').val() || '{}'); + var target = external_jQuery_default()(e.currentTarget); + var file = target.parent('.dz-preview').find('.dz-filename'); + var filename = encodeURI(file.text()); + var URL = Object.keys(value).filter(function (key) { + return value[key].name === filename; + }).shift(); + target.attr('href', "".concat(external_GravAdmin_namespaceObject.config.base_url_simple, "/").concat(URL)); }); - }); -} -;// CONCATENATED MODULE: ./app/updates/feed.js -function feed_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + } -function feed_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + _createClass(FilesField, [{ + key: "initDropzone", + value: function initDropzone() { + var _this3 = this; -function feed_createClass(Constructor, protoProps, staticProps) { if (protoProps) feed_defineProperties(Constructor.prototype, protoProps); if (staticProps) feed_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + var files = this.options.klass.container.find('[data-file]'); + var dropzone = this; + if (!files.length) { + return; + } + files.each(function (index, file) { + file = external_jQuery_default()(file); + var data = file.data('file'); + var mock = { + name: data.name, + size: data.size, + type: data.type, + status: (dropzone_default()).ADDED, + accepted: true, + url: _this3.options.url, + removeUrl: data.remove + }; + dropzone.files.push(mock); + dropzone.options.addedfile.call(dropzone, mock); + if (mock.type.match(/^image\//)) { + dropzone.options.thumbnail.call(dropzone, mock, data.path); + dropzone.createThumbnailFromUrl(mock, data.path); + } -var URI = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/ajax.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getNewsFeed"); - -var Feed = /*#__PURE__*/function () { - function Feed() { - feed_classCallCheck(this, Feed); - - this.data = null; - } + file.remove(); + }); + } + }, { + key: "getURI", + value: function getURI() { + return this.container.data('mediaUri') || ''; + } + }, { + key: "onDropzoneSending", + value: function onDropzoneSending(file, xhr, formData) { + var _this4 = this; - feed_createClass(Feed, [{ - key: "fetch", - value: function fetch() { - var _this = this; + if (Object.keys(this.customPost).length) { + Object.keys(this.customPost).forEach(function (key) { + formData.append(key, _this4.customPost[key]); + }); + } else { + formData.append('name', this.options.dotNotation); + formData.append('task', 'filesupload'); + formData.append('uri', this.getURI()); + } - var refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; - utils_request(URI, { - method: 'post', - body: { - refresh: refresh - } - }, function (response) { - _this.data = response; - callback(response); - }); + formData.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); } }, { - key: "refresh", - value: function refresh() { - var _refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + key: "onDropzoneSuccess", + value: function onDropzoneSuccess(file, response, xhr) { + response = typeof response === 'string' ? JSON.parse(response) : response; - var feed = external_jQuery_default()('#news-feed .widget-content'); + if (this.options.reloadPage) { + __webpack_require__.g.location.reload(); + } // store params for removing file from session before it gets saved - if (!feed.length) { - return; + + if (response.session) { + file.sessionParams = response.session; + file.removeUrl = this.options.url; // Touch field value to force a mutation detection + + var input = this.container.find('[name][type="hidden"]'); + var value = input.val(); + input.val(value + ' '); } - var loader = feed.find('.widget-loader'); - loader.find('div').remove(); - loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); - loader.show(); - feed.find('> ul').hide(); + return this.handleError({ + file: file, + data: response, + mode: 'removeFile', + msg: "

    ".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_UPLOAD, " {{fileName}}

    \n
    ").concat(response.message, "
    ") + }); + } + }, { + key: "onDropzoneComplete", + value: function onDropzoneComplete(file) { + if (!file.accepted && !file.rejected) { + var data = { + status: 'error', + message: "".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_UNSUPPORTED, ": ").concat(file.name.match(/\..+/).join('')) + }; + return this.handleError({ + file: file, + data: data, + mode: 'removeFile', + msg: "

    ".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_ADD, " {{fileName}}

    \n
    ").concat(data.message, "
    ") + }); + } - if (!this.data || this.data.error || _refresh) { - this.fetch(_refresh, this.updateContent.bind(this)); - } else { - this.updateContent(); + if (this.options.reloadPage) { + __webpack_require__.g.location.reload(); } } }, { - key: "updateContent", - value: function updateContent() { - var feed = external_jQuery_default()('#news-feed .widget-content'); + key: "b64_to_utf8", + value: function b64_to_utf8(str) { + str = str.replace(/\s/g, ''); + return decodeURIComponent(escape(window.atob(str))); + } + }, { + key: "onDropzoneAddedFile", + value: function onDropzoneAddedFile(file) { + return this.dropzone.options.addedfile(file); + } + }, { + key: "onDropzoneRemovedFile", + value: function onDropzoneRemovedFile(file) { + var _this5 = this; - if (!feed.length) { + if (!file.accepted || file.rejected) { return; } - var loader = feed.find('.widget-loader').hide(); - var content = feed.find('> ul').empty().show(); + var url = file.removeUrl || this.urls["delete"] || this.options.url; + var path = (url || '').match(/path:(.*)\//); + var body = { + filename: file.name, + uri: this.getURI() + }; - if (this.data.error || this.data.status === 'error') { - loader.show().find('div').remove(); - loader.find('.fa-refresh').removeClass('fa-refresh fa-spin').addClass('fa-warning'); - loader.append("
    ".concat(this.data.error ? this.data.error.message : this.data.message || 'Unable to download news feed', "
    ")); - return; + if (file.sessionParams) { + body.task = 'filessessionremove'; + body.session = file.sessionParams; } - if (this.data && this.data.feed_data) { - content.append(this.data.feed_data); + var customPost = this.container.data('filePostRemove') || {}; + + if (Object.keys(customPost).length) { + body = {}; + Object.keys(customPost).forEach(function (key) { + body[key] = customPost[key]; + }); } - } - }]); - return Feed; -}(); + body['filename'] = file.name; + body['admin-nonce'] = external_GravAdmin_namespaceObject.config.admin_nonce; + utils_request(url, { + method: 'post', + body: body + }, function () { + if (!path) { + return; + } -var feed = new Feed(); -external_jQuery_default()(document).ready(function () { - return feed.refresh(); -}); -external_jQuery_default()(document).on('click', '[data-refresh="feed"]', function (event) { - event.preventDefault(); - feed.refresh(true); -}); -/* harmony default export */ const updates_feed = (feed); -;// CONCATENATED MODULE: ./app/updates/check.js + path = _this5.b64_to_utf8(path[1]); + var input = _this5.container.find('[name][type="hidden"]'); + var data = JSON.parse(input.val() || '{}'); + delete data[path]; + input.val(JSON.stringify(data)); + }); + } + }, { + key: "onDropzoneError", + value: function onDropzoneError(file, response, xhr) { + var message = xhr ? response.error.message : response; + external_jQuery_default()(file.previewElement).find('[data-dz-errormessage]').html(message); + return this.handleError({ + file: file, + data: { + status: 'error' + }, + msg: "
    ".concat(message, "
    ") + }); + } + }, { + key: "handleError", + value: function handleError(options) { + var file = options.file, + data = options.data, + mode = options.mode, + msg = options.msg; - // Check for updates trigger + if (data.status !== 'error' && data.status !== 'unauthorized') { + return; + } -external_jQuery_default()('[data-gpm-checkupdates]').on('click', function () { - var element = external_jQuery_default()(this); - element.find('i').addClass('fa-spin'); - Instance.fetch(function (response) { - element.find('i').removeClass('fa-spin'); - var payload = response.payload; + switch (mode) { + case 'addBack': + if (file instanceof File) { + this.dropzone.addFile.call(this.dropzone, file); + } else { + this.dropzone.files.push(file); + this.dropzone.options.addedfile.call(this.dropzone, file); + this.dropzone.options.thumbnail.call(this.dropzone, file, file.extras.url); + } - if (!payload) { - return; - } + break; - if (!payload.grav.isUpdatable && !payload.resources.total) { - utils_toastr.success(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.EVERYTHING_UP_TO_DATE); - } else { - var grav = payload.grav.isUpdatable ? 'Grav v' + payload.grav.available : ''; - var resources = payload.resources.total ? payload.resources.total + ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATES_ARE_AVAILABLE : ''; + case 'removeFile': + default: + if (~this.dropzone.files.indexOf(file)) { + file.rejected = true; + this.dropzone.removeFile.call(this.dropzone, file, { + silent: true + }); + } - if (!resources) { - grav += ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_AVAILABLE_FOR_UPDATE; + break; } - utils_toastr.info(grav + (grav && resources ? ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.AND + ' ' : '') + resources); + var modal = external_jQuery_default()('[data-remodal-id="generic"]'); + var cleanName = file.name.replace('<', '<').replace('>', '>'); + modal.find('.error-content').html(msg.replace('{{fileName}}', cleanName)); + (external_jQuery_default()).remodal.lookup[modal.data('remodal')].open(); } - }, true); -}); -;// CONCATENATED MODULE: ./app/utils/formatbytes.js -var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; -function formatBytes(bytes, decimals) { - if (bytes === 0) return '0 Byte'; - var k = 1000; - var value = Math.floor(Math.log(bytes) / Math.log(k)); - var decimal = decimals + 1 || 3; - return (bytes / Math.pow(k, value)).toPrecision(decimal) + ' ' + sizes[value]; -} -;// CONCATENATED MODULE: ./app/updates/update.js - + }]); + return FilesField; +}(); - // Dashboard update and Grav update +function UriToMarkdown(uri) { + uri = uri.replace(/@3x|@2x|@1x/, ''); + uri = uri.replace(/\(/g, '%28'); + uri = uri.replace(/\)/g, '%29'); + var title = uri.split('.').slice(0, -1).join('.'); + return uri.match(/\.(jpe?g|png|gif|svg|webp|mp4|webm|ogv|mov)$/i) ? "![".concat(title, "](").concat(uri, " \"").concat(title, "\")") : "[".concat(decodeURI(uri), "](").concat(uri, ")"); +} +var instances = []; +var cache = external_jQuery_default()(); -external_jQuery_default()(document).on('click.remodal', '[data-remodal-id="update-grav"] [data-remodal-action="confirm"]', function () { - var element = external_jQuery_default()('#grav-update-button'); - element.html("".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, " ").concat(formatBytes(updates_Instance.payload.grav.assets["grav-update"].size), "..")); - element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin'); - utils_request(updates_Instance.updateURL, function (response) { - if (response.type === 'updategrav') { - external_jQuery_default()('[data-gpm-grav]').remove(); - external_jQuery_default()('#footer .grav-version').html(response.version); - } +var onAddedNodes = function onAddedNodes(event, target +/* , record, instance */ +) { + var files = external_jQuery_default()(target).find('.dropzone.files-upload'); - element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download'); + if (!files.length) { + return; + } + + files.each(function (index, file) { + file = external_jQuery_default()(file); + + if (!~cache.index(file)) { + addNode(file); + } }); -}); -;// CONCATENATED MODULE: ./app/updates/channel-switcher.js +}; +var addNode = function addNode(container) { + container = external_jQuery_default()(container); + var input = container.find('input[type="file"]'); + var settings = container.data('grav-file-settings') || {}; -var switcher = external_jQuery_default()('input[type="radio"][name="channel-switch"]'); + if (settings.accept && ~settings.accept.indexOf('*')) { + settings.accept = ['']; + } -if (switcher) { - switcher.on('change', function (event) { - var radio = external_jQuery_default()(event.target); - var url = "".concat(radio.parent('[data-url]').data('url')); - utils_request(url, { - method: 'post', - body: { - task: 'gpmRelease', - release: radio.val() - } - }, function (response) { - if (response.reload) { - __webpack_require__.g.location.reload(); - } - }); + var options = { + url: container.data('file-url-add') || (container.closest('form').attr('action') || external_GravAdmin_namespaceObject.config.current_url) + '.json', + paramName: settings.paramName || 'file', + dotNotation: settings.name || 'file', + acceptedFiles: settings.accept ? settings.accept.join(',') : input.attr('accept') || container.data('media-types'), + maxFilesize: typeof settings.filesize !== 'undefined' ? settings.filesize : 256, + maxFiles: settings.limit || null, + resizeWidth: settings.resizeWidth || null, + resizeHeight: settings.resizeHeight || null, + resizeQuality: settings.resizeQuality || null, + resolution: settings.resolution || null, + accept: function accept(file, done) { + ACCEPT_FUNC(file, done, settings); + } + }; + cache = cache.add(container); + container = container[0]; + instances.push(new FilesField({ + container: container, + options: options + })); +}; + +var Instance = function () { + external_jQuery_default()('.dropzone.files-upload').each(function (i, container) { + return addNode(container); }); -} -;// CONCATENATED MODULE: ./app/updates/index.js -function updates_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + external_jQuery_default()('body').on('mutation._grav', onAddedNodes); + return instances; +}(); +// EXTERNAL MODULE: ./node_modules/events/events.js +var events = __webpack_require__(17187); +var events_default = /*#__PURE__*/__webpack_require__.n(events); +;// CONCATENATED MODULE: ./app/utils/gpm.js +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -function updates_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function gpm_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function updates_createClass(Constructor, protoProps, staticProps) { if (protoProps) updates_defineProperties(Constructor.prototype, protoProps); if (staticProps) updates_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function gpm_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function gpm_createClass(Constructor, protoProps, staticProps) { if (protoProps) gpm_defineProperties(Constructor.prototype, protoProps); if (staticProps) gpm_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } -var Updates = /*#__PURE__*/function () { - function Updates() { - var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - updates_classCallCheck(this, Updates); - this.setPayload(payload); - this.task = "task".concat(external_GravAdmin_namespaceObject.config.param_sep); - this.updateURL = ''; +var GPM = /*#__PURE__*/function (_EventEmitter) { + _inherits(GPM, _EventEmitter); + + var _super = _createSuper(GPM); + + function GPM() { + var _this; + + var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; + + gpm_classCallCheck(this, GPM); + + _this = _super.call(this); + _this.payload = {}; + _this.raw = {}; + _this.action = action; + return _this; } - updates_createClass(Updates, [{ + gpm_createClass(GPM, [{ key: "setPayload", value: function setPayload() { var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.payload = payload; + this.emit('payload', payload); return this; } }, { - key: "fetch", - value: function fetch() { - var _this = this; - - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - Instance.fetch(function (response) { - return _this.setPayload(response); - }, force); + key: "setAction", + value: function setAction() { + var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates'; + this.action = action; + this.emit('action', action); return this; } }, { - key: "maintenance", - value: function maintenance() { - var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'hide'; - var element = external_jQuery_default()('#updates [data-update-packages]'); - element[mode === 'show' ? 'fadeIn' : 'fadeOut'](); - - if (mode === 'hide') { - external_jQuery_default()('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove(); + key: "fetch", + value: function (_fetch) { + function fetch() { + return _fetch.apply(this, arguments); } - return this; - } - }, { - key: "grav", - value: function grav() { - var payload = this.payload.grav; - - if (payload && payload.isUpdatable) { - var task = this.task; - var bar = ''; - - if (!payload.isSymlink) { - this.updateURL = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json/").concat(task, "updategrav/admin-nonce").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(external_GravAdmin_namespaceObject.config.admin_nonce); - bar += ""); - } else { - bar += ""); - } + fetch.toString = function () { + return _fetch.toString(); + }; - bar += "\n Grav v".concat(payload.available, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, "! (").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.CURRENT, " v").concat(payload.version, ")\n "); - var element = external_jQuery_default()('[data-gpm-grav]').removeClass('hidden'); + return fetch; + }(function () { + var _this2 = this; - if (element.is(':empty')) { - element.hide(); - } + var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () { + return true; + }; + var flush = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var data = new FormData(); + data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); - element.addClass('grav').html("".concat(bar)).slideDown(150, function () { - var c = 5; - var x = setInterval(function () { - c -= 1; - element.find('.pointer-events-none .cnt-down').text('(' + c + 's)'); - }, 1000); - setTimeout(function () { - clearInterval(x); - element.find('.pointer-events-none .cnt-down').remove(); - element.find('.pointer-events-none').removeClass('pointer-events-none'); - }, 5000); - }).parent('#messages').addClass('default-box-shadow'); + if (flush) { + data.append('flush', true); } - return this; - } + this.emit('fetching', this); + fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getUpdates"), { + credentials: 'same-origin', + method: 'post', + body: data + }).then(function (response) { + _this2.raw = response; + return response; + }).then(parseStatus).then(parseJSON).then(function (response) { + return _this2.response(response); + }).then(function (response) { + return callback(response, _this2.raw); + }).then(function (response) { + return _this2.emit('fetched', _this2.payload, _this2.raw, _this2); + })["catch"](userFeedbackError); + }) }, { - key: "resources", - value: function resources() { - if (!this.payload || !this.payload.resources || !this.payload.resources.total) { - return this.maintenance('hide'); - } + key: "response", + value: function response(_response) { + this.payload = _response; + return _response; + } + }]); - var is_current_package_latest = true; - var map = ['plugins', 'themes']; - var singles = ['plugin', 'theme']; - var _this$payload$resourc = this.payload.resources, - plugins = _this$payload$resourc.plugins, - themes = _this$payload$resourc.themes; + return GPM; +}((events_default())); - if (!this.payload.resources.total) { - return this; - } - [plugins, themes].forEach(function (resources, index) { - if (!resources || Array.isArray(resources)) { - return; - } +var gpm_Instance = new GPM(); +;// CONCATENATED MODULE: ./app/utils/keepalive.js +function keepalive_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var length = Object.keys(resources).length; - var type = map[index]; // sidebar +function keepalive_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - external_jQuery_default()("#admin-menu a[href$=\"/".concat(map[index], "\"]")).find('.badges').addClass('with-updates').find('.badge.updates').text(length); - var type_translation = ''; // update all +function keepalive_createClass(Constructor, protoProps, staticProps) { if (protoProps) keepalive_defineProperties(Constructor.prototype, protoProps); if (staticProps) keepalive_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - if (type === 'plugins') { - type_translation = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.PLUGINS; - } else { - type_translation = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.THEMES; - } - var updateAll = external_jQuery_default()(".grav-update.".concat(type)); - updateAll.css('display', 'block').html("\n

    \n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.ALL, " ").concat(type_translation, "\n \n ").concat(length, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_YOUR, " ").concat(type_translation.toLowerCase(), " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, "\n

    \n ")); - var existing_slugs = external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs') || ''; - if (existing_slugs) { - existing_slugs = existing_slugs.split(','); - } else { - existing_slugs = []; - } +var MAX_SAFE_DELAY = 2147483647; - var slugs = unique_default()(existing_slugs.concat(Object.keys(resources))).join(); - external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs', "".concat(slugs)); - Object.keys(resources).forEach(function (item) { - // listing page - var container = external_jQuery_default()("[data-gpm-".concat(singles[index], "=\"").concat(item, "\"]")); - var element = container.find('.gpm-name'); - var url = element.find('a'); - var content_wrapper = container.parents('.content-wrapper'); +var KeepAlive = /*#__PURE__*/function () { + function KeepAlive() { + keepalive_classCallCheck(this, KeepAlive); - if (type === 'plugins' && !element.find('.badge.update').length) { - element.append("").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, "!")); - content_wrapper.addClass('has-updates'); - } else if (type === 'themes') { - element.append("")); - content_wrapper.addClass('has-updates'); - } // details page + this.active = false; + } + keepalive_createClass(KeepAlive, [{ + key: "start", + value: function start() { + var _this = this; - if (container.length) { - var details = external_jQuery_default()(".grav-update.".concat(singles[index])); + var timeout = external_GravAdmin_namespaceObject.config.admin_timeout / 1.5 * 1000; + this.timer = setInterval(function () { + return _this.fetch(); + }, Math.min(timeout, MAX_SAFE_DELAY)); + this.active = true; + } + }, { + key: "stop", + value: function stop() { + clearInterval(this.timer); + this.active = false; + } + }, { + key: "fetch", + value: function (_fetch) { + function fetch() { + return _fetch.apply(this, arguments); + } - if (details.length) { - var releaseType = resources[item].type === 'testing' ? 'test release' : ''; - details.html("\n

    \n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), "\n \n v").concat(resources[item].available, " ").concat(releaseType, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_THIS, " ").concat(singles[index], " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, "!\n

    \n ")).css('display', 'block'); - is_current_package_latest = false; - } - } - }); - external_jQuery_default()('[data-update-packages]').removeClass('hidden'); - }); - external_jQuery_default()('.content-wrapper').addClass('updates-checked'); + fetch.toString = function () { + return _fetch.toString(); + }; - if (!is_current_package_latest) { - external_jQuery_default()('.warning-reinstall-not-latest-release').removeClass('hidden'); - } - } + return fetch; + }(function () { + var data = new FormData(); + data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); + fetch("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "keepAlive"), { + credentials: 'same-origin', + method: 'post', + body: data + })["catch"](userFeedbackError); + }) }]); - return Updates; + return KeepAlive; }(); +/* harmony default export */ const keepalive = (new KeepAlive()); +// EXTERNAL MODULE: ./node_modules/mout/array/unique.js +var unique = __webpack_require__(79863); +var unique_default = /*#__PURE__*/__webpack_require__.n(unique); +;// CONCATENATED MODULE: ./app/updates/notifications.js +function notifications_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var updates_Instance = new Updates(); - // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch +function notifications_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -Instance.on('fetched', function (response, raw) { - updates_Instance.setPayload(response.payload || {}); - updates_Instance.grav().resources(); -}); +function notifications_createClass(Constructor, protoProps, staticProps) { if (protoProps) notifications_defineProperties(Constructor.prototype, protoProps); if (staticProps) notifications_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -if (external_GravAdmin_namespaceObject.config.enable_auto_updates_check === '1') { - Instance.fetch(); -} -// EXTERNAL MODULE: ./node_modules/chartist/dist/chartist.js -var chartist = __webpack_require__(69259); -var chartist_default = /*#__PURE__*/__webpack_require__.n(chartist); -;// CONCATENATED MODULE: ./app/dashboard/chart.js -function chart_typeof(obj) { "@babel/helpers - typeof"; return chart_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, chart_typeof(obj); } -function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } -function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = chart_getPrototypeOf(object); if (object === null) break; } return object; } -function chart_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) chart_setPrototypeOf(subClass, superClass); } -function chart_setPrototypeOf(o, p) { chart_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return chart_setPrototypeOf(o, p); } +var canFetchNotifications = function canFetchNotifications() { + return external_GravAdmin_namespaceObject.config.notifications.enabled; +}; -function chart_createSuper(Derived) { var hasNativeReflectConstruct = chart_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = chart_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = chart_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return chart_possibleConstructorReturn(this, result); }; } +var notificationsFilters = function notificationsFilters() { + return external_GravAdmin_namespaceObject.config.notifications.filters; +}; -function chart_possibleConstructorReturn(self, call) { if (call && (chart_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return chart_assertThisInitialized(self); } +var Notifications = /*#__PURE__*/function () { + function Notifications() { + notifications_classCallCheck(this, Notifications); + } -function chart_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + notifications_createClass(Notifications, [{ + key: "fetch", + value: // Grav.default.Notifications.fetch() + function fetch() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$filter = _ref.filter, + filter = _ref$filter === void 0 ? notificationsFilters() : _ref$filter, + _ref$refresh = _ref.refresh, + refresh = _ref$refresh === void 0 ? false : _ref$refresh; -function chart_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } + if (!canFetchNotifications()) { + return false; + } -function chart_getPrototypeOf(o) { chart_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return chart_getPrototypeOf(o); } + var feed = external_jQuery_default()('#notifications'); + var loader = feed.find('.widget-loader'); + var content = feed.find('.widget-content > ul'); + loader.find('div').remove(); + loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); + loader.show(); + content.hide(); -function chart_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var processNotifications = function processNotifications(response) { + var notifications = response.notifications; + external_jQuery_default()('#notifications').find('.widget-content > ul').empty(); -function chart_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + if (notifications) { + Object.keys(notifications).forEach(function (location) { + return Notifications.processLocation(location, notifications[location]); + }); + } + }; -function chart_createClass(Constructor, protoProps, staticProps) { if (protoProps) chart_defineProperties(Constructor.prototype, protoProps); if (staticProps) chart_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + utils_request("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getNotifications"), { + method: 'post', + body: { + refresh: refresh, + filter: filter + } + }, function (response) { + processNotifications(response); + })["catch"](function () { + var widget = external_jQuery_default()('#notifications .widget-content'); + widget.find('.widget-loader').find('div').remove(); + widget.find('.widget-loader').append('
    Failed to retrieve notifications
    ').find('.fa-spin').removeClass('fa-spin fa-refresh').addClass('fa-warning'); + }); + } + }], [{ + key: "addShowAllInFeed", + value: function addShowAllInFeed() { + external_jQuery_default()('#notifications ul').append('
  • Show all
  • '); + } + }, { + key: "showNotificationInFeed", + value: function showNotificationInFeed(notification) { + var notifications = external_jQuery_default()('#notifications').removeClass('hidden'); + var loader = notifications.find('.widget-loader').hide(); + var content = notifications.find('.widget-content > ul').show(); + loader.find('div').remove(); + loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); + content.append(notification).find('li:nth-child(n+11)').addClass('hidden'); // hide all items > 10 + if (content.find('li.hidden').length) { + Notifications.addShowAllInFeed(); + } + } + }, { + key: "showNotificationInTop", + value: function showNotificationInTop(notification) { + var container = external_jQuery_default()('.top-notifications-container'); + var dummy = external_jQuery_default()('
    ').html(notification); + container.removeClass('hidden').append(dummy.children()); + dummy.children().slideDown(150); + } + }, { + key: "showNotificationInDashboard", + value: function showNotificationInDashboard(notification) { + var container = external_jQuery_default()('.dashboard-notifications-container'); + var dummy = external_jQuery_default()('
    ').html(notification); + container.removeClass('hidden').append(dummy.children()); + dummy.children().slideDown(150); + } + }, { + key: "showNotificationInPlugins", + value: function showNotificationInPlugins(notification) { + var container = external_jQuery_default()('.plugins-notifications-container'); + var dummy = external_jQuery_default()('
    ').html(notification); + container.removeClass('hidden').append(dummy.children()); + dummy.children().slideDown(150); + } + }, { + key: "showNotificationInThemes", + value: function showNotificationInThemes(notification) { + var container = external_jQuery_default()('.themes-notifications-container'); + var dummy = external_jQuery_default()('
    ').html(notification); + container.removeClass('hidden').append(dummy.children()); + dummy.children().slideDown(150); + } + }, { + key: "processLocation", + value: function processLocation(location, notification) { + switch (location) { + case 'feed': + Notifications.showNotificationInFeed(notification); + break; + case 'top': + if (!notification.read) { + Notifications.showNotificationInTop(notification); + } + break; + case 'dashboard': + if (!notification.read) { + Notifications.showNotificationInDashboard(notification); + } - // let isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; + break; -var defaults = { - data: { - series: [100, 0] - }, - options: { - Pie: { - donut: true, - donutWidth: 10, - startAngle: 0, - total: 100, - showLabel: false, - height: 150, - // chartPadding: !isFirefox ? 10 : 25 // workaround for older versions of firefox - chartPadding: 5 - }, - Bar: { - height: 164, - chartPadding: 20, - // workaround for older versions of firefox - axisX: { - showGrid: false, - labelOffset: { - x: 0, - y: 0 - } - }, - axisY: { - offset: 15, - showLabel: true, - showGrid: true, - labelOffset: { - x: 5, - y: 5 - }, - scaleMinSpace: 25 - } - } - } -}; - -var Chart = /*#__PURE__*/function () { - function Chart(element) { - var _this = this; - - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + case 'plugins': + if (!notification.read) { + Notifications.showNotificationInPlugins(notification); + } - chart_classCallCheck(this, Chart); + break; - this.element = external_jQuery_default()(element) || []; + case 'themes': + if (!notification.read) { + Notifications.showNotificationInThemes(notification); + } - if (!this.element[0]) { - return; + break; + } } + }]); - var type = (this.element.data('chart-type') || 'pie').toLowerCase(); - this.type = type.charAt(0).toUpperCase() + type.substr(1).toLowerCase(); - options = Object.assign({}, defaults.options[this.type], options); - data = Object.assign({}, defaults.data, data); - Object.assign(this, { - options: options, - data: data - }); - this.chart = (chartist_default())[this.type](this.element.find('.ct-chart').empty()[0], this.data, this.options); - this.chart.on('created', function () { - _this.element.find('.hidden').removeClass('hidden'); // FIX: workaround for chartist issue not allowing HTML in labels anymore - // https://github.com/gionkunz/chartist-js/issues/937 + return Notifications; +}(); +var notifications = new Notifications(); +/* harmony default export */ const updates_notifications = (notifications); - _this.element.find('.ct-label').each(function (index, label) { - label = external_jQuery_default()(label); - var text = label.html().replace('<', '<').replace('>', '>'); - label.html(text); - }); +if (canFetchNotifications()) { + notifications.fetch(); + /* Hide a notification and store it hidden */ + // + + external_jQuery_default()(document).on('click', '[data-notification-action="hide-notification"]', function (event) { + var notification_id = external_jQuery_default()(event.target).parents('.hide-notification').data('notification-id'); + var url = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/notifications.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "hideNotification/notification_id").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(notification_id); + utils_request(url, { + method: 'post' + }, function () {}); + external_jQuery_default()(event.target).parents('.single-notification').hide(); + }); + external_jQuery_default()(document).on('click', '[data-notification-action="hide-notification"]', function (event) { + var target = external_jQuery_default()(event.currentTarget); + var notification = target.parent(); + notification.slideUp(function () { + return notification.remove(); }); - } + }); + external_jQuery_default()(document).on('click', '[data-notification-action="show-all-notifications"]', function (event) { + external_jQuery_default()('#notifications .show-all').hide(); + external_jQuery_default()('#notifications .hidden').removeClass('hidden'); + }); + external_jQuery_default()(document).on('click', '[data-refresh="notifications"]', function (event) { + event.preventDefault(); + notifications.fetch({ + filter: ['feed'], + refresh: true + }); + }); +} +;// CONCATENATED MODULE: ./app/updates/feed.js +function feed_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - chart_createClass(Chart, [{ - key: "updateData", - value: function updateData(data) { - Object.assign(this.data, data); - this.chart.update(this.data); - } - }]); +function feed_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - return Chart; -}(); +function feed_createClass(Constructor, protoProps, staticProps) { if (protoProps) feed_defineProperties(Constructor.prototype, protoProps); if (staticProps) feed_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -; -var UpdatesChart = /*#__PURE__*/function (_Chart) { - chart_inherits(UpdatesChart, _Chart); - var _super = chart_createSuper(UpdatesChart); - function UpdatesChart(element) { - var _this2; +var URI = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/ajax.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getNewsFeed"); - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; +var Feed = /*#__PURE__*/function () { + function Feed() { + feed_classCallCheck(this, Feed); - chart_classCallCheck(this, UpdatesChart); + this.data = null; + } - _this2 = _super.call(this, element, options, data); + feed_createClass(Feed, [{ + key: "fetch", + value: function fetch() { + var _this = this; - _this2.chart.on('draw', function (data) { - return _this2.draw(data); - }); + var refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; + utils_request(URI, { + method: 'post', + body: { + refresh: refresh + } + }, function (response) { + _this.data = response; + callback(response); + }); + } + }, { + key: "refresh", + value: function refresh() { + var _refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - Instance.on('fetched', function (response) { - if (!response.payload) { + var feed = external_jQuery_default()('#news-feed .widget-content'); + + if (!feed.length) { return; } - var payload = response.payload.grav; - var missing = (response.payload.resources.total + (payload.isUpdatable ? 1 : 0)) * 100 / (response.payload.installed + (payload.isUpdatable ? 1 : 0)); - var updated = 100 - missing; - - _this2.updateData({ - series: [updated, missing] - }); + var loader = feed.find('.widget-loader'); + loader.find('div').remove(); + loader.find('.fa-warning').removeClass('fa-warning').addClass('fa-refresh fa-spin'); + loader.show(); + feed.find('> ul').hide(); - if (response.payload.resources.total) { - updates_Instance.maintenance('show'); + if (!this.data || this.data.error || _refresh) { + this.fetch(_refresh, this.updateContent.bind(this)); + } else { + this.updateContent(); } - }); - return _this2; - } + } + }, { + key: "updateContent", + value: function updateContent() { + var feed = external_jQuery_default()('#news-feed .widget-content'); - chart_createClass(UpdatesChart, [{ - key: "draw", - value: function draw(data) { - if (data.index) { + if (!feed.length) { return; } - var notice = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN[data.value === 100 ? 'FULLY_UPDATED' : 'UPDATES_AVAILABLE']; - this.element.find('.numeric span').text("".concat(Math.round(data.value), "%")); - this.element.find('.js__updates-available-description').html(notice); - this.element.find('.hidden').removeClass('hidden'); - } - }, { - key: "updateData", - value: function updateData(data) { - _get(chart_getPrototypeOf(UpdatesChart.prototype), "updateData", this).call(this, data); // missing updates + var loader = feed.find('.widget-loader').hide(); + var content = feed.find('> ul').empty().show(); + if (this.data.error || this.data.status === 'error') { + loader.show().find('div').remove(); + loader.find('.fa-refresh').removeClass('fa-refresh fa-spin').addClass('fa-warning'); + loader.append("
    ".concat(this.data.error ? this.data.error.message : this.data.message || 'Unable to download news feed', "
    ")); + return; + } - if (this.data.series[0] < 100) { - this.element.closest('#updates').find('[data-update-packages]').fadeIn(); + if (this.data && this.data.feed_data) { + content.append(this.data.feed_data); } } }]); - return UpdatesChart; -}(Chart); -var charts = {}; -external_jQuery_default()('[data-chart-name]').each(function () { - var element = external_jQuery_default()(this); - var name = element.data('chart-name') || ''; - var options = element.data('chart-options') || {}; - var data = element.data('chart-data') || {}; + return Feed; +}(); - if (name === 'updates') { - charts[name] = new UpdatesChart(element, options, data); - } else { - charts[name] = new Chart(element, options, data); - } +var feed = new Feed(); +external_jQuery_default()(document).ready(function () { + return feed.refresh(); }); -var Instances = charts; -;// CONCATENATED MODULE: ./app/dashboard/cache.js -function cache_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function cache_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +external_jQuery_default()(document).on('click', '[data-refresh="feed"]', function (event) { + event.preventDefault(); + feed.refresh(true); +}); +/* harmony default export */ const updates_feed = (feed); +;// CONCATENATED MODULE: ./app/updates/check.js -function cache_createClass(Constructor, protoProps, staticProps) { if (protoProps) cache_defineProperties(Constructor.prototype, protoProps); if (staticProps) cache_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + // Check for updates trigger +external_jQuery_default()('[data-gpm-checkupdates]').on('click', function () { + var element = external_jQuery_default()(this); + element.find('i').addClass('fa-spin'); + gpm_Instance.fetch(function (response) { + element.find('i').removeClass('fa-spin'); + var payload = response.payload; + if (!payload) { + return; + } -var getUrl = function getUrl() { - var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + if (!payload.grav.isUpdatable && !payload.resources.total) { + utils_toastr.success(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.EVERYTHING_UP_TO_DATE); + } else { + var grav = payload.grav.isUpdatable ? 'Grav v' + payload.grav.available : ''; + var resources = payload.resources.total ? payload.resources.total + ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATES_ARE_AVAILABLE : ''; - if (type) { - type = "cleartype:".concat(type, "/"); - } + if (!resources) { + grav += ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_AVAILABLE_FOR_UPDATE; + } - return "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/cache.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "clearCache/").concat(type, "admin-nonce").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(external_GravAdmin_namespaceObject.config.admin_nonce); -}; - -var Cache = /*#__PURE__*/function () { - function Cache() { - var _this = this; - - cache_classCallCheck(this, Cache); - - this.element = external_jQuery_default()('[data-clear-cache]'); - external_jQuery_default()('body').on('click', '[data-clear-cache]', function (event) { - return _this.clear(event, event.target); - }); - } - - cache_createClass(Cache, [{ - key: "clear", - value: function clear(event, element) { - var _this2 = this; - - var type = ''; - - if (event && event.preventDefault) { - event.preventDefault(); - } - - if (typeof event === 'string') { - type = event; - } - - element = element ? external_jQuery_default()(element) : external_jQuery_default()("[data-clear-cache-type=\"".concat(type, "\"]")); - type = type || external_jQuery_default()(element).data('clear-cache-type') || ''; - var url = element.data('clearCache') || getUrl(type); - this.disable(); - utils_request(url, function () { - return _this2.enable(); - }); - } - }, { - key: "enable", - value: function enable() { - this.element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin fa-retweet').addClass('fa-retweet'); - } - }, { - key: "disable", - value: function disable() { - this.element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-retweet').addClass('fa-refresh fa-spin'); + utils_toastr.info(grav + (grav && resources ? ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.AND + ' ' : '') + resources); } - }]); - - return Cache; -}(); - - -var cache_Instance = new Cache(); + }, true); +}); +;// CONCATENATED MODULE: ./app/utils/formatbytes.js +var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; +function formatBytes(bytes, decimals) { + if (bytes === 0) return '0 Byte'; + var k = 1000; + var value = Math.floor(Math.log(bytes) / Math.log(k)); + var decimal = decimals + 1 || 3; + return (bytes / Math.pow(k, value)).toPrecision(decimal) + ' ' + sizes[value]; +} +;// CONCATENATED MODULE: ./app/updates/update.js -;// CONCATENATED MODULE: ./app/dashboard/backup.js + // Dashboard update and Grav update -external_jQuery_default()('[data-backup][data-ajax*="backup/"]').on('click', function () { - var element = external_jQuery_default()(this); - var url = element.data('ajax'); - var inDropdown = element.closest('.dropdown-menu'); - (inDropdown.length ? inDropdown : element).closest('.button-group').find('> button:first').attr('disabled', 'disabled').find('> .fa').removeClass('fa-life-ring').addClass('fa-spin fa-refresh'); - utils_request(url, function - /* response */ - () { - if (Instances && Instances.backups) { - Instances.backups.updateData({ - series: [0, 100] - }); - Instances.backups.element.find('.numeric').html("0 ".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DAYS.toLowerCase(), "")); +external_jQuery_default()(document).on('click.remodal', '[data-remodal-id="update-grav"] [data-remodal-action="confirm"]', function () { + var element = external_jQuery_default()('#grav-update-button'); + element.html("".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, " ").concat(formatBytes(updates_Instance.payload.grav.assets["grav-update"].size), "..")); + element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin'); + utils_request(updates_Instance.updateURL, function (response) { + if (response.type === 'updategrav') { + external_jQuery_default()('[data-gpm-grav]').remove(); + external_jQuery_default()('#footer .grav-version').html(response.version); } - (inDropdown.length ? inDropdown : element).closest('.button-group').find('> button:first').removeAttr('disabled').find('> .fa').removeClass('fa-spin fa-refresh').addClass('fa-life-ring'); - }); -}); -external_jQuery_default()('[data-backup][data-ajax*="backupDelete"]').on('click', function () { - var element = external_jQuery_default()(this); - var url = element.data('ajax'); - var tr = element.closest('tr'); - tr.addClass('deleting'); - utils_request(url, function (response) { - if (response.status === 'success') { - tr.remove(); - } else { - tr.removeClass('deleting'); - } + element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download'); }); }); -;// CONCATENATED MODULE: ./app/dashboard/index.js +;// CONCATENATED MODULE: ./app/updates/channel-switcher.js +var switcher = external_jQuery_default()('input[type="radio"][name="channel-switch"]'); -/* harmony default export */ const dashboard = ({ - Chart: { - Chart: Chart, - UpdatesChart: UpdatesChart, - Instances: Instances - }, - Cache: cache_Instance -}); -// EXTERNAL MODULE: ./node_modules/sortablejs/modular/sortable.esm.js -var sortable_esm = __webpack_require__(51474); -// EXTERNAL MODULE: ./node_modules/debounce/index.js -var debounce = __webpack_require__(20296); -var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce); -// EXTERNAL MODULE: ./app/utils/storage.js -var storage = __webpack_require__(31619); -;// CONCATENATED MODULE: ./app/pages/tree.js -function tree_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +if (switcher) { + switcher.on('change', function (event) { + var radio = external_jQuery_default()(event.target); + var url = "".concat(radio.parent('[data-url]').data('url')); + utils_request(url, { + method: 'post', + body: { + task: 'gpmRelease', + release: radio.val() + } + }, function (response) { + if (response.reload) { + __webpack_require__.g.location.reload(); + } + }); + }); +} +;// CONCATENATED MODULE: ./app/updates/index.js +function updates_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function tree_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function updates_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -function tree_createClass(Constructor, protoProps, staticProps) { if (protoProps) tree_defineProperties(Constructor.prototype, protoProps); if (staticProps) tree_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function updates_createClass(Constructor, protoProps, staticProps) { if (protoProps) updates_defineProperties(Constructor.prototype, protoProps); if (staticProps) updates_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -var sessionKey = 'grav:admin:pages'; -if (!sessionStorage.getItem(sessionKey)) { - sessionStorage.setItem(sessionKey, '{}'); -} -var PagesTree = /*#__PURE__*/function () { - function PagesTree(query) { - var _this = this; - var elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - tree_classCallCheck(this, PagesTree); - this.query = query; - this.elements = external_jQuery_default()(elements !== undefined ? elements : this.query); - this.session = JSON.parse(sessionStorage.getItem(sessionKey) || '{}'); - if (!this.elements.length) { - return; - } - this.restore(); - this.elements.find('.page-icon').on('click', function (event) { - return _this.toggle(event.target); - }); - this.elements.data('tree_init', 1); - external_jQuery_default()('[data-page-toggleall]').on('click', function (event) { - var element = external_jQuery_default()(event.target).closest('[data-page-toggleall]'); - var action = element.data('page-toggleall'); - _this[action](); - }); - } +var Updates = /*#__PURE__*/function () { + function Updates() { + var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - tree_createClass(PagesTree, [{ - key: "reload", - value: function reload() { - var elements = external_jQuery_default()(this.query).filter(function (index, element) { - return !external_jQuery_default()(element).data('tree_init'); - }); + updates_classCallCheck(this, Updates); - if (!elements.length) { - return; - } + this.setPayload(payload); + this.task = "task".concat(external_GravAdmin_namespaceObject.config.param_sep); + this.updateURL = ''; + } - this.constructor(this.query, elements); + updates_createClass(Updates, [{ + key: "setPayload", + value: function setPayload() { + var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.payload = payload; + return this; } }, { - key: "toggle", - value: function toggle(elements) { - var _this2 = this; + key: "fetch", + value: function fetch() { + var _this = this; - var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + gpm_Instance.fetch(function (response) { + return _this.setPayload(response); + }, force); + return this; + } + }, { + key: "maintenance", + value: function maintenance() { + var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'hide'; + var element = external_jQuery_default()('#updates [data-update-packages]'); + element[mode === 'show' ? 'fadeIn' : 'fadeOut'](); - if (typeof elements === 'string') { - elements = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")).find('[data-toggle="children"]'); + if (mode === 'hide') { + external_jQuery_default()('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove(); } - elements = external_jQuery_default()(elements || this.elements); - elements.each(function (index, element) { - element = external_jQuery_default()(element); - - var state = _this2.getState(element.closest('[data-toggle="children"]')); - - _this2[state.isOpen ? 'collapse' : 'expand'](state.id, dontStore); - }); + return this; } }, { - key: "collapse", - value: function collapse(elements) { - var _this3 = this; + key: "grav", + value: function grav() { + var payload = this.payload.grav; - var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (payload && payload.isUpdatable) { + var task = this.task; + var bar = ''; - if (typeof elements === 'string') { - elements = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")).find('[data-toggle="children"]'); - } + if (!payload.isSymlink) { + this.updateURL = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json/").concat(task, "updategrav/admin-nonce").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(external_GravAdmin_namespaceObject.config.admin_nonce); + bar += ""); + } else { + bar += ""); + } - elements = external_jQuery_default()(elements || this.elements); - elements.each(function (index, element) { - element = external_jQuery_default()(element); + bar += "\n Grav v".concat(payload.available, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, "! (").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.CURRENT, " v").concat(payload.version, ")\n "); + var element = external_jQuery_default()('[data-gpm-grav]').removeClass('hidden'); - var state = _this3.getState(element); + if (element.is(':empty')) { + element.hide(); + } - if (state.isOpen) { - state.children.hide(); - state.icon.removeClass('children-open').addClass('children-closed'); - - if (!dontStore) { - delete _this3.session[state.id]; - } - } - }); - - if (!dontStore) { - this.save(); + element.addClass('grav').html("".concat(bar)).slideDown(150, function () { + var c = 5; + var x = setInterval(function () { + c -= 1; + element.find('.pointer-events-none .cnt-down').text('(' + c + 's)'); + }, 1000); + setTimeout(function () { + clearInterval(x); + element.find('.pointer-events-none .cnt-down').remove(); + element.find('.pointer-events-none').removeClass('pointer-events-none'); + }, 5000); + }).parent('#messages').addClass('default-box-shadow'); } + + return this; } }, { - key: "expand", - value: function expand(elements) { - var _this4 = this; - - var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (typeof elements === 'string') { - var element = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")); - var parents = element.parents('[data-nav-id]'); // loop back through parents, we don't want to expand an hidden child + key: "resources", + value: function resources() { + if (!this.payload || !this.payload.resources || !this.payload.resources.total) { + return this.maintenance('hide'); + } - if (parents.length) { - parents = parents.find('[data-toggle="children"]:first'); - parents = parents.add(element.find('[data-toggle="children"]:first')); - return this.expand(parents, dontStore); - } + var is_current_package_latest = true; + var map = ['plugins', 'themes']; + var singles = ['plugin', 'theme']; + var _this$payload$resourc = this.payload.resources, + plugins = _this$payload$resourc.plugins, + themes = _this$payload$resourc.themes; - elements = element.find('[data-toggle="children"]:first'); + if (!this.payload.resources.total) { + return this; } - elements = external_jQuery_default()(elements || this.elements); - elements.each(function (index, element) { - element = external_jQuery_default()(element); + [plugins, themes].forEach(function (resources, index) { + if (!resources || Array.isArray(resources)) { + return; + } - var state = _this4.getState(element); + var length = Object.keys(resources).length; + var type = map[index]; // sidebar - if (!state.isOpen) { - state.children.show(); - state.icon.removeClass('children-closed').addClass('children-open'); + external_jQuery_default()("#admin-menu a[href$=\"/".concat(map[index], "\"]")).find('.badges').addClass('with-updates').find('.badge.updates').text(length); + var type_translation = ''; // update all - if (!dontStore) { - _this4.session[state.id] = 1; - } + if (type === 'plugins') { + type_translation = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.PLUGINS; + } else { + type_translation = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.THEMES; } - }); - - if (!dontStore) { - this.save(); - } - } - }, { - key: "restore", - value: function restore() { - var _this5 = this; - this.collapse(null, true); - Object.keys(this.session).forEach(function (key) { - _this5.expand(key, 'no-store'); - }); - } - }, { - key: "save", - value: function save() { - return sessionStorage.setItem(sessionKey, JSON.stringify(this.session)); - } - }, { - key: "getState", - value: function getState(element) { - element = external_jQuery_default()(element); - return { - id: element.closest('[data-nav-id]').data('nav-id'), - children: element.closest('li.page-item').find('ul:first'), - icon: element.find('.page-icon'), + var updateAll = external_jQuery_default()(".grav-update.".concat(type)); + updateAll.css('display', 'block').html("\n

    \n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.ALL, " ").concat(type_translation, "\n \n ").concat(length, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_YOUR, " ").concat(type_translation.toLowerCase(), " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, "\n

    \n ")); + var existing_slugs = external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs') || ''; - get isOpen() { - return this.icon.hasClass('children-open'); + if (existing_slugs) { + existing_slugs = existing_slugs.split(','); + } else { + existing_slugs = []; } - }; - } - }]); + var slugs = unique_default()(existing_slugs.concat(Object.keys(resources))).join(); + external_jQuery_default()('[data-update-packages]').attr('data-packages-slugs', "".concat(slugs)); + Object.keys(resources).forEach(function (item) { + // listing page + var container = external_jQuery_default()("[data-gpm-".concat(singles[index], "=\"").concat(item, "\"]")); + var element = container.find('.gpm-name'); + var url = element.find('a'); + var content_wrapper = container.parents('.content-wrapper'); - return PagesTree; -}(); + if (type === 'plugins' && !element.find('.badge.update').length) { + element.append("").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, "!")); + content_wrapper.addClass('has-updates'); + } else if (type === 'themes') { + element.append("")); + content_wrapper.addClass('has-updates'); + } // details page -var tree_Instance = new PagesTree('[data-toggle="children"]'); + if (container.length) { + var details = external_jQuery_default()(".grav-update.".concat(singles[index])); -// EXTERNAL MODULE: ./node_modules/selectize/dist/js/selectize.js -var selectize = __webpack_require__(25703); -var selectize_default = /*#__PURE__*/__webpack_require__.n(selectize); -;// CONCATENATED MODULE: ./app/utils/selectize-required-fix.js -/** - * This is a plugin to override the `.refreshValidityState` method of - * the Selectize library (https://selectize.github.io/selectize.js/). - * The library is not maintained anymore (as of 2017-09-13) and contains - * a bug which causes Microsoft Edge to not work with selectized [required] - * form fields. This plugin should be removed if - * https://github.com/selectize/selectize.js/pull/1320 is ever merged - * and a new version of Selectize gets released. - */ + if (details.length) { + var releaseType = resources[item].type === 'testing' ? 'test release' : ''; + details.html("\n

    \n ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATE, " ").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), "\n \n v").concat(resources[item].available, " ").concat(releaseType, " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.OF_THIS, " ").concat(singles[index], " ").concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, "!\n

    \n ")).css('display', 'block'); + is_current_package_latest = false; + } + } + }); + external_jQuery_default()('[data-update-packages]').removeClass('hidden'); + }); + external_jQuery_default()('.content-wrapper').addClass('updates-checked'); -selectize_default().define('required-fix', function (options) { - var _this = this; + if (!is_current_package_latest) { + external_jQuery_default()('.warning-reinstall-not-latest-release').removeClass('hidden'); + } + } + }]); - this.refreshValidityState = function () { - if (!_this.isRequired) return false; - var invalid = !_this.items.length; - _this.isInvalid = invalid; + return Updates; +}(); - if (invalid) { - _this.$control_input.attr('required', ''); - _this.$input.removeAttr('required'); - } else { - _this.$control_input.removeAttr('required'); +var updates_Instance = new Updates(); + // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch - _this.$input.attr('required'); - } - }; +gpm_Instance.on('fetched', function (response, raw) { + updates_Instance.setPayload(response.payload || {}); + updates_Instance.grav().resources(); }); -;// CONCATENATED MODULE: ./app/pages/filter.js -function filter_typeof(obj) { "@babel/helpers - typeof"; return filter_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, filter_typeof(obj); } -function filter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +if (external_GravAdmin_namespaceObject.config.enable_auto_updates_check === '1') { + gpm_Instance.fetch(); +} +// EXTERNAL MODULE: ./node_modules/chartist/dist/chartist.js +var chartist = __webpack_require__(69259); +var chartist_default = /*#__PURE__*/__webpack_require__.n(chartist); +;// CONCATENATED MODULE: ./app/dashboard/chart.js +function chart_typeof(obj) { "@babel/helpers - typeof"; return chart_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, chart_typeof(obj); } -function filter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } +function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } -function filter_createClass(Constructor, protoProps, staticProps) { if (protoProps) filter_defineProperties(Constructor.prototype, protoProps); if (staticProps) filter_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = chart_getPrototypeOf(object); if (object === null) break; } return object; } +function chart_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) chart_setPrototypeOf(subClass, superClass); } +function chart_setPrototypeOf(o, p) { chart_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return chart_setPrototypeOf(o, p); } +function chart_createSuper(Derived) { var hasNativeReflectConstruct = chart_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = chart_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = chart_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return chart_possibleConstructorReturn(this, result); }; } +function chart_possibleConstructorReturn(self, call) { if (call && (chart_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return chart_assertThisInitialized(self); } +function chart_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } +function chart_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } +function chart_getPrototypeOf(o) { chart_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return chart_getPrototypeOf(o); } +function chart_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -/* @formatter:off */ +function chart_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -/* eslint-disable */ +function chart_createClass(Constructor, protoProps, staticProps) { if (protoProps) chart_defineProperties(Constructor.prototype, protoProps); if (staticProps) chart_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -var options = [{ - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.MODULE, - key: 'Module', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.VISIBLE, - key: 'Visible', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.ROUTABLE, - key: 'Routable', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.PUBLISHED, - key: 'Published', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_MODULE, - key: 'NonModule', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_VISIBLE, - key: 'NonVisible', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_ROUTABLE, - key: 'NonRoutable', - cat: 'mode' -}, { - flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_PUBLISHED, - key: 'NonPublished', - cat: 'mode' -}]; -/* @formatter:on */ -/* eslint-enable */ -var PagesFilter = /*#__PURE__*/function () { - function PagesFilter(filters, search) { - var _this = this; - filter_classCallCheck(this, PagesFilter); - this.filters = external_jQuery_default()(filters); - this.search = external_jQuery_default()(search); - this.options = options; - this.tree = tree_Instance; - var storage = JSON.parse(localStorage.getItem('grav:admin:pages:filter') || '{}'); + // let isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - if (!this.filters.length || !this.search.length) { - return; +var defaults = { + data: { + series: [100, 0] + }, + options: { + Pie: { + donut: true, + donutWidth: 10, + startAngle: 0, + total: 100, + showLabel: false, + height: 150, + // chartPadding: !isFirefox ? 10 : 25 // workaround for older versions of firefox + chartPadding: 5 + }, + Bar: { + height: 164, + chartPadding: 20, + // workaround for older versions of firefox + axisX: { + showGrid: false, + labelOffset: { + x: 0, + y: 0 + } + }, + axisY: { + offset: 15, + showLabel: true, + showGrid: true, + labelOffset: { + x: 5, + y: 5 + }, + scaleMinSpace: 25 + } } + } +}; - this.labels = this.filters.data('filter-labels'); - this.search.on('input', debounce_default()(function () { - return _this.filter(); - }, 250)); - this.filters.on('change', function () { - return _this.filter(); - }); // restore state +var Chart = /*#__PURE__*/function () { + function Chart(element) { + var _this = this; - if (storage.flags || storage.query) { - this.setValues(storage); - this.filter(); + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + chart_classCallCheck(this, Chart); + + this.element = external_jQuery_default()(element) || []; + + if (!this.element[0]) { + return; } - this._initSelectize(); + var type = (this.element.data('chart-type') || 'pie').toLowerCase(); + this.type = type.charAt(0).toUpperCase() + type.substr(1).toLowerCase(); + options = Object.assign({}, defaults.options[this.type], options); + data = Object.assign({}, defaults.data, data); + Object.assign(this, { + options: options, + data: data + }); + this.chart = (chartist_default())[this.type](this.element.find('.ct-chart').empty()[0], this.data, this.options); + this.chart.on('created', function () { + _this.element.find('.hidden').removeClass('hidden'); // FIX: workaround for chartist issue not allowing HTML in labels anymore + // https://github.com/gionkunz/chartist-js/issues/937 + + + _this.element.find('.ct-label').each(function (index, label) { + label = external_jQuery_default()(label); + var text = label.html().replace('<', '<').replace('>', '>'); + label.html(text); + }); + }); } - filter_createClass(PagesFilter, [{ - key: "filter", - value: function filter(value) { - var _this2 = this; + chart_createClass(Chart, [{ + key: "updateData", + value: function updateData(data) { + Object.assign(this.data, data); + this.chart.update(this.data); + } + }]); - var data = { - flags: '', - query: '' - }; + return Chart; +}(); - if (filter_typeof(value) === 'object') { - Object.assign(data, value); - } - if (typeof value === 'string') { - data.query = value; - } +; +var UpdatesChart = /*#__PURE__*/function (_Chart) { + chart_inherits(UpdatesChart, _Chart); - if (typeof value === 'undefined') { - data.flags = this.filters.val(); - data.query = this.search.val(); - } + var _super = chart_createSuper(UpdatesChart); - if (!Object.keys(data).filter(function (key) { - return data[key] !== ''; - }).length) { - this.resetValues(); - return; - } + function UpdatesChart(element) { + var _this2; - data.flags = data.flags.replace(/(\s{1,})?,(\s{1,})?/g, ','); - this.setValues({ - flags: data.flags, - query: data.query - }, 'silent'); - utils_request("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/pages-filter.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "filterPages"), { - method: 'post', - body: data - }, function (response) { - _this2.refreshDOM(response); - }); - } - }, { - key: "refreshDOM", - value: function refreshDOM(response) { - var _this3 = this; + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var items = external_jQuery_default()('[data-nav-id]'); + chart_classCallCheck(this, UpdatesChart); - if (!response) { - items.removeClass('search-match').show(); - this.tree.restore(); + _this2 = _super.call(this, element, options, data); + + _this2.chart.on('draw', function (data) { + return _this2.draw(data); + }); + + gpm_Instance.on('fetched', function (response) { + if (!response.payload) { return; } - items.removeClass('search-match').hide(); - response.results.forEach(function (page) { - var match = items.filter("[data-nav-id=\"".concat(page, "\"]")).addClass('search-match').show(); - match.parents('[data-nav-id]').addClass('search-match').show(); + var payload = response.payload.grav; + var missing = (response.payload.resources.total + (payload.isUpdatable ? 1 : 0)) * 100 / (response.payload.installed + (payload.isUpdatable ? 1 : 0)); + var updated = 100 - missing; - _this3.tree.expand(page, 'no-store'); + _this2.updateData({ + series: [updated, missing] }); - } - }, { - key: "setValues", - value: function setValues(_ref, silent) { - var _ref$flags = _ref.flags, - flags = _ref$flags === void 0 ? '' : _ref$flags, - _ref$query = _ref.query, - query = _ref$query === void 0 ? '' : _ref$query; - var flagsArray = flags.replace(/(\s{1,})?,(\s{1,})?/g, ',').split(','); - if (this.filters.val() !== flags) { - var selectize = this.filters.data('selectize'); - this.filters[selectize ? 'setValue' : 'val'](flagsArray, silent); + if (response.payload.resources.total) { + updates_Instance.maintenance('show'); } + }); + return _this2; + } - if (this.search.val() !== query) { - this.search.val(query); + chart_createClass(UpdatesChart, [{ + key: "draw", + value: function draw(data) { + if (data.index) { + return; } - localStorage.setItem('grav:admin:pages:filter', JSON.stringify({ - flags: flags, - query: query - })); - } - }, { - key: "resetValues", - value: function resetValues() { - this.setValues('', 'silent'); - this.refreshDOM(); + var notice = external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN[data.value === 100 ? 'FULLY_UPDATED' : 'UPDATES_AVAILABLE']; + this.element.find('.numeric span').text("".concat(Math.round(data.value), "%")); + this.element.find('.js__updates-available-description').html(notice); + this.element.find('.hidden').removeClass('hidden'); } }, { - key: "_initSelectize", - value: function _initSelectize() { - var _this4 = this; + key: "updateData", + value: function updateData(data) { + _get(chart_getPrototypeOf(UpdatesChart.prototype), "updateData", this).call(this, data); // missing updates - var extras = { - type: this.filters.data('filter-types') || {}, - access: this.filters.data('filter-access-levels') || {} - }; - Object.keys(extras).forEach(function (cat) { - Object.keys(extras[cat]).forEach(function (key) { - _this4.options.push({ - cat: cat, - key: key, - flag: extras[cat][key] - }); - }); - }); - this.filters.selectize({ - maxItems: null, - valueField: 'key', - labelField: 'flag', - searchField: ['flag', 'key'], - options: this.options, - optgroups: this.labels, - optgroupField: 'cat', - optgroupLabelField: 'name', - optgroupValueField: 'id', - optgroupOrder: this.labels.map(function (item) { - return item.id; - }), - plugins: ['optgroup_columns', 'required-fix'] - }); + + if (this.data.series[0] < 100) { + this.element.closest('#updates').find('[data-update-packages]').fadeIn(); + } } }]); - return PagesFilter; -}(); + return UpdatesChart; +}(Chart); +var charts = {}; +external_jQuery_default()('[data-chart-name]').each(function () { + var element = external_jQuery_default()(this); + var name = element.data('chart-name') || ''; + var options = element.data('chart-options') || {}; + var data = element.data('chart-data') || {}; + if (name === 'updates') { + charts[name] = new UpdatesChart(element, options, data); + } else { + charts[name] = new Chart(element, options, data); + } +}); +var Instances = charts; +;// CONCATENATED MODULE: ./app/dashboard/cache.js +function cache_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var filter_Instance = new PagesFilter('input[name="page-filter"]', 'input[name="page-search"]'); +function cache_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -// EXTERNAL MODULE: ./node_modules/speakingurl/index.js -var speakingurl = __webpack_require__(989); -var speakingurl_default = /*#__PURE__*/__webpack_require__.n(speakingurl); -;// CONCATENATED MODULE: ./app/utils/jquery-utils.js -var _this = undefined; +function cache_createClass(Constructor, protoProps, staticProps) { if (protoProps) cache_defineProperties(Constructor.prototype, protoProps); if (staticProps) cache_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - // jQuery no parents filter -(external_jQuery_default()).expr[":"].noparents = external_jQuery_default().expr.createPseudo(function (text) { - return function (element) { - return external_jQuery_default()(element).parents(text).length < 1; - }; -}); // Slugify -// CommonJS and ES6 version of https://github.com/madflow/jquery-slugify -(external_jQuery_default()).fn.slugify = function (source, options) { - return _this.each(function (element) { - var target = external_jQuery_default()(element); - var source = external_jQuery_default()(source); - target.on('keyup change', function () { - target.data('locked', target.val() !== '' && target.val() !== undefined); - }); - source.on('keyup change', function () { - if (target.data('locked') === true) { - return true; - } - var isInput = target.is('input') || target.is('textarea'); - target[isInput ? 'val' : 'text'](external_jQuery_default().slugify(source.val(), options)); - }); - }); -}; // Static method. +var getUrl = function getUrl() { + var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + if (type) { + type = "cleartype:".concat(type, "/"); + } -(external_jQuery_default()).slugify = function (sourceString, options) { - options = external_jQuery_default().extend({}, (external_jQuery_default()).slugify.options, options); - options.lang = options.lang || external_jQuery_default()('html').prop('lang'); + return "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/cache.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "clearCache/").concat(type, "admin-nonce").concat(external_GravAdmin_namespaceObject.config.param_sep).concat(external_GravAdmin_namespaceObject.config.admin_nonce); +}; - if (typeof options.preSlug === 'function') { - sourceString = options.preSlug(sourceString); - } +var Cache = /*#__PURE__*/function () { + function Cache() { + var _this = this; - sourceString = options.slugFunc(sourceString, options); + cache_classCallCheck(this, Cache); - if (typeof options.postSlug === 'function') { - sourceString = options.postSlug(sourceString); + this.element = external_jQuery_default()('[data-clear-cache]'); + external_jQuery_default()('body').on('click', '[data-clear-cache]', function (event) { + return _this.clear(event, event.target); + }); } - return sourceString; -}; // Default plugin options + cache_createClass(Cache, [{ + key: "clear", + value: function clear(event, element) { + var _this2 = this; + var type = ''; -(external_jQuery_default()).slugify.options = { - preSlug: null, - postSlug: null, - slugFunc: function slugFunc(input, opts) { - return speakingurl_default()(input, opts); - } -}; -;// CONCATENATED MODULE: ./app/pages/page/add.js + if (event && event.preventDefault) { + event.preventDefault(); + } + if (typeof event === 'string') { + type = event; + } + element = element ? external_jQuery_default()(element) : external_jQuery_default()("[data-clear-cache-type=\"".concat(type, "\"]")); + type = type || external_jQuery_default()(element).data('clear-cache-type') || ''; + var url = element.data('clearCache') || getUrl(type); + this.disable(); + utils_request(url, function () { + return _this2.enable(); + }); + } + }, { + key: "enable", + value: function enable() { + this.element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin fa-retweet').addClass('fa-retweet'); + } + }, { + key: "disable", + value: function disable() { + this.element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-retweet').addClass('fa-refresh fa-spin'); + } + }]); + return Cache; +}(); -var custom = false; -var folder = external_jQuery_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]"]'); -var title = external_jQuery_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]"]'); -var getFields = function getFields(type, target) { - target = external_jQuery_default()(target); - var query = "[data-remodal-id=\"".concat(target.closest('[data-remodal-id]').data('remodal-id'), "\"]"); - return { - title: type === 'title' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[title]\"]")), - folder: type === 'folder' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[folder]\"]")) - }; -}; +var cache_Instance = new Cache(); -title.on('input focus blur', function (event) { - if (custom) { - return true; - } +;// CONCATENATED MODULE: ./app/dashboard/backup.js - var elements = getFields('title', event.currentTarget); - var slug = external_jQuery_default().slugify(elements.title.val(), { - custom: { - "'": '', - '‘': '', - '’': '' - } - }); - elements.folder.val(slug); -}); -folder.on('input', function (event) { - var elements = getFields('folder', event.currentTarget); - var input = elements.folder.get(0); - var value = elements.folder.val(); - var selection = { - start: input.selectionStart, - end: input.selectionEnd - }; - value = value.toLowerCase().replace(/\s/g, '-').replace(/[^a-z0-9_\-]/g, ''); - elements.folder.val(value); - custom = !!value; // restore cursor position - input.setSelectionRange(selection.start, selection.end); -}); -folder.on('focus blur', function (event) { - getFields('title').title.trigger('input'); -}); -external_jQuery_default()(document).on('change', '[name="data[route]"]', function (event) { - var rawroute = external_jQuery_default()(event.currentTarget).val(); - var pageTemplate = external_jQuery_default()('[name="data[name]"]'); - var URI = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/ajax.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getChildTypes"); - if (pageTemplate.length === 0) { - return; - } - utils_request(URI, { - method: 'post', - body: { - rawroute: rawroute +external_jQuery_default()('[data-backup][data-ajax*="backup/"]').on('click', function () { + var element = external_jQuery_default()(this); + var url = element.data('ajax'); + var inDropdown = element.closest('.dropdown-menu'); + (inDropdown.length ? inDropdown : element).closest('.button-group').find('> button:first').attr('disabled', 'disabled').find('> .fa').removeClass('fa-life-ring').addClass('fa-spin fa-refresh'); + utils_request(url, function + /* response */ + () { + if (Instances && Instances.backups) { + Instances.backups.updateData({ + series: [0, 100] + }); + Instances.backups.element.find('.numeric').html("0 ".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DAYS.toLowerCase(), "")); } - }, function (response) { - var type = response.child_type; - if (type !== '' && type !== 'default') { - pageTemplate.val(type); - pageTemplate.data('selectize').setValue(type); + (inDropdown.length ? inDropdown : element).closest('.button-group').find('> button:first').removeAttr('disabled').find('> .fa').removeClass('fa-spin fa-refresh').addClass('fa-life-ring'); + }); +}); +external_jQuery_default()('[data-backup][data-ajax*="backupDelete"]').on('click', function () { + var element = external_jQuery_default()(this); + var url = element.data('ajax'); + var tr = element.closest('tr'); + tr.addClass('deleting'); + utils_request(url, function (response) { + if (response.status === 'success') { + tr.remove(); + } else { + tr.removeClass('deleting'); } }); }); -;// CONCATENATED MODULE: ./app/pages/page/move.js +;// CONCATENATED MODULE: ./app/dashboard/index.js -external_jQuery_default()(document).on('click', '[data-page-move] button[name="task"][value="save"]', function (event) { - /* let route = $('form#blueprints:first select[name="data[route]"]'); - let moveTo = $('[data-page-move] select').val(); - if (route.length && route.val() !== moveTo) { - let selectize = route.data('selectize'); - route.val(moveTo); - if (selectize) selectize.setValue(moveTo); - }*/ - var modal = external_jQuery_default()(event.currentTarget).closest('[data-remodal-id]'); - var parents = modal.data('parents') || {}; - var finder = parents.finder; - if (!parents || !finder) { - return true; - } - var field = parents.field; - var parentLabel = parents.parentLabel; - var parentName = parents.parentName; - var selection = finder.findLastActive().item[0]; - var value = selection._item[finder.config.valueKey]; - var name = selection._item[finder.config.labelKey]; - field.val(value); - parentLabel.text(value); - parentName.text(name); - finder.config.defaultPath = value; - external_jQuery_default()('
    ').css({ - backgroundColor: 'rgba(255, 255, 255, 0.1)', - position: 'fixed', - top: 0, - left: 0, - width: '100vw', - height: '100vh', - zIndex: 15000 - }).appendTo(external_jQuery_default()('body')); +/* harmony default export */ const dashboard = ({ + Chart: { + Chart: Chart, + UpdatesChart: UpdatesChart, + Instances: Instances + }, + Cache: cache_Instance }); -/* -$(document).on('click', '[data-remodal-id="parents"] [data-parents-select]', (event) => { - const modal = $(event.currentTarget).closest('[data-remodal-id]'); - const parents = modal.data('parents'); - const finder = parents.finder; - const field = parents.field; - const parentLabel = parents.parentLabel; - const parentName = parents.parentName; - const selection = finder.findLastActive().item[0]; - const value = selection._item[finder.config.valueKey]; - const name = selection._item[finder.config.labelKey]; +// EXTERNAL MODULE: ./node_modules/sortablejs/modular/sortable.esm.js +var sortable_esm = __webpack_require__(51474); +// EXTERNAL MODULE: ./node_modules/debounce/index.js +var debounce = __webpack_require__(20296); +var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce); +// EXTERNAL MODULE: ./app/utils/storage.js +var storage = __webpack_require__(31619); +;// CONCATENATED MODULE: ./app/pages/tree.js +function tree_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - field.val(value); - parentLabel.text(value); - parentName.text(name); - finder.config.defaultPath = value; +function tree_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - const remodal = $.remodal.lookup[$(`[data-remodal-id="${modal.data('remodalId')}"]`).data('remodal')]; - remodal.close(); -}); -*/ -;// CONCATENATED MODULE: ./app/pages/page/delete.js +function tree_createClass(Constructor, protoProps, staticProps) { if (protoProps) tree_defineProperties(Constructor.prototype, protoProps); if (staticProps) tree_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -external_jQuery_default()(document).on('click', '[data-remodal-target="delete"]', function () { - var confirm = external_jQuery_default()('[data-remodal-id="delete"] [data-delete-action]'); - var link = external_jQuery_default()(this).data('delete-url'); - confirm.data('delete-action', link); -}); -external_jQuery_default()(document).on('click', '[data-delete-action]', function () { - var remodal = (external_jQuery_default()).remodal.lookup[external_jQuery_default()('[data-remodal-id="delete"]').data('remodal')]; - __webpack_require__.g.location.href = external_jQuery_default()(this).data('delete-action'); - remodal.close(); -}); -;// CONCATENATED MODULE: ./app/pages/page/unset.js - -external_jQuery_default()(document).on('click', '.dz-unset', function () { - var file_upload = external_jQuery_default()(this).closest('.files-upload'); - external_jQuery_default()(this).closest('.dz-image-preview').remove(); - var unset_image = external_jQuery_default()(this).closest('.dz-image-preview').find('[data-dz-name]').text().trim(); - var images = JSON.parse(file_upload.find('input[data-grav-field="hidden"]').val()) || {}; - var image_array = {}; - external_jQuery_default().each(images, function (ind, obj) { - if (!ind.endsWith(unset_image)) { - image_array[ind] = obj; - } - }); - file_upload.find('input[data-grav-field="hidden"]').val(JSON.stringify(image_array)); -}); -;// CONCATENATED MODULE: ./app/pages/page/disable-buttons.js - -external_jQuery_default()('.disable-after-click').on('click', function () { - external_jQuery_default()(this).addClass('pointer-events-disabled'); -}); -;// CONCATENATED MODULE: ./app/utils/cookies.js -function cookies_typeof(obj) { "@babel/helpers - typeof"; return cookies_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, cookies_typeof(obj); } -/* - * Cookies.js - 1.2.3-grav - * https://github.com/ScottHamper/Cookies - * - * With SameSite support by Grav - * - * This is free and unencumbered software released into the public domain. - */ -var factory = function factory(window) { - var _arguments = arguments; - if (cookies_typeof(window.document) !== 'object') { - throw new Error('Cookies.js requires a `window` with a `document` object'); - } +var sessionKey = 'grav:admin:pages'; - var Cookies = function Cookies(key, value, options) { - return _arguments.length === 1 ? Cookies.get(key) : Cookies.set(key, value, options); - }; // Allows for setter injection in unit tests +if (!sessionStorage.getItem(sessionKey)) { + sessionStorage.setItem(sessionKey, '{}'); +} +var PagesTree = /*#__PURE__*/function () { + function PagesTree(query) { + var _this = this; - Cookies._document = window.document; // Used to ensure cookie keys do not collide with - // built-in `Object` properties + var elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :) + tree_classCallCheck(this, PagesTree); - Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC'); - Cookies.defaults = { - path: '/', - secure: false, - sameSite: 'Lax' - }; + this.query = query; + this.elements = external_jQuery_default()(elements !== undefined ? elements : this.query); + this.session = JSON.parse(sessionStorage.getItem(sessionKey) || '{}'); - Cookies.get = function (key) { - if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) { - Cookies._renewCache(); + if (!this.elements.length) { + return; } - var value = Cookies._cache[Cookies._cacheKeyPrefix + key]; - return value === undefined ? undefined : decodeURIComponent(value); - }; - - Cookies.set = function (key, value, options) { - options = Cookies._getExtendedOptions(options); - options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires); - Cookies._document.cookie = Cookies._generateCookieString(key, value, options); - return Cookies; - }; - - Cookies.expire = function (key, options) { - return Cookies.set(key, undefined, options); - }; - - Cookies._getExtendedOptions = function (options) { - return { - path: options && options.path || Cookies.defaults.path, - domain: options && options.domain || Cookies.defaults.domain, - expires: options && options.expires || Cookies.defaults.expires, - secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure, - sameSite: options && options.sameSite || Cookies.defaults.sameSite - }; - }; + this.restore(); + this.elements.find('.page-icon').on('click', function (event) { + return _this.toggle(event.target); + }); + this.elements.data('tree_init', 1); + external_jQuery_default()('[data-page-toggleall]').on('click', function (event) { + var element = external_jQuery_default()(event.target).closest('[data-page-toggleall]'); + var action = element.data('page-toggleall'); - Cookies._isValidDate = function (date) { - return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime()); - }; + _this[action](); + }); + } - Cookies._getExpiresDate = function (expires, now) { - now = now || new Date(); + tree_createClass(PagesTree, [{ + key: "reload", + value: function reload() { + var elements = external_jQuery_default()(this.query).filter(function (index, element) { + return !external_jQuery_default()(element).data('tree_init'); + }); - if (typeof expires === 'number') { - expires = expires === Infinity ? Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000); - } else if (typeof expires === 'string') { - expires = new Date(expires); - } + if (!elements.length) { + return; + } - if (expires && !Cookies._isValidDate(expires)) { - throw new Error('`expires` parameter cannot be converted to a valid Date instance'); + this.constructor(this.query, elements); } + }, { + key: "toggle", + value: function toggle(elements) { + var _this2 = this; - return expires; - }; + var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - Cookies._generateCookieString = function (key, value, options) { - key = key.replace(/[^#$&+\^`|]/g, encodeURIComponent); - key = key.replace(/\(/g, '%28').replace(/\)/g, '%29'); - value = (value + '').replace(/[^!#$&-+\--:<-\[\]-~]/g, encodeURIComponent); - options = options || {}; - var cookieString = key + '=' + value; - cookieString += options.path ? ';path=' + options.path : ''; - cookieString += options.domain ? ';domain=' + options.domain : ''; - cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : ''; - cookieString += options.secure ? ';secure' : ''; - cookieString += options.sameSite ? ';SameSite=' + options.sameSite : ''; - return cookieString; - }; + if (typeof elements === 'string') { + elements = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")).find('[data-toggle="children"]'); + } - Cookies._getCacheFromString = function (documentCookie) { - var cookieCache = {}; - var cookiesArray = documentCookie ? documentCookie.split('; ') : []; + elements = external_jQuery_default()(elements || this.elements); + elements.each(function (index, element) { + element = external_jQuery_default()(element); - for (var i = 0; i < cookiesArray.length; i++) { - var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]); + var state = _this2.getState(element.closest('[data-toggle="children"]')); - if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) { - cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value; - } + _this2[state.isOpen ? 'collapse' : 'expand'](state.id, dontStore); + }); } + }, { + key: "collapse", + value: function collapse(elements) { + var _this3 = this; - return cookieCache; - }; - - Cookies._getKeyValuePairFromCookieString = function (cookieString) { - // "=" is a valid character in a cookie value according to RFC6265, so cannot `split('=')` - var separatorIndex = cookieString.indexOf('='); // IE omits the "=" when the cookie value is an empty string - - separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex; - var key = cookieString.substr(0, separatorIndex); - var decodedKey; + var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - try { - decodedKey = decodeURIComponent(key); - } catch (e) { - if (console && typeof console.error === 'function') { - console.error('Could not decode cookie with key "' + key + '"', e); + if (typeof elements === 'string') { + elements = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")).find('[data-toggle="children"]'); } - } - return { - key: decodedKey, - value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed + elements = external_jQuery_default()(elements || this.elements); + elements.each(function (index, element) { + element = external_jQuery_default()(element); - }; - }; + var state = _this3.getState(element); - Cookies._renewCache = function () { - Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie); - Cookies._cachedDocumentCookie = Cookies._document.cookie; - }; + if (state.isOpen) { + state.children.hide(); + state.icon.removeClass('children-open').addClass('children-closed'); - Cookies._areEnabled = function () { - var testKey = 'cookies.js'; - var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1'; - Cookies.expire(testKey); - return areEnabled; - }; + if (!dontStore) { + delete _this3.session[state.id]; + } + } + }); - Cookies.enabled = Cookies._areEnabled(); - return Cookies; -}; + if (!dontStore) { + this.save(); + } + } + }, { + key: "expand", + value: function expand(elements) { + var _this4 = this; -__webpack_require__.g.Cookies = __webpack_require__.g && cookies_typeof(__webpack_require__.g.document) === 'object' ? factory(__webpack_require__.g) : factory; -/* harmony default export */ const cookies = (__webpack_require__.g.Cookies); -// EXTERNAL MODULE: ./node_modules/dropzone/dist/dropzone.js -var dist_dropzone = __webpack_require__(32025); -var dropzone_default = /*#__PURE__*/__webpack_require__.n(dist_dropzone); -;// CONCATENATED MODULE: ./app/forms/fields/files.js -function files_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var dontStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; -function files_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + if (typeof elements === 'string') { + var element = external_jQuery_default()("[data-nav-id=\"".concat(elements, "\"]")); + var parents = element.parents('[data-nav-id]'); // loop back through parents, we don't want to expand an hidden child -function files_createClass(Constructor, protoProps, staticProps) { if (protoProps) files_defineProperties(Constructor.prototype, protoProps); if (staticProps) files_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + if (parents.length) { + parents = parents.find('[data-toggle="children"]:first'); + parents = parents.add(element.find('[data-toggle="children"]:first')); + return this.expand(parents, dontStore); + } + elements = element.find('[data-toggle="children"]:first'); + } - // import EXIF from 'exif-js'; + elements = external_jQuery_default()(elements || this.elements); + elements.each(function (index, element) { + element = external_jQuery_default()(element); + var state = _this4.getState(element); - // translations + if (!state.isOpen) { + state.children.show(); + state.icon.removeClass('children-closed').addClass('children-open'); -var Dictionary = { - dictCancelUpload: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD, - dictCancelUploadConfirmation: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_CANCEL_UPLOAD_CONFIRMATION, - dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_DEFAULT_MESSAGE, - dictFallbackMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_MESSAGE, - dictFallbackText: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FALLBACK_TEXT, - dictFileTooBig: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_FILE_TOO_BIG, - dictInvalidFileType: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_INVALID_FILE_TYPE, - dictMaxFilesExceeded: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_MAX_FILES_EXCEEDED, - dictRemoveFile: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_REMOVE_FILE, - dictResponseError: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROPZONE_RESPONSE_ERROR -}; -(dropzone_default()).autoDiscover = false; -(dropzone_default()).options.gravPageDropzone = {}; - -(dropzone_default()).confirm = function (question, accepted, rejected) { - var doc = external_jQuery_default()(document); - var modalSelector = '[data-remodal-id="delete-media"]'; - - var removeEvents = function removeEvents() { - doc.off('confirmation', modalSelector, accept); - doc.off('cancellation', modalSelector, reject); - external_jQuery_default()(modalSelector).find('.remodal-confirm').removeClass('pointer-events-disabled'); - }; - - var accept = function accept() { - accepted && accepted(); - removeEvents(); - }; + if (!dontStore) { + _this4.session[state.id] = 1; + } + } + }); - var reject = function reject() { - rejected && rejected(); - removeEvents(); - }; + if (!dontStore) { + this.save(); + } + } + }, { + key: "restore", + value: function restore() { + var _this5 = this; - (external_jQuery_default()).remodal.lookup[external_jQuery_default()(modalSelector).data('remodal')].open(); - doc.on('confirmation', modalSelector, accept); - doc.on('cancellation', modalSelector, reject); -}; + this.collapse(null, true); + Object.keys(this.session).forEach(function (key) { + _this5.expand(key, 'no-store'); + }); + } + }, { + key: "save", + value: function save() { + return sessionStorage.setItem(sessionKey, JSON.stringify(this.session)); + } + }, { + key: "getState", + value: function getState(element) { + element = external_jQuery_default()(element); + return { + id: element.closest('[data-nav-id]').data('nav-id'), + children: element.closest('li.page-item').find('ul:first'), + icon: element.find('.page-icon'), -var DropzoneMediaConfig = { - timeout: 0, - thumbnailWidth: 200, - thumbnailHeight: 150, - addRemoveLinks: false, - dictDefaultMessage: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.DROP_FILES_HERE_TO_UPLOAD.replace(/</g, '<').replace(/>/g, '>'), - dictRemoveFileConfirmation: '[placeholder]', - previewTemplate: "\n ").trim() -}; // global.EXIF = EXIF; + get isOpen() { + return this.icon.hasClass('children-open'); + } -var ACCEPT_FUNC = function ACCEPT_FUNC(file, done, settings) { - var resolution = settings.resolution; - if (!resolution) return done(); - var reader = new FileReader(); - var error = ''; - var hasMin = resolution.min && (resolution.min.width || resolution.min.height); - var hasMax = resolution.max && (resolution.max.width || resolution.max.height); + }; + } + }]); - if (hasMin || !(settings.resizeWidth || settings.resizeHeight) && hasMax) { - reader.onload = function (event) { - if (!/image\//.test(file.type)) { - done(); - return; - } + return PagesTree; +}(); - var image = new Image(); - image.src = event.target.result; - image.onerror = function () { - done(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_UPLOAD); - }; +var tree_Instance = new PagesTree('[data-toggle="children"]'); - image.onload = function () { - var _this = this; +// EXTERNAL MODULE: ./node_modules/selectize/dist/js/selectize.js +var selectize = __webpack_require__(25703); +var selectize_default = /*#__PURE__*/__webpack_require__.n(selectize); +;// CONCATENATED MODULE: ./app/utils/selectize-required-fix.js +/** + * This is a plugin to override the `.refreshValidityState` method of + * the Selectize library (https://selectize.github.io/selectize.js/). + * The library is not maintained anymore (as of 2017-09-13) and contains + * a bug which causes Microsoft Edge to not work with selectized [required] + * form fields. This plugin should be removed if + * https://github.com/selectize/selectize.js/pull/1320 is ever merged + * and a new version of Selectize gets released. + */ - if (resolution.min) { - Object.keys(resolution.min).forEach(function (attr) { - if (resolution.min[attr] && _this[attr] < resolution.min[attr]) { - error += external_GravAdmin_namespaceObject.translations.PLUGIN_FORM.RESOLUTION_MIN.replace(/{{attr}}/g, attr).replace(/{{min}}/g, resolution.min[attr]); - } - }); - } +selectize_default().define('required-fix', function (options) { + var _this = this; - if (!(settings.resizeWidth || settings.resizeHeight)) { - if (resolution.max) { - Object.keys(resolution.max).forEach(function (attr) { - if (resolution.max[attr] && _this[attr] > resolution.max[attr]) { - error += external_GravAdmin_namespaceObject.translations.PLUGIN_FORM.RESOLUTION_MAX.replace(/{{attr}}/g, attr).replace(/{{max}}/g, resolution.max[attr]); - } - }); - } - } + this.refreshValidityState = function () { + if (!_this.isRequired) return false; + var invalid = !_this.items.length; + _this.isInvalid = invalid; - URL.revokeObjectURL(image.src); // release memory + if (invalid) { + _this.$control_input.attr('required', ''); - return error ? done(error) : done(); - }; - }; + _this.$input.removeAttr('required'); + } else { + _this.$control_input.removeAttr('required'); - reader.readAsDataURL(file); - } else { - return error ? done(error) : done(); - } -}; + _this.$input.attr('required'); + } + }; +}); +;// CONCATENATED MODULE: ./app/pages/filter.js +function filter_typeof(obj) { "@babel/helpers - typeof"; return filter_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, filter_typeof(obj); } -var FilesField = /*#__PURE__*/function () { - function FilesField() { - var _this2 = this; +function filter_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref$container = _ref.container, - container = _ref$container === void 0 ? '.dropzone.files-upload' : _ref$container, - _ref$options = _ref.options, - options = _ref$options === void 0 ? {} : _ref$options; +function filter_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - files_classCallCheck(this, FilesField); +function filter_createClass(Constructor, protoProps, staticProps) { if (protoProps) filter_defineProperties(Constructor.prototype, protoProps); if (staticProps) filter_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - this.container = external_jQuery_default()(container); - if (!this.container.length) { - return; - } - this.urls = {}; - this.customPost = this.container.data('filePostAdd') || {}; - this.options = Object.assign({}, Dictionary, DropzoneMediaConfig, { - klass: this, - url: this.container.data('file-url-add') || external_GravAdmin_namespaceObject.config.current_url, - acceptedFiles: this.container.data('media-types'), - init: this.initDropzone - }, this.container.data('dropzone-options'), options); - this.options = Object.assign({}, this.options, { - accept: function accept(file, done) { - ACCEPT_FUNC(file, done, this.options); - } - }); - this.dropzone = new (dropzone_default())(container, this.options); - this.dropzone.on('complete', this.onDropzoneComplete.bind(this)); - this.dropzone.on('success', this.onDropzoneSuccess.bind(this)); - this.dropzone.on('addedfile', this.onDropzoneAddedFile.bind(this)); - this.dropzone.on('removedfile', this.onDropzoneRemovedFile.bind(this)); - this.dropzone.on('sending', this.onDropzoneSending.bind(this)); - this.dropzone.on('error', this.onDropzoneError.bind(this)); - this.container.on('mouseenter', '[data-dz-view]', function (e) { - var value = JSON.parse(_this2.container.find('[name][type="hidden"]').val() || '{}'); - var target = external_jQuery_default()(e.currentTarget); - var file = target.parent('.dz-preview').find('.dz-filename'); - var filename = encodeURI(file.text()); - var URL = Object.keys(value).filter(function (key) { - return value[key].name === filename; - }).shift(); - target.attr('href', "".concat(external_GravAdmin_namespaceObject.config.base_url_simple, "/").concat(URL)); - }); - } - files_createClass(FilesField, [{ - key: "initDropzone", - value: function initDropzone() { - var _this3 = this; - var files = this.options.klass.container.find('[data-file]'); - var dropzone = this; - if (!files.length) { - return; - } - files.each(function (index, file) { - file = external_jQuery_default()(file); - var data = file.data('file'); - var mock = { - name: data.name, - size: data.size, - type: data.type, - status: (dropzone_default()).ADDED, - accepted: true, - url: _this3.options.url, - removeUrl: data.remove - }; - dropzone.files.push(mock); - dropzone.options.addedfile.call(dropzone, mock); - if (mock.type.match(/^image\//)) { - dropzone.options.thumbnail.call(dropzone, mock, data.path); - dropzone.createThumbnailFromUrl(mock, data.path); - } - file.remove(); - }); - } - }, { - key: "getURI", - value: function getURI() { - return this.container.data('mediaUri') || ''; - } - }, { - key: "onDropzoneSending", - value: function onDropzoneSending(file, xhr, formData) { - var _this4 = this; +/* @formatter:off */ - if (Object.keys(this.customPost).length) { - Object.keys(this.customPost).forEach(function (key) { - formData.append(key, _this4.customPost[key]); - }); - } else { - formData.append('name', this.options.dotNotation); - formData.append('task', 'filesupload'); - formData.append('uri', this.getURI()); - } +/* eslint-disable */ - formData.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce); - } - }, { - key: "onDropzoneSuccess", - value: function onDropzoneSuccess(file, response, xhr) { - response = typeof response === 'string' ? JSON.parse(response) : response; +var options = [{ + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.MODULE, + key: 'Module', + cat: 'mode' +}, { + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.VISIBLE, + key: 'Visible', + cat: 'mode' +}, { + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.ROUTABLE, + key: 'Routable', + cat: 'mode' +}, { + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.PUBLISHED, + key: 'Published', + cat: 'mode' +}, { + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_MODULE, + key: 'NonModule', + cat: 'mode' +}, { + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_VISIBLE, + key: 'NonVisible', + cat: 'mode' +}, { + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_ROUTABLE, + key: 'NonRoutable', + cat: 'mode' +}, { + flag: external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.NON_PUBLISHED, + key: 'NonPublished', + cat: 'mode' +}]; +/* @formatter:on */ - if (this.options.reloadPage) { - __webpack_require__.g.location.reload(); - } // store params for removing file from session before it gets saved +/* eslint-enable */ +var PagesFilter = /*#__PURE__*/function () { + function PagesFilter(filters, search) { + var _this = this; - if (response.session) { - file.sessionParams = response.session; - file.removeUrl = this.options.url; // Touch field value to force a mutation detection + filter_classCallCheck(this, PagesFilter); - var input = this.container.find('[name][type="hidden"]'); - var value = input.val(); - input.val(value + ' '); + this.filters = external_jQuery_default()(filters); + this.search = external_jQuery_default()(search); + this.options = options; + this.tree = tree_Instance; + var storage = JSON.parse(localStorage.getItem('grav:admin:pages:filter') || '{}'); + + if (!this.filters.length || !this.search.length) { + return; + } + + this.labels = this.filters.data('filter-labels'); + this.search.on('input', debounce_default()(function () { + return _this.filter(); + }, 250)); + this.filters.on('change', function () { + return _this.filter(); + }); // restore state + + if (storage.flags || storage.query) { + this.setValues(storage); + this.filter(); + } + + this._initSelectize(); + } + + filter_createClass(PagesFilter, [{ + key: "filter", + value: function filter(value) { + var _this2 = this; + + var data = { + flags: '', + query: '' + }; + + if (filter_typeof(value) === 'object') { + Object.assign(data, value); } - return this.handleError({ - file: file, - data: response, - mode: 'removeFile', - msg: "

    ".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_UPLOAD, " {{fileName}}

    \n
    ").concat(response.message, "
    ") + if (typeof value === 'string') { + data.query = value; + } + + if (typeof value === 'undefined') { + data.flags = this.filters.val(); + data.query = this.search.val(); + } + + if (!Object.keys(data).filter(function (key) { + return data[key] !== ''; + }).length) { + this.resetValues(); + return; + } + + data.flags = data.flags.replace(/(\s{1,})?,(\s{1,})?/g, ','); + this.setValues({ + flags: data.flags, + query: data.query + }, 'silent'); + utils_request("".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/pages-filter.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "filterPages"), { + method: 'post', + body: data + }, function (response) { + _this2.refreshDOM(response); }); } }, { - key: "onDropzoneComplete", - value: function onDropzoneComplete(file) { - if (!file.accepted && !file.rejected) { - var data = { - status: 'error', - message: "".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_UNSUPPORTED, ": ").concat(file.name.match(/\..+/).join('')) - }; - return this.handleError({ - file: file, - data: data, - mode: 'removeFile', - msg: "

    ".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_ADD, " {{fileName}}

    \n
    ").concat(data.message, "
    ") - }); - } + key: "refreshDOM", + value: function refreshDOM(response) { + var _this3 = this; - if (this.options.reloadPage) { - __webpack_require__.g.location.reload(); + var items = external_jQuery_default()('[data-nav-id]'); + + if (!response) { + items.removeClass('search-match').show(); + this.tree.restore(); + return; } + + items.removeClass('search-match').hide(); + response.results.forEach(function (page) { + var match = items.filter("[data-nav-id=\"".concat(page, "\"]")).addClass('search-match').show(); + match.parents('[data-nav-id]').addClass('search-match').show(); + + _this3.tree.expand(page, 'no-store'); + }); } }, { - key: "b64_to_utf8", - value: function b64_to_utf8(str) { - str = str.replace(/\s/g, ''); - return decodeURIComponent(escape(window.atob(str))); + key: "setValues", + value: function setValues(_ref, silent) { + var _ref$flags = _ref.flags, + flags = _ref$flags === void 0 ? '' : _ref$flags, + _ref$query = _ref.query, + query = _ref$query === void 0 ? '' : _ref$query; + var flagsArray = flags.replace(/(\s{1,})?,(\s{1,})?/g, ',').split(','); + + if (this.filters.val() !== flags) { + var selectize = this.filters.data('selectize'); + this.filters[selectize ? 'setValue' : 'val'](flagsArray, silent); + } + + if (this.search.val() !== query) { + this.search.val(query); + } + + localStorage.setItem('grav:admin:pages:filter', JSON.stringify({ + flags: flags, + query: query + })); } }, { - key: "onDropzoneAddedFile", - value: function onDropzoneAddedFile(file) { - return this.dropzone.options.addedfile(file); + key: "resetValues", + value: function resetValues() { + this.setValues('', 'silent'); + this.refreshDOM(); } }, { - key: "onDropzoneRemovedFile", - value: function onDropzoneRemovedFile(file) { - var _this5 = this; + key: "_initSelectize", + value: function _initSelectize() { + var _this4 = this; + + var extras = { + type: this.filters.data('filter-types') || {}, + access: this.filters.data('filter-access-levels') || {} + }; + Object.keys(extras).forEach(function (cat) { + Object.keys(extras[cat]).forEach(function (key) { + _this4.options.push({ + cat: cat, + key: key, + flag: extras[cat][key] + }); + }); + }); + this.filters.selectize({ + maxItems: null, + valueField: 'key', + labelField: 'flag', + searchField: ['flag', 'key'], + options: this.options, + optgroups: this.labels, + optgroupField: 'cat', + optgroupLabelField: 'name', + optgroupValueField: 'id', + optgroupOrder: this.labels.map(function (item) { + return item.id; + }), + plugins: ['optgroup_columns', 'required-fix'] + }); + } + }]); + + return PagesFilter; +}(); + + +var filter_Instance = new PagesFilter('input[name="page-filter"]', 'input[name="page-search"]'); + +// EXTERNAL MODULE: ./node_modules/speakingurl/index.js +var speakingurl = __webpack_require__(989); +var speakingurl_default = /*#__PURE__*/__webpack_require__.n(speakingurl); +;// CONCATENATED MODULE: ./app/utils/jquery-utils.js +var _this = undefined; + + + // jQuery no parents filter + +(external_jQuery_default()).expr[":"].noparents = external_jQuery_default().expr.createPseudo(function (text) { + return function (element) { + return external_jQuery_default()(element).parents(text).length < 1; + }; +}); // Slugify +// CommonJS and ES6 version of https://github.com/madflow/jquery-slugify + +(external_jQuery_default()).fn.slugify = function (source, options) { + return _this.each(function (element) { + var target = external_jQuery_default()(element); + var source = external_jQuery_default()(source); + target.on('keyup change', function () { + target.data('locked', target.val() !== '' && target.val() !== undefined); + }); + source.on('keyup change', function () { + if (target.data('locked') === true) { + return true; + } + + var isInput = target.is('input') || target.is('textarea'); + target[isInput ? 'val' : 'text'](external_jQuery_default().slugify(source.val(), options)); + }); + }); +}; // Static method. + + +(external_jQuery_default()).slugify = function (sourceString, options) { + options = external_jQuery_default().extend({}, (external_jQuery_default()).slugify.options, options); + options.lang = options.lang || external_jQuery_default()('html').prop('lang'); + + if (typeof options.preSlug === 'function') { + sourceString = options.preSlug(sourceString); + } + + sourceString = options.slugFunc(sourceString, options); + + if (typeof options.postSlug === 'function') { + sourceString = options.postSlug(sourceString); + } + + return sourceString; +}; // Default plugin options + + +(external_jQuery_default()).slugify.options = { + preSlug: null, + postSlug: null, + slugFunc: function slugFunc(input, opts) { + return speakingurl_default()(input, opts); + } +}; +;// CONCATENATED MODULE: ./app/pages/page/add.js + + + + +var custom = false; +var folder = external_jQuery_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]"]'); +var title = external_jQuery_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]"]'); + +var getFields = function getFields(type, target) { + target = external_jQuery_default()(target); + var query = "[data-remodal-id=\"".concat(target.closest('[data-remodal-id]').data('remodal-id'), "\"]"); + return { + title: type === 'title' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[title]\"]")), + folder: type === 'folder' ? external_jQuery_default()(target) : external_jQuery_default()("".concat(query, " input[name=\"data[folder]\"]")) + }; +}; + +title.on('input focus blur', function (event) { + if (custom) { + return true; + } + + var elements = getFields('title', event.currentTarget); + var slug = external_jQuery_default().slugify(elements.title.val(), { + custom: { + "'": '', + '‘': '', + '’': '' + } + }); + elements.folder.val(slug); +}); +folder.on('input', function (event) { + var elements = getFields('folder', event.currentTarget); + var input = elements.folder.get(0); + var value = elements.folder.val(); + var selection = { + start: input.selectionStart, + end: input.selectionEnd + }; + value = value.toLowerCase().replace(/\s/g, '-').replace(/[^a-z0-9_\-]/g, ''); + elements.folder.val(value); + custom = !!value; // restore cursor position + + input.setSelectionRange(selection.start, selection.end); +}); +folder.on('focus blur', function (event) { + getFields('title').title.trigger('input'); +}); +external_jQuery_default()(document).on('change', '[name="data[route]"]', function (event) { + var rawroute = external_jQuery_default()(event.currentTarget).val(); + var pageTemplate = external_jQuery_default()('[name="data[name]"]'); + var URI = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/ajax.json/task").concat(external_GravAdmin_namespaceObject.config.param_sep, "getChildTypes"); + + if (pageTemplate.length === 0) { + return; + } + + utils_request(URI, { + method: 'post', + body: { + rawroute: rawroute + } + }, function (response) { + var type = response.child_type; + + if (type !== '' && type !== 'default') { + pageTemplate.val(type); + pageTemplate.data('selectize').setValue(type); + } + }); +}); +;// CONCATENATED MODULE: ./app/pages/page/move.js + +external_jQuery_default()(document).on('click', '[data-page-move] button[name="task"][value="save"]', function (event) { + /* let route = $('form#blueprints:first select[name="data[route]"]'); + let moveTo = $('[data-page-move] select').val(); + if (route.length && route.val() !== moveTo) { + let selectize = route.data('selectize'); + route.val(moveTo); + if (selectize) selectize.setValue(moveTo); + }*/ + var modal = external_jQuery_default()(event.currentTarget).closest('[data-remodal-id]'); + var parents = modal.data('parents') || {}; + var finder = parents.finder; + + if (!parents || !finder) { + return true; + } + + var field = parents.field; + var parentLabel = parents.parentLabel; + var parentName = parents.parentName; + var selection = finder.findLastActive().item[0]; + var value = selection._item[finder.config.valueKey]; + var name = selection._item[finder.config.labelKey]; + field.val(value); + parentLabel.text(value); + parentName.text(name); + finder.config.defaultPath = value; + external_jQuery_default()('
    ').css({ + backgroundColor: 'rgba(255, 255, 255, 0.1)', + position: 'fixed', + top: 0, + left: 0, + width: '100vw', + height: '100vh', + zIndex: 15000 + }).appendTo(external_jQuery_default()('body')); +}); +/* +$(document).on('click', '[data-remodal-id="parents"] [data-parents-select]', (event) => { + const modal = $(event.currentTarget).closest('[data-remodal-id]'); + const parents = modal.data('parents'); + const finder = parents.finder; + const field = parents.field; + const parentLabel = parents.parentLabel; + const parentName = parents.parentName; + const selection = finder.findLastActive().item[0]; + const value = selection._item[finder.config.valueKey]; + const name = selection._item[finder.config.labelKey]; + + field.val(value); + parentLabel.text(value); + parentName.text(name); + finder.config.defaultPath = value; + + const remodal = $.remodal.lookup[$(`[data-remodal-id="${modal.data('remodalId')}"]`).data('remodal')]; + remodal.close(); +}); +*/ +;// CONCATENATED MODULE: ./app/pages/page/delete.js + +external_jQuery_default()(document).on('click', '[data-remodal-target="delete"]', function () { + var confirm = external_jQuery_default()('[data-remodal-id="delete"] [data-delete-action]'); + var link = external_jQuery_default()(this).data('delete-url'); + confirm.data('delete-action', link); +}); +external_jQuery_default()(document).on('click', '[data-delete-action]', function () { + var remodal = (external_jQuery_default()).remodal.lookup[external_jQuery_default()('[data-remodal-id="delete"]').data('remodal')]; + __webpack_require__.g.location.href = external_jQuery_default()(this).data('delete-action'); + remodal.close(); +}); +;// CONCATENATED MODULE: ./app/pages/page/unset.js + +external_jQuery_default()(document).on('click', '.dz-unset', function () { + var file_upload = external_jQuery_default()(this).closest('.files-upload'); + external_jQuery_default()(this).closest('.dz-image-preview').remove(); + var unset_image = external_jQuery_default()(this).closest('.dz-image-preview').find('[data-dz-name]').text().trim(); + var images = JSON.parse(file_upload.find('input[data-grav-field="hidden"]').val()) || {}; + var image_array = {}; + external_jQuery_default().each(images, function (ind, obj) { + if (!ind.endsWith(unset_image)) { + image_array[ind] = obj; + } + }); + file_upload.find('input[data-grav-field="hidden"]').val(JSON.stringify(image_array)); +}); +;// CONCATENATED MODULE: ./app/pages/page/disable-buttons.js + +external_jQuery_default()('.disable-after-click').on('click', function () { + external_jQuery_default()(this).addClass('pointer-events-disabled'); +}); +;// CONCATENATED MODULE: ./app/utils/cookies.js +function cookies_typeof(obj) { "@babel/helpers - typeof"; return cookies_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, cookies_typeof(obj); } + +/* + * Cookies.js - 1.2.3-grav + * https://github.com/ScottHamper/Cookies + * + * With SameSite support by Grav + * + * This is free and unencumbered software released into the public domain. + */ +var factory = function factory(window) { + var _arguments = arguments; - if (!file.accepted || file.rejected) { - return; - } + if (cookies_typeof(window.document) !== 'object') { + throw new Error('Cookies.js requires a `window` with a `document` object'); + } - var url = file.removeUrl || this.urls["delete"] || this.options.url; - var path = (url || '').match(/path:(.*)\//); - var body = { - filename: file.name, - uri: this.getURI() - }; + var Cookies = function Cookies(key, value, options) { + return _arguments.length === 1 ? Cookies.get(key) : Cookies.set(key, value, options); + }; // Allows for setter injection in unit tests - if (file.sessionParams) { - body.task = 'filessessionremove'; - body.session = file.sessionParams; - } - var customPost = this.container.data('filePostRemove') || {}; + Cookies._document = window.document; // Used to ensure cookie keys do not collide with + // built-in `Object` properties - if (Object.keys(customPost).length) { - body = {}; - Object.keys(customPost).forEach(function (key) { - body[key] = customPost[key]; - }); - } + Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :) - body['filename'] = file.name; - body['admin-nonce'] = external_GravAdmin_namespaceObject.config.admin_nonce; - utils_request(url, { - method: 'post', - body: body - }, function () { - if (!path) { - return; - } + Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC'); + Cookies.defaults = { + path: '/', + secure: false, + sameSite: 'Lax' + }; - path = _this5.b64_to_utf8(path[1]); + Cookies.get = function (key) { + if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) { + Cookies._renewCache(); + } - var input = _this5.container.find('[name][type="hidden"]'); + var value = Cookies._cache[Cookies._cacheKeyPrefix + key]; + return value === undefined ? undefined : decodeURIComponent(value); + }; - var data = JSON.parse(input.val() || '{}'); - delete data[path]; - input.val(JSON.stringify(data)); - }); - } - }, { - key: "onDropzoneError", - value: function onDropzoneError(file, response, xhr) { - var message = xhr ? response.error.message : response; - external_jQuery_default()(file.previewElement).find('[data-dz-errormessage]').html(message); - return this.handleError({ - file: file, - data: { - status: 'error' - }, - msg: "
    ".concat(message, "
    ") - }); - } - }, { - key: "handleError", - value: function handleError(options) { - var file = options.file, - data = options.data, - mode = options.mode, - msg = options.msg; + Cookies.set = function (key, value, options) { + options = Cookies._getExtendedOptions(options); + options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires); + Cookies._document.cookie = Cookies._generateCookieString(key, value, options); + return Cookies; + }; - if (data.status !== 'error' && data.status !== 'unauthorized') { - return; - } + Cookies.expire = function (key, options) { + return Cookies.set(key, undefined, options); + }; - switch (mode) { - case 'addBack': - if (file instanceof File) { - this.dropzone.addFile.call(this.dropzone, file); - } else { - this.dropzone.files.push(file); - this.dropzone.options.addedfile.call(this.dropzone, file); - this.dropzone.options.thumbnail.call(this.dropzone, file, file.extras.url); - } + Cookies._getExtendedOptions = function (options) { + return { + path: options && options.path || Cookies.defaults.path, + domain: options && options.domain || Cookies.defaults.domain, + expires: options && options.expires || Cookies.defaults.expires, + secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure, + sameSite: options && options.sameSite || Cookies.defaults.sameSite + }; + }; - break; + Cookies._isValidDate = function (date) { + return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime()); + }; - case 'removeFile': - default: - if (~this.dropzone.files.indexOf(file)) { - file.rejected = true; - this.dropzone.removeFile.call(this.dropzone, file, { - silent: true - }); - } + Cookies._getExpiresDate = function (expires, now) { + now = now || new Date(); - break; - } + if (typeof expires === 'number') { + expires = expires === Infinity ? Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000); + } else if (typeof expires === 'string') { + expires = new Date(expires); + } - var modal = external_jQuery_default()('[data-remodal-id="generic"]'); - var cleanName = file.name.replace('<', '<').replace('>', '>'); - modal.find('.error-content').html(msg.replace('{{fileName}}', cleanName)); - (external_jQuery_default()).remodal.lookup[modal.data('remodal')].open(); + if (expires && !Cookies._isValidDate(expires)) { + throw new Error('`expires` parameter cannot be converted to a valid Date instance'); } - }]); - return FilesField; -}(); + return expires; + }; + Cookies._generateCookieString = function (key, value, options) { + key = key.replace(/[^#$&+\^`|]/g, encodeURIComponent); + key = key.replace(/\(/g, '%28').replace(/\)/g, '%29'); + value = (value + '').replace(/[^!#$&-+\--:<-\[\]-~]/g, encodeURIComponent); + options = options || {}; + var cookieString = key + '=' + value; + cookieString += options.path ? ';path=' + options.path : ''; + cookieString += options.domain ? ';domain=' + options.domain : ''; + cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : ''; + cookieString += options.secure ? ';secure' : ''; + cookieString += options.sameSite ? ';SameSite=' + options.sameSite : ''; + return cookieString; + }; -function UriToMarkdown(uri) { - uri = uri.replace(/@3x|@2x|@1x/, ''); - uri = uri.replace(/\(/g, '%28'); - uri = uri.replace(/\)/g, '%29'); - var title = uri.split('.').slice(0, -1).join('.'); - return uri.match(/\.(jpe?g|png|gif|svg|webp|mp4|webm|ogv|mov)$/i) ? "![".concat(title, "](").concat(uri, " \"").concat(title, "\")") : "[".concat(decodeURI(uri), "](").concat(uri, ")"); -} -var instances = []; -var cache = external_jQuery_default()(); + Cookies._getCacheFromString = function (documentCookie) { + var cookieCache = {}; + var cookiesArray = documentCookie ? documentCookie.split('; ') : []; -var onAddedNodes = function onAddedNodes(event, target -/* , record, instance */ -) { - var files = external_jQuery_default()(target).find('.dropzone.files-upload'); + for (var i = 0; i < cookiesArray.length; i++) { + var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]); - if (!files.length) { - return; - } + if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) { + cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value; + } + } - files.each(function (index, file) { - file = external_jQuery_default()(file); + return cookieCache; + }; - if (!~cache.index(file)) { - addNode(file); + Cookies._getKeyValuePairFromCookieString = function (cookieString) { + // "=" is a valid character in a cookie value according to RFC6265, so cannot `split('=')` + var separatorIndex = cookieString.indexOf('='); // IE omits the "=" when the cookie value is an empty string + + separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex; + var key = cookieString.substr(0, separatorIndex); + var decodedKey; + + try { + decodedKey = decodeURIComponent(key); + } catch (e) { + if (console && typeof console.error === 'function') { + console.error('Could not decode cookie with key "' + key + '"', e); + } } - }); -}; -var addNode = function addNode(container) { - container = external_jQuery_default()(container); - var input = container.find('input[type="file"]'); - var settings = container.data('grav-file-settings') || {}; + return { + key: decodedKey, + value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed - if (settings.accept && ~settings.accept.indexOf('*')) { - settings.accept = ['']; - } + }; + }; - var options = { - url: container.data('file-url-add') || (container.closest('form').attr('action') || external_GravAdmin_namespaceObject.config.current_url) + '.json', - paramName: settings.paramName || 'file', - dotNotation: settings.name || 'file', - acceptedFiles: settings.accept ? settings.accept.join(',') : input.attr('accept') || container.data('media-types'), - maxFilesize: typeof settings.filesize !== 'undefined' ? settings.filesize : 256, - maxFiles: settings.limit || null, - resizeWidth: settings.resizeWidth || null, - resizeHeight: settings.resizeHeight || null, - resizeQuality: settings.resizeQuality || null, - resolution: settings.resolution || null, - accept: function accept(file, done) { - ACCEPT_FUNC(file, done, settings); - } + Cookies._renewCache = function () { + Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie); + Cookies._cachedDocumentCookie = Cookies._document.cookie; }; - cache = cache.add(container); - container = container[0]; - instances.push(new FilesField({ - container: container, - options: options - })); + + Cookies._areEnabled = function () { + var testKey = 'cookies.js'; + var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1'; + Cookies.expire(testKey); + return areEnabled; + }; + + Cookies.enabled = Cookies._areEnabled(); + return Cookies; }; -var files_Instance = function () { - external_jQuery_default()('.dropzone.files-upload').each(function (i, container) { - return addNode(container); - }); - external_jQuery_default()('body').on('mutation._grav', onAddedNodes); - return instances; -}(); +__webpack_require__.g.Cookies = __webpack_require__.g && cookies_typeof(__webpack_require__.g.document) === 'object' ? factory(__webpack_require__.g) : factory; +/* harmony default export */ const cookies = (__webpack_require__.g.Cookies); ;// CONCATENATED MODULE: ./app/forms/fields/editor/buttons.js @@ -9751,7 +9751,7 @@ external_jQuery_default()('[data-grav-elements] select').trigger('change'); }, FilesField: { FilesField: FilesField, - Instance: files_Instance + Instance: Instance }, FolderField: { Regenerate: fields_folder @@ -10119,7 +10119,7 @@ var Packages = /*#__PURE__*/function () { var current_version = ''; var available_version = ''; var _name = ''; - var resources = Instance.payload.payload.resources; + var resources = gpm_Instance.payload.payload.resources; if (resources.plugins[slug]) { available_version = resources.plugins[slug].available; @@ -10314,7 +10314,7 @@ var Packages = /*#__PURE__*/function () { var current_version = ''; var available_version = ''; var _name2 = ''; - var resources = Instance.payload.payload.resources; + var resources = gpm_Instance.payload.payload.resources; if (resources.plugins[slug]) { available_version = resources.plugins[slug].available; @@ -11799,6 +11799,7 @@ var sidebar_Instance = new Sidebar(); + // bootstrap jQuery extensions @@ -11823,7 +11824,7 @@ external_jQuery_default()(__webpack_require__.g).on('sidebar_state._grav', funct /* harmony default export */ const main = ({ GPM: { GPM: GPM, - Instance: Instance + Instance: gpm_Instance }, KeepAlive: keepalive, Dashboard: dashboard, @@ -11854,7 +11855,8 @@ external_jQuery_default()(__webpack_require__.g).on('sidebar_state._grav', funct Utils: { request: utils_request, toastr: utils_toastr, - Cookies: cookies + Cookies: cookies, + UriToMarkdown: UriToMarkdown } }); From 9b00cd85c77230c770cc0b2db12ba2562df4b3e7 Mon Sep 17 00:00:00 2001 From: Pawel Boguslawski Date: Mon, 13 Jun 2022 09:36:48 +0200 Subject: [PATCH 3/7] Access to Latest Page Updates for users with admin.pages.list privilege This mod allows users with admin.pages.list provilege to see Latest Page Updates on Dashboard (user can see page list so there is no point in disallowig them to see list of recently updated pages). It also removes unnecessarry and misleading message about dashboard access denied instead of Latest Page Updates area (user still may have access to stats on Dasboard for example; printing such messages should be avoided for cleaner UI). Author-Change-Id: IB#1120576 --- themes/grav/templates/partials/dashboard-pages.html.twig | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/themes/grav/templates/partials/dashboard-pages.html.twig b/themes/grav/templates/partials/dashboard-pages.html.twig index 7f3b4927f..501e21191 100644 --- a/themes/grav/templates/partials/dashboard-pages.html.twig +++ b/themes/grav/templates/partials/dashboard-pages.html.twig @@ -1,4 +1,4 @@ -{% if authorize(['admin.pages', 'admin.super']) %} +{% if authorize(['admin.pages.list', 'admin.pages', 'admin.super']) %}
    {{ "PLUGIN_ADMIN.MANAGE_PAGES"|t }} @@ -15,6 +15,4 @@ {% endfor %}
    -{% else %} -
    You don't have sufficient access to view the dashboard...
    {% endif %} From d37536b16959b2a9753465e26aa21458401c1e09 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Mon, 13 Jun 2022 18:27:21 +0300 Subject: [PATCH 4/7] Changelog update [#2294] --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ab184f8b..8eb8b09c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,13 +2,15 @@ ## mm/dd/2022 1. [](#improved) - * Exposed `UriToMarkdown` util (`Grav.default.Utils.UriToMarkdown`) in admin, to convert links/images. + * Exposed `UriToMarkdown` util (`Grav.default.Utils.UriToMarkdown`) in admin, to convert links/images +1. [](#bugfix) + * Fixed `Latest Page Updates` permissions [#2294](https://github.com/getgrav/grav-plugin-admin/pull/2294) # v1.10.33.1 ## 04/25/2022 1. [](#bugfix) - * Reverted [PR#2265](https://github.com/getgrav/grav-plugin-admin/pull/2265) as it broke sections output. + * Reverted [PR#2265](https://github.com/getgrav/grav-plugin-admin/pull/2265) as it broke sections output # v1.10.33 ## 04/25/2022 From 0a5b51b9e2c2eb9626b17c8b164dcfc3296ccf3c Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Mon, 13 Jun 2022 18:28:01 +0300 Subject: [PATCH 5/7] Changelog version fix --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8eb8b09c5..28a5375d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# v1.10.33.2 +# v1.10.34 ## mm/dd/2022 1. [](#improved) From 02458a12112907187a2ede49b3f1c8171da5af66 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Mon, 13 Jun 2022 19:32:02 +0300 Subject: [PATCH 6/7] Composer update --- composer.lock | 276 ++++++++++-------- vendor/composer/installed.json | 14 +- vendor/composer/installed.php | 10 +- vendor/scssphp/scssphp/src/Compiler.php | 8 +- .../scssphp/src/Logger/QuietLogger.php | 2 + .../scssphp/src/Logger/StreamLogger.php | 2 + vendor/scssphp/scssphp/src/Version.php | 2 +- 7 files changed, 181 insertions(+), 133 deletions(-) diff --git a/composer.lock b/composer.lock index 20272f7f6..4b74cde36 100644 --- a/composer.lock +++ b/composer.lock @@ -190,16 +190,16 @@ }, { "name": "scssphp/scssphp", - "version": "v1.10.2", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/scssphp/scssphp.git", - "reference": "387f4f4abf5d99f16be16314c5ab856f81c82f46" + "reference": "0f1e1516ed2412ad43e42a6a319e77624ba1f713" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/387f4f4abf5d99f16be16314c5ab856f81c82f46", - "reference": "387f4f4abf5d99f16be16314c5ab856f81c82f46", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/0f1e1516ed2412ad43e42a6a319e77624ba1f713", + "reference": "0f1e1516ed2412ad43e42a6a319e77624ba1f713", "shasum": "" }, "require": { @@ -258,9 +258,9 @@ ], "support": { "issues": "https://github.com/scssphp/scssphp/issues", - "source": "https://github.com/scssphp/scssphp/tree/v1.10.2" + "source": "https://github.com/scssphp/scssphp/tree/v1.10.3" }, - "time": "2022-03-02T21:15:09+00:00" + "time": "2022-05-16T07:22:18+00:00" } ], "packages-dev": [ @@ -425,16 +425,16 @@ }, { "name": "codeception/phpunit-wrapper", - "version": "7.8.2", + "version": "7.8.4", "source": { "type": "git", "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "cafed18048826790c527843f9b85e8cc79b866f1" + "reference": "dd44fc152433d27d3de03d59b4945449b3407af0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/cafed18048826790c527843f9b85e8cc79b866f1", - "reference": "cafed18048826790c527843f9b85e8cc79b866f1", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/dd44fc152433d27d3de03d59b4945449b3407af0", + "reference": "dd44fc152433d27d3de03d59b4945449b3407af0", "shasum": "" }, "require": { @@ -466,9 +466,9 @@ "description": "PHPUnit classes used by Codeception", "support": { "issues": "https://github.com/Codeception/phpunit-wrapper/issues", - "source": "https://github.com/Codeception/phpunit-wrapper/tree/7.8.2" + "source": "https://github.com/Codeception/phpunit-wrapper/tree/7.8.4" }, - "time": "2020-12-28T14:00:26+00:00" + "time": "2022-05-23T06:09:22+00:00" }, { "name": "codeception/stub", @@ -697,16 +697,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.5", + "version": "6.5.7", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + "reference": "724562fa861e21a4071c652c8a159934e4f05592" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/724562fa861e21a4071c652c8a159934e4f05592", + "reference": "724562fa861e21a4071c652c8a159934e4f05592", "shasum": "" }, "require": { @@ -743,10 +743,40 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", @@ -762,9 +792,23 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" + "source": "https://github.com/guzzle/guzzle/tree/6.5.7" }, - "time": "2020-06-16T21:01:06+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-09T21:36:50+00:00" }, { "name": "guzzlehttp/promises", @@ -1241,16 +1285,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { @@ -1285,9 +1329,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", @@ -2618,16 +2662,16 @@ }, { "name": "symfony/console", - "version": "v4.4.38", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5a50085bf5460f0c0d60a50b58388c1249826b8a" + "reference": "cce7a9f99e22937a71a16b23afa762558808d587" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5a50085bf5460f0c0d60a50b58388c1249826b8a", - "reference": "5a50085bf5460f0c0d60a50b58388c1249826b8a", + "url": "https://api.github.com/repos/symfony/console/zipball/cce7a9f99e22937a71a16b23afa762558808d587", + "reference": "cce7a9f99e22937a71a16b23afa762558808d587", "shasum": "" }, "require": { @@ -2688,7 +2732,7 @@ "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/console/tree/v4.4.38" + "source": "https://github.com/symfony/console/tree/v4.4.42" }, "funding": [ { @@ -2704,7 +2748,7 @@ "type": "tidelift" } ], - "time": "2022-01-30T21:23:57+00:00" + "time": "2022-05-14T12:35:33+00:00" }, { "name": "symfony/css-selector", @@ -2774,16 +2818,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -2821,7 +2865,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" }, "funding": [ { @@ -2837,20 +2881,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.39", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "4e9215a8b533802ba84a3cc5bd3c43103e7a6dc3" + "reference": "be5a04618e5d44e71d013f177df80d3ec4b192a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4e9215a8b533802ba84a3cc5bd3c43103e7a6dc3", - "reference": "4e9215a8b533802ba84a3cc5bd3c43103e7a6dc3", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/be5a04618e5d44e71d013f177df80d3ec4b192a0", + "reference": "be5a04618e5d44e71d013f177df80d3ec4b192a0", "shasum": "" }, "require": { @@ -2895,7 +2939,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.39" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.42" }, "funding": [ { @@ -2911,20 +2955,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T10:38:15+00:00" + "time": "2022-04-30T18:34:00+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.37", + "version": "v4.4.42", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc" + "reference": "708e761740c16b02c86e3f0c932018a06b895d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3ccfcfb96ecce1217d7b0875a0736976bc6e63dc", - "reference": "3ccfcfb96ecce1217d7b0875a0736976bc6e63dc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/708e761740c16b02c86e3f0c932018a06b895d40", + "reference": "708e761740c16b02c86e3f0c932018a06b895d40", "shasum": "" }, "require": { @@ -2979,7 +3023,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.37" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.42" }, "funding": [ { @@ -2995,20 +3039,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-05-05T15:33:49+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.11", + "version": "v1.1.12", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "01e9a4efac0ee33a05dfdf93b346f62e7d0e998c" + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/01e9a4efac0ee33a05dfdf93b346f62e7d0e998c", - "reference": "01e9a4efac0ee33a05dfdf93b346f62e7d0e998c", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", + "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", "shasum": "" }, "require": { @@ -3058,7 +3102,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.11" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.12" }, "funding": [ { @@ -3074,20 +3118,20 @@ "type": "tidelift" } ], - "time": "2021-03-23T15:25:38+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { "name": "symfony/finder", - "version": "v4.4.37", + "version": "v4.4.41", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b17d76d7ed179f017aad646e858c90a2771af15d" + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b17d76d7ed179f017aad646e858c90a2771af15d", - "reference": "b17d76d7ed179f017aad646e858c90a2771af15d", + "url": "https://api.github.com/repos/symfony/finder/zipball/40790bdf293b462798882ef6da72bb49a4a6633a", + "reference": "40790bdf293b462798882ef6da72bb49a4a6633a", "shasum": "" }, "require": { @@ -3120,7 +3164,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.37" + "source": "https://github.com/symfony/finder/tree/v4.4.41" }, "funding": [ { @@ -3136,20 +3180,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-04-14T15:36:10+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -3164,7 +3208,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3202,7 +3246,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -3218,20 +3262,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -3245,7 +3289,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3289,7 +3333,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -3305,20 +3349,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -3330,7 +3374,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3373,7 +3417,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -3389,20 +3433,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -3417,7 +3461,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3456,7 +3500,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -3472,20 +3516,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -3494,7 +3538,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3539,7 +3583,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -3555,20 +3599,20 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/process", - "version": "v4.4.37", + "version": "v4.4.41", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67" + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b2d924e5a4cb284f293d5092b1dbf0d364cb8b67", - "reference": "b2d924e5a4cb284f293d5092b1dbf0d364cb8b67", + "url": "https://api.github.com/repos/symfony/process/zipball/9eedd60225506d56e42210a70c21bb80ca8456ce", + "reference": "9eedd60225506d56e42210a70c21bb80ca8456ce", "shasum": "" }, "require": { @@ -3601,7 +3645,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v4.4.37" + "source": "https://github.com/symfony/process/tree/v4.4.41" }, "funding": [ { @@ -3617,26 +3661,26 @@ "type": "tidelift" } ], - "time": "2022-01-27T17:14:04+00:00" + "time": "2022-04-04T10:19:07+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -3684,7 +3728,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" }, "funding": [ { @@ -3700,7 +3744,7 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-03-13T20:07:29+00:00" }, { "name": "symfony/yaml", @@ -3825,21 +3869,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -3877,9 +3921,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 98cc33bb8..c0b8c933a 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -193,17 +193,17 @@ }, { "name": "scssphp/scssphp", - "version": "v1.10.2", - "version_normalized": "1.10.2.0", + "version": "v1.10.3", + "version_normalized": "1.10.3.0", "source": { "type": "git", "url": "https://github.com/scssphp/scssphp.git", - "reference": "387f4f4abf5d99f16be16314c5ab856f81c82f46" + "reference": "0f1e1516ed2412ad43e42a6a319e77624ba1f713" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/387f4f4abf5d99f16be16314c5ab856f81c82f46", - "reference": "387f4f4abf5d99f16be16314c5ab856f81c82f46", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/0f1e1516ed2412ad43e42a6a319e77624ba1f713", + "reference": "0f1e1516ed2412ad43e42a6a319e77624ba1f713", "shasum": "" }, "require": { @@ -226,7 +226,7 @@ "ext-iconv": "Can be used as fallback when ext-mbstring is not available", "ext-mbstring": "For best performance, mbstring should be installed as it is faster than ext-iconv" }, - "time": "2022-03-02T21:15:09+00:00", + "time": "2022-05-16T07:22:18+00:00", "bin": [ "bin/pscss" ], @@ -264,7 +264,7 @@ ], "support": { "issues": "https://github.com/scssphp/scssphp/issues", - "source": "https://github.com/scssphp/scssphp/tree/v1.10.2" + "source": "https://github.com/scssphp/scssphp/tree/v1.10.3" }, "install-path": "../scssphp/scssphp" } diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 8a740590a..2bde2d2df 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'grav-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '5c1e6d6d52f8fc8e0540b5599e736e25ea20c446', + 'reference' => '0a5b51b9e2c2eb9626b17c8b164dcfc3296ccf3c', 'name' => 'getgrav/grav-plugin-admin', 'dev' => false, ), @@ -16,7 +16,7 @@ 'type' => 'grav-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '5c1e6d6d52f8fc8e0540b5599e736e25ea20c446', + 'reference' => '0a5b51b9e2c2eb9626b17c8b164dcfc3296ccf3c', 'dev_requirement' => false, ), 'laminas/laminas-xml' => array( @@ -53,12 +53,12 @@ 'dev_requirement' => false, ), 'scssphp/scssphp' => array( - 'pretty_version' => 'v1.10.2', - 'version' => '1.10.2.0', + 'pretty_version' => 'v1.10.3', + 'version' => '1.10.3.0', 'type' => 'library', 'install_path' => __DIR__ . '/../scssphp/scssphp', 'aliases' => array(), - 'reference' => '387f4f4abf5d99f16be16314c5ab856f81c82f46', + 'reference' => '0f1e1516ed2412ad43e42a6a319e77624ba1f713', 'dev_requirement' => false, ), 'symfony/polyfill-php72' => array( diff --git a/vendor/scssphp/scssphp/src/Compiler.php b/vendor/scssphp/scssphp/src/Compiler.php index e414436c8..eecfa481a 100644 --- a/vendor/scssphp/scssphp/src/Compiler.php +++ b/vendor/scssphp/scssphp/src/Compiler.php @@ -2350,9 +2350,9 @@ protected function compileChildren($stms, OutputBlock $out, $traceName = '') } /** - * Compile children and throw exception if unexpected `@return` + * Compile children and throw exception if unexpected at-return * - * @param array $stms + * @param array[] $stms * @param \ScssPhp\ScssPhp\Formatter\OutputBlock $out * @param \ScssPhp\ScssPhp\Block $selfParent * @param string $traceName @@ -2367,13 +2367,13 @@ protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent foreach ($stms as $stm) { if ($selfParent && isset($stm[1]) && \is_object($stm[1]) && $stm[1] instanceof Block) { + $oldSelfParent = $stm[1]->selfParent; $stm[1]->selfParent = $selfParent; $ret = $this->compileChild($stm, $out); - $stm[1]->selfParent = null; + $stm[1]->selfParent = $oldSelfParent; } elseif ($selfParent && \in_array($stm[0], [Type::T_INCLUDE, Type::T_EXTEND])) { $stm['selfParent'] = $selfParent; $ret = $this->compileChild($stm, $out); - unset($stm['selfParent']); } else { $ret = $this->compileChild($stm, $out); } diff --git a/vendor/scssphp/scssphp/src/Logger/QuietLogger.php b/vendor/scssphp/scssphp/src/Logger/QuietLogger.php index 0f358c646..ad7c07537 100644 --- a/vendor/scssphp/scssphp/src/Logger/QuietLogger.php +++ b/vendor/scssphp/scssphp/src/Logger/QuietLogger.php @@ -14,6 +14,8 @@ /** * A logger that silently ignores all messages. + * + * @final */ class QuietLogger implements LoggerInterface { diff --git a/vendor/scssphp/scssphp/src/Logger/StreamLogger.php b/vendor/scssphp/scssphp/src/Logger/StreamLogger.php index f5da6c9cf..7db7cc189 100644 --- a/vendor/scssphp/scssphp/src/Logger/StreamLogger.php +++ b/vendor/scssphp/scssphp/src/Logger/StreamLogger.php @@ -14,6 +14,8 @@ /** * A logger that prints to a PHP stream (for instance stderr) + * + * @final */ class StreamLogger implements LoggerInterface { diff --git a/vendor/scssphp/scssphp/src/Version.php b/vendor/scssphp/scssphp/src/Version.php index 0cf18ff7b..c7f144125 100644 --- a/vendor/scssphp/scssphp/src/Version.php +++ b/vendor/scssphp/scssphp/src/Version.php @@ -19,5 +19,5 @@ */ class Version { - const VERSION = '1.10.2'; + const VERSION = '1.10.3'; } From 0919de92855dddb310e143d8b6ac4129cf053e3b Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Tue, 14 Jun 2022 11:03:41 -0600 Subject: [PATCH 7/7] prepare for release --- CHANGELOG.md | 2 +- blueprints.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28a5375d8..4764d2214 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ # v1.10.34 -## mm/dd/2022 +## 06/22/2022 1. [](#improved) * Exposed `UriToMarkdown` util (`Grav.default.Utils.UriToMarkdown`) in admin, to convert links/images diff --git a/blueprints.yaml b/blueprints.yaml index 4c7caa814..f15df94e2 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -1,7 +1,7 @@ name: Admin Panel slug: admin type: plugin -version: 1.10.33.1 +version: 1.10.34 description: Adds an advanced administration panel to manage your site icon: empire author: