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
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
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)