Formulaires de remplacement

:discourse2: Résumé Les Formes de remplacement vous permettront de créer une documentation dynamique en générant un formulaire qui remplace toute occurrence d’un =MOTIF= dans votre publication par la valeur d’un champ de saisie textuelle ou sélectionnable.
:eyeglasses: Aperçu Aperçu sur Discourse Theme Creator
:hammer_and_wrench: Lien vers le dépôt https://github.com/discourse/discourse-placeholder-theme-component
:open_book: Nouveau sur les thèmes Discourse ? Guide du débutant pour utiliser les thèmes Discourse

Installer ce composant de thème

Fonctionnalités

Ajoutez des espaces réservés aux publications dans ce format :

[wrap=placeholder key=NAME description="Votre nom"][/wrap]
[wrap=placeholder key=COUNTRY default=US defaults=FR,DE,US,CN,AU,CA][/wrap]

Votre email : =NAME=-=COUNTRY=@example.com

Cela donnera le résultat suivant :

Ceci est utilisé dans la liste de diffusion

Votre email : =ZNAME=-=ZCOUNTRY=@example.com

Comme indiqué ci-dessus, le texte à l’intérieur de l’enveloppe sera utilisé comme longue description.

[wrap=placeholder key=NAME description="Votre nom"]
Ceci est utilisé dans la liste de diffusion
[/wrap]

Clés disponibles

  • key : La clé qui doit être remplacée dans votre publication
  • default/defaults : Valeur(s) par défaut
  • description : Un texte d’espace réservé pour la saisie

Exemples

# créer un nouveau plugin
rails g plugin =PLUGIN_NAME=
cd plugins/=PLUGIN_NAME=

Nous l’utilisons pour créer des runbooks, des tutoriels et des modèles réutilisables (cela fonctionnera dans les blocs de code). Veuillez partager vos cas d’utilisation !

Paramètres

Traduction Défaut
toolbar.builder Ajouter un espace réservé
builder.errors.no_key Une clé est requise.
builder.title Ajouter un espace réservé
builder.insert Insérer
builder.key.label Clé
builder.key.description La =Clé= à remplacer dans la publication.
builder.description.label Description
builder.description.description Description affichée sur la saisie sans valeur définie.
builder.values.label Valeur(s) par défaut
builder.values.description Valeur(s) optionnelle(s) pour votre espace réservé ; si plusieurs valeurs sont définies, une liste déroulante sera utilisée.

:discourse2: Hébergé par nous ? Les composants de thème sont disponibles pour utilisation sur nos plans Standard, Business et Enterprise.

66 « J'aime »

Le gros problème avec la gestion des mathématiques de ce type, c’est qu’il faut utiliser eval(), et eval est dangereux. Il faut donc utiliser une bibliothèque qui offre un eval sécurisé avec un sous-ensemble limité du vrai eval. Je ne suis pas sûr que nous voulions toute cette complexité pour un cas aussi rare.

6 « J'aime »

J’ai essayé ! Et ce serait une fonctionnalité intéressante de type « aperçu du compositeur avec redux dans le premier message », mais… :pensive: Il doit me manquer quelque chose. Si je comprends bien, le composant « Reply Template » prend le texte brut et recherche des « remplaçants », alors que le composant « Placeholder Forms » décore le texte cuisiné ?

Ce que j’essaie de faire, c’est faciliter la tâche à mes utilisateurs pour qu’ils ajoutent quelques Q&R de quiz dans un sujet, avec un minimum de friction technique, de clics ou même de frappes au clavier, :heavy-sigh: :roll_eyes:

[wrap=placeholder key="question" description="question"][/wrap]
[wrap=placeholder key="réponse" description="réponse"][/wrap]

[wrap=template key="template-spoiler" action="reply" tagsList="#qui, #quand, #où, #comment"]

## Question
=question=
### Réponse
[spoiler]
=réponse=
[/spoiler]
---
*Étiquette(s) ?*
[/wrap]

ce qui donne

jusqu’ici tout va bien, mais malheureusement, les espaces réservés =question= et =réponse= sont conservés dans le compositeur lors de l’appui sur le bouton du modèle.

Oui, je ne suis pas sûr de ce que je pensais en écrivant cela… J’avais probablement un cas d’utilisation différent à l’esprit, mais je ne m’en souviens plus.

Cela ne peut absolument pas fonctionner de cette manière. Je vais y réfléchir un peu… Les deux composants de thème étaient des expérimentations à l’époque et mériteraient peut-être une meilleure prise en charge, car les gens les utilisent assez fréquemment.

