|
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 |