Jump to content

User:Sohom Datta/Redirectify.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.
//Copied from [[User:DannyS712/Redirectify.js]]
// Originally from [[User:FR30799386/redirectify.js]]?
//<nowiki>
var Redirectify_config = {
	name: '[[User:Sohom_Datta/Redirectify|Redirectify]]',
	version: 1.2,
	debug: false
};
var Redirectify_ending = ' (' + Redirectify_config.name + ' v.' + Redirectify_config.version + ')';
function loadredirectify() {
	if($('#mw-indicator-featured-star').length || $('#mw-indicator-good-star').length) {
		 $('#mw-content-text').prepend('<div style="border:1px solid red;">Redirectify should not be used to redirect a Good article or a featured article. '
		 +'Seek consensus on the article talk page if you plan to redirect this page.</div>');
		 return;
	}
    if( mw.config.get( 'wgTitle' ) === 'Main Page' ) {
        console.log('huh? wut? Why?')
        return;
    }
    mw.loader.using( [ 'mediawiki.widgets', 'oojs-ui-core', 'oojs-ui-widgets', 'ext.gadget.morebits' ], function() {
        $('.redirectify-ui').remove();
        var api = new mw.Api();
        //Portion copied from [[User:EnterpriseyBot/AFCHRS.js]] starts
        var Rcat = [{
            label: 'R from related topic',
            data: 'R from related topic'
        },
        {
            label: 'R to related topic',
            data: 'R to related topic'
        },
        {
            label: 'R from alternative language',
            data: 'R from alternative language'
        }, {
            label: 'R from alternative name',
            data: 'R from alternative name'
        }, {
            label: 'R from modification',
            data: 'R from modification'
        }, {
            label: 'R to section',
            data: 'R to section'
        }, {
            label: 'R from diacritic',
            data: 'R from diacritic'
        }, {
            label: 'R to diacritic',
            data: 'R to diacritic'
        }, {
            label: 'R from acronym',
            data: 'R from acronym'
        }, {
            label: 'R from initialism',
            data: 'R from initialism'
        }, {
            label: 'R from CamelCase',
            data: 'R from CamelCase'
        }, {
            label: 'R from miscapitalisation',
            data: 'R from miscapitalisation'
        }, {
            label: 'R from other capitalisation',
            data: 'R from other capitalisation'
        }, {
            label: 'R from modification',
            data: 'R from modification'
        }, {
            label: 'R from plural',
            data: 'R from plural'
        }, {
            label: 'R from adjective',
            data: 'R from adjective'
        }, {
            label: 'R from adverb',
            data: 'R from adverb'
        }, {
            label: 'R from common noun',
            data: 'R from common noun'
        }, {
            label: 'R from gerund',
            data: 'R from gerund'
        }, {
            label: 'R from proper noun',
            data: 'R from proper noun'
        }, {
            label: 'R from verb',
            data: 'R from verb'
        }, {
            label: 'R from alternative spelling',
            data: 'R from alternative spelling'
        }, {
            label: 'R from misspelling',
            data: 'R from misspelling'
        }, {
            label: 'R from American English',
            data: 'R from American English'
        }, {
            label: 'R from British English',
            data: 'R from British English'
        }, {
            label: 'R from ASCII-only',
            data: 'R from ASCII-only'
        }, {
            label: 'R from diacritic',
            data: 'R from diacritic'
        }, {
            label: 'R from ligature',
            data: 'R from ligature'
        }, {
            label: 'R from stylization',
            data: 'R from stylization'
        }, {
            label: 'R from alternative transliteration',
            data: 'R from alternative transliteration'
        }, {
            label: 'R from Wade–Giles romanization',
            data: 'R from Wade–Giles romanization'
        }, {
            label: 'From alternative names, general',
            data: 'From alternative names, general',
            disabled: true
        }, {
            label: 'R from alternative language',
            data: 'R from alternative language'
        }, {
            label: 'R from alternative name',
            data: 'R from alternative name'
        }, {
            label: 'R from former name',
            data: 'R from former name'
        }, {
            label: 'R from historic name',
            data: 'R from historic name'
        }, {
            label: 'R from incomplete name',
            data: 'R from incomplete name'
        }, {
            label: 'R from incorrect name',
            data: 'R from incorrect name'
        }, {
            label: 'R from letter–word combination',
            data: 'R from letter–word combination'
        }, {
            label: 'R from long name',
            data: 'R from long name'
        }, {
            label: 'R from portmanteau',
            data: 'R from portmanteau'
        }, {
            label: 'R from predecessor company name',
            data: 'R from predecessor company name'
        }, {
            label: 'R from short name',
            data: 'R from short name'
        }, {
            label: 'R from sort name',
            data: 'R from sort name'
        }, {
            label: 'R from less specific name',
            data: 'R from less specific name'
        }, {
            label: 'R from more specific name',
            data: 'R from more specific name'
        }, {
            label: 'R from antonym',
            data: 'R from antonym'
        }, {
            label: 'R from eponym',
            data: 'R from eponym'
        }, {
            label: 'R from synonym',
            data: 'R from synonym'
        }, {
            label: 'R from Roman numerals',
            data: 'R from Roman numerals'
        }, {
            label: 'From alternative names, geography',
            data: 'From alternative names, geography',
            disabled: true
        }, {
            label: 'R from Canadian settlement name',
            data: 'R from Canadian settlement name'
        }, {
            label: 'R from name and country',
            data: 'R from name and country'
        }, {
            label: 'R from city and state',
            data: 'R from city and state'
        }, {
            label: 'R from city and province',
            data: 'R from city and province'
        }, {
            label: 'R from more specific geographic name',
            data: 'R from more specific geographic name'
        }, {
            label: 'R from postal abbreviation',
            data: 'R from postal abbreviation'
        }, {
            label: 'R from postal code',
            data: 'R from postal code'
        }, {
            label: 'R from US postal abbreviation',
            data: 'R from US postal abbreviation'
        }, {
            label: 'From alternative names, organisms',
            data: 'From alternative names, organisms',
            disabled: true
        }, {
            label: 'R from scientific abbreviation',
            data: 'R from scientific abbreviation'
        }, {
            label: 'R from scientific name',
            data: 'R from scientific name'
        }, {
            label: 'R from alternative scientific name',
            data: 'R from alternative scientific name'
        }, {
            label: 'R from monotypic taxon',
            data: 'R from monotypic taxon'
        }, {
            label: 'From alternative names, people',
            data: 'From alternative names, people',
            disabled: true
        }, {
            label: 'R from birth name',
            data: 'R from birth name'
        }, {
            label: 'R from given name',
            data: 'R from given name'
        }, {
            label: 'R from married name',
            data: 'R from married name'
        }, {
            label: 'R from name with title',
            data: 'R from name with title'
        }, {
            label: 'R from non-neutral name',
            data: 'R from non-neutral name'
        }, {
            label: 'R from personal name',
            data: 'R from personal name'
        }, {
            label: 'R from pseudonym',
            data: 'R from pseudonym'
        }, {
            label: 'R from relative',
            data: 'R from relative'
        }, {
            label: 'R from spouse',
            data: 'R from spouse'
        }, {
            label: 'R from surname',
            data: 'R from surname'
        }, {
            label: 'R from Bluebook abbreviation',
            data: 'R from Bluebook abbreviation'
        }, {
            label: 'R from brand name',
            data: 'R from brand name'
        }, {
            label: 'R from drug trade name',
            data: 'R from drug trade name'
        }, {
            label: 'R from file name',
            data: 'R from file name'
        }, {
            label: 'R from Java package name',
            data: 'R from Java package name'
        }, {
            label: 'R from MathSciNet abbreviation',
            data: 'R from MathSciNet abbreviation'
        }, {
            label: 'R from molecular formula',
            data: 'R from molecular formula'
        }, {
            label: 'R from NLM abbreviation',
            data: 'R from NLM abbreviation'
        }, {
            label: 'R from product name',
            data: 'R from product name'
        }, {
            label: 'R from slogan',
            data: 'R from slogan'
        }, {
            label: 'R from symbol',
            data: 'R from symbol'
        }, {
            label: 'R from systematic abbreviations',
            data: 'R from systematic abbreviations'
        }, {
            label: 'R from technical name',
            data: 'R from technical name'
        }, {
            label: 'R from trademark',
            data: 'R from trademark'
        }, {
            label: 'R from file metadata link',
            data: 'R from file metadata link'
        }, {
            label: 'R mentioned in hatnote',
            data: 'R mentioned in hatnote'
        }, {
            label: 'R from shortcut',
            data: 'R from shortcut'
        }, {
            label: 'R from template shortcut',
            data: 'R from template shortcut'
        }, {
            label: 'From disambiguations',
            data: 'From disambiguations',
            disabled: true
        }, {
            label: 'R from ambiguous term',
            data: 'R from ambiguous term'
        }, {
            label: 'R from incomplete disambiguation',
            data: 'R from incomplete disambiguation'
        }, {
            label: 'R from incorrect disambiguation',
            data: 'R from incorrect disambiguation'
        }, {
            label: 'R from other disambiguation',
            data: 'R from other disambiguation'
        }, {
            label: 'R from predictable disambiguation',
            data: 'R from predictable disambiguation'
        }, {
            label: 'R from unnecessary disambiguation',
            data: 'R from unnecessary disambiguation'
        }, {
            label: 'From mergers, duplicates, and moves',
            data: 'From mergers, duplicates, and moves',
            disabled: true
        }, {
            label: 'R from duplicated article',
            data: 'R from duplicated article'
        }, {
            label: 'R with history',
            data: 'R with history'
        }, {
            label: 'R from merge',
            data: 'R from merge'
        }, {
            label: 'R from move',
            data: 'R from move'
        }, {
            label: 'R with old history',
            data: 'R with old history'
        }, {
            label: 'R from fictional character',
            data: 'R from fictional character'
        }, {
            label: 'R from fictional element',
            data: 'R from fictional element'
        }, {
            label: 'R from fictional location',
            data: 'R from fictional location'
        }, {
            label: 'From related info',
            data: 'From related info',
            disabled: true
        }, {
            label: 'R from album',
            data: 'R from album'
        }, {
            label: 'R from animal',
            data: 'R from animal'
        }, {
            label: 'R from book',
            data: 'R from book'
        }, {
            label: 'R from catchphrase',
            data: 'R from catchphrase'
        }, {
            label: 'R from domain name',
            data: 'R from domain name'
        }, {
            label: 'R from top-level domain',
            data: 'R from top-level domain'
        }, {
            label: 'R from film',
            data: 'R from film'
        }, {
            label: 'R from gender',
            data: 'R from gender'
        }, {
            label: 'R from legislation',
            data: 'R from legislation'
        }, {
            label: 'R from list topic',
            data: 'R from list topic'
        }, {
            label: 'R from member',
            data: 'R from member'
        }, {
            label: 'R from person',
            data: 'R from person'
        }, {
            label: 'R from phrase',
            data: 'R from phrase'
        }, {
            label: 'R from quotation',
            data: 'R from quotation'
        }, {
            label: 'R from related word',
            data: 'R from related word'
        }, {
            label: 'R from school',
            data: 'R from school'
        }, {
            label: 'R from song',
            data: 'R from song'
        }, {
            label: 'R from subtopic',
            data: 'R from subtopic'
        }, {
            label: 'R from team',
            data: 'R from team'
        }, {
            label: 'R from work',
            data: 'R from work'
        }, {
            label: 'R from writer',
            data: 'R from writer'
        }, {
            label: 'R from Unicode',
            data: 'R from Unicode'
        }, {
            label: 'R to acronym',
            data: 'R to acronym'
        }, {
            label: 'R to initialism',
            data: 'R to initialism'
        }, {
            label: 'R to ASCII-only title',
            data: 'R to ASCII-only title'
        }, {
            label: 'R to diacritic',
            data: 'R to diacritic'
        }, {
            label: 'R to ligature',
            data: 'R to ligature'
        }, {
            label: 'R to plural',
            data: 'R to plural'
        }, {
            label: 'To alternative names',
            data: 'To alternative names',
            disabled: true
        }, {
            label: 'R to former name',
            data: 'R to former name'
        }, {
            label: 'R to historic name',
            data: 'R to historic name'
        }, {
            label: 'R to joint biography',
            data: 'R to joint biography'
        }, {
            label: 'R to name with title',
            data: 'R to name with title'
        }, {
            label: 'R to monotypic taxon',
            data: 'R to scientific name'
        }, {
            label: 'R to scientific name',
            data: 'R to scientific name'
        }, {
            label: 'R to systematic name',
            data: 'R to systematic name'
        }, {
            label: 'R to technical name',
            data: 'R to technical name'
        }, {
            label: 'To – navigation and disambiguation',
            data: 'To – navigation and disambiguation',
            disabled: true
        }, {
            label: 'R to anchor',
            data: 'R to anchor'
        }, {
            label: 'R to anthroponymy page',
            data: 'R to anthroponymy page'
        }, {
            label: 'R to disambiguation page',
            data: 'R to disambiguation page'
        }, {
            label: 'R to list entry',
            data: 'R to list entry'
        }, {
            label: 'R to section',
            data: 'R to section'
        }, {
            label: 'To miscellaneous',
            data: 'To miscellaneous',
            disabled: true
        }, {
            label: 'R to decade',
            data: 'R to decade'
        }, {
            label: 'R to related topic',
            data: 'R to related topic'
        }, {
            label: 'R to subpage',
            data: 'R to subpage'
        }, {
            label: 'R to subtopic',
            data: 'R to subtopic'
        }, {
            label: 'R to TV episode list entry',
            data: 'R to TV episode list entry'
        } ];
        function generateSelect(title, options, onchange) {
            const multiselect = new OO.ui.MenuTagMultiselectWidget( {
                inputPosition: 'outline',
                allowArbitrary: true,
                verticalPosition: 'below',
                title,
                options: options
            });
            return multiselect;
        }
        //Section copied ends here
        var morebits = new Morebits.wiki.page(mw.config.get('wgPageName'));
        var wikitext = '#REDIRECT [[$1]]\n{{Redirect category shell|\n$2\n}}';
        var summaryredirect = 'Redirecting page to [[$1]]';
        var summaryalert = 'Notification of a page being redirected' + Redirectify_ending;
        var title = (mw.config.get('wgPageName')).replace('_', ' ');
        var messagetouser = window.messagetouser || '==Redirecting page: [[' + title + ']]==\nA page you created, [[' + title + ']], does not seem to have [[WP:SOURCE|enough reliable third party sources]] to merit [[WP:N|inclusion in the encyclopedia]] in itself. It has been [[WP:REDIRECT|redirected]] to $1 which is related to the subject of the article. ~~~~';
        var titleinput = new mw.widgets.TitleInputWidget({
            required: true
        });
        $('#mw-content-text').prepend('<div class="redirectify-ui" style="padding:1em; background:#f2f2f2;"><h3>Redirectify</h3><div class="redirectify"><label>Target :</label></div><div class="r-action-ui"></div><div id="r-error" style="width:100%; color:red;"></div>');
        var $redirectify = $('.r-action-ui');
        if( $( '.redirectText' ).length ) {
        	titleinput.setValue( $( '.redirectText a' )[0].innerText );
        }
        $redirectify.append(titleinput.$element);
        const redirectifyMultiselect = generateSelect('r-rcat', Rcat);
        $redirectify.append('<br><label for="r-rcat">Redirect categorization : </label>\n<br>' );
        $redirectify.append(redirectifyMultiselect.$element);
        $redirectify.append('<div><br><label for="r-summary">Summary of action : </label><input type="text" id="r-summary" required></input></div><div class="r-message-element"></div>');
        const $redirectifyMsgElem = $( '.r-message-element' )
        const userMsg = new OO.ui.MultilineTextInputWidget( {
            autosize: true,
            value: messagetouser
        } );
        morebits.lookupCreation(function() {
        	if ( $( '.redirectMsg' ).length ) return;
            $redirectifyMsgElem.append('<br><label for="r-message">Message : (Remove current text to prevent message for being sent)</label>\n');
            $redirectifyMsgElem.append(userMsg.$element);
            $redirectifyMsgElem.append('<span style="font-size: 0.9em;"><b>Note :</b>$1 denotes target page</span>');
        });
        $('.r-action-ui').append('<button class="mw-ui-progressive mw-ui-button r-submit">Redirect</button>'
        +'&nbsp;<button class="mw-ui-button mw-ui-quiet mw-ui-destructive r-cancel" style="background:none; border:0px solid white">Cancel</button>');
        $('.r-cancel').click(function(){
        $('.redirectify-ui').remove();
        });
        $('.r-submit').click(function(e) {
            e.preventDefault();
            var reason = ($('#r-summary').val()) ? (': ' + $('#r-summary').val() ) : '';
            var target = titleinput.getQueryValue();
            console.log(target);
            if (target) {
                api.get({
                    action: "query",
                    titles: target,
                }).then(function(ret) {
                    $.each(ret.query.pages, function() {
                        if (this.missing !== "") {
                            wikitext = wikitext.replace('$1', target);
                            const redirectTags = redirectifyMultiselect.getValue();
                            let redirectTagText = '';
                            for (let i = 0; i < redirectTags.length;i++) {
                                redirectTagText += `{{${redirectTags[i]}}}`;
                            }
                            if (redirectTagText !== '') {
                                wikitext = wikitext.replace('$2', redirectTagText);
                            } else {
                                wikitext = wikitext.replace('{{Redirect category shell|\n$2\n}}', '');
                            }
                            summaryredirect = summaryredirect.replace('$1', target);
                            messagetouser = ($('#r-message').val() || '').replace('$1', target);
                            $redirectify.empty();
                            api.postWithToken('csrf', {
                                action: 'edit',
                                title: mw.config.get('wgPageName'),
                                text: wikitext,
                                summary: summaryredirect + reason + Redirectify_ending
                            }).done(function(response) {
                                if (response.edit.result === 'Success')
                                    $redirectify.append('<li style="color:green;">Redirected page !</li>');
                                console.log(response);
                            }).fail(function(status) {
                                $redirectify.append('<span style="color:red;">Could not redirect page !</span>');
                                console.log(status);
                            });
                            if (messagetouser !== '') {
                                morebits.lookupCreation(function() {
                                	if ( $( '.redirectMsg' ).length ) return;
                                    var guy = morebits.getCreator();
                                    var guyedit = new Morebits.wiki.page('User talk:' + guy);
                                    guyedit.setEditSummary(summaryalert);
                                    guyedit.setAppendText('\n' + messagetouser);
                                    guyedit.append(function() {
                                        $redirectify.append('<li style="color:green;">Messaged user !</li>');
                                    }, function() {
                                        $redirectify.append('<li style="color:red;">Could not message user !</li>');
                                    });
                                });
                            }
                            $('#r-error').html("");
                            $('.r-action-ui').html('<button class="mw-ui-button r-reload">Reload</button>');
                            $('.r-reload').click(function() {
                                location.href = '/wiki/' + mw.config.get('wgPageName') + '?redirect=no';
                            });
                        } else {
                            createerror();
                        }
                    });
                }, function(error) {
                    console.error(error);
                    createerror();
                });
            } else {
                createerror();
            }
        });
    });
    function createerror(){
    	$('#r-error').html('The page specified in the target parameter does not exist. Redirecting this page to the target will result in the creation of a broken redirect.');
    }
}
$.when(mw.loader.using('mediawiki.util'), $.ready).then(function() {
	if( mw.config.get( "wgNamespaceNumber" ) < 0 ) return;
	if (mw.config.get('wgUserGroups').indexOf('extendedconfirmed') === -1 ) {
        console.log("[Redirectify] User isn't extendedconfirmed, and so shouldn't use this script.");
        return;
    }
    var portlet = mw.util.addPortletLink('p-cactions', 'javascript:void(0)', 'Redirect page', 'ca-redirectify', 'Make page a redirect', 'r', '');
    $('#ca-redirectify').click(function() {
        loadredirectify();
    });
});
//</nowiki>