Utilisateur:Phe/Diderot.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 remove_diacritics(text) {
    var list = {
        "á":'a', "Á":'a', "â":'a',
        "é":'e', "è":'e', "ê":'e', "ë":'e',
        "î":'i', "ï":'i',
        "ô":'o', "ö":'o',
        "ù":'u', "ü":"u",
        "ç":'c',
        'À':'a', 'Â':'a',
        'É':'E', 'È':'E', 'Ê':'E', 'Ë':'E',
        'Î':'I', 'Ï':'I',
        'Ô':'O', 'Ö':'O',
        'Ù':'U', "Ü":'U',
        'Ç':'C'
        };
    var result = '';
    for (var i = 0 ; i < text.length ; ++i) {
        if (list[text[i]])
            result += list[text[i]];
        else
            result += text[i];
    }
    return result;
}

function get_volume(title) {
    var list = [ "A", "B", "CHA", "CONSEIL", "DO", "ET", "FOANG", "H", "JU",
                  "MAMMELLE", "N", "PARLEMENT", "POMACIES", "REGGIO", "SEN", "TEANUM", "VENERIEN" ];
   var found = 0;
   for (var i = 0; i < list.length; ++i) {
      if (title >= list[i])
          found = i + 1;
   }
   return found;
}

function do_encl() {

    var currentFocused =  $("#wpTextbox1");
    if (currentFocused && currentFocused.length) {
        var val = currentFocused.textSelection( "getSelection", {} );
        if (!val.length)
            return;

        if (/^{{sc\|.*}}$/.test(val)) {
            val = val.replace(/{{sc\|(.*)}}/, "$1");
        }
        var VAL;
        var EncL;
        if (/^''.*''$/.test(val)) {
            VAL = val.replace(/''(.*)''/, "$1").toUpperCase();
            EncL = "EncL2";
        } else {
            VAL = val.toUpperCase();
            EncL = "EncL";
        }

        var tpl_call = val + "|" + VAL + "|" + remove_diacritics(VAL[0]) + "|" + get_volume(remove_diacritics(VAL));

        currentFocused.textSelection(
	    "encapsulateSelection", {
	        "pre"  : "{{" + EncL + "|",
                "peri" : tpl_call,
                "post" : "}}",
                "replace" : true
            }
        );
    }
}


function do_simplify(text) {
    var new_text = '';
    var last_match = 0;
    var splitter = /\^{(.)}/g;
    while ((result = splitter.exec(text)) !== null) {
	new_text += text.slice(last_match, splitter.lastIndex - result[0].length);
	new_text += "^" + result[1];
	last_match = splitter.lastIndex;
    }

    new_text = new_text + text.slice(last_match);

    new_text = new_text.replace(/''/g, "");

    return new_text;
}

function do_frac(text) {
    var new_text = '';
    var last_match = 0;
    var splitter = new RegExp("([^ =]+)/([^ =]+)",  "g");
    while ((result = splitter.exec(text)) !== null) {
	new_text += text.slice(last_match, splitter.lastIndex - result[0].length);
	new_text += "\\frac {" + result[1] + "}{" + result[2] + "}";
	last_match = splitter.lastIndex;
    }

    return new_text + text.slice(last_match);
}

function do_exp(text) {
    var new_text = '';
    var last_match = 0;
    var splitter = new RegExp("{{e\\|([^}]+)}}|<sup>(.+)</sup>", "g");
    while ((result = splitter.exec(text)) !== null) {
	new_text += text.slice(last_match, splitter.lastIndex - result[0].length);
        if (result[2])
            new_text += "^{" + result[2] + "}";
        else
            new_text += "^{" + result[1] + "}";
	last_match = splitter.lastIndex;
    }

    return new_text + text.slice(last_match);
}

function do_post_parse(val) {
    var new_text = val.replace(/(=o|= o)$/g, "= 0");
    new_text = new_text.replace(/(::)/g, "\\text { :: }");
    new_text = new_text.replace(/∷/g, "\\text { :: }");

    return new_text;
}

function do_math() {
    var currentFocused =  $("#wpTextbox1");
    if (currentFocused && currentFocused.length) {
        var val = currentFocused.textSelection( "getSelection", {} );
        if (!val.length)
            return;

        val = do_frac(val);
        val = do_exp(val);
        val = do_simplify(val);
        val = do_post_parse(val);

        currentFocused.textSelection(
	    "encapsulateSelection", {
	        	"pre"  : "<math>\\scriptstyle ",
                "peri" : val,
                "post" : "</math>",
                "replace" : true
            }
        );
    }
}

if ($.inArray(mw.config.get("wgAction"), [ "edit", "submit"]) != -1 &&
  mw.config.get("wgNamespaceNumber") == 104 &&
  mw.config.get("wgTitle").indexOf("Diderot - Encyclopedie 1ere edition tome") === 0) {
	$.when(
		mw.loader.using( [ 'ext.gadget.InsertButton' ] ),
		$.ready
	).then(function() {
		window.insert_button.editForm( {
			'img_classic' : '//upload.wikimedia.org/wikisource/fr/0/06/Encl.png',
			'img_advanced' : '//upload.wikimedia.org/wikisource/fr/0/06/Encl.png',
			'tooltip' : 'Placement modèle EncL',
			'img_id' : 'wpEncL',
			'on_click' : do_encl
			} );
		window.insert_button.editForm( {
			'img_classic' : '//upload.wikimedia.org/wikisource/fr/c/cf/LaTeX.png',
			'img_advanced' : '//upload.wikimedia.org/wikisource/fr/c/cf/LaTeX.png',
			'tooltip' : 'Transforme autant que possible une expression en LaTeX',
			'img_id' : 'wpLaTeX',
			'on_click' : do_math
			} );
		}
	);
}