678192cf46404aa4a46ec070cb9aad1a9880f0dc
[lhc/web/wiklou.git] / stylesheets / wikibits.js
1 // Wikipedia JavaScript support functions
2
3 // for enhanced RecentChanges
4 function toggleVisibility( _levelId, _otherId, _linkId) {
5 var thisLevel = document.getElementById( _levelId );
6 var otherLevel = document.getElementById( _otherId );
7 var linkLevel = document.getElementById( _linkId );
8 if ( thisLevel.style.display == 'none' ) {
9 thisLevel.style.display = 'block';
10 otherLevel.style.display = 'none';
11 linkLevel.style.display = 'inline';
12 } else {
13 thisLevel.style.display = 'none';
14 otherLevel.style.display = 'inline';
15 linkLevel.style.display = 'none';
16 }
17 }
18
19 // Timezone stuff
20 // tz in format [+-]HHMM
21 function checkTimezone( tz, msg ) {
22 var localclock = new Date();
23 // returns negative offset from GMT in minutes
24 var tzRaw = localclock.getTimezoneOffset();
25 var tzHour = Math.floor( Math.abs(tzRaw) / 60);
26 var tzMin = Math.abs(tzRaw) % 60;
27 var tzString = ((tzRaw >= 0) ? "-" : "+") + ((tzHour < 10) ? "0" : "") + tzHour + ((tzMin < 10) ? "0" : "") + tzMin;
28 if( tz != tzString ) {
29 var junk = msg.split( '$1' );
30 document.write( junk[0] + "UTC" + tzString + junk[1] );
31 }
32 }
33
34 // in [-][H]H format...
35 // won't yet work with non-even tzs
36 function fetchTimezone() {
37 // FIXME: work around Safari bug
38 var localclock = new Date();
39 // returns negative offset from GMT in minutes
40 var tzRaw = localclock.getTimezoneOffset();
41 var tzHour = Math.floor( Math.abs(tzRaw) / 60);
42 var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "" : "0") + tzHour;
43 return tzString;
44 }
45
46 function guessTimezone(box) {
47 document.preferences.wpHourDiff.value = fetchTimezone();
48 }
49
50 function showTocToggle(show,hide) {
51 if(document.getElementById) {
52 document.writeln('<small>[<a href="javascript:toggleToc()" class="internal">' +
53 '<span id="showlink" style="display:none;">' + show + '</span>' +
54 '<span id="hidelink">' + hide + '</span>'
55 + '</a>]</small>');
56 }
57 }
58
59 function toggleToc() {
60 var toc = document.getElementById('tocinside');
61 var showlink=document.getElementById('showlink');
62 var hidelink=document.getElementById('hidelink');
63 if(toc.style.display == 'none') {
64 toc.style.display = tocWas;
65 hidelink.style.display='';
66 showlink.style.display='none';
67
68 } else {
69 tocWas = toc.style.display;
70 toc.style.display = 'none';
71 hidelink.style.display='none';
72 showlink.style.display='';
73
74 }
75 }
76
77 // this function generates the actual toolbar buttons with localized text
78 // we use it to avoid creating the toolbar where javascript is not enabled
79 function addButton(imageFile, speedTip, tagOpen, tagClose, sampleText) {
80
81 speedTip=escapeQuotes(speedTip);
82 tagOpen=escapeQuotes(tagOpen);
83 tagClose=escapeQuotes(tagClose);
84 sampleText=escapeQuotes(sampleText);
85 document.write("<a href=\"#\" onclick=\"javascript:insertTags");
86 document.write("('"+tagOpen+"','"+tagClose+"','"+sampleText+"');\">");
87 document.write("<img width=\"23\" height=\"22\" src=\""+imageFile+"\" border=\"0\" ALT=\""+speedTip+"\" TITLE=\""+speedTip+"\">");
88 document.write("</a>");
89 return;
90 }
91
92 function escapeQuotes(text) {
93
94 text=text.replace(/'/g,"\\'");
95 text=text.replace(/\n/g,"\\n");
96 return text;
97 }
98
99 // apply tagOpen/tagClose to selection in textarea,
100 // use sampleText instead of selection if there is none
101 // copied and adapted from phpBB
102 function insertTags(tagOpen, tagClose, sampleText) {
103
104 var txtarea = document.editform.wpTextbox1;
105 // IE
106 if(document.selection) {
107 var theSelection = document.selection.createRange().text;
108 if(!theSelection) { theSelection=sampleText;}
109 txtarea.focus();
110 document.selection.createRange().text = tagOpen + theSelection + tagClose;
111 // Mozilla
112 } else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
113 var startPos = txtarea.selectionStart;
114 var endPos = txtarea.selectionEnd;
115 var myText = (txtarea.value).substring(startPos, endPos);
116 if(!myText) { myText=sampleText;}
117 txtarea.value = txtarea.value.substring(0, startPos) + tagOpen + myText + tagClose + txtarea.value.substring(endPos, txtarea.value.length);
118 txtarea.focus();
119 var cPos=startPos+(tagOpen.length+myText.length+tagClose.length);
120 txtarea.selectionStart=cPos;
121 txtarea.selectionEnd=cPos;
122 // All others
123 } else {
124 txtarea.value += tagOpen + sampleText + tagClose;
125 txtarea.focus();
126 }
127 // reposition cursor if possible
128 if (txtarea.createTextRange) txtarea.caretPos = document.selection.createRange().duplicate();
129 }