Commit 82f8f24d authored by webchick's avatar webchick

Issue #2095225 by nod_, pameeela: Fixed Scrolling is broken on modals.

parent ab6961d0
...@@ -10,10 +10,12 @@ ...@@ -10,10 +10,12 @@
drupalSettings.dialog = { drupalSettings.dialog = {
autoOpen: true, autoOpen: true,
// This option will turn off resizable and draggable.
autoResize: true, autoResize: true,
maxHeight: '95%',
dialogClass: '', dialogClass: '',
close: function (e) { close: function (event) {
Drupal.detachBehaviors(e.target, null, 'unload'); Drupal.detachBehaviors(event.target, null, 'unload');
} }
}; };
...@@ -24,9 +26,13 @@ Drupal.dialog = function (element, options) { ...@@ -24,9 +26,13 @@ Drupal.dialog = function (element, options) {
// Trigger a global event to allow scripts to bind events to the dialog. // Trigger a global event to allow scripts to bind events to the dialog.
$(window).trigger('dialog:beforecreate', [dialog, $element, settings]); $(window).trigger('dialog:beforecreate', [dialog, $element, settings]);
$element.dialog(settings); $element.dialog(settings);
if (settings.autoResize !== 'false' && settings.autoResize !== false) { if (settings.autoResize === true || settings.autoResize === 'true') {
$(window).on('resize.dialogResize scroll.dialogResize', autoResize); $element
resetPosition(); .dialog('option', { resizable: false, draggable: false })
.dialog('widget').css('position', 'fixed');
$(window)
.on('resize.dialogResize scroll.dialogResize', settings, autoResize)
.trigger('resize.dialogResize');
} }
dialog.open = true; dialog.open = true;
$(window).trigger('dialog:aftercreate', [dialog, $element, settings]); $(window).trigger('dialog:aftercreate', [dialog, $element, settings]);
...@@ -49,22 +55,23 @@ Drupal.dialog = function (element, options) { ...@@ -49,22 +55,23 @@ Drupal.dialog = function (element, options) {
* be disabled by setting autoResize: false in the options array when creating * be disabled by setting autoResize: false in the options array when creating
* a new Drupal.dialog(). * a new Drupal.dialog().
*/ */
function resetPosition () { function resetPosition (event) {
var positionOptions = ['width', 'height', 'minWidth', 'minHeight', 'maxHeight', 'maxWidth', 'position']; var positionOptions = ['width', 'height', 'minWidth', 'minHeight', 'maxHeight', 'maxWidth', 'position'];
var windowHeight = $(window).height(); var windowHeight = $(window).height();
var adjustedOptions = $.extend({ position: { my: "center", at: "center", of: window }}, options); var adjustedOptions = {};
var optionValue, adjustedValue; var option, optionValue, adjustedValue;
for (var n = 0; n < positionOptions.length; n++) { for (var n = 0; n < positionOptions.length; n++) {
if (adjustedOptions[positionOptions[n]]) { option = positionOptions[n];
optionValue = adjustedOptions[positionOptions[n]]; optionValue = event.data[option];
if (optionValue) {
// jQuery UI does not support percentages on heights, convert to pixels. // jQuery UI does not support percentages on heights, convert to pixels.
if (positionOptions[n].match(/height/i) && typeof optionValue === 'string' && optionValue.match(/%$/)) { if (typeof optionValue === 'string' && /%$/.test(optionValue) && /height/i.test(option)) {
adjustedValue = parseInt(0.01 * parseInt(optionValue, 10) * windowHeight, 10); adjustedValue = parseInt(0.01 * parseInt(optionValue, 10) * windowHeight, 10);
// Don't force the dialog to be bigger vertically than needed. // Don't force the dialog to be bigger vertically than needed.
if (positionOptions[n] === 'height' && $element.parent().outerHeight() < adjustedValue) { if (option === 'height' && $element.parent().outerHeight() < adjustedValue) {
adjustedValue = 'auto'; adjustedValue = 'auto';
} }
adjustedOptions[positionOptions[n]] = adjustedValue; adjustedOptions[option] = adjustedValue;
} }
} }
} }
......
...@@ -217,9 +217,7 @@ Drupal.ckeditor = { ...@@ -217,9 +217,7 @@ Drupal.ckeditor = {
var classes = dialogSettings.dialogClass ? dialogSettings.dialogClass.split(' ') : []; var classes = dialogSettings.dialogClass ? dialogSettings.dialogClass.split(' ') : [];
classes.push('editor-dialog'); classes.push('editor-dialog');
dialogSettings.dialogClass = classes.join(' '); dialogSettings.dialogClass = classes.join(' ');
dialogSettings.maxHeight = '95%'; dialogSettings.autoResize = Drupal.checkWidthBreakpoint(600);
dialogSettings.resizable = false;
dialogSettings.autoResize = $(window).width() > 600;
// Add a "Loading…" message, hide it underneath the CKEditor toolbar, create // Add a "Loading…" message, hide it underneath the CKEditor toolbar, create
// a Drupal.ajax instance to load the dialog and trigger it. // a Drupal.ajax instance to load the dialog and trigger it.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment