// ============================================================
// BEGIN addEditAndRevertLinks
// (первоначально создан [[:de:Benutzer:Berlin-Jurist]] AFAIK)
// Revert-Fkt hinzugefügt + Beschränkung auf Seiten wo es Sinn macht. [[:de:enutzer:Littl]].
//
// verschiedene Fixes von [[:de: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
// adapted for Russian Wikipedia by [[ru:User:ariely]] from [[:de:Benutzer:PDD/addEditAndRevertLinks.js]] (24.12.2008)
// <nowiki>
// Variables that should be defined in your monobook
if (typeof(editlinkoldversion) == 'undefined')
var editlinkoldversion = true; // Bearbeiten-Link für ältere Versionen anzeigen?
if (typeof(editlinktxt) == 'undefined')
var editlinktxt = "править"; // Text des Edit-Links
if (typeof(revertwithreason) == 'undefined')
var revertwithreason = true; // Revert-Link mit Grund-Eingabe anzeigen?
if (typeof(revlinktxt) == 'undefined')
var revlinktxt = "вернуть"; // Text des Revert-Links
if (typeof(revlinkshowuser) == 'undefined')
var revlinkshowuser = true; // beim Revertieren über (Rev)-Link letzten Benutzer angeben?
if (typeof(rvisminor) == 'undefined')
var rvisminor = true; // sind Reverts mit "(rev)"-Link Minor-Changes?
if (typeof(aearldefault) == 'undefined')
var aearldefault = "Причина: Вандализм"; // Defaultgrund beim Revertieren
if (typeof(aerhistory) == 'undefined')
var aerhistory = true; // Links auch in der Versionsgeschichte?
if (typeof(aearlhere) == 'undefined')
var aearlhere = true; // Revertaktion im selben Browserfenster?
var asuserp = "asuser"; // usertoken
var astimep = "astime"; // timestamptoken
var subjp = "subj"; // Subject
var minorp = "minor"; // (k)leine Änderung
/*
* trim()
* Leerzeichen am Anfang und Ende entfernen
*/
function trim(str) {
return str.replace(/^\s*|\s*$/g,"");
}
/*
* Stringlänge überprüfen für Zusammenfassungszeile
*/
function EditCommentLength(str) {
return (199-str.length);
}
// token functions
function generate_asuser () {
return encodeURIComponent(mw.config.get('wgUserName'));
}
function validate_asuser (asuser) {
var retval = false;
if (encodeURIComponent(asuser) == generate_asuser() )
retval = true;
return retval;
}
function generate_astime () {
var arbitrary_datestamp = Date.UTC(2008,10,1,0,0,0,0); // 1.11.2008
var current_date = new Date();
var current_timestamp = current_date.getTime();
return ( Math.floor((current_timestamp - arbitrary_datestamp) / 1000) );
}
function addEditAndRevertLinks() {
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(/, .*/,'');
// для формата дат по ISO 8601 пока нет обработки
if (rvtsdate == rvtstime) rvtstime = '';
// Имена участников вообще надо было исключить из href (чтобы правильно адаптировать UTF8),
// но тогда для IP-адресов понадобится отдельная обработка...
var rvuser;
if (is_history)
rvuser = mainNode.getElementsByTagName("A")[i+1].innerHTML;
else {
// is_diff
// левая сторона?
if (mainNode.getElementsByTagName("A")[i+3].innerHTML == "обсуждение")
rvuser = mainNode.getElementsByTagName("A")[i+2].innerHTML;
// правая сторона
else
rvuser = mainNode.getElementsByTagName("A")[i+3].innerHTML;
}
// маленькое исправление для ников с '&'
rvuser = rvuser.split('&').join('&');
var defaultgrund = 'Возвращено к версии от ' + rvtsdate +
((rvtstime == '')? '' : (' (' + rvtstime + ')'));
if (revlinkshowuser)
defaultgrund = 'Возвращено к версии [[Участник:' + rvuser + '|' + 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);
switch (detailgrund) {
case "не каталог": detailgrund='Причина: Википедия не каталог ссылок (см. [[ВП:ВС]]).';
break;
case "спам": detailgrund='Причина: ссылка несёт рекламный харрактер (см. [[ВП:ВС]]).';
break;
case "обсудить": detailgrund='См. страницу обсуждения статьи.';
break;
case "консенсус": detailgrund='Пожалуйста, достигните прежде консенсуса на странице обсуждения статьи.';
break;
case "вандал": detailgrund='Причина:Вандализм.';
break;
case "варвар": detailgrund='Причина:Варварство.';
break;
case "ошибка": detailgrund='Причина: исправление ошибки';
break;
case "аноним": detailgrund='Удалена анонимная реплика.';
break;
case "упс": detailgrund='Причина: ошибочный ввод.';
break;
case "вики": detailgrund='Не стоит злоупотреблять викификацией.';
break;
case "коммент": detailgrund='Комментарии следует размещать на странице обсуждения статьи.';
break;
case "факт": detailgrund='Существенные изменения в статье следует [[ВП:Ссылки на источники|обосновать]].';
break;
case "незнач": detailgrund='Важность внесённой информации сомнительна.';
break;
case "НТЗ": detailgrund='Правки нарушают принцип [[ВП:НТЗ|нейтральной точки зрения]].';
break;
case "удал": detailgrund='Необоснованное удаление существенных фактов.';
break;
case "ЧНЯВ": detailgrund='Данная правка не [[ВП:ЧНЯВ|способствует развитию энциклопедии]].';
break;
case "стиль": detailgrund='Неэнциклопедический стиль.';
break;
case "чужая": detailgrund='Не следует изменять чужие реплики.';
break;
}
// обеспечить, чтобы описание изменений поместилось в строке комментария
if (EditCommentLength(defaultgrund+detailgrund+2) < 0) {
// слишком длинный комментарий, прежде всего сокращаем defaultgrund
defaultgrund = 'Возвращено';
var commenttoolong = true;
while ((commenttoolong == true) && (detailgrund != null)) {
if ((superflu=EditCommentLength(defaultgrund+detailgrund+2)) < 0)
detailgrund = prompt("Описание изменений слишком длинное.\n Сократите его, пожалуйста, на "+(0-superflu)+" знаков", detailgrund);
else
commenttoolong = false;
}
}
if (detailgrund == null) return;
if (detailgrund=='') grund = trim(defaultgrund);
else grund = defaultgrund + ((defaultgrund == 'Возвращено')? ': ' : '. ') + 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);
// </nowiki>