MediaWiki:Gadget-C helper si.js

Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
// <nowiki>
C.si = {
    dialog: null,
    config: {
        'request-page': 'Wikipédia:Demande de suppression immédiate',
        'deletion-template': function (page, code, critere, extra) {
            var raison = code + ' - ' + critere + extra;
            if (raison.indexOf('=') !== -1) {
                raison = '1=' + raison;
            }
            return '{{Suppression Immédiate|' + raison + '|utilisateur=~'+'~~}}\n';
        },
        'modal-title': 'C helper - Choix du critère de suppression immédiate',
        'avert-label': 'Avertir le créateur de l\'article',
        'c-si-extra-class': 'c-si-extra',
        'c-si-radio-class': 'c-si-radio',
        'submit': 'Valider la requête',
        'criteria-general-title': 'Critères généraux',
        'criteria-article-title': 'Critères spécifiques aux articles',
        'criteria-redirect-title': 'Critères spécifiques aux redirections',
        'criteria-file-title': 'Critères spécifiques aux fichiers',
        'criteria-category-title': 'Critères spécifiques aux catégories',
        'criteria-user-title': 'Critères spécifiques aux pages utilisateurs',
        'criteria-template-title': 'Critères spécifiques aux modèles',
        'criteria-portal-title': 'Critères spécifiques aux portails',
        'notify-success': 'La demande de suppression immédiate a bien été transmise.',
        'notify-no-reason': 'Vous n\'avez sélectionné aucun critère de suppression.',
        'notify-not-a-page': 'Impossible de demander la suppression immédiate d\'une page inexistante.',
        'notify-protected': 'Impossible de demander automatiquement la suppression immédiate de cette page, celle-ci est protégée.',
        'request-title': function (page, code, critere, extra) {
            if (page.indexOf('=') !== -1) {
                page = '1=' + page;
            }
            return "{{a'|" + page + "}}";
        },
        'request-content': "* '''Motif''' : $2 - $3$4\n* '''Demandée''' par ~~"+"~~",
        'request-summary': 'Suppression immédiate demandée pour [[$1]] en raison du critère [[WP:CSI#$2|$2 ($3)]]$4',
    },
    criteria: {
        G: {
            G1: { text: 'Page manifestement aberrante', help: ''},
            G2: { text: '« Bac à sable »', help: ''},
            G3: { text: 'Vandalisme ou canular manifeste', help: ''},
            G4: { text: 'Recréation d\'une page supprimée par décision communautaire', help: '', extra: 'Lien vers le débat', extra_default: '[[Discussion:'+mw.config.get('wgTitle')+'/Admissibilité]]'},
            G5: { text: 'Page créée par un contributeur banni ou bloqué', help: '', extra: 'Nom du contributeur problématique', extra_default: ''},
            G6: { text: 'Suppression technique (dans le cadre d\'opérations de maintenance)', help: 'Cela englobe par exemple la suppression de pages d\'homonymies non utilisées, de renommages incontestables, de certaines catégories de maintenance obsolètes,...', extra: 'Type de maintenance', extra_default: ''},
            G7: { text: 'Suppression à la demande de l\'auteur', help: '', extra: '', extra_default: ''},
            G8: { text: 'Page liée à une page inexistante ou supprimée', help: '', extra: '', extra_default: ''},
            G10: { text: 'Page dont le seul but est de diffamer, menacer, intimider ou harceler leur sujet, ou une quelconque autre entité', help: '', extra: '', extra_default: ''},
            G11: { text: 'Publicité ou promotion manifeste', help: '', extra: '', extra_default: ''},
            G12: { text: 'Violation manifeste des droits d\'auteur', help: '', extra: 'Lien vers le document original', extra_default: ''},
        },
        A: {
            A1: { text: 'Article sans sujet clair', help: ''},
            A2: { text: 'Article en langue étrangère', help: ''},
            A3: { text: 'Article sans contenu', help: ''},
            A5: { text: 'Article transféré à un autre wiki', help: ''},
            A10: { text: 'Article récemment créé qui doublonne un article existant', help: '', extra: 'Lien vers l\'article antérieur', extra_default: ''},
            A11: { text: 'Article ne répondant pas aux critères d\'admissibilité', help: ''},
            A12: { text: 'Travail inédit manifeste', help: ''},
        },
        R: {
            R1: { text: 'Redirection inappropriée, peu pertinente, voire incongrue', help: ''},
            R2: { text: 'Redirection renvoyant de l\'espace encyclopédique vers un autre espace de nom', help: ''},
            R3: { text: 'Graphie improbable', help: ''},
        },
        F: {
            F1: { text: 'Fichier redondant', help: '', extra: 'Lien vers le fichier antérieur', extra_default: ''},
            F2: { text: 'Fichier image corrompu ou vide', help: ''},
            F3: { text: 'Licence inappropriée', help: ''},
            F4: { text: 'Pas d\'information sur la licence', help: ''},
            F5: { text: 'Image orpheline non libre de droit', help: ''},
            F6: { text: 'Motif justificatif absent, dans le cas d\'une utilisation non libre de droit', help: ''},
            F7: { text: 'Revendication injustifiée du fair use', help: ''},
            F8: { text: 'Image disponible à l\'identique dans Commons', help: '', extra: 'Lien vers le fichier sur Commons', extra_default: ''},
            F9: { text: 'Violation manifeste de copyright', help: '', extra: 'Lien vers le fichier source copié', extra_default: ''},
            F10: { text: 'Fichier inutile sans média', help: ''},
            F11: { text: 'Aucune preuve d\'autorisation', help: ''},
        },
        C: {
            C1: { text: 'Catégorie vide depuis au moins quatre jours', help: ''},
            C2: { text: 'Renommage ou fusion', help: ''},
            C7: { text: 'Renommage demandé par le créateur de la catégorie', help: ''},
        },
        U: {
            U1: { text: 'Demande de l\'utilisateur', help: ''},
            U2: { text: 'Utilisateur inexistant', help: ''},
        },
        T: {
            M2: { text: 'Modèle donnant une fausse image des règles', help: ''},
            M3: { text: 'Modèle sans intérêt ou doublonnant des modèles existants', help: ''},
        },
        P: {
            P1: { text: 'Portail qui serait supprimé s\'il s’agissait d\'un article', help: ''},
            P2: { text: 'Portail quasi-vide', help: ''},
        },
    },
    init: function () {
    },
    launch: function () {
        if (mw.config.get('wgArticleId') === 0) {
            mw.notify(C.si.config['notify-not-a-page'], {title:'C-helper', type:'error'});
            return;
        }
        if (mw.config.get('wgRestrictionEdit') == ["sysop"]) {
            mw.notify(C.si.config['notify-protected'], {title:'C-helper', type:'error'});
            return;
        }
        if (this.dialog === null) {
            this['build-dialog']();
        }
        this.dialog.dialog("open");
    },
    'build-dialog': function () {
        this.dialog = $('<div>', {title:C.si.config['modal-title']});
        var form = $('<form>');
        this.dialog.append(form);
        form.append($('<input>', {type:'checkbox', checked:'checked',id:'C-si-avert'})).append($('<label>', {"for":"C-si-avert"}).html(C.si.config['avert-label']));


        var title = [];
        var namespace = [];

        if ($("#redirectsub").length > 0) {
            title.push(this.config['criteria-redirect-title']);
            namespace.push(this.criteria.R);
        }

        switch(mw.config.get('wgNamespaceNumber')) {
            case 0:
                title.push(this.config['criteria-article-title']);
                namespace.push(this.criteria.A);
                break;
            case 6:
                title.push(this.config['criteria-file-title']);
                namespace.push(this.criteria.F);
                break;
            case 14:
                title.push(this.config['criteria-category-title']);
                namespace.push(this.criteria.C);
                break;
            case 2:
            case 3:
                title.push(this.config['criteria-user-title']);
                namespace.push(this.criteria.U);
                break;
            case 10:
                title.push(this.config['criteria-template-title']);
                namespace.push(this.criteria.T);
                break;
            case 100:
            case 101:
            case 102:
            case 103:
                title.push(this.config['criteria-portal-title']);
                namespace.push(this.criteria.P);
                break;
        }

        title.push(this.config['criteria-general-title']);
        namespace.push(this.criteria.G);

        for (var i = 0; i < namespace.length; ++i) {
            form.append($('<hr>'));
            form.append($('<h3>').text(title[i]));
            for (var code in namespace[i]) {
                form.append($('<input>', {type:'radio', id:'C-si-'+code, class:this.config['c-si-radio-class'], name:'C-si-criteria', explanation: namespace[i][code].text, code: code}))
                    .append($('<label>', {"for":'C-si-'+code}).text(code + ' : ' + namespace[i][code].text));
                if (namespace[i][code].help !== '') {
                    form.append(C.util.construct_help_icon(namespace[i][code].help));
                }
                form.append($('<br>'));
                if (namespace[i][code].hasOwnProperty('extra')) {
                    var extra_default = '';
                    if (namespace[i][code].hasOwnProperty('extra_default')) {
                        extra_default = namespace[i][code].extra_default;
                    }
                    form.append($('<span>', {id:'C-si-extra-'+code, class:this.config['c-si-extra-class']}).hide()
                        .append($('<label>', {"for":'C-si-extra-input-'+code}).html(namespace[i][code].extra))
                        .append("&nbsp;")
                        .append($('<input>', {type:'text', id:'C-si-extra-input-'+code, value:extra_default}))
                        .append($('<br>')));
                }
            }
        }

        this.dialog.dialog({
            autoOpen: false,
            height: 400,
            width: 600,
            modal: true,
            buttons: [
                {
                    text: C.si.config.submit,
                    click: function () {
                        C.si.dialog.dialog("close");
                        C.si.validate();
                    },
                },
            ],
            dialogClass: 'c-helper-dialog',
        });

        $('.'+this.config['c-si-radio-class']).change(function () {
            $('.'+C.si.config['c-si-extra-class']).hide();
            $('#C-si-extra-'+$(this).attr('code')).show();
        });
    },
    validate: function () {
        var selected = $('input[name=C-si-criteria]:checked');
        if (selected.length === 0) {
            mw.notify(C.si.config['notify-no-reason'], {title:'C-helper', type:'error'});
            return;
        }
        var page = mw.config.get('wgPageName').replace( /_/g, ' ');
        var code = selected.attr('code');
        var critere = C.si.criteria[ code[ 0 ] ][ code ].text;
        var extra = '';
        var $inputExtra = $('#C-si-extra-input-'+code);
        if ($inputExtra.length > 0) {
            if ($inputExtra.val() !== '') {
                extra = ' ('+$inputExtra.val()+')';
            }
        }
        C.util.safe_prepend(
            null,
            C.util.message(C.si.config['deletion-template'], page, code, critere, extra),
            C.util.message(C.si.config['request-summary'], page, code, critere, extra),
            function () {
                C.util.new_section(
                    C.si.config['request-page'],
                    C.util.message(C.si.config['request-title'], page, code, critere, extra),
                    C.util.message(C.si.config['request-content'], page, code, critere, extra),
                    C.util.message(C.si.config['request-summary'], page, code, critere, extra),
                    function () {
                        mw.notify(C.si.config['notify-success'], {title:'C-helper', type:'info'});
                        C.util.reload();
                    }
                );
            }
        );
    },
};

C.modules.si.callback = C.si;
// </nowiki>