]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - skins/common/prefs.js
MediaWiki 1.14.0
[autoinstallsdev/mediawiki.git] / skins / common / prefs.js
1
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                         if (legends[0]) 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';
59 }
60
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;
76 }
77
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         }
91 }
92
93 function unhidetzbutton() {
94         var tzb = document.getElementById('guesstimezonebutton');
95         if (tzb) {
96                 tzb.style.display = 'inline';
97         }
98         updateTimezoneSelection(false);
99 }
100
101 // in [-]HH:MM format...
102 // won't yet work with non-even tzs
103 function fetchTimezone() {
104         // FIXME: work around Safari bug
105         var localclock = new Date();
106         // returns negative offset from GMT in minutes
107         var tzRaw = localclock.getTimezoneOffset();
108         var tzHour = Math.floor( Math.abs(tzRaw) / 60);
109         var tzMin = Math.abs(tzRaw) % 60;
110         var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "0" : "") + tzHour +
111                 ":" + ((tzMin < 10) ? "0" : "") + tzMin;
112         return tzString;
113 }
114
115 function guessTimezone(box) {
116         document.getElementsByName("wpHourDiff")[0].value = fetchTimezone();
117         updateTimezoneSelection(true);
118 }
119
120 function updateTimezoneSelection(force_offset) {
121         var wpTimeZone = document.getElementsByName("wpTimeZone")[0];
122         var wpHourDiff = document.getElementsByName("wpHourDiff")[0];
123         var wpLocalTime = document.getElementById("wpLocalTime");
124         var wpServerTime = document.getElementsByName("wpServerTime")[0];
125         var minDiff = 0;
126
127         if (force_offset) wpTimeZone.selectedIndex = 1;
128         if (wpTimeZone.selectedIndex == 1) {
129                 wpHourDiff.disabled = false;
130                 var diffArr = wpHourDiff.value.split(':');
131                 if (diffArr.length == 1) {
132                         minDiff = parseInt(diffArr[0], 10) * 60;
133                 } else {
134                         minDiff = Math.abs(parseInt(diffArr[0], 10))*60 + parseInt(diffArr[1], 10);
135                         if (parseInt(diffArr[0], 10) < 0) minDiff = -minDiff;
136                 }
137         } else {
138                 wpHourDiff.disabled = true;
139                 var diffArr = wpTimeZone.options[wpTimeZone.selectedIndex].value.split('|');
140                 minDiff = parseInt(diffArr[1], 10);
141         }
142         if (isNaN(minDiff)) minDiff = 0;
143         var localTime = parseInt(wpServerTime.value, 10) + minDiff;
144         while (localTime < 0) localTime += 1440;
145         while (localTime >= 1440) localTime -= 1440;
146
147         var hour = String(Math.floor(localTime/60));
148         if (hour.length<2) hour = '0'+hour;
149         var min = String(localTime%60);
150         if (min.length<2) min = '0'+min;
151         changeText(wpLocalTime, hour+':'+min);
152
153         if (wpTimeZone.selectedIndex != 1) {
154                 hour = String(Math.abs(Math.floor(minDiff/60)));
155                 if (hour.length<2) hour = '0'+hour;
156                 if (minDiff < 0) hour = '-'+hour;
157                 min = String(minDiff%60);
158                 if (min.length<2) min = '0'+min;
159                 wpHourDiff.value = hour+':'+min;
160         }
161 }
162
163 hookEvent("load", unhidetzbutton);
164 hookEvent("load", tabbedprefs);