Jump to content
Wikipedia The Free Encyclopedia

User:MarkS/XEB/dev.js

From Wikipedia, the free encyclopedia
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump.
This code will be executed when previewing this page.
Documentation for this user script can be added at User:MarkS/XEB/dev.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
 /* Version: 3.1
  * ============================================================
  * en: ADD SOME EXTRA BUTTONS TO THE EDITPANEL
  * de: FÜGE NEUE BUTTON IN DIE WERKZEUGLEISTE
  * pt: ACRESCENTA ALGUNS BOTÕES EXTRAS AO PAINEL DE EDIÇÃO
  * ============================================================
  * Vorschläge für neue Buttons werden gerne entgegengenommen
  * Die Reihenfolge und Anzahl der Buttons ist über die (alphabetische) Variable XEBOrder wählbar.
  *
  * ================================
  * Control Variables
  *
  * window.rmEditButtons - Removes standard toolbar buttons
  * window.XEBOrder - The order in which the buttons are displayed
  * window.myButtons - Add user defined buttons
  * <nowiki>
  */

 mw.loader.load('//en.wikipedia.org/w/index.php?title=User:MarkS/XEB/live.css&action=raw&ctype=text/css','text/css');

 if(typeofXEBPopups==='undefined'){
 XEBPopups=true;
 }
 if(typeofXEBHideDelay==='undefined'){
 // Time before the popup disappears after the mouse moves out
 window.XEBHideDelay=0.5;
 }
 if(typeofXEBExtendEditSummary==='undefined'){
 // Is the edit summary extended after a popup
 window.XEBExtendEditSummary=true;
 }

 if(typeofusersignature==='undefined'){
 varusersignature='-- ~~'+'~~';
 }

 varIsrc='//upload.wikimedia.org/wikipedia/commons/';

 varBDict={
 'A':['e/e9/Button_headline2.png','Secondary headline','\n===','===','Secondary headline'],
 'B':['1/13/Button_enter.png','Line break','<br />','',''],
 'C':['5/5f/Button_center.png','Center','<div style="text-align: center;">\n','\n<\/div>','Centred text'],
 'D':['e/ea/Button_align_left.png','Left-Align','<div style="text-align: left; direction: ltr; margin-left: 1em;">\n','\n<\/div>','Left-aligned text'],
 'D1':['a/a5/Button_align_right.png','Right-Align','<div style="text-align: right; direction: ltr; margin-left: 1em;">\n','\n<\/div>','Right-aligned text'],
 'E':['0/04/Button_array.png','Table','\n{| class="wikitable" \n|- \n| 1 || 2\n|- \n| 3 || 4','\n|}\n',''],
 'F':['1/1e/Button_font_color.png','Insert coloured text','<span style="color: ','">Coloured text<\/span>','ColourName'],
 'FS':['1/1b/Button_miss_signature.png','Unsigned post','<small><span class="autosigned">— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:','|',']] ([[User talk:','|talk]] • [[Special:Contributions/','|contribs]]) date</span></small><!-- Template:Unsigned -->','user name or IP'],
 'G':['9/9e/Btn_toolbar_gallery.png','Picture gallery',"\n<gallery>\nImage:","|[[M63]]\nImage:Mona Lisa.jpg|[[Mona Lisa]]\nImage:Truite arc-en-ciel.jpg|Eine [[Forelle ]]\n<\/gallery>",'M63.jpg'],
 'H':['7/74/Button_comment.png','Comment',"<!--","-->",'Comment'],
 'I1':['6/6a/Button_sup_letter.png','Superscript','<sup>','<\/sup>','Superscript text'],
 'I2':['a/aa/Button_sub_letter.png','Subscript','<sub>','<\/sub>','Subscript text'],
 'J1':['5/58/Button_small.png','Small','<small>','<\/small>','Small Text'],
 'J2':['5/56/Button_big.png','Big text','<big>','<\/big>','Big text'],
 'K':['b/b4/Button_category03.png','Category',"[[Category:","]]",'Category name'],
 'L':['8/8e/Button_shifting.png','Insert tab(s)',':','',':'],
 'M':['f/fd/Button_blockquote.png','Insert block of quoted text','<blockquote style="border: 1px solid blue; padding: 2em;">\n','\n<\/blockquote>','Block quote'],
 'N':['4/4b/Button_nbsp.png','nonbreaking space','&nbsp;','',''],
 'O':['2/23/Button_code.png','Insert code','<code>','<\/code>','Code'],
 'P':['3/3c/Button_pre.png','Pre formatted Text','<pre>','<\/pre>','Pre formatted text'],
 'P1':['9/93/Button_sub_link.png','Insert link to sub-page','[[','/Sub_Page]]','Page'],
 'Q':['d/d3/Button_definition_list.png','Insert definition list','\n; ','\n: Item 1\n: Item 2','Definition'],
 'R':['7/79/Button_reflink.png','Insert a reference','<ref>','<\/ref>','Insert reference material'],
 'R1':['7/79/Button_reflink.png','Start a reference','<ref name="','','Reference name'],
 'R2':['9/99/Button_reflink_advanced_2.png','Insert reference material','">','</ref>','Reference material'],
 'R3':['1/1a/Button_reflink_advanced_3.png','No reference material','','"/>',''],
 'R4':['9/9a/Button_references.png','Reference footer',"\n==Notes==\n<!--See http://en.wikipedia.org/wiki/Wikipedia:Footnotes for an explanation of how to generate footnotes using the <ref(erences/)> tags-->\n<div class=\'references-small\'>\n<references/>\n</div>",'',''],
 'S':['c/c9/Button_strike.png','Strikeout','<s>','<\/s>','Struck out text'],
 'T':['e/eb/Button_plantilla.png','Template','{{','}}','Template name'],
 'TS':['a/a4/TableStart.png','Start a table','{|','',''],
 'TC':['7/71/TableCell.png','Table cell','|','',''],
 'TE':['0/06/TableEnd.png','End a table','','|}',''],
 'TR':['4/4c/TableRow.png','Start a table row','|-','',''],
 'T1':['3/30/Tt_icon.png','Teletype text','<tt>','<\/tt>','Teletype Text'],
 'TL':['3/37/Button_tl_template.png','Template link',"{{subst:"+"tl|",'}}','Template name'],
 'U':['f/fd/Button_underline.png','Underlined',"<u>","<\/u>",'Underlined text'],
 'V':['c/c8/Button_redirect.png','Redirect',"#REDIRECT [[","]]",'Article Name'],
 'W':['8/88/Btn_toolbar_enum.png','Numbering',"\n# ","\n# Element 2\n# Element 3",'Element 1'],
 'X':['1/11/Btn_toolbar_liste.png','List',"\n* ","\n* Element B\n* Element C",'Element A'],
 'Y1':['c/ce/Button_no_include.png','No Include',"<noinclude>","<\/noinclude>",'Text'],
 'Y2':['7/79/Button_include.png','Include only',"<includeonly>","<\/includeonly>",'Text'],
 'Z':['3/35/Button_substitute.png','Substitute',"{{subst:","}}",'Template'],
 'AI':['1/1c/Button_advanced_image.png','Advanaced Image',"[[Image:","|thumb|right|px|Caption]]",'FileName.jpg'],
 'GEO':['b/b8/Button_Globe.png','Geo location',"","",""],
 'TALK':['4/49/Button_talk.png','Add talk template',"","",""]
 };

 varXEBOrder2=[];




 initButtons();
 if(!mw.config.get('wgIsArticle')){
 // only if edit
 if(XEBPopups){
 $(extendButtons);
 }
 }

 functioninitButtons(){

 varbc,d,i,customTools={};

 if(typeofXEBOrder!=='string'){
 // can be modified
 XEBOrder2='A,D,C,D1,F,U,J1,E,G,Q,W,X,K,L,H,O,R,T'.split(',');
 }elseif(XEBOrder.toLowerCase()==='all'){
 $.each(BDict,function(b,value){
 XEBOrder2.push(b);
 });
 }else{
 XEBOrder2=XEBOrder.toUpperCase().split(',');
 }

 $.each(BDict,function(b,value){
 // Add the start of the URL (Isrc) to the XEB buttons
 BDict[b][0]=Isrc+BDict[b][0];
 });
 // If the user has defined any buttons then add them into the available button lists
 if(typeofmyButtons==='object'){
 $.each(myButtons,function(b,value){
 // custom user buttons
 BDict[b]=myButtons[b];
 });
 }

 mw.loader.using('user.options',function(){
 if(mw.user.options.get('usebetatoolbar')){
 // Use the enhanced edit toolbar
 mw.loader.using('ext.wikiEditor',function(){
 $(function(){
 // Build the new buttons
 for(i=0;i<XEBOrder2.length;i++){
 bc=BDict[XEBOrder2[i]];

 //Check if bc is an object
 // - protects if user specified a non-existant buttons
 // - IE causes a javascript error when viewing a page
 if(typeofbc==='object'){
 customTools[XEBOrder2[i]]={
 label:bc[1],
 type:'button',
 icon:bc[0],
 action:{
 type:'encapsulate',
 options:{
 pre:bc[2],
 peri:bc[4],
 post:bc[3]
 }
 }
 };
 }
 }

 $('#wpTextbox1').wikiEditor('addToToolbar',{
 'sections':{
 'extra':{
 'type':'toolbar',
 'label':'Extras'
 }
 },
 'section':'extra',
 'groups':{
 'my-buttons':{
 'label':'My buttons',
 'tools':customTools
 }
 }
 });
 });

 });
 }else{
 // Use the old edit toolbar
 // Add the MediaWiki standard buttons into the available buttons
 $.each(mw.toolbar.buttons,function(b,value){
 // add standard buttons for full XEB order changing
 //	BDict[b]=[];
 BDict[b]=[value.imageFile,value.speedTip,value.tagOpen,value.tagClose,value.sampleText];

 // for (d in value) {BDict[b].push(value}[d]);
 });

 // Build the new buttons
 for(i=0;i<XEBOrder2.length;i++){
 bc=BDict[XEBOrder2[i]];

 //Check if bc is an object
 // - protects if user specified a non-existant buttons
 // - IE causes a javascript error when viewing a page
 if(typeofbc==='object'){

 //Call addButton from module mediawiki.action.edit
 mw.toolbar.addButton(bc[0],bc[1],bc[2],bc[3],bc[4]/* , imageId, selectText */);
 }
 }

 // Remove the default buttons (if requested by the user)
 eraseButtons();
 }
 });
 }


 /** en: Removes arbitrary standard buttons from the toolbar
  * @author: [[:de:User:Olliminatore]]
  * @version: 0.1 (01.10.2006) **/

 functioneraseButtons(){
 varx,i,enExtraButtons;

 //Remove the buttons the user doesn't want
 if(typeofrmEditButtons!=='object'){
 return;
 }

 if(typeofrmEditButtons[0]==='string'&&rmEditButtons[0].toLowerCase()==='all'){
 // English Wikipedia creates 11 extra buttons which are stored in mwCustomEditButtons
 // rather than mw.toolbar.buttons. However, there is no guarantee it will always be 11
 // so we count them here.
 enExtraButtons=window.mwCustomEditButtons.length;

 mw.toolbar.buttons=[];
 for(i=0;i<enExtraButtons;i++){
 window.mwCustomEditButtons.shift();
 }
 }
 //Sort the user's requests so we remove the button with the highest index first
 //- This ensures we remove the buttons the user expects whatever order he requested the buttons in
 window.rmEditButtons.sort(sortit);

 //Remove individual buttons the user doesn't want
 for(i=0;i<rmEditButtons.length;i++){
 varn=rmEditButtons[i];
 //Standard Wikimedia buttons
 if(n>=0&&n<mw.toolbar.buttons.length){
 if(n<mw.toolbar.buttons.length){
 x=-1;
 while((++x)<mw.toolbar.buttons.length){
 if(x>=n){
 mw.toolbar.buttons[x]=mw.toolbar.buttons[x+1];
 }
 }
 }
 mw.toolbar.buttons.pop();
 }
 //Extra buttons in English Wikipedia
 n=n-mw.toolbar.buttons.length;
 if(n>0&&n<window.mwCustomEditButtons.length){
 if(n<window.mwCustomEditButtons.length){
 x=-1;
 while((++x)<window.mwCustomEditButtons.length){
 if(x>=n){
 window.mwCustomEditButtons[x]=window.mwCustomEditButtons[x+1];
 }
 }
 }
 window.mwCustomEditButtons.pop();
 }
 }
 }

 //Function:
 //	sortit
 //Purpose:
 //	Used to sort the rmEditButtons array into descending order
 functionsortit(a,b){
 return(b-a);
 }


 //Function:
 //Purpose:
 //	Adds extended onclick-function to some buttons
 functionextendButtons(){
 varallEditButtons=document.getElementById('toolbar');
 if(!allEditButtons){
 returnfalse;
 }
 if(typeofeditform!=='undefined'){
 if(!(window.editform=document.forms.editform)){
 returnfalse;
 }
 }

 // table
 extendAButton(Isrc+'0/04/Button_array.png',XEBPopupTable);
 extendAButton(Isrc+'7/79/Button_reflink.png',XEBPopupRef);
 extendAButton(Isrc+'b/b8/Button_Globe.png',XEBPopupGeoLink);
 extendAButton(Isrc+'4/49/Button_talk.png',XEBPopupTalk);
 extendAButton(Isrc+'1/1c/Button_advanced_image.png',XEBPopupImage);
 //extendAButton(Isrc+'6/6a/Button_sup_letter.png',XEBPopupFormattedText);
 // redirect -##IE doesn't like this line. Object doesn't support this property or method
 //c=XEBOrder2.getIndex('V');

 //	if(c != -1)
 //		allEditButtons[bu_len+c].onclick=function(){
 //		var a='#REDIRECT \[\['+prompt("Which page do you want to redirect to\?")+'\]\]';
 //		document.editform.elements['wpTextbox1'].value=a;
 //		document.editform.elements['wpSummary'].value=a;
 //		document.editform.elements['wpWatchthis'].checked=false
 // };
 }

 functionextendAButton(url,newfunc){
 vari;
 varallEditButtons=document.getElementById('toolbar');
 if(!allEditButtons){
 returnfalse;
 }
 if(typeofeditform!=='undefined'){
 if(!(window.editform=document.forms.editform)){
 returnfalse;
 }
 }
 allEditButtons=allEditButtons.getElementsByTagName('img');
 for(i=0;i<allEditButtons.length;i++){
 if(allEditButtons[i].src===url){
 allEditButtons[i].onclick=newfunc;
 }
 }
 }

 //==========================================================================================================
 // General purpose popup code
 //==========================================================================================================

 functiongetXEBPopupDiv(name){
 varXEBMainDiv=document.getElementById('XEB');
 if(XEBMainDiv===null){
 XEBMainDiv=document.createElement('div');
 document.body.appendChild(XEBMainDiv);
 XEBMainDiv.id='XEB';
 }

 varme=document.getElementById('XEBPopup'&&name);
 if(me!==null){
 returnme;
 }
 me=document.createElement('div');
 XEBMainDiv.appendChild(me);

 me.id='XEBPopup';
 me.style.position='absolute';
 me.display='none';
 me.visibility='hidden';
 me.onmouseout=CheckHideXEBPopup;
 me.onmouseover=cancelHidePopup;
 returnme;
 }

 //Function:
 //	CheckHideXEBPopup
 //Purpose:
 //	Looks at the cursor position and if it has moved outside the popup it will close the popup
 //Called:
 //	When the onMouseEvent is fired on the popup

 functionCheckHideXEBPopup(e){
 varx,y,ph,s,pl,pt,pw;
 varm=document.getElementById('XEBmnu');
 if(is_gecko){
 ph=m.offsetHeight;
 x=e.clientX+window.scrollX;
 y=e.clientY+window.scrollY;
 s=window.getComputedStyle(m,'');
 ph=s.height;
 ph=Number(ph.substring(0,ph.length-2));
 }else{
 x=event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;
 y=event.clientY+document.documentElement.scrollTop+document.body.scrollTop;
 ph=m.offsetHeight;
 }
 pl=curPopup.x;
 pt=curPopup.y;
 pw=m.style.width;
 pw=Number(pw.substring(0,pw.length-2));

 if(x>(pl+2)&&x<(pl+pw-5)&&y>(pt+2)&&y<(pt+ph-5)){
 return;
 }
 curPopup.hideTimeout=setTimeout(hideXEBPopup,XEBHideDelay*1000);
 }

 functioncancelHidePopup(){
 clearTimeout(curPopup.hideTimeout);
 }

 functionhideXEBPopup(){
 varXEBMainDiv=document.getElementById('XEB');
 varm=document.getElementById('XEBPopup');
 XEBMainDiv.removeChild(m);
 }

 functionXEBstartDrag(e){
 varm=newGetPos(e||event);
 curPopup.startDrag.mouse=m;
 curPopup.startDrag.floatpopup.y=parseInt(curPopup.div.style.top,10);
 curPopup.startDrag.floatpopup.x=parseInt(curPopup.div.style.left,10);
 curPopup.dragging=true;
 }

 functionXEBstopDrag(e){
 if(curPopup.dragging===false){
 return;
 }
 curPopup.dragging=false;
 }

 functionXEBDrag(e){
 if(curPopup.dragging===false){
 return;
 }

 varm=newGetPos(e||event);
 varx=parseInt(curPopup.startDrag.floatpopup.x+(m.x-curPopup.startDrag.mouse.x),10);
 vary=parseInt(curPopup.startDrag.floatpopup.y+(m.y-curPopup.startDrag.mouse.y),10);

 curPopup.div.style.top=y+'px';
 curPopup.div.style.left=x+'px';

 curPopup.x=x;
 curPopup.y=y;
 }

 //=============================================================================
 // Popup: Table
 //=============================================================================

 functionXEBPopup(name,x,y){
 // Make sure the popup can appear on the screen
 this.IESelectedRange=XEBgetIESelectedRange();

 varwinW=(is_gecko)?window.innerWidth:document.body.offsetWidth;
 if((winW-this.width)<x){
 x=(winW-this.width);
 }

 this.div=getXEBPopupDiv(name);
 this.div.style.zIndex=2000;
 this.div.display='inline';
 this.div.visibility='visible';
 this.div.style.top=y+'px';
 this.x=x;
 this.y=y;
 this.name=name;

 this.startDrag={};
 this.startDrag.floatpopup={};
 }

 functionsetInnerHTML(text){
 vari;
 varwinW=(is_gecko)?window.innerWidth:document.body.offsetWidth;
 if((winW-this.width)<this.x){
 this.x=(winW-this.width);
 }
 this.div.style.left=this.x+'px';

 varmt='<div id="XEBmnu" style="width:'+this.width+'px" >';
 mt+='<div id="XEBmnuTitle" class="XEBPopupTitle" onmousedown="XEBstartDrag(event)" onmouseup="XEBstopDrag(event)" onmousemove="XEBDrag(event)">Title</div>';
 mt+=text;
 mt+='</div>';
 this.div.innerHTML=mt;
 //Turn off autocomplete. If the mouse moves over the autocomplete popup then x,y in CheckHidePopup is relative to the
 // autocomplete popup and our popup is hidden
 varInTexts=this.div.getElementsByTagName('input');
 for(i=0;i<InTexts.length;i++){
 vartheInput=InTexts[i];
 if(theInput.type==='text'){
 theInput.setAttribute('autocomplete','off');
 }
 }
 //Add rollover features to menu items. Doing it here means we don't have to do it for each menu
 varx=XEBgetElementsByClassName(this.div,'XEBMnuItm','span');
 for(i=0;i<x.length;i++){
 vartheItm=x[i];
 theItm.onmouseout=XEBMenuMouseOut;
 theItm.onmouseover=XEBMenuMouseOver;
 }

 this.div.style.borderWidth='thin';
 this.div.style.borderStyle='solid';
 this.div.style.backgroundColor='#D0D0D0';
 }
 XEBPopup.prototype.width=250;
 XEBPopup.prototype.dragging=false;
 XEBPopup.prototype.setInnerHTML=setInnerHTML;

 varcurPopup;

 functionGetPos(e){
 this.x=e.clientX-10+document.documentElement.scrollLeft+document.body.scrollLeft;
 this.y=e.clientY-10+document.documentElement.scrollTop+document.body.scrollTop;
 }

 functionXEBPopupTable(e){
 varm=newGetPos(e||event);

 curPopup=newXEBPopup('table',m.x,m.y);

 varmt='<p>Enter the table parameters below: <\/p>'+
 '<form name="XEBPopupTableForm">'+
 'Table caption: <input type="checkbox" name="inputCaption"><p\/>'+
 'Table alignment: center<input type="checkbox" name="inputAlign"><p\/>'+
 'Table headline: colored<input type="checkbox" name="inputHead"><p\/>'+
 'Number of rows: <input type="text" name="inputRow" value="3" size="2"><p\/>'+
 'Number of columns: <input type="text" name="inputCol" value="3" size="2"><p\/>'+
 // 'Alternating grey lines: <input type="checkbox" name="inputLine" checked="1" ><p\/>' +
 'Item column: <input type="checkbox" name="inputItems" ><p\/>'+
 'Sortable: <input type="checkbox" name="inputSort" ><p\/>'+
 '<\/form>'+
 '<i>The default table allows for fields and values only.<\/i><p\/>'+
 'Check "Item column" to allow for the table to have fields, items, and values.<\/i><p\/>'+
 '<p><button onClick="javascript:insertTableCode()">Insert</button>'+
 '<button onClick="hideXEBPopup()">Cancel</button>';

 curPopup.setInnerHTML(mt);

 returntrue;
 }

 functioninsertTableCode(){
 vari;
 varf=document.XEBPopupTableForm;
 varcaption=(f.inputCaption.checked)?'|+ TABLE CAPTION \n':'';
 varexhead=(f.inputHead.checked)?'|- style="background: #DDFFDD;"\n':'';
 varnbRow=parseInt(f.inputRow.value,10);
 varnbCol=parseInt(f.inputCol.value,10);
 varexfield=f.inputItems.checked;
 varalign=(f.inputAlign.checked)?'align="center"':'';

 //generateTable(caption, exhead, nbCol, nbRow, exfield, align);
 varcode='\n';
 code+='{| {{prettytable}} '+align+' ';// en: class="wikitable"
 code+=(f.inputSort.checked)?'class="sortable" \n':'\n';
 code+=caption+exhead;
 if(exfield){
 code+='!\n';
 }
 for(i=1;i<nbCol+1;i++){
 code+='! FELD '+i+'\n';
 }
 varitems=0;
 for(varj=0;j<nbRow;j++){
 if(exfield){
 items++;
 code+='|-\n! style="background: #FFDDDD;"|ITEM '+items+'\n';
 }else{
 code+='|-\n';
 }
 for(i=0;i<nbCol;i++){
 code+='| Element '+i+'\n';
 }
 }
 code+='|}\n';
 hideXEBPopup();
 insertTags('','',code);
 extendSummary('table');

 returnfalse;
 }

 // Get the text currently selected by user in the textAra
 // This code is based on part of the insertTags function in wikibits.js

 functionXEBGetSelectedText(){
 vartxtarea,theSelection;
 if(document.editform){
 txtarea=document.editform.wpTextbox1;
 }else{
 // some alternate form? take the first one we can find
 varareas=document.getElementsByTagName('textarea');

 txtarea=areas[0];
 }
 // IE & Opera
 if(document.selection&&!is_gecko){
 theSelection=document.selection.createRange().text;
 if(!theSelection){
 theSelection='';
 }
 }
 // Mozilla
 elseif(txtarea.selectionStart||txtarea.selectionStart===0){
 varreplaced=false;
 varstartPos=txtarea.selectionStart;
 varendPos=txtarea.selectionEnd;
 theSelection=(txtarea.value).substring(startPos,endPos);
 if(!theSelection){
 theSelection='';
 }
 }
 returntheSelection;
 }

 //Notes:
 //	IE loses the cursor position in the textarea when the popup is used.
 //	So we save the cursor position here
 functionXEBgetIESelectedRange(){
 varIESel={};
 vartxtarea;
 if(document.editform){
 txtarea=document.editform.wpTextbox1;
 }else{
 // some alternate form? take the first one we can find
 varareas=document.getElementsByTagName('textarea');

 txtarea=areas[0];
 }
 // IE & Opera
 if(document.selection&&!is_gecko){
 txtarea.focus();
 IESel.Rng=document.selection.createRange();
 returnIESel;
 }
 }

 functionXEBinsertText(beforeText,selText,afterText,IESelectedRange){
 varnewText=beforeText+selText+afterText;
 vartxtarea,tr;
 if(document.editform){
 txtarea=document.editform.wpTextbox1;
 }else{
 // some alternate form? take the first one we can find
 varareas=document.getElementsByTagName('textarea');
 txtarea=areas[0];
 }

 // IE
 if(document.selection&&!is_gecko){

 tr=IESelectedRange.Rng;
 tr.text=newText;
 txtarea.focus();
 //txtarea.caretpos=tr.duplicate();
 tr.select();

 return;

 // Mozilla
 }elseif(txtarea.selectionStart||txtarea.selectionStart===0){
 varreplaced=false;
 varstartPos=txtarea.selectionStart;
 varendPos=txtarea.selectionEnd;

 if(endPos-startPos){
 replaced=true;
 }
 varscrollTop=txtarea.scrollTop;
 //		var myText = (txtarea.value).substring(startPos, endPos);
 //		if (!myText) {
 //			myText=sampleText;
 //		}
 //		if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
 //			subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
 //		} else {
 //			subst = tagOpen + myText + tagClose;
 //		}
 txtarea.value=txtarea.value.substring(0,startPos)+newText+txtarea.value.substring(endPos,txtarea.value.length);
 txtarea.focus();
 //set new selection
 if(!replaced){
 varcPos=startPos+(newText.length);
 txtarea.selectionStart=cPos;
 txtarea.selectionEnd=cPos;
 }else{
 txtarea.selectionStart=startPos+beforeText.length;
 txtarea.selectionEnd=startPos+beforeText.length+selText.length;
 }
 txtarea.scrollTop=scrollTop;

 // All other browsers get no toolbar.
 // There was previously support for a crippled "help"
 // bar, but that caused more problems than it solved.
 }
 // reposition cursor if possible
 if(txtarea.createTextRange){

 txtarea.caretPos=document.selection.createRange().duplicate();
 //txtarea.caretPos =IESelectedRange.Rng;
 }
 txtarea.focus();
 }


 //============================================================
 // Table generator
 //============================================================
 /** en: Generate an array using MediaWiki syntax
  * @author: originally from fr:user:dake
  * @version: 0.2 */
 functiongenerateTable(caption,exhead,nbCol,nbRow,exfield,align){
 }


 functionXEBPopupRef(e){

 varm=newGetPos(e||event);

 curPopup=newXEBPopup('ref',m.x,m.y);
 curPopup.width=300;
 varmt='<p>Enter the reference parameters below: <\/p>'+
 '<form name="XEBPopupRefForm">'+
 'Name:<input type="text" name="refName" value="" size="10"><p\/>'+
 'Material:<input type="text" name="refMaterial" value="'+XEBGetSelectedText()+
 '" size="20">'+
 '<\/form>'+
 '<p><button onClick="javascript:insertRef()">Insert</button>'+
 '<button onClick="hideXEBPopup()">Cancel</button>';

 curPopup.setInnerHTML(mt);
 //	document.XEBPopupRefForm.refName.focus();
 returntrue;
 }

 functioninsertRef(){
 varf=document.XEBPopupRefForm;
 varrefName=f.refName.value;
 varrefMaterial=f.refMaterial.value;

 hideXEBPopup();
 varcode1='<ref';
 code1+=(refName)?' name="'+refName+'">':'>';
 varcode2=refMaterial;
 varcode3='<\/ref>';
 XEBinsertText(code1,code2,code3,curPopup.IESelectedRange);

 extendSummary('ref');
 returnfalse;
 }

 //===GEO LINK Function==================================================

 functionXEBPopupGeoLink(e){
 varm=newGetPos(e||event);

 curPopup=newXEBPopup('geo',m.x,m.y);
 curPopup.width=300;
 varmt='<p>Enter the location parameters below: <\/p>'+
 '<form name="XEBPopupGeoLinkForm">'+
 'Location:<p\/>'+
 '<table style="background: transparent;">'+
 '<tr><td>Latitude:<\/td><td><input type="text" autocomplete="off" name="geoLatDeg" value="" size="4"><\/td>'+
 '<td><input type="text" name="geoLatMin" size="4"><\/td>'+
 '<td><input type="text" name="geoLatSec" size="4"><\/td>'+
 '<td><select name="geoLatNS"><option value="N">N<option value="S">S</select><\/td><\/tr>'+
 '<tr><td>Longitude:<\/td><td><input type="text" name="geoLonDeg" value="" size="4"><\/td>'+
 '<td><input type="text" name="geoLonMin" value="" size="4"><\/td>'+
 '<td><input type="text" name="geoLonSec" value="" size="4"><\/td>'+
 '<td><select name="geoLonEW"><option value="E">E<option value="W">W</select><\/td><\/tr>'+
 '<\/table>'+
 'Region:<input type="text" name="geoRegion" value="" size="4"><p\/>'+
 'Type:'+
 '<SELECT NAME="geoType" size="5">'+
 '<OPTION VALUE="country">Country<OPTION VALUE="state">State'+
 '<OPTION VALUE="adm1st">Admin unit, 1st level<OPTION VALUE="adm2st">Admin unit, 2nd level'+
 '<OPTION VALUE="city">City<OPTION VALUE="airport">Airport'+
 '<OPTION VALUE="mountain">Mountain<OPTION VALUE="isle">Isle'+
 '<OPTION VALUE="waterbody">Waterbody<OPTION VALUE="landmark" SELECTED>Landmark'+
 '<OPTION VALUE="forest">forest</SELECT><br>'+
 'Title: <input type="checkbox" name="geoTitle" ><p\/>'+
 '<\/form>'+
 '<p><button onClick="javascript:insertGeoLink()">Insert</button>'+
 '<button onClick="hideXEBPopup()">Cancel</button>';

 curPopup.setInnerHTML(mt);
 document.paramForm.refName.focus();
 returntrue;

 }
 functioninsertGeoLink(){
 varf=document.XEBPopupGeoLinkForm;

 varcode='{{Coor ';
 if(f.geoTitle.checked){
 code+='title ';
 }
 varft='dms';
 if(f.geoLatSec.value===''&&f.geoLonSec.value===''){
 ft='dm';
 }
 if(ft==='dm'&&f.geoLatMin.value===''&&f.geoLonMin.value===''){
 ft='d';
 }
 code+=ft;
 code+='|'+f.geoLatDeg.value;
 code+=(ft==='dm'||ft==='dms')?'|'+f.geoLatMin.value:'';
 code+=(ft==='dms')?'|'+f.geoLatSec.value:'';
 code+='|'+f.geoLatNS.value;
 code+='|'+f.geoLonDeg.value;
 code+=(ft==='dm'||ft==='dms')?'|'+f.geoLonMin.value:'';
 code+=(ft==='dms')?'|'+f.geoLonSec.value:'';
 code+='|'+f.geoLonEW.value;
 code+='|type:'+f.geoType.value+'_region:'+f.geoRegion.value;
 code+='}}';
 insertTags('','',code);
 extendSummary('geo-location');
 hideXEBPopup();
 returnfalse;
 }

 //===Talk Page entry Function===========================================

 functionXEBPopupTalk(e){
 varm=newGetPos(e||event);

 curPopup=newXEBPopup('talk',m.x,m.y);
 curPopup.width=200;
 varmt='<div style="font-size:medium"><p>Please choose:<\/p>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(1)">Test1<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(2)">Self Test<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(3)">Nonsense<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(4)">Please stop<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(5)">Last chance<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(6)">Blanking<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(7)">Blatant<\/span><br>';
 mt+='<span class="XEBMnuItm" ;onclick="XEBInsertTalk(8)">*BLOCKED*<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(9)">Spam<\/span><br>';
 mt+='<span class="XEBMnuItm" onclick="XEBInsertTalk(10)">Npov<\/span><br>';

 curPopup.setInnerHTML(mt);

 returntrue;

 }

 functionXEBInsertTalk(itm){
 varcode={
 1:'{'+'{subst:test1-n|}}',
 2:'{'+'{subst:selftest-n|}}',
 3:'{'+'{subst:test2-n|}}',
 4:'{'+'{subst:test3-n|}}',
 5:'{'+'{subst:test4-n|}}',
 6:'{'+'{subst:test2a-n|}}',
 7:'{'+'{subst:bv-n|}}',
 8:'{'+'{subst:blantant|}}',
 9:'{'+'{subst:spam-n|}}',
 10:'{'+'{subst:NPOV user}}'
 };
 hideXEBPopup();
 insertTags('','',code[itm]);
 returnfalse;
 }
 functionXEBPopupImage(e){
 varm=newGetPos(e||event);

 curPopup=newXEBPopup('image',m.x,m.y);
 curPopup.width=300;

 varmt='<p>Enter the image parameters below: <\/p>'+
 '<form name="XEBPopupImageForm">'+
 'File:<input type="text" name="imgFile" value="'+XEBGetSelectedText()+'" size="30"><br>'+
 'Type:<SELECT NAME="imgType">'+
 '<OPTION VALUE="thumb">Thumbnail'+
 '<OPTION VALUE="frame">Frame'+
 '<OPTION VALUE="none">[not specified]'+
 '</SELECT><br>'+
 'Location:<SELECT NAME="imgLocation">'+
 '<OPTION VALUE="left">Left'+
 '<OPTION VALUE="center">Centre'+
 '<OPTION VALUE="right">Right'+
 '<OPTION VALUE="none">None'+
 '</SELECT><br>'+
 'Size:<input type="text" name="imgSize" value="100" size="3">px<br>'+
 'Caption:<input type="text" name="imgCaption" value="" size="30"><\/p>'+
 '<\/form>'+
 '<p><button onClick="javascript:XEBInsertImage()">Insert</button>'+
 '<button onClick="hideXEBPopup()">Cancel</button>';

 curPopup.setInnerHTML(mt);

 returntrue;
 }

 functionXEBInsertImage(){
 varf=document.XEBPopupImageForm;
 hideXEBPopup();
 varcode='[[Image:';
 code+=f.imgFile.value;
 code+='|'+f.imgType.value;
 code+='|'+f.imgLocation.value;
 code+='|'+f.imgSize.value;
 code+='|'+f.imgCaption.value;
 code+=']]';
 insertTags('','',code);
 extendSummary('image');

 returnfalse;
 }

 functionXEBPopupFormattedText(e){
 varm=newGetPos(e||event);

 curPopup=newXEBPopup('image',m.x,m.y);
 curPopup.width=300;

 varmt='<form name="XEBPopupImageForm">'+
 '<table style="background: transparent;">'+
 '<tr><td>Bold:<\/td><td><input type="checkbox" name="textBold"><\/td>'+
 '<td>Superscript:<\/td><td><input type="checkbox" name="textSuperscript"><\/td><\/tr>'+
 '<tr><td>Italic:<\/td><td><input type="checkbox" name="textItalic"><\/td>'+
 '<td>Subscript:<\/td><td><input type="checkbox" name="textSubscript"><\/td><\/tr>'+
 '<tr><td>Strike:<\/td><td><input type="checkbox" name="textStrike"><\/td>'+
 '<td>&nbsp;<\/td><\/tr>'+
 '</table>'+
 'Size:<SELECT NAME="textSize">'+
 '<OPTION VALUE="small">small'+
 '<OPTION VALUE="normal">[Normal]'+
 '<OPTION VALUE="big">big'+
 '</SELECT><br><table style="background:transparent;"><tr><td>Colour:<\/td><td>'+
 '<table width="100px">'+
 '<tr><td colspan="4">None<\/td></tr>'+
 '<tr><td bgcolor="aqua">&nbsp;<\/td><td bgcolor="gray"> &nbsp;<\/td>'+
 '<td bgcolor="olive">&nbsp;<\/td><td bgcolor="navy">&nbsp;<\/td><\/tr>'+
 '<tr><td bgcolor="black">&nbsp;<\/td><td bgcolor="green"> &nbsp;<\/td>'+
 '<td bgcolor="purple">&nbsp;<\/td><td bgcolor="teal">&nbsp;<\/td><\/tr>'+
 '<tr><td bgcolor="blue">&nbsp;<\/td><td bgcolor="lime">&nbsp;<\/td>'+
 '<td bgcolor="red">&nbsp;<\/td><td bgcolor="white">&nbsp;<\/td><\/tr>'+
 '<tr><td bgcolor="fuchsia">&nbsp;<\/td><td bgcolor="maroon">&nbsp;<\/td>'+
 '<td bgcolor="silver">&nbsp;<\/td><td bgcolor="yellow">&nbsp;<\/td><\/tr>'+
 '</table><\/td><\/tr>'+
 '<\/form>'+
 'Sample:'+
 '<span id="sampleText">Text</span>"'+
 '<p><button onClick="javascript:XEBInsertFormattedText()">Insert</button>'+
 '<button onClick="hideXEBPopup()">Cancel</button>';

 curPopup.setInnerHTML(mt);

 returntrue;
 }

 functionXEBUpdateSampleText(){
 varf=document.XEBPopupImageForm;
 }

 //====================

 functionXEBMenuMouseOut(e){
 vartarg;
 if(!e){
 e=window.event;
 }
 if(e.target){
 targ=e.target;
 }elseif(e.srcElement){
 targ=e.srcElement;
 }

 targ.style.color='black';
 }

 functionXEBMenuMouseOver(e){
 vartarg;
 if(!e){
 e=window.event;
 }
 if(e.target){
 targ=e.target;
 }elseif(e.srcElement){
 targ=e.srcElement;
 }

 targ.style.color='red';
 }

 //=======================================================================
 // Other functions
 //=======================================================================

 functionXEBgetElementsByClassName(parent,clsName,htmltag){
 vararr=[],elem;
 varelems=parent.getElementsByTagName(htmltag);
 for(varcls,i=0;
 (elem=elems[i]);i++){
 if(elem.className===clsName){
 arr[arr.length]=elem;
 }
 }
 returnarr;
 }

 functionextendSummary(newText){
 if(!XEBExtendEditSummary){
 return;
 }
 vars=document.editform.elements.wpSummary.value;
 s+=(s==='')?newText:' +'+newText;
 document.editform.elements.wpSummary.value=s;
 }

 functionbug(msg){
 if(mw.config.get('wgUserName')==='MarkS'){
 alert(msg);
 }
 }
 /* </nowiki> */

AltStyle によって変換されたページ (->オリジナル) /