bbcode et javascript -> un petit script avec un petit bug ... mais où?

bbcode et javascript -> un petit script avec un petit bug ... mais où? - HTML/CSS - Programmation

Marsh Posté le 07-05-2006 à 18:59:47    

Voilà mon problème, je cherche à mettre du bbcode dans un textarea. J'utilise pour çà une petite fonction qui insère du bbcode à partir de bouton com sur ce forum. Sauf que celle ci marche pour des balise de type [b] [ / b] ou encore [url] [ / url] ( sans les espaces bien sur ). Sauf qe lorsque je veux passer à des balises du genre [color=#00e21c][ / color], il voudrait m'insérer [color=#00e21c][ / color=#00e21c].  
 
Je vous met donc la fonction que j'utilise. Je l'ai récupérer sur le net. Pour palier à ce pb, j'ai pensé à donner un deuxième argument à ma fonction pour lui donner le contenu de la balise de début et celle de fin. C'est ici que provient le hic ... lorsque je survole mes liens il m'affiche :

Code :
  1. javascript:storeCaret(


 
Le code parlera mieux que moi :  
 
var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
var regexp = new RegExp("[\r]","gi" );
 

Code :
  1. function storeCaret(selec,special)
  2. {
  3. if (isMozilla)
  4. {
  5. // Si on est sur Mozilla
  6.  oField = document.forms['form'].elements['contenu'];
  7.  objectValue = oField.value;
  8.  deb = oField.selectionStart;
  9.  fin = oField.selectionEnd;
  10.  objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
  11.  objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
  12.  objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );
  13. // alert("Debut:'"+objectValueDeb+"' ("+deb+" )\nFin:'"+objectValueFin+"' ("+fin+" )\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+" )" );
  14.  oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + special + "]" + objectValueFin;
  15.  oField.selectionStart = strlen(objectValueDeb);
  16.  oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + special + "]" );
  17.  oField.focus();
  18.  oField.setSelectionRange(
  19.   objectValueDeb.length + selec.length + 2,
  20.   objectValueDeb.length + special.length + 2);
  21. }
  22. else
  23. {
  24. // Si on est sur IE
  25.  oField = document.forms['form'].elements['contenu'];
  26.  var str = document.selection.createRange().text;
  27.  if (str.length>0)
  28.  {
  29.  // Si on a selectionné du texte
  30.   var sel = document.selection.createRange();
  31.   sel.text = "[" + selec + "]" + str + "[/" + special + "]";
  32.   sel.collapse();
  33.   sel.select();
  34.  }
  35.  else
  36.  {
  37.   oField.focus(oField.caretPos);
  38.  // alert(oField.caretPos+"\n"+oField.value.length+"\n" )
  39.   oField.focus(oField.value.length);
  40.   oField.caretPos = document.selection.createRange().duplicate();
  41.   var bidon = "%~%";
  42.   var orig = oField.value;
  43.   oField.caretPos.text = bidon;
  44.   var i = oField.value.search(bidon);
  45.   oField.value = orig.substr(0,i) + "[" + selec + "][/" + special + "]" + orig.substr(i, oField.value.length);
  46.   var r = 0;
  47.   for(n = 0; n < i; n++)
  48.   {if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
  49.   pos = i + 2 + selec.length - r;
  50.   //placer(document.forms['news'].elements['newst'], pos);
  51.   var r = oField.createTextRange();
  52.   r.moveStart('character', pos);
  53.   r.collapse();
  54.   r.select();
  55.  }
  56. }
  57. }


 
et voici mes boutons pas encore fini...

Code :
  1. <div align=\"center\">
  2.    <center>
  3.    <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">
  4.      <tr>
  5.        <td width=\"100%\" align=\"center\">
  6.    <a href=\"javascript:storeCaret(\"b\",\"b\" );\"><img style=\"background-color: #FFFFFF\" border=\"1\" src=\"img_bbcode/bold.gif\" width=\"21\" height=\"22\"></a>&nbsp;
  7.          <a href=\"javascript:storeCaret(\"i\",\"i\" );\"><img style=\"background-color: #FFFFFF\" border=\"1\" src=\"img_bbcode/italic.gif\" width=\"21\" height=\"22\"></a>&nbsp;
  8.          <a href=\"javascript:storeCaret(\"u\",\"u\" );\"><img style=\"background-color: #FFFFFF\" border=\"1\" src=\"img_bbcode/underline.gif\" width=\"21\" height=\"22\"></a>&nbsp;
  9.            <a href=\"javascript:storeCaret(\"code\",\"code\" );\"><img style=\"background-color: #FFFFFF\" border=\"1\" src=\"img_bbcode/code.gif\" width=\"21\" height=\"22\"></a>&nbsp;
  10.           <a href=\"javascript:storeCaret(\"url\",\"url\" );\"><img style=\"background-color: #FFFFFF\" border=\"1\" src=\"img_bbcode/link.gif\" width=\"21\" height=\"22\"></a>&nbsp;
  11.           <a href=\"javascript:storeCaret(\"img\",\"img\" );\"><img style=\"background-color: #FFFFFF\" border=\"1\" src=\"img_bbcode/image.gif\" width=\"21\" height=\"22\"></a>&nbsp;
  12.           <a href=\"javascript:storeCaret(\"color=#123456\",\"color\" );\"><img style=\"background-color: #FFFFFF\" border=\"1\" src=\"img_bbcode/image.gif\" width=\"21\" height=\"22\"></a>&nbsp;


Message édité par xadawa le 07-05-2006 à 20:29:26
Reply

Marsh Posté le 07-05-2006 à 18:59:47   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed