User:SVG/addEditAndRevertLinks.js

// ============================================================

// 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

//

// Variables that should be defined in your monobook

if (typeof(editlinkoldversion) == 'undefined')

var editlinkoldversion = true;

if (typeof(editlinktxt) == 'undefined')

var editlinktxt = "edit";

if (typeof(revertwithreason) == 'undefined')

var revertwithreason = true;

if (typeof(revlinktxt) == 'undefined')

var revlinktxt = "rev";

if (typeof(revlinkshowuser) == 'undefined')

var revlinkshowuser = true;

if (typeof(rvisminor) == 'undefined')

var rvisminor = true;

if (typeof(aearldefault) == 'undefined')

var aearldefault = "Grund: keine Verbesserung des Artikels";

if (typeof(aearlhere) == 'undefined')

var aearlhere = false;

// Hauptfunktion: addEditAndRevertLinks

function addEditAndRevertLinks() {

// alert (for old monobooks)

if (minimalVersion(60) < 60) return;

var is_history = (UrlParameters['action']=='history');

var is_diff = (UrlParameters['diff']>'');

var mainNode = document;

if (is_history) {

for (var i=0; mainNode = document.body.getElementsByTagName("UL")[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.className == "diff-otitle") || (mainNode.className == "diff-ntitle"))

tagNodes (mainNode, is_history, is_diff);

}

}

// END addEditAndRevertLinks

// ============================================================

// tagNodes (tagging descendant nodes of mainNode)

function tagNodes (mainNode, is_history, is_diff) {

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)

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) {

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 weiterführenden lexikographischen 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 "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 Neutralen Standpunktes.';

break;

case "wl": detailgrund='Nicht begründete/nachvollziehbare Ver-/Entlinkung. Bitte begründen! (Zusammenfassung und Quellen oder ggf. Diskussionsseite nutzen.)';

break;

case "loe": detailgrund='Nicht begründete/nachvollziehbare Entfernung längerer Textabschnitte. Bitte begründen! (Zusammenfassung und Quellen oder ggf. Diskussionsseite nutzen.)';

break;

case "wwni": detailgrund='Form des Beitrages vermittelt kein enzyklopädisches Wissen. Bitte die Grundsätze in Was Wikipedia nicht ist beachten.';

break;

case "enz": detailgrund='Beitrag nicht von enzyklopädischer Textqualität. Bitte "Wie schreibe ich einen guten Artikel" beachten.';

break;

case "otrs": detailgrund='OTRS-Freigabe ist eingetroffen, bitte siehe 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

// ============================================================

addOnloadHook(addEditAndRevertLinks);

//