Prijeđi na sadržaj

MediaWiki:Gadget-odlinkaj.js

Izvor: Wikipedija

Napomena: Nakon objave možda ćete trebati očistiti međuspremnik svog preglednika kako biste vidjeli promjene.

  • Firefox / Safari: držite Shift i pritisnite Reload, ili pritisnite bilo Ctrl-F5 ili Ctrl-R (⌘-R na Macu)
  • Google Chrome: pritisnite Ctrl-Shift-R (⌘-Shift-R na Macu)
  • Internet Explorer / Edge: držite Ctrl i kliknite Refresh, ili pritisnite Ctrl-F5
  • Opera: pritisnite Ctrl-F5.
// If TwinkleConfig aint exist.
if( typeof( TwinkleConfig ) == 'undefined' ) {
    TwinkleConfig = {};
}

/**
 TwinkleConfig.summaryAd (string)
 If ad should be added or not to summary, default [[WP:TWINKLE|TWINKLE]]
 */
if( typeof TwinkleConfig.summaryAd == 'undefined' ) {
    TwinkleConfig.summaryAd = "";
}

function getChecked2( nodelist ) {
    if( !( nodelist instanceof NodeList ) ) {
        return nodelist.checked ? [ nodelist.value ] : [];
    }
    var result = [];
    for(var i  = 0; i < nodelist.length; ++i ) {
        if( nodelist[i].checked ) {
            result.push( nodelist[i].value );
        }
    }
    return result;
}

function twinkleunlink() {
    if( mw.config.get('wgNamespaceNumber') < 0 ) {
        return;
    }
    mw.util.addPortletLink( 'p-cactions', "javascript:twinkleunlink.callback()", "odlinkaj", "tw-unlink", "Ukloni što vodi ovamo", "");
}
$.when($.ready,mw.loader.using('mediawiki.util')).then(twinkleunlink);

twinkleunlink.callback = function twinklesunlinkCallback() {
    var Window = new SimpleWindow( 800, 400 );
    Window.setTitle( "Ukloni što vodi ovamo" );

    var form = new QuickForm( twinkleunlink.callback.evaluate );
    form.append( {
            type: 'textarea',
            name: 'reason',
            label: 'Razlog: '
        } );

    if(mw.config.get('wgNamespaceNumber') == Namespace.IMAGE) {
        var query = {
            'action': 'query',
            'list': [ 'backlinks', 'imageusage' ],
            'bltitle': mw.config.get('wgPageName'),
            'iutitle': mw.config.get('wgPageName'),
            'bllimit': userIsInGroup( 'sysop' ) ? 5000 : 10, // 500 is max for normal users, 5000 for bots and sysops
            'iulimit': userIsInGroup( 'sysop' ) ? 5000 : 10, // 500 is max for normal users, 5000 for bots and sysops
            'blnamespace': [0, 100, 102] // Main namespace and portal namespace only, keep on talk pages.
        };
    } else {
        var query = {
            'action': 'query',
            'list': 'backlinks',
            'bltitle': mw.config.get('wgPageName'),
            'bllimit': userIsInGroup( 'sysop' ) ? 5000 : 10, // 500 is max for normal users, 5000 for bots and sysops
            'blnamespace': [0, 100, 102] // Main namespace and portal namespace only, keep on talk pages.
        };
    }
    var wikipedia_api = new Wikipedia.api( 'Grabbing backlinks', query, twinkleunlink.callbacks.display.backlinks );
    wikipedia_api.params = { form:form, Window:Window, image: mw.config.get('wgNamespaceNumber') == Namespace.IMAGE };
    wikipedia_api.post();

    var root = document.createElement( 'div' );
    Status.init( root );
    Window.setContent( root );
    Window.display();
}

