center #siteNotice
[lhc/web/wiklou.git] / stylesheets / wikibits.js
index 1d3a682..e9c7866 100644 (file)
@@ -1,11 +1,10 @@
 // Wikipedia JavaScript support functions
-
 // if this is true, the toolbar will no longer overwrite the infobox when you move the mouse over individual items
 var noOverwrite=false;
 var alertText;
 var clientPC = navigator.userAgent.toLowerCase(); // Get client info
 var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
-                && (clientPC.indexOf('khtml') == -1));
+                && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
 var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
 var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
 if (clientPC.indexOf('opera')!=-1) {
@@ -19,23 +18,24 @@ function onloadhook () {
     // don't run anything below this for non-dom browsers
     if(!(document.getElementById && document.getElementsByTagName)) return;
     histrowinit();
+    unhidetzbutton();
+    tabbedprefs();
+    akeytt();
 }
 if (window.addEventListener) window.addEventListener("load",onloadhook,false);
 else if (window.attachEvent) window.attachEvent("onload",onloadhook);
 
 
 // document.write special stylesheet links
-function addcss ( stylepath ) {
+if(typeof stylepath != 'undefined' && typeof skin != 'undefined') {
     if (is_opera_preseven) {
-        document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'Opera6Fixes.css">');
+        document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera6Fixes.css">');
     } else if (is_opera_seven) {
-        document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'Opera7Fixes.css">');
+        document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera7Fixes.css">');
     } else if (is_khtml) {
-        document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'KHTMLFixes.css">');
+        document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/KHTMLFixes.css">');
     }
-    return;
 }
-
 // Un-trap us from framesets
 if( window.top != window ) window.top.location = window.location;
 
@@ -60,7 +60,7 @@ function toggleVisibility( _levelId, _otherId, _linkId) {
 function histrowinit () {
     hf = document.getElementById('pagehistory');
     if(!hf) return;
-    lis = hf.getElementsByTagName('li');
+    lis = hf.getElementsByTagName('LI');
     for (i=0;i<lis.length;i++) {
         inputs=lis[i].getElementsByTagName('INPUT');
         if(inputs[0] && inputs[1]) {
@@ -76,7 +76,7 @@ function diffcheck() {
     var oli = false; // the li where the oldid radio is checked
     hf = document.getElementById('pagehistory');
     if(!hf) return;
-    lis = hf.getElementsByTagName('li');
+    lis = hf.getElementsByTagName('LI');
     for (i=0;i<lis.length;i++) {
         inputs=lis[i].getElementsByTagName('INPUT');
         if(inputs[1] && inputs[0]) {
@@ -106,6 +106,68 @@ function diffcheck() {
     }
 }
 
+// generate toc from prefs form, fold sections
+// XXX: needs testing on IE/Mac and safari
+// more comments to follow
+function tabbedprefs() {
+    prefform = document.getElementById('preferences');
+    if(!prefform || !document.createElement) return;
+    if(prefform.nodeName == 'A') return; // Occasional IE problem
+    prefform.className = prefform.className + 'jsprefs';
+    var sections = new Array();
+    children = prefform.childNodes;
+    var seci = 0;
+    for(i=0;i<children.length;i++) {
+        if(children[i].nodeName.indexOf('FIELDSET') != -1) {
+            children[i].id = 'prefsection-' + seci;
+            children[i].className = 'prefsection';
+            if(is_opera || is_khtml) children[i].className = 'prefsection operaprefsection';
+            legends = children[i].getElementsByTagName('LEGEND');
+            sections[seci] = new Object();
+            if(legends[0] && legends[0].firstChild.nodeValue)
+                sections[seci].text = legends[0].firstChild.nodeValue;
+            else
+                sections[seci].text = '# ' + seci;
+            sections[seci].secid = children[i].id;
+            seci++;
+            if(sections.length != 1) children[i].style.display = 'none';
+            else var selectedid = children[i].id;
+        }
+    }
+    var toc = document.createElement('UL');
+    toc.id = 'preftoc';
+    toc.selectedid = selectedid;
+    for(i=0;i<sections.length;i++) {
+        var li = document.createElement('LI');
+        if(i == 0) li.className = 'selected';
+        var a =  document.createElement('A');
+        a.href = '#' + sections[i].secid;
+        a.onclick = uncoversection;
+        a.innerHTML = sections[i].text;
+        a.secid = sections[i].secid;
+        li.appendChild(a);
+        toc.appendChild(li);
+    }
+    prefform.insertBefore(toc, children[0]);
+    document.getElementById('prefsubmit').id = 'prefcontrol';
+}
+function uncoversection() {
+    oldsecid = this.parentNode.parentNode.selectedid;
+    newsec = document.getElementById(this.secid);
+    if(oldsecid != this.secid) {
+        ul = document.getElementById('preftoc');
+        document.getElementById(oldsecid).style.display = 'none';
+        newsec.style.display = 'block';
+        ul.selectedid = this.secid;
+        lis = ul.getElementsByTagName('LI');
+        for(i=0;i< lis.length;i++) {
+            lis[i].className = '';
+        }
+        this.parentNode.className = 'selected';
+    }
+    return false;
+}
+
 // Timezone stuff
 // tz in format [+-]HHMM
 function checkTimezone( tz, msg ) {
@@ -120,6 +182,10 @@ function checkTimezone( tz, msg ) {
                document.write( junk[0] + "UTC" + tzString + junk[1] );
        }
 }
+function unhidetzbutton() {
+    tzb = document.getElementById('guesstimezonebutton')
+    if(tzb) tzb.style.display = 'inline';
+}
 
 // in [-]HH:MM format...
 // won't yet work with non-even tzs
@@ -294,3 +360,33 @@ function insertTags(tagOpen, tagClose, sampleText) {
        // reposition cursor if possible
        if (txtarea.createTextRange) txtarea.caretPos = document.selection.createRange().duplicate();
 }
+
+function akeytt() {
+    if(typeof ta == "undefined" || !ta) return;
+    pref = 'alt-';
+    if(is_safari || navigator.userAgent.toLowerCase().indexOf( 'mac' ) + 1 ) pref = 'control-';
+    if(is_opera) pref = 'shift-esc-';
+    for(id in ta) {
+        n = document.getElementById(id);
+        if(n){
+            a = n.childNodes[0];
+            if(a){
+                if(ta[id][0].length > 0) {
+                    a.accessKey = ta[id][0];
+                    ak = ' ['+pref+ta[id][0]+']';
+                } else {
+                    ak = '';
+                }
+                a.title = ta[id][1]+ak;
+            } else {
+                if(ta[id][0].length > 0) {
+                    n.accessKey = ta[id][0];
+                    ak = ' ['+pref+ta[id][0]+']';
+                } else {
+                    ak = '';
+                }
+                n.title = ta[id][1]+ak;
+            }
+        }
+    }
+}