Mainframe98 (talk | contribs) (tiny fix to display usernames without url decoding) Tag: sourceedit |
Mainframe98 (talk | contribs) (fixing mixup) Tag: sourceedit |
||
Line 507: | Line 507: | ||
} |
} |
||
var user = mw.util.wikiUrlencode(data.user); |
var user = mw.util.wikiUrlencode(data.user); |
||
− | user = '<a href="/wiki/User:' + user + '">' + |
+ | user = '<a href="/wiki/User:' + user + '">' + data.user + '</a> (<a href="/wiki/User_talk:' + user + '">talk</a> | <a href="/wiki/Special:Contributions/' + user + '">contribs</a>' + (/(bureaucrat|sysop|helper|vstf|staff)/.test(mw.config.get('wgUserGroups').join(' ')) ? ' | <a href="/wiki/Special:Block/' + user + '">block</a>' : '') + ')'; |
html = lastEdited.i18n.lastEdited.replace(/\$1/g, '<img id="lastEdited-avatar"/>' + user).replace(/\$2/g, time); |
html = lastEdited.i18n.lastEdited.replace(/\$1/g, '<img id="lastEdited-avatar"/>' + user).replace(/\$2/g, time); |
||
if (lastEdited.options.diff && data.diff.from) { |
if (lastEdited.options.diff && data.diff.from) { |
||
Line 667: | Line 667: | ||
lastEdited.init(); |
lastEdited.init(); |
||
})(); |
})(); |
||
− | |||
− |
Revision as of 12:20, 19 October 2016
;(function() {
var lastEdited = {
extend: function(obj) {
obj = obj || {};
for (var i = 1; i < arguments.length; i++) {
if (!arguments[i]) {
continue;
}
for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key)) {
obj[key] = arguments[i][key];
}
}
}
return obj;
},
loaded: false,
title: mw.config.get('wgPageName'),
id: mw.config.get('wgArticleId'),
options: function() {
return lastEdited.extend({
avatar: true,
size: true,
diff: true,
comment: true,
time: 'timeago',
position: {
element: '',
method: ''
},
namespaces: {
include: [],
exclude: []
},
pages: []
}, window.lastEdited);
},
i18n: function() {
var i18n = {
// English
en: {
lastEdited: 'Last edited by $1 $2',
diff: 'diff',
minor: 'm',
comment: 'Edit summary',
size: 'Current size',
created: 'Created page.',
loading: 'Loading details of last edit',
changes: 'Changes',
link: 'Link',
undo: 'Undo',
cancel: 'Cancel'
},
// Belarusian
be: {
lastEdited: 'Апошняя праўка $1 $2',
diff: 'розн.',
minor: 'д',
comment: 'Каментар',
size: 'Памер',
created: 'Створана старонка.',
loading: 'Загрузка дадзеных аб апошняй праўцы',
changes: 'Змены',
link: 'Прамая спасылка',
undo: 'Адмяніць',
cancel: 'Зачыніць'
},
// Bengali
bn: {
lastEdited: ' সম্পাদনা করেছেন $1 $2',
minor: 'অ',
comment: 'সম্পাদনার সারাংশ',
size: 'বর্তমান আকার',
created: 'তৈরি করেছে',
loading: 'লোডিং হচ্ছে',
changes: 'পরিবর্তন',
link: 'লিংক',
undo: 'সম্পাদনা বাতিল করুন',
cancel: 'বাতিল'
},
// Catalan
ca: {
lastEdited: 'Últim canvi per $1 el $2',
diff: 'dif',
minor: 'm',
comment: 'Resum de l’edició',
size: 'Mida actual',
created: 'Pàgina creada.',
loading: 'Carregant detalls de l’última edició',
changes: 'Canvis',
link: 'Enllaç',
undo: 'Desfer',
cancel: 'Anuŀla'
},
// German
de: {
lastEdited: 'Letzte Bearbeitung von $1 $2',
diff: 'Unterschied',
minor: 'K',
comment: 'Zusammenfassung',
size: 'Aktuelle Größe',
created: 'Seite erstellt.',
loading: 'Letzte Details ansehen',
changes: 'Versionsunterschiede',
link: 'Link',
undo: 'Rückgängig machen',
cancel: 'Abbrechen'
},
// Esperanto
eo: {
lastEdited: 'Lastafoje redaktita de $1 $2',
diff: 'malsamoj',
minor: 'E',
comment: 'Resumo',
size: 'Nuna grandeco',
created: 'Kreita paĝo.',
loading: 'Ŝarĝante detalojn de lasta redakto',
changes: 'Ŝanĝoj',
link: 'Ligilo',
undo: 'Malfari',
cancel: 'Nuligi'
},
// Spanish
es: {
lastEdited: 'Modificado por última vez por $1 $2',
diff: 'dif',
minor: 'm',
comment: 'Resumen de edición',
size: 'Tamaño actual',
created: 'Página creada.',
loading: 'Cargando datos de la última edición',
changes: 'Cambios',
link: 'Enlace',
undo: 'Deshacer',
cancel: 'Cancelar'
},
// Finnish
fi: {
lastEdited: 'Viimenen muokkaus $1 $2',
diff: 'ero',
minor: 'p',
comment: 'Muokkauksen kuvaus',
size: 'Nykyinen koko',
created: 'Loin sivun.',
loading: 'Viimeisen muokkauksen tietoja ladataan',
changes: 'muutokset',
link: 'Linkkaa',
undo: 'Kumoa',
cancel: 'Peruuta'
},
// French
fr: {
lastEdited: 'Dernière modification de $1 $2',
diff: 'diff',
minor: 'm',
comment: 'Résumé de modification',
size: 'Taille actuelle',
created: 'Page créée.',
loading: 'Chargement des détails de la dernière modification',
changes: 'Changements',
link: 'Lien',
undo: 'Annuler',
cancel: 'Annuler'
},
// Galician
gl: {
lastEdited: 'Última edición por $1 $2',
diff: 'comparación',
minor: 'm',
comment: 'Resumo da edición',
size: 'Tamaño actual',
created: 'Páxina creada.',
loading: 'A cargar detalles da última edición',
changes: 'Cambios',
link: 'Ligazón',
undo: 'Desfacer',
cancel: 'Cancelar'
},
// Hindi
hi: {
lastEdited: '$ 1 $ 2 से एडिट',
minor: 'छो',
comment: 'संपादन का सारांश',
size: 'मौजूदा आकार',
created: 'नए पेज',
loading: 'लदान',
changes: 'बियान अधिक अंक',
link: 'लिंक',
undo: 'रद्द करना' ,
cancel: 'रद्द करना'
},
//Fiji Hindi
hif: {
lastEdited: 'last edit kya $ 1 $ 2 ',
minor: 'छो',
comment: 'sampadana ka sarangsh',
size: 'bortman akar',
created: 'toiri kiiya hai',
loading: 'load le ra hain',
changes: 'paribartan',
link: 'link',
undo: 'batil' ,
cancel: 'baril'
},
// Italian
it: {
lastEdited: 'Ultima revisione di $1 $2',
diff: 'diff',
minor: 'm',
comment: 'Riassunto della modifica',
size: 'Dimensione corrente',
created: 'Pagina creata.',
loading: 'Caricando i dettagli dell’ultima revisione',
changes: 'Modifiche',
link: 'Collegamento',
undo: 'Annulla modifica',
cancel: 'Annulla'
},
// Japanese
ja: {
lastEdited: '$1による編集 $2',
diff: '差分',
minor: '細',
comment: '編集内容の要約',
size: '現在のサイズ',
created: '新しいページ',
loading: '直近の変更を確認する',
changes: '変更点',
link: 'リンク',
undo: '取り消し',
cancel: '戻る'
},
// Korean
ko: {
lastEdited: '$1에 의해 $2 마지막으로 편집됨',
diff: '차이',
minor: '잔글',
comment: '편집 요약',
size: '현재 크기',
created: '문서 생성',
loading: '마지막 편집의 상세정보를 불러오는 중',
changes: '변경사항',
link: '링크',
undo: '편집 취소',
cancel: '돌아가기'
},
// Malay
ms: {
lastEdited: 'Terakhir disunting oleh $1 $2',
diff: 'beza',
minor: 'k',
comment: 'Sunting ringkasan',
size: 'Saiz semasa',
created: 'Halaman dihasilkan.',
loading: 'Memuatkan butiran-butiran suntingan terakhir',
changes: 'Perubahan',
link: 'Pautan',
undo: 'Undo',
cancel: 'Batal'
},
// Dutch
nl: {
lastEdited: 'Laatst bewerkt door $1 $2',
diff: 'wijz',
minor: 'k',
comment: 'Bewerkingssamenvatting',
size: 'Huidige grootte',
created: 'Pagina aangemaakt.',
loading: 'Details van laatste bewerking laden',
changes: 'Wijzigingen',
link: 'Link',
undo: 'Ongedaan maken',
cancel: 'Annuleren'
},
// Occitan
oc: {
lastEdited: 'Darrièr cambiament per $1 $2',
diff: 'dif',
minor: 'm',
comment: 'Resumit de modificacion',
size: 'Talha actuala',
created: 'Pagina creada.',
loading: 'Cargament dels detalhs del darrièr cambiament',
changes: 'Cambiaments',
link: 'Ligam',
undo: 'Desfar',
cancel: 'Anullar'
},
// Polish
pl: {
lastEdited: 'Ostatnio edytowane przez $1 $2',
diff: 'zmiana',
minor: 'm',
comment: 'Opis zmian',
size: 'Obecny rozmiar',
created: 'Utworzona strona.',
loading: 'Ładowanie szczegółów ostatniej edycji',
changes: 'Zmiany',
link: 'Link',
undo: 'Cofnij',
cancel: 'Anuluj'
},
// European Portuguese
pt: {
lastEdited: 'Última edição por $1 $2',
diff: 'comparação',
minor: 'm',
comment: 'Resumo da edição',
size: 'Tamanho actual',
created: 'Página criada.',
loading: 'A carregar detalhes da última edição',
changes: 'Mudanças',
link: 'Ligação',
undo: 'Desfazer',
cancel: 'Cancelar'
},
// Brazilian Portuguese
'pt-br': {
lastEdited: 'Editado última vez por $1 $2',
diff: 'comparação',
minor: 'm',
comment: 'Resumo da Edição',
size: 'Tamanho atual',
created: 'Página criada.',
loading: 'Carregando detalhes da última edição',
changes: 'Mudanças',
link: 'Link',
undo: 'Desfazer',
cancel: 'Cancelar'
},
// Romanian
ro: {
lastEdited: 'Ultimă ediţie de $1 $2',
diff: 'dif',
minor: 'm',
comment: 'Rezumat ediţiei',
size: 'Mărime actual',
created: 'Pagină creată.',
loading: 'Încărcând detalii cu privire la ultima ediţie',
changes: 'Schimburi',
link: 'Link',
undo: 'Desfacere',
cancel: 'Anulare'
},
// Russian
ru: {
lastEdited: 'Последняя правка $1 $2',
diff: 'разн.',
minor: 'м',
comment: 'Комментарий',
size: 'Размер',
created: 'Создана страница.',
loading: 'Загрузка данных о последней правке',
changes: 'Изменения',
link: 'Прямая ссылка',
undo: 'Отменить',
cancel: 'Закрыть'
},
// Scots
sco: {
lastEdited: 'Hintmaist eeditit by $1 $2',
diff: 'nou',
minor: 's',
comment: 'Ootline',
size: 'Current size',
created: 'Creautit page.',
loading: 'Laidin details o hintmaist eedit',
changes: 'Chynges',
link: 'Link',
undo: 'Ondae',
cancel: 'Cancel'
},
// Valencian
val: {
lastEdited: 'Últim canvi per $1 el $2',
diff: 'dif',
minor: 'm',
comment: 'Resum de l’edició',
size: 'Tamany actual',
created: 'Pàgina creada.',
loading: 'Carregant detalls de l’última edició',
changes: 'Canvis',
link: 'Enllaç',
undo: 'Desfer',
cancel: 'Cancelar'
},
// Vietnamese
vi: {
lastEdited: 'Sửa đổi lần cuối bởi $1 $2',
diff: 'khác',
minor: 'n',
comment: 'Tóm lược sửa đổi',
size: 'Kích thước hiện tại',
created: 'Tạo trang.',
loading: 'Tải chi tiết của lần sửa đổi cuối',
changes: 'Thay đổi',
link: 'Link',
undo: 'Lùi sửa',
cancel: 'Quay lại'
},
// Українська
uk: {
lastEdited: 'Останній раз внесено зміни $1 $2',
diff: 'порівняти',
minor: 'м',
comment: 'Опис редагувань',
size: 'Поточний розмір',
created: 'Створена нова сторінка.',
loading: 'Завантаження даних останнього редагування',
changes: 'Сторінка',
link: 'Посилання',
undo: 'Редагувати/Порівняти',
cancel: 'Скасувати'
},
// Mandarin
zh: {
lastEdited: '由$1最後編輯於$2',
diff: '差別',
minor: '小',
comment: '編輯簡要',
size: '目前頁面大小',
created: '建立新頁面。',
loading: '最後編輯明細載入中',
changes: '變動',
link: '連結',
undo: '復原',
cancel: '取消'
}
};
if (lastEdited.options.lang && typeof lastEdited.options.lang == 'string') {
return lastEdited.extend(i18n.en, i18n[lastEdited.options.lang]);
} else {
return lastEdited.extend(i18n.en, i18n[mw.config.get('wgUserLanguage')]);
}
},
allowed: function() {
var allowed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 110, 111, 828, 829, 1202];
if (lastEdited.options.namespaces.include && lastEdited.options.namespaces.include.constructor == Array) {
for (var i in lastEdited.options.namespaces.include) {
allowed.push(lastEdited.options.namespaces.include[i]);
}
}
if (lastEdited.options.namespaces.exclude && lastEdited.options.namespaces.exclude.constructor == Array) {
allowed = allowed.filter(function(elem) {
return lastEdited.options.namespaces.exclude.indexOf(elem) < 0;
});
}
return allowed;
},
canRollback: /(bureaucrat|sysop|helper|vstf|staff|content-moderator|rollback)/.test(mw.config.get('wgUserGroups').join(' ')),
get: function(options) {
var serialized = [];
for (var i in options) {
serialized.push(mw.util.wikiUrlencode(i) + '=' + mw.util.wikiUrlencode(options[i]));
}
serialized = '?' + serialized.join('&');
var xhr = new XMLHttpRequest();
xhr.open('GET', mw.util.wikiScript('api') + serialized, true);
xhr.onload = function() {
if (xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
if (response.query.pages['-1']) {
return;
}
lastEdited.add(response.query.pages[lastEdited.id].revisions);
}
};
xhr.send();
},
add: function(data) {
if (!data[1]) return;
var prev = data[1];
data = data[0];
var html = '<div id="lastEdited" class="lastEdited"><img alt="' + lastEdited.i18n.loading + '" title="' + lastEdited.i18n.loading + '" style="margin:2px 10px" src="' + mw.config.get('stylepath') + '/common/images/ajax.gif"></div>';
switch (mw.config.get('skin')) {
case 'oasis':
case 'wikia':
if (lastEdited.options.position.element && lastEdited.options.position.method) {
if (lastEdited.options.position.method == 'append') {
var div = document.createElement('div');
div.innerHTML = html;
html = div.firstChild;
lastEdited.options.position.element.appendChild(html);
} else if (lastEdited.options.position.method == 'prepend') {
lastEdited.options.position.element.children[0].insertAdjacentHTML('beforeBegin', html);
}
} else {
if (document.querySelector('#WikiaPageHeader .header-container .header-title')) {
var div = document.createElement('div');
div.innerHTML = html;
html = div.firstChild;
document.querySelector('#WikiaPageHeader .header-container .header-title').appendChild(html);
} else {
document.getElementsByClassName('UserProfileActionButton')[0].insertAdjacentHTML('afterEnd', html);
}
}
break;
case 'monobook':
case 'wowwiki':
case 'uncyclopedia':
document.getElementById('bodyContent').children[0].insertAdjacentHTML('beforeBegin', html);
break;
}
var time = '<span class="timeago" title="' + data.timestamp + '"></span>';
if (lastEdited.options.time == 'timestamp') {
time = new Date(data.timestamp).toUTCString().slice(0, 16) + ', ' + new Date(data.timestamp).toUTCString().slice(17, 25) + ' (UTC)';
}
var user = mw.util.wikiUrlencode(data.user);
user = '<a href="/wiki/User:' + user + '">' + data.user + '</a> (<a href="/wiki/User_talk:' + user + '">talk</a> | <a href="/wiki/Special:Contributions/' + user + '">contribs</a>' + (/(bureaucrat|sysop|helper|vstf|staff)/.test(mw.config.get('wgUserGroups').join(' ')) ? ' | <a href="/wiki/Special:Block/' + user + '">block</a>' : '') + ')';
html = lastEdited.i18n.lastEdited.replace(/\$1/g, '<img id="lastEdited-avatar"/>' + user).replace(/\$2/g, time);
if (lastEdited.options.diff && data.diff.from) {
html += ' (<a style="cursor:pointer" id="lastEdited-diff-link">' + lastEdited.i18n.diff + '</a>)';
}
if (data.minor == '') {
html += ' <span style="font-weight: bold;">[' + lastEdited.i18n.minor +']</span>';
}
if (lastEdited.options.comment && data.parsedcomment) {
if (data.parsedcomment.indexOf('Created page with') > -1) {
html += '<br>' + lastEdited.i18n.comment + ': ' + lastEdited.i18n.created;
} else {
html += '<br>' + lastEdited.i18n.comment + ': ' + data.parsedcomment;
}
}
if (lastEdited.options.size) {
var bytes = data.size - prev.size,
span = document.createElement('span');
if (Math.abs(bytes) > 500) {
span.style.fontWeight = 'bold';
}
span.style.color = bytes > 0 ? '#006500' : '#8b0000';
span.innerHTML = '(' + (bytes > 0 ? '+' : '') + bytes.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ')';
html += '<br>' + lastEdited.i18n.size + ': ' + data.size + ' bytes ' + span.outerHTML;
}
document.getElementById('lastEdited').innerHTML = html;
if (lastEdited.options.avatar) {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/api/v1/User/Details?ids=' + data.userid + '&size=15', true);
xhr.onload = function() {
if (xhr.status == 200) {
var avatar = document.getElementById('lastEdited-avatar');
avatar.setAttribute('src', JSON.parse(xhr.responseText).items[0].avatar);
avatar.insertAdjacentHTML('afterEnd', ' ');
}
};
xhr.send();
}
jQuery('.timeago').timeago();
if (document.getElementById('lastEdited-diff-link')) {
document.getElementById('lastEdited-diff-link').addEventListener('click', function() {
require(['wikia.ui.factory'], function(ui) {
ui.init(['modal']).then(function(modal) {
var config = {
vars: {
id: 'lastEdited-diff',
size: 'large',
title: lastEdited.i18n.changes + ': ' + lastEdited.title.replace(/_/g, ' '),
content: '<div id="lastEdited-diff-changes" class="WikiaArticle"><table style="width: 100%;">' + data.diff['*'] + '</table></div>',
buttons: [{
vars: {
value: lastEdited.i18n.cancel,
data: [{
key: 'event',
value: 'close'
}]
}
}, {
vars: {
value: lastEdited.i18n.link,
classes: ['normal', 'primary'],
data: [{
key: 'event',
value: 'link'
}]
}
}, {
vars: {
value: lastEdited.i18n.undo,
classes: ['normal', 'primary'],
data: [{
key: 'event',
value: 'undo'
}]
}
}]
}
};
if (lastEdited.canRollback && mw.config.get('wgUserName') !== data.user) {
config.vars.buttons.push({
vars: {
value: 'Rollback',
classes: ['normal', 'primary'],
data: [{
key: 'event',
value: 'rollback'
}]
}
});
}
modal.createComponent(config, function(diffModal) {
diffModal.bind('link', function() {
diffModal.trigger('close');
window.open('/?diff=' + data.diff.to, '_blank');
});
diffModal.bind('undo', function() {
diffModal.trigger('close');
window.open('/wiki/' + mw.util.wikiUrlencode(lastEdited.title) + '?action=edit&undoafter=' + data.diff.from + '&undo=' + data.diff.to, '_blank');
});
diffModal.bind('rollback', function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', mw.util.wikiScript('api') + '?action=rollback&title=' + mw.util.wikiUrlencode(lastEdited.title) + '&user=' + mw.util.wikiUrlencode(data.user) + '&token=' + mw.util.wikiUrlencode(data.rollbacktoken) + '&format=json', true);
xhr.onload = function() {
if (xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
if (!response.error) {
window.location.reload();
}
}
};
xhr.send();
});
mw.loader.using(['mediawiki.action.history.diff'], function() {
diffModal.show();
});
});
});
});
});
}
},
init: function() {
lastEdited.options = lastEdited.options();
lastEdited.allowed = lastEdited.allowed();
lastEdited.i18n = lastEdited.i18n();
if (
!mw.util.getParamValue('diff') && !mw.util.getParamValue('oldid') &&
lastEdited.allowed.indexOf(mw.config.get('wgNamespaceNumber')) > -1 &&
!(lastEdited.options.pages.indexOf(lastEdited.title) > -1) &&
!mw.config.get('wgIsMainPage') &&
!lastEdited.loaded
) {
lastEdited.loaded = true;
var query = {
action: 'query',
titles: lastEdited.title,
prop: 'revisions',
rvprop: 'timestamp|user|userid|size|parsedcomment|flags',
rvlimit: 2,
rvdiffto: 'prev',
format: 'json'
};
if (lastEdited.canRollback) {
query.rvtoken = 'rollback';
}
mw.util.addCSS(
'#lastEdited-diff-changes .diff-marker {' +
'width: auto;' +
'}' +
'#lastEdited-diff-changes td {' +
'width: 50%;' +
'padding: 5px;' +
'}'
);
lastEdited.get(query);
}
}
};
lastEdited.init();
})();