fix for broken GPM + fix for intermitten ajax error

Signed-off-by: Andy Miller <rhuk@mac.com>
This commit is contained in:
Andy Miller
2025-09-03 18:22:47 -06:00
parent b600ff25bc
commit 377da15ec1
3 changed files with 60 additions and 14 deletions

View File

@@ -13,8 +13,15 @@ const DOMBehaviors = {
preventUnload() {
let selector = '[name="task"][value^="save"], [data-delete-action], [data-flex-safe-action]';
if ($._data(window, 'events') && ($._data(window, 'events').beforeunload || []).filter((event) => event.namespace === '_grav').length) {
return;
// jQuery 3.x removed $._data, use $._data only if available (jQuery < 3.0)
// or check with jQuery's internal data store for jQuery >= 3.0
try {
const hasData = typeof $._data === 'function';
if (hasData && $._data(window, 'events') && ($._data(window, 'events').beforeunload || []).filter((event) => event.namespace === '_grav').length) {
return;
}
} catch (e) {
// $._data not available in jQuery 3.x+, continue with adding event handler
}
// Allow some elements to leave the page without native confirmation
@@ -33,8 +40,15 @@ const DOMBehaviors = {
preventClickAway() {
let selector = 'a[href]:not([href^="#"]):not([target="_blank"]):not([href^="javascript:"])';
if ($._data($(selector).get(0), 'events') && ($._data($(selector).get(0), 'events').click || []).filter((event) => event.namespace === '_grav')) {
return;
// jQuery 3.x removed $._data, use $._data only if available (jQuery < 3.0)
try {
const hasData = typeof $._data === 'function';
const element = $(selector).get(0);
if (element && hasData && $._data(element, 'events') && ($._data(element, 'events').click || []).filter((event) => event.namespace === '_grav')) {
return;
}
} catch (e) {
// $._data not available in jQuery 3.x+, continue with adding event handler
}
// Prevent clicking away if the form state is dirty

View File

@@ -7,7 +7,18 @@ import { Instance as Update } from './index';
// Dashboard update and Grav update
$(document).on('click.remodal', '[data-remodal-id="update-grav"] [data-remodal-action="confirm"]', () => {
const element = $('#grav-update-button');
element.html(`${translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT} ${formatBytes(Update.payload.grav.assets['grav-update'].size)}..`);
// Safely get the file size with fallback
let sizeText = '';
if (Update.payload &&
Update.payload.grav &&
Update.payload.grav.assets &&
Update.payload.grav.assets['grav-update'] &&
Update.payload.grav.assets['grav-update'].size) {
sizeText = ` ${formatBytes(Update.payload.grav.assets['grav-update'].size)}`;
}
element.html(`${translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT}${sizeText}..`);
element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin');