web/wp-content/plugins/nice-titles/nicetitle.js
changeset 136 bde1974c263b
equal deleted inserted replaced
135:53cff4b4a802 136:bde1974c263b
       
     1 addEvent(window, "load", makeNiceTitles);
       
     2 
       
     3 var XHTMLNS = "http://www.w3.org/1999/xhtml";
       
     4 var CURRENT_NICE_TITLE;
       
     5 var browser = new Browser();
       
     6 
       
     7 function makeNiceTitles() {
       
     8     if (!document.createElement || !document.getElementsByTagName) return;
       
     9     // add namespace methods to HTML DOM; this makes the script work in both
       
    10     // HTML and XML contexts.
       
    11     if(!document.createElementNS)
       
    12     {
       
    13         document.createElementNS = function(ns,elt) {
       
    14             return document.createElement(elt);
       
    15         }
       
    16     }
       
    17 
       
    18     if( !document.links )
       
    19     {
       
    20         document.links = document.getElementsByTagName("a");
       
    21     }
       
    22     for (var ti=0;ti<document.links.length;ti++) {
       
    23         var lnk = document.links[ti];
       
    24         if (lnk.title) {
       
    25             lnk.setAttribute("nicetitle",lnk.title);
       
    26             lnk.removeAttribute("title");
       
    27             addEvent(lnk,"mouseover",showNiceTitle);
       
    28             addEvent(lnk,"mouseout",hideNiceTitle);
       
    29             addEvent(lnk,"focus",showNiceTitle);
       
    30             addEvent(lnk,"blur",hideNiceTitle);
       
    31         }
       
    32     }
       
    33     var instags = document.getElementsByTagName("ins");
       
    34     if (instags) {
       
    35     for (var ti=0;ti<instags.length;ti++) {
       
    36         var instag = instags[ti];
       
    37         if (instag.dateTime) {
       
    38             var strDate = instag.dateTime;
       
    39             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));
       
    40             instag.setAttribute("nicetitle","Added on "+dtIns.toString());
       
    41             addEvent(instag,"mouseover",showNiceTitle);
       
    42             addEvent(instag,"mouseout",hideNiceTitle);
       
    43             addEvent(instag,"focus",showNiceTitle);
       
    44             addEvent(instag,"blur",hideNiceTitle);
       
    45         }
       
    46     }
       
    47     }
       
    48 }
       
    49 
       
    50 function findPosition( oLink ) {
       
    51   if( oLink.offsetParent ) {
       
    52     for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
       
    53       posX += oLink.offsetLeft;
       
    54       posY += oLink.offsetTop;
       
    55     }
       
    56     return [ posX, posY ];
       
    57   } else {
       
    58     return [ oLink.x, oLink.y ];
       
    59   }
       
    60 }
       
    61 
       
    62 function showNiceTitle(e) {
       
    63     if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
       
    64     if (!document.getElementsByTagName) return;
       
    65     if (window.event && window.event.srcElement) {
       
    66         lnk = window.event.srcElement
       
    67     } else if (e && e.target) {
       
    68         lnk = e.target
       
    69     }
       
    70     if (!lnk) return;
       
    71     if (lnk.nodeName.toUpperCase() != 'A') {
       
    72         // lnk is not actually the link -- ascend parents until we hit a link
       
    73         lnk = getParent(lnk,"A");
       
    74     }
       
    75     if (!lnk) return;
       
    76     nicetitle = lnk.getAttribute("nicetitle");
       
    77     
       
    78     var d = document.createElementNS(XHTMLNS,"div");
       
    79     d.className = "nicetitle";
       
    80     tnt = document.createTextNode(nicetitle);
       
    81     pat = document.createElementNS(XHTMLNS,"p");
       
    82     pat.className = "titletext";
       
    83     pat.appendChild(tnt);
       
    84     d.appendChild(pat);
       
    85     if (lnk.href) {
       
    86         tnd = document.createTextNode(lnk.href);
       
    87         pad = document.createElementNS(XHTMLNS,"p");
       
    88         pad.className = "destination";
       
    89         pad.appendChild(tnd);
       
    90         d.appendChild(pad);
       
    91     }
       
    92     
       
    93 	// sam modif START ----------
       
    94     STD_WIDTH = 300;
       
    95     if (lnk.href) {
       
    96         h = lnk.href.length;
       
    97     } else { h = nicetitle.length; }
       
    98     if (nicetitle.length) {
       
    99       t = nicetitle.length;
       
   100     }
       
   101 	
       
   102     //h_pixels = h*6; t_pixels = t*10;
       
   103 	h_pixels = 300;
       
   104 	t_pixels = t*10;
       
   105     // sam modif END -------------
       
   106 	
       
   107     if (h_pixels > STD_WIDTH) {
       
   108         w = h_pixels;
       
   109     } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
       
   110         w = t_pixels;
       
   111     } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
       
   112         w = h_pixels;
       
   113     } else {
       
   114         w = STD_WIDTH;
       
   115     }
       
   116         
       
   117     d.style.width = w + 'px';    
       
   118 
       
   119     /*
       
   120     mx = lnk.offsetLeft;
       
   121     my = lnk.offsetTop;
       
   122     */
       
   123     mpos = findPosition(lnk);
       
   124     mx = mpos[0];
       
   125     my = mpos[1];
       
   126     //xy = getMousePosition(e);
       
   127     //mx = xy[0]; my = xy[1];
       
   128     
       
   129     d.style.left = (mx+15) + 'px';
       
   130     d.style.top = (my+35) + 'px';
       
   131     if (window.innerWidth && ((mx+w) > window.innerWidth)) {
       
   132         d.style.left = (window.innerWidth - w - 25) + "px";
       
   133     }
       
   134     if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
       
   135         d.style.left = (document.body.scrollWidth - w - 25) + "px";
       
   136     }
       
   137     
       
   138     document.getElementsByTagName("body")[0].appendChild(d);
       
   139     
       
   140     CURRENT_NICE_TITLE = d;
       
   141 }
       
   142 
       
   143 function hideNiceTitle(e) {
       
   144     if (!document.getElementsByTagName) return;
       
   145     if (CURRENT_NICE_TITLE) {
       
   146         document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);
       
   147         CURRENT_NICE_TITLE = null;
       
   148     }
       
   149 }
       
   150 
       
   151 // Add an eventListener to browsers that can do it somehow.
       
   152 // Originally by the amazing Scott Andrew.
       
   153 function addEvent(obj, evType, fn){
       
   154   if (obj.addEventListener){
       
   155     obj.addEventListener(evType, fn, false);
       
   156     return true;
       
   157   } else if (obj.attachEvent){
       
   158 	var r = obj.attachEvent("on"+evType, fn);
       
   159     return r;
       
   160   } else {
       
   161 	return false;
       
   162   }
       
   163 }
       
   164 
       
   165 function getParent(el, pTagName) {
       
   166 	if (el == null) return null;
       
   167 	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
       
   168 		return el;
       
   169 	else
       
   170 		return getParent(el.parentNode, pTagName);
       
   171 }
       
   172 
       
   173 function getMousePosition(event) {
       
   174   if (browser.isIE) {
       
   175     x = window.event.clientX + document.documentElement.scrollLeft
       
   176       + document.body.scrollLeft;
       
   177     y = window.event.clientY + document.documentElement.scrollTop
       
   178       + document.body.scrollTop;
       
   179   }
       
   180   if (browser.isNS) {
       
   181     x = event.clientX + window.scrollX;
       
   182     y = event.clientY + window.scrollY;
       
   183   }
       
   184   return [x,y];
       
   185 }
       
   186 
       
   187 // Determine browser and version.
       
   188 
       
   189 function Browser() {
       
   190 // blah, browser detect, but mouse-position stuff doesn't work any other way
       
   191   var ua, s, i;
       
   192 
       
   193   this.isIE    = false;
       
   194   this.isNS    = false;
       
   195   this.version = null;
       
   196 
       
   197   ua = navigator.userAgent;
       
   198 
       
   199   s = "MSIE";
       
   200   if ((i = ua.indexOf(s)) >= 0) {
       
   201     this.isIE = true;
       
   202     this.version = parseFloat(ua.substr(i + s.length));
       
   203     return;
       
   204   }
       
   205 
       
   206   s = "Netscape6/";
       
   207   if ((i = ua.indexOf(s)) >= 0) {
       
   208     this.isNS = true;
       
   209     this.version = parseFloat(ua.substr(i + s.length));
       
   210     return;
       
   211   }
       
   212 
       
   213   // Treat any other "Gecko" browser as NS 6.1.
       
   214 
       
   215   s = "Gecko";
       
   216   if ((i = ua.indexOf(s)) >= 0) {
       
   217     this.isNS = true;
       
   218     this.version = 6.1;
       
   219     return;
       
   220   }
       
   221 }
       
   222