Aller au contenu

Utilisateur:Alexisdepris/common.js

Une page de Wikipédia, l'encyclopédie libre.
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) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
//////////////

window.ResumeDeluxe_liens = [
	'orthographe',
	'typographie',
	'catégorisation',
	'wikification',
	'image',
	'mise en forme',
	'mise en page',
	'redirection',
	'relecture',
	'style',
	'revert',
	'réorganisation',
	'réponse',
	'maintenance',
	'correction de source avec paramètre incorrecte #moisdusourçage',
	'correction de source obselète #moisdusourçage',
	'#moisdusourçage',
	['homonymie', 'création homonymie'],
	['bandeau', 'ajout de bandeau'],
	'infobox',
	'références',
	'Miroir wikipédia ou encyclopédie collaborative',
	'Retrait des sources Fandom & Co (Discussion_Wikipédia:Observatoire_des_sources#Fandom_et_compagnie)',
	'Retrait des sources FamousBirthdays (Discussion_Wikipédia:Observatoire_des_sources#famousbirthdays)',
	'#moisantipub'
];
importScript('Utilisateur:0x010C/script/PopupVandalism.js');
//Paramètres de PopupVandalisme.js
var PopVand_Mode = "text";
var PopVand_Color = true;

window.alwaysEval = false; //mettez cette valeur à ''true'' si vous voulez que l'évaluation soit lancée automatiquement (à éviter en temps normal)
window.initEvalProjectNames = function()
{
	evalProjectNames=new Array(); //liste de vos projets
	evalProjectNames.push("Nintendo")
	evalProjectNames.push("Jeu vidéo")
	evalProjectNames.push("Corée")
	evalProjectNames.push("Brésil")
	evalProjectNames.push("Royaume-Uni")
	evalProjectNames.push("Récompenses et distinctions"); //mettre ici autant de lignes comme celle-ci que de projets que vous voulez évaluer
}
importScript('User:AzaToth/twinkle.js');

// Options de xpatrol
window.xpatrolEnableClear = true; // Active la fonctionnalité de blanchiment de page
window.xpatrolEnableBanner = true; // Active la fonctionnalité d'ajout de bandeau
window.xpatrolEnablePurge = true; // Active la fonctionnalité de demande de purge d'historique

// Activation de xpatrol
mw.loader.load( '//fr.wikipedia.org/w/index.php?title=Utilisateur:Arkanosis/xpatrol.js&action=raw&ctype=text/javascript' );
mw.loader.load('//www.mediawiki.org/w/index.php?title=XTools/ArticleInfo.js&action=raw&ctype=text/javascript');

// Smart rollback
// Provides several useful functions for rollback (custom edit summary, mark as bot edits and mass revert)
// by [[m:user:Hoo man]] <http://meta.wikimedia.org/wiki/User:Hoo_man/Scripts/Smart_rollback>
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hoo_man/smart_rollback.js&action=raw&ctype=text/javascript');


// <nowiki>

/* jslint laxbreak: true */
/* globals mw, $ */

var cpeSpecialPage = 'Spécial:Portail-éval';

$(function () {
  mw.loader.using( 'mediawiki.util', function () {
    mw.util.addPortletLink('p-tb', mw.util.getUrl(cpeSpecialPage), 'Portail-éval', 'r-cpe', 'Portail-éval');
  });
});

if (mw.config.get('wgPageName').replace(/_/g, ' ') == cpeSpecialPage.replace(/_/g, ' ')) {

/* Génération de la liste */

function cpeArticleLink(article) {
    return '<a href="' + mw.util.getUrl(article) + '">' + mw.html.escape(article) + '</a>';
}

function cpeReadCat(categ, callbackFun, progressFun) {
    var query = {format: 'json', action: 'query', list: 'categorymembers', cmtitle: categ, cmlimit: 500};
    var catMembers = [];

    function readCatLoop(obj) {
        $.merge(catMembers, obj.query.categorymembers);
        progressFun(catMembers.length);
        if (obj['continue']) {
            var queryContinue = Object.assign({}, query, obj['continue']);
            $.getJSON(mw.util.wikiScript('api'), queryContinue, readCatLoop);
        } else {
            callbackFun(catMembers);
        }
    }

    $.getJSON(mw.util.wikiScript('api'), query, readCatLoop);
}

function cpeComputeLists(projet, callbackFun) {
    var cpeImp = ['inconnue', 'faible', 'moyenne', 'élevée', 'maximum'];
    var cpeListePortail = {};
    var cpeListeEval = {};

    function initReadInfo(cat) {
        $('#cpeResult').html('Lecture de <tt>' + mw.html.escape(cat) + '</tt> <span id="cpeCatReadCount"></span>');
    }
    function updateReadInfo(size) {
        $('#cpeCatReadCount').text('(' + size + ' lus)');
    }

    function listeEval(index) {
        if (index < cpeImp.length) {
          var category = 'Catégorie:Article du projet ' + projet + " d'importance " + cpeImp[index];
          initReadInfo(category);
          cpeReadCat(category,
              function (catMembers) {
                  for (var i = 0; i < catMembers.length; i++) {
                      if (catMembers[i].ns == 1) {
                          var talkTitle = catMembers[i].title;
                          var title = talkTitle.substr(talkTitle.indexOf(':') + 1);
                          cpeListeEval[title] = true;
                      }
                  }
                  listeEval(index + 1);
              },
              updateReadInfo
          );
        } else {
            callbackFun(cpeListePortail, cpeListeEval);
        }
    }

    $('#cpeResult').html('Calcul du nom du portail');
    var api = new mw.Api();
    var parseRequest = {
        'action': 'parse',
        'contentmodel': 'wikitext',
        'text': '{{' + 'subst:Utilisateur:Orlodrim/Portail par projet|1=' + projet + '}}',
        'prop': 'text',
        'onlypst': '1'
    };
    api.get(parseRequest).done(function(parseResult) {
        var portail = parseResult['parse']['text']['*'];
        if (portail !== projet) {
            $('#cpeNomPortail').html('<p>Le nom du portail correspondant à ce projet est «\xA0' + portail +
                                     '\xA0».</p>');
        }
        initReadInfo('Catégorie:Portail:' + portail + '/Articles liés');
        cpeReadCat('Catégorie:Portail:' + portail + '/Articles liés',
            function (catMembers) {
                for (var i = 0; i < catMembers.length; i++) {
                    cpeListePortail[catMembers[i].title] = true;
                }
                listeEval(0);
            },
            updateReadInfo
        );
    });
}

/* Formulaire */

window.cpeCompute = function () {
    var projet = $('#cpeProjet').val();
    projet = projet.substr(0, 1).toUpperCase() + projet.substr(1);
    if (projet == '') {
        $('#cpeResult').text("Erreur : le champ 'Projet' est vide.");
        return;
    }
    $('#cpeCompute').attr('disabled', 'disabled');
    $('#cpeNomPortail').text('');

    cpeComputeLists(projet,
        function (listePortail, listeEval) {
            var directLink = location.protocol + mw.config.get('wgServer') + mw.config.get('wgScript')
                + '?title=' + encodeURIComponent(cpeSpecialPage)
                + '&projet=' + encodeURIComponent(projet);
            var html = '<p><small>Lien direct pour revenir à cette requête&nbsp;: <a href="' +
                       mw.html.escape(directLink) + '">' + mw.html.escape(directLink) + '</a></small></p>';
            html += '<p><a href="#" id="cpeDisplayWikicode" class="cpe-closed">Version en wikicode à copier-coller' +
                    '</a></p>';
            var list1 = '', list2 = '';
            var wikicodeList1 = '', wikicodeList2 = '';
            var listCount1 = 0, listCount2 = 0, maxListCount = 500;
            var article;
            for (article in listePortail) {
                if (!listeEval[article]) {
                    listCount1++;
                    if (listCount1 <= maxListCount) {
                        list1 += '<li>' + cpeArticleLink(article);
                        wikicodeList1 += '*[[' + article + ']]\n';
                    }
                }
            }
            for (article in listeEval) {
                if (!listePortail[article]) {
                    listCount2++;
                    if (listCount2 <= maxListCount) {
                        list2 += '<li>' + cpeArticleLink(article);
                        wikicodeList2 += '*[[' + article + ']]\n';
                    }
                }
            }

            function formatCount(c) {
                if (c == 0) {
                    return 'Aucun article';
                } else if (c == 1) {
                    return '1 article';
                } else if (c <= maxListCount) {
                    return c + ' articles';
                } else {
                    return c + ' articles (seulement ' + maxListCount + ' affichés)';
                }
            }

            html += '<h2>Articles du portail non évalués</h2>'
                + '<p>' + formatCount(listCount1) + '</p><ul>' + list1 + '</ul>'
                + '<h2>Articles évalués sans le portail</h2>'
                + '<p>' + formatCount(listCount2) + '</p><ul>' + list2 + '</ul>';

            $('#cpeResult').html(html);
            $('#cpeCompute').prop('disabled', false);
            $('#cpeDisplayWikicode').click(function() {
                var link = $(this);
                link.toggleClass('cpe-closed cpe-opened');
                if (link.hasClass('cpe-opened')) {
                    link.after('<div id="cpeWikicodeDiv"><textarea id="cpeWikicode" cols="80" rows="25" readonly></textarea></div>');
                    $('#cpeWikicode').val('== Articles du portail non évalués ==\n' + wikicodeList1 + '\n== Articles évalués sans le portail ==\n' + wikicodeList2);
                } else {
                    $('#cpeWikicodeDiv').remove();
                }
            });
        }
    );
};

function cpeInitForm(projet) {
    $('head').append('<style>'
        + '.cpe-closed {padding: 0 0 0 16px; background: url(//upload.wikimedia.org/wikipedia/commons/4/41/MediaWiki_Vector_skin_right_arrow.png) no-repeat left center;}'
        + '.cpe-opened {padding: 0 0 0 16px; background: url(//upload.wikimedia.org/wikipedia/commons/1/10/MediaWiki_Vector_skin_action_arrow.png) no-repeat left center;}'
        + '</style>');
    var html = '<p>Ce formulaire sert à calculer la liste des articles qui ont un portail mais pas une évaluation, et réciproquement.</p>'
        + '<p>Projet (par exemple <i>Chemin de fer</i>)<br /><input id="cpeProjet" size="64" value="'
        + mw.html.escape(projet) + '" /></p>'
        + '<p><input type="button" id="cpeCompute" onclick="cpeCompute();" value="Calculer" /></p><div id="cpeNomPortail"></div><div id="cpeResult"></div>';
    $("#bodyContent").html(html);
    mw.loader.using(["jquery.ui"], function () {
        $("#cpeProjet").autocomplete({source:
            function (request, response) {
                if (/[{}|<>\[\]]/.test(request.term)) {
                    response([]);
                    return;
                }
                var commonPrefix = 'Évaluation des articles du projet ';
                var prefix = commonPrefix + request.term.substr(0, 1).toUpperCase() + request.term.substr(1);
                var query = {format: 'json', action: 'query', list: 'allpages', apprefix: prefix, apnamespace: 14, rawcontinue: ''};
                $.getJSON(mw.util.wikiScript('api'), query, function (obj) {
                    var projets = [];
                    for (var i = 0; i < obj.query.allpages.length; i++) {
                        var category = obj.query.allpages[i].title;
                        projets.push(category.substr(category.indexOf(':') + 1 + commonPrefix.length));
                    }
                    if (projets.length == 1 && projets[0] == request.term) {
                        response([]);
                    } else {
                        response(projets);
                    }
                });
            }
        });
    });
}

$(function () {
    var title = "Comparaison portail et articles évalués";
    var projet = "";
    window.document.title = title;
    $('#firstHeading').html(title);

    var params = location.search.substr(1).split("&");
    for (var i = 0; i < params.length; i++) {
        var nameVal = params[i].split("=");
        if (nameVal.length < 2) continue;
        if (nameVal[0] == "portail" || nameVal[0] == "projet") {
            projet = decodeURIComponent(nameVal[1]);
        }
    }
    cpeInitForm(projet);
});

}

// Fonction pour vérifier si un lien est interne à Wikipédia
function estLienInterne(url) {
    // Vérifie si le lien contient le domaine de Wikipédia
    return url.includes('wikipedia.org');
}

console.log("Chargement de Gadget-ShowMessageNames.js…");
mw.loader.load("//en.wikisource.org/wiki/MediaWiki:Gadget-ShowMessageNames.js?action=raw&ctype=text/javascript");


// NoSource.js

importScript('User:Alexisdepris/Mes scripts/NoDetectSource.js');


// QualiDetect.js

importScript('User:Alexisdepris/Mes scripts/QualiDetect.js');


//////////////////////////////


$(document).ready(function () {
    // Fonction pour récupérer la date de création de l'article
    function getArticleCreationDate() {
        return new Promise(function (resolve, reject) {
            $.ajax({
                url: mw.util.wikiScript('api'),
                data: {
                    action: 'query',
                    prop: 'revisions',
                    rvprop: 'timestamp',
                    rvdir: 'newer',
                    titles: mw.config.get('wgPageName'),
                    format: 'json'
                },
                dataType: 'json'
            })
            .done(function (data) {
                var pages = data.query.pages;
                for (var pageId in pages) {
                    if (pages.hasOwnProperty(pageId)) {
                        var page = pages[pageId];
                        if (page.revisions && page.revisions.length > 0) {
                            resolve(page.revisions[0].timestamp);
                        } else {
                            reject('No revisions found for this page.');
                        }
                    }
                }
            })
            .fail(function (jqXHR, textStatus, errorThrown) {
                reject('Error fetching article creation date: ' + textStatus);
            });
        });
    }

    // Fonction pour afficher l'année de création sur la page
    function displayCreationYear() {
        getArticleCreationDate()
        .then(function (timestamp) {
            var creationDate = new Date(timestamp);
            var creationYear = creationDate.getFullYear();

            // Créer l'élément d'affichage
            var creationYearElement = $('<div>')
                .text('Article créé en ' + creationYear)
                .css({
                    'font-size': '14px',
                    'color': '#555',
                    'background-color': '#f9f9f9',
                    'border': '1px solid #ddd',
                    'padding': '10px',
                    'border-radius': '5px',
                    'position': 'fixed',
                    'top': '10px',
                    'right': '10px',
                    'z-index': '1000'
                });

            // Ajouter l'élément à la page
            $('body').append(creationYearElement);
        })
        .catch(function (error) {
            console.error(error);
        });
    }

    // Appeler la fonction pour afficher l'année de création
    displayCreationYear();
});

// Permet d'avoir les numéros d'ID des anciennes et nouvelles version sur une page "diff"

importScript('User:Alexisdepris/Mes scripts/DiffIndicator.js'); 

importScript('User:Alexisdepris/Mes scripts/HistoryGraph.js'); 


//////////////////////////////////////////////////////////////////////////////


importScript('User:Alexisdepris/Mes scripts/test.js'); 



// Ajouter un portlet "Demande de protection" au menu principal
mw.util.addPortlet('p-codex', 'Demande de protection', '#p-interaction');
const dialogTrigger = mw.util.addPortletLink('p-codex', '#', 'Demander la protection de cette page', 'p-codex-dialog');

mw.loader.using('@wikimedia/codex').then(function (require) {
    const Vue = require('vue');
    const Codex = require('@wikimedia/codex');
    const mountPoint = document.body.appendChild(document.createElement('div'));

    Vue.createMwApp({
        data() {
            return {
                showDialog: false,
                pageName: mw.config.get('wgPageName'),
                reason: ''
            };
        },
        methods: {
            openDialog() {
                this.showDialog = true;
            },
            closeDialog() {
                this.showDialog = false;
            },
            sendRequest() {
                if (this.reason) {
                    const sectionTitle = `Demande de protection pour [[${this.pageName}]]`;
                    const message = `Raison : ${this.reason}`;

                    // Vérifier si le message existe déjà
                    new mw.Api().get({
                        action: 'parse',
                        page: 'Discussion_utilisateur:Alexisdepris',
                        prop: 'wikitext'
                    }).then(data => {
                        const wikitext = data.parse.wikitext['*'];
                        if (wikitext.includes(sectionTitle)) {
                            mw.notification.notify('Une demande de protection pour cette page existe déjà.');
                        } else {
                            // Récupérer le token CSRF
                            new mw.Api().get({
                                action: 'query',
                                meta: 'tokens',
                                type: 'csrf'
                            }).then(data => {
                                const token = data.query.tokens.csrftoken;

                                // Publier le message sur la page de discussion de l'utilisateur
                                new mw.Api().postWithToken('csrf', {
                                    action: 'edit',
                                    title: 'Discussion_utilisateur:Alexisdepris',
                                    section: 'new',
                                    sectiontitle: sectionTitle,
                                    text: message,
                                    token: token
                                }).done(() => {
                                    mw.notification.notify('Votre demande de protection a été envoyée.');
                                }).fail(() => {
                                    mw.notification.notify('Une erreur s\'est produite lors de l\'envoi de votre demande.');
                                });
                            });
                        }
                    });
                } else {
                    mw.notification.notify('Vous devez entrer une raison pour la protection.');
                }
                this.closeDialog();
            }
        },
        template: `
            <cdx-dialog v-model:open="showDialog"
                title="Demande de protection de page"
                close-button-label="Close"
                :default-action="sendRequest"
                @default="sendRequest"
            >
                <p>Vous êtes sur la page : {{ pageName }}</p>
                <textarea v-model="reason" rows="3" style="width: 100%;" placeholder="Entrez la raison ici..."></textarea>
                <cdx-dialog-footer>
                    <cdx-button @click="sendRequest">Envoyer</cdx-button>
                    <cdx-button @click="closeDialog" variant="primary-inverted">Annuler</cdx-button>
                </cdx-dialog-footer>
            </cdx-dialog>
        `,
        mounted() {
            if (dialogTrigger) {
                dialogTrigger.addEventListener('click', this.openDialog);
            } else {
                console.error('Le lien de déclenchement du dialogue n\'a pas été trouvé.');
            }
        },
        unmounted() {
            if (dialogTrigger) {
                dialogTrigger.removeEventListener('click', this.openDialog);
            }
        }
    })
        .component('cdx-button', Codex.CdxButton)
        .component('cdx-dialog', Codex.CdxDialog)
        .mount(mountPoint);
});





// </nowiki>