OK
AJAX error!

Les forumsGrammalecteGrammalecte dans une application web

Grammalecte dans une application web

Bonjour.

Je développe une application destinée à un usage dans navigateur (Firefox et Chrome/Chromium). Il s’agit d’un éditeur de texte WYSIWYG dans une div en « contenteditable ».

J’essaye donc d’utiliser l’API Web (code.grammalecte.net…), mais j’ai quelques difficultés et questions.

L’évènement GrammalecteResult ne se produit pas. Voici mon code :

const editor = document.getElementById('editor')
document.addEventListener('GrammalecteLoaded', function (e) {
__console.info('Grammalecte ' + oGrammalecteAPI.sVersion + ' est chargé.')
__oGrammalecteAPI.parseNode(editor)
})
editor.addEventListener('GrammalecteResult', e => console.log('OK'))


La console de Firefox retourne « Grammalecte 1.0 est chargé. ». J’ai bien l’extension sur mon navigateur. En revanche la version est 1.9.0 et pas 1.0. Mais c’est un détail. Le problème est que je n’obtiens pas « OK » dans la console, alors que dès que Grammalecte est chargé, je fais ceci : « oGrammalecteAPI.parseNode(editor) ». La console de Chromium ne retourne rien du tout alors que l’extension est bien présente (1.8.1). Quelle est l’erreur ? Dans mon HTML, j’ai ceci : « <div id="editor" data-grammalecte_button="false" data-grammalecte_result_via_event="true" contenteditable><p>Paragraphe 1.</p><p>Paragraphe 2. C'est cool ya des faute!</p></div> ».

Comme il peut être incommodant d’installer l’extension dans son navigateur, je pense peut-être me tourner vers une application logicielle (avec Electron.js et donc Node.js). Existe-t-il un serveur Node.js équivalent au serveur Python ? Si non et si je pouvais le développer, serait-ce possible ? Avez-vous des conseils ?

Merci d’avance.
le 24 avril 2020 à 12:13
Bonjour,

Je pencherais que votre problème vient d'un problème de version vu que l'api est récente, donc il faut bien avoir la dernière version d'installée.

Pour le serveur python vous pouvez le trouvez sur grammalecte.net…

Sinon j'avais rendu la version js compatible nodejs (je ne sais pas le status actuel vue que je n'ai pas fait de vérification depuis longtemps) donc si vous clonez les source vous retrouverez le nécessaire pour nodejs dans ./gc_lang/fr/nodejs à l'époque où j'avais fait les tests pour nodejs je m'étais fait une petite appli avec nwjs et ça fonctionnait sans problème donc pour l'intégrer à Electron ça devrait aussi être facile (sans devoir passer par un serveur) ;)
le 24 avril 2020 à 12:51
Bonjour,

Oui, le numéro de l’API est sans rapport avec le numéro de version de Grammalecte. A priori, l’API ne va pas changer à chaque version. Mais peut-être faudrait-il que ce numéro de version soit identique à celui de Grammalecte ? Je n’y ai pas vraiment réfléchi.

Je ne vois pas d’erreur dans votre code. Et je viens d’essayer chez moi, je reçois bien les événements envoyés.

Si vous utilisez Chrome, faut attendre que la version 1.9.0 de Grammalecte soit publiée… sinon ça ne fonctionne pas.

Enfin, non, pas version officielle pour NodeJS. J’avoue ne pas voir l’intérêt de refaire ce qui existe déjà en Python.

En fait, il n’existe même pas de package pour JavaScript, attendu qu’il n’est toujours pas possible d’importer de manière universelle un foutu paquet en JavaScript (ça fait un nombre incalculable d’années qu’on poireaute…).
Le problème, c’est qu’il existe une version d’importation différente pour Firefox, une Thunderbird (qui change par ailleurs parfois d’une version à l’autre), une pour NodeJS (pour autant que je sache)… Bref, c’est un bordel indescriptible, comme beaucoup de choses en JS, mais ce point-là en particulier m’irrite régulièrement au plus haut point.
Dernièrement, j’ai voulu réorganiser le code du moteur, et ça merdait avec la version Thunderbird pour une raison que je ne parviens pas à élucider. Comme j’ai constaté que les extension pour Thunderbird allaient une fois de plus être incompatibles avec la prochaine version, et que cette fois l’incompatibilité sera totale, j’ai décidé d’attendre pour réorganiser le moteur interne. Bref, il faudra réécrire l’extension pour Thunderbird une fois de plus, et cette fois l’importation sera la même que celle de Firefox, mais toujours pas universelle.

