OSDN Git Service

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