1: // Though "Dialog" looks like an object, it isn't really an object. Instead
2: // it's just namespace for protecting global symbols.
3:
4: function Dialog(url, action, init) {
5: if (typeof init == "undefined") {
6: init = window; // pass this window object by default
7: }
8: if (document.all) { // here we hope that Mozilla will never support document.all
9: var value =
10: showModalDialog(url, init,
11: // window.open(url, '_blank',
12: "resizable: no; help: no; status: no; scroll: no");
13: if (action) {
14: action(value);
15: }
16: } else {
17: return Dialog._geckoOpenModal(url, action, init);
18: }
19: };
20:
21: Dialog._parentEvent = function(ev) {
22: if (Dialog._modal && !Dialog._modal.closed) {
23: Dialog._modal.focus();
24: // we get here in Mozilla only, anyway, so we can safely use
25: // the DOM version.
26: ev.preventDefault();
27: ev.stopPropagation();
28: }
29: };
30:
31: // should be a function, the return handler of the currently opened dialog.
32: Dialog._return = null;
33:
34: // constant, the currently opened dialog
35: Dialog._modal = null;
36:
37: // the dialog will read it's args from this variable
38: Dialog._arguments = null;
39:
40: Dialog._geckoOpenModal = function(url, action, init) {
41: var dlg = window.open(url, "ha_dialog",
42: "toolbar=no,menubar=no,personalbar=no,width=10,height=10," +
43: "scrollbars=no,resizable=no");
44: Dialog._modal = dlg;
45: Dialog._arguments = init;
46:
47: // capture some window's events
48: function capwin(w) {
49: w.addEventListener("click", Dialog._parentEvent, true);
50: w.addEventListener("mousedown", Dialog._parentEvent, true);
51: w.addEventListener("focus", Dialog._parentEvent, true);
52: };
53: // release the captured events
54: function relwin(w) {
55: w.removeEventListener("focus", Dialog._parentEvent, true);
56: w.removeEventListener("mousedown", Dialog._parentEvent, true);
57: w.removeEventListener("click", Dialog._parentEvent, true);
58: };
59: capwin(window);
60: // capture other frames
61: for (var i = 0; i < window.frames.length; capwin(window.frames[i++]));
62: // make up a function to be called when the Dialog ends.
63: Dialog._return = function (val) {
64: if (val && action) {
65: action(val);
66: }
67: relwin(window);
68: // capture other frames
69: for (var i = 0; i < window.frames.length; relwin(window.frames[i++]));
70: Dialog._modal = null;
71: };
72: };
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>