Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Compteur de caractères

40 réponses
Avatar
Pascale
Bonjour à tous,

Je cherche je cherche je cherche encore depuis des semaines et ne trouve
pas.

Avant d'expliquer quoi, je dois dire que le Javacript m'est à peu près
aussi compréhensible que le chinois médiéval ou la physique quantique.

Pour un site dont je m'occupe, j'ai besoin d'un éditeur de texte WYSIWYG
simple et fiable. Après de multiples tests dans tous les sens, j'ai arrêté
mon choix sur l'un des plus simples, qui fait exactement ce que je veux
sans être une usine à gaz : Nicedit.
Seulement voilà, Nicedit n'a pas de compteur de caractères et j'ai beau en
essayer et en réessayer, aucun ne semble vouloir marcher, et j'avoue que ça
me désespère un peu.

Par exemple, le dernier en date que j'ai essayé d'intégrer est celui-ci
(source du compteur de caractères http://pagesperso-
orange.fr/bernard.langellier/info/ltexte3.htm) :

<head>...
<script type = "text/javascript">
function compter(f) {
var max=500;
var txt=f.descrtemp1.value +1;
var nb=txt.length;
var reste=max-nb;
if (nb>max) {
alert("Vous avez dépassé le nombre maximal de caractères qui est de "
+ max +".");
f.descrtemp1.value=txt.substring(0,max);
nb=max;
}
f.nbcar.value=nb;f.restcar.value=reste;
}
</script>
</head>
<body>
<h1>Test d\'éditeur WYSIWYG</h1>
<script type="text/javascript" src="nicEdit.js"></script>
<script type="text/javascript">
bkLib.onDomLoaded(function() { nicEditors.allTextAreas() });
</script>
<form name="form1" action="voirtest.php" method="post">
<textarea name="descrtemp1" rows="10" cols="100" width="100%"
onkeypress="compter(this.form)">'.$_SESSION['descrtemp1'].'</textarea>
<p>Nombre de caractères déjà affichés :
<input type="text" name="nbcar" />
<br />Nombre de caractères restants :
<input type="text" name="restcar" />
</p>
<input type="image" name="submit" src="images/visu.gif" align="middle"
alt="Visualiser">
</form>
</body>

Le nombre de caractères déjà affichés et restants est désespérément vide !

Franchement, je ne sais plus quoi faire, j'ai essayé des dizaines de
scripts et aucun ne marche (je suis bien incapable d'en écrire un moi-
même...).

Merci pour votre aide.

--
Pascale
http://www.la-grille-verte.net

10 réponses

1 2 3 4
Avatar
Pascal PONCET
Pascale a écrit :
En plus, je suis pas exigeante, tout ce que je demande c'est que les
utilisateurs puissent faire du gras, de l'italique, du souligné, justifié
comme ils veulent, taille et couleur de police à leur choix.
Éventuellement, insérer des listes ordonnées ou non ordonnées, des URL,
mais c'est même pas indispensable. Je demande même pas le chargement
d'images, ça, on le gère en PHP. Mais il me faut un compteur de
caractères...



Pendant que j'y pense, une question con : l'objectif est de limiter le
nombre de caractères visibles en lecture sur l'interface utilisateur, ou
de limiter la taille de l'enregistrement en BDD ?

Parce que, dans le premier cas, il faut juste compter les caractères saisis.
Alors que, dans l'autre, c'est tout le HTML qui compte ! (et c'est
peut-être plus simple, finalement)

Sinon, y a-t-il une page publiée (test ou prod) où on peut voir
fonctionner la bête, avec le compteur qui compte pas ?

@+,
Pascal et tjs pas de "e" ;-)
Avatar
Pascale
Pascal PONCET écrivait
news:4a636a85$0$294$:

Pendant que j'y pense, une question con : l'objectif est de limiter le
nombre de caractères visibles en lecture sur l'interface utilisateur,
ou de limiter la taille de l'enregistrement en BDD ?



L'option retenue est de compter les caractères en texte brut.

Parce que, dans le premier cas, il faut juste compter les caractères
saisis. Alors que, dans l'autre, c'est tout le HTML qui compte ! (et
c'est peut-être plus simple, finalement)



Je préfère la première option car les utilisateurs pourraient être surpris
de voir le compteur de caractères leur indiquer un nombre très supérieur à
ce qu'ils voient à l'écran. Ils pourraient même se sentir un peu floués.

Sinon, y a-t-il une page publiée (test ou prod) où on peut voir
fonctionner la bête, avec le compteur qui compte pas ?



Ça : http://www.lgv.on-web.fr/valinfotest/testnicedit.php
Mais c'est vraiment une vague ébauche d'une page qui, au final, sera bien
plus complexe.

--
Pascale
http://www.la-grille-verte.net
Avatar
SAM
Le 7/19/09 8:21 PM, Pascale a écrit :
SAM écrivait
news:4a636100$0$17777$:

Quand je dis que je hais ces éditeurs en ligne,



Moi aussi. Groar. Mais pour ce que je veux faire, je ne sais pas comment
m'en passer. À l'heure actuelle, les utilisateurs peuvent rentrer n'importe
quel gloubiboulga de HTML, c'est pas terrible non plus.



Heu ... nicEdit fait du html KK aussi
(peut-être moins que d'aucuns à la main?)

Je suis toujours avec mon minuscule programme :



Qui doit fonctionner, non ?

<?
session_start();
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<head><title>Tests</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
<style type="text/css">
BODY { background: #BBEFFF; color: navy; font-family:
Optimum,Helvetica,Verdana,sans-serif; font-size: medium; width: 80%;
margin: auto; text-align: center;}
</style>
</head>
<body>
<h1>Test d'éditeur WYSIWYG</h1>
<script type="text/javascript" src="nicEdit.js"></script>
<script
type="text/javascript">bkLib.onDomLoaded(nicEditors.allTextAreas);</script>
<form name="form1" action="voirtest.php" method="post">
<textarea name="descrtemp1" rows="10" cols="100"
width="100%">'.$_SESSION['descrtemp1'].'</textarea>
<textarea name="descrtemp2" rows="10" cols="100"
width="100%">'.$_SESSION['descrtemp2'].'</textarea>
<br>
<input type="image" name="submit" src="images/visu.gif" align="middle"
alt="Visualiser">
</form>
</body>
</html>';
?>

Et je suis même incapable d'utiliser l'option qui me permettrait de choisir
la liste des boutons à afficher.



Pour pas m'caser la tête j'emploie le "complet du site ;-)
(et comme ça j'ai même les images des boutons sans rien faire)

Penser tt de même à tout rapatrier.
(d'ici que le site change d'adresse ou que le fichier JS change de nom)

<script type="text/javascript"
src="http://js.nicedit.com/nicEdit-latest.js"></script>

<script type="text/javascript">
/* mise en place de l'éditeur avec boutons choisis */
/* attention! ça doit pouvoir placer un éditeur sur chaque textarea ? */

bkLib.onDomLoaded(function() {
nicEditors.allTextAreas(
{buttonList:[
'bold',
'italic',
'underline',
'subscript',
'left',
'center',
'right',
'justify',
'indent',
'outdent',
'ol',
'fontSize',
'fontFormat',
'forecolor',
'removeformat',
'link',
'unlink'
]
});
Pascale(); /* pour essayer d'avoir un comptage */
}
);
</script>


La buttonList est ordonnée (les boutons seront rangés suivant leur
succession dans la liste)

Pour mémoire,
Liste des boutons pour les options de la buttonList

* 'bold'
* 'italic'
* 'underline'
* 'left'
* 'center'
* 'right'
* 'justify'
* 'ol'
* 'ul'
* 'subscript'
* 'superscript'
* 'strikethrough'
* 'removeformat'
* 'indent'
* 'outdent'
* 'hr'
* 'image'
* 'upload' * requires nicUpload
* 'forecolor'
* 'bgcolor'
* 'link' * requires nicLink
* 'unlink' * requires nicLink
* 'fontSize' * requires nicSelect
* 'fontFamily' * requires nicSelect
* 'fontFormat' * requires nicSelect
* 'xhtml' * required nicCode


Théoriquement, tout est expliqué là : http://nicedit.com/demos.php?demo=2



Heu ... si ils appellent ça une explication ... sont pas difficiles !

<couine>
Mais avec moi ça marche jamais.
</couine>

là j'ai collé :
"Pour un beau test, c'est un beau test, je ne vous dis"
et voilà comment l'éditeur l'édite :
<pre id="line1">Pour un beau test, c'est un beau test, je ne vous
dis</pre>



<pre> ? Je la connaissaisi pas, celle-ci...



Si, si, tu l'as comme choix dans le bouton-menu [Font Format]

La balise PRE utilise une police à empattement fixe (courier par ex.)
Les espaces y sont tous insécables par nature (sans mettre &nbsp;)
Elle ne peut être dans un P. (comme les OL, UL, DL)


Bon ... je n'arrive décidément pas à faire le ménage dans le code que
produit nicEdit afin de limiter le nombre de caractères
(déjà éliminer les 4 du début ... ?! ensuite supprimer les <br> inutiles
dont le 1er (les 4 caractères du début, quand on met à vide).
Dès qu'on tape, le <br> se met à la suite (là où il ne sert à rien), la
RegExpr arrive alors à l'éliminer du comptage


--
sm
Avatar
Pascal PONCET
Pascale a écrit :
Je préfère la première option car les utilisateurs pourraient être surpris
de voir le compteur de caractères leur indiquer un nombre très supérieur à
ce qu'ils voient à l'écran. Ils pourraient même se sentir un peu floués.



Tu n'es pas la première à te casser le nez sur ce problème :
http://nicedit.com/forums/search.php (mot clé "counting")

Et, apparemment, personne n'a trouvé de solution avec cette librairie !

As-tu tenté une recherche Web avec des mots clé comme "éditeur
javascript wysiwyg comptage caractères" ou assimilés ?

@+,
Pascal
Avatar
Pascal PONCET
Pascal PONCET a écrit :
Et, apparemment, personne n'a trouvé de solution avec cette librairie !



Le même problème a été rencontré avec TinyMCE, et quelqu'un aurait
trouvé une solution :
http://tinymce.moxiecode.com/punbb/viewtopic.php?pidB404#p42404

Même chose avec FCKEditor, mais pas de solution fiable (l'éditeur
surcharge les évènements "onkey...", ce qui doit être assez courant dans
ces bibliothèques).

Mais beaucoup de questions restent avec l'idée même de compter, voire
limiter, le nombre de caractères dans un éditeur wyziwyg :
* C'est quoi un "caractère" en wyziwyg ? Une image compte pour deux ?
* Comment on traite les entités ? Et spécialement "&nbsp;" ?
* Comment établir le rapport de longueur entre le brut et le HTML ? Au
pifomètre genre 1/1.5 comme j'ai vu ailleurs ?
* Si la limitation est uniquement visuelle (la place que prendra le
texte saisi lorsqu'il sera affiché), ne faut-il pas plutôt mesurer la
taille en pixels ?

Je me demande, finalement, si le plus sage ne serait pas de chercher des
exemples en production sur des sites musclés (avec un gros staff de
développeurs derrière).
Si tu n'en trouve pas, alors un conseil : laisse tomber ! (c.à.d.
abandonne soit le comptage, soit le wysiwyg)

@+,
Pascal
Avatar
Mickaël Wolff
Pascale a écrit :
Merci... Mais... question bête (une de plus) : que veux-tu dire par
« gestionnaire spécifique » ?...



J'entendais pas ce concept qu'il faut peut-être indiquer à NicEdit
une fonction (qui sera le gestionnaire) à déclencher lorsque l'événement
que tu souhaites intercepter intervient. Cet événement étant l'ajout
d'un caractère à ta zone d'édition.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Avatar
SAM
Le 7/20/09 6:59 PM, Mickaël Wolff a écrit :
Pascale a écrit :
Merci... Mais... question bête (une de plus) : que veux-tu dire par «
gestionnaire spécifique » ?...



J'entendais pas ce concept qu'il faut peut-être indiquer à NicEdit une
fonction (qui sera le gestionnaire) à déclencher lorsque l'événement que
tu souhaites intercepter intervient. Cet événement étant l'ajout d'un
caractère à ta zone d'édition.



Tu as regardé comment pouvait se KKbouiller cette zone d'édition ?
(le code des balises oubliées, les <br> inutiles ... qui peuvent ensuite
disparaitre lors d'une autre action successive)

Pourtant, au final l'éditeur envoie bien sa copie au textarea avant envoi.

Le gestionnaire serait un truc qui intercepterait les frappes clavier ?
pour engranger le texte pur ?

Bon ça, finalement, à partir du code formaté de l'éditeur, on arrive à
extraire les caractères et leur nombre.
La difficulté est de gommer le dernier caractère surnuméraire du fatras.
(surtout quand on ne sait où est stocké ce fatras (variable ?)

si je fais

editeur.innerHTML = correction(editeur.innerHTML)

dans Fx, le pointeur se met au début du texte, pas glop!

Quelle est la fonction dans nicEdit qui insére ce code-rich-texté ?


--
sm
Avatar
Pascale
Pascal PONCET écrivait
news:4a643f73$0$290$:

Tu n'es pas la première à te casser le nez sur ce problème :
http://nicedit.com/forums/search.php (mot clé "counting")



Comme de juste, le pseudo de la sorcière, c'est moi (-:

Et, apparemment, personne n'a trouvé de solution avec cette librairie !



Exact, je n'étais pas la première à poser la question.

As-tu tenté une recherche Web avec des mots clé comme "éditeur
javascript wysiwyg comptage caractères" ou assimilés ?



J'en ai tenté plein, mais pas forcément celle-ci...

--
Pascale
Avatar
Pascale
Pascal PONCET écrivait
news:4a64508e$0$291$:

Pascal PONCET a écrit :
Et, apparemment, personne n'a trouvé de solution avec cette librairie !



Le même problème a été rencontré avec TinyMCE, et quelqu'un aurait
trouvé une solution :
http://tinymce.moxiecode.com/punbb/viewtopic.php?pidB404#p42404



Je connais ce fil de discussion (le Félix, ça a pas l'air d'être un rigolo,
même avec un plein panier de montres, j'oserais pas lui demander l'heure).

Même chose avec FCKEditor, mais pas de solution fiable (l'éditeur
surcharge les évènements "onkey...", ce qui doit être assez courant dans
ces bibliothèques).



C'est bien ce qui me semblait. De plus, j'ai fait plein de tests avec
FCKEditor, TinyMCE, NicEdit, et j'en ai même essayé quelques autres...
Mais je suis trop nulle en Javascript pour adapter le moindre truc (en PHP,
quand je ne trouve pas par moi-même de solution à mes problèmes, je
commence par chercher dans l'aide PHP, et si je ne trouve pas, je demande :
je suis généralement capable de comprendre et d'adapter ce qu'on m'explique
(Olivier, ricane pas trop fort, STP) (-: Mais avec le JS, je suis paumée.

Mais beaucoup de questions restent avec l'idée même de compter, voire
limiter, le nombre de caractères dans un éditeur wyziwyg :
* C'est quoi un "caractère" en wyziwyg ? Une image compte pour deux ?



Pas d'image dans ce cas : le chargement des images est traité en PHP. Pour
moi, un caractère, c'est tout bêtement une lettre, un chiffre, un signe de
ponctuation, un espace...

* Comment on traite les entités ? Et spécialement "&nbsp;" ?



Dans la base, toutes les entités sont enregistrées comme ça (&nbsp; &amp;
&quote;...) mais pour l'utilisateur, autant que possible, je préfère
compter le nombre de caractères affichés, ce qu'il voit concrètement à
l'écran.

* Comment établir le rapport de longueur entre le brut et le HTML ? Au
pifomètre genre 1/1.5 comme j'ai vu ailleurs ?



Les données sont stockées dans un champ text, le but de la limitation est
simplement d'éviter que certains ne nous recopient l'intégralité de leur
site internet, ou en tout cas, qu'ils nous mettent des tartines de texte
incompatibles avec l'objet de ces « pages de présentation » (on appelle ça
comme ça).

* Si la limitation est uniquement visuelle (la place que prendra le
texte saisi lorsqu'il sera affiché), ne faut-il pas plutôt mesurer la
taille en pixels ?



J'avoue que ça ne m'était pas du tout venu à l'idée !

Je me demande, finalement, si le plus sage ne serait pas de chercher des
exemples en production sur des sites musclés (avec un gros staff de
développeurs derrière).
Si tu n'en trouve pas, alors un conseil : laisse tomber ! (c.à.d.
abandonne soit le comptage, soit le wysiwyg)



Le problème, c'est qu'on a à l'heure actuelle un truc qui marche MAIS :

- ce n'est pas du wysiwyg, simplement, lorsque l'utilisateur clique sur un
bouton, cela affiche les balises HTML correspondantes dans le textarea, et
le comptage de caractères marche (balises comprises).
- l'ensemble permet à l'utilisateur de rentrer n'importe quel gloubiboulga
de balises. Pas trop de problème de sécurité (nous contrôlons toute saisie
ou modification de données), mais l'affichage peut donner parfois des
bizarretés (et le code est moins que propre).
- et en plus, c'est passablement laid.

J'avais donc dans l'idée de faire quelque chose de plus « propre » et plus
présentable, mais sans revenir en arrière au niveau des fonctionnalités (en
particulier le comptage de caractères).

Récemment, j'ai référencé un (autre) site dans pas mal d'annuaires, je
connais peu de choses aussi agaçantes que ces formulaires où on peut
rentrer un descriptif, et une fois qu'on s'est fait suer à taper un texte
pas trop bancal, on se prend en message d'erreur comme quoi au lieu de 500
caractères, on a droit à 100. Il faut alors raccourcir et vérifier à chaque
fois si on déborde ou pas, c'est horripilant.

--
Pascale (toujours avec un e)
Avatar
Pascale
SAM écrivait
news:4a63c455$0$12639$:

Heu ... nicEdit fait du html KK aussi
(peut-être moins que d'aucuns à la main?)



Aussi pire, ça me paraît difficile... (:

Qui doit fonctionner, non ?



Voui (sauf que je suis incapable de sélectionner la liste des boutons que
je veux...).

Pour pas m'caser la tête j'emploie le "complet du site ;-)
(et comme ça j'ai même les images des boutons sans rien faire)



Et bien justement, il y en a quand même quelques uns que je voudrais virer
(-:

Penser tt de même à tout rapatrier.
(d'ici que le site change d'adresse ou que le fichier JS change de
nom)



Oui, en fait, je l'ai remis en local (j'aime pas faire appel à des fichiers
extérieurs, je trouve ça pas prudent).

<script type="text/javascript"
src="http://js.nicedit.com/nicEdit-latest.js"></script>

<script type="text/javascript">
/* mise en place de l'éditeur avec boutons choisis */
/* attention! ça doit pouvoir placer un éditeur sur chaque textarea ?
*/ [...]



Merci, je vais tenter ça...

Heu ... si ils appellent ça une explication ... sont pas difficiles !



Ah, donc ça vient pas QUE de moi (:

Si, si, tu l'as comme choix dans le bouton-menu [Font Format]

La balise PRE utilise une police à empattement fixe (courier par ex.)
Les espaces y sont tous insécables par nature (sans mettre &nbsp;)
Elle ne peut être dans un P. (comme les OL, UL, DL)



D'acc', je comprends.

Bon ... je n'arrive décidément pas à faire le ménage dans le code que
produit nicEdit afin de limiter le nombre de caractères
(déjà éliminer les 4 du début ... ?! ensuite supprimer les <br>
inutiles dont le 1er (les 4 caractères du début, quand on met à vide).
Dès qu'on tape, le <br> se met à la suite (là où il ne sert à rien),
la RegExpr arrive alors à l'éliminer du comptage



Moi qui espérais vaguement qu'il ferait un code pas trop pourri. Grmbl.

--
Pascale
1 2 3 4