User:Jeeputer/specialRandomPage.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/**
 * Finds a random page in a selected namespace with preferred options
**/
mw.loader.using(["oojs-ui-core", "oojs-ui-windows", "oojs-ui-widgets"], function() {
    var namespaces = [{
        name: 'All',
        ns: '0|6|10|14|118|828'
    }, {
        name: '(Article)',
        ns: 0
    }, {
        name: 'File',
        ns: 6
    }, {
        name: 'Template',
        ns: 10
    }, {
        name: 'Category',
        ns: 14
    }, {
        name: 'Draft',
        ns: 118
    }, {
        name: 'Module',
        ns: 828
    }];

    var SPRPFieldSet = new OO.ui.FieldsetLayout({
        align: 'inline'
    });

    var dropDown = new OO.ui.DropdownWidget({
        menu: {
            items: namespaces.map(function(item) {
                return new OO.ui.MenuOptionWidget({
                    data: item.ns,
                    label: item.name
                });
            })
        }
    });
    dropDown.getMenu().selectItemByLabel(window.SPRPpreferredNamespace || 'All');

    var redirect = new OO.ui.ToggleButtonWidget({
        icon: 'articleRedirect',
        title: 'Random redirect',
        value: window.SPRPActivateRedirect || false
    }),
        edit = new OO.ui.ToggleButtonWidget({
            icon: 'edit',
            title: 'Open the edit form',
            value: window.SPRPAlwaysEdit || false
        }),
        links = new OO.ui.ToggleButtonWidget({
            icon: 'link',
            title: 'See what links to the page',
            value: window.SPRPActivateWLH || false
        });
    options = new OO.ui.ButtonGroupWidget({
        items: [redirect, edit, links]
    });

    SPRPFieldSet.addItems([
        new OO.ui.FieldLayout(dropDown, {
            align: 'top'
        }),
        new OO.ui.FieldLayout(options, {
            align: 'top'
        })
    ]);

    function SPRPProcessDialog(config) {
        SPRPProcessDialog.super.call(this, config);
    }
    OO.inheritClass(SPRPProcessDialog, OO.ui.ProcessDialog);

    SPRPProcessDialog.static.name = 'SPRPDialog';
    SPRPProcessDialog.static.title = 'Random page';
    SPRPProcessDialog.static.actions = [{
        action: 'save',
        label: 'Go',
        flags: 'primary'
    }, {
        label: 'Cancel',
        flags: 'safe'
    }];

    SPRPProcessDialog.prototype.initialize = function() {
        SPRPProcessDialog.super.prototype.initialize.apply(this, arguments);
        this.content = new OO.ui.PanelLayout({
            padded: true,
            expanded: false
        });
        this.content.$element.append(SPRPFieldSet.$element);
        this.$body.append(this.content.$element);
    };
    SPRPProcessDialog.prototype.getActionProcess = function(action) {
        var dialog = this;
        if (action) {
            mw.notify('Finding a random page...');
            var actionParam, WLH = false,
                redir = false;
            if (redirect.getValue()) {
                redir = true;
            }
            if (links.getValue()) {
                WLH = true;
                actionParam = 'view';
            } else {
                actionParam = edit.getValue() ? 'edit' : 'view';
            }
            return new OO.ui.Process(function() {
                var ns = dropDown.getMenu().findSelectedItem();
                var r = redir ? 'redirects' : 'nonredirects';
                new mw.Api().get({
                    action: 'query',
                    format: 'json',
                    list: 'random',
                    rnlimit: '1',
                    rnnamespace: ns.data,
                    rnfilterredir: r
                }).done(function(data) {
                    var title = data.query.random[0].title;
                    var url = mw.config.get('wgServer');
                    if (WLH) {
                        url += mw.util.getUrl('Special:WhatLinksHere/' + title);
                    } else {
                        url += mw.util.getUrl(title, {
                            redirect: redir ? 'no' : 'yes',
                            action: actionParam
                        })
                        if (actionParam == 'edit') {
                            url += '#editform'
                        }
                    }
                    window.location.href = url;
                });
                dialog.close({
                    action: action
                });
            });
        }
        return SPRPProcessDialog.super.prototype.getActionProcess.call(this, action);
    };

    var windowManager = new OO.ui.WindowManager();
    $(mw.util.addPortletLink('p-cactions', '#', 'Random Page', 'ca-sprp', 'Go to a random page in a selected namespace', window.SPRPAccesskey || 'z')).on('click', function(e) {
        e.preventDefault();
        $(document.body).append(windowManager.$element);
        var dialog = new SPRPProcessDialog();
        windowManager.addWindows([dialog]);
        windowManager.openWindow(dialog);
    });
});