Subversion Repositories wimsdev

Rev

Rev 3425 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. //-------------------------------------------------------------
  2. //  Nom Document : GFCURSOR.JS
  3. //  Auteur       : G.Ferraz
  4. //  Objet        : Gestion du curseur dans TEXTAERA et INPUT...
  5. //  Création     : 18.09.2006
  6. //-------------------------------------------------------------
  7. //  Mise à Jour  : 20.11.2006
  8. //  Objet        : Vilain BUG avec le retour chariot sous IE (*)
  9. //-------------------------------------------------------------
  10. //  Mise à Jour  : 04.06.2017
  11. //  Objet        : le texte selectionne etait oublie lorsque text_ contient des accolades (*)
  12. //                le curseur est positionne entre les deux accolades si il n'y a pas de texte
  13. //                selectionne
  14. //-------------------------------------------------------------
  15. //-(*)------------------
  16. function Get_NbrCR(txt_){
  17.   var NbrCR = 0;
  18.   var Pos = txt_.indexOf("\r\n");
  19.   while( Pos > -1){
  20.     Pos = txt_.indexOf("\r\n", Pos+2);
  21.     NbrCR ++;
  22.   }
  23.   return( NbrCR);
  24. }
  25. //----------------------------------
  26. function Cursor_SetPos( where_, pos_){
  27.   //-- Recup l'Objet
  28.   var Obj = document.getElementById( where_);
  29.   if( Obj){
  30.     Obj.focus();
  31.     if( typeof Obj.selectionStart != "undefined"){
  32.       Obj.setSelectionRange( pos_, pos_);
  33.     }
  34.     else{ // IE and consort
  35.       var Chaine = Obj.createTextRange();
  36.       Chaine.moveStart('character', pos_);
  37.       //-- Deplace le curseur
  38.       Chaine.collapse();
  39.       Chaine.select();
  40.     }
  41.     //-- Retour valeur Reelle placee
  42.     return( Cursor_GetPos( where_, pos_));
  43.   }
  44. }
  45. //----------------------------------
  46. function Cursor_GetPos( where_, pos_){
  47.   //-- Recup l'Objet
  48.   var Obj= document.getElementById(where_);
  49.   if( Obj){
  50.     //-- Focus sur Objet
  51.     Obj.focus();
  52.     if(typeof Obj.selectionStart != "undefined")
  53.       return Obj.selectionStart;
  54.     else{ // IE and consort
  55.       var szMark = "~~";
  56.       var Chaine = Obj.value;
  57.       //-- Cree un double et insert la Mark ou est le curseur
  58.       var szTmp = document.selection.createRange();
  59.       szTmp.text = szMark;
  60.       //-- Recup. la position du curseur
  61.       var PosDeb = Obj.value.search(szMark);
  62.       //-(*)- Supprime les retours Chariot
  63.       var szAvant  = Chaine.substring( 0 , PosDeb);
  64.       PosDeb -= Get_NbrCR( szAvant);
  65.       //-- Restaure valeur initiale
  66.       Obj.value = Chaine;
  67.       Chaine = Obj.createTextRange();
  68.       //-- Deplace le Debut de la chaine
  69.       Chaine.moveStart('character', PosDeb);
  70.       //-- Deplace le curseur
  71.       Chaine.collapse();
  72.       Chaine.select();
  73.       return( PosDeb);
  74.     }
  75.   }
  76. }
  77. //------------------------------------
  78. function Cursor_AddTexte(where_, txt_){
  79.   //-- Recup l'Objet
  80.   var Obj = document.getElementById( where_);
  81.   if( Obj){
  82.     //-- Focus sur Objet
  83.     Obj.focus();
  84.     if( typeof Obj.selectionStart != "undefined"){
  85.       //-- Position du curseur
  86.       var PosDeb  = Obj.selectionStart;
  87.       var PosFin  = Obj.selectionEnd;
  88.       //-- Recup. des Chaines
  89.       var Chaine  = Obj.value;
  90.       var szAvant = Chaine.substring( 0 , PosDeb);
  91.       var szApres = Chaine.substring( PosFin, Obj.textLength );
  92.       //-- Recup. texte selectionne
  93.       var szSelect = Chaine.substring( PosDeb, PosFin);
  94.       //-- Insertion du texte
  95.       if (txt_.indexOf("{") == -1) {
  96.         Obj.value = szAvant + szSelect + txt_ + szApres;
  97.       //-- Replace le curseur
  98.         Obj.setSelectionRange( szAvant.length + txt_.length, szAvant.length + txt_.length);
  99.       } else {
  100.          Obj.value = szAvant + txt_.substring(0, txt_.length-1) + szSelect + txt_.substring(txt_.length-1,txt_.length) + szApres;
  101.       //-- Replace le curseur
  102.          if( szSelect.length > 0) {
  103.            Obj.setSelectionRange( szAvant.length + szSelect.length + txt_.length+1, szAvant.length + szSelect.length + txt_.length+1);
  104.          }
  105.          else
  106.          { // curseur entre les deux accolades
  107.            Obj.setSelectionRange( szAvant.length + txt_.length-2, szAvant.length + szSelect.length + txt_.length-2 );
  108.          }
  109.        }
  110.       //-- Replace le Focus
  111.       Obj.focus();
  112.     }
  113.     else{ // IE and consort
  114.       //-- Recup. de la selection
  115.       var szSelect = document.selection.createRange().text;
  116.       //-- Si du Texte est selectionne on le remplace
  117.       if( szSelect.length > 0){
  118.         var Chaine = document.selection.createRange();
  119.         Chaine.text = txt_ ;
  120.         Chaine.collapse();
  121.         Chaine.select();
  122.       }
  123.       else{
  124.         var Chaine = Obj.value;
  125.         var szMark ="~~";
  126.         //-- Cree un double et insert la Mark ou est le curseur
  127.         var szTmp = document.selection.createRange().duplicate();
  128.         szTmp.text = szMark;
  129.         //-- Recup. la position du curseur
  130.         var PosDeb = Obj.value.search(szMark);
  131.         //-- Recup. des Chaines
  132.         var szAvant = Chaine.substring( 0 , PosDeb);
  133.         var szApres = Chaine.substring( PosDeb, Obj.textLength );
  134.         //-- Insertion du texte
  135.         Obj.value = szAvant + txt_ + szSelect + szApres;
  136.         //-- Repositionne le curseur
  137.         PosDeb += txt_.length;
  138.         //-(*)- Supprime les retours Chariot
  139.         PosDeb -= Get_NbrCR( szAvant);
  140.         //-- Recup de la Chaine
  141.         Chaine = Obj.createTextRange();
  142.         //-- Deplace le Debut de la chaine
  143.         Chaine.moveStart('character', PosDeb);
  144.         //-- Deplace le curseur
  145.         Chaine.collapse();
  146.         Chaine.select();
  147.       }
  148.     }
  149.   }
  150. }
  151. //-- EOF ------------------------------------------------------
  152.