C411 - Emojis Plus
Ajoute des packs d'émojis dédiés par canal au sélecteur d'émojis
des messages de c411.org, avec présélection
automatique quand on est dans un canal couvert, et une barre de
recherche transverse pour retrouver un émoji par mot-clé sans
parcourir les onglets. Six packs couvrent aujourd'hui les principaux
canaux thématiques.
Le problème
Le sélecteur d'émojis natif du chat C411 propose quatre onglets
génériques : Visages, Cœurs, Populaires, Gestes. Ils couvrent
l'essentiel de la conversation courante, mais il manque deux choses :
- quand on discute dans un canal thématique (Audio, Ebook, Vidéo…),
on aimerait avoir des émojis adaptés au contexte ;
- quand on a un émoji précis en tête, il faut parcourir les onglets
pour le retrouver - pas de recherche par mot-clé.
La solution
Le script ajoute deux choses au sélecteur d'émojis natif :
- une barre de recherche tout en haut du picker, présente sur
tous les canaux du chat, visible dès l'ouverture (avant même
le dépliage des onglets), focus automatique, filtre instantané
sur les mots-clés ;
- sur les canaux couverts par un pack, un onglet
supplémentaire en première position dans le sélecteur, qui est
présélectionné à l'ouverture - donc le premier clic affiche
directement la grille thématique.
Packs disponibles :
- #Audio (canal 13) - instruments, lecture, vibes : 🎵 🎶 🎼 🎤 🎙️
🎧 🔊 🔉 🎸 🎹 🥁 🎺 🎷 🎻 🪕 🪗 🪘 📀 💿 📻 🎚️ 🎛️ ▶️ ⏸️ ⏯️ 🕺 💃 🤘
😎 🔥 ⚡ ✨
- #Vidéo (canal 12) - cinéma, lecture : 🎬 🎥 🎞️ 📽️ 📹 📺 🍿 🎦
▶️ ⏸️ ⏹️ ⏮️ ⏭️ 🔊
- #Ebook (canal 14) - livres, lecture, écriture : 📚 📖 📕 📗 📘
📙 📓 📔 📒 📑 📰 🗞️ 👓 🕶️ 🔍 🔎 ✏️ ✒️ 🖊️ 🖋️ 🖌️ 📝 📌 📍 📎 🔖 💡
🧠 🎓 🤓 🖥️
- #Application (canal 15) - matériel, dev, sécurité : 💻 🖥️ ⌨️ 🖱️
🖨️ 💾 💿 📀 📱 📲 ☎️ 📞 📟 📠 📧 💬 🔌 🔋 🖲️ 🕹️ 🎮 ⚙️ 🔧 🔨 🐍 ☕ 🔐
🔒 🗝️ 🔑 📊
- #Jeux vidéo (canal 16) - contrôleurs, combat, butin : 🎮 🕹️ 👾
🎯 🎲 🃏 🏆 🥇 💣 🔫 🗡️ 🛡️ ⚔️ 🔥 ⚡ 💥 💎 💰 🪙 🎁 📦 🗺️ 🧭 🔓 🏅 🎪
🌟 ✨ 💫 🎆 🎊 🎉
- #XXX (NSFW) (canal 20) - le tout-venant adulte : 🍆 🍌 🥒 🥕 🍑
🍒 🍄 💦 💧 🌊 🚿 🛁 🌺 🌹 👅 💋 🔥 🌶️ 🥵 😏 😈 🐰 🦶 🌷
D'autres packs pourront être ajoutés au fil des suggestions de la
communauté.
La barre de recherche
Tout en haut du picker, au-dessus de la rangée des émojis populaires
et du bouton de dépliage. Dès que le picker s'ouvre, le focus est
automatiquement placé dans le champ - il suffit de taper pour
filtrer, sans cliquer.
- Environ 250 émojis indexés : tous ceux des packs, plus une
sélection bonus (visages courants, cœurs colorés, mains/gestes,
symboles populaires) que le picker natif n'expose que par parcours
manuel.
- Insensible aux accents et à la casse :
cafe, café et
CaFe matchent indifféremment ☕.
- Match en sous-chaîne :
guitar trouve guitare 🎸, coeur
trouve toute la palette ❤️ 🧡 💛 💚 💙 💜 🖤 🤍 🤎 💔 …
- Touche
Entrée : insère ou réagit avec le premier
résultat et ferme le picker. Idéal pour un usage clavier rapide.
- Touche
Echap : vide la recherche, le picker reprend son
affichage normal.
- Pendant une recherche, tout le contenu natif (rangée
populaires, onglets, grille) est temporairement masqué - la grille
de résultats prend toute la zone. Une fois la recherche effacée,
le picker retrouve exactement l'état précédent.
Quelques exemples : feu → 🔥, salut ou coucou → 👋, rire →
😂, merci → 🙏, pouce → 👍 👎, cool → 😎 🤙 🕶️, yeux → 👀.
Comportement transverse
Le comportement (packs comme recherche) est identique entre :
- le smiley de la barre de saisie (insère l'émoji dans le message
en cours d'écriture, à la position du curseur),
- le smiley qui apparaît au survol d'un message (envoie l'émoji
comme réaction au message ciblé).
Les onglets natifs restent accessibles : un clic sur Visages,
Cœurs, etc. bascule normalement vers la grille native ; un nouveau
clic sur l'onglet du pack ramène la grille thématique.
Hors des canaux couverts par un pack, la barre de recherche reste
disponible (elle est utile partout) ; seul l'onglet thématique
n'apparaît pas. Hors du chat (autres pages du site), le script est
totalement invisible.
Fonctionnement détaillé
- Déclenchement ciblé : la barre de recherche s'active sur tous
les canaux du chat (présence du picker d'émojis détectée via le
trigger Reka), l'onglet thématique se limite aux canaux pour
lesquels un pack est défini (par exemple
/messages?channel=13
pour Audio). Aucun effet ailleurs sur le site, aucune requête
réseau hors interaction utilisateur.
- Barre de recherche au niveau popover : la barre est insérée
comme premier enfant du popover Reka, c'est-à-dire au-dessus de
toute la structure native - y compris en mode replié. Pendant une
recherche, chaque enfant natif du popover est masqué via
display:none après mémorisation de son display initial dans un
attribut, ce qui garantit la restauration à l'identique quand le
champ se vide.
- Index de recherche : la map
EMOJI_KEYWORDS est la source de
vérité. Tout émoji y figurant est cherchable, qu'il soit ou non
rangé dans un pack - ce qui permet d'enrichir la recherche
(visages, cœurs, gestes…) sans toucher au contenu des onglets.
Normalisation Unicode NFD côté code pour ignorer les accents.
- Coexistence avec le picker natif : la grille native gérée par
Vue n'est jamais retirée du DOM, juste masquée quand le pack est
actif. Conséquence : les onglets natifs restent pleinement
fonctionnels - on bascule entre la grille du pack et la grille
native sans casser le rendu Vue.
- Réutilise les classes Tailwind natives : l'onglet, la grille et
le champ de recherche injectés portent les mêmes classes que les
éléments natifs, donc le rendu suit le thème (clair/sombre) sans
bricolage CSS.
- Compatible navigation SPA : le site est rendu via Nuxt avec
hydratation Vue et téléportation Reka UI pour les popovers. Un
MutationObserver global détecte chaque ouverture du picker (sur
un canal éligible) et y injecte la barre de recherche puis, si
l'utilisateur déplie, l'onglet du pack - l'idempotence est garantie
par des attributs marqueurs, donc pas de doublon en cas de
re-render.
- Insertion compatible v-model : pour la rédaction, le caractère
est inséré via le setter natif du prototype
<textarea> puis un
évènement input est émis - Vue voit la modification comme une
saisie clavier normale, le bouton "Envoyer" s'active, etc.
- Réactions via l'API officielle : un clic sur un émoji d'un
picker de réaction émet un
POST sur
/api/messages/channels/{channelId}/messages/{messageId}/reactions
avec le token CSRF de la session (récupéré dans le <meta> SSR
injecté par Nuxt). Le picker se referme automatiquement après
succès.
- Architecture extensible : la configuration est une map
{ channelId: { name, emojis } } pour les packs et une map
{ emoji: [mots-clés] } pour la recherche. Pour ajouter un pack à
un autre canal ou enrichir la recherche, il suffit d'ajouter une
entrée - la logique d'injection est mutualisée.
- Pas de tracking, pas de dépendance externe : tout le code
tourne localement, aucun appel hors c411.org, aucune CDN tierce.
Cas non couverts (volontairement)
- Canaux sans pack défini : la barre de recherche reste
disponible (utile transverse), mais aucun onglet thématique n'est
ajouté.
- Rangée populaires du haut (avant dépliage du picker) :
laissée intacte hors recherche - les douze émojis populaires C411
ne sont pas remplacés.
- Emojis sans mots-clés : un émoji présent dans un pack mais
absent de l'index reste sélectionnable via l'onglet, mais pas
trouvable par recherche textuelle. Il suffit d'ajouter une entrée
pour le rendre cherchable.
Compatibilité
- Gestionnaires : Tampermonkey, Violentmonkey
- Navigateurs : Chrome, Firefox, Edge
Installation
- Installer Tampermonkey ou Violentmonkey si ce n'est pas déjà fait.
- Cliquer sur le bouton Installer ce script ci-dessus.
- Le gestionnaire détectera automatiquement les mises à jour publiées
ici.
Code source
Le script est organisé en modules distincts (config, utilitaires,
client API, injection picker, observer SPA) puis concaténé en un seul
fichier par un script de build qui valide la syntaxe via node --check
avant chaque artefact.
Aucune dépendance externe. Le code est lisible, commenté en français,
et placé sous licence MIT - tu peux l'inspecter, le forker ou le
modifier librement.
Contributions
Les packs #Vidéo, #Ebook, #Application, #Jeux vidéo et
#XXX (NSFW) ont été proposés par Cbo (membre de la communauté
C411). Merci à lui pour ce travail.
Signaler un bug, proposer un pack ou un mot-clé
Utiliser l'onglet Feedback ou Discussions de cette page
GreasyFork. Les suggestions de packs (canal + liste d'émojis) et de
mots-clés FR supplémentaires pour la recherche sont les bienvenues.