]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/js/tinymce/utils/mclayer.js
Wordpress 2.3.2
[autoinstalls/wordpress.git] / wp-includes / js / tinymce / utils / mclayer.js
diff --git a/wp-includes/js/tinymce/utils/mclayer.js b/wp-includes/js/tinymce/utils/mclayer.js
new file mode 100644 (file)
index 0000000..23982db
--- /dev/null
@@ -0,0 +1,210 @@
+/**
+ * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $
+ *
+ * Moxiecode floating layer script.
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+function MCLayer(id) {
+       this.id = id;
+       this.settings = new Array();
+       this.blockerElement = null;
+       this.isMSIE = navigator.appName == "Microsoft Internet Explorer";
+       this.events = false;
+       this.autoHideCallback = null;
+}
+
+MCLayer.prototype = {
+       moveRelativeTo : function(re, p, a) {
+               var rep = this.getAbsPosition(re);
+               var w = parseInt(re.offsetWidth);
+               var h = parseInt(re.offsetHeight);
+               var x, y;
+
+               switch (p) {
+                       case "tl":
+                               break;
+
+                       case "tr":
+                               x = rep.absLeft + w;
+                               y = rep.absTop;
+                               break;
+
+                       case "bl":
+                               break;
+
+                       case "br":
+                               break;
+               }
+
+               this.moveTo(x, y);
+       },
+
+       moveBy : function(dx, dy) {
+               var e = this.getElement();
+               var x = parseInt(e.style.left);
+               var y = parseInt(e.style.top);
+
+               e.style.left = (x + dx) + "px";
+               e.style.top = (y + dy) + "px";
+
+               this.updateBlocker();
+       },
+
+       moveTo : function(x, y) {
+               var e = this.getElement();
+
+               e.style.left = x + "px";
+               e.style.top = y + "px";
+
+               this.updateBlocker();
+       },
+
+       show : function() {
+               MCLayer.visibleLayer = this;
+
+               this.getElement().style.display = 'block';
+               this.updateBlocker();
+       },
+
+       hide : function() {
+               this.getElement().style.display = 'none';
+               this.updateBlocker();
+       },
+
+       setAutoHide : function(s, cb) {
+               this.autoHideCallback = cb;
+               this.registerEventHandlers();
+       },
+
+       getElement : function() {
+               return document.getElementById(this.id);
+       },
+
+       updateBlocker : function() {
+               if (!this.isMSIE)
+                       return;
+
+               var e = this.getElement();
+               var b = this.getBlocker();
+               var x = this.parseInt(e.style.left);
+               var y = this.parseInt(e.style.top);
+               var w = this.parseInt(e.offsetWidth);
+               var h = this.parseInt(e.offsetHeight);
+
+               b.style.left = x + 'px';
+               b.style.top = y + 'px';
+               b.style.width = w + 'px';
+               b.style.height = h + 'px';
+               b.style.display = e.style.display;
+       },
+
+       getBlocker : function() {
+               if (!this.blockerElement) {
+                       var d = document, b = d.createElement("iframe");
+
+                       b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';
+                       b.src = 'javascript:false;';
+                       b.frameBorder = '0';
+                       b.scrolling = 'no';
+
+                       d.body.appendChild(b);
+                       this.blockerElement = b;
+               }
+
+               return this.blockerElement;
+       },
+
+       getAbsPosition : function(n) {
+               var p = {absLeft : 0, absTop : 0};
+
+               while (n) {
+                       p.absLeft += n.offsetLeft;
+                       p.absTop += n.offsetTop;
+                       n = n.offsetParent;
+               }
+
+               return p;
+       },
+
+       registerEventHandlers : function() {
+               if (!this.events) {
+                       var d = document;
+
+                       this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);
+
+                       this.events = true;
+               }
+       },
+
+       addEvent : function(o, n, h) {
+               if (o.attachEvent)
+                       o.attachEvent("on" + n, h);
+               else
+                       o.addEventListener(n, h, false);
+       },
+
+       onMouseDown : function(e) {
+               e = typeof(e) == "undefined" ? window.event : e;
+               var b = document.body;
+               var l = MCLayer.visibleLayer;
+
+               if (l) {
+                       var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;
+                       var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;
+                       var el = l.getElement();
+                       var x = parseInt(el.style.left);
+                       var y = parseInt(el.style.top);
+                       var w = parseInt(el.offsetWidth);
+                       var h = parseInt(el.offsetHeight);
+
+                       if (!(mx > x && mx < x + w && my > y && my < y + h)) {
+                               MCLayer.visibleLayer = null;
+
+                               if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my))
+                                       return true;
+
+                               l.hide();
+                       }
+               }
+       },
+
+       addCSSClass : function(e, c) {
+               this.removeCSSClass(e, c);
+               var a = this.explode(' ', e.className);
+               a[a.length] = c;
+               e.className = a.join(' ');
+       },
+
+       removeCSSClass : function(e, c) {
+               var a = this.explode(' ', e.className), i;
+
+               for (i=0; i<a.length; i++) {
+                       if (a[i] == c)
+                               a[i] = '';
+               }
+
+               e.className = a.join(' ');
+       },
+
+       explode : function(d, s) {
+               var ar = s.split(d);
+               var oar = new Array();
+
+               for (var i = 0; i<ar.length; i++) {
+                       if (ar[i] != "")
+                               oar[oar.length] = ar[i];
+               }
+
+               return oar;
+       },
+
+       parseInt : function(s) {
+               if (s == null || s == '')
+                       return 0;
+
+               return parseInt(s);
+       }
+}