Faire une toolbox BBCode Wiki ou autre

Tagged:

Voila donc perso j'avais besoin d'une toolbox, j'ai trouvé des trucs sur internet mais soit c'était l'usine a gaz soit c'était mal foutu ... Je me suis dit après tout on est jamais mieux servis que par soit même, j'ai un peu cherché comment ça fonctionnait et voici ce que j'ai produit :

/**
 * This class is able to manage BBCodes
 */
TextArea = function (name) {
    this._init(name);
}
 
/**
 * TextArea's constructor
 */
TextArea.prototype._init = function (name) {
	this.name = name;
	this.textarea = document.getElementById(this.name);
}
 
/**
 * The effective tag operation
 */
TextArea.prototype.tag = function (bStart,bEnd) {
	this.textarea.focus();
	if (typeof(document.selection) != 'undefined') {
		return this.tagIE(bStart,bEnd);
	} else {
		return this.tagGecko(bStart,bEnd);
	}
}
 
TextArea.prototype.tagIE = function (bStart,bEnd) {
	var range = document.selection.createRange();
	var insText = range.text;
	range.text = bStart + insText + bEnd;
	range = document.selection.createRange();
	if (insText.length == 0) {
		range.move('character', -(bEnd.length));
	} else {
		range.moveStart('character', bStart.length + insText.length + bEnd.length);
	}
	range.select();
}
 
TextArea.prototype.tagGecko = function (bStart,bEnd) {
	var start = this.textarea.selectionStart;
	var end = this.textarea.selectionEnd;
	var insText = this.textarea.value.substring(start, end);
	this.textarea.value = this.textarea.value.substr(0, start) + bStart + insText + bEnd + this.textarea.value.substr(end);
	var pos = insText.length ? start + bStart.length + insText.length + bEnd.length : start + bStart.length;
	this.textarea.selectionStart = pos;
	this.textarea.selectionEnd = pos;
}
 
/**
 * Automatically tag start and end by using a simple open/close tag
 */
TextArea.prototype.simpleTag = function (tag) {
	this.tag('['+tag+']','[/'+tag+']');
}
 
/**
 * Automatically tag start and end by using an open/close tag with a param asked to user
 * by a prompt
 */
TextArea.prototype.promptTag = function (tag,message) {
	rep = prompt(message);
	if (rep.length) this.tag('['+tag+'='+rep+']','[/'+tag+']');
}

Voila c'est pas génial mais ça permet plein de petites choses sympa par la suite ...

du coup vla ma toolbox :

			<span id="toolbox">
				<input type="button" value="b" onclick="t_content.simpleTag('b');" />
				<input type="button" value="u" onclick="t_content.simpleTag('u');" />
				<input type="button" value="i" onclick="t_content.simpleTag('i');" />
				<input type="button" value="s" onclick="t_content.simpleTag('s');" />
				&nbsp;
				<input type="button" value="p" onclick="t_content.simpleTag('p');" />
				<input type="button" value="centre" onclick="t_content.simpleTag('center');" />
				<input type="button" value="droite" onclick="t_content.simpleTag('right');" />
				&nbsp;
				<input type="button" value="img" onclick="t_content.simpleTag('img');" />
				<input type="button" value="email" onclick="t_content.simpleTag('email');" />
				&nbsp;
				<input type="button" value="taille" onclick="t_content.promptTag('size','Quelle taille ?');" />
				<input type="button" value="citation" onclick="t_content.promptTag('quote','Qui ?');" />
				<input type="button" value="color" onclick="t_content.promptTag('color','Quelle couleur ?');" />
				<input type="button" value="url" onclick="t_content.promptTag('url','Quelle url ?');" />
			</span>

Pour se servir de tout ça il suffit de faire (dans mon cas) :

		t_content = new TextArea('c_content');

Toute simple, je la rendrai plus graphique et plus jolite par la suite ;)

Comments

Ah ben alors je teste tout ça :D
c'est vraiment sympa comme tout :) jvais colorer ton blog!! ;P
C'est un gadget certes, mais c'est une bonne idée!
Ah j'ai juste remarqué un truc: c'est normal que quand tu veux annuler l'insertion de balises de couleur il en insère quand meme une en mettant l'attribut color à 'null'?
Et si t'as besoin de ptites icones pour tes boutons de mises en forme jveux bien my coller ;)

Ouéééé baaaaah ... c'est pas encore cooooomplètement au point mais ça viendra hein ;)

Voila merci inkscape qui m'a permis de faire cette toolbar pas trop laide en 5 minutes ;) ça fera bien l'affaire ;)

salut
je cherchais justement un script javascript bbcode
qui permet de mettre plusieurs textarea .
Esct ce que c'est à cela que ça sert ou j'ai rien compris ???

Hummm j'ai pas compris ...
Ce script sert a mettre des bbcode dans un textarea et peut être appliqué a plusieurs textarea ... j'ai juste ??? :D

oui c'est ça je pense mais il faut le mettre où t_content = new TextArea("c_content") et il faut mettre des <textarea name=? ></textarea> ??

Je ne saurais que trop te conseiller de regarder la source de cette page pour comprendre comment ça fonctionne ...

dans le textarea c'est un id="" qui prévaut. Le code utilise getElementById ! name est utilisé pour le résultat du formulaire après avoir cliqué sur Envoyer !

Désolé mais je n'ai rien compris , il faut rien que je ne connais rien en programmation objet.
Désolé et merci quand même

Voilà je vais être un peu plus clair , à chaque fois que je lance le progr dans IE , il ya une erreur , this.textarea est null ou n'est pas un objet (au niveau this.textarea.focus() ).
?

On termine la discussion par mail ça sera beaucoup plus simple ;)

Salut !
J'utilise ton script, par contre dès que le texte est plus grand que la textarea une barre de scroll apparaît, ce qui est normal, mais dès qu'on utilise ta toolbox ça remonte en haut de la textarea...
Y'aurait pas moyen de revenir au bon endroit automatiquement ?

La réponse à ma demande est ici : http://www.developpez.net/forums/showthread.php?t=352200

Arf très bien ... désolé de n'avoir pas répondu de suite et merci d'avoir partagé la solution =)

4 : [url=11][email][/url][/email][img=564][color=11][/color][/img]

Merci

merci pour ce script, cela m'évite quelques heures de code pour un lundi matin ...

que de reactioons sur ton billet ! :)

merçi pour votre aide