Pour en revenir à NodeJS, un contributeur avait commencé à écrire une adaptation pour NodeJS, mais je ne sais pas si c’est fonctionnel ou non. Comme il n’y a pas eu de mise à jour depuis longtemps, je présume que non. code.grammalecte.net…
le 24 avril 2020 à 13:03
Merci pour vos deux réponses.

C'est étrange; j'ai bien la dernière version de l'extension installée, à savoir la 1.9.0 sur Firefox 75. L'évènement n'a pas lieu.

@IllusionPerdu : J'ai pu récupérer le travail sur Node.js dans gc_lang/fr. Je ne sais pas trop comment l'intégrer à mon projet. Dans les readme.md, il est dit qu'il faut faire des installations (npm install grammalecte-cli -g et npm install grammalecte), mais sur npm il n'y a rien de tel. Pouvez-vous m'indiquer la marche à suivre ?

@Admin : Pour le numéro de version, je n'avais pas pensé qu'il y en avait un pour l'API et un pour l'extension. Il pourrait éventuellement être pratique de pouvoir récupérer le numéro de version de l'extension via l'API. Il me semble plutôt bien qu'il y ai deux numéros distincts.
Je ne suis pas sûr de saisir ces problèmes d'import universel de paquet JavaScript, mais j'ai déjà eu l'occasion de voir des "Javascript sucks" dans la console du navigateur ou dans le code ^_^. Peut-être existe-t-il une alternative ?
le 24 avril 2020 à 18:16
Pour l’importation des modules, il y a importScript, require et un autre require parce que même fonction, mais pas le même chemin, il y avait aussi Chrome.utils.import() et diverses déclarations ésotériques à faire dans un manifeste, sans compter les autres possibilités parfois envisageables via XUL, un genre de pseudo-HTML.
Pour l’instant, il n’est pas possible d’utiliser les modules de ES6 avec import/export.
Et oui, j’ai dû me lâcher une paire de fois dans les commentaires du code, parce que j’ai vraiment vu rouge plus d’une fois avec ces conneries. J’ai hâte d’en finir avec tout ça.
le 24 avril 2020 à 19:11
@diatomee en fait il faut récupérer les sources (lien d'aide : code.grammalecte.net… )
Ensuite il faut que tu le construises (il faut avoir python 3.8).

Puis dans le répertoire "_build" tu as un répertoire "nodejs\fr" il contient un fichier note.md pour indiquer les commandes qu'il faut taper (et oui vu que les paquets ne sont pas sur npm les commandes diffère de l'installation standard)

Tu verras dans "cli\bin" il y a un petit script en ligne de commande pour utiliser Grammalecte (info dans le fichier readme.md) tu peux t'en inspirer pour ton application electron.

@Admin après test, il fonctionne toujours sous nodejs ;)
le 25 avril 2020 à 02:07
Je compatis @Admin.

Merci @IllusionPerdu. J'ai réussi à lancer gramma-cli.js, mais pour l'usage j'ai une erreur : Cannot find module 'grammalecte'. Il y a sûrement de quoi s'inspirer avec ce code, mais j'ai l'impression que je ne vais pas m'en sortir à cause de compétences qui m'échappent.

Dans ma réflexion, j'en suis à entrevoir ses possibilités :

1. Utiliser le serveur Grammalecte en local et lancer mon application Node.js en parallèle (puis envoyer des requêtes pour vérifier le texte saisi dans mon application).
2. Parvenir à tout intégrer directement à mon application Node.js.

La première solution me simplifie la vie. La seconde simplifie celle des utilisateurs. Je préfère privilégier la seconde, à moins qu'il soit possible et pas trop complexe de communiquer avec Python en JavaScript.

Je n'ai pas trouvé la documentation pour utiliser le serveur Grammalecte. Je parviens à effectuer des requêtes GET, mais les POST ne renvoient rien. Pour ce faire j'utilise le module "axios" (www.npmjs.com…) :

