Add (bug 4871) Hardcoded superscript in time zone preferences moved to message which...
[mediawiki.git] / skins / common / prefs.js
bloba6b33375159525864a47ab2042edfcc572d79c18
2 // generate toc from prefs form, fold sections
3 // XXX: needs testing on IE/Mac and safari
4 // more comments to follow
5 function tabbedprefs() {
6         var prefform = document.getElementById('preferences');
7         if (!prefform || !document.createElement) {
8                 return;
9         }
10         if (prefform.nodeName.toLowerCase() == 'a') {
11                 return; // Occasional IE problem
12         }
13         prefform.className = prefform.className + 'jsprefs';
14         var sections = [];
15         var children = prefform.childNodes;
16         var seci = 0;
17         for (var i = 0; i < children.length; i++) {
18                 if (children[i].nodeName.toLowerCase() == 'fieldset') {
19                         children[i].id = 'prefsection-' + seci;
20                         children[i].className = 'prefsection';
21                         if (is_opera || is_khtml) {
22                                 children[i].className = 'prefsection operaprefsection';
23                         }
24                         var legends = children[i].getElementsByTagName('legend');
25                         sections[seci] = {};
26                         legends[0].className = 'mainLegend';
27                         if (legends[0] && legends[0].firstChild.nodeValue) {
28                                 sections[seci].text = legends[0].firstChild.nodeValue;
29                         } else {
30                                 sections[seci].text = '# ' + seci;
31                         }
32                         sections[seci].secid = children[i].id;
33                         seci++;
34                         if (sections.length != 1) {
35                                 children[i].style.display = 'none';
36                         } else {
37                                 var selectedid = children[i].id;
38                         }
39                 }
40         }
41         var toc = document.createElement('ul');
42         toc.id = 'preftoc';
43         toc.selectedid = selectedid;
44         for (i = 0; i < sections.length; i++) {
45                 var li = document.createElement('li');
46                 if (i === 0) {
47                         li.className = 'selected';
48                 }
49                 var a = document.createElement('a');
50                 a.href = '#' + sections[i].secid;
51                 a.onmousedown = a.onclick = uncoversection;
52                 a.appendChild(document.createTextNode(sections[i].text));
53                 a.secid = sections[i].secid;
54                 li.appendChild(a);
55                 toc.appendChild(li);
56         }
57         prefform.parentNode.insertBefore(toc, prefform.parentNode.childNodes[0]);
58         document.getElementById('prefsubmit').id = 'prefcontrol';
61 function uncoversection() {
62         var oldsecid = this.parentNode.parentNode.selectedid;
63         var newsec = document.getElementById(this.secid);
64         if (oldsecid != this.secid) {
65                 var ul = document.getElementById('preftoc');
66                 document.getElementById(oldsecid).style.display = 'none';
67                 newsec.style.display = 'block';
68                 ul.selectedid = this.secid;
69                 var lis = ul.getElementsByTagName('li');
70                 for (var i = 0; i< lis.length; i++) {
71                         lis[i].className = '';
72                 }
73                 this.parentNode.className = 'selected';
74         }
75         return false;
78 // Timezone stuff
79 // tz in format [+-]HHMM
80 function checkTimezone(tz, msg) {
81         var localclock = new Date();
82         // returns negative offset from GMT in minutes
83         var tzRaw = localclock.getTimezoneOffset();
84         var tzHour = Math.floor( Math.abs(tzRaw) / 60);
85         var tzMin = Math.abs(tzRaw) % 60;
86         var tzString = ((tzRaw >= 0) ? "-" : "+") + ((tzHour < 10) ? "0" : "") + tzHour + ((tzMin < 10) ? "0" : "") + tzMin;
87         if (tz != tzString) {
88                 var junk = msg.split('$1');
89                 document.write(junk[0] + "UTC" + tzString + junk[1]);
90         }
93 function unhidetzbutton() {
94         var tzb = document.getElementById('guesstimezonebutton');
95         if (tzb) {
96                 tzb.style.display = 'inline';
97         }
100 // in [-]HH:MM format...
101 // won't yet work with non-even tzs
102 function fetchTimezone() {
103         // FIXME: work around Safari bug
104         var localclock = new Date();
105         // returns negative offset from GMT in minutes
106         var tzRaw = localclock.getTimezoneOffset();
107         var tzHour = Math.floor( Math.abs(tzRaw) / 60);
108         var tzMin = Math.abs(tzRaw) % 60;
109         var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "0" : "") + tzHour +
110                 ":" + ((tzMin < 10) ? "0" : "") + tzMin;
111         return tzString;
114 function guessTimezone(box) {
115         document.getElementsByName("wpHourDiff")[0].value = fetchTimezone();
118 hookEvent("load", unhidetzbutton);
119 hookEvent("load", tabbedprefs);