„Benutzer:Limasign/monobook.js" – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Versionsgeschichte interaktiv durchsuchen
← Zum vorherigen Versionsunterschied Zum nächsten Versionsunterschied →
Inhalt gelöscht Inhalt hinzugefügt
Zeile 12: Zeile 12:
+ '&action=raw&ctype=text/javascript&dontcountme=s');
+ '&action=raw&ctype=text/javascript&dontcountme=s');
// [[User:Lupin/popups.js]]
// [[User:Lupin/popups.js]]
mw.loader.load(
'https://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js'
+ '&action=raw&ctype=text/javascript&dontcountme=s');






Version vom 23. März 2023, 21:21 Uhr

 // 1

 // [[Benutzer:Dschwen/wikiminiatlas2.js]] - diese Zeile bitte mitkopieren
 document.write('<script type="text/javascript" src="'
 +'http://de.wikipedia.org/w/index.php?title=User:Dschwen/wikiminiatlas2.js'
 +'&action=raw&ctype=text/javascript&dontcountme=s"></script>');

 //// [[:en:User:Lupin/popups.js]]

 mw.loader.load(
 'https://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js'
 +'&action=raw&ctype=text/javascript&dontcountme=s');
 // [[User:Lupin/popups.js]]



 /* monobook.js */
 functionsearchToTop(){
 function$(id){returndocument.getElementById(id);}
 varsearch=$('p-search');
 search.parentNode.removeChild(search);
 $('column-one').insertBefore(search,$('p-navigation'));
 }
 if(window.addEventListener)window.addEventListener("load",searchToTop,false);
 elseif(window.attachEvent)window.attachEvent("onload",searchToTop);





 /*
  * moveEditsection
  * Dieses Script verschiebt die Editsection-Buttons von rechts oberhalb
  * der Überschriften in die Überschriften.
  * Positiv getestet unter: Firefox 1.0, Opera 8.0, Internet Explorer 6.0
  * Anmerkungen, Verbesserungen, Hinweise, Nörgeleien jederzeit gerne gesehen!
  * dbenzhuser (de:Benutzer:Dbenzhuser)
  */

 functionmoveEditsection(){
 // Sammelt alle div-Elemente der Klasse "editsection".
 vareditsections=newArray();
 vardivs=document.getElementById("bodyContent").getElementsByTagName("div");
 for(vari=0;i<divs.length;i++){
 if(divs[i].className=="editsection"){
 editsections.push(divs[i]);
 }
 }
 // Wenn die Seite Editsection-Buttons enthält.
 if(editsections.length!=0){
 // Sucht zu jedem Editsection-Button die dazugehörige Überschrfift.
 vari=0;
 varelement,heading;
 while(editsections[i]!=null){
 element=editsections[i];
 heading=element.nextSibling;
 while(!/^H[2-6]$/.test(heading.nodeName)){
 heading=heading.nextSibling;
 }
 // Erstellt innerhalb der Überschrift ein per CSS formatiertes span-Element.
 // Dort hinein wird dann der Editsection-Link verschoben.
 // Anschließend werden die Reste des alten Editsection-Buttons entfernt.
 varspanElement=document.createElement("span");
 varspaceNode=document.createTextNode(" ");
 heading.appendChild(spaceNode);
 heading.appendChild(spanElement);

 spanElement.style.fontSize="x-small";
 spanElement.style.fontWeight="normal";

 while(element.childNodes.length!=0){
 spanElement.appendChild(element.childNodes[0]);
 }
 element.parentNode.removeChild(element);
 i++;
 }
 }
 }
 // onload
 $(moveEditsection);

 /*
  * Ende moveEditsection
  */




 /*
  * showRedundantLinks
  * In der Navigationsleiste am Rand wird eine sortierte Liste aller im Artikel
  * vorkommenden Links erstellt. Mehrfach vorkommende Links werden im Artikel
  * gekennzeichnet.
  * dbenzhuser (de:Benutzer:Dbenzhuser)
  */

 // Zutun: Links an der Seite mit Sonderfunktionen belegen.
 // Z.B. dauerhaft markieren, Sprung zu Link.

 // Mergesort für Arrays
 // Wegen kleiner Modifikationen (siehe Kommentare) nur zur Verwendung bei der
 // Erstellung der Linkleiste.
 varb;
 Array.prototype.mergesort=function(lo,hi){
 if(lo<hi){
 varmid=((hi+lo)-(hi+lo)%2)/2;
 this.mergesort(lo,mid);
 this.mergesort(mid+1,hi);
 vari=0;
 varj=lo;
 while(j<=mid){
 b[i++]=this[j++];
 }
 vari=0;
 vark=lo;
 while(k<j&&j<=hi){
 // Sortiert wird nach Title-Attribut der Links.
 // '[0].getAttribute("title")' entfernen für normalen Mergesort.
 if(b[i][0].getAttribute("title")<=this[j][0].getAttribute("title")){
 this[k++]=b[i++];
 }
 else{
 this[k++]=this[j++];
 }
 }
 while(k<j){
 this[k++]=b[i++];
 }
 }
 }

 // Fügt einem Attribut einen weiteren durch Leerzeichen abgetrennten Wert hinzu.
 Node.prototype.addAttributeValue=function(key,value){
 if(!this.getAttribute(key)){
 this.setAttribute(key,value);
 }
 else{
 this.setAttribute(key,this.getAttribute(key)+" "+value);
 }
 }

 // Löscht einen Wert aus einem Attribut.
 Node.prototype.removeAttributeValue=function(key,value){
 varnewvalue=this.getAttribute(key);
 varreg=newRegExp("(^|\\s)"+value+"(\\s|$)");
 newvalue=newvalue.replace(reg," ");
 newvalue=newvalue.replace(/^\s+/g,"");
 newvalue=newvalue.replace(/\s+$/g,"");
 this.setAttribute(key,newvalue);
 }

 // Markierungen werden bei allen Links der übergebenen Klasse ein bzw ausgeblendet.
 functionhighlight(cname,on){
 varobjects=document.getElementsByTagName("a");
 cname=cname.replace("(","\\(");
 cname=cname.replace(")","\\)");
 varreg=newRegExp("(^|\\s)"+cname+"(\\s|$)");
 varlength=objects.length
 for(vari=0;i<length;i++){
 if(objects[i].className.search(reg)!=-1){
 if(on){
 objects[i].addAttributeValue("class","highlight");
 }
 else{
 objects[i].removeAttributeValue("class","highlight");
 }
 }
 }
 }

 // Nach dem Vorbild der bereits vorhandenen Listen wird eine neue Box in der
 // Navigationsleiste installiert, die einen Link zum Aktivieren des
 // Linksammlers enthält.
 functioncreateLinksSidebar(){
 // Elemente der Box erstellen.
 vardivPortlet=document.createElement("div");
 varh5=document.createElement("h5");
 varh5Text=document.createTextNode("Links im Artikel");
 vardivPbody=document.createElement("div");
 varul=document.createElement("ul");
 // Mit Attributen ausrüsten.
 divPortlet.setAttribute("id","p-link");
 divPortlet.setAttribute("class","portlet");
 divPbody.setAttribute("class","pBody");
 ul.setAttribute("id","u-link")
 // Spalte suchen.
 varcolumn=document.getElementById("column-one");
 // Box einbauen.
 column.appendChild(divPortlet);
 divPortlet.appendChild(h5);
 h5.appendChild(h5Text);
 divPortlet.appendChild(divPbody);
 divPbody.appendChild(ul);
 // Aktivierunglink erstellen.
 varli=document.createElement("li");
 li.style.whiteSpace="nowrap";
 ul.appendChild(li);
 vara=document.createElement("a");
 a.setAttribute("href","javascript:showRedundantLinks()");
 a.setAttribute("title","Aktivieren!");
 li.appendChild(a);
 varaText=document.createTextNode("Aktivieren");
 a.appendChild(aText);
 }

 // Alle Wikilinks innerhalb des Artikels werden gesammelt.
 // Anschließend werden sie in der Liste angezeigt und mehrfache Links im
 // Artikeltext markiert.
 functionshowRedundantLinks(){
 // "Aktivieren"-Link (inkl Listenelement) entfernen.
 varul=document.getElementById("u-link");
 ul.removeChild(ul.firstChild);
 // Alle Links im Artikeltext sammeln.
 varlinks=document.getElementById("bodyContent").getElementsByTagName("a");
 // Regexps zur Bestimmung der relevanten Links.
 varregexpExist=/^\/wiki\/(.+)$/;
 varregexpNotExist=/^\/w\/index\.php\?title=(.+)\&action=edit$/;
 varregexpExclude=/^\/w(iki)?\/(index\.php\?title=)?(Bild|Benutzer|Benutzer_Diskussion)\:(.+)$/;
 // Nur relevante Links in neues Array speichern.
 // Dabei werden jeweils eine Referenz auf den Link im Artikel und ein Klon
 // für die Linkleiste gespeichert.
 varlinkCount1=links.length;
 varlinkNodes=newArray();
 for(vari=0;i<linkCount1;++i){
 if(links[i].getAttribute("title")&&!regexpExclude.test(links[i].getAttribute("href"))&&(regexpExist.test(links[i].getAttribute("href"))||regexpNotExist.test(links[i].getAttribute("href")))){
 linkNodes.push(newArray(links[i].cloneNode(true),links[i]));
 }
 }
 // Bei Links für Linkleiste den Linktext mit Title-Attribut überschreiben.
 varlinkCount2=linkNodes.length;
 for(vari=0;i<linkCount2;++i){
 varlinkTitle=linkNodes[i][0].getAttribute("title");
 varlinkText=document.createTextNode(linkTitle);
 linkNodes[i][0].replaceChild(linkText,linkNodes[i][0].firstChild);
 // Attribute und Funktionsaufrufe für Highlighting.
 // Leerzeichen werden durch Unterstriche ersetzt.
 varlinkTitleClass=linkTitle;
 linkTitleClass=linkTitleClass.replace(/\s/g,"_");
 linkNodes[i][0].addAttributeValue("class",linkTitleClass);
 linkNodes[i][0].setAttribute("onmouseover","highlight(\""+linkTitleClass+"\", true)");
 linkNodes[i][0].setAttribute("onmouseout","highlight(\""+linkTitleClass+"\", false)");
 linkNodes[i][1].addAttributeValue("class",linkTitleClass);
 linkNodes[i][1].setAttribute("onmouseover","highlight(\""+linkTitleClass+"\", true)");
 linkNodes[i][1].setAttribute("onmouseout","highlight(\""+linkTitleClass+"\", false)");
 }
 // Hilfsarray vorbereiten und Sortierungsfunktion aufrufen.
 b=newArray(((linkNodes.length)-(linkNodes.length%2))/2);
 linkNodes.mergesort(0,linkNodes.length-1);
 // Links im Artikeltext mit Zähler ausstatten.
 for(vari=1;i<linkCount2;++i){
 varequal=true;
 varj=1;
 while(equal==true){
 if(i>=j&&(linkNodes[i][0].firstChild.nodeValue==linkNodes[i-j][0].firstChild.nodeValue)){
 j++;
 }
 else{
 equal=false;
 // Nur bei mehrfachvorkommenden Links Zähler einfügen.
 if(j!=1){
 varspan=document.createElement("span");
 linkNodes[i][1].appendChild(span);
 varspanText=document.createTextNode(" ("+j+")");
 span.appendChild(spanText);
 span.setAttribute("class","redundantLinkMark");// Klasse für (n).
 }
 }
 }
 }
 // Links in Linkleiste schreiben (jeweils mit Listenelement).
 for(vari=0;i<linkCount2;++i){
 varli=document.createElement("li");
 ul.appendChild(li);
 li.style.whiteSpace="nowrap";
 li.appendChild(linkNodes[i][0]);
 }
 }
 // onload
 $(createLinksSidebar);

 /*
  * Ende showRedundantLinks
  */






 //======================================================================
 //## foldHeaders.js 

 /** provides an icon for each heading to fold or unfold it */
 functionfoldHeaders(){
 //------------------------------------------------------------------------------
 //## folder

 /** attaches folders to all header tags of a given depth */
 functionattachRecursive(element,depth){
 vartagName="H"+depth;
 varheaders=element.getElementsByTagName(tagName);
 for(vari=0;i<headers.length;i++){
 varheader=headers[i];
 // skip some headers we do not want to modify
 if(header.id=="siteSub")continue;
 if(header.parentNode.id=="toctitle")continue;
 varend=i<headers.length-1
 ?findEnd(headers[i+1])
 :element.lastChild;
 if(!end)continue;
 varfolder=attachSingle(header,end);
 if(depth<6)attachRecursive(folder,depth+1);
 }
 }

 /** finds a (inclusive) endpoint for folder content */
 functionfindEnd(next){
 varmaybe=next;

 for(;;){
 maybe=maybe.previousSibling;
 if(!maybe)returnnull;
 if(maybe.nodeName!="#text")break;
 }
 if(maybe.nodeName!="P"){
 returnnext.previousSibling;
 }

 for(;;){
 maybe=maybe.previousSibling;
 if(!maybe)returnnull;
 if(maybe.nodeName!="#text")break;
 }
 if(maybe.nodeName!="DIV"||maybe.className!="editsection"){
 returnnext.previousSibling;
 }

 returnmaybe.previousSibling;
 }

 /** attaches a folder span to a header, end is inclusive. returns the folder span. */
 functionattachSingle(header,end){
 // add a button to the header toggling the display of the content span
 varbutton=document.createElement("span");
 button.className="foldButton";
 header.insertBefore(button,header.firstChild);

 // move content between start and end into a span after the header 
 varrange=document.createRange();
 range.setStartAfter(header);
 range.setEndAfter(end);
 varcontents=range.extractContents();
 varfolder=document.createElement("span");
 folder.appendChild(contents);
 header.parentNode.insertBefore(folder,header.nextSibling);

 // add state and methods to the folder
 folder.button=button;
 folder.header=header;
 folder.open=false;
 folder.update=folderUpdate;

 // make the button react on clicks
 button.folder=folder;
 button.onclick=buttonOnClick;

 folder.update();
 returnfolder;
 }

 /** update a complete folder according ot its state */
 functionfolderUpdate(){
 if(this.open){
 this.button.innerHTML="&#x25BC;";
 this.header.style.marginBottom=null;
 this.style.display=null;
 }
 else{
 this.button.innerHTML="&#x25BA;";
 this.header.style.marginBottom="0";
 this.style.display="none";
 }
 }

 /** onclick-handler for the button */
 functionbuttonOnClick(){
 this.folder.open=!this.folder.open;
 this.folder.update();
 }

 //------------------------------------------------------------------------------
 //## installation

 varbodyContent=$('bodyContent');

 // prevent double installation
 if(bodyContent.foldersInstalled)return;
 bodyContent.foldersInstalled=true;

 // install a folder on every header
 attachRecursive(bodyContent,2);

 // hide toc
 vartoc=$('toc');
 if(toc)toc.style.display="none";
 }
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Benutzer:Limasign/monobook.js&oldid=232115665"