53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
![]() |
/**
|
||
|
* @file
|
||
|
* JavaScript behaviors to fix jQuery UI dialogs.
|
||
|
*/
|
||
|
|
||
|
(function ($, Drupal) {
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Ensure that ckeditor has focus when displayed inside of jquery-ui dialog widget
|
||
|
*
|
||
|
* @see http://stackoverflow.com/questions/20533487/how-to-ensure-that-ckeditor-has-focus-when-displayed-inside-of-jquery-ui-dialog
|
||
|
*/
|
||
|
var _allowInteraction = $.ui.dialog.prototype._allowInteraction;
|
||
|
$.ui.dialog.prototype._allowInteraction = function (event) {
|
||
|
if ($(event.target).closest('.cke_dialog').length) {
|
||
|
return true;
|
||
|
}
|
||
|
return _allowInteraction.apply(this, arguments);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Attaches webform dialog behaviors.
|
||
|
*
|
||
|
* @type {Drupal~behavior}
|
||
|
*
|
||
|
* @prop {Drupal~behaviorAttach} attach
|
||
|
* Attaches event listeners for webform dialogs.
|
||
|
*/
|
||
|
Drupal.behaviors.webformDialogEvents = {
|
||
|
attach: function () {
|
||
|
$(window).once('webform-dialog').on({
|
||
|
'dialog:aftercreate': function (event, dialog, $element, settings) {
|
||
|
setTimeout(function () {
|
||
|
var hasFocus = $element.find('[autofocus]:tabbable');
|
||
|
if (!hasFocus.length) {
|
||
|
// Move focus to first input which is not a button.
|
||
|
hasFocus = $element.find(':input:tabbable:not(:button)');
|
||
|
}
|
||
|
if (!hasFocus.length) {
|
||
|
// Move focus to close dialog button.
|
||
|
hasFocus = $element.parent().find('.ui-dialog-titlebar-close');
|
||
|
}
|
||
|
hasFocus.eq(0).focus();
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
})(jQuery, Drupal);
|