User:Кленозубка/global.js

/** * A variant of WHAM with a different modal * Includes functionality to delete forum/message wall threads and selective * deleting of pages, which the original lacks * Original "WHAM" - https://dev.wikia.com/wiki/MediaWiki:WHAM/code.js * @author Ozank Cx */ mw.loader.using('mediawiki.api').then(function {   'use strict';    var config = mw.config.get([ 'wgCanonicalSpecialPageName', 'wgPageName', 'wgUserGroups', 'wgUserName' ]);   if ( config.wgCanonicalSpecialPageName !== 'Contributions' || !/rollback|content-moderator|threadmoderator|sysop|vstf|staff|helper|global-discussions-moderator/.test(config.wgUserGroups.join) || window.WHAMLoaded ) {       return;    }    window.WHAMLoaded = true;

if (!window.dev || !window.dev.i18n) { importArticle({           type: 'script',            article: 'u:dev:MediaWiki:I18n-js/code.js'        }); }   importArticle({        type: 'style',        article: 'u:dev:MediaWiki:WHAM.css'    }); var username = config.wgPageName.split('/')[1], token = mw.user.tokens.get('editToken'), delay = window.WHAMDelay || 100, deleteReason, duration, blockReason, deleteArray, Api = new mw.Api, i18n, progress = 'https://images.wikia.nocookie.net/common/skins/common/progress-wheel.gif', $button;

function apiDelete(page, reason) { Api.post({           action: 'delete',            title: page,            reason: reason,            bot: true,            token: token        }).done(function(d) {            if (d.error) {                console.log( i18n.msg('do-delete-fail', page, d.error.code).plain );           } else {                console.log(i18n.msg('do-delete-success', page).plain);            }        }).fail(function {            console.log( i18n.msg(                   'do-delete-fail',                    page,                    i18n.msg('ajax-error').plain                ).plain );       });    }

function doRollback { var $links = $('.mw-rollback-link a'), len = $links.length; if (len === 0) { $('#status-wham').text(i18n.msg('do-rollback-done').plain); }       $links.each(function(i) {            var href = new mw.Uri($(this).attr('href')).extend({ bot: 1 }).toString;           setTimeout(function { $.get(href); $('#status-wham').html(                   i18n.msg('do-rollback-status').escape +                    $(' ', { src: progress }).prop('outerHTML')               ); if (i === len - 1) { $('#status-wham').text(                       i18n.msg('do-rollback-done').plain                    ); }           }, i * delay);        }); }

function doDelete { deleteReason = prompt(           i18n.msg('do-delete-reason').plain,            window.WHAMDeleteReason || i18n                .inContentLang                .msg('default-delete-reason')                .plain        ); if (!deleteReason) { return; }       deleteArray = [];

$('#mw-content-text ul li').each(function {           var title = $(this).children('a').first.attr('title');            if (!title.match(/\/@comment-/)) {                return;            }            deleteArray.push(title);        });

$('li .newpage ~ a').each(function {           var title = new mw.Title($(this).attr('title'));            if ( title.namespace === 1200 || title.namespace === 1201 && title.getNamespacePrefix < 9 ) {               return;            }            deleteArray.push(title.getPrefixedText);        });

$.each(deleteArray, function(i, v) {           setTimeout(function { $('#status-wham').html(                   i18n.msg('do-delete-status').escape +                    $(' ', { src: progress }).prop('outerHTML')               ); apiDelete(v, deleteReason); if (i === deleteArray.length - 1) { $('#status-wham').text(i18n.msg('do-delete-done').plain); }           }, i * delay);        }); }

function doBlock { duration = prompt(           i18n.msg('do-block-duration').plain,            window.WHAMBlockDuration || '2 weeks'        ); if (!duration) { return; }       blockReason = prompt(            i18n.msg('do-block-reason').plain,            window.WHAMBlockReason || i18n                .inContentLang                .msg('default-block-reason')                .plain        ); if (!blockReason) { return; }       Api.post({            action: 'block',            user: username,            expiry: duration,            nocreate: 0,            autoblock: 0,            reason: blockReason,            bot: true,            token: token        }).done(function(d) {            if (d.error) {                alert( i18n.msg('do-block-fail', username, d.error.code).plain );           } else {                console.log(i18n.msg('do-block-success', username).plain);            }        }).fail(function {            alert( i18n.msg(                   'do-block-fail',                    username,                    i18n.msg('ajax-error').plain                ).plain );       });    }

function doBot { Api.get({           action: 'query',            list: 'users',            ustoken: 'userrights',            ususers: config.wgUserName        }).done(function(data) {            var params = {                action: 'userrights',                user: config.wgUserName,                reason: window.WHAMBotReason || i18n                    .inContentLang                    .msg('default-delete-reason')                    .plain,                bot: true,                token: data.query.users[0].userrightstoken            };            params[                config.wgUserGroups.indexOf('bot') === -1 ?                    'add' :                    'remove'            ] = 'bot';            Api.post(params).done(function(d) { if (d.error) { console.log(i18n.msg('bot-me-fail', d.error.code).plain); } else { console.log(i18n.msg('bot-me-done').plain); }           });        });    }

function doSelectiveDelete { deleteReason = prompt(           i18n.msg('do-delete-reason').plain,            window.WHAMDeleteReason || i18n                .inContentLang                .msg('default-delete-reason')                .plain        ); if (!deleteReason) { return; }       $('.selectiveDel').each(function {            var $this = $(this),                title = new mw.Title($('.mw-revdelundel-link').exists ? $this.parent.children('a').eq(0).attr('title') : $this.parent.find('a').first.attr('title'));           if ($this.prop('checked') && title.namespace !== 1200) {                apiDelete(title.getPrefixedText, deleteReason);                $this                    .parent                    .addClass('wham-resolved')                    .children                    .removeAttr('href')                    .addClass('wham-resolved');            }        }); setTimeout(function {           location.reload;        }, 5000); }

function checkSelectiveDelete { var $this = $(this), uncheck = $this.text === i18n.msg('selective-delete-uncheck').plain; $('.selectiveDel').each(function {           var chkObj = $(this);            if (uncheck) {                chkObj.removeAttr('checked');            } else {                chkObj.attr('checked', 'checked');            }        }); $this.text(           i18n.msg( uncheck ? 'selective-delete-check' : 'selective-delete-uncheck' ).plain       ); }

function startSelectiveDelete { $('#form-main').closeModal; if ($('#btn-wham-del').exists && $('#btn-wham-check').exists) { return; }       var $chk = $(' ', {            'class': 'selectiveDel',            'type': 'checkbox'        }); $('#mw-content-text') .find('ul') .last .before(               $('', { 'class': 'button', 'id': 'btn-wham-del', 'text': i18n.msg('start-selective-delete').plain }),               ' ',                $('', { 'class': 'button', 'id': 'btn-wham-check', 'text': i18n.msg('selective-delete-check').plain })           );

$('li .newpage ~ a').each(function {           if (!$(this).parent.find('input').length) {                $(this).parent.prepend($chk.clone);            }        });

$('#mw-content-text ul li').each(function {           var $this = $(this),                title = $this.children('a').first.attr('title');            if (title.match(/-|\/@comment/) && !$this.find('input').length) {                $this.prepend($chk.clone);            }        }); $('#btn-wham-del').click(doSelectiveDelete); $('#btn-wham-check').click(checkSelectiveDelete); }

function doAll { doBlock; if (duration || blockReason) { doDelete; if (deleteReason) { doRollback; }       }    }

function click { $.showCustomModal(i18n.msg('title').escape, '', {           id: 'form-main',            width: 260,            height: 190,            buttons: [{                message: i18n.msg('do-delete').escape,                defaultButton: true,                handler: doDelete            }, {                message: i18n.msg('start-selective-delete').escape,                defaultButton: true,                handler: startSelectiveDelete            }, {                message: i18n.msg('do-rollback').escape,                defaultButton: true,                handler: doRollback            }, {                message: i18n.msg('do-block').escape,                defaultButton: true,                handler: doBlock            }, {                message: i18n.msg('do-all').escape,                defaultButton: true,                handler: doAll            }, {                message: i18n.msg('close-wham').escape, id: 'close-wham' }]       });        $('#close-wham').after($(' ', {            id: 'status-wham'        }));        $('#close-wham,.close').click(function { $('#form-main').closeModal; location.reload; });

// Bot button if (           window.WHAMBotMe === true ||            /vstf|staff|helper/.test(config.wgUserGroups.join)        ) { $('#form-main .modalToolbar .wikia-button:nth-child(5)').after(               $('', { 'id': 'wham-bot', 'class': 'wikia-button', 'text': i18n.msg(                       config.wgUserGroups.indexOf('bot') === -1 ?                            'bot-me' :                            'unbot-me'                    ).plain }).click(doBot)           ); }   }

function qlIntegration(QuickLogs) { $button.remove; QuickLogs.addLink('wham', {           click: click,            message: i18n.msg('contribs-wham').plain        }); }

function init(i18no) { i18n = i18no; $button = $('', {           id: 'contribs-wham',            click: click,            title: i18n.msg('contribs-wham-title').plain,            text: i18n.msg('contribs-wham').plain        }); $('#contentSub').append(' ', $button); mw.hook('QuickLogs.loaded').add(qlIntegration); }

function preload(i18no) { $.when(           i18no.loadMessages('WHAM'),            mw.loader.using('mediawiki.api')        ).then(init); }

mw.hook('dev.i18n').add(preload); });