Formulários de espaço reservado

:discourse2: Resumo Formulários de Espaço Reservado permitem criar documentação dinâmica, gerando um formulário que substitui qualquer ocorrência de um =PADRÃO= em sua publicação pelo valor de um campo de entrada de texto ou selecionável.
:eyeglasses: Pré-visualização Pré-visualizar no Discourse Theme Creator
:hammer_and_wrench: Link do Repositório https://github.com/discourse/discourse-placeholder-theme-component
:open_book: Novo em Temas do Discourse? Guia para iniciantes sobre o uso de Temas do Discourse

Instale este componente de tema

Funcionalidades

Adicione espaços reservados às publicações neste formato:

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

Seu e-mail: =NAME-==COUNTRY=@example.com

E isso resultará em:

Isso é usado em listas de discussão

Seu e-mail: =ZNAME-==ZCOUNTRY=@example.com

Como visto acima, o texto dentro do wrapper será usado como uma descrição longa.

[wrap=placeholder key=NAME description="Seu nome"]
Isso é usado em listas de discussão
[/wrap]

Chaves disponíveis

  • key: A chave que deve ser substituída em sua publicação
  • default/defaults: valor(es) padrão
  • description: um texto de espaço reservado para a entrada

Exemplos

# criar um novo plugin
rails g plugin =PLUGIN_NAME=
cd plugins/=PLUGIN_NAME=

Usamos para criar runbooks, tutoriais e modelos reutilizáveis (funcionará em blocos de código). Compartilhe seus casos de uso!

Configurações

Tradução Padrão
toolbar.builder Adicionar Espaço Reservado
builder.errors.no_key Uma chave é obrigatória.
builder.title Adicionar Espaço Reservado
builder.insert Inserir
builder.key.label Chave
builder.key.description A =Chave= a ser substituída na publicação.
builder.description.label Descrição
builder.description.description Descrição exibida na entrada sem valor definido.
builder.values.label Valor(es) padrão
builder.values.description Valor(es) opcional(is) para seu espaço reservado; se múltiplos valores forem definidos, um menu suspenso será usado.

:discourse2: Hospedado por nós? Componentes de tema estão disponíveis para uso em nossos planos Standard, Business e Enterprise.

66 curtidas

The big issue with math handling like this, is that you need to eval() and eval is unsafe, so you need to use some lib which provide a safe eval with a limited subset of the real eval. I’m unsure we want all this complexity for such a rare case.

6 curtidas

Eu tentei ! e isso seria uma coisa legal de pré-visualização do compositor com redux no OP, mas.. :pensive: Devo estar perdendo algo. Se entendi corretamente, o componente Reply Template pega o raw e procura por “substitutos”, mas o componente Placeholder Forms decora o cooked?

O que estou tentando fazer é facilitar para meus usuários adicionarem algumas perguntas e respostas de quiz em um tópico, com o mínimo de atrito técnico, cliques ou até mesmo digitação, :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"]

## Pergunta
=question=
### Resposta
[spoiler]
=réponse=
[/spoiler]
---
*Etiqueta(s)?*
[/wrap]

que resulta em

até agora tudo bem, mas infelizmente, os placeholders =question= e =réponse= são mantidos no compositor ao clicar no botão de modelo.

Sim, não tenho certeza do que estava pensando quando escrevi isso… Provavelmente tinha outro caso de uso em mente, mas não me lembro.

Com certeza não pode funcionar assim. Vou pensar um pouco sobre isso… Ambos os componentes do tema eram experimentos na época e podem merecer um tratamento melhor, já que as pessoas os têm usado com bastante frequência.

7 curtidas

Obrigado!

happy lets go GIF by Shalita Grant

3 curtidas

:grin: Não sei o que está acontecendo na cozinha do chef, mas como costumo me encher de pistache ou qualquer outra coisa enquanto espero, consegui fazer funcionar (para o meu caso específico, é claro, já que quase não tenho ideia do que estou fazendo, mas hey… :sweat_smile: )

4 curtidas

Idealmente, gostaria de permitir que o administrador defina seus próprios substitutos, mas o eval é arriscado (e nem mesmo possível com uma CSP segura), então não tenho certeza de como poderia alcançar isso…

3 curtidas

Primeiramente, ótimo e muito útil componente de tema.

