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| |�*160;|�*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+)( | |&#[Xx]0*[Aa]0;)?([mck]?m|kg|[KMG]iB|[kMG](B|Hz)|KB)\b/g,"1ドル 3ドル"); /* Prozentwerte erhalten seit Mitte 2007 automatisch ein geschütztes Leerzeichen */ t=t.replace(/\b(\d+)( | |�*A0;)?(%[^\w"%;])/gi,"1ドル 3ドル"); /* Paragraf, Abs. und Satz mit geschützten Leerzeichen */ t=t.replace(/§( | |�*A0;| )+(\d+ +Abs\.)( | |�*A0;| )+(\d+ +Satz)( | |�*A0;)+(\d+)/gi, "§ 2ドル 4ドル 6ドル"); t=t.replace(/§( | |�*A0;| )+(\d+ +Abs\.)( | |�*A0;)+(\d+)/gi, "§ 2ドル 4ドル"); t=t.replace(/§( | |�*A0;)+(\d+)/gi, "§ 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,'.( | )*1ドル');//Leerzeichen nach Punkt t=t.replace(newRegExp(from,'g'),to); } /* Keine geschützten Leerzeichen in Überschriften */ while(t.match(/^=.* .*=$/m)) t=t.replace(/^(=.*) (.*=)$/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); }); }