File:  [LON-CAPA] / loncom / html / htmlarea / Attic / popupwin.js
Revision 1.1: download - view: text, annotated - select for diffs
Wed Feb 18 08:07:15 2004 UTC (20 years, 6 months ago) by www
Branches: MAIN
CVS tags: HEAD
Install HTMLArea

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>