twinkleunlink.callback.evaluate = function twinkleunlinkCallbackEvaluate(event) {
    mw.config.get('wgPageName') = mw.config.get('wgPageName').replace( /_/g, ' ' ); // for queen/king/whatever and country!

    var reason = event.target.reason.value;
    if( event.target.backlinks ) {
        var backlinks = getChecked( event.target.backlinks );
    }
    if( event.target.imageusage ) {
        var imageusage = getChecked( event.target.imageusage );
    }
    Status.init( event.target );

    if( imageusage ) {
        var statusIndicator = new Status('Uklanjanje poveznica na sliku', '0%');
        var total = imageusage.length * 2;

        var onsuccess = function( self ) {
            var obj = self.params.obj;
            var total = self.params.total;
            var now = parseInt( 100 * ++(self.params.current)/total ) + '%';
            obj.update( now );
            self.statelem.unlink();
            if( self.params.current >= total ) {
                obj.info( now + ' (dovršeno)' );
                Wikipedia.removeCheckpoint();
            }
        }
        var onloaded = onsuccess;

        var onloading = function( self ) {}

        Wikipedia.addCheckpoint();

        if( imageusage.length == 0 ) {
            statusIndicator.info( '100% (dovršeno)' );
            Wikipedia.removeCheckpoint();
            return;
        }
        var params = { reason: reason, obj: statusIndicator, current: 0, total: total };
        for ( var i = 0; i < imageusage.length; ++i ) {
            var title = imageusage[i];
            var query = {
                'title': title,
                'action': 'submit'
            }
            var wikipedia_wiki = new Wikipedia.wiki( "Uklanjanje poveznica na " + title, query, twinkleunlink.callbacks.unlinkImageInstances );
            wikipedia_wiki.params = clone( params );
            wikipedia_wiki.params.title = title;
            wikipedia_wiki.onloading = onloading;
            wikipedia_wiki.onloaded = onloaded;
            wikipedia_wiki.onsuccess = onsuccess;
            wikipedia_wiki.get();
        }
    }

    if( backlinks ) {
        var statusIndicator = new Status('Uklanjanje poveznica na sliku', '0%');
        var total = backlinks.length * 2;

        var onsuccess = function( self ) {
            var obj = self.params.obj;
            var total = self.params.total;
            var now = parseInt( 100 * ++(self.params.current)/total ) + '%';
            obj.update( now );
            self.statelem.unlink();
            if( self.params.current >= total ) {
                obj.info( now + ' (dovršeno)' );
                Wikipedia.removeCheckpoint();
            }
        }
        var onloaded = onsuccess;

        var onloading = function( self ) {}

        Wikipedia.addCheckpoint();

        if( backlinks.length == 0 ) {
            statusIndicator.info( '100% (dovršeno)' );
            Wikipedia.removeCheckpoint();
            return;
        }
        var params = { reason: reason, obj: statusIndicator, current: 0, total: total };
        for ( var i = 0; i < backlinks.length; ++i ) {
            var title = backlinks[i];
            var query = {
                'title': title,
                'action': 'submit'
            }
            var wikipedia_wiki = new Wikipedia.wiki( "Uklanjanje poveznica na " + title, query, twinkleunlink.callbacks.unlinkBacklinks );
            wikipedia_wiki.params = clone( params );
            wikipedia_wiki.params.title = title;
            wikipedia_wiki.onloading = onloading;
            wikipedia_wiki.onloaded = onloaded;
            wikipedia_wiki.onsuccess = onsuccess;
            wikipedia_wiki.get();
        }
    }
}
twinkleunlink.callbacks = {
    display: {
        backlinks: function( self ) {
            var xmlDoc = self.responseXML;
            if( self.params.image ) {
                var imageusage = xmlDoc.evaluate('//query/imageusage/iu/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
                var list = [];
                for ( var i = 0; i < imageusage.snapshotLength; ++i ) {
                    var title = imageusage.snapshotItem(i).value;
                    list.push( { label: title, value: title, checked: true } );
                }
                self.params.form.append( { type:'header', label: 'Što vodi ovamo:' } );
                self.params.form.append( {
                        type: 'checkbox',
                        name: 'imageusage',
                        list: list
                    }
                );
            }

            var backlinks = xmlDoc.evaluate('//query/backlinks/bl/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
            if( backlinks.snapshotLength > 0 ) {
                var list = [];
                for ( var i = 0; i < backlinks.snapshotLength; ++i ) {
                    var title = backlinks.snapshotItem(i).value;
                    list.push( { label: title, value: title, checked: true } );
                }
                self.params.form.append( { type:'header', label: 'Što vodi ovamo:' } );
                self.params.form.append( {
                        type: 'checkbox',
                        name: 'backlinks',
                        list: list
                    }
                );
            }

            self.params.form.append( { type:'submit' } );

            var result = self.params.form.render();
            self.params.Window.setContent( result );
        }
    },
    unlinkBacklinks: function( self ) {
        var form = self.responseXML.getElementById('editform');
        var text = form.wpTextbox1.value;
        var old_text = text;
        var wikiPage = new Mediawiki.Page( text );
        wikiPage.removeLink( mw.config.get('wgPageName') );

        text = wikiPage.getText();
        if( text == old_text ) {
            // Nothing to do, return
            self.onsuccess( self );
            Wikipedia.actionCompleted( self );
            return;
        }
        var postData = {
            'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
            'wpWatchthis': undefined,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSummary': 'Uklanjanje poveznica na ' + mw.config.get('wgTitle') + " razlog \"" + self.params.reason.toUpperCaseFirstChar() + "\" " + TwinkleConfig.deletionSummaryAd,
            'wpTextbox1': text
        };
        self.post( postData );
    },
    unlinkImageInstances: function( self ) {
        var form = self.responseXML.getElementById('editform');
        var text = form.wpTextbox1.value;
        var old_text = text;
        var wikiPage = new Mediawiki.Page( text );
        wikiPage.commentOutImage( mw.config.get('wgTitle'), 'Zakomentirano' );

        text = wikiPage.getText();
        if( text == old_text ) {
            // Nothing to do, return
            self.onsuccess( self );
            Wikipedia.actionCompleted( self );
            return;
        }
        var postData = {
            'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
            'wpWatchthis': undefined,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSummary': 'Uklanjanje poveznica na sliku ' + mw.config.get('wgTitle') + " razlog \"" + self.params.reason.toUpperCaseFirstChar() + "\" " + TwinkleConfig.deletionSummaryAd,
            'wpTextbox1': text
        };
        self.post( postData );
    }
}