User:Rairakkumee/global.js

/* Автор: Frontwards */ document.querySelector('.wds-global-navigation__logo').href = '//shararam.wikia.com'; var spanWiki = document.querySelector('.wds-dropdown__toggle span'); spanWiki.innerHTML = 'Содружество'; var newLink = document.createElement('a'); newLink.className = 'wds-global-navigation__cc'; newLink.innerHTML = 'Вики Сообщества'; newLink.setAttribute('href','http://ru.community.wikia.com'); var nav = document.querySelector('.wds-global-navigation__content-bar-left'); nav.appendChild(newLink); /* Автор куска: Fngplg */ window.gnWikiLinks = ['http://ru.polandball.wikia.com|Polandball вики', 'http://ru.luntik.wikia.com|Лунтик Вики', 'http://ru.losyash-library.wikia.com|Библиотека Лосяша', 'http://ru.peopleshararam.wikia.com|Народ Шарарама вики', 'http://ru.swrolevie.wikia.com|Ролевые /шв/ вики']; $(function {    var $menu = $('.wds-global-navigation__link-group .wds-list'),        links = window.gnWikiLinks || [];    if (!$menu.length || !links.length) return;    links.forEach(function (v) { var link = v.replace(/\[|\]/g, ''), $a = $('', {               href: (/(.*?)\||$/.exec(link) || {})[1] || link,                text: (/\|(.*)/.exec(link) || {})[1] || link,                title: link            }); $menu.prepend($('').append($a)); }); }); /* -- */ /* PortableCSSPad */ var ind = 0; $(".wds-global-navigation__content-bar-left .wds-is-linked li").each(function{ ind++; $(this).attr("id","banus"+ind); });

importArticles({   type: 'script',    articles: [        'u:dev:MediaWiki:PortableCSSPad/code.js',    ] });

importArticles({   type: 'script',    articles: [        'u:dev:MediaWiki:ViewRemoved/code.js',    ] });

/** * ContributionsCalculator * @author Wildream * Данный скрипт позволит получить различные данные о вкладе, внесённом участником в википроект * Скрипт показывает количество: * * Совершённых правок без учёта архивированных версий * * Созданных статей (в основном пространстве) * * Загруженных файлов * * Правок, помеченных, как "малые" * * Объём внесённого в основное пространство, в байтах * * Объём внесённого вклада в википроект в целом, в байтах * Автор идеи скрипта - Idel sea Qatarhael * * Использование: * * Добавь следующую строку на страницу http://community.wikia.com/wiki/Special:MyPage/global.js * * importScriptPage('User:Wildream/ContributionsCalculator.js', 'ru.community'); * * Обнови кэш * * Перейди на страницу вклада любого участника * * В списке ссылок над полем "Поиск вклада" найди и нажми на ссылку "ContributionsCalculator" * * В появившемся диалоговом окне нажми кнопку "Начать вычисление" */ var contribs = []; function obtainContribs(user, timestamp) { /**    * Данная функция рекурсивно получает список совершённых участником правок с помощью MediaWiki API и сохраняет их во внешней переменной. */   if (typeof timestamp === 'undefined') { userContribsData = { 'action': 'query', 'list': 'usercontribs', 'ucuser': user, 'uclimit': 'max', 'format': 'json' };   } else { userContribsData = { 'action': 'query', 'list': 'usercontribs', 'ucuser': user, 'uclimit': 'max', 'ucstart': timestamp, 'format': 'json' };   }    $.ajax({        url: mw.util.wikiScript('api'),        type: 'GET',        data: userContribsData    }).success(function (data) {        if (data && data.query.usercontribs) {            $.merge(contribs, data.query.usercontribs);        }        if (typeof data['query-continue'] !== 'undefined') {            obtainContribs(user, data['query-continue']['usercontribs']['ucstart']);        } else {            $('#ContribsCounterModal h1').text('Построение таблицы...');            processContribs;        }    }); } function processContribs { /**    * Эта функция обрабатывает полученный массив с данными о правках, подсчитывает количество * совершённых правок, созданных статей, файлов и малых правок, суммирует объём внесённого вклада для правок, которыми были созданы новые страницы. * Обработанные данные оформляются в таблицу, после чего запускается подсчёт объёма внесённого вклада для всех остальных правок. */   var contribsToGet = []; var threads = 20; // Число потоков для функции getContributionsSizeDiffs var doneCount = 0; function getContributionsSizeDiffs(thread, contribsCountOnStart) { /**        * Эта функция собирает данные об объёме внесённого вклада для правок, которыми не были созданы новые страницы. * Функция рекурсивно обращается к MediaWiki API, получая размеры статей до и после совершения каждой правки, и определяет разницу размеров * для каждой правки, после чего обновляет данные в таблице. Запросы на получение данных отправляются в несколько потоков. */       // console.log('Request in thread ' + thread + ', ' + contribsToGet.length + ' requests to go.'); if (contribsToGet.length) { var contrib = contribsToGet.shift; $.ajax({               url: mw.util.wikiScript('api'),                type: 'GET',                data: {                    'action': 'query',                    'prop': 'revisions',                    'rvlimit': '2',                    'rvprop': 'size',                    'titles': contrib.title,                    'rvstartid': contrib.revid,                    'format': 'json'                }            }).complete(function (data) {                data = JSON.parse(data.responseText);                try {                    if (parseInt(data['query']['pages'][Object.keys(data['query']['pages'])[0]]['revisions'][0]['size'], 10) > parseInt(data['query']['pages'][Object.keys(data['query']['pages'])[0]]['revisions'][1]['size'], 10)) {                        $('#ContribsTotal').text(parseInt($('#ContribsTotal').text, 10) + (data['query']['pages'][Object.keys(data['query']['pages'])[0]]['revisions'][0]['size'] - data['query']['pages'][Object.keys(data['query']['pages'])[0]]['revisions'][1]['size']));                       if (contrib.ns === 0) {                            $('#ContribsMain').text(parseInt($('#ContribsMain').text, 10) + (data['query']['pages'][Object.keys(data['query']['pages'])[0]]['revisions'][0]['size'] - data['query']['pages'][Object.keys(data['query']['pages'])[0]]['revisions'][1]['size']));                       }                    }                } catch (e) {                    console.log(e);                    console.log(contrib.title, contrib.title);                }                var progress = 100 - parseInt(contribsToGet.length * 100 / contribsCountOnStart, 10);                if (!isNaN(progress)) {                    $('#ContribsCounterModal h1').text('Вычисление объёма вклада, ' + progress + '% завершено');                }                getContributionsSizeDiffs(thread, contribsCountOnStart);            }); } else { doneCount++; if (doneCount === threads) { $('#ContribsTotal').css('color', 'green'); }       }    }    if ($('#ContribsCounterModal').length) { $('#ContribsCounterModal h1').text('Распределение данных...'); var tableOfContribs = ' '; $('#CounterContent').empty.append(tableOfContribs); console.log('total contribs count: ' + contribs.length); $('#EditCount').text(contribs.length); for (var contribIndex = 0; contribIndex < contribs.length; contribIndex++) { if (contribs[contribIndex].hasOwnProperty('new') && !isNaN(parseInt(contribs[contribIndex]['size'], 10))) { $('#ContribsTotal').text(parseInt($('#ContribsTotal').text, 10) + parseInt(contribs[contribIndex]['size'], 10)); if (contribs[contribIndex].ns === 0) { $('#NewArticlesCount').text(parseInt($('#NewArticlesCount').text, 10) + 1); $('#ContribsMain').text(parseInt($('#ContribsMain').text, 10) + parseInt(contribs[contribIndex]['size'], 10)); }           } else { contribsToGet.push(contribs[contribIndex]); }           if (contribs[contribIndex].hasOwnProperty('new') && contribs[contribIndex].ns === 6) { $('#NewFilesCount').text(parseInt($('#NewFilesCount').text, 10) + 1); }           if (contribs[contribIndex].hasOwnProperty('minor')) { $('#MinorEditsCount').text(parseInt($('#MinorEditsCount').text, 10) + 1); }       }        // Вызов функции getContributionsSizeDiffs в несколько потоков for (var threadNumber = 0; threadNumber < threads; threadNumber++) { getContributionsSizeDiffs((threadNumber + 1), contribsToGet.length); }   } } function showContributionsModal { /**    * Создание окна ContributionsCalculator */   $.showCustomModal('Получение данных о вкладе участника ' + mw.config.get('wgPageName').replace(/^.*?\//, ''), ' Начать вычисление ', {        id: 'ContribsCounterModal',        width: 600,    }); $('#StartCounter').click(function {        $('#CounterContent').empty.text('Получение данных...');        obtainContribs(mw.config.get('wgPageName').replace(/^.*?\//, ''));    }); } $(function {    if (wgCanonicalSpecialPageName === "Contributions") {        $('#contentSub').append(' | ContributionsCalculator |');    } });