Benutzer:PDD/addEditAndRevertLinks.js
Erscheinungsbild
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
// ============================================================
// BEGIN addEditAndRevertLinks
// (ursprünglich von [[Benutzer:Berlin-Jurist]] so weit ich weiß)
// Revert-Fkt hinzugefügt + Beschränkung auf Seiten wo es Sinn macht. [[Benutzer:Littl]].
//
// verschiedene Fixes von [[Benutzer:PDD]]:
// - verwirrende Extrabuttons auf den Diff-Seiten (oben in den Tabs) entfernt
// - ausführlichere Revert-Informationen
// - bessere Erkennung von zu revertierenden/editierenden Links
// - optional Benutzer-Link in Revertinfo (über var revlinkshowuser)
// - Anpassung auf neue MediaWiki-Oberfläche (31.5.2006)
// - Verhinderung zu langer Editkommentare
// <nowiki>
// Hauptfunktion: addEditAndRevertLinks
function addEditAndRevertLinks() {
var is_history = mw.config.get('wgAction') == 'history';
var is_diff = mw.util.getParamValue('diff') !== null;
var mainNode = document;
if (is_history) {
for (var i=0; mainNode = document.body.getElementsByTagName("SECTION")[i]; i++)
if (mainNode.id == "pagehistory")
tagNodes (mainNode, is_history, is_diff);
}
else if (is_diff) {
for (var i=0; mainNode = document.body.getElementsByTagName("TD")[i]; i++)
if (mainNode.classList.contains("diff-otitle") || mainNode.classList.contains("diff-ntitle"))
tagNodes (mainNode, is_history, is_diff);
}
}
// END addEditAndRevertLinks
// ============================================================
// tagNodes (tagging descendant nodes of mainNode)
function tagNodes (mainNode, is_history, is_diff) {
// Jede der folgenden Variablen kann in der eigenen monobook.js/vector.js/common.js vorbelegt werden.
// Getestet wird jeweils die Ausnahme, Standard ist jeweils das Gegenteil davon.
var editlinkoldversion = window.editlinkoldversion !== false;
var revertwithreason = window.revertwithreason !== false;
var revlinkshowuser = window.revlinkshowuser !== false;
var editlinktxt = window.editlinktxt || 'edit';
var revlinktxt = window.revlinktxt || 'rev';
// Ende der vordefinierbaren Variablenwerte
var Edit = "(" + editlinktxt + ")";
var Rv = "(" + revlinktxt + ")";
var first= true;
for (var i=0; aNode = mainNode.getElementsByTagName("A")[i]; i++)
{
// if it's a link to an old version but not a diff-link and not already an edit link
if ( (href = aNode.getAttribute("href")) && (href.search(/oldid=/) != -1)
&& (href.search(/diff=/) == -1) && (href.search(/action=edit/) == -1) )
{
// Create Edit link (only on history; new MW has edit links on diffpage so we can skip this)
if (editlinkoldversion && is_history) {
var EditNode = document.createElement('a');
EditNode.setAttribute('href', href + '&action=edit#summary');
var EditTextNode = document.createTextNode(Edit);
EditNode.appendChild(EditTextNode);
// Add Edit Link To Old Version Link
aNode.parentNode.insertBefore( EditNode, aNode.nextSibling );
// Insert whitespace before Edit Link
aNode.parentNode.insertBefore( document.createTextNode(' '), aNode.nextSibling );
// jump over inserted (edit) anchor
i++;
}
// Create RV Link
if (revertwithreason && (is_diff || (is_history && !first))) {
var rvtimestamp = aNode.innerHTML.replace(/.*vom /,'');
var rvtsdate = rvtimestamp.replace(/.*, /,'');
var rvtstime = rvtimestamp.replace(/, .*/,'');
// für ISO 8601 datumsformat: erstmal keine Umformung
if (rvtsdate == rvtstime) rvtstime = '';
// Benutzernamen müsste man eigtl. aus dem href nehmen (um UTF8-Namen korrekt zu übernehmen),
// aber dann brauchen wieder IPs eine Sonderbehandlung. Vielleicht später...
var rvuser;
if (is_history)
rvuser = mainNode.getElementsByTagName("A")[i+1].innerHTML;
else {
// is_diff
// linke Seite?
if (mainNode.getElementsByTagName("A")[i+3].innerHTML == "Diskussion")
rvuser = mainNode.getElementsByTagName("A")[i+2].innerHTML;
// rechte Seite
else
rvuser = mainNode.getElementsByTagName("A")[i+3].innerHTML;
}
// kleiner Hack für Username mit '&'
rvuser = rvuser.split('&').join('&');
var defaultgrund = 'Revert auf Version vom ' + rvtsdate +
((rvtstime == '')? '' : (' (' + rvtstime + ')'));
if (revlinkshowuser)
{
rvuser = rvuser.replace(/<span class="adminMark">.*<\/span>/,''); // adminMark wieder raus.
rvuser = rvuser.replace(/^<bdi>(.*)<\/bdi>$/,'$1'); // bdi entfernen
defaultgrund = 'Revert auf Version von [[:Benutzer:' + rvuser + ']] (' + rvtsdate +
((rvtstime == '')? '' : (', ' + rvtstime)) + ')';
}
var Rvnode = document.createElement('a');
Rvnode.setAttribute('href', 'javascript:revertme("' + encodeURI(href) + '", "' + defaultgrund + '")');
var RvTextNode = document.createTextNode(Rv);
Rvnode.appendChild(RvTextNode);
aNode.parentNode.insertBefore( Rvnode, aNode.nextSibling );
aNode.parentNode.insertBefore( document.createTextNode(' '), aNode.nextSibling );
// jump over inserted (rev) anchor
i++;
} // END if2
first=false;
} // END if1
} // END for
}
// END tagNodes
// ============================================================
// revertme by Littl, extended by PDD
function revertme (href, defaultgrund) {
// Jede der folgenden Variablen kann in der eigenen monobook.js/vector.js/common.js vorbelegt werden.
// Getestet wird jeweils die Ausnahme, Standard ist jeweils das Gegenteil davon.
var rvisminor = window.rvisminor !== false;
var aearlhere = window.aearlhere === true;
var aearldefault = window.aearldefault || "Grund: keine Verbesserung des Artikels";
// Ende der vordefinierbaren Variablenwerte
var detailgrund = prompt(defaultgrund, aearldefault);
if (detailgrund == null) return;
detailgrund = trim(detailgrund);
// detailgrund-shortcuts von [[Benutzer:-jha-]]
switch (detailgrund) {
case "for":
case "web": detailgrund='Link bietet keine [[WP:WEB|weiterführenden enzyklopädischen Informationen]].';
break;
case "pop": detailgrund='Link führte zu Website mit bevormundender Navigation (siehe auch [[WP:WEB]]).';
break;
case "dis": detailgrund='Bitte Diskussionsseite beachten.';
break;
case "rere": detailgrund='Bitte zunächst auf der Diskussionsseite einen Konsens herstellen.';
break;
case "va":
case "ba": detailgrund='Grund: Vandalismus.';
break;
case "er": detailgrund='Eigenrevert! (Ich muss wohl mal wieder zum Optiker...)';
break;
case "unt": detailgrund='Nicht unterschriebenen Diskussionsbeitrag entfernt (siehe auch [[WP:SIG]]).';
break;
case "unf": detailgrund='Grund: Unfall in der Editbox';
break;
case "twl": detailgrund='Bitte keine externen Links (Weblinks) im Artikeltext selbst angeben (siehe auch [[WP:WEB]]).';
break;
case "blau": detailgrund='Bitte keine extreme Überverlinkung (siehe auch [[WP:BLAU]]).';
break;
case "blau2": detailgrund='[[Bitte]] [[keine]] [[Links]] [[ohne]] [[Bezug]] zum [[Thema]] [[reinsetzen]]. [[Danke]].';
break;
case "komm": detailgrund='Kommentare gehören nicht in den Artikel, sondern auf die Diskussionsseite.';
break;
case "qa": detailgrund='Bitte inhaltliche Änderungen mit Fundstellen/Belegen/Quellen begründen (siehe auch [[WP:BLG]]) und künftig den Hinweis "[[WP:ZQ|Zusammenfassung und Quellen]]" nutzen.';
break;
case "rl": detailgrund='Relevanz fraglich. Bei Beispielaufzählungen mit mehreren "blauen" Links keine "roten" Links hinzufügen. Relevanz durch Anlegen der entsprechenden Artikel klären (siehe [[WP:VL]]).';
break;
case "pov": detailgrund='Beitrag widerspricht dem Grundsatz des [[WP:NPOV|Neutralen Standpunktes]].';
break;
case "wl": detailgrund='Nicht begründete/nachvollziehbare Ver-/Entlinkung. Bitte begründen! ([[WP:ZQ|Zusammenfassung und Quellen]] oder ggf. Diskussionsseite nutzen.)';
break;
case "loe": detailgrund='Nicht begründete/nachvollziehbare Entfernung längerer Textabschnitte. Bitte begründen! ([[WP:ZQ|Zusammenfassung und Quellen]] oder ggf. Diskussionsseite nutzen.)';
break;
case "wwni": detailgrund='Form des Beitrages vermittelt kein enzyklopädisches Wissen. Bitte die Grundsätze in [[WP:WWNI|Was Wikipedia nicht ist]] beachten.';
break;
case "enz": detailgrund='Beitrag nicht von enzyklopädischer Textqualität. Bitte "[[WP:WSIGA|Wie schreibe ich einen guten Artikel]]" beachten.';
break;
case "otrs": detailgrund='OTRS-Freigabe ist eingetroffen, siehe bitte die Diskussionsseite des Artikels.';
break;
case "man": detailgrund='Bitte keine fremden Diskussionsbeiträge verändern.';
break;
}
// sicherstellen, dass Begründung in die Zusammenfassungszeile passt
if (EditCommentLength(defaultgrund+detailgrund+2) < 0) {
// zu lang, also erstmal den defaultgrund kürzen
defaultgrund = 'Revert';
var commenttoolong = true;
while ((commenttoolong == true) && (detailgrund != null)) {
if ((superflu=EditCommentLength(defaultgrund+detailgrund+2)) < 0)
detailgrund = prompt("Die Begründung ist leider etwas zu lang.\nBitte um "+(0-superflu)+" Zeichen kürzen.", detailgrund);
else
commenttoolong = false;
}
}
if (detailgrund == null) return;
if (detailgrund=='') grund = trim(defaultgrund);
else grund = defaultgrund + ((defaultgrund == 'Revert')? ': ' : '. ') + detailgrund;
href = href + "&action=edit&" + asuserp + "=" + generate_asuser() + "&" + astimep + "=" + generate_astime() + "&" + subjp + "=" + encodeURIComponent(grund);
if (rvisminor) href = href + "&" + minorp + "=1";
if (aearlhere)
window.open (href,'_self','',true);
else
window.open (href,'_blank');
window.focus();
}
// END revertme
// ============================================================
$(document).ready(addEditAndRevertLinks);
// </nowiki>