m (Real Rollback has quotations) |
(fr: Correct translation) |
||
Line 81: | Line 81: | ||
title: 'Rollback révoque la/le(s) modification(s) du dernier contributeur de cette page en un clic', |
title: 'Rollback révoque la/le(s) modification(s) du dernier contributeur de cette page en un clic', |
||
failGeneral: 'Impossible de révoquer', |
failGeneral: 'Impossible de révoquer', |
||
− | failRevisions: ' |
+ | failRevisions: 'Échec de l\'obtention des révisions', |
− | failContent: ' |
+ | failContent: 'Échec de l\'obtention du contenu de la page', |
failEditor: 'Aucun éditeur différent n\'a été trouvé', |
failEditor: 'Aucun éditeur différent n\'a été trouvé', |
||
− | failPublish: ' |
+ | failPublish: 'Échec de la publication de la modification', |
success: 'Révocation(s) réussie(s) !', |
success: 'Révocation(s) réussie(s) !', |
||
rollback: 'révocation', |
rollback: 'révocation', |
||
− | summary1: ' |
+ | summary1: 'Révocation des modifications de', |
− | summary2: 'à la dernière version |
+ | summary2: 'à la dernière version de', |
script: 'script', |
script: 'script', |
||
talk: 'discussion', |
talk: 'discussion', |
Revision as of 09:40, 20 December 2019
/*
* @name: Rollback
* @description: Perform rollbacks without needing to be in the usergroup
* @author: Ozank Cx <dev.fandom.com/wiki/User:Ozank_Cx>
* Cleanup/+i18n by Count of Howard <dev.fandom.com/wiki/User:Count_of_Howard>
*/
(function() {
if ($('.mw-rollback-link').length || $('.mw-custom-rollback-link').length || window.RollbackWikiDisable) {
return;
}
var config = mw.config.get([
'wgAction',
'wgPageName',
'wgContentLanguage',
'wgCanonicalSpecialPageName'
]),
i18n = {
'en': {
title: '"Rollback" reverts edit(s) to this page of the last contributor in one click',
failGeneral: 'Unable to rollback',
failRevisions: 'Failed to get revisions',
failContent: 'Failed to get page content',
failEditor: 'No different editor found',
failPublish: 'Failed to publish edit',
success: 'Rollback successful',
rollback: 'rollback',
summary1: 'Reverted edits by',
summary2: 'to last version by',
script: 'script',
talk: 'talk',
block: 'block'
},
'be': {
title: 'Адкат дазваляе прыбраць змены, занесеныя апошнім рэдактарам, у адзін клік',
failGeneral: 'Не ўдалося адкаціць',
failRevisions: 'Не ўдалося зрабіць змены',
failContent: 'Не ўдалося атрымаць змесціва старонкі',
failEditor: 'Рэдактар не знойдзены',
failPublish: 'Не ўдалося апублікаваць змены',
success: 'Адкат паспяхова завершаны',
rollback: 'адкат',
summary1: 'Адкочаныя змены:',
summary2: 'да апошняй версіі ад',
script: 'скрыпт',
talk: 'сцяна',
block: 'заблакаваць'
},
'de': {
title: 'Macht alle letzten Änderungen der Seite, die vom gleichen Benutzer vorgenommen worden sind, durch nur einen Klick rückgängig.',
failGeneral: 'Zurücksetzten ist nicht möglich',
failRevisions: 'Versionsgeschichten konnten nicht geladen werden',
failContent: 'Seiteninhalt konnte nicht geladen werden',
failEditor: 'Es wurde kein anderer Bearbeiter gefunden',
failPublish: 'Bearbeitung konnte nicht veröffentlicht werden',
success: 'Erfolgreich zurückgesetzt',
rollback: 'Zurücksetzen',
summary1: 'Rückgängig machen von Änderungen durch',
summary2: 'zu der letzten Version von',
script: 'Skript',
talk: 'Diskussion',
block: 'Sperren'
},
'es': {
title: '«Revertir» revierte todas las ediciones del último usuario con un solo clic',
failGeneral: 'No se ha podido revertir',
failRevisions: 'Error al obtener revisiones',
failContent: 'Error al obtener contenido de la página',
failEditor: 'No se han encontrado editores diferentes',
failPublish: 'Error al publicar la edición',
success: 'Revertido correctamente',
rollback: 'revertir',
summary1: 'Revertidos los cambios de ',
summary2: 'a la última edición de',
script: 'script',
talk: 'disc.',
block: 'bloquear'
},
'fr': {
title: 'Rollback révoque la/le(s) modification(s) du dernier contributeur de cette page en un clic',
failGeneral: 'Impossible de révoquer',
failRevisions: 'Échec de l\'obtention des révisions',
failContent: 'Échec de l\'obtention du contenu de la page',
failEditor: 'Aucun éditeur différent n\'a été trouvé',
failPublish: 'Échec de la publication de la modification',
success: 'Révocation(s) réussie(s) !',
rollback: 'révocation',
summary1: 'Révocation des modifications de',
summary2: 'à la dernière version de',
script: 'script',
talk: 'discussion',
block: 'bloquer'
},
'it': {
title: '"Rollback" annulla le modifiche a questa pagina dell\'ultimo contributore con un solo clic',
failGeneral: 'Impossibile eseguire il rollback',
failRevisions: 'Impossibile ottenere le modifiche',
failContent: 'Impossibile ottenere il contenuto della pagina',
failEditor: 'Nessun editor diverso trovato',
failPublish: 'Impossibile pubblicare la modifica',
success: 'Rollback eseguito correttamente',
rollback: 'rollback',
summary1: 'Annullate le modifiche di',
summary2: ', riportata alla versione precedente di',
script: 'script',
talk: 'discussione',
block: 'blocca'
},
'ko': {
title: '롤백은 한 클릭안에 편집들을 전 사용자의 개정으로 되돌립니다',
failGeneral: '롤백을 할수가 없습니다',
failRevisions: '수정을 찾을수가 없었습니다',
failContent: '패이지 내용을 찾을수가 없었습니다',
failEditor: '다른 편집자를 찾을수가 없었습니다',
failPublish: '편집을 올릴수가 없었습니다',
success: '롤백 성공',
rollback: '롤백',
summary1: '사용자의 편집들이 되돌려졌습니다:',
summary2: '이 사용자의 개정으로:',
script: '스크립트',
talk: '톡',
block: '블록'
},
'pl': {
title: 'Rollback pozwala cofać edycje do wersji poprzedniego autora jednym kliknięciem',
failGeneral: 'Nie udało się zrewertować edycji',
failRevisions: 'Nie udało się pobrać wersji',
failContent: 'Nie udało się pobrać zawartości strony',
failEditor: 'Strona ma tylko jednego edytora',
failPublish: 'Nie udało się opublikować edycji',
success: 'Rewert udany',
rollback: 'rewert',
summary1: 'Wycofano ostatnie edycje użytkownika',
summary2: 'do poprzedniej wersji autorstwa',
script: 'skrypt',
talk: 'dyskusja',
block: 'blokada'
},
'ru': {
title: 'Откат позволяет убрать изменения, внесённые последним редактором, в один клик',
failGeneral: 'Не удалось откатить',
failRevisions: 'Не удалось сделать изменения',
failContent: 'Не удалось получить содержимое страницы',
failEditor: 'Редактор не найден',
failPublish: 'Не удалось опубликовать изменения',
success: 'Откат успешно завершён',
rollback: 'откатить',
summary1: 'Откаченные изменения:',
summary2: 'к последней версии от',
script: 'скрипт',
talk: 'стена',
block: 'заблокировать'
},
'tr': {
title: 'Geri alma işlemi, son katılımcının bu sayfasını tek bir tıklamayla değiştirir',
failGeneral: 'Geri alınamıyor',
failRevisions: 'Düzeltmeler alınamadı',
failContent: 'Sayfa içeriği alınamadı',
failEditor: 'Farklı bir editör bulunamadı',
failPublish: 'Düzenleme yayınlanamadı',
success: 'Geri alma başarılı',
rollback: 'rollback',
summary1: 'Yapılan düzenlemeler',
summary2: 'son versiyona göre',
script: 'komut',
talk: 'tartışma',
block: 'engelle'
},
'uk': {
title: 'Відкат дозволяє прибрати зміни, внесені останнім редактором, в один клік',
failGeneral: 'Не вдалося відкотити',
failRevisions: 'Не вдалося зробити зміни',
failContent: 'Не вдалося отримати вміст сторінки',
failEditor: 'Редактор не знайдено',
failPublish: 'Не вдалося опублікувати зміни',
success: 'Відкат успішно завершено',
rollback: 'відкинути',
summary1: 'Відкочені зміни:',
summary2: 'до останньої версії від',
script: 'скрипт',
talk: 'обговорення',
block: 'заблокувати'
},
'zh': {
title: '回退能一键恢复本页面最后一位编辑者的贡献',
failGeneral: '无法回退',
failRevisions: '无法获取修订版本',
failContent: '无法获取页面内容',
failEditor: '无法找到另一位编辑者',
failPublish: '发布编辑失败',
success: '回退成功',
rollback: '回退',
summary1: '已恢复由',
summary2: '的编辑至最后一个修订版本由',
script: '脚本',
talk: '讨论',
block: '封禁'
},
'zh-hant': {
title: '回退能一鍵恢復本頁面最後一位編輯者的貢獻',
failGeneral: '無法回退',
failRevisions: '無法讀取修訂版本',
failContent: '無法讀取頁面內容',
failEditor: '無法找到另一位編輯者',
failPublish: '發布編輯失敗',
success: '回退成功',
rollback: '回退',
summary1: '已恢復由',
summary2: '的編輯至最後一個修訂版本由',
script: '腳本',
talk: '討論',
block: '封禁'
}
},
lang = i18n[config.wgContentLanguage] || i18n[config.wgContentLanguage.split('-')[0]] || i18n.en;
function init() {
var rollbackLinkParams = {
style: 'cursor: pointer',
title: lang.title
};
if (
config.wgAction === 'history' &&
$('#pagehistory li').length > 1
) {
rollbackLinkParams['data-id'] = config.wgPageName;
$('#pagehistory li:first .mw-history-undo a').before(
$('<span/>', {
class: 'mw-custom-rollback-link'
}).html(
buildElement('a', lang.rollback, rollbackLinkParams) + ' | '
)
);
} else if (
config.wgCanonicalSpecialPageName === 'Contributions'
) {
rollbackLinkParams['data-id'] = $('#mw-content-text ul').find('a:first').attr('title');
$('#mw-content-text ul').find('li').each(
function() {
if ($(this).find('.mw-uctop').length) {
$(this).append(
$('<span/>', {
class: 'mw-custom-rollback-link'
}).html(
'[' + buildElement('a', lang.rollback, rollbackLinkParams) + ']'
)
);
}
}
);
} else if (
$('#differences-nextlink').length === 0 &&
(
$.getUrlVar('diff') ||
$.getUrlVar('oldid')
)
) {
rollbackLinkParams['data-id'] = config.wgPageName;
$('.mw-usertoollinks:last').after(
' <span class="mw-custom-rollback-link">' +
'[' + buildElement('a', lang.rollback, rollbackLinkParams) + ']</span>'
);
}
$('.mw-custom-rollback-link a').click(
function() {
getRevisionIdAndContent($(this).attr('data-id'), handleData);
$(this).parent().remove();
}
);
}
function buildElement(tag, html, attrs) {
if (typeof(html) !== 'string') {
attrs = html;
html = null;
}
var h = '<' + tag;
for (var attr in attrs) {
if (attrs[attr] === false) {
continue;
}
h += ' ' + attr + '="' + mw.html.escape(attrs[attr]) + '"';
}
return h += html ? ">" + mw.html.escape(html) + "</" + tag + ">" : "/>";
}
function getRevisionIdAndContent(title, callback) {
new mw.Api().get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'user|ids',
rvlimit: 500,
cb: new Date().getTime()
}).done(
function(d) {
if (!d.error) {
callback(title, d);
} else {
new BannerNotification(
lang.failGeneral + ' (' + lang.failRevisions + '): ' + d.error.code, 'error'
).show();
}
}
).fail(
function() {
new BannerNotification(
lang.failGeneral + ' (' + lang.failRevisions + ')', 'error'
).show();
}
);
}
function handleData(title, data) {
var revisions;
for (var i in data.query.pages) {
revisions = data.query.pages[i].revisions;
}
var currentUser = revisions[0].user,
lastUser,
revId;
for (var i in revisions) {
if (revisions[i].user != currentUser) {
lastUser = revisions[i].user;
revId = revisions[i].revid;
break;
}
}
if (lastUser) {
new mw.Api().get({
action: 'query',
prop: 'revisions',
rvprop: 'content',
revids: revId,
cb: new Date().getTime()
}).done(
function(d) {
if (!d.error) {
var content = "";
for (var i in d.query.pages) {
if (d.query.pages[i].revisions) {
content = d.query.pages[i].revisions[0]["*"];
}
}
performRollback(title, content, currentUser, lastUser);
} else {
new BannerNotification(
lang.failGeneral + ' (' + lang.failContent + '): ' + d.error.code,'error'
).show();
}
}
).fail(
function() {
new BannerNotification(
lang.failGeneral + ' (' + lang.failContent + ')','error'
).show();
}
);
} else {
new BannerNotification(
lang.failGeneral + ' (' + lang.failEditor + ')','error'
).show();
}
}
function performRollback(page, text, user, user2) {
var summary = lang.summary1 + ' [[Special:Contributions/' + user + '|' + user + ']] ([[User_talk:' + user + '|' + lang.talk +
']] | [[Special:Block/' + user + '|' + lang.block + ']]) ' + lang.summary2 + user2 + ' ([[w:c:dev:Rollback|' + lang.script + ']])';
if (summary.length > 150) {
summary = lang.summary1 + ' ' + user + ' ([[w:c:dev:Rollback|' + lang.script + ']])';
}
new mw.Api().post({
action: 'edit',
title: page,
text: text,
summary: summary,
token: mw.user.tokens.values.editToken
}).done(
function(d) {
if (!d.error) {
new BannerNotification(
lang.success + '!', 'confirm'
).show();
} else {
new BannerNotification(
lang.failGeneral + ' (' + lang.failPublish + '): ' + d.error.code,'error'
).show();
}
}
).fail(
function() {
new BannerNotification(
lang.failGeneral + ' (' + lang.failPublish + ')', 'error'
).show();
}
);
}
init();
})();