[Fort Müller] take 3

Bonjour tout le monde :)

Bon j'ai eu l'occasion ces derniers temps de me pencher longuement sur XPFE, j'ai donc du me replonger dans le JavaScript, le DOM, et tout ce qui va avec, et j'ai trouver quelque chose qui résoud un petit probleme sous mozilla qui m'enerve assez fréquement.

Quand on utilise les boutons pour inserrer les balises de formatage, d'une part, le curseur se replace un peu ou il veut, d'autre part (plus génant) quand il y a un scroll dans le TEXTAREA, il remonte systematiquement tout en haut aprés l'insertion des balises...

En retouchant un tout petit peu, le bout de code incriminé:
...
{
  txtObj.value = txtObj.value.substr(0, txtObj.selectionStart) + Tag +
  txtObj.value.substr(txtObj.selectionStart, 
  txtObj.selectionEnd-txtObj.selectionStart) +
  closeTag + txtObj.value.substr(txtObj.selectionEnd);
}
...
de cette façon:
...
{
  // position du scroll
  oldPos = txtObj.scrollTop;        
  oldHght = txtObj.scrollHeight;

  // position du curseur
  pos = txtObj.selectionEnd + Tag.length + closeTag.length; 

  txtObj.value = txtObj.value.substr(0, txtObj.selectionStart) + Tag +
  txtObj.value.substr(txtObj.selectionStart,
  txtObj.selectionEnd-txtObj.selectionStart) +
  closeTag + txtObj.value.substr(txtObj.selectionEnd);

  // repositionnement cuseur aprés la balise fermante
  // peut être grandemant amélioré ;-)
  txtObj.selectionStart = pos; 
  txtObj.selectionEnd = pos;   

  // calcul et application de la nouvelle bonne postion du scroll
  newHght = txtObj.scrollHeight - oldHght; 
  txtObj.scrollTop = oldPos + newHght;
}
...
On obtient un comportement identique du javascript sur IE, et FireFox, j'ai pas poussé les teste trés loin, mais ça semble fonctionner plutot pas mal :)

@++
 ♫ Il suffirait de presque rien...

10 réponses

  • Votes
  • Date
  • Date décroissante
  1. Webmaster
    Au passage, j'en profite pour rajouter que ça serait pas mal que le TEXTAREA soit un peu plus grand en hauteur ;-)
     ♫ Il suffirait de presque rien...
    1. Contributeur
      Et en largeur :o)

      .  .  Ce post a été écrit entièrement
      \_/  avec des molécules recyclées
      1. Webmaster
        ha ?
        Moi ça me va la largeure :)
        par contre, un petit controle ActiveX pour lancer Word :)
         ♫ Il suffirait de presque rien...
      2. Contributeur
        Arg non! Surtout pas, j'ai ce truc que sur mon PC de boulot et c'est deja trop pour moi :o)

        .  .  Ce post a été écrit entièrement
        \_/  avec des molécules recyclées
      3. Webmaster
        @teeboBah pas grave, avec ton SP2 tout neuf tu ne veras pas de changement :-D
         ♫ Il suffirait de presque rien...
    2. Contributeur
      Il est sur mon perso pas sur mon pro :o)
      Je vais attendre qu'ils nous l'impose ici pour le mettre chez moi, entre temps ils devront resoudre pas mal de probleme et je saurais a qui m'adresser pour les miens apres :o)

      .  .  Ce post a été écrit entièrement
      \_/  avec des molécules recyclées
      1. Webmaster
        Je crois que c'est plus sage en effet :)

        Vivement debut septembre qu'on ai plus de réaction suite à l'installation du SP2, je serais ravi de savoir si ce qui t'es arrivé est assez isolé, ou si ça risque de poser probleme aux trois quarts des utilisateurs.

        J'ai l'impression qu'installer le SP2 sur un machine juste pour la mettre a jour n'est pas immaginable pour le moment, visiblement, il faut mieux installer le SP2 sur un systeme fraichement installé... :-/
         ♫ Il suffirait de presque rien...
      2. Contributeur
        D'autant que au niveau securite je suis tranquille, rien ne peux arriver sur ce PC, tout est redirige sur ma slack sur mon serveur :o) Et en plus j'yi un routeur/fw donc...C'etait plus pour le fun et pour l'USB2 (que j'arrive pas a faire reconnaitre depuis des plombes)

        Je pense que tu as raison pour l'install aussi...Je te raconte pas pour ceux qui vont l'avoir directement par le update...
        Autre chose amusante, il "bouffe" tous les patch XP dans le panneau de desinstallation ...

        .  .  Ce post a été écrit entièrement
        \_/  avec des molécules recyclées
      3. Webmaster
        @teeboBen, oui, logiquement tout ces patch sont dans le SP2 maintenant,
        C'est pas plus mal dans un sens, la derniere fois que j'y ai jeter un oeil, je n'avais plus qu'une longue liste de patch dedans ;)
        Par contre, hote moi d'un doute... quand tu désinstalles le SP2, tu as besoin de tout repacher ?

         ♫ Il suffirait de presque rien...
      4. Contributeur
        @teeboPas eu le temps de verifier, ca me ferait chier quand meme :o(
        Enfin comme je le disais je suis bien protege par ailleurs donc pas dramatique...

        .  .  Ce post a été écrit entièrement
        \_/  avec des molécules recyclées
      5. Webmaster
        @teeboYop, pas dramatique pour toi puisque tu sais ou tu mes les pieds :-)
        Mais si ça désinstalles les patch, et que ça pose tant que ça de probléme, on risque fort d'avoir une seconde fois, la floppé de vers et autres...
        J'espere pas, mais, avoir l'effet totalement inverse que celui attendu par microsoft, ce n'est pas totalement exclus :(

         ♫ Il suffirait de presque rien...
    3. Webmaster
      Bonche :)

      Je fais que le remonter ;)
       ♫ Il suffirait de presque rien...
      1. Modérateur
        tiens, un vacancier !

        _______
        Sergio
      2. Webmaster
        @Sergeraté... a fini vacances :(
         ♫ Il suffirait de presque rien...
    4. Webmaster
      je suis le seul que ça énerve ? :(
       ♫ Il suffirait de presque rien...
      1. Contributeur
        Je n'ai pas constaté les "phénomènes" que tu décris ci-dessus (enfin je n'y ai pas trop fait attention), mais ce qui me gêne (silonpeudir) avait été évoqué ici :
        http://www.commentcamarche.net/forum/affich-575028

        Exemple :
        En voulant mettre un texte en gras et en italique, j'obtiens ceci :

        <gras>texte</gras><ital></ital>
        1. Webmaster
          arf , oui ça c'est encore autre chose!

          Dans le poste du dessus, c'était même quand tu fesais la premiere insertion (<gras>)
          faire en sorte que ça reste selectionner, ça peut etre pas mal, mais ça dépend de la façon dont tu rédiges tes messages, si tu ecrit tout et qu'ensuite tu mets en forme, c'est valable, si tu met en forme au fur et a mesure, ça ne l'est plus...

          C'est justement ce que je sous entendais ici:
            // repositionnement cuseur aprés la balise fermante
            // peut être grandemant amélioré ;-)
            txtObj.selectionStart = pos; 
            txtObj.selectionEnd = pos;


          Le probleme du scroll, c'est uniquement pour mozilla, sous IE, ça se passe sans soucis, c'est peut-etre pour ça que tu ne le vois pas :)
           ♫ Il suffirait de presque rien...
        2. Contributeur
          En effet...

          Le "problème" que je mentionne ci-dessus ne survient qu'avec IE, car le texte reste selectionné après l'ajout des balises.

          Enfin c'est pas hyper grave :-)

          J'allais voter pour l'augmentation de la surface d'écriture, mais je viens de m'apercevoir qu'elle a eu lieu ;-)

          Merci Jeff :-)
        3. Contributeur
          Ben tiens, pour corriger ce problème, le code ci-dessous :
          ...
          if (ie==1) 
          	{
          		if (txtObj.createTextRange && txtObj.caretPos) 
          			{
          				var caretPos = txtObj.caretPos;
          			
          				if ( txtObj.caretPos.text == '') 
          					{
          						caretPos.text = ( ( enclose ) ? Tag + closeTag : Tag );
          						//caretPos.text.charat(caretPos.text.length - 1)  = ' ' ? Tag + closeTag +  ' ' : Tag + closeTag;
          		 		}
          
          	 			else 
          					{
          						caretPos.text = ( ( enclose ) ? Tag + caretPos.text + closeTag : Tag + caretPos.text );
           	 	 		}	
          
          				markSelection ( caretPos );
          
          		}
          
             		else if (txtObj.getSelection && txtObj.caretPos) 
          			{
          
          				txtObj.focus();
            	 			var caretPos = txtObj.caretPos;
          	 			caretPos.text = caretPos.text.charat(caretPos.text.length - 1)  = ' ' ? Tag + closeTag +  ' ' : Tag + closeTag;
          
          				markSelection ( caretPos );
          
          
          		}
          
          
             		else 
          			{
             				txtObj.value += Tag + closeTag;
          
          		}
          
          }
          ...
          pourrait être remplacé par celui-ci :
          ...
          if (ie==1) 
          	{
            		var str = document.selection.createRange().text;
            		txtObj.focus();
          		var sel = document.selection.createRange();
            		sel.text = Tag + str + closeTag;
            		return;
          }
          ...

          Et le code suivant pourrait être supprimé :
          onkeyup=markSelection(this); onclick=markSelection(this); onselect=markSelection(this); 
          (balise TEXTAREA)
          function markSelection ( txtObj ) {
          
          	if ( txtObj.createTextRange ) 
          		{
          			txtObj.caretPos = document.selection.createRange().duplicate();
          			//isSelected = true;
          	}
          
          	else if (txtObj.getSelection)
          		{
          			txtObj.caretPos = document.getSelection();
          	}
          
          	else return; 
          }
          :-)
      2. Webmaster
        Moi je vote POUR aussi !

                                           
        Jeff  \--Webmaster@CCM--/ 
        1. Webmaster
          Merci M'sieur! :)

          A puis y'a même plus de place!!! cool, Merci :)
           ♫ Il suffirait de presque rien...
        2. Webmaster
          @asevereNon c'est moi !

          Merci M'sieur asevere, grâce à vous, comme dirait l'autre :
          CCM is fully Mozilla-compliant ! :-)

                                             
          Jeff  \--Webmaster@CCM--/ 
      3. Modérateur
        voyons voir test yes!

        Ça va être dur de s'habituer à ne plus écrire les balises à la main. :-D

        Eaulive...
        Vaut mieux un p'tit piment qu'un avion en plastique
        1. Salut à tous !

          C'est cool ça :-)
          Merci !
            ___________________
            |__ .: Thom@s :. ___|
          1. Re,

            Ce serait cool si on pouvait avoir la même chose dans la FAQ, non ? :-)

            Merci Jeff :)
              ___________________
              |__ .: Thom@s :. ___|
          2. Webmaster
            @Thom@sTrés jsute, j'ai remarqué ça hier, mais j'ai oublié d'en reparler :)
             ♫ Il suffirait de presque rien...
          3. Contributeur
            @Thom@sToutafé ;)

            Et une petite augmentation de la surface d'écriture ne serait pas de refus :)
          4. Webmaster
            @Thom@sTout ceci est fait, merci à tous et en particulier à asevere pour les améliorations de code ! :-)

                                               
            Jeff  \--Webmaster@CCM--/ 
          5. @Jeffet merci à toi :-)
              ___________________
              |__ .: Thom@s :. ___|