Участник:Jack who built the house/proceedToArchive.js
Перейти к навигации
Перейти к поиску
/**
* proceedToArchive.js — 12.12.2017
* By Jack who built the house
*/
var proceedToArchiveRunned = true;
mw.loader.using('mediawiki.util').then(function() {
function processAnchor(fragment) {
function dotToPercent(code) {
return code.replace(/\.([0-9A-F][0-9A-F])/g, '%$1');
}
fragment = fragment
.replace(/(^|[^0-9A-F\.])(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/g, '$1$2,$3,$4,$5') // hide IP
.replace(/\.F[0-4]\.[89AB][\dA-F]\.[89AB][\dA-F]\.[89AB][\dA-F]/g, dotToPercent) // The codes were borrowed from
.replace(/\.E[\dA-F]\.[89AB][\dA-F]\.[89AB][\dA-F]/g, dotToPercent) // [[MediaWiki:Gadget-urldecoder.js]]
.replace(/\.[CD][\dA-F]\.[89AB][\dA-F]/g, dotToPercent)
.replace(/\.[2-7][0-9A-F]/g, function (code) {
var ch = decodeURIComponent(dotToPercent(code));
if ('!"#$%&\'()*+,/;<=>?@\\^`~'.indexOf(ch) !== -1)
return dotToPercent(code);
else
return code;
})
.replace(/(^|[^0-9A-F\.])(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/g, '$1$2.$3.$4.$5') // restore IP
.replace(/_/g, ' ');
try {
fragment = decodeURIComponent(fragment);
} catch (e) {
return;
}
return $.trim(fragment);
}
function dialog() {
var messageDialog = new OO.ui.MessageDialog();
var windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
windowManager.addWindows([messageDialog]);
// Configure the message dialog.
windowManager.openWindow(messageDialog, {
message: $('<div style="text-align:center;"><p style="margin-top:0;"><span style="color:#c61313;">Тема не найдена.</span> Она могла быть переименована или уйти в архив.</p><p style="font-size:125%;">Поискать в архиве?</p></div>'),
actions: [
{ label: 'Да', action: 'yes' },
{ label: 'Нет', action: 'no' }
],
}).closed.then(function (data) {
if (data && data.action === 'yes') {
var heading = processAnchor(fragment).replace(/"/g, '');
var archivePrefix = '';
var PAGE_TITLE = mw.config.get('wgTitle');
if (PAGE_TITLE.indexOf('Форум/') === 0) {
if (PAGE_TITLE.indexOf('Форум/Географический') === 0)
archivePrefix = 'Форум/Географический/Архивы';
else
archivePrefix = 'Форум/Архив/' + PAGE_TITLE.substr(6);
} else {
archivePrefix = PAGE_TITLE;
}
var searchQuery = '"' + heading + '" prefix:' + mw.config.get('wgFormattedNamespaces')[NAMESPACE_NUMBER] + ':' + archivePrefix;
var url = mw.util.getUrl('Служебная:Поиск', {
profile: 'default',
fulltext: 'Search',
search: searchQuery,
});
location.assign(mw.config.get('wgServer') + url);
}
});
}
var NAMESPACE_NUMBER = mw.config.get('wgNamespaceNumber');
var fragment = location.hash.substr(1);
var decodedFragment;
try {
decodedFragment = decodeURIComponent(fragment);
} catch (e) {
console.error(e.stack);
}
var escapedFragment = $.escapeSelector(fragment);
var escapedDecodedFragment = decodedFragment && $.escapeSelector(decodedFragment);
// страницы обсуждения и пространства «Википедия», кроме страниц номинаций, для которых нет архивов
if (!window.proceedToArchiveHasRun && // Чтобы не было двух экземпляров
(NAMESPACE_NUMBER % 2 === 1 || NAMESPACE_NUMBER === 4) &&
mw.config.get('wgIsArticle') &&
mw.config.get('wgPageName').indexOf('Архив') === -1 &&
!mw.config.get('wgPageName').match(/^Википедия:(К_удалению|К_восстановлению|К_переименованию|К_объединению|К_разделению|К_улучшению)\//) &&
!mw.util.getParamValue('oldid') &&
!mw.util.getParamValue('diff') &&
fragment &&
decodedFragment &&
fragment.search(/^\d{12}/) === -1 &&
fragment !== 'Преамбула' &&
fragment !== encodeURIComponent('Преамбула') &&
!fragment.startsWith('/media/') &&
!$(':target').length &&
!$('a[name="' + escapedDecodedFragment + '"]').length &&
!$('span[id="' + escapedDecodedFragment + '"]').length &&
!$('a[name="' + escapedFragment + '"]').length &&
!$('span[id="' + escapedFragment + '"]').length &&
$('#mw-content-text:contains("(UTC)")').length
) {
window.proceedToArchiveHasRun = true;
mw.loader.using([ 'oojs-ui' ], function () {
dialog();
});
}
}());