User:逆襲的天邪鬼/MassUnimport.js

From TestWiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/*
 * Usage: After mw.loader.load('https://publictestwiki.com/w/index.php?title=User:逆襲的天邪鬼/MassUnimport.js&action=raw&ctype=text/javascript') 
 *        Open [[Special:Log/import]], check pages, and click "MassUnimport" on "More".
 */

$(function () {
    var massDelete = function (pages, reason, callback) {
        var promises = [];
        for (var i=0; i<pages.length; i++) {
            promises.push($.ajax({
                url: mw.util.wikiScript('api'),
                data: {
                    format: 'json',
                    action: 'delete',
                    title: pages[i],
                    reason: reason,
                    token: mw.user.tokens.get('editToken'),
                },
                dataType: 'json',
                type: 'POST',
            }));
        }
        $.when.apply($, promises).always(function () {
            if (typeof callback === 'function') {
                callback();
            }
        });
    };

    if (mw.config.get('wgCanonicalNamespace') === 'Special' && mw.config.get('wgCanonicalSpecialPageName') === 'Log') {
        var node = mw.util.addPortletLink('p-cactions', '#', 'MassUnimport');
        $(node).click(function (e) {
            e.preventDefault();

            var checked = $('input[type=checkbox]', '.mw-logline-import').filter(function (index, e) { return e.checked; });
            if (checked.length === 0) {
                alert('Please select at least one page.');
            } else {
                var reason = prompt('Delete reason', 'Test done (by [[User:逆襲的天邪鬼/MassUnimport.js|MassUnimport]])');
                if (reason !== null) {
                    var pages = [];
                    
                    checked.each(function (index, e) {
                        var title = $('a:last', e.parentElement).text();
                        console.log(title);
                        if (title) {
                            pages.push(title);
                        }
                    });
                     
                    massDelete(pages, reason, function () {
                        alert('done');
                        history.go(0);
                    });
                }
            }
        });
    }
});