Utilisateur:Phe/Sort author.js

La bibliothèque libre.

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.
function get_sort_key(a)
{
    var expr = new RegExp("\\[\\[Author:.*\\|(.*)\\]\\]");
    a = expr.exec(a)[1];

    a = a.replace(/[XIV]+, Pope$/, '');

    a = a.split(',');
    for (var i = 0; i < a.length; ++i) {
        a[i] = a[i].replace(/^ */, '')
        a[i] = a[i].replace(/ *$/, '')
        a[i] = a[i].replace(/'/g, '');
        a[i] = a[i].replace(/^Sir /, '');
        a[i] = a[i].replace(/^Captain /, '');
        a[i] = a[i].replace(/^Rev\. /, '');
        a[i] = a[i].replace(/^Lord /, '');
        a[i] = a[i].replace(/^de /, '');
        a[i] = a[i].replace(/^du /, '');
        a[i] = a[i].replace(/^von /, '');
        a[i] = a[i].replace(/^van /, '');
    }

   return a;
}

function compare_author(a, b)
{
   var date_a = a.replace(/.*\((\d+).*/, '$1');
   var date_b = b.replace(/.*\((\d+).*/, '$1');
   a = get_sort_key(a);
   b = get_sort_key(b);
   for (var i = 0; i < (a.length < b.length ? a.length : b.length); ++i) {
       alert(a[i]);
       alert(b[i]);
       var ret = a[i].toLowerCase().localeCompare(b[i].toLowerCase());
       if (ret != 0)
           return ret;
   }
   return Number(date_a) - Number(date_b);
}

function sort_author()
{
    var wpTextbox1 = document.getElementById("wpTextbox1");
    if (!wpTextbox1)
        return;
    var text = wpTextbox1.value.substring(8);
    var header = wpTextbox1.value.substring(0, 7);
    text = text.split('*');
    text.sort(compare_author);
    text = text.join('*');
    wpTextbox1.value = header + '*' + text;
}

function sort_author_1()
{
    if ((wgAction == "edit" || wgAction == 'submit') && wgPageName.search('Wikisource:Authors-') == 0)
       sort_author();
}

function add_author_sort_button()
{
    var toolbar = document.getElementById("toolbar");
    if(toolbar && wgPageName.search('Wikisource:Authors-') == 0) {
	var image = document.createElement("img");
	image.width = 23;
	image.height = 22;
	image.border = 0;
	image.className = "mw-toolbar-editbutton";
	image.style.cursor = "pointer";
	image.alt = "regexp";
	image.title = "Sort authors";
	image.src = "http://upload.wikimedia.org/wikipedia/commons/c/c4/Button_ref.png";
	image.onclick = sort_author_1;
	toolbar.appendChild(image);
        }
}

$(document).ready(add_author_sort_button);