Skip to content
Snippets Groups Projects
Commit fcf01cc8 authored by Angie Byron's avatar Angie Byron
Browse files

Issue #2902429 by drpal, droplet, tedbow: Remove previous event handlers when...

Issue #2902429 by drpal, droplet, tedbow: Remove previous event handlers when opening new off-canvas block edit form in the off-canvas dialog
parent 21abcfde
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
...@@ -45,13 +45,28 @@ ...@@ -45,13 +45,28 @@
return $element.is('#drupal-off-canvas'); return $element.is('#drupal-off-canvas');
}, },
/**
* Remove off-canvas dialog events.
*
* @param {jQuery} $element
* The target element.
*/
removeOffCanvasEvents($element) {
$element.off('.off-canvas');
$(document).off('.off-canvas');
$(window).off('.off-canvas');
},
/** /**
* Handler fired before an off-canvas dialog has been opened. * Handler fired before an off-canvas dialog has been opened.
* @param {Object} settings * @param {Object} settings
* Settings related to the composition of the dialog. * Settings related to the composition of the dialog.
* @return {undefined} * @return {undefined}
*/ */
beforeCreate({ settings }) { beforeCreate({ settings, $element }) {
// Clean up previous dialog event handlers.
Drupal.offCanvas.removeOffCanvasEvents($element);
$('body').addClass('js-tray-open'); $('body').addClass('js-tray-open');
settings.dialogClass += ' ui-dialog-off-canvas'; settings.dialogClass += ' ui-dialog-off-canvas';
// @see http://api.jqueryui.com/position/ // @see http://api.jqueryui.com/position/
...@@ -72,11 +87,11 @@ ...@@ -72,11 +87,11 @@
* Handler fired after an off-canvas dialog has been closed. * Handler fired after an off-canvas dialog has been closed.
* @return {undefined} * @return {undefined}
*/ */
beforeClose() { beforeClose({ $element }) {
$('body').removeClass('js-tray-open'); $('body').removeClass('js-tray-open');
// Remove all *.off-canvas events // Remove all *.off-canvas events
$(document).off('.off-canvas'); Drupal.offCanvas.removeOffCanvasEvents($element);
$(window).off('.off-canvas');
Drupal.offCanvas.$mainCanvasWrapper.css(`padding-${Drupal.offCanvas.getEdge()}`, 0); Drupal.offCanvas.$mainCanvasWrapper.css(`padding-${Drupal.offCanvas.getEdge()}`, 0);
}, },
......
...@@ -14,8 +14,16 @@ ...@@ -14,8 +14,16 @@
isOffCanvas: function isOffCanvas($element) { isOffCanvas: function isOffCanvas($element) {
return $element.is('#drupal-off-canvas'); return $element.is('#drupal-off-canvas');
}, },
removeOffCanvasEvents: function removeOffCanvasEvents($element) {
$element.off('.off-canvas');
$(document).off('.off-canvas');
$(window).off('.off-canvas');
},
beforeCreate: function beforeCreate(_ref) { beforeCreate: function beforeCreate(_ref) {
var settings = _ref.settings; var settings = _ref.settings,
$element = _ref.$element;
Drupal.offCanvas.removeOffCanvasEvents($element);
$('body').addClass('js-tray-open'); $('body').addClass('js-tray-open');
settings.dialogClass += ' ui-dialog-off-canvas'; settings.dialogClass += ' ui-dialog-off-canvas';
...@@ -28,16 +36,18 @@ ...@@ -28,16 +36,18 @@
settings.height = $(window).height(); settings.height = $(window).height();
}, },
beforeClose: function beforeClose() { beforeClose: function beforeClose(_ref2) {
var $element = _ref2.$element;
$('body').removeClass('js-tray-open'); $('body').removeClass('js-tray-open');
$(document).off('.off-canvas'); Drupal.offCanvas.removeOffCanvasEvents($element);
$(window).off('.off-canvas');
Drupal.offCanvas.$mainCanvasWrapper.css('padding-' + Drupal.offCanvas.getEdge(), 0); Drupal.offCanvas.$mainCanvasWrapper.css('padding-' + Drupal.offCanvas.getEdge(), 0);
}, },
afterCreate: function afterCreate(_ref2) { afterCreate: function afterCreate(_ref3) {
var $element = _ref2.$element, var $element = _ref3.$element,
settings = _ref2.settings; settings = _ref3.settings;
var eventData = { settings: settings, $element: $element, offCanvasDialog: this }; var eventData = { settings: settings, $element: $element, offCanvasDialog: this };
...@@ -47,8 +57,8 @@ ...@@ -47,8 +57,8 @@
$(window).on('resize.off-canvas', eventData, debounce(Drupal.offCanvas.resetSize, 100)).trigger('resize.off-canvas'); $(window).on('resize.off-canvas', eventData, debounce(Drupal.offCanvas.resetSize, 100)).trigger('resize.off-canvas');
}, },
render: function render(_ref3) { render: function render(_ref4) {
var settings = _ref3.settings; var settings = _ref4.settings;
$('.ui-dialog-off-canvas, .ui-dialog-off-canvas .ui-dialog-titlebar').toggleClass('ui-dialog-empty-title', !settings.title); $('.ui-dialog-off-canvas, .ui-dialog-off-canvas .ui-dialog-titlebar').toggleClass('ui-dialog-empty-title', !settings.title);
}, },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment