Le forum geckozone... :?

Des problèmes qui n'en sont plus
Avatar de l’utilisateur
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51
Localisation : Le frigo scandinave
Contact :

Le forum geckozone... :?

Message par calimo » 24 févr. 2004, 11:34

Eh oui, vous avez jamais remarqué que quand vous mettez un smiley au milieu de votre texte, le curseur se déplace automatiquement à la fin du message ?
Bon ok, c'est un problème avec tous les forums phpbb (les plus anciens c'est encore pire), mais ça reste un problème (pas si grave que ça quand-même :lol: )

Avatar de l’utilisateur
PsyDk
Lézard à collerette
Messages : 317
Inscription : 23 sept. 2003, 09:41
Localisation : RP
Contact :

Message par PsyDk » 24 févr. 2004, 12:06

J'avais cherché la solution il y a quelques temps déjà pour insérer du text au milieu d'un textarea. Sous IE il y a l'attribut propriétaire « caretPos » qui donne la position du curseur, mais cet attribut n'existe pas sous Gecko.

Un moindre mal est donc de concaténer à la fin du contenu du textarea.

J'étais resté sur cette conclusion pendant un temps, sauf que sur un des forums que je fréquente, à l'édition d'un message, l'insertion en plein milieu fonctionne aussi sous Gecko !

Il faut donc que je vois ça de plus près pour voir comment ça a été programmé :)

Avatar de l’utilisateur
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59
Localisation : Bruxelles, Belgique
Contact :

Message par Benoit » 24 févr. 2004, 18:36

En ce qui concerne Geckozone, ai déjà corrigé ce script à la main pour qu'il insère le smiley au bon endroit et non à la fin. Je n'ai pas pensé à la position du curseur après coup, mais je vais voir ce que je peux faire. PsyDk si tu pouvais donner l'adresse du forum en question ça aiderait peut-être ;)

Avatar de l’utilisateur
Flore
Administratrice
Messages : 3556
Inscription : 19 nov. 2003, 23:04
Localisation : Lyon

Message par Flore » 24 févr. 2004, 18:48

Benoît, tu pourrais me transmettre la correction pour les smileys (et aussi pour les balises permettant d'entourer un texte sélectionné), que je la refile aux admins d'un autre forum qu'ils corrigent ça :D
Merci.
C'est pas la peine de me l'expliquer à moi, je n'y comprendrai rien, mais juste un truc simple que quelqu'un sachant le php et connaissant les forums phpBB puisse comprendre :D
Flore
iMac - Mac OSX + Nightly / Laptop Linux Mint + Nightly / Z3C FirefoxOS

Avatar de l’utilisateur
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59
Localisation : Bruxelles, Belgique
Contact :

Message par Benoit » 24 févr. 2004, 18:55

Il s'agit de changer la fonction emoticon, si je ne me trompe pas ce que j'ai ajouté c'est le premier if. Il y a certainement moyen de faire ça plus proprement (mon code fait plusieurs fois la longueur du code pour IE) mais ça fonctionne relativement bien (à part le curseur qui n'est pas au bon endroit à la fin).

Code : Tout sélectionner

function emoticon(text) {
	var txtarea = document.post.message;
	text = ' ' + text + ' ';
	if (txtarea.selectionEnd && (txtarea.selectionEnd > 0) && (txtarea.selectionEnd == txtarea.selectionStart)) {                      // XXX Ajout positionnement smilies mozilla
		var textLength = txtarea.textLength;
		var selStart = txtarea.selectionStart;
		var selEnd = txtarea.selectionEnd;
		var s1 = (txtarea.value).substring(0, selStart); // avant le curseur
		var s2 = (txtarea.value).substring(selEnd, textLength); // après le curseur
		txtarea.value = s1 + text + s2;
		txtarea.focus();
	}
	else if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		txtarea.value  += text;
		txtarea.focus();
	}
}
Note: on utilise les templates FI comme base, peut-être légèrement différents de ceux fournis avec phpbb par défaut.

Avatar de l’utilisateur
chBok
Iguane
Messages : 990
Inscription : 17 oct. 2003, 19:17
Localisation : France - Vendée

Message par chBok » 24 févr. 2004, 19:07

Une petite remarque, l'insertion de l'émoticon se fait bien à l'emplacement du curseur, SAUF s'il se trouve au tout début avec du texte après (cad à la position 0 de la chaine de texte).

Dans le test if (txtarea.selectionEnd && (txtarea.selectionEnd > 0)..., ne serait-ce pas un >=0 qu'il faudrait mettre :?:

Avatar de l’utilisateur
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59
Localisation : Bruxelles, Belgique
Contact :

Message par Benoit » 24 févr. 2004, 19:18

Effectivement, je ne parviens plus à me souvenir si j'ai fait ça exprès ou non :)

Ou alors j'ai déduit incorrectement que (curseur en 0 => boîte vide). À propos de la position du curseur, je viens de trouver "setSelectionRange" dans l'inspecteur DOM, je vais voir si je sais en faire queque chose.

Avatar de l’utilisateur
chBok
Iguane
Messages : 990
Inscription : 17 oct. 2003, 19:17
Localisation : France - Vendée

Message par chBok » 24 févr. 2004, 19:25

Une petite recherche sur google, et j'ai trouvé cette page qui explique comment faire avec les textarea... :wink:

Avatar de l’utilisateur
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59
Localisation : Bruxelles, Belgique
Contact :

Message par Benoit » 24 févr. 2004, 19:27

J'avais trouvé celles-ci :
http://www.faqts.com/knowledge_base/vie ... /aid/13562
http://www.xulplanet.com/tutorials/xultu/focus.html

Enfin bref ça devrait fonctionner dans une dizaine de minutes ;)

Avatar de l’utilisateur
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59
Localisation : Bruxelles, Belgique
Contact :

Message par Benoit » 24 févr. 2004, 20:03

Voilà, ça fonctionne parfaitement :

Code : Tout sélectionner

function emoticon(text) {
	var txtarea = document.post.message;
	text = ' ' + text + ' ';
	if (txtarea.selectionEnd && (txtarea.selectionEnd >= 0) && (txtarea.selectionEnd == txtarea.selectionStart)) {                      // XXX Ajout positionnement smilies mozilla
		var textLength = txtarea.textLength;
		var selStart = txtarea.selectionStart;
		var selEnd = txtarea.selectionEnd;
		var s1 = (txtarea.value).substring(0, selStart); // avant le curseur
		var s2 = (txtarea.value).substring(selEnd, textLength); // après le curseur
		txtarea.value = s1 + text + s2;
		txtarea.setSelectionRange(selEnd+text.length, selEnd+text.length);
		txtarea.focus();
	}
	else if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		txtarea.value  += text;
		txtarea.focus();
	}
}

Avatar de l’utilisateur
Kropotkine
Iguane
Messages : 693
Inscription : 20 févr. 2004, 20:46
Localisation : 1* $@ ^? 0=2 ~
Contact :

Message par Kropotkine » 24 févr. 2004, 23:41

Seul petit problème, mnt sur certaines pages, les messages et le cadre bleu qui les entoure ne s'affiche plus correctement, ils dépassent le cadre orange de limite de page ... :shock: :shock:
Xpower ! Image
Vive les Mac, MacOS X Panther et Safari, les logiciels libres et les mises à jour !

Avatar de l’utilisateur
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51
Localisation : Le frigo scandinave
Contact :

Message par calimo » 25 févr. 2004, 08:24

Waaa ! Génial :D Et en une seule journée en plus :shock:

On peut l'utiliser dans tous les forum phpBB ? Si c'est le cas il faudra rendre ce code public pour toutes leurs prochaines versions :wink:

En tous cas, félicitations Grand Maître du JavaScript Image Je suis vachement impressionné !

Avatar de l’utilisateur
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59
Localisation : Bruxelles, Belgique
Contact :

Message par Benoit » 25 févr. 2004, 09:49

Je l'ai modifié encore un peu pour qu'il fasse exactement la même chose qu'IE (insérer à la fin de la sélection si une partie du texte est sélectionnée)

Je vais renvoyer la modification sur forumimages.com et à phpbb mais rien ne prouve qu'elle sera acceptée.

Code : Tout sélectionner

function emoticon(text) {
	var txtarea = document.post.message;
	text = ' ' + text + ' ';
	if (txtarea.selectionEnd >= 0 && txtarea.setSelectionRange) {                      
		var textLength = txtarea.textLength;
		var selEnd = txtarea.selectionEnd; // to mimic IE, assume the caret is the end of the selection
		var s1 = (txtarea.value).substring(0, selEnd);
		var s2 = (txtarea.value).substring(selEnd, textLength);
		txtarea.value = s1 + text + s2;
		txtarea.setSelectionRange(selEnd+text.length, selEnd+text.length);
		txtarea.focus();
	}
	else if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		txtarea.value  += text;
		txtarea.focus();
	}
}

Avatar de l’utilisateur
PsyDk
Lézard à collerette
Messages : 317
Inscription : 23 sept. 2003, 09:41
Localisation : RP
Contact :

Message par PsyDk » 25 févr. 2004, 09:50

Nickel :)

Sinon sur le forum dont je parlais (Sky-O-MatiK) j'ai regardé le code et c'est aussi selectionStart et selectionEnd qui sont utilisés.

Avatar de l’utilisateur
Flore
Administratrice
Messages : 3556
Inscription : 19 nov. 2003, 23:04
Localisation : Lyon

Message par Flore » 25 févr. 2004, 10:14

Ca le fait aussi pour le texte sélectionné entouré de balises ? Je sais je suis exigeante, mais comme je pige pas grand chose, j'ai besoin d'un traducteur php=>français :roll:
Flore
iMac - Mac OSX + Nightly / Laptop Linux Mint + Nightly / Z3C FirefoxOS

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité