Annotation of loncom/html/htmlarea/popupwin.js, revision 1.2
1.2 ! www 1: // (c) dynarch.com 2003-2004
! 2: // Distributed under the same terms as HTMLArea itself.
! 3:
1.1 www 4: function PopupWin(editor, title, handler, initFunction) {
5: this.editor = editor;
6: this.handler = handler;
7: var dlg = window.open("", "__ha_dialog",
1.2 ! www 8: "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40" +
1.1 www 9: "scrollbars=no,resizable=no");
10: this.window = dlg;
11: var doc = dlg.document;
12: this.doc = doc;
13: var self = this;
14:
15: var base = document.baseURI || document.URL;
16: if (base && base.match(/(.*)\/([^\/]+)/)) {
17: base = RegExp.$1 + "/";
18: }
1.2 ! www 19: if (typeof _editor_url != "undefined" && !/^\//.test(_editor_url)) {
! 20: // _editor_url doesn't start with '/' which means it's relative
! 21: // FIXME: there's a problem here, it could be http:// which
! 22: // doesn't start with slash but it's not relative either.
! 23: base += _editor_url;
! 24: } else
! 25: base = _editor_url;
! 26: if (!/\/$/.test(base)) {
! 27: // base does not end in slash, add it now
! 28: base += '/';
! 29: }
1.1 www 30: this.baseURL = base;
31:
32: doc.open();
33: var html = "<html><head><title>" + title + "</title>\n";
34: // html += "<base href='" + base + "htmlarea.js' />\n";
35: html += "<style type='text/css'>@import url(" + base + "htmlarea.css);</style></head>\n";
36: html += "<body class='dialog popupwin' id='--HA-body'></body></html>";
37: doc.write(html);
38: doc.close();
39:
40: // sometimes I Hate Mozilla... ;-(
41: function init2() {
42: var body = doc.body;
43: if (!body) {
44: setTimeout(init2, 25);
45: return false;
46: }
47: dlg.title = title;
48: doc.documentElement.style.padding = "0px";
49: doc.documentElement.style.margin = "0px";
50: var content = doc.createElement("div");
51: content.className = "content";
52: self.content = content;
53: body.appendChild(content);
54: self.element = body;
55: initFunction(self);
56: dlg.focus();
57: };
58: init2();
59: };
60:
61: PopupWin.prototype.callHandler = function() {
62: var tags = ["input", "textarea", "select"];
63: var params = new Object();
64: for (var ti in tags) {
65: var tag = tags[ti];
66: var els = this.content.getElementsByTagName(tag);
67: for (var j = 0; j < els.length; ++j) {
68: var el = els[j];
69: var val = el.value;
70: if (el.tagName.toLowerCase() == "input") {
71: if (el.type == "checkbox") {
72: val = el.checked;
73: }
74: }
75: params[el.name] = val;
76: }
77: }
78: this.handler(this, params);
79: return false;
80: };
81:
82: PopupWin.prototype.close = function() {
83: this.window.close();
84: };
85:
86: PopupWin.prototype.addButtons = function() {
87: var self = this;
88: var div = this.doc.createElement("div");
89: this.content.appendChild(div);
90: div.className = "buttons";
91: for (var i = 0; i < arguments.length; ++i) {
92: var btn = arguments[i];
93: var button = this.doc.createElement("button");
94: div.appendChild(button);
95: button.innerHTML = HTMLArea.I18N.buttons[btn];
96: switch (btn) {
97: case "ok":
98: button.onclick = function() {
99: self.callHandler();
100: self.close();
101: return false;
102: };
103: break;
104: case "cancel":
105: button.onclick = function() {
106: self.close();
107: return false;
108: };
109: break;
110: }
111: }
112: };
113:
114: PopupWin.prototype.showAtElement = function() {
115: var self = this;
116: // Mozilla needs some time to realize what's goin' on..
117: setTimeout(function() {
118: var w = self.content.offsetWidth + 4;
119: var h = self.content.offsetHeight + 4;
120: // size to content -- that's fuckin' buggy in all fuckin' browsers!!!
121: // so that we set a larger size for the dialog window and then center
122: // the element inside... phuck!
123:
124: // center...
125: var el = self.content;
126: var s = el.style;
127: // s.width = el.offsetWidth + "px";
128: // s.height = el.offsetHeight + "px";
129: s.position = "absolute";
130: s.left = (w - el.offsetWidth) / 2 + "px";
131: s.top = (h - el.offsetHeight) / 2 + "px";
132: if (HTMLArea.is_gecko) {
133: self.window.innerWidth = w;
134: self.window.innerHeight = h;
135: } else {
136: self.window.resizeTo(w + 8, h + 35);
137: }
138: }, 25);
139: };
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>