Bon alors voilà...Je ne sais pas programmer en javascript, tout juste raccommoder ce qui existe déjà... Mon but est de faire qqch qui insère des BBcodes dans un textarea, j'ai trouvé un script qui marche bien (je les accommodé pour les smileys, la mise en gras, italique, l'insertion d'url...). Mais il me reste le problème de permettre le changement de couleur de la police à partir d'un menu déroulant, et je n'y parviens pas. Voici donc le script utilisé :
Code :
- var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
- var regexp = new RegExp("[\r]","gi" );
- function storeCaret(selec)
- {
- if (isMozilla)
- {
- // Si on est sur Mozilla
- oField = document.forms['news'].elements['newst'];
- objectValue = oField.value;
- deb = oField.selectionStart;
- fin = oField.selectionEnd;
- objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
- objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
- objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );
- // alert("Debut:'"+objectValueDeb+"' ("+deb+" )\nFin:'"+objectValueFin+"' ("+fin+" )\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+" )" );
- oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]" + objectValueFin;
- oField.selectionStart = strlen(objectValueDeb);
- oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]" );
- oField.focus();
- oField.setSelectionRange(
- objectValueDeb.length + selec.length + 2,
- objectValueDeb.length + selec.length + 2);
- }
- else
- {
- // Si on est sur IE
- oField = document.forms['news'].elements['newst'];
- var str = document.selection.createRange().text;
- if (str.length>0)
- {
- // Si on a selectionné du texte
- var sel = document.selection.createRange();
- sel.text = "[" + selec + "]" + str + "[/" + selec + "]";
- sel.collapse();
- sel.select();
- }
- else
- {
- oField.focus(oField.caretPos);
- // alert(oField.caretPos+"\n"+oField.value.length+"\n" )
- oField.focus(oField.value.length);
- oField.caretPos = document.selection.createRange().duplicate();
- var bidon = "%~%";
- var orig = oField.value;
- oField.caretPos.text = bidon;
- var i = oField.value.search(bidon);
- oField.value = orig.substr(0,i) + "[" + selec + "][/" + selec + "]" + orig.substr(i, oField.value.length);
- //Partie modifiée
- //Gestion des retours chariots sous IE
- var temp = orig.substr(0,i);
- var nbretour =0;
- for (var cpt=0;cpt<temp.length;cpt=cpt+1)
- {
- if(temp.charAt(cpt)=="\n" )
- {
- nbretour=nbretour+1;
- }
- }
- //Prise en compte des retour chariots dans le placement du curseur
- pos = i + 2 + selec.length - nbretour;
- //placer(document.forms['news'].elements['newst'], pos);
- var r = oField.createTextRange();
- r.moveStart('character', pos);
- r.collapse();
- r.select();
- }
- }
- }
|
Et voilà mon formulaire :
Code :
- <?php
- echo '<form name=news action=plop.php><select name=color>';
- echo '<option>Changer de couleur</option>';
- echo '<option>Blanc</option>';
- echo '<option>Noir</option>';
- echo '</select>';
- echo '<textarea name="newst" id="newst" rows="10" wrap="off" cols="45" style="overflow:auto;"></textarea>';
- echo '<input type=submit value=envoyer></form>';
- ?>
|
Voilou je serai reconnaissant à toute âme généreuse qui voudra bien me dire ce que je dois modifier dans le formulaire et le script pour que ca fonctionne. Merci d'avance