axios.post('localhost… 'Bonjour la famile.')
.then(response => console.log(response))
.catch(error => console.log(error))


J'obtiens bien une réponse, mais elle ne contient rien indiquant la faute sur le mot "famille".
le 25 avril 2020 à 10:48
Quand j'avais fait l'adaptation pour nodejs j'avais fait en sorte de séparé le code de la cli et du core (pour éventuellement pouvoire faire plusieurs programme qui utilise grammalecte et avoir a installer une seul fois grammalecte) d'où les commande qu'il y a dans le note.md.

Pour te simplifier le dev tu peux par copier le rep "core" dans le répertoire "cli" et ajuster le fichier "cli/bin/gramma-cli.js" ligne 519 "var GrammarChecker = require("grammalecte");" et la remplacer par "var GrammarChecker = require("../core/api.js");" comme ça tu as tout dans un même répertoire ;) et tu n'as plus besoin de taper les commandes du note.md

Une fois que tu as bien compris comment fonctionne les require sous node et fait l'ajustement précédant ton

2. Parvenir à tout intégrer directement à mon application Node.js.


Te simplifie la vie et celle de tes utilisateurs mdr
le 25 avril 2020 à 11:14
À mon avis, les utilisateurs se moquent de savoir si le serveur est en Python ou en JavaScript, ou si ça passe par une extension installée dans leur navigateur, et je ne comprends pas vraiment cette logique soi-disant simplificatrice. Mais peu importe, chacun peut bien faire comme il l’entend. Je conçois tout à fait que certains préfèrent telles solutions à d’autres, je peux raisonner de la même manière.

Pour voir ce que peut faire le serveur, tu peux le lancer avec l’option -t et aller sur localhost:8080 pour voir les commandes existantes.

À nouveau, je ne reproduis pas le problème avec POST, et “famile” est bien identifié comme erreur orthographique.
le 25 avril 2020 à 12:27
Parfait @IllusionPerdu ! Grâce à votre aide, j’ai pu intégrer le module dans mon application et il semble bien fonctionner. Je récupère les erreurs du texte dans la console pour le moment, avec l’API bien pratique. Je n’ai auparavant jamais pris le temps de regarder au fonctionnement de require et j’ai compris quelques petites choses au passage.

J’ai encore deux questions pour finir.

1. Étant donné qu’il s’agit d’un éditeur WYSIWYG, mon texte à analyser est formaté en HTML. Je vois que dans l’API il y a des fonctions concernant « TextFormatter ». Est-ce qu’elles peuvent me servir à analyser le HTML et à renvoyer les positions des erreurs en incluant les balises dans les compteurs ? Si oui, comment ? Si non, existe-t-il un module ou un script pour le faire ? Je suppose qu’il y en a un d’inclus pour LibreOffice Writer vu qu’il faut analyser également du HTML.

2. J’aimerais créer un mode « automatique » dans mon application. Il permettrait de rafraîchir fréquemment le soulignement des erreurs dans le texte. Je pense à faire une requête trois secondes après que l’éditer ait pris fin (écrire, effacer, copier, coller, couper). Voyez-vous mieux comme façon de procéder ? On pourra écrire de longs romans dans ce logiciel et peut-être faudra-t-il aussi limiter l’analyse à une zone pour des questions de performances.
le 25 avril 2020 à 16:22
1. Non, le formateur de texte n’a aucun rapport avec le HTML. C’est un outil de correction automatisé des erreurs typographiques. Ce qui évite d’avoir à corriger toutes les apostrophes et guillemets manuellement, ainsi que des tas d’autres erreurs du même genre.

Le moteur de Grammalecte peut cependant analyser un texte en ignorant les balises HTML, même si c’est rudimentaire (et peu testé). En gros, en interne, pour l’analyse, le processeur de texte supprime les balises et fait comme si elles n’étaient pas là.

2. Je ne suis pas sûr de comprendre votre mode “automatique”. Parlez-vous du rafraîchissement de l’analyse du texte ou d’un mode qui corrige automatiquement les erreurs sans consulter l’utilisateur ?
Pour le premier cas, vous pouvez regarder ce que fait l’extension Grammalecte dans le panneau de correction. Trois secondes sans taper de texte provoque une réanalyse automatique du paragraphe en question. Mais en gros, c’est assez simple. Chaque modification du texte amorce un Timer de 3 secondes, qui est annulé par toute modification de texte et recréé aussitôt.
Pour le second cas, il y a justement le formateur de texte qui fait ça, mais ça ne concerne qu’une partie des erreurs typographiques, celles qui ne sont pas trop risquées. La plupart des autres erreurs sont trop douteuses pour automatiser la correction de texte.
le 25 avril 2020 à 16:55
Merci @Admin.

