web/wp-content/plugins/nice-titles/nicetitle.js
changeset 136 bde1974c263b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/nice-titles/nicetitle.js	Wed Feb 03 15:37:20 2010 +0000
@@ -0,0 +1,222 @@
+addEvent(window, "load", makeNiceTitles);
+
+var XHTMLNS = "http://www.w3.org/1999/xhtml";
+var CURRENT_NICE_TITLE;
+var browser = new Browser();
+
+function makeNiceTitles() {
+    if (!document.createElement || !document.getElementsByTagName) return;
+    // add namespace methods to HTML DOM; this makes the script work in both
+    // HTML and XML contexts.
+    if(!document.createElementNS)
+    {
+        document.createElementNS = function(ns,elt) {
+            return document.createElement(elt);
+        }
+    }
+
+    if( !document.links )
+    {
+        document.links = document.getElementsByTagName("a");
+    }
+    for (var ti=0;ti<document.links.length;ti++) {
+        var lnk = document.links[ti];
+        if (lnk.title) {
+            lnk.setAttribute("nicetitle",lnk.title);
+            lnk.removeAttribute("title");
+            addEvent(lnk,"mouseover",showNiceTitle);
+            addEvent(lnk,"mouseout",hideNiceTitle);
+            addEvent(lnk,"focus",showNiceTitle);
+            addEvent(lnk,"blur",hideNiceTitle);
+        }
+    }
+    var instags = document.getElementsByTagName("ins");
+    if (instags) {
+    for (var ti=0;ti<instags.length;ti++) {
+        var instag = instags[ti];
+        if (instag.dateTime) {
+            var strDate = instag.dateTime;
+            var dtIns = new Date(strDate.substring(0,4),parseInt(strDate.substring(4,6)-1),strDate.substring(6,8),strDate.substring(9,11),strDate.substring(11,13),strDate.substring(13,15));
+            instag.setAttribute("nicetitle","Added on "+dtIns.toString());
+            addEvent(instag,"mouseover",showNiceTitle);
+            addEvent(instag,"mouseout",hideNiceTitle);
+            addEvent(instag,"focus",showNiceTitle);
+            addEvent(instag,"blur",hideNiceTitle);
+        }
+    }
+    }
+}
+
+function findPosition( oLink ) {
+  if( oLink.offsetParent ) {
+    for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
+      posX += oLink.offsetLeft;
+      posY += oLink.offsetTop;
+    }
+    return [ posX, posY ];
+  } else {
+    return [ oLink.x, oLink.y ];
+  }
+}
+
+function showNiceTitle(e) {
+    if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
+    if (!document.getElementsByTagName) return;
+    if (window.event && window.event.srcElement) {
+        lnk = window.event.srcElement
+    } else if (e && e.target) {
+        lnk = e.target
+    }
+    if (!lnk) return;
+    if (lnk.nodeName.toUpperCase() != 'A') {
+        // lnk is not actually the link -- ascend parents until we hit a link
+        lnk = getParent(lnk,"A");
+    }
+    if (!lnk) return;
+    nicetitle = lnk.getAttribute("nicetitle");
+    
+    var d = document.createElementNS(XHTMLNS,"div");
+    d.className = "nicetitle";
+    tnt = document.createTextNode(nicetitle);
+    pat = document.createElementNS(XHTMLNS,"p");
+    pat.className = "titletext";
+    pat.appendChild(tnt);
+    d.appendChild(pat);
+    if (lnk.href) {
+        tnd = document.createTextNode(lnk.href);
+        pad = document.createElementNS(XHTMLNS,"p");
+        pad.className = "destination";
+        pad.appendChild(tnd);
+        d.appendChild(pad);
+    }
+    
+	// sam modif START ----------
+    STD_WIDTH = 300;
+    if (lnk.href) {
+        h = lnk.href.length;
+    } else { h = nicetitle.length; }
+    if (nicetitle.length) {
+      t = nicetitle.length;
+    }
+	
+    //h_pixels = h*6; t_pixels = t*10;
+	h_pixels = 300;
+	t_pixels = t*10;
+    // sam modif END -------------
+	
+    if (h_pixels > STD_WIDTH) {
+        w = h_pixels;
+    } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
+        w = t_pixels;
+    } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
+        w = h_pixels;
+    } else {
+        w = STD_WIDTH;
+    }
+        
+    d.style.width = w + 'px';    
+
+    /*
+    mx = lnk.offsetLeft;
+    my = lnk.offsetTop;
+    */
+    mpos = findPosition(lnk);
+    mx = mpos[0];
+    my = mpos[1];
+    //xy = getMousePosition(e);
+    //mx = xy[0]; my = xy[1];
+    
+    d.style.left = (mx+15) + 'px';
+    d.style.top = (my+35) + 'px';
+    if (window.innerWidth && ((mx+w) > window.innerWidth)) {
+        d.style.left = (window.innerWidth - w - 25) + "px";
+    }
+    if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
+        d.style.left = (document.body.scrollWidth - w - 25) + "px";
+    }
+    
+    document.getElementsByTagName("body")[0].appendChild(d);
+    
+    CURRENT_NICE_TITLE = d;
+}
+
+function hideNiceTitle(e) {
+    if (!document.getElementsByTagName) return;
+    if (CURRENT_NICE_TITLE) {
+        document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);
+        CURRENT_NICE_TITLE = null;
+    }
+}
+
+// Add an eventListener to browsers that can do it somehow.
+// Originally by the amazing Scott Andrew.
+function addEvent(obj, evType, fn){
+  if (obj.addEventListener){
+    obj.addEventListener(evType, fn, false);
+    return true;
+  } else if (obj.attachEvent){
+	var r = obj.attachEvent("on"+evType, fn);
+    return r;
+  } else {
+	return false;
+  }
+}
+
+function getParent(el, pTagName) {
+	if (el == null) return null;
+	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
+		return el;
+	else
+		return getParent(el.parentNode, pTagName);
+}
+
+function getMousePosition(event) {
+  if (browser.isIE) {
+    x = window.event.clientX + document.documentElement.scrollLeft
+      + document.body.scrollLeft;
+    y = window.event.clientY + document.documentElement.scrollTop
+      + document.body.scrollTop;
+  }
+  if (browser.isNS) {
+    x = event.clientX + window.scrollX;
+    y = event.clientY + window.scrollY;
+  }
+  return [x,y];
+}
+
+// Determine browser and version.
+
+function Browser() {
+// blah, browser detect, but mouse-position stuff doesn't work any other way
+  var ua, s, i;
+
+  this.isIE    = false;
+  this.isNS    = false;
+  this.version = null;
+
+  ua = navigator.userAgent;
+
+  s = "MSIE";
+  if ((i = ua.indexOf(s)) >= 0) {
+    this.isIE = true;
+    this.version = parseFloat(ua.substr(i + s.length));
+    return;
+  }
+
+  s = "Netscape6/";
+  if ((i = ua.indexOf(s)) >= 0) {
+    this.isNS = true;
+    this.version = parseFloat(ua.substr(i + s.length));
+    return;
+  }
+
+  // Treat any other "Gecko" browser as NS 6.1.
+
+  s = "Gecko";
+  if ((i = ua.indexOf(s)) >= 0) {
+    this.isNS = true;
+    this.version = 6.1;
+    return;
+  }
+}
+