Utilisateur:Stef48/regexp.js

Un article de Wikipédia, l'encyclopédie libre.

Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.

//<source lang="javascript">
 
// Tableau de boutons
var regexpButtons = [];
 
/**
 * Ajout d'un bouton а la toolbar d'edition
 * inspiree de insertButton()
 * @param title : titre de la fonction
 * @param image : source de l'image а afficher
 * @param href: lien a executer lors du click sur le bouton
 * @param accesskey : touche d'acces rapide (optionnel)
 */
function regexpAddButton(title, image, href, accesskey) {
	regexpButtons[regexpButtons.length] =
		{"title": title,
		 "image": image,
		 "href": href,
		 "accesskey": accesskey};
}
 
/**
 * Ajoute les boutons à la toolbar
 */
function regexpAddButtons() {
        var toolbar = document.getElementById("toolbar"); 
        if (!toolbar) return;
 
	for (var i in regexpButtons) {
		var button = regexpButtons[i];
		var img = document.createElement("img");
		img.width = 23;
		img.height = 22;
		img.src = button.image;
		img.border = 0;
		img.style.cursor = "pointer";
		img.alt = button.title;
 
		var ref = document.createElement("a");
		if (!button.flags) button.flags = "";
		ref.setAttribute("href", button.href);
		ref.setAttribute("title", button.title);
		if (button.accesskey) {
			ref.setAttribute("accesskey", button.accesskey);
		}
		ref.appendChild(img);
		toolbar.appendChild(ref);
	}
}
 
/**
 * fonction la recherche et le remplacement de texte
 * inspiree de insertTags(), elle meme inspiree de phpBB,
 * en utilisant des expression regulieres
 */
function regexpReplace(regexp, replace) {
	var txtarea = document.getElementById("wpTextbox1");
	// IE
	if (document.selection  && !is_gecko) {
		var range = document.selection.createRange();
		var theSelection = range.text;
		if (!theSelection) theSelection = txtarea.value;
		txtarea.focus();
		if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
			theSelection = theSelection.substring(0, theSelection.length - 1);
			range.text = theSelection.replace(regexp, replace) + " ";
		} else {
			range.text = theSelection.replace(regexp, replace);
		}
	// Mozilla
	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
		var replaced = false;
		var startPos = txtarea.selectionStart;
		var endPos = txtarea.selectionEnd;
		if (endPos-startPos <= 0) {
			startPos = 0;
			endPos = txtarea.value.length;
		}
		var scrollTop = txtarea.scrollTop;
		var theSelection = (txtarea.value).substring(startPos, endPos);
		var replacedSelection = theSelection.replace(regexp, replace);
 
		txtarea.value = txtarea.value.substring(0, startPos) + replacedSelection +
			txtarea.value.substring(endPos, txtarea.value.length);
		txtarea.focus();
 
		//set new selection 
		var cPos = startPos+(replacedSelection.length);
		txtarea.selectionStart = startPos;
		txtarea.selectionEnd = cPos;
		//txtarea.scrollTop = scrollTop;
	}
}
 
/**
 * Ajout dans la toolbar d'un bouton chercher/remplacer
 */
function addReplaceButton() {
 
        regexpAddButton("Remplacer",
		"http://upload.wikimedia.org/wikipedia/commons/5/59/Button_replace.png", 
		"javascript:regexpReplace(" +
			"new RegExp(window.prompt('Chercher (expression régulière)')," +
			"window.prompt('Flags (optionel, combinaison de m, i, g)'))," +
			"window.prompt('Remplacer par'));",
		 null);
}
 
addLoadEvent(addReplaceButton);
addLoadEvent(regexpAddButtons);
 
//</source>