Mas acho que encontrei um bug. Se eu usar um placeholder em um trecho de código que contém crases (`), ele não funciona. Um exemplo é um trecho de código SQL:

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

TABLENAME nunca é substituído (se houver um placeholder TABLENAME).

Seria legal se isso também incluísse algumas condições semelhantes ao Jinja2. Para que, por exemplo, alguém pudesse criar uma chave red e mapeá-la para o ícone :red_circle:, orange seria mapeado para :orange_circle:. Mas eu posso viver sem, é claro, mas teria sido legal ter essas condições de teste.

Eu amo muito este componente. :star_struck:


“E você vive realmente do =NOUN_1=? Que vida =ADJECTIVE_1$=!”

“Dela e com ela e por ela e nela”, disse =PERSON_1=. “É minha irmã e irmão, e tias, e =NOUN_2=, e comida e bebida, e (=ADJECTIVE_2=) =VERBING_1=. É meu =NOUN_3=, e não quero outro. O que ela não tem não vale a pena =VERBING_2=, e o que ela não sabe não vale a pena =VERBING_3=. Senhor! As =NOUNS_1= que tivemos juntos! Seja no inverno ou no verão, na primavera ou no outono, ela sempre tem seu =NOUN_4= e suas =NOUNS_2=. Quando as =NOUNS_3= chegam em fevereiro, e meu =NOUN_4= e o porão estão cheios de =NOUN_5= que não me servem, e o =COLOR_1= =NOUN_6= corre pela minha melhor janela de =NOUN_7=; ou então quando tudo desce =ADVERB_1= e mostra manchas de =NOUN_8= que cheiram a =FOOD_1=, e as =NOUNS_5= e =NOUNS_6= entopem os canais, e eu posso =VERB_1= sobre =MOISTURE= =NOUN_9= por quase todo o =NOUN_10= dela e encontrar =FOOD_2= fresca para comer, e coisas que =ADJECTIVE_3= pessoas deixaram cair de =NOUNS_7=!”


Original retirado da versão Standard Ebooks de The Wind in the Willows, disponível para ler online (procure por By it and with it).

10 curtidas

Olá :wave:

Obrigado por este componente :heart: Ele se encaixa perfeitamente no que estou tentando alcançar agora. Na verdade, meu primeiro pensamento foi que seria muito legal se pudesse ser combinado com o componente Reply Template. Mas, infelizmente, não é possível, como explicado nas postagens acima. :confused:


Encontrei uma solução alternativa para usá-lo como um modelo, funciona com link para novos tópicos e link para novas mensagens pessoais.

Veja como fiz:

  1. Crie um formulário Placeholder (para simplificar, uso o exemplo na OP)

Seu e-mail: =NAME=-=COUNTRY=@example.com


  1. Crie um link para um novo tópico:
    Configurei no link:
  2. categoria
  3. título
  4. corpo

Se você quiser adicionar linhas em branco, use \\ para que não quebre o link ou para torná-lo invisível, você pode usar   que adicionará um espaço na nova linha. Isso fará parte do modelo e criará uma linha em branco,

<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. Crie uma prévia do tópico

Categoria selecionada

=CATEGORY=

Título do tópico

This is a topic created by =NAME=

Corpo do tópico

Hello :wave:

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

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


  1. Crie o botão “Use template as new topic” (no exemplo acima, este é um link, você pode transformá-lo em um botão)

Crie um elemento [wrap] a partir deste texto. Isso o torna disponível para ser direcionado com CSS e estilizado. Adiciono isso abaixo.

<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>

Estilizando [wrap=template-button]
algo como :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);
  }
}

O botão de modelo ficará assim :arrow_down_small:

template-button


Demo

Use template as new topic


Espero que este pequeno tutorial ajude alguém que precise de algo semelhante :slightly_smiling_face:

Editar: Configurei um seletor de categoria que adiciona a capacidade de criar tópicos em diferentes categorias.


Verifique a versão bruta desta postagem…

9 curtidas

Isso é incrível Don, obrigada. Isso na verdade atende muito bem a uma das minhas necessidades :slight_smile:

2 curtidas

Algo a notar é que blocos de código às vezes causam problemas:

usermod -aG sudo =USERNAME=

Neste caso, o highlight.js assume que isso é Java e converte o bloco de código para:


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

Consigo corrigir isso sinalizando que, na verdade, é um comando shell:

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

Isso resulta em:

usermod -aG sudo =USERNAME=

Se tudo mais falhar, text impede que o highlight.js mexa com os placeholders.

Uma solução mais geral (que o Meta Discourse deve estar usando) é alterar a configuração default code lang de auto para plaintext ou algo semelhante. :wink:


Não que importe muito, mas usar java é uma maneira de evitar que o placeholder se expanda quando você quer escrever sobre placeholders.

1 curtida

Você pode verificar o link de pré-visualização? Parece estar quebrado para mim.

1 curtida

Este é um recurso incrível, e posso ver muitos usos para ele.
No entanto, em nossa resposta, é possível ocultar o =(nome)= até que o usuário comece a digitar na caixa de texto? Sinto que os usuários (especialmente os novos) podem não entender seu propósito, ou, parece uma formatação incorreta.

Acho que consegui consertar um (:crossed_fingers: :slight_smile:)

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

Também adicionei ao try.discourse.org para que você possa brincar mais com ele. :+1:

1 curtida

Talvez você possa inserir um valor padrão que será exibido em vez disso.

1 curtida

Isso funcionou! Obrigado!

2 curtidas

Esta solução alternativa não parece mais funcionar.

Existem outras opções para combinar reply-template e placeholder-forms?

4 posts foram divididos em um novo tópico: Links não funcionam em formulários de placeholder