„Benutzer:Limasign/monobook.js" – Versionsunterschied
aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen
Zur Suche springen
K Maintenance: Replacing addOnloadHook with native jQuery (mw:ResourceLoader/Migration_guide_(users)#addOnloadHook - phab:T130879)
KKeine Bearbeitungszusammenfassung
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="▼"; this.header.style.marginBottom=null; this.style.display=null; } else{ this.button.innerHTML="►"; 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"; }