Index: lams_central/web/includes/javascript/dialog.js =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/includes/javascript/dialog.js,v diff -u -r1.1.2.14 -r1.1.2.15 --- lams_central/web/includes/javascript/dialog.js 28 Oct 2016 06:14:31 -0000 1.1.2.14 +++ lams_central/web/includes/javascript/dialog.js 28 Oct 2016 16:21:03 -0000 1.1.2.15 @@ -26,7 +26,6 @@ * If not, creates a new dialog with the given ID and init parameters. */ function showDialog(id, initParams, extraButtons, recreate) { - var dialog = $('#' + id); // is it open already? if (dialog.length > 0) { @@ -45,7 +44,7 @@ // use the input attributes or fall back to default ones initParams = $.extend({ 'autoOpen' : true, - 'modal' : true, + 'modal' : false, 'draggable' : true, 'resizable' : extraButtons == true, 'beforeClose' : function(){ @@ -76,16 +75,24 @@ if (initParams.resizable) { modalContent.resizable(); } - if (initParams.draggable && ! /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { - // breaks the close buttons on Android and iPhone - modalDialog.draggable(); + // breaks the close buttons on Android and iPhone + var draggable = initParams.draggable && ! /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); + if (draggable) { + modalDialog.draggable({ + 'cancel' : '.modal-body' + }); } // store extra attributes for dialog content internal use if (initParams.data) { dialog.data(initParams.data); } - dialog.on('show.bs.modal', initParams.open); + dialog.on('show.bs.modal', initParams.modal ? initParams.open : function(event){ + dialog.css('visibility', 'hidden'); + if (initParams.open) { + initParams.open.call(dialog, event); + } + }); dialog.on('hide.bs.modal', initParams.beforeClose); dialog.on('hidden.bs.modal', initParams.close); @@ -102,17 +109,27 @@ modalDialog.css({ 'margin' : 0 }); - dialog.width(modalDialog.outerWidth(true) + 5); - dialog.height(modalDialog.outerHeight(true) + 5); + dialog.width(modalDialog.outerWidth(true) + 15); + dialog.height(modalDialog.outerHeight(true) + 15); // remove overlay dialog.siblings('.modal-backdrop').remove(); + dialog.css('visibility', 'visible'); - dialog.position({ - 'of' : 'body' - }); + // center the dialog or put it into previously defined position + var position = dialog.data('position'); + if (position !== false) { + position = position || { + 'my' : 'top', + 'at' : 'top+15px', + 'of' : 'body' + }; + dialog.position(position); + } + - if (initParams.draggable) { + if (draggable) { modalDialog.on('drag', function(event, ui){ + // pass the event to the dialog, not its internal element dialog.offset({ 'top' : ui.offset.top + 5, 'left' : ui.offset.left + 5 @@ -122,6 +139,13 @@ }); }); } + + if (initParams.resizable) { + modalContent.on('resize', function(event, ui){ + dialog.width(ui.size.width + 15); + dialog.height(ui.size.height + 15); + }); + } }); }