[spip-dev] [Correctif] «Bug» Mozilla retour en haut de la textarea

Bonjour,

Le «bug» le plus génant lors de l'utilisation de la barre typo de SPIP est que sous Mozilla (contrairement à IE), lorsqu'on a un texte long et qu'on lui applique une mise en forme par la toolbar, la zone de texte se retrouve en haut :frowning:

J'ai cherché une solution et trouvée celle-ci :
1. mémoriser la position du scroll actuel (scrollTop)
2. après avoir modifié le contenu de la textarea, remettre la valeur du scroll mémorisée

En fichier joint, le fichier corrigé. J'en connais qui vont sauter de joie :wink:

Jacques

PS : Le diff sur /spip_barre.js (j'ai aussi corrigé un ; qui manquait et des tabulations):

--- D:\wwwrootDev\spip.net\spip\spip_barre.js Fri Aug 29 19:25:21 2003 UTC
+++ D:\wwwrootDev\spip.net\testspipcvs\spip_barre.js Sat Dec 4 13:26:54 2004 UTC
@@ -152,6 +152,7 @@
    var selLength = txtarea.textLength;
    var selStart = txtarea.selectionStart;
    var selEnd = txtarea.selectionEnd;
+ var selTop = txtarea.scrollTop;
    if (selEnd == 1 || selEnd == 2)
      selEnd = selLength;
    
@@ -159,7 +160,7 @@
    if (selEnd - selStart > 0 && (txtarea.value).substring(selEnd-1,selEnd) == ' ') selEnd = selEnd-1;
    
    var s1 = (txtarea.value).substring(0,selStart);
- var s2 = (txtarea.value).substring(selStart, selEnd)
+ var s2 = (txtarea.value).substring(selStart, selEnd);
    var s3 = (txtarea.value).substring(selEnd, selLength);

    // Eviter melange bold-italic-intertitre
@@ -172,6 +173,7 @@
    selDeb = selStart + open.length;
    selFin = selEnd + close.length;
    window.setSelectionRange(txtarea, selDeb, selFin);
+ txtarea.scrollTop = selTop;
    txtarea.focus();
    
    return;
@@ -179,8 +181,8 @@

  // Insert at Claret position. Code from
  // http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
- function storeCaret (textEl) {
- if (textEl.createTextRange)
- textEl.caretPos = document.selection.createRange().duplicate();
- }
+function storeCaret (textEl) {
+ if (textEl.createTextRange)
+ textEl.caretPos = document.selection.createRange().duplicate();
+}

spip_barre.js (5.66 KB)

Jacques PYRAT a écrit :

En fichier joint, le fichier corrigé. J'en connais qui vont sauter de joie :wink:

Un grand merci pour ce correctif, ce bug était effectivement plutôt exaspérant !

EZ