Участник:T kns/revertall.js

Материал из Lurkmore
Версия от 16:25, 18 марта 2017; imported>T kns
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
//<pre>
/*
*
*
*
*                    (   )
*                 (   ) (
*                  ) _   )
*                   ( \_
*                 _(_\ \)
*                (____\___))
*
*
*
*/

addOnloadHook(function() {
    var tok ='';

    function delfile(f,_) {
        $.ajax({
            url: '/api.php?'+$.param({
                format: 'json',
                action: 'delete',
                title: f,
                token: tok,
                reason: 'Быстрое удаление неиспользуемого файла'
            }),
            dataType: 'json',
            type: 'POST'
        }).success(function(d) {
            if(wgCanonicalSpecialPageName=="Unusedimages") {
                _.closest('td').remove();
            } else {
                _.closest('li').remove();
            }
        });
    }

    function gettok (flist,_) {
        if(!flist.length) {showmessage('Файлы не выбраны'); return false;}

        _.data('delStarted', true)
            .append('<img src="/skins/common/images/ajax-loader.gif" alt="l" height="16"/>');

        $.ajax({
            url: '/api.php',
            data: {
                format: 'json',
                action: 'query',
                prop: 'info',
                intoken: 'delete',
                titles: 'Файл:'+flist+'|Обсуждение файла:'+flist
            },
            dataType: 'json',
            type: 'POST'
        }).success(function(d){
            for(var i in d.query.pages) {
                if(parseInt(i,10) < 0) continue;
                if(d.query.pages[i].ns === 7) {
                    showmessage('Также будет удалена страница: «'+d.query.pages[i].title+'».');
                }
                tok = d.query.pages[i].deletetoken;
                delfile(d.query.pages[i].title,_)
            };
        });
    }


if(wgNamespaceNumber==-1 && wgCanonicalSpecialPageName=="Unusedimages") {
    $('.gallerytext').append('[',$('<a href="#">x</a>').click(function() {
        var _ = $(this)
            , f = _.closest('.gallerybox').find('a.image > img').eq(0).attr('alt');
        if(!_.data('delStarted')) {
            gettok(f,_);
        }
        return false;
    }), ']');
}


if(wgCanonicalSpecialPageName=="Contributions" && $('span.mw-rollback-link,ul > li abbr.newpage+a[title^="Файл:"]').length > 0) {

    var enablemassrb = $('<li><a href="#">Включить откатывалку</a></li>').one('click', function(e) {
        e.preventDefault();

        (function($) {
            $.fn.enableCheckboxRangeSelection = function() {
                var lastCheckbox = null, $spec = this;
                $spec.unbind("click.checkboxrange");
                $spec.bind("click.checkboxrange", function(e) {
                    if (lastCheckbox != null && (e.shiftKey || e.metaKey)) {
                        $spec.slice(
                            Math.min($spec.index(lastCheckbox), $spec.index(e.target)),
                            Math.max($spec.index(lastCheckbox), $spec.index(e.target)) + 1
                        ).prop('checked', e.target.checked);
                    }
                    lastCheckbox = e.target;
                });
            };
        })(jQuery);

    function rollback(cd) {
        if(!cd.length) {showmessage('Не выбрано ни одной правки!');return false;}

        var rblinks = $.map(cd, function(n) {
            var n =$(n), title = n.attr('data-pagename');
            showmessage('===> '+title);
            $.get(n.attr('data-rollback-url')).success(function() {showmessage('<=== '+title);})

            return true;
        });
    }

        var rollbacks = $('span.mw-rollback-link')
            , fileslist = {};


        $('ul > li abbr.newpage+a[title^="Файл:"]').each(function(){
            var fname = $(this).attr('title').replace(/^Файл:/,'');
            fileslist[fname] = $(this);
            $(this).closest('li').prepend('&nbsp;[',$('<a href="#">x</a>').click(function() {
                var _ = $(this);
                if(!_.data('delStarted')) {
                    gettok(fname,_);
                    delete fileslist[fname];
                }
                return false;
            }), ']&nbsp;')
        });

        rollbacks.each(function(i) {
            $(this).closest('li').prepend($('<input type="checkbox" class="rtbcbox" checked="checked"/>')
                                            .attr({'data-cbox-num' :i, 'data-rollback-url':$(this).children('a').attr('href'), 'data-pagename': $(this).parent().children('a').attr('title')}));
        })

        $("input.rtbcbox").enableCheckboxRangeSelection();

        var navbar = $('<li>Выберите правки, которые необходимо откатить: <a href="#" data-choice="all" unselectable="on">все</a>, <a href="#" data-choice="none" unselectable="on">ни одной</a>, <a href="#" data-choice="invert" unselectable="on">обратить выбор</a>. Совет: если хотите отметить несколько чекбоксов, кликните по первому из группы, а затем, удерживая клавишу Shift, по последнему. [<a href="#" data-choice="rollback" style="color:red; font-weight:bold;">Откатить!</a>&nbsp;|&nbsp;<a href="" data-choice="removeimages">Удалить <b>все</b>&nbsp;картинки!</a>]</li>')
            .on('click', 'a', function() {
                var choice = $(this).attr('data-choice')
                    , cd = $('input.rtbcbox:checked')
                    , ncd = $('input.rtbcbox:not(:checked)');

                switch(choice) {
                    case 'all':
                        ncd.prop('checked',true);break;
                    case 'none':
                        cd.prop('checked',false);break;
                    case 'rollback':
                        rollback(cd);break;
                    case 'removeimages':
                        if(confirm('Удалить картинки, загруженные пользователем?')) {
                            for (var j in fileslist) gettok(j, fileslist[j]);
                        }
                        break;
                    default:
                        ncd.prop('checked',true); cd.prop('checked',false);break;
                }

                return false;
            })
            .css({color:'#743E27'})
            .prependTo('#mw-content-text>ul');

        $('html,body').animate({ scrollTop: navbar.offset().top }, 300);

        $(this).remove();
    }).appendTo('#p-tb .pBody ul');

}

});
//</pre>