User:Kofirs2634/global.js

mw.loader.using('mediawiki.api', function {	if (window.PagesInfo) return;	window.PagesInfo = true;

const c = mw.config.get(['wgTitle', 'wgNamespaceNumber', 'wgSiteName', 'wgArticlePath', 'wgServer', 'wgContentLanguage']), api = new mw.Api, link = '$2', datePattern = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric' }

if (c.wgTitle != 'PagesInfo' || c.wgNamespaceNumber != -1) return;

/**    * Осуществляет первичный поиск страниц по префиксу иначе оповещает об отсутствии таких страниц */	function prefixSearch { // чистим предыдущий ответ $('#pi-results').empty; // запрягаем API api.get({			action: 'query',			list: 'allpages',			aplimit: 'max',			apprefix: $('#pi-search-box').val		}, function(r) {           // если ничего нет            if (!r.query.allpages.length) return $('#pi-results').append($(' ', { text: 'Ничего не найдено' }))            // выводим дропдаун со списком страниц			$('#pi-results').append($(' ', { id: 'pi-selection' })).append($(' ', {				id: 'pi-get',				value: 'Получить',				type: 'button'			}))			r.query.allpages.forEach(function(e) { $('#pi-selection').append($(' ', { id: 'article-' + e.pageid, text: e.title }))           })            // кнопочка для получаения данных			$('#pi-get').click(getInfo)		}) }

/**    * Получает информацию по выбранной странице */	function getInfo { // список всех пропов для запроса var props = [ ['info', 'categories', 'extlinks', 'langlinks', 'templates', 'links', 'images', 'revisions'], ['ids', 'flags', 'timestamp', 'user', 'parsedcomment'], ['protection', 'url'] ];       // формируем запрос api.get({			action: 'query',			prop: props[0].join('|'),           titles: $('#pi-selection').val,            rvlimit: 1,            rvprop: props[1].join('|'),            inprop: props[2].join('|'),            imlimit: 'max', cllimit: 'max', ellimit: 'max', iwlimit: 'max',            lllimit: 'max', tllimit: 'max', pllimit: 'max'		}, function(r) {            // создаем ссылку для повторного поиска			$('.page-header__main').append($(' ', { 'class': 'page-header__page-subtitle', id: 'pi-back' }).append($('', { href: '#', text: 'Выбрать другую страницу' }).click(function { // заставляем ее работать $('#pi-choose').css('display', 'block'); $('#pi-info').empty; $('#pi-back').remove; $('.page-header__title').text('Информация о статьях') })))           // изменяем заголовок служебки            $('.page-header__title').text('Информация: ' + $('#pi-selection').val)            // скрываем поиск            $('#pi-choose').css('display', 'none');            // вызываем вывод данных			makeInfo(r.query.pages[Object.keys(r.query.pages)[0]]);			console.log(r.query.pages[Object.keys(r.query.pages)[0]])		}) }

/**    * Оформляет полученный от сервера ответ в виде списка данных * @param data –  Данные сервера */	function makeInfo(data) { window.data = data; // раздел ОСНОВНОЕ $('#pi-info').append($(' ', { text: 'Основное' })) .append($('', { id: 'pi-useful' })) // полезные ссылки пойдут сюда .append($('', { id: 'pi-info-main' }) // список информации			.append($('', { text: data.pageid }).prepend($('', { text: 'Системный идентефикатор: ' })))			.append($('', { text: data.length + ' байт' }).prepend($('', { text: 'Размер: ' })))       ) // раздел СВЯЗЬ С ДРУГИМИ СТРАНИЦАМИ .append($(' ', { text: 'Связь с другими страницами' })) .append($('', { id: 'pi-info-links' })) // список связей // раздел ПАРАМЕТРЫ ЗАЩИТЫ .append($(' ', { text: 'Параметры защиты' })) .append($('', { id: 'pi-info-protection' })) // список параметров // раздел ПОСЛЕДНЯЯ ПРАВКА .append($(' ', { text: 'Последняя правка' })) .append($('', { id: 'pi-info-revision' }))

// оформляем ссылки в некоторых пунктах var cats = [], links = [], langs = []; if (data.links) { data.links.forEach(function(e) {               links.push(link.replace('$1', c.wgArticlePath.replace('$1', e.title)).replace('$2', e.title))            }) }       if (data.categories) { api.get({               action: 'query',                meta: 'siteinfo',                siprop: 'namespaces'            }, function(ns) {                data.categories.forEach(function(e) { cats.push(link.replace('$1', c.wgArticlePath.replace('$1', e.title)).replace('$2', e.title.substr(ns.query.namespaces[14]['*'].length + 1))) })               if (data.categories) $('#pi-info-main').append($('', { html: cats.join(', ') }).prepend($('', { text: 'Включена в ' + data.categories.length + ' категорий: ' })))                else $('#pi-info-main').append($('', { text: 'Не включена в категории' }))            }) }       if (data.langlinks) { api.get({               action: 'query',                meta: 'siteinfo',                siprop: 'languages'            }, function(ls) {                data.langlinks.forEach(function(e) { langs.push(link.replace('$1', c.wgServer + '/' + e.lang + '/wiki/' + e['*']).replace('$2', ls.query.languages.find(function(l) { return l.code == e.lang })['*'])) })               if (data.langlinks) $('#pi-info-links').append($('', { html: langs.join(', ') }).prepend($('<b>', { text: 'Содержит ' + data.langlinks.length + ' межъязыковых ссылок: ' })))                else $('#pi-info-links').append($('<li>', { text: 'Межъязыковые ссылки отсутствуют' }))            }) }

// отдельным номером заливаем данные по связям (могут быть, а могут и не быть) if (data.links) $('#pi-info-links').append($('<li>', { html: links.join(', ') }).prepend($('<b>', { text: 'Ссылается на ' + data.links.length + ' страниц: ' }))) else $('#pi-info-links').append($('<li>', { text: 'Не ссылается на другие страницы проекта' }))

if (data.extlinks) $('#pi-info-links').append($('<li>', { text: 'Содержит ' + data.extlinks.length + ' ссылок на внешние ресурсы' })) else $('#pi-info-links').append($('<li>', { text: 'На внешние ресурсы ссылок нет' }))

// про защиту if (data.protection.length) { var decrypt = { edit: 'Редактирование:', move: 'Переименование:', sysop: 'всем, кроме администраторов и модераторов контента,', autoconfirmed: 'новым и незарегистрированным участникам' };           data.protection.forEach(function(e) {                $('#pi-info-protection').append($('<li>', { html: '' + decrypt[e.type] + ' запрещено ' + decrypt[e.level] + ' ' + (e.expiry == 'infinity' ? 'на неограниченный срок' : 'до ' + new Date(e.expiry).toLocaleDateString(c.wgContentLanguage, datePattern)) }))           }) } else $('#pi-info-protection').append($('<li>', { text: 'Защита не установлена' }))

// последняя правка var rvpath = data.revisions[0]; $('#pi-info-revision').append($('<li>', { text: '№' + rvpath.revid + ' от ' + new Date(rvpath.timestamp).toLocaleDateString(c.wgContentLanguage, datePattern) })) .append($('<li>', { html: link.replace('$1', c.wgArticlePath.replace('$1', 'User:' + rvpath.user)).replace('$2', rvpath.user) }).prepend($('<b>', { text: 'Автор: ' }))) .append($('<li>', { html: rvpath.parsedcomment ? rvpath.parsedcomment : 'не предоставлен' }).prepend($('<b>', { text: 'Комментарий: ' }))) }

// заменяем название вкладки и служебки на нужное нам $('title').text('Информация о статьях | ' + c.wgSiteName + ' | Fandom'); $('.page-header__title').text('Информация о статьях'); // чистим дефолтный контент с ошибкой $('#mw-content-text').empty // а затем создаем разметку .append($(' ', { id: 'pi-choose' })			.append($(' ', {				text: 'Здесь вы можете получить основную информацию по любой статье на $1, воспользовавшись полем для поиска ниже.',				id: 'pi-desc'			}))			.append($(' ', {				id: 'pi-search-box',				placeholder: 'Поиск'			}))			.append($(' ', {				id: 'pi-search',				type: 'button',				value: 'Найти'			}))			.append($(' ', { id: 'pi-results' }))) .append($(' ', { id: 'pi-info' })) $('#pi-desc').html($('#pi-desc').html.replace('$1', link.replace('$1', c.wgArticlePath.replace('$1', '')).replace('$2', c.wgSiteName)));

// задаем функции кнопки поиска $('#pi-search').click(prefixSearch); })

// WAM Settings window.railWAM = { lang: 'ru' };

// Some imports importArticles({   type: 'script',    articles: [        'u:dev:MediaWiki:PortableCSSPad/code.js',        'u:dev:MediaWiki:RailWAM/code.js',        'u:dev:MediaWiki:GlobalEditcount/code.js',        'u:dev:MediaWiki:EditsShare.js',        'u:dev:MediaWiki:AjaxDiff/code.js',        'u:dev:MediaWiki:MultiUpload/code.js',        'u:dev:MediaWiki:SandboxLink/code.js',        'u:ru.koffee:MediaWiki:EditorInfo.js'    ] });

$(function {   if (window.myPages) return;    window.myPages = true;    var path = mw.config.get('wgArticlePath')    $('.wds-global-navigation__user-menu .wds-list').append($('<li>').append($('', { href: path.replace('$1', 'Special:MyPage/wikia.css'), text: 'Мой CSS' })))   .append($('<li>').append($('', { href: path.replace('$1', 'Special:MyPage/common.js'), text: 'Мой JS' }))) })

// Hide Global Nav Menu $(function($) {   if (window.hideGNM) return;    window.hideGNM = true;    window.hideGlobalNav = function {        $('.wds-global-navigation-wrapper').addClass('hide-it');        $('#wds-global-navigation__unhide').removeClass('hide-it')    }    window.unhideGlobalNav = function {        $('#wds-global-navigation__unhide').addClass('hide-it');        $('.wds-global-navigation-wrapper').removeClass('hide-it')    }    // Hide button    $('.wds-global-navigation__content-bar-right').append('<div class="wds-global-navigation__hide"> ');    $('.wds-global-navigation__hide').append('▲</a>');    // Unhide button    $('.wds-global-navigation-wrapper').after('<div id="wds-global-navigation__unhide" class="wds-global-navigation hide-it"> ');    $('#wds-global-navigation__unhide').append('▼</a>') })

// Page's length mw.loader.using('mediawiki.api', function {   var config = mw.config.get(['wgPageName', 'wgNamespaceNumber', 'wgScriptPath']);    if (config.wgNamespaceNumber % 2 != 0 || config.wgNamespaceNumber == -1) return;    $.ajax({ type: 'get', url: config.wgScriptPath + '/api.php?action=query&format=json&prop=info|revisions&rvlimit=2&rvprop=size&titles=' + config.wgPageName, success: function(data) { var length = data.query.pages[Object.keys(data.query.pages)[0]].length, lengthBefore = 0, text = ' Размер: ' + length + ' байт'; if (data.query.pages[Object.keys(data.query.pages)[0]].revisions[1]) lengthBefore = data.query.pages[Object.keys(data.query.pages)[0]].revisions[1].size; diff = length - lengthBefore; if (length % 10 == 2 || length % 10 == 3 || length % 10 == 4) { if (diff > 0) text += 'а (+' + diff + ') ' else if (diff < 0) text += 'а (' + diff + ') ' else text += 'а (0) ' } else { if (diff > 0) text += ' (+' + diff + ') ' else if (diff < 0) text += ' (' + diff + ') ' else text += ' (0) ' }           $('.page-header__main').prepend(text); if (Math.abs(diff) > 500) $('.page-length #size').css('font-weight', 'bold') },       error: function { $('.page-header__main').prepend(' Произошла ошибка ') }   }) })