1. Dans ce cas, je peux peut-être envoyer mon texte directement purgé du HTML (avec editor.textContent au lieu de editor.innerHTML). Mais comment vais-je pouvoir souligner correctement les erreurs dans le texte avec du HTML, vu que les positions ne correspondront pas ?

2. Je parle du rafraîchissement de l'analyse du texte. Ce serait à l'utilisateur de corriger ou non les parties soulignées. En revanche, il pourrait y avoir une option pour convertir automatiquement les apostrophes et les guillemets (avec le formateur de texte, à ce que j'ai compris).
le 25 avril 2020 à 17:47
1. Si vous passez le “textContent” il est évident que le positionnement des erreurs ne correspondra pas au contenu en HTML.
Vous pouvez passer le “innerHTML” et Grammalecte vous renverra les erreurs avec le positionnement correct. La suppression des balises se fait en interne. Mais c’est un processus basique, il n’y a pas d’analyse du code HTML, juste un remplacement des balises par des espaces.
Cela dit, pour ma part, je vous recommande vivement de scinder votre texte en paragraphe (c’est-à-dire avec des retours à la ligne), avant de demander une analyse. Si votre HTML tient en une seule ligne, ce sera vu comme un seul paragraphe.
Pour Grammalecte, une ligne = un paragraphe.

2. Le formatage réécrit le texte et ça peut modifier la position des tokens, en supprimant ou ajoutant des espaces, en créant des ligatures ou autres modifications diverses. Ça ne peut pas servir pour ce que vous voulez faire.
le 25 avril 2020 à 19:19
Merci pour ces réponses et Grammalecte. Je reviendrai ici si j'ai à nouveau des questions.
le 25 avril 2020 à 20:42
Bonjour.
Me revoici avec deux nouvelles questions.

Pour rappel, ma zone d'édition est une div avec la propriété "contenteditable". Voici ce que j'y ai mis :

<div id=editor contenteditable spellcheck=false>C'<b>est</b> moi!</div>

1. Sans les balises de gras (<b>...</b>), Grammalecte détecte bien qu'il faudrait mettre une apostrophe typographique à "C'", mais avec, il souligne juste "'" et dit qu'il faudrait le remplacer par des guillemets typographiques fermants. Je suppose que cela est du au fait que les caractères de balises sont remplacés par des espaces (comme vous l'écriviez plus haut). Alors comment procéder ?

2. Je ne parviens pas à détecter qu'il y a une espace insécable manquante avant le point d'exclamation. Quelle partie de Grammalecte permet de dégoter cette erreur ?
le 01 mai 2020 à 16:27
Bonjour,

1. Oui, les balises HTML sont remplacées par des espaces. Pour le correcteur, il y a donc trois espaces entre `C'` et `est`, ce qui est trop pour qu’il considère qu’il s’agisse du problème qui nous concerne.

Pour l’instant, il n’y a pas moyen de corriger ce problème. À moins de recréer des tas de règles pour tenir compte de ça.

Tout ce qui est de l’ordre de la typographie est réalisé dans la première moitié de l’analyse, paragraphe par paragraphe, avec des expressions régulières.
Le problème concerne éventuellement environ 200 règles sur 8000.

2. L’option “espaces insécables”…
le 01 mai 2020 à 21:16
J’ai modifié quelques règles pour tenir compte de ces cas-là.
Les apostrophes erronées seront détectées.
le 01 mai 2020 à 21:57
Parfait. Peut-être est-il mieux que j'envoie le texte sans HTML puis que je me débrouille pour retrouver les positions des erreurs ?
le 01 mai 2020 à 22:15
Il est certain que le correcteur se comporte mieux quand il n’y a pas trop d’éléments textuels “parasites” pour brouiller l’analyse. Pour les questions typographiques les espaces comptent. Pour la plupart des autres règles, ça ne compte pas, mais de temps en temps si.

Par exemple, si vous écrivez « viens tu », le nombre d’espaces entre les deux mots est vérifié avant de proposer un trait d’union. S’il y une balise HTML entre les deux, la soudure ne sera pas proposée, car même supprimée les espaces seront trop nombreux.
le 01 mai 2020 à 23:45

Notification par e-mail    0