MediaWiki:Gadget-QualityRibbon.js

Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Opera : Allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache.
/*
 * Author: w:fr:Phe
 *
 * Allow to get a quality ribbon to Index: pages
 *
 * FIXME: rewrite using $ajax or mw.api call
 */

/**
 * Setup the QualityRibbon object:
 */
if ( window.QualityRibbon === undefined ) {
	window.QualityRibbon = {};
}

/**
 * The global QualityRibbon object
 */
( function ( mw, $, qr ) {
'use strict';

// FIXME: script need to be rewrite to use $.getJSON() or check if mw.api doesn't provide something better
qr.do_sync_request = function (request, type, datas) {
        var http_request = new XMLHttpRequest();
        var url = mw.util.wikiScript("api") + request;
        http_request.open(type, url, false);
        if (datas) {
            http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        }
        http_request.send(datas);
        return http_request;
};

qr.do_json_request = function (request) {
        var http_request = qr.do_sync_request(request + "&format=json", "GET", null);
        return JSON.parse(http_request.responseText);
};
 
qr.cumulate_result = function (data, result) {
        if (result === null) {
            result = { "q0" : 0, "q1" : 0, "q2" : 0, "q3" : 0, "q4" : 0 };
        }
        for (var key in data.query.pages) {
            // Shouldn't needed but sometimes server return no proofread status for an
            // existing page, this occur on newly created page.
            if (data.query.pages[key].proofread) {
                result['q' + data.query.pages[key].proofread.quality] += 1;
            }
        }
        return result;
};

qr.count_links = function (data) {
        for (var key in data.query.pages) {
            return data.query.pages[key].links.length;
        }
        return 0;
};

qr.get_page_count = function () {
        var request = "?action=query&prop=links&pllimit=500&plnamespace=104&titles=" + encodeURIComponent(mw.config.get("wgPageName"));
        var data = qr.do_json_request(request);
        var result = qr.count_links(data);
        while (data["continue"] && data["continue"].plcontinue) {
            data = qr.do_json_request(request + "&plcontinue=" + data["continue"].plcontinue);
            result += qr.count_links(data);
        }
        return result;
};

qr.open_dialog = function (result, total) {
        if (!$('#dialog-quality').length) {
            $('#content').append('<div id="dialog-quality" title="Ruban de qualité"></div>');
            $('#dialog-quality').html('<div id="ui-data-quality"></div>');

        }

        var left = total - (result.q0 + result.q2 + result.q3 + result.q4);
        $("#ui-data-quality").text("{{rb|q0=" + result.q0 + "|q1=" + result.q1 + "|q2=" + result.q2 + "|q3=" + result.q3 + "|q4=" + result.q4 + "|total=" + total + "}} (reste : " + left + ")");

        var buttons = [
            {
                text: "Ok",
                click: function() { $("#dialog-quality").dialog("close"); }
            }
        ];

        $("#dialog-quality").dialog( {
            button : buttons,
            minWidth : 480,
            create: function(event, ui) {
                $(event.target).parent().css( { position : 'fixed' } );
            },
        });
};

qr.exec = function () {
        var request = "?action=query&generator=allpages&gapnamespace=104&gapprefix=" + mw.config.get("wgTitle") + "&gaplimit=500&prop=proofread&continue=";
        var data = qr.do_json_request(request);
        var result = qr.cumulate_result(data, null);
        while (data["continue"] && data["continue"].gapcontinue) {
            data = qr.do_json_request(request + "&gapfrom=" + data["continue"].gapcontinue);
            result = qr.cumulate_result(data, result);
        }

        var total = qr.get_page_count();

        qr.open_dialog(result, total);
};

}( mediaWiki, jQuery, window.QualityRibbon ) );

$(function() {
    if (mw.config.get('wgCanonicalNamespace') === 'Index') {
    	mw.loader.using('mediawiki.util', function() {
        mw.util.addPortletLink(
            "p-cactions",
            null,
            "Ruban qualité",
            "ca-quality-ribbon",
            "Extraire le ruban de qualité"
        );

        $("li#ca-quality-ribbon").click(function() {
            QualityRibbon.exec();
        });
    	});
    }
});