File:  [LON-CAPA] / loncom / html / htmlarea / Attic / popupwin.js
Revision 1.2: download - view: text, annotated - select for diffs
Tue Jun 1 23:46:10 2004 UTC (20 years, 1 month ago) by www
Branches: MAIN
CVS tags: version_2_5_X, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, HEAD
Next version HTMLArea.

    1: // (c) dynarch.com 2003-2004
    2: // Distributed under the same terms as HTMLArea itself.
    3: 
    4: function PopupWin(editor, title, handler, initFunction) {
    5: 	this.editor = editor;
    6: 	this.handler = handler;
    7: 	var dlg = window.open("", "__ha_dialog",
    8: 			      "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40" +
    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: 	}
   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: 	}
   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>