begin process at 2010 02 09 13:19:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > EDITEUR BBCODE AVEC VISUALISATION EN DIRECT

EDITEUR BBCODE AVEC VISUALISATION EN DIRECT


 Information sur la source

Note :
8,78 / 10 - par 9 personnes
8,78 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :wysiwyg, bbcode, editeur Niveau :Initié Date de création :30/04/2006 Date de mise à jour :02/05/2006 01:25:53 Vu / téléchargé :20 333 / 2 713

Auteur : Vince_02

Ecrire un message privé
Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note

 Description

Bonjour,

Je vais pas dire que cette source est entièrement de moi, comptenu de divers coup de main
et d'un bout de code repris sur un forum modifié a ma guise...

Enfin bref, comme le dis le Titre, c'est un éditeur BBCode tout simple a mettre en place,
très pratique, vos vistieurs ne sont pas obligé d'avoir des notions de HTML pour composer un
commentaire, une news ou quelconque type de message, ça vous le savez déjà...

pour avoir un aperçus => http://bbc.shonenchat.com/bbcode.html

dans le code source, il y a quelques infos utils ;)

(PS : Je sais, c'est pas du nouveau, il exist déjà quelque éditeurs BBCode, mais cependant
pas facile a trouver ^^')

Source

  • // JavaScript Document
  • function initBBcode(IdName,BtnName,PrwName,Action,largeur,hauteur) {
  • var InpBtn = '';
  • var LabBtn = '';
  • var DivBtn = '';
  • var NamBtn = new Array('[b],[/b]','[u],[/u]','[i],[/i]','[s],[/s]','[align=left],[/align]','[align=center],[/align]','[align=right],[/align]','[align=justify],[/align]','[quote],[/quote]','[code],[/code]','[list=circle]\r\n[*],\r\n[/list]','[list=1]\r\n[*],\r\n[/list]','[list=a]\r\n[*],\r\n[/list]','[img],[/img]','[url],[/url]','[mail],[/mail]');
  • var DesBtn = new Array('Gras','Souligné','Italique','Barré','Droite','Centré','Justifié','Gauche','Citation','Affichez du code','Liste à puce','Liste ordonnée','Liste alphabétique','Insérer une image','Insérer un lien','Insérer un mail');
  • var ImgBtn = new Array('bold','underline','italic','strikethrough','alignleft','aligncenter','alignright','alignjustify','quote','code','bullist','numlist','alphalist','image','link','mail');
  • var DesCol = new Array('Couleur police','Couleur fond');
  • var NamCol = new Array('[color=','[bgcolor=','[/color]','[/bgcolor]');
  • var OptCol = new Array('Défaut', 'Rouge foncé', 'Rouge', 'Orange', 'Marron', 'Jaune', 'Vert', 'Olive', 'Cyan', 'Bleu', 'Bleu foncé', 'Indigo', 'Violet','Blanc','Noir');
  • var HtmCol = new Array('','darkred', 'red', 'orange', 'brown', 'yellow', 'green', 'olive', 'cyan', 'blue', 'darkblue', 'indigo', 'violet', 'white','black');
  • var DesSize = 'Taille';
  • var NamSize = new Array('[size=','[/size]');
  • var OptSize = new Array('Défaut','Très petit','Petit','Normal','Grand','Très grand','Personnaliser');
  • var HtmSize = new Array('medium','x-small','small','medium','large','x-large','12px');
  • var DesFont = 'Police';
  • var NamFont = new Array('[font=','[/font]');
  • var OptFont = new Array('Défaut','Arial','Verdana','Century Gothic','Comic Sans MS','Courier New','Jokerman','Kristen ITC','Lucida Console');
  • // partie de la fonction qui permet d'ajouter les balises BBcode aux textes sélectionné, ou à l'emplacement du curseur
  • var Selection = 'try { if (document.selection) { objet.focus(); sel = document.selection.createRange(); sel.text = balise + sel.text + balise2; } else { if(objet.selectionStart==objet.selectionEnd) { if (balise=="[img]" && balise2=="[/img]") { var InfUrl=prompt("Entrez l\'adresse URL de botre image SVP :", ""); } else { if (balise=="[url]" && balise2=="[/url]") { var InfUrl=prompt("Entrez l\'adresse URL :", ""); } else { var InfUrl=""; } } var textedebut = objet.value.substring(0,objet.selectionStart); var textefin = objet.value.substring(objet.selectionEnd, objet.value.length); objet.value = textedebut + balise + InfUrl + balise2 + textefin; } else { var textedebut = objet.value.substring(0,objet.selectionStart); var textefin = objet.value.substring(objet.selectionEnd, objet.value.length); var texteSelection = objet.value.substring(objet.selectionStart, objet.selectionEnd); objet.value = textedebut + balise + texteSelection + balise2 + textefin; } } } catch(e) { alert(e); } ';
  • // les 2 div qui vont bien => BBCode_ = Editeur ; Prev_ => Prévisu.
  • document.write('<div id="BBCode_'+IdName+'" class="bbcode"></div><div id="Prev_'+IdName+'" class="bbcode"></div>');
  • // Création du formulaire
  • var html = '<form id="Form'+IdName+'" name="Form'+IdName+'" method="post" enctype="multipart/form-data" action="'+Action+'" onSubmit="return false;"><div id="BBCodeBouton_'+IdName+'"></div><div id="BBCodeArea_'+IdName+'"></div><div id="BBCodeSubmit_'+IdName+'"></div></form>';
  • document.getElementById('BBCode_'+IdName).innerHTML = html;
  • document.getElementById('BBCode_'+IdName).style.width = largeur+"px";
  • document.getElementById('BBCode_'+IdName).align="left";
  • document.getElementById('Prev_'+IdName).innerHTML = '<fieldset><legend>Prévisualisation :</legend></fieldset>';
  • document.getElementById('Prev_'+IdName).style.display = "none";
  • document.getElementById('Prev_'+IdName).align="left";
  • document.getElementById('BBCodeArea_'+IdName).style.margin = "0px 2.5px";
  • document.getElementById('BBCodeSubmit_'+IdName).style.padding = "5px";
  • // Ajout du textarea
  • InpBtn = document.createElement( 'textarea' );
  • InpBtn.id = IdName;
  • InpBtn.name = IdName;
  • InpBtn.style.height = hauteur+"px";
  • InpBtn.style.width = largeur+"px";
  • InpBtn.onkeyup = function() { preview(IdName); }
  • InpBtn.style.width = largeur - 10 + "px";
  • document.getElementById('BBCodeArea_'+IdName).appendChild(InpBtn);
  • // Ajout des Submit de prévisu et d'envoie
  • InpBtn = document.createElement( 'input' );
  • InpBtn.type = "submit";
  • InpBtn.id = "Sub"+IdName;
  • InpBtn.name = "Sub"+IdName;
  • InpBtn.value = BtnName;
  • InpBtn.onclick = function() {
  • document.getElementById(IdName).value = preview(IdName);
  • eval("document.Form"+IdName+".submit();");
  • }
  • document.getElementById('BBCodeSubmit_'+IdName).appendChild(InpBtn);
  • // Input invisible si "off" on envoie sur la page destinatrice
  • InpBtn = document.createElement( 'input' );
  • InpBtn.type = "hidden";
  • InpBtn.id = "Hid"+IdName;
  • InpBtn.name = "Hid"+IdName;
  • InpBtn.value = "off";
  • document.getElementById('BBCodeSubmit_'+IdName).appendChild(InpBtn);
  • // Bouton de prévisue
  • InpBtn = document.createElement( 'input' );
  • InpBtn.type = "submit";
  • InpBtn.id = "Prw"+IdName;
  • InpBtn.name = "Prw"+IdName;
  • InpBtn.value = PrwName;
  • InpBtn.onclick = function() { document.getElementById('Prev_'+IdName).style.display = "block";
  • var texte = preview(IdName);
  • document.getElementById('Prev_'+IdName).innerHTML = '<fieldset><legend>Prévisualisation :</legend>'+texte+'</fieldset>'; }
  • document.getElementById('BBCodeSubmit_'+IdName).appendChild(InpBtn);
  • // Le plus facile et plus simple, les balises de [b],[/b] à [url],[/url]
  • DivBtn = document.createElement( 'div' );
  • DivBtn.id = "SubBB_"+IdName;
  • var i = 0;
  • while (NamBtn[i]) {
  • LabBtn = document.createElement( 'label' );
  • LabBtn.title = DesBtn[i];
  • InpBtn = document.createElement( 'input' );
  • InpBtn.align = "middle";
  • InpBtn.type = 'image';
  • InpBtn.src = 'image/'+ImgBtn[i]+'.gif';
  • var val = NamBtn[i].split(',');
  • InpBtn.name = val[0];
  • InpBtn.id = val[1];
  • InpBtn.onclick = function() {
  • var objet = eval("document.Form"+IdName+"."+IdName+";");
  • var balise = this.name;
  • var balise2 = this.id;
  • eval(Selection);
  • preview(IdName);
  • }
  • LabBtn.appendChild(InpBtn);
  • DivBtn.appendChild(LabBtn);
  • i++;
  • }
  • document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
  • // on complique un peux, les Balises [color],[bgcolor]
  • DivBtn = document.createElement( 'div' );
  • DivBtn.id = "SelColBB_"+IdName;
  • for (var i = 0;i < 2; i++) {
  • LabBtn = document.createElement( 'label' );
  • LabBtn.title = DesCol[i];
  • LabBtn.innerHTML = "&nbsp;"+DesCol[i]+" : ";
  • InpBtn = document.createElement( 'select' );
  • InpBtn.id=NamCol[i];
  • InpBtn.name=NamCol[i+2];
  • var j = 0;
  • while (OptCol[j]) {
  • InpBtn.options[j] = new Option(OptCol[j],HtmCol[j]);
  • if (i==0) {
  • InpBtn.options[j].style.color = HtmCol[j];
  • } else {
  • InpBtn.options[j].style.background = HtmCol[j];
  • }
  • j++;
  • }
  • InpBtn.onchange = function() {
  • var objet = eval("document.Form"+IdName+"."+IdName+";");
  • var balise = this.id+this.options[this.selectedIndex].value+']';
  • var balise2 = this.name;
  • eval(Selection);
  • preview(IdName);
  • }
  • LabBtn.appendChild(InpBtn);
  • DivBtn.appendChild(LabBtn);
  • }
  • document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
  • // La Balise [font] -- Type de Police --
  • DivBtn = document.createElement( 'div' );
  • DivBtn.id = "SelFontBB_"+IdName;
  • LabBtn = document.createElement( 'label' );
  • LabBtn.title = DesFont;
  • LabBtn.innerHTML = "&nbsp;"+DesFont+" : ";
  • InpBtn = document.createElement( 'select' );
  • InpBtn.id=NamFont[0];
  • InpBtn.name=NamFont[1];
  • var i = 0;
  • while (OptFont[i]) {
  • InpBtn.options[i] = new Option(OptFont[i],OptFont[i]);
  • i++;
  • }
  • InpBtn.onchange = function() {
  • var objet = eval("document.Form"+IdName+"."+IdName+";");
  • var balise = this.id+this.options[this.selectedIndex].value+']';
  • var balise2 = this.name;
  • eval(Selection);
  • preview(IdName);
  • }
  • LabBtn.appendChild(InpBtn);
  • DivBtn.appendChild(LabBtn);
  • document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
  • // La Balise [size] -- Taille de la police de caractère --
  • DivBtn = document.createElement( 'div' );
  • DivBtn.id = "SelSizeBB_"+IdName;
  • LabBtn = document.createElement( 'label' );
  • LabBtn.title = DesSize;
  • LabBtn.innerHTML = "&nbsp;"+DesSize+" : ";
  • InpBtn = document.createElement( 'select' );
  • InpBtn.id=NamSize[0];
  • InpBtn.name=NamSize[1];
  • var i = 0;
  • while (OptSize[i]) {
  • InpBtn.options[i] = new Option(OptSize[i],HtmSize[i]);
  • i++;
  • }
  • InpBtn.onchange = function() {
  • var objet = eval("document.Form"+IdName+"."+IdName+";");
  • var balise = this.id+this.options[this.selectedIndex].value+']';
  • var balise2 = this.name;
  • eval(Selection);
  • preview(IdName);
  • }
  • LabBtn.appendChild(InpBtn);
  • DivBtn.appendChild(LabBtn);
  • document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
  • }
  • function preview(Name) {
  • if (document.getElementById('Prev_'+Name).style.display == "none") return false;
  • var q1 = "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody><tr><td><div align=\"left\" style=\"font-size : 11px; color: #000000;\"><b>";
  • var q2 = "</b></div></td></tr><tr><td align=\"left\" style=\"font-family: Arial; font-size: 11px; color: #444444; background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-width: 1px;\">";
  • var q3 = "</td></tr></tbody></table>";
  • var texte = document.getElementById(Name).value;
  • texte=texte.replace(/</g, '&lt;');
  • texte=texte.replace(/>/g, '&gt;');
  • texte=texte.replace(/\r\n|\r|\n/g, '<br />');
  • texte=texte.replace(/\[(b|u|s|i|\/b|\/u|\/s|\/i)]/g,'<$1>');
  • texte=texte.replace(/\[color=([^\[]*)\]/mig, '<span style=\'color:$1;\'>');
  • texte=texte.replace(/\[bgcolor=([^\[]*)\]/mig, '<span style=\'background-color:$1;\'>');
  • texte=texte.replace(/\[font=([^\[]*)\]/mig, '<span style=\'font-family:$1;\'>');
  • texte=texte.replace(/\[size=([^\[]*)\]/mig, '<span style=\'font-size:$1;\'>');
  • texte=texte.replace(/\[\/(color|bgcolor|font|size)\]/gi,'</span>');
  • texte=texte.replace(/\[align=([^\[]*)\]/mig, '<div style=\'text-align:$1;\'>');
  • texte=texte.replace(/\[\/align]/gi, '</div>');
  • texte=texte.replace(/\[code]/gi, '<div align="left" style="color:#000000;font-weight:bold; font-size: 11px;">Code :</div><div style="color:#333333;background-color:#F0F0F0;" align="left"><code lang="fr">');
  • texte=texte.replace(/\[\/code]/gi, '</code></div>');
  • texte=texte.replace(/\[quote]/gi, q1+'Citation:'+q2);
  • texte=texte.replace(/\[quote=([^\[]*)\]/gi, q1+'$1 a écrit :'+q2);
  • texte=texte.replace(/\[\/quote]/gi, q3);
  • texte=texte.replace(/\[url]([^\]]*)\[\/url]/mig,'<a href="$1" target="_blank">$1</a>');
  • texte=texte.replace(/\[url=([^\[]*)\]([^\]]*)\[\/url\]/mig, '<a href=\'$1\' target=\'_blank\'>$2</a>');
  • texte=texte.replace(/\[mail]([^\[]*)\[\/mail]/mig,'<a href="mailto:$1" target="_blank">$1</a>');
  • texte=texte.replace(/\[mail=([^\[]*)\]([^\]]*)\[\/mail\]/mig, '<a href=\'mailto:$1\' target=\'_blank\'>$2</a>');
  • texte=texte.replace(/\[img]([^\]]*)\[\/img]/mig,'<img src="$1" border="0" />');
  • texte=texte.replace(/\[list=([^\]]*)\](.+)\[\/list]/mig, '<ul type="$1">$2</ul>');
  • texte=texte.replace(/\[\*]([^\[]+)(?=(\[\*])|(<\/ul>))/mig, '<li>$1</li>');
  • texte=texte.replace(/\<br \/><\/ul>/gi, '</ul>');
  • texte=texte.replace(/<\/ul><br \/>/gi, '</ul>');
  • texte=texte.replace(/<div([^\>]*)><br \/>/gi, '<div $1>');
  • texte=texte.replace(/<\/div><br \/>/gi, '</div>');
  • texte=texte.replace(/<span([^\>]*)><br \/>/gi, '<span $1>');
  • texte=texte.replace(/(<\/span><br \/>|<br \/><\/span><br \/>|<br \/><\/span>)/gi, '</span>');
  • texte=texte.replace(/<td([^\>]*)><br \/>/gi, '<td $1>');
  • texte=texte.replace(/<\/table><br \/>/gi, '</table>');
  • texte=texte.replace(/<code([^\>]*)><br \/>/gi, '<code $1>');
  • texte=texte.replace(/(<\/code><br \/>|<br \/><\/code>|<br \/><\/code><br \/>)/gi, '</code>');
  • document.getElementById('Prev_'+Name).innerHTML = '<fieldset><legend>Prévisualisation :</legend>'+texte+'</fieldset>';
  • return (texte);
  • }
// JavaScript Document
function initBBcode(IdName,BtnName,PrwName,Action,largeur,hauteur) {

	var InpBtn = '';
	var LabBtn = '';
	var DivBtn = '';
	
	var NamBtn = new Array('[b],[/b]','[u],[/u]','[i],[/i]','[s],[/s]','[align=left],[/align]','[align=center],[/align]','[align=right],[/align]','[align=justify],[/align]','[quote],[/quote]','[code],[/code]','[list=circle]\r\n[*],\r\n[/list]','[list=1]\r\n[*],\r\n[/list]','[list=a]\r\n[*],\r\n[/list]','[img],[/img]','[url],[/url]','[mail],[/mail]');
	var DesBtn = new Array('Gras','Souligné','Italique','Barré','Droite','Centré','Justifié','Gauche','Citation','Affichez du code','Liste à puce','Liste ordonnée','Liste alphabétique','Insérer une image','Insérer un lien','Insérer un mail');
	var ImgBtn = new Array('bold','underline','italic','strikethrough','alignleft','aligncenter','alignright','alignjustify','quote','code','bullist','numlist','alphalist','image','link','mail');
	
	var DesCol = new Array('Couleur police','Couleur fond');
	var NamCol = new Array('[color=','[bgcolor=','[/color]','[/bgcolor]');
	
	var OptCol = new Array('Défaut', 'Rouge foncé', 'Rouge', 'Orange', 'Marron', 'Jaune', 'Vert', 'Olive', 'Cyan', 'Bleu', 'Bleu foncé', 'Indigo', 'Violet','Blanc','Noir');
	var HtmCol = new Array('','darkred', 'red', 'orange', 'brown', 'yellow', 'green', 'olive', 'cyan', 'blue', 'darkblue', 'indigo', 'violet', 'white','black');
	
	var DesSize = 'Taille';
	var NamSize = new Array('[size=','[/size]');
	var OptSize = new Array('Défaut','Très petit','Petit','Normal','Grand','Très grand','Personnaliser');
	var HtmSize = new Array('medium','x-small','small','medium','large','x-large','12px');
	
	var DesFont = 'Police';
	var NamFont = new Array('[font=','[/font]');
	var OptFont = new Array('Défaut','Arial','Verdana','Century Gothic','Comic Sans MS','Courier New','Jokerman','Kristen ITC','Lucida Console');
	
	// partie de la fonction qui permet d'ajouter les balises BBcode aux textes sélectionné, ou à l'emplacement du curseur
	
	var Selection = 'try { if (document.selection) { objet.focus(); sel = document.selection.createRange(); sel.text = balise + sel.text + balise2; } else { if(objet.selectionStart==objet.selectionEnd) { if (balise=="[img]" && balise2=="[/img]") { var InfUrl=prompt("Entrez l\'adresse URL de botre image SVP :", ""); } else { if (balise=="[url]" && balise2=="[/url]") { var InfUrl=prompt("Entrez l\'adresse URL :", ""); } else { var InfUrl=""; } } var textedebut = objet.value.substring(0,objet.selectionStart); var textefin = objet.value.substring(objet.selectionEnd, objet.value.length); objet.value = textedebut + balise + InfUrl + balise2 + textefin; } else { var textedebut = objet.value.substring(0,objet.selectionStart); var textefin = objet.value.substring(objet.selectionEnd, objet.value.length); var texteSelection = objet.value.substring(objet.selectionStart, objet.selectionEnd); objet.value = textedebut + balise + texteSelection + balise2 + textefin; } } } catch(e) { alert(e); } ';
	
	// les 2 div qui vont bien => BBCode_ = Editeur ; Prev_ => Prévisu.
	
	document.write('<div id="BBCode_'+IdName+'" class="bbcode"></div><div id="Prev_'+IdName+'" class="bbcode"></div>');
	
	
	// Création du formulaire
	
	var html = '<form id="Form'+IdName+'" name="Form'+IdName+'" method="post" enctype="multipart/form-data" action="'+Action+'" onSubmit="return false;"><div id="BBCodeBouton_'+IdName+'"></div><div id="BBCodeArea_'+IdName+'"></div><div id="BBCodeSubmit_'+IdName+'"></div></form>';
	
	document.getElementById('BBCode_'+IdName).innerHTML = html;
	document.getElementById('BBCode_'+IdName).style.width = largeur+"px";
	document.getElementById('BBCode_'+IdName).align="left";
	
	
	document.getElementById('Prev_'+IdName).innerHTML = '<fieldset><legend>Prévisualisation :</legend></fieldset>';
	document.getElementById('Prev_'+IdName).style.display = "none";
	document.getElementById('Prev_'+IdName).align="left";
	
	document.getElementById('BBCodeArea_'+IdName).style.margin =  "0px 2.5px";
	
	document.getElementById('BBCodeSubmit_'+IdName).style.padding = "5px";
	
	// Ajout du textarea
	
	InpBtn = document.createElement( 'textarea' );
	InpBtn.id = IdName;
	InpBtn.name = IdName;
	InpBtn.style.height = hauteur+"px";
	InpBtn.style.width = largeur+"px";
	InpBtn.onkeyup = function() { preview(IdName); }
	InpBtn.style.width = largeur - 10 + "px";
	
	document.getElementById('BBCodeArea_'+IdName).appendChild(InpBtn);
	
	// Ajout des Submit de prévisu et d'envoie
	
	InpBtn = document.createElement( 'input' );
	InpBtn.type = "submit";
	InpBtn.id = "Sub"+IdName;
	InpBtn.name = "Sub"+IdName;
	InpBtn.value = BtnName;
	InpBtn.onclick = function() { 
				document.getElementById(IdName).value = preview(IdName);
				eval("document.Form"+IdName+".submit();");
				}
	
	document.getElementById('BBCodeSubmit_'+IdName).appendChild(InpBtn);
	
	// Input invisible si "off" on envoie sur la page destinatrice
	
	InpBtn = document.createElement( 'input' );
	InpBtn.type = "hidden";
	InpBtn.id = "Hid"+IdName;
	InpBtn.name = "Hid"+IdName;
	InpBtn.value = "off";
	
	document.getElementById('BBCodeSubmit_'+IdName).appendChild(InpBtn);

	// Bouton de prévisue
	
	InpBtn = document.createElement( 'input' );
	InpBtn.type = "submit";
	InpBtn.id = "Prw"+IdName;
	InpBtn.name = "Prw"+IdName;
	InpBtn.value = PrwName;
	
	InpBtn.onclick = function() { document.getElementById('Prev_'+IdName).style.display = "block"; 
								  var texte = preview(IdName); 
								  document.getElementById('Prev_'+IdName).innerHTML = '<fieldset><legend>Prévisualisation :</legend>'+texte+'</fieldset>'; }
	
	document.getElementById('BBCodeSubmit_'+IdName).appendChild(InpBtn);
	
	
	// Le plus facile et plus simple, les balises de [b],[/b] à [url],[/url]
	
	DivBtn = document.createElement( 'div' );
	DivBtn.id = "SubBB_"+IdName;
	
	var i = 0;
	
	while (NamBtn[i]) {
			
			LabBtn = document.createElement( 'label' );
			LabBtn.title = DesBtn[i];
			
			InpBtn = document.createElement( 'input' );
			InpBtn.align = "middle";
			InpBtn.type = 'image';
			InpBtn.src = 'image/'+ImgBtn[i]+'.gif';
			
			var val = NamBtn[i].split(',');
			InpBtn.name = val[0];
			InpBtn.id = val[1];
			
			InpBtn.onclick = function() {
			
					var objet = eval("document.Form"+IdName+"."+IdName+";");
					var balise = this.name;
					var balise2 = this.id;
					
					eval(Selection);
					preview(IdName);
			}
			
			LabBtn.appendChild(InpBtn);
			DivBtn.appendChild(LabBtn);
			
			i++;
			
	}
	
	document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
	
	// on complique un peux, les Balises [color],[bgcolor]
	
	DivBtn = document.createElement( 'div' );
	DivBtn.id = "SelColBB_"+IdName;
	
	for (var i = 0;i < 2; i++) {
		
		LabBtn = document.createElement( 'label' );
		LabBtn.title = DesCol[i];
		
		LabBtn.innerHTML = "&nbsp;"+DesCol[i]+" : ";
		InpBtn = document.createElement( 'select' );
		InpBtn.id=NamCol[i];
		InpBtn.name=NamCol[i+2];
		
		var j = 0;
		
		while (OptCol[j]) {
		
			InpBtn.options[j] = new Option(OptCol[j],HtmCol[j]);
			if (i==0) { 
				InpBtn.options[j].style.color = HtmCol[j];
			} else {
				InpBtn.options[j].style.background = HtmCol[j];
			}
			
			j++;
			
		}
		
		InpBtn.onchange =  function() {
					
					var objet = eval("document.Form"+IdName+"."+IdName+";");
					var balise = this.id+this.options[this.selectedIndex].value+']';
					var balise2 = this.name;
					
					eval(Selection);
					preview(IdName);
		}
		
		LabBtn.appendChild(InpBtn);
		DivBtn.appendChild(LabBtn);

	}
	
	document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
	
	// La Balise [font] -- Type de Police --
	
	DivBtn = document.createElement( 'div' );
	DivBtn.id = "SelFontBB_"+IdName;
	
	LabBtn = document.createElement( 'label' );
	LabBtn.title = DesFont;
	LabBtn.innerHTML = "&nbsp;"+DesFont+" : ";
	
	InpBtn = document.createElement( 'select' );
	InpBtn.id=NamFont[0];
	InpBtn.name=NamFont[1];
	
	var i = 0;
	
	while (OptFont[i]) {
		InpBtn.options[i] = new Option(OptFont[i],OptFont[i]);
		i++;
	}
	
	InpBtn.onchange =  function() {
					 
					var objet = eval("document.Form"+IdName+"."+IdName+";");
					var balise = this.id+this.options[this.selectedIndex].value+']';
					var balise2 = this.name;
					
					eval(Selection);
					preview(IdName);
	}
		
	LabBtn.appendChild(InpBtn);
	DivBtn.appendChild(LabBtn);
	
	document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
	
	// La Balise [size] -- Taille de la police de caractère --
	
	DivBtn = document.createElement( 'div' );
	DivBtn.id = "SelSizeBB_"+IdName;
	
	LabBtn = document.createElement( 'label' );
	LabBtn.title = DesSize;
	LabBtn.innerHTML = "&nbsp;"+DesSize+" : ";
	
	InpBtn = document.createElement( 'select' );
	InpBtn.id=NamSize[0];
	InpBtn.name=NamSize[1];
	
	var i = 0;
	
	while (OptSize[i]) {
		InpBtn.options[i] = new Option(OptSize[i],HtmSize[i]);

		i++;
	}
	
	InpBtn.onchange =  function() {
					
					var objet = eval("document.Form"+IdName+"."+IdName+";");
					var balise = this.id+this.options[this.selectedIndex].value+']';
					var balise2 = this.name;
					
					eval(Selection);
					preview(IdName);
	}
		
	LabBtn.appendChild(InpBtn);
	DivBtn.appendChild(LabBtn);
	
	document.getElementById('BBCodeBouton_'+IdName).appendChild(DivBtn);
	

	
}
function preview(Name) {
	
	if (document.getElementById('Prev_'+Name).style.display == "none") return false;
	
	var q1 = "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody><tr><td><div align=\"left\" style=\"font-size : 11px; color: #000000;\"><b>";
	var q2 = "</b></div></td></tr><tr><td align=\"left\" style=\"font-family: Arial; font-size: 11px; color: #444444; background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-width: 1px;\">";
	var q3 =  "</td></tr></tbody></table>";
	
	var texte = document.getElementById(Name).value;
	
	texte=texte.replace(/</g, '&lt;');
	texte=texte.replace(/>/g, '&gt;');
		
	texte=texte.replace(/\r\n|\r|\n/g, '<br />');
	texte=texte.replace(/\[(b|u|s|i|\/b|\/u|\/s|\/i)]/g,'<$1>');
	
	texte=texte.replace(/\[color=([^\[]*)\]/mig, '<span style=\'color:$1;\'>');
	texte=texte.replace(/\[bgcolor=([^\[]*)\]/mig, '<span style=\'background-color:$1;\'>');
	texte=texte.replace(/\[font=([^\[]*)\]/mig, '<span style=\'font-family:$1;\'>');
	texte=texte.replace(/\[size=([^\[]*)\]/mig, '<span style=\'font-size:$1;\'>');
	texte=texte.replace(/\[\/(color|bgcolor|font|size)\]/gi,'</span>');
	
	texte=texte.replace(/\[align=([^\[]*)\]/mig, '<div style=\'text-align:$1;\'>');
	texte=texte.replace(/\[\/align]/gi, '</div>');
	
	texte=texte.replace(/\[code]/gi, '<div align="left" style="color:#000000;font-weight:bold; font-size: 11px;">Code :</div><div style="color:#333333;background-color:#F0F0F0;" align="left"><code lang="fr">');
	texte=texte.replace(/\[\/code]/gi, '</code></div>');
	
	texte=texte.replace(/\[quote]/gi, q1+'Citation:'+q2);
	texte=texte.replace(/\[quote=([^\[]*)\]/gi, q1+'$1 a écrit :'+q2);
	texte=texte.replace(/\[\/quote]/gi, q3);
	
	texte=texte.replace(/\[url]([^\]]*)\[\/url]/mig,'<a href="$1" target="_blank">$1</a>');
	texte=texte.replace(/\[url=([^\[]*)\]([^\]]*)\[\/url\]/mig, '<a href=\'$1\' target=\'_blank\'>$2</a>');
	texte=texte.replace(/\[mail]([^\[]*)\[\/mail]/mig,'<a href="mailto:$1" target="_blank">$1</a>');
	texte=texte.replace(/\[mail=([^\[]*)\]([^\]]*)\[\/mail\]/mig, '<a href=\'mailto:$1\' target=\'_blank\'>$2</a>');
	texte=texte.replace(/\[img]([^\]]*)\[\/img]/mig,'<img src="$1" border="0" />');

	texte=texte.replace(/\[list=([^\]]*)\](.+)\[\/list]/mig, '<ul type="$1">$2</ul>');
	texte=texte.replace(/\[\*]([^\[]+)(?=(\[\*])|(<\/ul>))/mig, '<li>$1</li>');

	texte=texte.replace(/\<br \/><\/ul>/gi, '</ul>');
	texte=texte.replace(/<\/ul><br \/>/gi, '</ul>');

	texte=texte.replace(/<div([^\>]*)><br \/>/gi, '<div $1>');
	texte=texte.replace(/<\/div><br \/>/gi, '</div>');
	
	texte=texte.replace(/<span([^\>]*)><br \/>/gi, '<span $1>');
	texte=texte.replace(/(<\/span><br \/>|<br \/><\/span><br \/>|<br \/><\/span>)/gi, '</span>');
	
	texte=texte.replace(/<td([^\>]*)><br \/>/gi, '<td $1>');
	texte=texte.replace(/<\/table><br \/>/gi, '</table>');
	
	texte=texte.replace(/<code([^\>]*)><br \/>/gi, '<code $1>');
	texte=texte.replace(/(<\/code><br \/>|<br \/><\/code>|<br \/><\/code><br \/>)/gi, '</code>');

	document.getElementById('Prev_'+Name).innerHTML = '<fieldset><legend>Prévisualisation :</legend>'+texte+'</fieldset>';
	return (texte);
}

 Conclusion

la mise en forme de l'éditeur peut se faire via Feuille de Style (CSS) en vous basant sur les
IDs correspondant de chaque élément (tout est expliqué a peux près sur le liens ci-dessus,
voyait aussi le zip (bbcode.html) ).

Pour "installer" l'éditeur :

Entre <head> et </head> de votre page, ajoutez ceci :
<script language="javascript" type="text/javascript" src="bbcode/bbcode.js"></script>

Entre <body> et </body> insérrer :
<script language="javascript" type="text/javascript">
initBBcode('Instance','En voyer','Prévisualiser','test.php',600,400);
</scri pt>

'Instance' => Correspond à la variable ou sera stocké le texte
ex : document.getElementById('Instance').value , $_POST['Instance']; ...

'Envoyer' => Correspond au bouton d'envoie, c'est lui qui enverra le contenue 'Instance' a 'action.php'.
'Prévisualiser' => Correspond au bouton de Prévisu., il affichera une 'Layer/Div' avec le contenue de
'Instance', il se met a jour automatiquement a chaque changement de 'Instance'.
'test.php' => Correspond a la page et/ou url destinatrice.
600 => Largeur de l'éditeur en px.
400 => Hauteur de l'éditeur en px.


A noté que, dans le fichier test.php, après avoir récupéré le contenue de la variable, je remplace les \' et \" par ' et "
si non le contenu html de la variable ne sera pas affiché correctement.


Je prévois un peux plus tard de faire une mise en forme directement dans le textarea, et une select
pour le choix de l'éditeur (HTML ou BBCODE). Par exemple, si le navigateur est compatible avec la
version HTML et BBCODE, il aura droit a faire un choix, si non, il aura directement droit a l'éditeur
qui fonctionne et/ou qui fonctionne le mieux.

Si vous avez besoin de plus de commentaire et/ou de détails, faite m'en part, je ferrais un effort ^^

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

30 avril 2006 03:51:34 :
Aucune, a part mise en forme, et ajout de commentaire (incomplète encore ^^' )
02 mai 2006 01:25:53 :
- Ajout de la balise [align=X] ( X => left, center, right, justify ) - Modification de la taille de police de la balise [size] par : small, x-small, medium, large et x-large - Le premier saut de ligne après et avant les balise ne sont pas compté ( [color], [font], [size], [quote] et [code] ainsi que cels de fermeture )

 Sources du même auteur

Source avec Zip COLORATION PHP, CSS, HTML, JAVASCRIPT

 Sources de la même categorie

Source avec Zip MOOTABLEAU par Miky76
Source avec Zip CALCULER VOTRE IMC par lesnouesremy
CONSOLE DOS par djebbipgm
Source avec Zip PLUGIN JQUERY ARTE: AJOUTER DU TEMPS REEL SUR VOS PAGES WEB par arthurobriot
FAIRE UN FILTRE DES VILLES par scropfi01

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [P.J.] PAGES JOURNALIÈRES ~ AGENDA ~ RENDEZ-VOUS ~ par bultez
Source avec Zip Source avec une capture WYSIWYG TOTALEMENT OO par coucou747
Source avec Zip UN SÉLÉCTEUR DE COULEURS SUR LE PRINCIPE DU CERCLE par coucou747
Source avec Zip Source avec une capture WYSIWYG, SIMPLE, SANS PRETENTION par hametsu21
Source avec Zip EDITEUR WYSIWYG DANS UNE PAGE WEB ! par glork

Commentaires et avis

Commentaire de Vince_02 le 30/04/2006 04:03:50

J'ai oublié de préciser, j'ai tester sous IE, Mozilla FireFox et Opéra, ça tourne nickel,
Je pense que sur Konqueror, et le reste des nav devrait pas poser de problèmes, mais au cas ou
faites moi signe...

Ensuite, la c'est partie code, je crois que mon code doit être un peux lourd ^^'

Commentaire de johann1 le 01/05/2006 12:00:23

Pas encore eu le temps d'approfondir, mais ça semble bien!
Bonne continuation
Jo*

Commentaire de Vince_02 le 02/05/2006 01:34:43

merci ^^
Là je pense que ça doit être presque complet, sauf un p'tit soucis pas méchant ^^'

Ensuite, j'ajouterai un Select qui donnera le choix entre HTML et BBCODE, et selon
le type de navigateur, aurra droit à l'éditeur le plus compatible.

Commentaire de gargoil le 04/05/2006 10:34:22

Salut ! c'est exactement ce que je cherchais, mais ça ne marche pas correctement :

Netscape (7.02) : place systématiquement les balises en DEBUT de textarea
Opera (7.5) : duplique le contenu et l'insère de part et d'autre des balises comme ci-dessous :
>>>> test

devient

>>>> test[b][/b]test

... à part ça.... c'est super sur IE !!

Commentaire de Vince_02 le 05/05/2006 14:02:44

looool pas mal ça ^^'

Sous Opera 8.5 et FireFox 1.5 ça marche nickel, c'est pas une raison pour vous faire changer de navigateur ^^

Je vais jetter un oeil sur ce problème ^^

Commentaire de sk8eur747 le 25/05/2006 00:00:05

comment faire pour rajouter un champ de type text au dessus des bouton bbcode

ps : je veux rajouter un champs titre (le titre du sujet)

merci d'avance

Commentaire de Orbiplanax le 19/12/2006 15:00:03

Vraiment sympat, mais :p
L'ajout du champ titre ca serrais sympatoche.

sinon il y a quelque chose d'étrange. je recois instance = false (sous ie6 et firefox) si je n'est pas demander un prévisualisation...

Commentaire de nfroidure le 19/12/2006 16:36:05

Pas mal, je me permet de regarder ta source pour voir si il y a moyen d'améliorer le BBComposer (http://bbcomposer.elitwork.com) avec.

Commentaire de HenvimaL le 04/03/2007 12:13:35

Super ton code !!! mais je n'arrive pas à faire un truc. J'aimerais enregistrer le texte entrer dans l'editeur dans une base mysql, j'y arrive très bien mais il m'enregistre le texte converti en HTML, et moi je veux que le texte soit ajouté dans ma base de donnée directement en BBCode pour pouvoir modifier le texte après. Bref comment faire pour pas que ton code fasse la conversion de BBCode en HTML et qu'il laisse le texte en BBCode !

Commentaire de _nico_ le 14/03/2007 18:31:11

J'ai le même problème qu'Orbiplanax dans le cas où l'on ne demande pas de prévisualisation.
J'ai supprimé cette ligne :
(267) if (document.getElementById('Prev_'+Name).style.display == "none") return false;
et tout marche niquel.

PS : super source ;)

Commentaire de psykstoff le 04/05/2007 16:36:11

Super exactement ce que je cherchais, mis à part un petit problème, je n'arrive pas à définir le texte par défaut, sauriez vous comment faire j'ai essayé en rajoutant une option dans la fonction et en rajoutant la ligne:

InpBtn.defaultValue = defVal;    //defVal étant ma variable contenant le texte par défaut.

merci de vos rep
nikel ce source à par sa ^^

Commentaire de Vince_02 le 22/06/2007 18:13:15

Petit info, le script encode le tout en HTML avant envoie, donc votre script reçois effectivement du HTML.
C'est sur que ça doit géner si on compte faire un système de commentaire avec possibilité d'éditer le texte ...

Je modifirais en conséquence le script, a condition que je dispose d'un peux de temps, et que mon FAI me fiche un peux la paix, car en ce moment, c'est pas la joie ^^'

Commentaire de geve2007 le 22/11/2007 23:47:06

Sympa, très clair. Après avoir essayé plusieurs éditeurs, je l'ai adopté. Seul bémol : les deux listes pour les couleurs sont sur une ligne et les listes suivantes passent à la ligne en dessous. J'ai pourtant créé des styles pour élargir l'éditeur à toute la surface de ma page... Impossible d'aligner toutes les listes...
Comme tout est en Javascript, difficile de savoir comment créer un style pour corriger cela.
Merci pour toute aide.

Commentaire de geve2007 le 23/11/2007 00:10:32

Un autre sushi :

Je me sers de ton code pour mon forum. Le problème c'est que je suis censé ajouter des champs cachés dans le formulaire, avant de récupérer ce qui aura été saisi avec l'éditeur.
Comme ton formulaire est en Javascript, j'ai du mal à piger comment ajouter ces champs cachés dans ton code.

Commentaire de theanciens le 29/12/2007 15:10:46

Bonjour,

Un petit problème, lorsque je valide, le texte est remplacé par "false" et je ne vois pas trop pour quelle raison ...

Merci de votre aide !

Commentaire de amteur le 11/01/2008 16:59:49

Salut,
moi aussi j'ai ce problème :

""
Un petit problème, lorsque je valide, le texte est remplacé par "false" et je ne vois pas trop pour quelle raison ...
""

pouvez vous nous dire le problème ?

Commentaire de Jejeeel59 le 27/04/2008 12:14:01

Merci beaucoup pour ta source, nikel ;)
mais j'aimerais pouvoir l'utiliser dans le sens inverse, c'est-à-dire avec le code généré pouvoir le modifié ... Donc pour l'afficher dans le textarea no pb, mais le code ne correspond pas (genre les <span> pour les [align]) ... comment faire ??

Commentaire de aimar022 le 08/06/2008 12:46:29

Merci pour cette source precieu

Commentaire de jojoo le 19/08/2008 18:15:26

Je voulais juste savoir comment s'appelle le champ de text pour pouvoir l'envoyer via php

Commentaire de Yokashi le 15/01/2009 12:30:17

Salut voilà ton code est super cool au départ j'avais du mal à le comprendre comme je connais pas super bien le javascript enfin bon il y a deux trois bug que j'ai remarqué et j'arrive pas à les enlever.

1) Si d'appuis pas sur Prévisualiser avant d'envoyé le formulaire sur la page php ou je récupère les données ça me renvoie toujours false

2) Quand je clique sur url images citation ça m'affiche pas le prompt

merci d'avance

Yokashi

Commentaire de speedylol le 25/01/2009 17:24:59

bonjour une simple question bête je sais comment faire passer le texte dans une passe de donnée et le relire par la suite merci

Commentaire de BnJmN le 12/04/2009 20:34:57 8/10

Super Code très bon boulot Félicitations.

Je l'ai adapté à ma page facileemnt par contre je cherche à pouvoir le poster dans ma base de donnée au format BBCode et non HTML sinon pour faire des UPDATE ca devient du n'importe quoi :D bref si quelqu'un à réussi j'veux bien un coup de main.

sinon pour ceux qui on le problème avec le retour "False" il faut juste supprimer la ligne 267 du fichier bbcode.js comme dit plus haut. et tout ira bien ;)

Commentaire de BnJmN le 12/04/2009 20:46:40

Est-ce que quelqu'un sait comment faire pour enlever le bouton Prévisualisation mais qu'elle se fasse automatiquement quand j'arrive sur ma page

En gros que je n'ai pas à cliquer sur prévisualisé pour la voir.

Merci d'avance a +

Commentaire de benoure le 25/06/2009 13:52:25

salut!!
je voudrais ajouter un champ texte dans votre code afin de mettre le titre et je n'arrive pas. c'est vrai que je ne suis pas très doué en Java script!!
Donc je voudrais savoir comment pouvoir le fait s'il vous plait!!  

Commentaire de turpinus le 31/07/2009 17:05:35

Salut,
L'orsque j'utilise les balises d'agrandissement pour le texte ça crée un bug aprés envoie. quelqun sait-il pourquoi ?

Commentaire de VicTeams le 23/10/2009 12:43:51 10/10

Bonjour, y aurait il la possibilité de rajouter des émoticones dans bbcode.js ?
Merci, super job ;)

Commentaire de Vince_02 le 23/10/2009 20:42:42

Bonjour,

Pour masquer le bouton de Prévisualisation, il faudra jouer sur le CSS et son ID, l'ID du bouton est : Prw+IdName.
Au mieux, il est généré a partir de la ligne 89, jusqu'à la ligne 101.

Pour récupérer le BBCode du textarea, donc éviter la conversion en html avant l'envoie, supprimez ou commentez la ligne : 73

Puis enfin une légère correction, merci à _NICO_ :
Supprimer la ligne 267, puis a partir de la ligne 321, remplacez là par :
if (document.getElementById('Prev_'+Name).style.display == "none")
    document.getElementById('Prev_'+Name).innerHTML = '<fieldset><legend>Prévisualisation :</legend>'+texte+'</fieldset>';

ce qui évitera un retour de valeur 'false' non désiré.

Et pour finir, les soucis de compatibilité avec les navigateurs d'ancienne génération, mettez simplement a jour vos navigateur, les mises a jour sont prévue pour ça ^^, le tout fonctionnera convenablement.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Ouvrir un Editeur wysiwyg GRATUIT dans popup & OFFLINE [ par artus ] Bonjour.J'ai reussi a trouver une Source Éditeur Wysiwyg Gratuit PAS MAL, complet mais online.Il y a t-il quelqu'un qui peut en faire un editeur OFFL Editeur WYSIWYG - Ajouter du HTML à l'iframe [ par Tilix ] Salut, J'ai pris un petit editeur wysiwyg sur internet (Source : http://www.ibilab.net/webdev/exemples/editeur-wysiwyg.htm) Et je voudrais ajouter Editeur wysiwyg [ par baborge77 ] Bonsoir, Super... ton Editeur wysiwyg.... http://www.javascriptfr.com/code.aspx?ID=33746 c'est exactement se dont j'avais besoin < expression reguliere : img html vers bbcode [ par Full62 ] bonjour,je veut utiliser une expression reguliere pour convertir mon code html vers du bbcode mais cela ne fonctionne pas...voici ce que j'ai mis :// BBCode [ par tuneserapasmonnom ] Bonsoir, j'ai besoin d'un code pour mon script mais je ne le trouve nulle part. En effet, j'aimerai faire en sorte que lorsque je clique sur une image Wysiwyg : Rechercher un mot dans un SPAN ou un DIV ??? [ par fabiano13 ] Bonjour,Je cherche a créer une fonction qui permet de rechercher un mot uniquement dans un span spécifique (&lt;span id="wsy" ContentEditable&gt;&lt;/ Wysiwyg : comment enregistrer (SaveAs) le contenu d'un div ??? [ par fabiano13 ] Bonjour,Je cherche a enregistrer le contenu d'un span (&lt;span id="wsy" ContentEditable&gt;&lt;/span&gt;)J'ai pourtant testé plusieurs choses :ws utiliser editeur html de extJS dans un formulaire [ par xlight ] salut a tous,Alors voila, je cherche à inclure dans un  champ de mon formulaire l'editeur html que fourni extjs.Cependant, même en ayant épluché l'API wysiwyg [ par rottweiler ] Bonjour, je me souviens que le scripts wysiwyg de nix que j'utilise pour rédiger ce message est disponible quelque part mais je ne me souviens plus ou AJAX ? Editeur [ par tuneserapasmonnom ] Bonjour,Je ne m'y connais que très peu en javascript / ajax mais j'ai besoin d'appeler une fonction php quand je modifie un textarea. J'explique : Je


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales