Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JS] fonction ajout bbcode

explcations et modifications

    31 janvier 2006 à 16:02:53

    Je ne comprend pas trop le javascript et donc j'ai besoin d'un coup de main :)

    voici la fcontion d'origine :


    <script language="Javascript">
    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 ); //début du texte jusqu'au début de la selection
                    objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength ); // fin de la sélaction jusquà fin du texte
                    objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd ); //texte séléctionné

            //      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);
                            var r = 0;
                            for(n = 0; n < i; n++)
                            {if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
                            pos = i + 2 + selec.length - r;
                            //placer(document.forms['news'].elements['newst'], pos);
                            var r = oField.createTextRange();
                            r.moveStart('character', pos);
                            r.collapse();
                            r.select();

                    }
            }
    }

    </script>



    Voici comment j'aimerai la modifier :


    <script language="Javascript">
    var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
    var regexp = new RegExp("[\r]","gi"); // ?

    function bouton(formulaire,nom,code_av,code_ap)
    {
            if (isMozilla)
            {
            // Si on est sur Mozilla

                    oField = document.forms[formulaire].elements[nom];

                    objectValue = oField.value;

                    deb = oField.selectionStart;
                    fin = oField.selectionEnd;

                    objectValueDeb = objectValue.substring( 0 , oField.selectionStart ); //début du texte jusqu'au début de la selection
                    objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength ); // fin de la sélaction jusquà fin du texte
                    objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd ); //texte séléctionné

            //      alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");
                           
                    oField.value = objectValueDeb + code_av + objectSelected + code_ap + objectValueFin; //on insère le code autour du texte sélectionné
                    oField.selectionStart = strlen(objectValueDeb); // longueur de la chaine objectValueDeb
                    oField.selectionEnd = strlen(objectValueDeb + code_av + objectSelected + code_ap ); // longueur de la chaine debut du texte -> fin de la selection
                    oField.focus(); //?
                    oField.setSelectionRange(
                            objectValueDeb.length + selec.length + 2, // modifier selec ?
                            objectValueDeb.length + selec.length + 2); // modifier selec ?
            }
            else
            {
            // Si on est sur IE
                   
                    oField = document.forms[formulaire].elements[nom];
                    var str = document.selection.createRange().text; // str : texte selectionné

                    if (str.length>0)
                    {
                    // Si on a selectionné du texte
                            var sel = document.selection.createRange();
                            sel.text = code_av + str + code_ap; // on ajoute le code au texte selectionné
                            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); // i: position de %~% dans le texte
                            oField.value = orig.substr(0,i) + code_av + code_ap + orig.substr(i, oField.value.length); //on ajoute le code a l'emplacement i
                            var r = 0;
                            for(n = 0; n < i; n++)
                            {
                                    if(regexp.test(oField.value.substr(n,2)) == true)
                                    {
                                            r++;
                                    }
                            };
                            pos = i + 2 + selec.length - r;  // modifier selec ?
                            //placer(document.forms[formulaire].elements[nom], pos);
                            var r = oField.createTextRange();
                            r.moveStart('character', pos);
                            r.collapse();
                            r.select();

                    }
            }
    }

    </script>


    donc il y a des erreurs dans ma fonction modifiée puisque par exemple je n'ai pas toujour su par quoi remplacer le selec (argument de la fonction d'origine)
    De plus il y a des lignes que je ne comprend pas (suivie de // ?)

    Si vous pouviez m'aider un peu ca serait cool :)
    merci ;)
    • Partager sur Facebook
    • Partager sur Twitter
      31 janvier 2006 à 16:04:48

      Et si tu nous disais ce que tu veux faire, au fait ?

      (Ce serait peut-être plus rapide que de devoir étudier le code [mais peut-être pas, qui sait ?])
      • Partager sur Facebook
      • Partager sur Twitter
        31 janvier 2006 à 16:21:59

        ok,

        au depart j'avais cette fonction


        <script language="Javascript">
        function bouton(formulaire,nom,code)
        {
        window.document.forms[formulaire].elements[nom].value += '' + code + '';
        }
        </script>


        qui permet d'ajouter du code bbcode exemple [url=][/url] mais ce ceci à la fin du texte.
        Maintenant je voudrais ajouter ajouter [url=]avant le texte que je selectionne et [/url] apres.
        Donc j'ai trouvé la fonction qui permettait de réaliser ceci et j'ai essayé de la modifier mais j'ai quelques problemes
        • Partager sur Facebook
        • Partager sur Twitter
          31 janvier 2006 à 17:38:40

          non car la fonction ne prend pas comme argument le nom deu form ainsi que le nom de la txtarea en parametre.

          La fonction que j'ai postée correspond parfaitrement a mon besoin, il me faut juste de l'aide pour la modification ;)
          • Partager sur Facebook
          • Partager sur Twitter
            31 janvier 2006 à 17:43:22

            Non, elle ne prend que l'ID du <textarea> en paramètre, ce qui est bien plus pratique. En tout cas, en opposition avec le nom du form et du textarea dans le paramètre...
            • Partager sur Facebook
            • Partager sur Twitter
              31 janvier 2006 à 18:50:04

              mais ca ne va pas car il ne gere pas les [url=][ulr]

              vu qu'il ne fait que [code][/code] :/
              • Partager sur Facebook
              • Partager sur Twitter
                2 février 2006 à 17:03:27

                quelqu'un peut m'aider pour la modification de la fonction ?
                • Partager sur Facebook
                • Partager sur Twitter

                [JS] fonction ajout bbcode

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown