blob: f45afe687f47bd2edb0e91ee92912cdeaf350ebb [file] [log] [blame]
/*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:--
-- Xinha (is not htmlArea) - http://xinha.gogo.co.nz/
--
-- Use of Xinha is granted by the terms of the htmlArea License (based on
-- BSD license) please read license.txt in this package for details.
--
-- Xinha was originally based on work by Mihai Bazon which is:
-- Copyright (c) 2003-2004 dynarch.com.
-- Copyright (c) 2002-2003 interactivetools.com, inc.
-- This copyright notice MUST stay intact for use.
--
-- This is the implementation of the standard popup dialog
--
-- Though "Dialog" looks like an object, it isn't really an object. Instead
-- it's just namespace for protecting global symbols.
--
--
-- $HeadURL: http://svn.xinha.org/trunk/modules/Dialogs/dialog.js $
-- $LastChangedDate: 2008-10-13 06:42:42 +1300 (Mon, 13 Oct 2008) $
-- $LastChangedRevision: 1084 $
-- $LastChangedBy: ray $
--------------------------------------------------------------------------*/
function Dialog(url, action, init) {
if (typeof init == "undefined") {
init = window; // pass this window object by default
}
if (typeof window.showModalDialog == 'function' && !Xinha.is_webkit) // webkit easily looses the selection with window.showModalDialog
{
Dialog._return = function(retVal) {
if (typeof action == 'function') action (retVal);
}
var r = window.showModalDialog(url, init, "dialogheight=300;dialogwidth=400;resizable=yes");
}
else
{
Dialog._geckoOpenModal(url, action, init);
}
}
Dialog._parentEvent = function(ev) {
setTimeout( function() { if (Dialog._modal && !Dialog._modal.closed) { Dialog._modal.focus() } }, 50);
try {
if (Dialog._modal && !Dialog._modal.closed) {
Xinha._stopEvent(ev);
}
} catch (e) {
//after closing the popup in IE the events are not released and trying to access Dialog._modal.closed causes an error
}
};
// should be a function, the return handler of the currently opened dialog.
Dialog._return = null;
// constant, the currently opened dialog
Dialog._modal = null;
// the dialog will read it's args from this variable
Dialog._arguments = null;
Dialog._selection = null;
Dialog._geckoOpenModal = function(url, action, init) {
var dlg = window.open(url, "hadialog",
"toolbar=no,menubar=no,personalbar=no,width=10,height=10," +
"scrollbars=no,resizable=yes,modal=yes,dependable=yes");
Dialog._modal = dlg;
Dialog._arguments = init;
// capture some window's events
function capwin(w) {
Xinha._addEvent(w, "click", Dialog._parentEvent);
Xinha._addEvent(w, "mousedown", Dialog._parentEvent);
Xinha._addEvent(w, "focus", Dialog._parentEvent);
}
// release the captured events
function relwin(w) {
Xinha._removeEvent(w, "click", Dialog._parentEvent);
Xinha._removeEvent(w, "mousedown", Dialog._parentEvent);
Xinha._removeEvent(w, "focus", Dialog._parentEvent);
}
capwin(window);
// capture other frames, note the exception trapping, this is because
// we are not permitted to add events to frames outside of the current
// window's domain.
for (var i = 0; i < window.frames.length; i++) {try { capwin(window.frames[i]); } catch(e) { } };
// make up a function to be called when the Dialog ends.
Dialog._return = function (val) {
if (val && action) {
action(val);
}
relwin(window);
// capture other frames
for (var i = 0; i < window.frames.length; i++) { try { relwin(window.frames[i]); } catch(e) { } };
Dialog._modal = null;
};
Dialog._modal.focus();
};