User:Hannes Röst/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('&amp;').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); //