Benutzer:Akkakk/TMg-autoFormatter.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
 // kopie von [[Benutzer:TMg/autoFormatter.js]]

 /**
  * Blendet eine „Auto-Format"-Funktion unter dem Bearbeitungsfenster ein, die
  * viele typische Wikifizierungs-Fehler automatisch korrigiert.
  * Eine ausführliche Beschreibung ist auf der Diskussionsseite zu finden.
  */
 functiondoAutoFormat(a)
 {
 vare=document.forms["editform"].elements;
 varb=e["wpTextbox1"];
 vart=b.value;

 /* jahreszahlen & daten entlinken, ausser im nullten abschnitt */
 p=t.indexOf("\n=");
 if(p>0)
 {
 t1=t.substr(0,p);
 t=t.substr(p);
 t=t.replace(/\[\[([12][0-9]{3})\]\]/g,"1ドル");
 t=t.replace(/\[\[([123]?[0-9]\. (Januar|Jänner|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\]\]/g,"1ドル");
 t=t1+t;
 }

 /* Überflüssige Leerräume entfernen, aber das allein rechtfertigt keinen Edit */
 t=t.replace(/\s+$/,"");
 t=t.replace(/[ \t\r]+\n/g,"\n");
 b.value=t;

 /* Mehrfache Leerzeilen auf einzelne reduzieren */
 t=t.replace(/([ \t\r]*\n){3,}/g,"\n\n");
 /* Die verschiedensten Formen der Zeilenumbrüche durch korrekte ersetzen */
 t=t.replace(/<[\s\/]*br\s*(\s\w[^>]*?)?[\s\/]*>/gi,"<br1ドル />");

 /* Dateinamen retten */
 varregex=newRegExp("(^|\\[\\[)\\s*(Bild|Datei|File|Image)\\s*:\\s*([^|\\]\\n]*?)\\s*([|\\]\\n])","gim");
 varfiles=[];
 while(match=regex.exec(t))files[files.length]=match;
 for(vari=files.length-1;i>=0;i--)
 {
 /* Keine geschützten Leerzeichen/Unterstriche in Dateinamen */
 files[i][3]=files[i][3].replace(/(_|%20|&nbsp;|&#0*160;|&#x0*A0;)/gi," ");
 /* Einheitliche Schreibweise und Leerzeichenausgleich */
 t=t.replace(files[i][0],files[i][1]+"Datei:"+i+files[i][4]);
 }

 /* == Überschriften == immer mit Leerzeichen */
 t=t.replace(/^(=+) *([^ =].*=)$/gm,"1ドル 2ドル");
 t=t.replace(/^(=.*[^ =]) *(=+)$/gm,"1ドル 2ドル");
 /* Weblinks immer als Weblinks */
 t=t.replace(/^== *(External|Externer?)? *(Links?|Weblinks?|Webseiten?|Websites?) *==/gim,
 "== Weblinks ==");

 /* Einheitliche Schreibweisen für Schlüsselwörter incl. Leerzeichenausgleich */
 t=t.replace(/\[\[\s*(Category|Kategorie)\s*:\s*/gi,"[[Kategorie:");
 t=t.replace(/(\[\[Datei:[^\]]*?)\s*\|+\s*((rechts|right)\s*\|+\s*)?(miniatur|thumb)\s*\|+\s*((rechts|right)\s*\|+\s*)?/gi,"1ドル|miniatur|");
 t=t.replace(/(\[\[Datei:[^\]]*?)\s*\|+\s*(rechts|right)\s*\|+\s*/gi,"1ドル|rechts|");
 t=t.replace(/(\[\[Datei:[^\]]*?)\s*\|+\s*(links|left)\s*\|+\s*/gi,"1ドル|links|");
 t=t.replace(/(\[\[Datei:[^\]]*?)\s*\|+\s*(hochkant|upright)\s*((=)\s*([0-9.]*))?\s*\|+\s*/gi,"1ドル|hochkant4ドル5ドル|");
 t=t.replace(/\{\{\s*(Template|Vorlage)\s*:\s*/gi,"{{");
 t=t.replace(/\{\{\s*Commons(cat\s*\|(\s*(Category|Kategorie)\s*:)?|\s*\|\s*(Category|Kategorie)\s*:)\s*/gi,"{{Commonscat|");
 t=t.replace(/\{\{\s*Commons\s*\|\s*/gi,"{{Commons|");
 t=t.replace(/\{\{\s*Wikisource\s*\|\s*/gi,"{{Wikisource|");
 t=t.replace(/\{\{\s*Wiktionary\s*\|\s*/gi,"{{Wiktionary|");
 t=t.replace(/\{\{\s*(DEFAULTSORT|SORTIERUNG)\s*:\s*/gi,"{{SORTIERUNG:");
 t=t.replace(/\s*#(REDIRECT|WEITERLEITUNG)\s*\[\[/gi,"#WEITERLEITUNG [[");
 t=t.replace(/\s*<\s*\/\s*ref>/gi,"</ref>");
 t=t.replace(/<references\s*\/\s*>/gi,"<references />");
 t=t.replace(/class\s*=\s*("(\s*[^\s"]+\s)*)?\s*\bprettytable\b/g,'class=1ドルwikitable');

 /* Sortierung soll nie Umlaute enthalten */
 t=t.replace(/(\{\{SORTIERUNG:[^}]*?)ß/,"1ドルss");
 varsortSrc="¢£\©a®231oÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöøùúûüýÿ";
 varsortDst="cLYCaR231oAAAAAACEEEEIIIIDNOOOOOOUUUUYaaaaaaceeeeiiiidnoooooouuuuyy";
 regex=newRegExp("(\\{\\{SORTIERUNG:[^}]*?)(["+sortSrc+"])","g");
 while(t.match(regex))t=t.replace(regex,function(0ドル,1ドル,2ドル){return1ドル+sortDst.charAt(sortSrc.indexOf(2ドル));});
 /* Sortierung soll einheitliche Groß/Kleinschreibung haben */
 regex=/(\{\{SORTIERUNG:[^}]*?)(\b[a-z])/g;
 while(t.match(regex))t=t.replace(regex,function(0ドル,1ドル,2ドル){return1ドル+2ドル.toUpperCase();});
 regex=/(\{\{SORTIERUNG:[^}]*?)(\B[A-Z]+)/g;
 while(t.match(regex))t=t.replace(regex,function(0ドル,1ドル,2ドル){return1ドル+2ドル.toLowerCase();});

 /* Weblinks auf Wikipedia-Sprachversionen in Wikilinks umwandeln */
 varinterWikiReplace=function(0ドル,1ドル,2ドル,3ドル)
 {
 return"[[:"+1ドル+":"+2ドル.replace(/_/g," ")+(typeof3ドル==="string"?"|"+3ドル:"")+"]]";
 }
 t=t.replace(/\[+ *\w+:\/+([a-z-]+)\.wikipedia\.org\/wiki\/([^?\][|]*?) *\|+ *([^\][\n]+?) *\]+/gi,interWikiReplace);
 t=t.replace(/\[+ *\w+:\/+([a-z-]+)\.wikipedia\.org\/wiki\/([^?\][\s]*) +([^\][\n]+?) *\]+/gi,interWikiReplace);
 t=t.replace(/\[+ *\w+:\/+([a-z-]+)\.wikipedia\.org\/wiki\/([^?\][\s]*) *\]+/gi,interWikiReplace);
 /* Wikilinks mit unnötigem Präfix w:de: oder :de: vereinfachen */
 t=t.replace(/\[\[ *w? *: *de *: *([^\][\n]*?) *\]\]/gi,"[[1ドル]]");
 /* Sonstige Weblinks mit senkrechtem Strich reparieren */
 t=t.replace(/\[ *(https?:\/\/[^\s|\]]*?) *\| *([^\][\n]*?) *\]/gi,"[1ドル 2ドル]");
 /* Doppelte eckige Klammern um Weblinks entfernen */
 t=t.replace(/\[+ *(https?:\/\/[^\][\n]*?) *\]+/gi,"[1ドル]");

 /* Anker in Links dekodieren */
 t=t.replace(/(\[\[[^#|\]]*#)([^|\]]+)(\|?[^|\]]*\]\])/gi,function(0ドル,1ドル,2ドル,3ドル)
 {
 try
 {
 2ドル=decodeURIComponent(2ドル.replace(/\.([289A-E][0-9A-F]|[357][B-F]|40|60)/g,"%1ドル")).
 replace(/%/g,"%25").replace(/\[/g,"%5B").replace(/]/g,"%5D").
 replace(/\{/g,"%7B").replace(/\|/g,"%7C").replace(/}/g,"%7D");
 }
 catch(ex){/* keine Veränderung im Fehlerfall */}
 return(1ドル+2ドル).replace(/_/g," ")+3ドル;
 });

 /* [[Link|Die]]s wird zu [[Link|Dies]] weil besser lesbar */
 t=t.replace(/(\[\[[^\|\]]+\|[^\|\]]+)\]\]([a-zäöüß]+)/gi,"1ドル2ドル]]");
 /* [[Link|Link]]s werden zu [[Link]]s weil kürzer und besser lesbar */
 t=t.replace(/\[\[([^\|\]]+)\|1円([^\][\n]*)\]\]/g,"[[1ドル]]2ドル");
 /* Jede Kategorie in einer eigenen Zeile */
 t=t.replace(/(\[\[Kategorie:[^\][\n]*\]\])(?!\n|$)/gi,"1ドル\n");
 t=t.replace(/([^\n])(\[\[Kategorie:[^\][\n]*\]\])/gi,"1ドル\n2ドル");
 t=t.replace(/(\[\[Kategorie:[^\][\n]*\]\]\n)(?!\[\[Kategorie:|\n|$)/gi,"1ドル\n");

 /* Versehentliche Links um ISO-Daten entfernen */
 t=t.replace(/\[+([12][0-9]{3}-[01][0-9]-[0-3][0-9])\]+/g,"1ドル");
 /* Doppelte Jahreszahlen entlinken */
 varm=t.match(/\[\[[12][0-9]{3}\]\]/g);
 if(m&&m.length>1)
 {
 vari,p,pMax=t.lastIndexOf("{{Personendaten");
 for(i=m.length-1;i>=0;i--)
 {
 p=t.lastIndexOf(m[i],pMax>0?pMax:t.length);
 /* Je ein Duplikat entfernen, wenn vorhanden */
 if(p>t.indexOf(m[i]))
 t=t.substr(0,p)+m[i].replace(/[\[\]]+/g,"")+
 t.substring(p+m[i].length,t.length);
 }
 }

 /* Unnötige Leerzeichen bei HTML-Attributen, wichtig vor den Anführungszeichen */
 while(t.match(/[<|][^|>]*?\b *= +"/im))
 t=t.replace(/([<|][^|>]*?)\b *= +"/gim,"1ドル=\"");
 /* Anführungszeichen */
 t=t.replace(/([^\w=])[""]([^\n"""]+)[""]([^\w])/gm,"1ドル„2ドル"3ドル");
 /* Bis-Striche bei Jahreszahlen */
 t=t.replace(/([^0-9–-][12][0-9]{3}) *[–-]{1,2} *([12][0-9]{3}[^0-9–-])/g,"1ドル–2ドル");
 /* ISSNs aber ohne Bis-Striche */
 t=t.replace(/(IS\wN\W*\d+)–(\d+)/g,"1ドル-2ドル");
 /* ISBNs mit Bindestrichen gliedern */
 t=t.replace(/\bISBN(-?1[03])?:?\s*((9-?7-?[89]-?)?3)([\d-]{8,}[\dX]\b)/gi,function(0ドル,1ドル,2ドル,3ドル,4ドル){
 return"ISBN "+2ドル.replace(/^9\D*7\D*([89])\D*3/,"971ドル-3")+"-"+4ドル.replace(/[^\dX]/gi,"").
 replace(/^(0[5-9]|1\d)(\d{6})/,"1ドル-2ドル-").
 replace(/^([2-6]\d\d)(\d{5})/,"1ドル-2ドル-")./* einschl. Einzel-ISBNs Österreich*/
 replace(/^(7[3-9]\d\d|8[0-4]\d\d)(\d{4})/,"1ドル-2ドル-").
 replace(/^(8[5-9]\d{3})(\d{3})/,"1ドル-2ドル-").
 replace(/^(9[1-4]\d{4})(\d\d)/,"1ドル-2ドル-").
 replace(/^(9[78]\d{5})(\d)/,"1ドル-2ドル-");
 });

 varmonths=["Januar","Februar","März","April","Mai","Juni",
 "Juli","August","September","Oktober","November","Dezember"];
 for(vari=0;i<months.length;i++)
 {
 /* Missverständliches deutsches Datumsformat durch Langform ersetzen */
 regex=newRegExp("([^|0-9–-])0?(3[01]|[12]?[0-9])\\. *0?"+(1+i)+"\\. *([12][0-9]{3}[^0-9–-])","g");
 t=t.replace(regex,"1ドル2ドル. "+months[i]+" 3ドル");
 /* In "1850–14. Januar" immer "bis" einsetzen */
 regex=newRegExp("([^0-9–-][12][0-9]{3}) *[–-]{1,2} *0?([0-9]{1,2}\\. *"+months[i]+")","g");
 t=t.replace(regex,"1ドル bis 2ドル");
 }
 /* 1980–90 immer als 1980–1990 */
 t=t.replace(/([^0-9–-][12][0-9]{3}) *- *((1[3-9]|[2-9][0-9])[^0-9=–-])/g,"1ドル–2ドル");/* Bindestrich gefunden */
 t=t.replace(/\b(([12][0-9])[0-9]{2}) *– *([0-9]{2})\b/g,"1ドル–2ドル3ドル");/* Bis-Strich gefunden */
 /* Gedankenstriche in <math> vermeiden */
 t=t.replace(/([a-z\]\xC0-\xFF]) +- +([a-z\[\xC0-\xFF])/gi,"1ドル – 2ドル");

 /* Maßeinheiten immer mit Leerzeichen */
 t=t.replace(/\b(\d+)( |&#160;|&#[Xx]0*[Aa]0;)?([mck]?m|kg|[KMG]iB|[kMG](B|Hz)|KB)\b/g,"1ドル&nbsp;3ドル");
 /* Prozentwerte erhalten seit Mitte 2007 automatisch ein geschütztes Leerzeichen */
 t=t.replace(/\b(\d+)(&nbsp;|&#160;|&#x0*A0;)?(%[^\w"%;])/gi,"1ドル 3ドル");
 /* Paragraf, Abs. und Satz mit geschützten Leerzeichen */
 t=t.replace(/§( |&#160;|&#x0*A0;|&nbsp;)+(\d+ +Abs\.)( |&#160;|&#x0*A0;|&nbsp;)+(\d+ +Satz)( |&#160;|&#x0*A0;)+(\d+)/gi,
 "§&nbsp;2ドル&nbsp;4ドル&nbsp;6ドル");
 t=t.replace(/§( |&#160;|&#x0*A0;|&nbsp;)+(\d+ +Abs\.)( |&#160;|&#x0*A0;)+(\d+)/gi,
 "§&nbsp;2ドル&nbsp;4ドル");
 t=t.replace(/§( |&#160;|&#x0*A0;)+(\d+)/gi,
 "§&nbsp;2ドル");

 varautoFormatReplacements=window.autoFormatReplacements||[];
 for(frominautoFormatReplacements)
 {
 varto=autoFormatReplacements[from];
 from=from.replace(/([.+*?(){}<>|])/g,'\\1ドル');//Regex-Zeichen maskieren
 from=from.replace(/^(\w)/,'\\b1ドル').replace(/(\w)$/,'1ドル\\b');//Wortgrenzen beachten
 from=from.replace(/\.([\w\xC0-\xFF])/g,'.( |&nbsp;)*1ドル');//Leerzeichen nach Punkt
 t=t.replace(newRegExp(from,'g'),to);
 }

 /* Keine geschützten Leerzeichen in Überschriften */
 while(t.match(/^=.*&nbsp;.*=$/m))
 t=t.replace(/^(=.*)&nbsp;(.*=)$/gm,"1ドル 2ドル");

 varredundantTemplateParameters=window.redundantTemplateParameters||[
 "Infobox Arcade|Titel",
 "Infobox Band|Name",
 "Infobox Berg|NAME",
 "Infobox Computer- und Videospiel|Titel",
 "Infobox Eishockeyspieler|Name",
 "Infobox Fluss|NAME",
 "Infobox Fußballspieler|kurzname",
 "Infobox Gemeinde in Deutschland|Name",
 "Infobox Gemeinde in Italien|nomeComune",
 "Infobox Gemeindeverband in Deutschland|Name",
 "Infobox Landkreis|Name",
 "Infobox Musikalbum|Titel",
 "Infobox Ort in Tschechien|Ort",
 "Infobox Ortsteil einer Gemeinde|Ortsteil",
 "Infobox Unternehmen|Name"];
 varparameter="\\s*=\\s*("+
 wgTitle.replace(/([.\\+*?\[\](){}|])/g,"\\1ドル").replace(/\s+/g,"\\s+")+
 "|\\{+\\w*\\}+)?\\s*([}|])";
 for(vari=redundantTemplateParameters.length-1;i>=0;i--)
 {
 varregex=newRegExp("(\\{\\{\\s*"+
 redundantTemplateParameters[i].replace(/[\s_]+/g,"[\\s_]+").replace(/\|/,"[^}]*)\\|\\s*")+
 parameter,"g");
 t=t.replace(regex,"1ドル3ドル");
 }

 /* Spezielle Infobox-Ersetzungen */
 if(t.match(/Infobox[ _](Gemeinde|Ort)[ _]in[ _]Deutschland/i))
 {
 t=t.replace(/Infobox[ _](Gemeinde|Ort)[ _]in[ _]Deutschland([^}]*}})[\s\r\n]*/i,'Infobox Gemeinde in Deutschland2ドル\n\n');
 t=t.replace(/\|\s*lat_deg\s*=\s*(\S*)(\s*\|\s*lat_min\s*=\s*(\S*)(\s*\|\s*lat_sec\s*=\s*(\S*))?)?/ig,
 '|Breitengrad = 1ドル/3ドル/5ドル');
 t=t.replace(/\|\s*lon_deg\s*=\s*(\S*)(\s*\|\s*lon_min\s*=\s*(\S*)(\s*\|\s*lon_sec\s*=\s*(\S*))?)?/ig,
 '|Längengrad = 1ドル/3ドル/5ドル');
 t=t.replace(/(\/0*)+[\r\n]+/g,'\n');
 t=t.replace(/(\[http:\/\/[^\/\s\]]*)\s+/ig,'1ドル/ ');
 if(t.match(/Art\s*=\s*(Amt|Samtgemeinde|Verbandsgemeinde|Verwaltungsgemeinschaft|(Gemeinde)?verwaltungsverband)/i))
 {
 t=t.replace(/[ _]Gemeinde[ _]in[ _]Deutschland/i,' Gemeindeverband in Deutschland');
 t=t.replace(/\|\s*(PLZ(-alt)?|Vorwahl|Kfz)\s*=.*[\r\n]+/ig,'');
 t=t.replace(/\|\s*Bürgermeister( {0,5}|titel)?\s*=\s*/ig,'|Organwalter1ドル = ');
 if(!t.match(/\|\s*Gliederung\s*=/))
 t=t.replace(/(\|\s*Adresse\s*=)/i,'|Gliederung = \n1ドル');
 t=t.replace(/\|\s*Gliederung\s*=\s*([0-9]*).*/i,'|Gliederung = 1ドル');
 e["wpSummary"].value+="Einsatz der neuen [[Vorlage:Infobox Gemeindeverband in Deutschland]]";
 e["wpMinoredit"].checked=true;
 }
 if(!t.match(/\|\s*Partei\s*=/))
 t=t.replace(/((\|\s*(Bürgermeister|Organwalter)[^|}]*)+)/i,'1ドル|Partei =\n');
 t=t.replace(/[\r\n]+\s*\|\s*(.{17})\s*=/ig,'\n|1ドル =');
 }

 /* Gerettete Dateinamen wieder einsetzen */
 for(vari=files.length-1;i>=0;i--)
 {
 if(!files[i][1])files[i][1]="\n";
 t=t.replace(files[i][1]+"Datei:"+i+files[i][4],files[i][1]+"Datei:"+files[i][3]+files[i][4]);
 }

 varchanged=t!=b.value.replace(/\r+\n/g,"\n");
 if(changed)b.value=t.replace(/\s+$/,"");
 if((!a||!a.nodeType||a.nodeName==='IMG')&&$)/* Vector/Monobook */
 {
 vare=$(a&&a.nodeType?a:'img[rel=autoFormatter]');
 e.css('backgroundColor',changed?'#DEF740':'');
 e.css('borderRadius',changed?'3px':'');
 e.css('opacity',changed?'':'0.4');
 }
 elseif(a)a.style.color=changed?'green':'silver';
 returnfalse;
 }

 if(typeof$!='undefined'&&typeof$.fn.wikiEditor!='undefined'&&$.wikiEditor.isSupported($.wikiEditor.modules.toolbar))/* Vector */
 {
 $(function(){
 $('#wpTextbox1').wikiEditor('addToToolbar',{
 'section':'main',/* oder advanced */
 'group':'format',
 'tools':{
 'autoFormatter':{
 'label':'Auto-Format',
 'type':'button',
 'icon':'http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Broom_icon.svg/22px-Broom_icon.svg.png',
 'action':{
 'type':'callback',
 'execute':function(){returndoAutoFormat(this);}
 }
 }
 }
 });
 });
 }
 else
 {
 if(mwCustomEditButtons)/* Monobook */
 {
 mwCustomEditButtons[mwCustomEditButtons.length]={
 'imageId':'mw-customeditbutton-autoFormatter',
 'imageFile':'http://upload.wikimedia.org/wikipedia/commons/2/2e/Button_broom.png',
 'speedTip':'Auto-Format',
 'tagOpen':'','sampleText':'','tagClose':''
 };
 }
 hookEvent('load',function()
 {
 varf=document.getElementById('mw-customeditbutton-autoFormatter');
 if(f){f.onclick=function(){returndoAutoFormat(this);};return;}

 /* Notfalls als Link unter dem Bearbeitungsfenster */
 f=document.getElementById('editform');
 if(!f)return;
 vara=document.createElement('A');
 a.href='#';
 a.onclick=function(){returndoAutoFormat(this);}
 a.appendChild(document.createTextNode('Auto-Format'));
 vars=f.getElementsByTagName('SPAN');
 for(vari=s.length-1;i>=0;i--)if(s[i].className==='editHelp'){s=s[i];break;}
 s.appendChild(document.createTextNode(' | '));
 s.appendChild(a);
 });
 }
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Benutzer:Akkakk/TMg-autoFormatter.js&oldid=216064816"