home *** CD-ROM | disk | FTP | other *** search
- // (c) dynarch.com 2003-2004
- // Distributed under the same terms as HTMLArea itself.
-
- function PopupWin(editor, title, handler, initFunction) {
- this.editor = editor;
- this.handler = handler;
- var dlg = window.open("", "__ha_dialog",
- "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40" +
- "scrollbars=no,resizable=no");
- this.window = dlg;
- var doc = dlg.document;
- this.doc = doc;
- var self = this;
-
- var base = document.baseURI || document.URL;
- if (base && base.match(/(.*)\/([^\/]+)/)) {
- base = RegExp.$1 + "/";
- }
- if (typeof _editor_url != "undefined" && !/^\//.test(_editor_url)) {
- // _editor_url doesn't start with '/' which means it's relative
- // FIXME: there's a problem here, it could be http:// which
- // doesn't start with slash but it's not relative either.
- base += _editor_url;
- } else
- base = _editor_url;
- if (!/\/$/.test(base)) {
- // base does not end in slash, add it now
- base += '/';
- }
- this.baseURL = base;
-
- doc.open();
- var html = "<html><head><title>" + title + "</title>\n";
- // html += "<base href='" + base + "htmlarea.js' />\n";
- html += "<style type='text/css'>@import url(" + base + "htmlarea.css);</style></head>\n";
- html += "<body class='dialog popupwin' id='--HA-body'></body></html>";
- doc.write(html);
- doc.close();
-
- // sometimes I Hate Mozilla... ;-(
- function init2() {
- var body = doc.body;
- if (!body) {
- setTimeout(init2, 25);
- return false;
- }
- dlg.title = title;
- doc.documentElement.style.padding = "0px";
- doc.documentElement.style.margin = "0px";
- var content = doc.createElement("div");
- content.className = "content";
- self.content = content;
- body.appendChild(content);
- self.element = body;
- initFunction(self);
- dlg.focus();
- };
- init2();
- };
-
- PopupWin.prototype.callHandler = function() {
- var tags = ["input", "textarea", "select"];
- var params = new Object();
- for (var ti in tags) {
- var tag = tags[ti];
- var els = this.content.getElementsByTagName(tag);
- for (var j = 0; j < els.length; ++j) {
- var el = els[j];
- var val = el.value;
- if (el.tagName.toLowerCase() == "input") {
- if (el.type == "checkbox") {
- val = el.checked;
- }
- }
- params[el.name] = val;
- }
- }
- this.handler(this, params);
- return false;
- };
-
- PopupWin.prototype.close = function() {
- this.window.close();
- };
-
- PopupWin.prototype.addButtons = function() {
- var self = this;
- var div = this.doc.createElement("div");
- this.content.appendChild(div);
- div.className = "buttons";
- for (var i = 0; i < arguments.length; ++i) {
- var btn = arguments[i];
- var button = this.doc.createElement("button");
- div.appendChild(button);
- button.innerHTML = HTMLArea.I18N.buttons[btn];
- switch (btn) {
- case "ok":
- button.onclick = function() {
- self.callHandler();
- self.close();
- return false;
- };
- break;
- case "cancel":
- button.onclick = function() {
- self.close();
- return false;
- };
- break;
- }
- }
- };
-
- PopupWin.prototype.showAtElement = function() {
- var self = this;
- // Mozilla needs some time to realize what's goin' on..
- setTimeout(function() {
- var w = self.content.offsetWidth + 4;
- var h = self.content.offsetHeight + 4;
- // size to content -- that's fuckin' buggy in all fuckin' browsers!!!
- // so that we set a larger size for the dialog window and then center
- // the element inside... phuck!
-
- // center...
- var el = self.content;
- var s = el.style;
- // s.width = el.offsetWidth + "px";
- // s.height = el.offsetHeight + "px";
- s.position = "absolute";
- s.left = (w - el.offsetWidth) / 2 + "px";
- s.top = (h - el.offsetHeight) / 2 + "px";
- if (HTMLArea.is_gecko) {
- self.window.innerWidth = w;
- self.window.innerHeight = h;
- } else {
- self.window.resizeTo(w + 8, h + 35);
- }
- }, 25);
- };
-