User:Technical 13/Scripts/OrphanStatus.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.
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get( 'wgAction' ) === 'view' &&
    $.inArray( 'All orphaned articles', mw.config.get( 'wgCategories' ) ) >= 0 ) {
    function deOrphan( backLinks ){
        $( '.loadinganimation' ).html( 'Article deOrphaning in progress...' );
        var deOrphanerRequest = {
            action: 'query',
            titles: mw.config.get( 'wgPageName' ),
            prop: 'revisions',
            intoken: 'edit',
            rvprop: 'content',
            indexpageids: 1,
            dataType: 'xml',
            format: 'xml'
        };
        $.get( mw.config.get( 'wgScriptPath' ) + '/api.php', deOrphanerRequest, function( deOrphanerResponse ) {
            var deOrphanerContent = $( deOrphanerResponse ).find( 'rev' ).text();
            var oldMIparameter = false;
            if ( deOrphanerContent.search( /\| *Orphan *=[\d\w\s\n]*(.*?\}\})/gi ) != -1 ) { oldMIparameter = true; }
            deOrphanerContent = deOrphanerContent
                .replace( /\{\{Orphan(.*?)\}\}[\|\n]/gi, '' )// Parse out orphan template (not) in multiple issues
                .replace( /\| *Orphan *=[\d\w\s\n]*(.*?\}\})/gi, '$1' );// Parse out old style multiple issues orphan parameter
            var deOrphanerSubmit = {
                action: 'edit',
                pageid: mw.config.get( 'wgArticleId' ),
                text: deOrphanerContent,
                summary: 'Article [[User:Technical_13/Scripts/OrphanStatus|deOrphaned]]!',
                token: mw.user.tokens.get( 'csrfToken' )
            };
            $.when(
                $.post( mw.config.get( 'wgScriptPath' ) + '/api.php', deOrphanerSubmit, function( deOrphanerSesponse ){ } )
            ).done( function() {
                var deOrphanedText = 'Article deOrphaned! <small>( ';
                if( oldMIparameter ){
                   deOrphanedText += '<b style="font-variant: small-caps;">Load</b> ';
                } else {
                   deOrphanedText += '<a href="#reLoad" onClick="location.reload();" style="font-weight: bold;">reload</a> | ';
                }
                deOrphanedText += '<a href="//en.wikipedia.org/w/index.php?title=' + encodeURIComponent( mw.config.get( 'wgTitle' ) ) + '&diff=cur&oldid=prev" style="font-weight: bold;">diff</a> )</small>';
                $( '.loadinganimation' ).html( deOrphanedText );
            } );
        } );
    }
    $( '.ambox-Orphan' ).css( 'display', 'inherit' );
    $( '#firstHeading' ).append( '&nbsp; <span class="loadinganimation" style="font-size: medium !important; color: #000 !important; font-family: sans-serif !important;">•   •&nbsp;&nbsp;•&nbsp;&nbsp;</span> ' );
    var loadingAnimation = window.setInterval( function() { (
        $( '.loadinganimation' ).html() == "•   •&nbsp;&nbsp;•&nbsp;&nbsp;" ?
        $( '.loadinganimation' ).html( '&nbsp;•   •&nbsp;&nbsp;•&nbsp;' ) : (
            $( '.loadinganimation' ).html() == "&nbsp;•   •&nbsp;&nbsp;•&nbsp;" ?
            $( '.loadinganimation' ).html( '&nbsp;&nbsp;•   •&nbsp;&nbsp;•' ) : (
                $( '.loadinganimation' ).html() == "&nbsp;&nbsp;•   •&nbsp;&nbsp;•" ?
                $( '.loadinganimation' ).html( '&nbsp;•&nbsp;&nbsp;•   •&nbsp; ') :
                $( '.loadinganimation' ).html( '•   •&nbsp;&nbsp;•&nbsp;&nbsp;' )
            )
        )
    ) }, 250);
    var requestBacklinks = {
        action: 'query',
        list: 'backlinks',
        format: 'json',
        blfilterredir: 'nonredirects',
        bllimit: 500,
        blnamespace: 0,
        bltitle: mw.config.get( 'wgTitle' )
    };
    $.get( mw.config.get( 'wgScriptPath' ) + '/api.php' , requestBacklinks, function( responseBacklinks ) {
        var backLinks = responseBacklinks.query.backlinks.length;
        switch ( backLinks ){
            case 0:
                var blStatement = 'This page is an <a href="//en.wikipedia.org/wiki/Wikipedia:Orphan" style="font-weight: bold;">orphan</a> as no <a href="//en.wikipedia.org/w/index.php?title=Special:WhatLinksHere/' + encodeURIComponent( mw.config.get( 'wgTitle' ) ) + '&namespace=0&hideredirs=1&hidetrans=1" style="font-weight: bold;">other articles</a> link to it.';
                break;
            case 1:
                var blStatement = 'There is <b>1 link to this page</b> from an <a href="//en.wikipedia.org/w/index.php?title=Special:WhatLinksHere/' + encodeURIComponent( mw.config.get( 'wgTitle' ) ) + '&namespace=0&hideredirs=1&hidetrans=1" style="font-weight: bold;">other article</a>. <small>(<a href="#deOrphan" onClick="deOrphan(' + backLinks + ');" style="font-weight: bold;">deOrphan</a>)</small>';
                break;
            case 2:
                var blStatement = 'There are <b>2 links to this page</b> from <a href="//en.wikipedia.org/w/index.php?title=Special:WhatLinksHere/' + encodeURIComponent( mw.config.get( 'wgTitle' ) ) + '&namespace=0&hideredirs=1&hidetrans=1" style="font-weight: bold;">other articles</a>. <small>(<a href="#deOrphan" onClick="deOrphan(' + backLinks + ');" style="font-weight: bold;">deOrphan</a>)</small>';
                break;
            default:
                var blStatement = 'This page is not an <a href="//en.wikipedia.org/wiki/Wikipedia:Orphan" style="font-weight: bold;">orphan</a> as it meets the "Rule of Three" by having three or more links from <a href="//en.wikipedia.org/w/index.php?title=Special:WhatLinksHere/' + encodeURIComponent( mw.config.get( 'wgTitle' ) ) + '&namespace=0&hideredirs=1&hidetrans=1" style="font-weight: bold;">other articles</a>. <small>(<a href="#deOrphan" onClick="deOrphan(' + backLinks + ');" style="font-weight: bold;">deOrphan</a>)</small>';
//                setTimeout( function() { deOrphan( backLinks ); }, 2500 );
                break;
        }
        clearInterval( loadingAnimation );
        $( '.loadinganimation' ).html( blStatement );
    } );
}