').addClass(namespacify('overlay') + ' ' + namespacify('is', STATES.CLOSED)).hide();
$appendTo.append(remodal.$overlay);
}
remodal.$bg = $('.' + namespacify('bg')).addClass(namespacify('is', STATES.CLOSED));
remodal.$modal = $modal.addClass(NAMESPACE + ' ' + namespacify('is-initialized') + ' ' + remodal.settings.modifier + ' ' + namespacify('is', STATES.CLOSED)).attr('tabindex', '-1');
remodal.$wrapper = $('
').addClass(namespacify('wrapper') + ' ' + remodal.settings.modifier + ' ' + namespacify('is', STATES.CLOSED)).hide().append(remodal.$modal);
$appendTo.append(remodal.$wrapper);
// Add the event listener for the close button
remodal.$wrapper.on('click.' + NAMESPACE, '[data-' + PLUGIN_NAME + '-action="close"]', function (e) {
e.preventDefault();
remodal.close();
});
// Add the event listener for the cancel button
remodal.$wrapper.on('click.' + NAMESPACE, '[data-' + PLUGIN_NAME + '-action="cancel"]', function (e) {
e.preventDefault();
remodal.$modal.trigger(STATE_CHANGE_REASONS.CANCELLATION);
if (remodal.settings.closeOnCancel) {
remodal.close(STATE_CHANGE_REASONS.CANCELLATION);
}
});
// Add the event listener for the confirm button
remodal.$wrapper.on('click.' + NAMESPACE, '[data-' + PLUGIN_NAME + '-action="confirm"]', function (e) {
e.preventDefault();
remodal.$modal.trigger(STATE_CHANGE_REASONS.CONFIRMATION);
if (remodal.settings.closeOnConfirm) {
remodal.close(STATE_CHANGE_REASONS.CONFIRMATION);
}
});
// Add the event listener for the overlay
remodal.$wrapper.on('click.' + NAMESPACE, function (e) {
var $target = $(e.target);
var isWrapper = $target.hasClass(namespacify('wrapper'));
var isWithin = $target.closest('.' + namespacify('is', STATES.OPENED)).length;
if (!isWrapper && isWithin) {
return;
}
if (remodal.settings.closeOnOutsideClick) {
remodal.close();
}
});
}
/**
* Opens a modal window
* @public
*/
Remodal.prototype.open = function () {
var remodal = this;
var current;
var modalCount;
// Check if the animation was completed
if (remodal.state === STATES.OPENING || remodal.state === STATES.CLOSING) {
return;
}
// id = remodal.$modal.attr('data-' + PLUGIN_NAME + '-id');
if (remodal.id && remodal.settings.hashTracking) {
scrollTop = $(window).scrollTop();
location.hash = remodal.id;
}
if (!remodal.settings.stack) {
current = currentModal();
if (current && current !== remodal) {
halt(current);
}
}
modalCount = openModals.push(remodal);
remodal.$overlay.css('z-index', function (_, value) {
return parseInt(value, 10) + modalCount;
});
remodal.$wrapper.css('z-index', function (_, value) {
return parseInt(value, 10) + modalCount;
});
lockScreen();
remodal.$bg.addClass(remodal.settings.modifier);
remodal.$overlay.addClass(remodal.settings.modifier).show();
remodal.$wrapper.show().scrollTop(0);
remodal.$modal.focus();
syncWithAnimation(function () {
setState(remodal, STATES.OPENING);
}, function () {
setState(remodal, STATES.OPENED);
}, remodal);
};
/**
* Closes a modal window
* @public
* @param {String} reason
*/
Remodal.prototype.close = function (reason) {
var remodal = this;
var current;
// Check if the animation was completed
if (remodal.state === STATES.OPENING || remodal.state === STATES.CLOSING || remodal.state === STATES.CLOSED) {
return;
}
removeModal(remodal);
if (remodal.settings.hashTracking && remodal.id === location.hash.substr(1)) {
current = currentModal();
if (current) {
location.hash = current.id;
} else {
location.hash = '';
$(window).scrollTop(scrollTop);
}
}
syncWithAnimation(function () {
setState(remodal, STATES.CLOSING, false, reason);
}, function () {
remodal.$bg.removeClass(remodal.settings.modifier);
remodal.$overlay.removeClass(remodal.settings.modifier).hide();
remodal.$wrapper.hide();
if (openModals.length === 0) {
unlockScreen();
}
setState(remodal, STATES.CLOSED, false, reason);
}, remodal);
};
/**
* Returns a current state of a modal
* @public
* @returns {STATES}
*/
Remodal.prototype.getState = function () {
return this.state;
};
/**
* Destroys a modal
* @public
*/
Remodal.prototype.destroy = function () {
var lookup = $[PLUGIN_NAME].lookup;
var instanceCount;
halt(this);
this.$wrapper.remove();
delete lookup[this.index];
instanceCount = $.grep(lookup, function (instance) {
return !!instance;
}).length;
if (instanceCount === 0) {
this.$overlay.remove();
this.$bg.removeClass(namespacify('is', STATES.CLOSING) + ' ' + namespacify('is', STATES.OPENING) + ' ' + namespacify('is', STATES.CLOSED) + ' ' + namespacify('is', STATES.OPENED));
}
};
/**
* Special plugin object for instances
* @public
* @type {Object}
*/
$[PLUGIN_NAME] = {
lookup: []
};
/**
* Plugin constructor
* @constructor
* @param {Object} options
* @returns {JQuery}
*/
$.fn[PLUGIN_NAME] = function (opts) {
var instance;
var $elem;
this.each(function (index, elem) {
$elem = $(elem);
if ($elem.data(PLUGIN_NAME) == null) {
instance = new Remodal($elem, opts);
$elem.data(PLUGIN_NAME, instance.index);
if (instance.settings.hashTracking && instance.id === location.hash.substr(1)) {
instance.open();
}
} else {
instance = $[PLUGIN_NAME].lookup[$elem.data(PLUGIN_NAME)];
}
});
return instance;
};
$(document).ready(function () {
// data-remodal-target opens a modal window with the special Id
$(document).on('click', '[data-' + PLUGIN_NAME + '-target]', function (e) {
e.preventDefault();
var elem = e.currentTarget;
var id = elem.getAttribute('data-' + PLUGIN_NAME + '-target');
var $target = $('[data-' + PLUGIN_NAME + '-id="' + id + '"]');
$[PLUGIN_NAME].lookup[$target.data(PLUGIN_NAME)].open();
});
// Auto initialization of modal windows
// They should have the 'remodal' class attribute
// Also you can write the `data-remodal-options` attribute to pass params into the modal
$(document).find('.' + NAMESPACE).each(function (i, container) {
var $container = $(container);
var options = $container.data(PLUGIN_NAME + '-options');
if (!options) {
options = {};
} else if (typeof options === 'string' || options instanceof String) {
options = parseOptions(options);
}
$container[PLUGIN_NAME](options);
});
// Handles the keydown event
$(document).on('keydown.' + NAMESPACE, function (e) {
var current = currentModal();
if (current && current.settings.closeOnEscape && current.state === STATES.OPENED && e.keyCode === 27) {
current.close();
}
});
// Handles the hashchange event
$(window).on('hashchange.' + NAMESPACE, handleHashChangeEvent);
});
});
// EXTERNAL MODULE: ./node_modules/simplebar/dist/simplebar.min.js
var simplebar_min = __webpack_require__(88904);
// EXTERNAL MODULE: ./node_modules/dropzone/dist/dropzone.js
var dist_dropzone = __webpack_require__(62628);
var dropzone_default = /*#__PURE__*/__webpack_require__.n(dist_dropzone);
// EXTERNAL MODULE: ./node_modules/toastr/toastr.js
var toastr = __webpack_require__(47959);
var toastr_default = /*#__PURE__*/__webpack_require__.n(toastr);
;// ./app/utils/toastr.js
(toastr_default()).options.positionClass = 'toast-top-right';
(toastr_default()).options.preventDuplicates = true;
/* harmony default export */ const utils_toastr = ((toastr_default()));
;// ./app/utils/offline.js
var offlineElement = external_jQuery_default()('#offline-status');
external_jQuery_default()(window).on('offline', function () {
offlineElement.slideDown();
});
external_jQuery_default()(window).on('online', function () {
offlineElement.slideUp();
});
external_jQuery_default()(document).ready(function () {
if (!offline) {
offlineElement.slideDown();
}
});
// assume online if can't check
/* harmony default export */ const offline = (typeof __webpack_require__.g.navigator.onLine !== 'undefined' ? __webpack_require__.g.navigator.onLine : true);
// EXTERNAL MODULE: ./node_modules/mout/string/trim.js
var trim = __webpack_require__(35814);
var trim_default = /*#__PURE__*/__webpack_require__.n(trim);
;// external "GravAdmin"
const external_GravAdmin_namespaceObject = GravAdmin;
;// ./app/utils/keepalive.js
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var MAX_SAFE_DELAY = 2147483647;
var KeepAlive = /*#__PURE__*/function () {
function KeepAlive() {
_classCallCheck(this, KeepAlive);
this.active = false;
}
return _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: "checkOnce",
value: function checkOnce() {
var data = new FormData();
data.append('admin-nonce', external_GravAdmin_namespaceObject.config.admin_nonce);
return 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
}).then(function (response) {
if (response && (response.status === 401 || response.status === 403)) {
return false;
}
return true;
})["catch"](function () {
return false;
});
}
}, {
key: "fetch",
value: function fetch() {
return this.checkOnce().then(function (ok) {
if (!ok) {
showSessionExpiredModal();
}
})["catch"](userFeedbackError);
}
}]);
}();
/* harmony default export */ const keepalive = (new KeepAlive());
;// ./app/utils/session-expired.js
var shown = false;
function showSessionExpiredModal() {
if (shown) {
return;
}
shown = true;
try {
localStorage.setItem('grav:admin:sessionExpiredShown', '1');
} catch (e) {}
try {
keepalive.stop();
} catch (e) {}
// Ensure modal exists (in case a custom layout removed it)
var $modal = external_jQuery_default()('[data-remodal-id="session-expired"]');
if (!$modal.length) {
var html = "\n
";
external_jQuery_default()('body').append(html);
$modal = external_jQuery_default()('[data-remodal-id="session-expired"]');
}
// Harden the modal: no escape/overlay close
var instance = $modal.remodal({
hashTracking: false,
closeOnEscape: false,
closeOnOutsideClick: false,
closeOnCancel: false,
closeOnConfirm: true,
stack: false
});
// Style overlay + blur background
external_jQuery_default()('html').addClass('session-expired-active');
external_jQuery_default()('.remodal-overlay').addClass('session-expired');
// On confirm, redirect to login
$modal.off('.session-expired').on('confirmation.session-expired', function () {
// Keep suppression flag for the next page load (login) so we don't double prompt
window.location.href = external_GravAdmin_namespaceObject.config.base_url_relative;
});
// Open modal
instance.open();
}
// Bind a jQuery global ajax error trap for legacy XHR paths
function bindGlobalAjaxTrap() {
external_jQuery_default()(document).off('ajaxError._grav_session').on('ajaxError._grav_session', function (event, xhr) {
if (!xhr) {
return;
}
var status = xhr.status || 0;
if (status === 401 || status === 403) {
showSessionExpiredModal();
}
});
}
// Intercept in-admin link clicks to show the modal before any server redirect to login
function installNavigationGuard() {
external_jQuery_default()(document).off('click._grav_session_nav').on('click._grav_session_nav', 'a[href]', function (e) {
var $a = external_jQuery_default()(this);
var href = $a.attr('href');
if (!href || href === '#' || href.indexOf('javascript:') === 0) {
return;
}
if (e.isDefaultPrevented()) {
return;
}
if ($a.attr('target') === '_blank' || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) {
return;
}
// Only guard admin-relative links
var base = window.GravAdmin && window.GravAdmin.config && window.GravAdmin.config.base_url_relative || '';
var isAdminLink = href.indexOf(base + '/') === 0 || href === base || href.indexOf('/') === 0;
if (!isAdminLink) {
return;
}
e.preventDefault();
// Quick session check, if invalid show modal, else proceed with navigation
try {
keepalive.checkOnce().then(function (ok) {
if (ok) {
window.location.href = href;
} else {
showSessionExpiredModal();
}
});
} catch (err) {
// On any error, just navigate
window.location.href = href;
}
});
}
/* harmony default export */ const session_expired = ({
showSessionExpiredModal: showSessionExpiredModal,
bindGlobalAjaxTrap: bindGlobalAjaxTrap
});
;// ./app/utils/response.js
function response_typeof(o) { "@babel/helpers - typeof"; return response_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, response_typeof(o); }
// import { config } from 'grav-config';
var UNLOADING = false;
var error = function error(response) {
var error = new Error(response.statusText || response || '');
error.response = response;
return error;
};
function parseStatus(response) {
return response;
/* Whoops can handle JSON responses so we don't need this for now.
if (response.status >= 200 && response.status < 300) {
return response;
} else {
throw error(response);
}
*/
}
function parseJSON(response) {
// If the session is no longer valid, surface a blocking modal instead of generic errors
if (response && (response.status === 401 || response.status === 403)) {
showSessionExpiredModal();
throw new Error('Unauthorized');
}
return response.text().then(function (text) {
var parsed = text;
try {
parsed = JSON.parse(text);
} catch (error) {
var content = document.createElement('div');
content.innerHTML = text;
var the_error = new Error();
the_error.stack = trim_default()(content.innerText);
throw the_error;
}
return parsed;
});
}
function userFeedback(response) {
if (UNLOADING) {
return true;
}
var status = response.status || (response.error ? 'error' : '');
var message = response.message || (response.error ? response.error.message : null);
var settings = response.toastr || null;
var backup;
switch (status) {
case 'unauthenticated':
// Show a blocking modal and stop further processing
showSessionExpiredModal();
throw error('Logged out');
case 'unauthorized':
status = 'error';
message = message || 'Unauthorized.';
break;
case 'error':
status = 'error';
message = message || 'Unknown error.';
break;
case 'success':
status = 'success';
message = message || '';
break;
default:
status = 'error';
message = message || 'Invalid AJAX response.';
break;
}
if (settings && response_typeof(settings) === 'object' && settings !== null) {
backup = Object.assign({}, utils_toastr.options);
Object.keys(settings).forEach(function (key) {
utils_toastr.options[key] = settings[key];
});
}
if (message && (offline || !offline && status !== 'error')) {
utils_toastr[status === 'success' ? 'success' : 'error'](message);
}
if (settings) {
utils_toastr.options = backup;
}
return response;
}
function userFeedbackError(error) {
if (UNLOADING) {
return true;
}
// If we can detect an unauthorized state here, show modal
var unauthorized = error && (error.message === 'Unauthorized' || error.response && (error.response.status === 401 || error.response.status === 403));
if (unauthorized) {
showSessionExpiredModal();
return;
}
var stack = error.stack ? "
".concat(error.stack, "") : '';
utils_toastr.error("Fetch Failed:
".concat(error.message, " ").concat(stack));
console.error("".concat(error.message, " at ").concat(error.stack));
}
external_jQuery_default()(__webpack_require__.g).on('beforeunload._ajax', function () {
UNLOADING = true;
});
;// ./app/utils/request.js
function request_typeof(o) { "@babel/helpers - typeof"; return request_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, request_typeof(o); }
var raw;
var request = function request(url) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {
return true;
};
if (typeof options === 'function') {
callback = options;
options = {};
}
var silentErrors = !!options.silentErrors;
if (options.silentErrors) {
delete options.silentErrors;
}
if (options.method && options.method === 'post') {
var data = new FormData();
options.body = Object.assign({
'admin-nonce': external_GravAdmin_namespaceObject.config.admin_nonce
}, options.body || {});
if (options.body && request_typeof(options.body) === 'object') {
Object.keys(options.body).map(function (key) {
return data.append(key, options.body[key]);
});
}
options.body = data;
}
options = Object.assign({
credentials: 'same-origin',
headers: {
'Accept': 'application/json'
}
}, options);
return fetch(url, options).then(function (response) {
raw = response;
return response;
}).then(parseStatus).then(parseJSON).then(userFeedback).then(function (response) {
return callback(response, raw);
})["catch"](function (error) {
if (silentErrors) {
console.debug('[Request] silent failure', url, error);
return undefined;
}
userFeedbackError(error);
return undefined;
});
};
/* harmony default export */ const utils_request = (request);
;// ./app/forms/fields/files.js
function files_typeof(o) { "@babel/helpers - typeof"; return files_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, files_typeof(o); }
function files_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function files_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, files_toPropertyKey(o.key), o); } }
function files_createClass(e, r, t) { return r && files_defineProperties(e.prototype, r), t && files_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function files_toPropertyKey(t) { var i = files_toPrimitive(t, "string"); return "symbol" == files_typeof(i) ? i : i + ""; }
function files_toPrimitive(t, r) { if ("object" != files_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != files_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
// import EXIF from 'exif-js';
// translations
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();
};
var reject = function reject() {
rejected && rejected();
removeEvents();
};
(external_jQuery_default()).remodal.lookup[external_jQuery_default()(modalSelector).data('remodal')].open();
doc.on('confirmation', modalSelector, accept);
doc.on('cancellation', modalSelector, reject);
};
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;
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;
}
var image = new Image();
image.src = event.target.result;
image.onerror = function () {
done(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.FILE_ERROR_UPLOAD);
};
image.onload = function () {
var _this = this;
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]);
}
});
}
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]);
}
});
}
}
URL.revokeObjectURL(image.src); // release memory
return error ? done(error) : done();
};
};
reader.readAsDataURL(file);
} else {
return error ? done(error) : done();
}
};
var FilesField = /*#__PURE__*/function () {
function FilesField() {
var _this2 = this;
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;
files_classCallCheck(this, FilesField);
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));
});
}
return 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;
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());
}
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;
if (this.options.reloadPage) {
__webpack_require__.g.location.reload();
}
// store params for removing file from session before it gets saved
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 + ' ');
}
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.options.reloadPage) {
__webpack_require__.g.location.reload();
}
}
}, {
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 (!file.accepted || file.rejected) {
return;
}
var url = file.removeUrl || this.urls["delete"] || this.options.url;
var path = (url || '').match(/path:(.*)\//);
var body = {
filename: file.name,
uri: this.getURI()
};
if (file.sessionParams) {
body.task = 'filessessionremove';
body.session = file.sessionParams;
}
var customPost = this.container.data('filePostRemove') || {};
if (Object.keys(customPost).length) {
body = {};
Object.keys(customPost).forEach(function (key) {
body[key] = customPost[key];
});
}
body['filename'] = file.name;
body['admin-nonce'] = external_GravAdmin_namespaceObject.config.admin_nonce;
utils_request(url, {
method: 'post',
body: body
}, function () {
if (!path) {
return;
}
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;
if (data.status !== 'error' && data.status !== 'unauthorized') {
return;
}
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);
}
break;
case 'removeFile':
default:
if (~this.dropzone.files.indexOf(file)) {
file.rejected = true;
this.dropzone.removeFile.call(this.dropzone, file, {
silent: true
});
}
break;
}
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();
}
}]);
}();
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|avif|mp4|webm|ogv|mov)$/i) ? ".concat(uri, " \"").concat(title, "\")") : "[".concat(decodeURI(uri), "](").concat(uri, ")");
}
var instances = [];
var cache = external_jQuery_default()();
var onAddedNodes = function onAddedNodes(event, target /* , record, instance */) {
var files = external_jQuery_default()(target).find('.dropzone.files-upload');
if (!files.length) {
return;
}
files.each(function (index, file) {
file = external_jQuery_default()(file);
if (!~cache.index(file)) {
addNode(file);
}
});
};
var addNode = function addNode(container) {
container = external_jQuery_default()(container);
var input = container.find('input[type="file"]');
var settings = container.data('grav-file-settings') || {};
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);
}
};
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);
});
external_jQuery_default()('body').on('mutation._grav', onAddedNodes);
return instances;
}();
// EXTERNAL MODULE: ./node_modules/events/events.js
var events = __webpack_require__(37007);
var events_default = /*#__PURE__*/__webpack_require__.n(events);
;// ./app/utils/gpm.js
function gpm_typeof(o) { "@babel/helpers - typeof"; return gpm_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, gpm_typeof(o); }
function gpm_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function gpm_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, gpm_toPropertyKey(o.key), o); } }
function gpm_createClass(e, r, t) { return r && gpm_defineProperties(e.prototype, r), t && gpm_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function gpm_toPropertyKey(t) { var i = gpm_toPrimitive(t, "string"); return "symbol" == gpm_typeof(i) ? i : i + ""; }
function gpm_toPrimitive(t, r) { if ("object" != gpm_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != gpm_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(t, e) { if (e && ("object" == gpm_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
var GPM = /*#__PURE__*/function (_EventEmitter) {
function GPM() {
var _this;
var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'getUpdates';
gpm_classCallCheck(this, GPM);
_this = _callSuper(this, GPM);
_this.payload = {};
_this.raw = {};
_this.action = action;
return _this;
}
_inherits(GPM, _EventEmitter);
return 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: "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;
}
}]);
}((events_default()));
var gpm_Instance = new GPM();
// EXTERNAL MODULE: ./node_modules/mout/array/unique.js
var unique = __webpack_require__(45195);
var unique_default = /*#__PURE__*/__webpack_require__.n(unique);
;// ./app/updates/notifications.js
function notifications_typeof(o) { "@babel/helpers - typeof"; return notifications_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, notifications_typeof(o); }
function notifications_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function notifications_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, notifications_toPropertyKey(o.key), o); } }
function notifications_createClass(e, r, t) { return r && notifications_defineProperties(e.prototype, r), t && notifications_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function notifications_toPropertyKey(t) { var i = notifications_toPrimitive(t, "string"); return "symbol" == notifications_typeof(i) ? i : i + ""; }
function notifications_toPrimitive(t, r) { if ("object" != notifications_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != notifications_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var canFetchNotifications = function canFetchNotifications() {
return external_GravAdmin_namespaceObject.config.notifications.enabled;
};
var notificationsFilters = function notificationsFilters() {
return external_GravAdmin_namespaceObject.config.notifications.filters;
};
var Notifications = /*#__PURE__*/function () {
function Notifications() {
notifications_classCallCheck(this, Notifications);
}
return 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;
if (!canFetchNotifications()) {
return false;
}
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();
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]);
});
}
};
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);
}
break;
case 'plugins':
if (!notification.read) {
Notifications.showNotificationInPlugins(notification);
}
break;
case 'themes':
if (!notification.read) {
Notifications.showNotificationInThemes(notification);
}
break;
}
}
}]);
}();
var notifications = new Notifications();
/* harmony default export */ const updates_notifications = (notifications);
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
});
});
}
;// ./app/updates/feed.js
function feed_typeof(o) { "@babel/helpers - typeof"; return feed_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, feed_typeof(o); }
function feed_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function feed_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, feed_toPropertyKey(o.key), o); } }
function feed_createClass(e, r, t) { return r && feed_defineProperties(e.prototype, r), t && feed_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function feed_toPropertyKey(t) { var i = feed_toPrimitive(t, "string"); return "symbol" == feed_typeof(i) ? i : i + ""; }
function feed_toPrimitive(t, r) { if ("object" != feed_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != feed_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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;
}
return feed_createClass(Feed, [{
key: "fetch",
value: function fetch() {
var _this = this;
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;
var feed = external_jQuery_default()('#news-feed .widget-content');
if (!feed.length) {
return;
}
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 (!this.data || this.data.error || _refresh) {
this.fetch(_refresh, this.updateContent.bind(this));
} else {
this.updateContent();
}
}
}, {
key: "updateContent",
value: function updateContent() {
var feed = external_jQuery_default()('#news-feed .widget-content');
if (!feed.length) {
return;
}
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 && this.data.feed_data) {
content.append(this.data.feed_data);
}
}
}]);
}();
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);
;// ./app/updates/check.js
// 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;
}
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 (!resources) {
grav += ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.IS_AVAILABLE_FOR_UPDATE;
}
utils_toastr.info(grav + (grav && resources ? ' ' + external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.AND + ' ' : '') + resources);
}
}, true);
});
;// ./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];
}
;// ./app/updates/update.js
// Dashboard update and Grav update
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');
// Safely get the file size with fallback
var sizeText = '';
if (updates_Instance.payload && updates_Instance.payload.grav && updates_Instance.payload.grav.assets && updates_Instance.payload.grav.assets['grav-update'] && updates_Instance.payload.grav.assets['grav-update'].size) {
sizeText = " ".concat(formatBytes(updates_Instance.payload.grav.assets['grav-update'].size));
}
element.html("".concat(external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT).concat(sizeText, ".."));
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);
}
element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download');
});
});
;// ./app/updates/channel-switcher.js
var switcher = external_jQuery_default()('input[type="radio"][name="channel-switch"]');
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();
}
});
});
}
;// ./app/updates/safe-upgrade.js
function safe_upgrade_typeof(o) { "@babel/helpers - typeof"; return safe_upgrade_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, safe_upgrade_typeof(o); }
function safe_upgrade_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function safe_upgrade_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, safe_upgrade_toPropertyKey(o.key), o); } }
function safe_upgrade_createClass(e, r, t) { return r && safe_upgrade_defineProperties(e.prototype, r), t && safe_upgrade_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function safe_upgrade_toPropertyKey(t) { var i = safe_upgrade_toPrimitive(t, "string"); return "symbol" == safe_upgrade_typeof(i) ? i : i + ""; }
function safe_upgrade_toPrimitive(t, r) { if ("object" != safe_upgrade_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != safe_upgrade_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var t = function t(key) {
var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
if (external_GravAdmin_namespaceObject.translations && external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN && external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN[key]) {
return external_GravAdmin_namespaceObject.translations.PLUGIN_ADMIN[key];
}
return fallback;
};
var r = function r(key, value) {
var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var template = t(key, fallback);
if (!template || typeof template.replace !== 'function') {
return fallback.replace('%s', value);
}
return template.replace('%s', value);
};
var STAGE_TITLES = {
queued: function queued() {
return t('SAFE_UPGRADE_STAGE_QUEUED', 'Waiting for worker');
},
initializing: function initializing() {
return t('SAFE_UPGRADE_STAGE_INITIALIZING', 'Preparing upgrade');
},
downloading: function downloading() {
return t('SAFE_UPGRADE_STAGE_DOWNLOADING', 'Downloading update');
},
snapshot: function snapshot() {
return t('SAFE_UPGRADE_STAGE_SNAPSHOT', 'Creating backup snapshot');
},
installing: function installing() {
return t('SAFE_UPGRADE_STAGE_INSTALLING', 'Installing update');
},
rollback: function rollback() {
return t('SAFE_UPGRADE_STAGE_ROLLBACK', 'Restoring snapshot');
},
finalizing: function finalizing() {
return t('SAFE_UPGRADE_STAGE_FINALIZING', 'Finalizing changes');
},
complete: function complete() {
return t('SAFE_UPGRADE_STAGE_COMPLETE', 'Upgrade complete');
},
error: function error() {
return t('SAFE_UPGRADE_STAGE_ERROR', 'Upgrade encountered an error');
}
};
var SafeUpgrade = /*#__PURE__*/function () {
function SafeUpgrade(updatesInstance) {
safe_upgrade_classCallCheck(this, SafeUpgrade);
this.updates = updatesInstance;
this.modalElement = external_jQuery_default()('[data-remodal-id="update-grav"]');
this.modal = this.modalElement.remodal({
hashTracking: false
});
this.steps = {
preflight: this.modalElement.find('[data-safe-upgrade-step="preflight"]'),
progress: this.modalElement.find('[data-safe-upgrade-step="progress"]'),
result: this.modalElement.find('[data-safe-upgrade-step="result"]')
};
this.buttons = {
start: this.modalElement.find('[data-safe-upgrade-action="start"]'),
cancel: this.modalElement.find('[data-safe-upgrade-action="cancel"]'),
recheck: this.modalElement.find('[data-safe-upgrade-action="recheck"]'),
finish: this.modalElement.find('[data-safe-upgrade-action="finish"]')
};
this.urls = this.buildUrls();
this.decisions = {};
this.pollTimer = null;
this.statusRequest = null;
this.isPolling = false;
this.active = false;
this.jobId = null;
this.statusFailures = 0;
this.statusContext = null;
this.statusIdleCount = 0;
this.currentStage = null;
this.stageEnteredAt = 0;
this.directStatusUrl = this.resolveDirectStatusUrl();
this.preferDirectStatus = !!this.directStatusUrl;
this.modalLocked = false;
this.lastOverallPercent = 0;
this.registerEvents();
}
return safe_upgrade_createClass(SafeUpgrade, [{
key: "buildUrls",
value: function buildUrls() {
var task = "task".concat(external_GravAdmin_namespaceObject.config.param_sep);
var nonce = "admin-nonce".concat(external_GravAdmin_namespaceObject.config.param_sep).concat(external_GravAdmin_namespaceObject.config.admin_nonce);
var base = "".concat(external_GravAdmin_namespaceObject.config.base_url_relative, "/update.json");
return {
preflight: "".concat(base, "/").concat(task, "safeUpgradePreflight/").concat(nonce),
start: "".concat(base, "/").concat(task, "safeUpgradeStart/").concat(nonce),
status: "".concat(base, "/").concat(task, "safeUpgradeStatus/").concat(nonce)
};
}
}, {
key: "registerEvents",
value: function registerEvents() {
var _this = this;
external_jQuery_default()(document).on('click', '#grav-update-button', function (event) {
if (external_jQuery_default()(event.currentTarget).hasClass('pointer-events-none')) {
return;
}
event.preventDefault();
_this.open();
});
this.modalElement.on('closed', function () {
_this.stopPolling();
_this.active = false;
});
this.modalElement.on('click', '[data-safe-upgrade-action="recheck"]', function (event) {
event.preventDefault();
if (!_this.active) {
return;
}
_this.fetchPreflight(true);
});
this.modalElement.on('click', '[data-safe-upgrade-action="start"]', function (event) {
event.preventDefault();
if (external_jQuery_default()(event.currentTarget).prop('disabled')) {
return;
}
_this.startUpgrade();
});
this.modalElement.on('click', '[data-safe-upgrade-action="finish"]', function (event) {
event.preventDefault();
var button = external_jQuery_default()(event.currentTarget);
if (button.prop('disabled')) {
return;
}
_this.modalLocked = false;
_this.modal.close('finish');
setTimeout(function () {
return window.location.reload();
}, 75);
});
this.modalElement.on('change', '[data-safe-upgrade-decision]', function (event) {
var target = external_jQuery_default()(event.currentTarget);
var decision = target.val();
var type = target.data('safe-upgrade-decision');
_this.decisions[type] = decision;
_this.updateStartButtonState();
});
this.modalElement.on('closing', function (event) {
if (_this.modalLocked && event.reason !== 'finish') {
event.preventDefault();
}
});
}
}, {
key: "setPayload",
value: function setPayload() {
var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.payload = payload;
}
}, {
key: "open",
value: function open() {
this.active = true;
this.decisions = {};
this.statusFailures = 0;
this.preferDirectStatus = !!this.directStatusUrl;
this.statusContext = null;
this.statusIdleCount = 0;
this.currentStage = null;
this.stageEnteredAt = 0;
this.modalLocked = false;
this.lastOverallPercent = 0;
this.renderLoading();
this.modal.open();
this.fetchPreflight();
}
}, {
key: "renderLoading",
value: function renderLoading() {
this.modalLocked = false;
this.resetFooterButtons();
this.switchStep('preflight');
this.steps.preflight.html("\n
\n
\n
".concat(t('SAFE_UPGRADE_CHECKING', 'Running preflight checks...'), "
\n
\n "));
this.buttons.start.prop('disabled', true).addClass('hidden');
this.modalElement.find('[data-safe-upgrade-footer]').removeClass('hidden');
}
}, {
key: "fetchPreflight",
value: function fetchPreflight() {
var _this2 = this;
var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!silent) {
this.renderLoading();
} else {
this.setRecheckLoading(true);
}
var done = function done() {
if (silent) {
_this2.setRecheckLoading(false);
}
};
var requestPromise = utils_request(this.urls.preflight, function (response) {
if (!_this2.active) {
done();
return;
}
if (response.status === 'error') {
done();
_this2.renderPreflightError(response.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.'));
return;
}
_this2.renderPreflight(response.data || {});
done();
});
if (silent && requestPromise && typeof requestPromise["catch"] === 'function') {
requestPromise["catch"](function () {
return done();
});
}
}
}, {
key: "renderPreflightError",
value: function renderPreflightError(message) {
this.switchStep('preflight');
this.steps.preflight.html("\n
\n
".concat(message, "
\n
").concat(t('SAFE_UPGRADE_RECHECK', 'Re-run Checks'), " \n
\n "));
this.buttons.start.prop('disabled', true).addClass('hidden');
}
}, {
key: "renderPreflight",
value: function renderPreflight(data) {
var blockers = [];
var version = data.version || {};
var releaseDate = version.release_date || '';
var packageSize = version.package_size ? formatBytes(version.package_size) : t('SAFE_UPGRADE_UNKNOWN_SIZE', 'unknown');
var warnings = data.preflight && data.preflight.warnings || [];
var pending = data.preflight && data.preflight.plugins_pending || {};
var isMajorUpgrade = !!(data.preflight && data.preflight.is_major_minor_upgrade);
var hasPendingUpdates = Object.keys(pending).length > 0;
var psrConflicts = data.preflight && data.preflight.psr_log_conflicts || {};
var monologConflicts = data.preflight && data.preflight.monolog_conflicts || {};
if (data.status === 'error') {
blockers.push(data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.'));
}
if (!data.requirements || !data.requirements.meets) {
blockers.push(r('SAFE_UPGRADE_REQUIREMENTS_FAIL', data.requirements ? data.requirements.minimum_php : '?', 'PHP %s or newer is required before continuing.'));
}
if (data.symlinked) {
blockers.push(t('GRAV_SYMBOLICALLY_LINKED', 'Grav is symbolically linked. Upgrade will not be available.'));
}
if (data.safe_upgrade && data.safe_upgrade.enabled === false) {
blockers.push(t('SAFE_UPGRADE_DISABLED', 'Safe upgrade is disabled. Enable it in Configuration â–¶ System â–¶ Updates.'));
}
if (!data.safe_upgrade || !data.safe_upgrade.staging_ready) {
var err = data.safe_upgrade && data.safe_upgrade.error ? data.safe_upgrade.error : t('SAFE_UPGRADE_STAGING_ERROR', 'Safe upgrade staging directory is not writable.');
blockers.push(err);
}
if (!data.upgrade_available) {
blockers.push(t('SAFE_UPGRADE_NOT_AVAILABLE', 'No Grav update is available.'));
}
if (hasPendingUpdates && isMajorUpgrade) {
blockers.push(t('SAFE_UPGRADE_PENDING_HINT', 'Because this is a major upgrade, update all plugins and themes before continuing to ensure maximum compatibility.'));
}
var psrWarningItems = Object.keys(psrConflicts).map(function (slug) {
var info = psrConflicts[slug] || {};
var requires = info.requires || '*';
return "
".concat(t('SAFE_UPGRADE_WARNINGS_PSR_ITEM', 'Potential psr/log conflict:'), " ").concat(slug, " — ").concat(r('SAFE_UPGRADE_CONFLICTS_REQUIRES', requires, 'Requires psr/log %s'), " ");
});
var monologWarningItems = Object.keys(monologConflicts).map(function (slug) {
var entries = Array.isArray(monologConflicts[slug]) ? monologConflicts[slug] : [];
var details = entries.map(function (entry) {
var method = entry.method || '';
var file = entry.file ? basename(entry.file) : '';
return "
".concat(method, " ").concat(file ? "".concat(file, "") : '', " ");
}).join(', ');
var description = details || t('SAFE_UPGRADE_WARNINGS_MONOLOG_UNKNOWN', 'Review the plugin for potential API changes.');
return "
".concat(t('SAFE_UPGRADE_WARNINGS_MONOLOG_ITEM', 'Potential Monolog conflict:'), " ").concat(slug, " — ").concat(description, " ");
});
var filteredWarnings = warnings.filter(function (warning) {
var lower = (warning || '').toLowerCase();
var isPsrRelated = lower.includes('psr/log');
var isMonologRelated = lower.includes('monolog');
return !isPsrRelated && !isMonologRelated;
});
var warningsList = filteredWarnings.length || psrWarningItems.length || monologWarningItems.length ? "\n
\n \n \n
\n ").concat(filteredWarnings.map(function (warning) {
return "".concat(warning, " ");
}).join(''), "\n ").concat(psrWarningItems.join(''), "\n ").concat(monologWarningItems.join(''), "\n \n
\n \n ") : '';
var pendingList = hasPendingUpdates ? "\n
\n \n \n
\n ").concat(Object.keys(pending).map(function (slug) {
var item = pending[slug] || {};
var type = item.type || 'plugin';
var current = item.current || t('SAFE_UPGRADE_UNKNOWN_VERSION', 'unknown');
var next = item.available || t('SAFE_UPGRADE_UNKNOWN_VERSION', 'unknown');
return "".concat(slug, " (").concat(type, ") ").concat(current, " → ").concat(next, " ");
}).join(''), "\n \n
\n \n ") : '';
var psrList = Object.keys(psrConflicts).length ? "\n
\n ") : '';
var monologList = Object.keys(monologConflicts).length ? "\n
\n ") : '';
var blockersList = blockers.length ? "\n
\n \n \n
").concat(blockers.map(function (item) {
return "".concat(item, " ");
}).join(''), " \n
\n \n ") : '';
var summary = "\n
\n ".concat(r('SAFE_UPGRADE_SUMMARY_CURRENT', version.local || '?', 'Current Grav version: v%s '), "
\n ").concat(r('SAFE_UPGRADE_SUMMARY_REMOTE', version.remote || '?', 'Available Grav version: v%s '), "
\n ").concat(releaseDate ? r('SAFE_UPGRADE_RELEASED_ON', releaseDate, 'Released on %s') : '', "
\n ").concat(r('SAFE_UPGRADE_PACKAGE_SIZE', packageSize, 'Package size: %s'), "
\n \n ");
this.steps.preflight.html("\n
\n ".concat(summary, "\n ").concat(warningsList, "\n ").concat(pendingList, "\n ").concat(psrList, "\n ").concat(monologList, "\n ").concat(blockersList, "\n
\n "));
this.switchStep('preflight');
var hasBlockingConflicts = Object.keys(psrConflicts).length && !this.decisions.psr_log || Object.keys(monologConflicts).length && !this.decisions.monolog;
var canStart = !blockers.length && !hasBlockingConflicts;
this.buttons.start.removeClass('hidden').prop('disabled', !canStart).text(t('SAFE_UPGRADE_START', 'Start Safe Upgrade'));
if (Object.keys(psrConflicts).length && !this.decisions.psr_log) {
this.decisions.psr_log = 'disable';
}
if (Object.keys(monologConflicts).length && !this.decisions.monolog) {
this.decisions.monolog = 'disable';
}
this.updateStartButtonState();
}
}, {
key: "renderDecisionSelect",
value: function renderDecisionSelect(type) {
var currentDecision = this.decisions[type] || 'disable';
var name = "safe-upgrade-decision-".concat(type);
var ariaLabel = t('SAFE_UPGRADE_DECISION_PROMPT', 'When conflicts are detected:');
var options = [{
value: 'disable',
label: t('SAFE_UPGRADE_DECISION_DISABLE', 'Disable conflicting plugins'),
description: t('SAFE_UPGRADE_DECISION_DISABLE_DESC', 'Temporarily disable conflicting plugins during the upgrade.')
}, {
value: 'continue',
label: t('SAFE_UPGRADE_DECISION_CONTINUE', 'Continue with plugins enabled'),
description: t('SAFE_UPGRADE_DECISION_CONTINUE_DESC', 'Proceed with plugins enabled. This may require manual fixes.')
}];
return "\n
\n ").concat(options.map(function (option) {
return "\n \n \n \n ").concat(option.label, " \n ").concat(option.description, " \n \n \n ");
}).join(''), "\n
\n ");
}
}, {
key: "updateStartButtonState",
value: function updateStartButtonState() {
var _this3 = this;
var decisionInputs = this.modalElement.find('[data-safe-upgrade-decision]');
var unresolved = [];
decisionInputs.each(function (index, element) {
var input = external_jQuery_default()(element);
var key = input.data('safe-upgrade-decision');
if (!_this3.decisions[key]) {
unresolved.push(key);
}
});
var hasUnresolvedConflicts = unresolved.length > 0;
var blockers = this.steps.preflight.find('.safe-upgrade-blockers li');
var disabled = hasUnresolvedConflicts || blockers.length > 0;
this.buttons.start.prop('disabled', disabled);
}
}, {
key: "setRecheckLoading",
value: function setRecheckLoading(state) {
var button = this.modalElement.find('[data-safe-upgrade-action="recheck"]');
if (!button.length) {
return;
}
var dataKey = 'safe-upgrade-recheck-label';
if (state) {
if (!button.data(dataKey)) {
button.data(dataKey, button.html());
}
button.prop('disabled', true).addClass('is-loading').html("\n
\n
".concat(t('SAFE_UPGRADE_RECHECKING', 'Re-running Checks...'), " \n "));
} else {
var original = button.data(dataKey);
button.prop('disabled', false).removeClass('is-loading');
if (original) {
button.html(original);
button.removeData(dataKey);
} else {
button.html(t('SAFE_UPGRADE_RECHECK', 'Re-run Checks'));
}
}
}
}, {
key: "startUpgrade",
value: function startUpgrade() {
var _this4 = this;
this.switchStep('progress');
this.lastOverallPercent = 0;
this.renderProgress({
stage: 'initializing',
message: t('SAFE_UPGRADE_STAGE_INITIALIZING', 'Preparing upgrade'),
percent: 0
});
this.buttons.start.prop('disabled', true);
this.buttons.finish.addClass('hidden').prop('disabled', true);
this.modalLocked = false;
this.stopPolling();
this.jobId = null;
var decisionFields = {};
Object.keys(this.decisions || {}).forEach(function (key) {
var value = _this4.decisions[key];
if (value) {
decisionFields["decisions[".concat(key, "]")] = value;
}
});
var body = decisionFields;
utils_request(this.urls.start, {
method: 'post',
body: body
}, function (response) {
if (!_this4.active) {
return;
}
if (response.status === 'error') {
_this4.stopPolling();
_this4.renderProgress({
stage: 'error',
message: response.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.'),
percent: null
});
_this4.renderResult({
status: 'error',
message: response.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.')
});
return;
}
var data = response.data || {};
if (data.status === 'error') {
_this4.stopPolling();
_this4.renderProgress({
stage: 'error',
message: data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.'),
percent: null
});
_this4.renderResult(data);
return;
}
if (data.fallback) {
_this4.renderResult(data);
_this4.stopPolling();
_this4.renderProgress({
stage: data.status === 'success' ? 'complete' : 'error',
message: data.message || t('SAFE_UPGRADE_STAGE_COMPLETE', 'Upgrade complete'),
percent: data.status === 'success' ? 100 : null,
target_version: data.version || data.manifest && data.manifest.target_version || null,
manifest: data.manifest || null
});
return;
}
if (data.status === 'queued' && data.job_id) {
_this4.jobId = data.job_id;
if (data.progress) {
_this4.renderProgress(data.progress);
}
_this4.statusFailures = 0;
_this4.preferDirectStatus = !!_this4.directStatusUrl;
_this4.statusContext = data.context || null;
_this4.beginPolling(1200);
} else {
_this4.renderResult(data);
_this4.stopPolling();
}
});
}
}, {
key: "resolveDirectStatusUrl",
value: function resolveDirectStatusUrl() {
var scriptPath = '/___safe-upgrade-status';
var join = function join(base, path) {
if (!base) {
return path;
}
var trimmed = base.endsWith('/') ? base.slice(0, -1) : base;
return "".concat(trimmed).concat(path);
};
var normalize = function normalize(url) {
return url.replace(/([^:]\/)\/+/g, '$1');
};
var candidates = [external_GravAdmin_namespaceObject.config.base_url_simple || '', (external_GravAdmin_namespaceObject.config.base_url_relative || '').replace(/\/admin\/?$/, ''), ''];
for (var _i = 0, _candidates = candidates; _i < _candidates.length; _i++) {
var base = _candidates[_i];
if (typeof base !== 'string') {
continue;
}
var candidate = normalize(join(base, scriptPath));
if (candidate) {
return candidate;
}
}
return scriptPath;
}
}, {
key: "resolveStatusEndpoint",
value: function resolveStatusEndpoint() {
var useDirect = this.directStatusUrl && this.preferDirectStatus;
var url = useDirect ? this.directStatusUrl : this.urls.status;
var params = [];
if (this.jobId) {
params.push("job=".concat(encodeURIComponent(this.jobId)));
}
if (this.statusContext) {
params.push("context=".concat(encodeURIComponent(this.statusContext)));
}
if (params.length) {
url += (url.includes('?') ? '&' : '?') + params.join('&');
}
return {
url: url,
direct: useDirect
};
}
}, {
key: "beginPolling",
value: function beginPolling() {
var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1200;
if (this.isPolling) {
return;
}
this.isPolling = true;
this.schedulePoll(delay);
}
}, {
key: "schedulePoll",
value: function schedulePoll() {
var _this5 = this;
var delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1200;
this.clearPollTimer();
if (!this.isPolling) {
return;
}
this.pollTimer = setTimeout(function () {
return _this5.fetchStatus(true);
}, delay);
}
}, {
key: "clearPollTimer",
value: function clearPollTimer() {
if (this.pollTimer) {
clearTimeout(this.pollTimer);
this.pollTimer = null;
}
}
}, {
key: "fetchStatus",
value: function fetchStatus() {
var _this6 = this;
var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.statusRequest) {
return;
}
this.pollTimer = null;
var nextStage = null;
var jobComplete = false;
var jobFailed = false;
var handled = false;
var lastPayload = null;
console.debug('[SafeUpgrade] poll status');
var endpoint = this.resolveStatusEndpoint();
var statusUrl = endpoint.url;
var usingDirect = endpoint.direct;
var requestOptions = {
silentErrors: true
};
this.statusRequest = utils_request(statusUrl, requestOptions, function (response) {
console.debug('[SafeUpgrade] status response', response);
if (!response) {
_this6.statusFailures += 1;
return;
}
handled = true;
_this6.statusFailures = 0;
if (response.status === 'error') {
if (!silent) {
_this6.renderProgress({
stage: 'error',
message: response.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.'),
percent: null
});
}
nextStage = 'error';
jobFailed = true;
return;
}
var payload = response.data || {};
lastPayload = payload;
if (Object.prototype.hasOwnProperty.call(payload, 'context')) {
_this6.statusContext = payload.context || null;
}
var job = payload.job || {};
var data = payload.progress || payload;
nextStage = data.stage || null;
if (!job || !Object.keys(job).length) {
_this6.statusIdleCount += 1;
} else {
_this6.statusIdleCount = 0;
}
_this6.renderProgress(data, job);
if (job.status === 'error') {
nextStage = 'error';
var message = job.error || data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.');
_this6.renderProgress({
stage: 'error',
message: message,
percent: null
}, job);
jobFailed = true;
} else if (job.status === 'success') {
if (data.stage !== 'complete') {
var completePayload = {
stage: 'complete',
message: t('SAFE_UPGRADE_STAGE_COMPLETE', 'Upgrade complete'),
percent: 100,
target_version: job.result && job.result.version || data.target_version || null,
manifest: job.result && job.result.manifest || data.manifest || null
};
_this6.renderProgress(completePayload, job);
nextStage = 'complete';
}
jobComplete = true;
} else if (!job.status && data.stage === 'complete') {
jobComplete = true;
}
});
var finalize = function finalize() {
_this6.statusRequest = null;
if (!_this6.isPolling) {
return;
}
if (!handled) {
if (usingDirect && _this6.statusFailures >= 3) {
_this6.preferDirectStatus = false;
_this6.statusFailures = 0;
_this6.statusIdleCount = 0;
_this6.schedulePoll();
} else {
var delay = Math.min(5000, 1200 * Math.max(1, _this6.statusFailures));
_this6.schedulePoll(delay);
}
} else if ((!lastPayload || !lastPayload.job || !Object.keys(lastPayload.job).length) && usingDirect && _this6.statusIdleCount >= 5) {
_this6.preferDirectStatus = false;
_this6.statusFailures = 0;
_this6.statusIdleCount = 0;
_this6.schedulePoll();
} else if (jobFailed) {
_this6.stopPolling();
_this6.jobId = null;
} else if (jobComplete || nextStage === 'complete') {
_this6.stopPolling();
_this6.jobId = null;
} else {
_this6.schedulePoll();
}
};
this.statusRequest.then(finalize, finalize);
}
}, {
key: "renderProgress",
value: function renderProgress(data) {
var _this7 = this;
var job = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (!data) {
return;
}
var stage = data.stage || 'initializing';
if (stage !== this.currentStage) {
this.currentStage = stage;
this.stageEnteredAt = Date.now();
}
var titleResolver = STAGE_TITLES[stage] || STAGE_TITLES.initializing;
var title = titleResolver();
var percent = typeof data.percent === 'number' ? data.percent : null;
var scaledPercent = function scaledPercent() {
if (stage === 'queued') {
return 0;
}
if (stage === 'initializing') {
return percent !== null ? Math.min(Math.max(percent, 0), 5) : 5;
}
if (stage === 'downloading') {
return _this7.scaleStagePercent(5, 45, percent, 2);
}
if (stage === 'snapshot') {
return _this7.scaleStagePercent(45, 70, percent, 2);
}
if (stage === 'installing') {
return _this7.scaleStagePercent(70, 95, percent, 3);
}
if (stage === 'rollback') {
return _this7.scaleStagePercent(40, 95, percent, 3);
}
if (stage === 'finalizing') {
return _this7.scaleStagePercent(50, 99, percent, 1.5);
}
if (stage === 'complete') {
return 100;
}
if (stage === 'error') {
return null;
}
return percent;
};
percent = scaledPercent();
if (percent !== null) {
var baseline = typeof this.lastOverallPercent === 'number' ? this.lastOverallPercent : 0;
percent = Math.max(percent, baseline);
this.lastOverallPercent = percent;
}
var displayPercent = percent !== null ? Math.round(percent) : null;
var percentLabel = displayPercent !== null ? "".concat(displayPercent, "%") : '';
var message = typeof data.message === 'string' ? data.message : '';
var normalize = function normalize(value) {
return value.replace(/\u2026/g, '...').replace(/\.+$/, '').trim().toLowerCase();
};
var normalizedTitle = normalize(title || '');
var normalizedMessage = normalize(message || '');
var shouldShowMessage = stage === 'error' ? message.trim().length > 0 : message && stage !== 'installing' && stage !== 'finalizing' && normalizedMessage !== '' && normalizedMessage !== normalizedTitle;
var statusLine = job && job.status ? "
".concat(t('SAFE_UPGRADE_JOB_STATUS', 'Status'), ": ").concat(job.status.toUpperCase(), " ").concat(job.error ? " — ".concat(job.error) : '', "
") : '';
var animateBar = stage !== 'complete' && stage !== 'error' && percent !== null;
var barClass = "safe-upgrade-progress-bar".concat(animateBar ? ' is-active' : '');
var detailMessage = shouldShowMessage ? "
".concat(message, "
") : '';
this.steps.progress.html("\n
\n
".concat(title, " \n ").concat(detailMessage, "\n ").concat(statusLine, "\n ").concat(percentLabel ? "
").concat(percentLabel, "
") : '', "\n
\n "));
this.switchStep('progress');
if (stage === 'complete') {
this.renderResult({
status: 'success',
manifest: data.manifest || null,
version: data.target_version || null
});
} else if (stage === 'error') {
this.renderResult({
status: 'error',
message: data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.')
});
}
}
}, {
key: "renderResult",
value: function renderResult(result) {
var status = result.status || 'success';
if (status === 'success' || status === 'finalized') {
var manifest = result.manifest || {};
var target = result.version || manifest.target_version || '';
var identifier = manifest.id || '';
this.ensureSuccessBannerStyles();
this.steps.result.html("\n
\n
\n
\n
\n
".concat(t('SAFE_UPGRADE_STAGE_COMPLETE', 'Upgrade complete'), "
\n
").concat(r('SAFE_UPGRADE_RESULT_SUCCESS', target, 'Grav Upgrade to v%s Successful!'), " \n
\n
\n
\n ").concat(identifier ? "
".concat(r('SAFE_UPGRADE_RESULT_MANIFEST', identifier, 'Snapshot reference: %s'), "
") : '', "\n
").concat(t('SAFE_UPGRADE_RESULT_HINT', 'Restore snapshots from Tools → Restore Grav.'), "
\n
\n
\n "));
this.switchStep('result');
external_jQuery_default()('[data-gpm-grav]').remove();
if (target) {
external_jQuery_default()('#footer .grav-version').html("v".concat(target));
}
if (this.updates) {
this.updates.fetch(true);
}
this.prepareCompletionFooter();
} else if (status === 'noop') {
this.steps.result.html("\n
\n
".concat(t('SAFE_UPGRADE_RESULT_NOOP', 'Grav is already up to date.'), " \n \n "));
this.switchStep('result');
this.prepareCompletionFooter();
} else {
this.steps.result.html("\n
\n
".concat(t('SAFE_UPGRADE_RESULT_FAILURE', 'Safe upgrade failed'), " \n
").concat(result.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.'), "
\n
\n "));
this.switchStep('result');
this.modalLocked = false;
this.buttons.finish.addClass('hidden').prop('disabled', true);
this.buttons.cancel.removeClass('hidden').prop('disabled', false);
this.buttons.recheck.removeClass('hidden').prop('disabled', false);
}
}
}, {
key: "ensureSuccessBannerStyles",
value: function ensureSuccessBannerStyles() {
if (external_jQuery_default()('#safe-upgrade-success-banner-styles').length) {
return;
}
var css = "\n .safe-upgrade-result.success {\n background: rgba(41, 182, 94, 0.08);\n border: 1px solid rgba(41, 182, 94, 0.24);\n border-radius: 12px;\n padding: 1.3rem 1.4rem;\n box-shadow: 0 14px 32px rgba(41, 182, 94, 0.18);\n margin-bottom: 1rem;\n text-align: left;\n }\n .safe-upgrade-result.success .safe-upgrade-result__banner {\n display: flex;\n align-items: center;\n gap: 0.9rem;\n margin-bottom: 0.85rem;\n }\n .safe-upgrade-result.success .safe-upgrade-result__icon {\n width: 44px;\n height: 44px;\n border-radius: 50%;\n background: #27ae60;\n color: #fff;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 1.25rem;\n box-shadow: 0 10px 22px rgba(39, 174, 96, 0.35);\n }\n .safe-upgrade-result.success .safe-upgrade-result__label {\n font-size: 0.82rem;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n font-weight: 600;\n margin: 0 0 0.15rem;\n color: rgba(39, 174, 96, 0.85);\n }\n .safe-upgrade-result.success h3 {\n margin: 0;\n font-size: 1.2rem;\n color: #14301d;\n }\n .safe-upgrade-result.success .safe-upgrade-result__details {\n font-size: 0.95rem;\n color: rgba(20, 48, 29, 0.9);\n }\n .safe-upgrade-result.success .safe-upgrade-result__details p {\n margin: 0.4rem 0;\n }\n ";
external_jQuery_default()('