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