7 « J'aime »

Merci !

happy lets go GIF par Shalita Grant

3 « J'aime »

:grin: Je ne sais pas ce qui mijote dans la cuisine du chef, mais comme j’ai l’habitude de me goinfrer de pistaches ou d’autre chose en attendant, j’ai réussi à faire fonctionner (pour mon usage bien sûr, car je n’ai presque aucune idée de ce que je fais, mais bon… :sweat_smile:)

4 « J'aime »

Idéalement, j’aimerais pouvoir permettre à l’administrateur de définir ses propres remplacements, mais eval est risqué (et même impossible avec une CSP sécurisée), donc je ne suis pas sûr de savoir comment y parvenir…

3 « J'aime »

Tout d’abord, un excellent composant de thème, vraiment utile.

Cependant, je pense avoir trouvé un bug. Si j’utilise un espace réservé dans un extrait de code contenant des accents graves (`), cela ne fonctionne pas. Voici un exemple avec un extrait de code SQL :

DELETE FROM `=TABLENAME=`
WHERE id NOT IN(
        SELECT
            id FROM (
                SELECT
                    id FROM `=TABLENAME=`
                ORDER BY
                    id DESC
                LIMIT 20
) subquery);

TABLENAME n’est jamais remplacé (lorsqu’il existe un espace réservé TABLENAME).

Ce serait génial si cela incluait également des conditions de type Jinja2. Ainsi, par exemple, quelqu’un pourrait créer une clé red et la mapper à l’icône :red_circle:, orange serait mappé à :orange_circle:. Mais je peux m’en passer bien sûr, mais cela aurait été génial d’avoir ces conditions de test.

J’adore vraiment ce composant. :star_struck:


« Et vous vivez vraiment de la =NOUN_1= ? Quelle vie =ADJECTIVE_1= ! »

« J’en vis et j’en vis et j’en vis et j’en vis », dit =PERSON_1=. « C’est mon frère et ma sœur, et mes tantes, et mes =NOUN_2=, et ma nourriture et ma boisson, et mon (=ADJECTIVE_2=) =VERBING_1=. C’est ma =NOUN_3=, et je n’en veux pas d’autre. Ce qu’elle n’a pas ne vaut pas la peine d’être =VERBING_2=, et ce qu’elle ne sait pas ne vaut pas la peine d’être =VERBING_3=. Seigneur ! les =NOUNS_1= que nous avons eus ensemble ! Que ce soit en hiver ou en été, au printemps ou en automne, elle a toujours son =NOUN_4= et ses =NOUNS_2=. Quand les =NOUNS_3= sont là en février, et que mon =NOUN_4= et mon sous-sol débordent de =NOUN_5= qui ne me servent à rien, et que le =COLOR_1= =NOUN_6= coule devant ma meilleure fenêtre =NOUN_7= ; ou encore quand tout cela tombe =ADVERB_1= et montre des taches de =NOUN_8= qui sentent le =FOOD_1=, et que les =NOUNS_5= et les =NOUNS_6= obstruent les canaux, et que je peux =VERB_1= sur l’=MOISTURE= =NOUN_9= sur la plupart des =NOUN_10= et trouver de la =FOOD_2= fraîche à manger, et des choses =ADJECTIVE_3= que les gens ont laissées tomber des =NOUNS_7= ! »


Original tiré de la version Standard Ebooks de The Wind in the Willows, disponible en lecture en ligne (rechercher By it and with it).

10 « J'aime »

Bonjour :wave:

Merci pour ce composant :heart: Il correspond parfaitement à ce que j’essaie de réaliser actuellement. En fait, ma première pensée a été qu’il serait formidable s’il pouvait être combiné avec le composant Reply Template. Mais malheureusement, ce n’est pas possible, comme l’expliquent les messages précédents. :confused:


J’ai trouvé une solution de contournement pour l’utiliser comme modèle, cela fonctionne avec lien vers de nouveaux sujets et lien vers de nouveaux messages personnels.

Voici comment je l’ai fait :

  1. Créez un formulaire de remplacement (pour rester simple, j’utilise l’exemple dans le message d’origine)

Votre email : =NAME=-=COUNTRY=@example.com


  1. Créez un lien vers un nouveau sujet :
    J’ai configuré dans le lien :
  2. catégorie
  3. titre
  4. corps

Si vous souhaitez ajouter des lignes vides, utilisez \ pour qu’elles ne cassent pas le lien ou pour les rendre invisibles, vous pouvez utiliser   qui ajoutera un espace dans la nouvelle ligne. Cela fera partie du modèle et créera une ligne vide,

<a href="https://meta.discourse.org/new-topic?category==CATEGORY=&title=This is a topic created by =NAME=&body=Hello :wave:
&nbsp;
This is a test topic... Let's see the placeholder form.
\
Your email: =NAME=-=COUNTRY=@example.com">Use template as new topic</a>

  1. Créez un aperçu du sujet

Catégorie sélectionnée

=CATEGORY=

Titre du sujet

This is a topic created by =NAME=

Corps du sujet

Hello :wave:

This is a test topic… Let’s see the placeholder form.

Your email: =NAME=-=COUNTRY=@example.com


  1. Créez un bouton “Utiliser le modèle comme nouveau sujet” (dans l’exemple ci-dessus, il s’agit d’un lien, vous pouvez en faire un bouton)

Créez un élément [wrap] à partir de ce texte. Cela le rend disponible pour le cibler avec CSS et le styliser. Je l’ajoute ci-dessous.

<a href="https://meta.discourse.org/new-topic?category==CATEGORY=&title=This is a topic created by =NAME=&body=Hello :wave:
&nbsp;
This is a test topic... Let's see the placeholder form.
\
Your email: =NAME=-=COUNTRY=@example.com">[wrap=template-button]Use template as new topic[/wrap]</a>

Stylisation de [wrap=template-button]
quelque chose comme :arrow_down_small:

Common / CSS

[data-wrap="template-button"] {
  background: var(--tertiary);
  color: var(--secondary);
  border-radius: var(--d-button-border-radius);
  padding: 0.5em 0.65em;
  transition: background 0.25s;
  &:focus,
  &:hover {
    background: var(--tertiary-hover);
    color: var(--secondary);
  }
}

Le bouton modèle ressemblera à ceci :arrow_down_small:

template-button


Démo

Use template as new topic


J’espère que ce petit tutoriel aidera ceux qui ont besoin de quelque chose de similaire :slightly_smiling_face:

Modification : J’ai mis en place un sélecteur de catégorie qui permet de créer des sujets dans différentes catégories.


Voir la version brute de ce message…

9 « J'aime »

C’est incroyable Don, merci. Cela répond très bien à l’un de mes besoins :slight_smile:

2 « J'aime »

Quelque chose à noter est que les blocs de code causent parfois des problèmes :

usermod -aG sudo =USERNAME=

Dans ce cas, highlight.js suppose qu’il s’agit de Java et convertit le bloc de code en :


  usermod -
  <span class="hljs-type">aG</span> 
  <span class="hljs-variable">sudo</span> 
  <span class="hljs-operator">=</span>
  USERNAME=

Je suis capable de le corriger en signalant qu’il s’agit en fait d’une commande shell :

    ```shell
    usermod -aG sudo =USERNAME=
    ```

Ce qui donne :

usermod -aG sudo =USERNAME=

Si tout le reste échoue, text empêche highlight.js de modifier les espaces réservés.

Une solution plus générale (que Meta Discourse doit utiliser) consiste à changer le paramètre langue de code par défaut de auto à plaintext ou quelque chose de similaire. :wink:


Ce n’est pas que cela importe beaucoup, mais utiliser java est un moyen d’éviter que l’espace réservé ne se développe lorsque vous voulez écrire sur les espaces réservés.

1 « J'aime »

Pouvez-vous vérifier le lien de prévisualisation ? Il semble être cassé pour moi.

1 « J'aime »

C’est une fonctionnalité incroyable, et je peux en voir de nombreuses utilisations.
Cependant, dans notre réponse, est-il possible de masquer le =(nom)= jusqu’à ce que l’utilisateur commence à taper dans la zone de texte ? Je pense que les utilisateurs (surtout les nouveaux) pourraient ne pas comprendre son but, ou que cela ressemble à un formatage incorrect.

Je pense que j’en ai un qui fonctionne à nouveau (:crossed_fingers: :slight_smile:)

https://discourse.theme-creator.io/theme/Discourse/placeholder-forms

Je l’ai également ajouté à try.discourse.org pour que vous puissiez jouer plus concrètement avec. :+1:

1 « J'aime »

Peut-être pourriez-vous saisir une valeur par défaut qui s’affichera à la place.

1 « J'aime »

Ça a marché ! Merci !

2 « J'aime »

Ce contournement ne semble plus fonctionner.

Existe-t-il d’autres options pour combiner reply-template et placeholder-forms ?

4 messages ont été déplacées vers un nouveau sujet : Les liens ne fonctionnent pas dans les formulaires de remplacement