1 // Wikipedia JavaScript support functions
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';
13 thisLevel
.style
.display
= 'none';
14 otherLevel
.style
.display
= 'inline';
15 linkLevel
.style
.display
= 'none';
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] );
34 // in [-]HH:MM 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 tzMin
= Math
.abs(tzRaw
) % 60;
43 var tzString
= ((tzRaw
>= 0) ? "-" : "") + ((tzHour
< 10) ? "0" : "") + tzHour
+
44 ":" + ((tzMin
< 10) ? "0" : "") + tzMin
;
48 function guessTimezone(box
) {
49 document
.preferences
.wpHourDiff
.value
= fetchTimezone();
52 function showTocToggle(show
,hide
) {
53 if(document
.getElementById
) {
54 document
.writeln('<small>[<a href="javascript:toggleToc()" class="internal">' +
55 '<span id="showlink" style="display:none;">' + show
+ '</span>' +
56 '<span id="hidelink">' + hide
+ '</span>'
61 function toggleToc() {
62 var toc
= document
.getElementById('tocinside');
63 var showlink
=document
.getElementById('showlink');
64 var hidelink
=document
.getElementById('hidelink');
65 if(toc
.style
.display
== 'none') {
66 toc
.style
.display
= tocWas
;
67 hidelink
.style
.display
='';
68 showlink
.style
.display
='none';
71 tocWas
= toc
.style
.display
;
72 toc
.style
.display
= 'none';
73 hidelink
.style
.display
='none';
74 showlink
.style
.display
='';
79 // this function generates the actual toolbar buttons with localized text
80 // we use it to avoid creating the toolbar where javascript is not enabled
81 function addButton(imageFile
, speedTip
, tagOpen
, tagClose
, sampleText
) {
84 speedTip
=escapeQuotes(speedTip
);
85 tagOpen
=escapeQuotes(tagOpen
);
86 tagClose
=escapeQuotes(tagClose
);
87 sampleText
=escapeQuotes(sampleText
);
88 document
.write("<a href=\"#\" onclick=\"javascript:insertTags");
89 document
.write("('"+tagOpen
+"','"+tagClose
+"','"+sampleText
+"');\">");
90 document
.write("<img width=\"23\" height=\"22\" src=\""+imageFile
+"\" border=\"0\" ALT=\""+speedTip
+"\" TITLE=\""+speedTip
+"\">");
91 document
.write("</a>");
95 function addInfobox(infoText
) {
97 // if no support for changing selection, add a small copy & paste field
98 var clientPC
= navigator
.userAgent
.toLowerCase(); // Get client info
99 var is_nav
= ((clientPC
.indexOf('mozilla')!=-1) && (clientPC
.indexOf('spoofer')==-1)
100 && (clientPC
.indexOf('compatible') == -1) && (clientPC
.indexOf('opera')==-1)
101 && (clientPC
.indexOf('webtv')==-1) && (clientPC
.indexOf('hotjava')==-1)
102 && (clientPC
.indexOf('khtml')==-1) && (clientPC
.indexOf('gecko')==-1));
103 if(!document
.selection
&& !is_nav
) {
104 document
.write("<form name='infoform' id='infoform'>"+
105 "<input size=80 id='infobox' name='infobox' value='"+
106 infoText
+"' READONLY></form>");
111 function escapeQuotes(text
) {
112 var re
=new RegExp("'","g");
113 text
=text
.replace(re
,"\\'");
114 re
=new RegExp("\\n","g");
115 text
=text
.replace(re
,"\\n");
119 // apply tagOpen/tagClose to selection in textarea,
120 // use sampleText instead of selection if there is none
121 // copied and adapted from phpBB
122 function insertTags(tagOpen
, tagClose
, sampleText
) {
124 var txtarea
= document
.editform
.wpTextbox1
;
126 if(document
.selection
) {
127 var theSelection
= document
.selection
.createRange().text
;
128 if(!theSelection
) { theSelection
=sampleText
;}
130 if(theSelection
.charAt(theSelection
.length
- 1) == " "){// exclude ending space char, if any
131 theSelection
= theSelection
.substring(0, theSelection
.length
- 1);
132 document
.selection
.createRange().text
= tagOpen
+ theSelection
+ tagClose
+ " ";
134 document
.selection
.createRange().text
= tagOpen
+ theSelection
+ tagClose
;
136 // Mozilla -- disabled because it induces a scrolling bug which makes it virtually unusable
137 } else if(false && txtarea
.selectionStart
|| txtarea
.selectionStart
== '0') {
138 var startPos
= txtarea
.selectionStart
;
139 var endPos
= txtarea
.selectionEnd
;
140 var myText
= (txtarea
.value
).substring(startPos
, endPos
);
141 if(!myText
) { myText
=sampleText
;}
142 if(myText
.charAt(myText
.length
- 1) == " "){ // exclude ending space char, if any
143 subst
= tagOpen
+ myText
.substring(0, (myText
.length
- 1)) + tagClose
+ " ";
145 subst
= tagOpen
+ myText
+ tagClose
;
147 txtarea
.value
= txtarea
.value
.substring(0, startPos
) + subst
+ txtarea
.value
.substring(endPos
, txtarea
.value
.length
);
149 var cPos
=startPos
+(tagOpen
.length
+myText
.length
+tagClose
.length
);
150 txtarea
.selectionStart
=cPos
;
151 txtarea
.selectionEnd
=cPos
;
154 // Append at the end: Some people find that annoying
155 //txtarea.value += tagOpen + sampleText + tagClose;
157 var re
=new RegExp("\\n","g");
158 tagOpen
=tagOpen
.replace(re
,"");
159 tagClose
=tagClose
.replace(re
,"");
160 document
.infoform
.infobox
.value
=tagOpen
+sampleText
+tagClose
;
163 // reposition cursor if possible
164 if (txtarea
.createTextRange
) txtarea
.caretPos
= document
.selection
.createRange().duplicate();