Modelos do Url Composer

Componente bem especializado para o meu site, mas vou compartilhar aqui, pois pode ser útil. Ele adiciona um modelo (template) ao composer com base em uma string na URL.

Houve muitas discussões sobre ter modelos de composer para tags. Isso não funcionou no meu caso de uso, então construí isto em vez disso. Pode ser usado em uma emergência ou modificado ligeiramente para funcionar também para tags.

Github: GitHub - focallocal/url-composer-templates: Reads url strings and adds template text to the composer if a match is found

Modelos de Composer de URL (URL Composer Templates)

Um componente de tema do Discourse que preenche previamente o composer com texto de modelo baseado em parâmetros de URL. Projetado para funcionar perfeitamente com o Docuss para fornecer modelos específicos de contexto para diferentes tipos de interações.

Funcionalidades

  • Suporte a Parâmetros de URL: Detecta automaticamente ?composer_template=X em URLs e aplica o modelo correspondente
  • Múltiplos Tipos de Modelo: Configure até 6 modelos diferentes para diferentes propósitos (relatório, presença, convite, modelos personalizados)
  • Abrir Composer Automaticamente: Opcionalmente, abre o composer automaticamente ao visitar um link do Docuss sem tópicos existentes
  • Aplicação Flexível: Modelos podem ser aplicados apenas à primeira postagem, a todas as respostas ou a ambos
  • Persistência de Sessão: Usa sessionStorage para manter a seleção do modelo entre as navegações de página
  • Modo de Depuração (Debug Mode): Ativa o registro detalhado no console para solucionar a aplicação do modelo

Instalação

  1. Instale o componente de tema no Discourse:

    • Vá para Admin → Personalizar (Customize) → Temas (Themes)
    • Clique em “Instalar” (Install) → “De um repositório Git” (From a Git repository)
    • Insira: https://github.com/focallocal/url-composer-templates
    • Adicione o componente ao seu tema ativo
  2. Nenhuma reconstrução de plugin necessária! O suporte ao parâmetro composer_template já existe no dcs-discourse-plugin e no dcs-client.

  3. Implante seu aplicativo React (fl-maps) com os componentes DCSLink atualizados que passam a propriedade composerTemplate.

  4. Configure os modelos nas configurações do componente (Admin → Personalizar → Temas → seu tema → url-composer-templates → Configurações).

Configuração

Configurações de Modelo (Template Settings)

Cada modelo tem três opções de configuração:

Modelo 1 (Relatório)

  • template_1_id: report - O valor do parâmetro de URL para acionar este modelo
  • template_1_text: O texto para preenchimento prévio no composer
  • template_1_use_for: first_post - Aplicar somente ao criar novos tópicos

Modelo 2 (Presença)

  • template_2_id: going - Para interações do tipo “Eu vou”
  • template_2_text: Texto preenchido previamente para confirmações de presença
  • template_2_use_for: all_replies - Aplicar a todas as respostas (não à primeira postagem)

Modelo 3 (Convite)

  • template_3_id: invite - Para interações de convite
  • template_3_text: Texto preenchido previamente para convites
  • template_3_use_for: all_replies - Aplicar a todas as respostas

Modelos 4-6 (Personalizados)

  • Desativados por padrão
  • Podem ser ativados e personalizados para casos de uso específicos
  • Configure ID, texto e escopo de aplicação conforme necessário

Configurações de Abertura Automática (Auto-Open Settings)

  • enable_auto_open_composer: true - Quando ativado, abre automaticamente o composer se:
    • Um link do Docuss for clicado (URL contém ?composer_template=X)
    • Nenhum tópico existir ainda para aquela combinação de tags
    • Ajuda os usuários a iniciar discussões imediatamente

Modo de Depuração (Debug Mode)

  • debug_mode: false - Ative para ver logs detalhados no console com prefixos de emoji:
    • :artist_palette: Logs de aplicação de modelo
    • :rocket: Logs de abertura automática do composer

Integração Docuss

Integração Automática

O componente url-composer-templates é projetado para funcionar automaticamente com o Docuss. Quando você tem ambos:

  • Este componente instalado na sua instância do Discourse
  • O cliente e plugin Docuss atualizados (com suporte a composer_template)

Os modelos serão aplicados automaticamente com base em:

  1. Modo de Interação (Interact Mode):
    • Modo DISCUSS → Usa dicas de triggerId (presença, convite) ou o padrão report
    • Modo COMMENT → Usa o modelo report

Modelos Personalizados via Atributos HTML

Para um controle mais preciso, você pode especificar modelos diretamente no seu HTML usando o atributo data-dcs-composer-template:

<!-- Exemplo: Botão de Relatório -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="issue-report"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="report">
  Relatar um Problema
</div>

<!-- Exemplo: Botão de Presença -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="event-rsvp"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="going">
  Eu Vou!
</div>

<!-- Exemplo: Botão de Convite -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="invite-friends"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="invite">
  Convidar Amigos
</div>

<!-- Exemplo: Modelo Personalizado -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="feedback"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="custom1">
  Dar Feedback
</div>

Correspondência de ID de Modelo (Template ID Matching)

O componente corresponde aos IDs de modelo do parâmetro de URL com os IDs de modelo configurados:

Parâmetro de URL Configuração do Modelo Propósito Padrão
?composer_template=report template_1_id Relatórios de bugs, problemas
?composer_template=going template_2_id Confirmações de presença em eventos
?composer_template=invite template_3_id Convites
?composer_template=custom1 template_4_id Uso personalizado
?composer_template=custom2 template_5_id Uso personalizado
?composer_template=custom3 template_6_id Uso personalizado

Como Funciona

Fluxo de Aplicação do Modelo

  1. Detecção de URL: Quando um usuário navega para uma URL com ?composer_template=X, o componente armazena o ID do modelo no sessionStorage
  2. Intercepção do Composer: Quando o composer abre, o componente verifica se há um ID de modelo armazenado
  3. Correspondência de Modelo: Encontra o modelo correspondente com base no ID
  4. Validação de Escopo: Verifica se o modelo deve ser aplicado (primeira postagem, resposta ou ambos)
  5. Inserção de Texto: Preenche previamente o composer com o texto do modelo
  6. Limpeza: Marca o modelo como aplicado para evitar reaplicação

Fluxo de Abertura Automática

  1. Detecção de Parâmetro: Verifica se a URL contém ?composer_template=X e se a abertura automática está ativada
  2. Busca de Tópico: Procura por tópicos existentes com a combinação de tags atual
  3. Abertura do Composer: Se nenhum tópico for encontrado, abre o composer automaticamente
  4. Aplicação do Modelo: O modelo é então aplicado através do fluxo normal acima

Casos de Uso de Exemplo

Site de Evento

# settings.yml
template_2_id: "going"
template_2_text: "Estou planejando comparecer! 🎉\n\nAnsioso para ver todos lá."
template_2_use_for: "all_replies"

template_3_id: "invite"
template_3_text: "Gostaria de convidar amigos para este evento.\n\nQuem estou convidando:\n- \n\nPor que eles deveriam vir:\n"
template_3_use_for: "first_post"

Rastreamento de Problemas

template_1_id: "bug"
template_1_text: "**Descrição do Bug:**\n\n**Passos para Reproduzir:**\n1. \n2. \n3. \n\n**Comportamento Esperado:**\n\n**Comportamento Atual:**\n"
template_1_use_for: "first_post"

template_4_enabled: true
template_4_id: "feature"
template_4_text: "**Solicitação de Recurso:**\n\n**Caso de Uso:**\n\n**Solução Proposta:**\n"
template_4_use_for: "first_post"

Engajamento Comunitário

template_1_id: "question"
template_1_text: "**Minha Pergunta:**\n\n**O que eu Tentei:**\n\n**Contexto Adicional:**\n"
template_1_use_for: "first_post"

template_2_id: "answer"
template_2_text: "Isto foi o que funcionou para mim:\n\n**Solução:**\n\n**Por que funciona:**\n"
template_2_use_for: "all_replies"

Solução de Problemas (Troubleshooting)

Modelos Não Estão Sendo Aplicados

  1. Verifique o Parâmetro de URL: Certifique-se de que a URL contenha ?composer_template=X, onde X corresponde a um ID de modelo
  2. Ative o Modo de Depuração: Ligue o debug_mode nas configurações para ver os logs do console
  3. Verifique o Escopo do Modelo: Verifique se a configuração use_for corresponde à sua ação (criação de tópico vs resposta)
  4. Limpe o SessionStorage: Abra o console do navegador e execute: sessionStorage.clear()

Abertura Automática Não Está Funcionando

  1. Verifique a Configuração: Certifique-se de que enable_auto_open_composer esteja definido como true
  2. Verifique a URL: A abertura automática só funciona quando a URL contém ?composer_template=X
  3. Verifique Tópicos Existentes: A abertura automática só é acionada quando NÃO existem tópicos com a combinação de tags
  4. Ative o Modo de Depuração: Procure por logs com o emoji :rocket: no console

Modelo Errado Sendo Aplicado

  1. Verifique os IDs de Modelo: Certifique-se de que seu parâmetro de URL corresponda exatamente ao ID do modelo (sensível a maiúsculas e minúsculas)
  2. Verifique a Prioridade: Se vários modelos puderem corresponder, o primeiro modelo correspondente é usado
  3. Limpe a Sessão: O SessionStorage pode conter valores antigos: sessionStorage.clear()

Problemas de Integração Docuss

  1. Atualize o Docuss: Certifique-se de ter as versões mais recentes de:
    • dcs-client (com suporte a composerTemplate em HtmlBased.js)
    • dcs-discourse-plugin (com geração de parâmetros de URL em DcsIFrame.js.es6)
  2. Verifique os Atributos HTML: Verifique se data-dcs-composer-template está definido corretamente nos acionadores (triggers)
  3. Inspecione a Rede: Verifique a aba Rede (Network) das Ferramentas do Desenvolvedor do navegador para ver se os parâmetros de URL estão sendo adicionados

Histórico de Versões

v1.0.0 (Atual)

  • Lançamento inicial
  • Suporte para 6 modelos configuráveis
  • Seleção de modelo baseada em parâmetro de URL
  • Abertura automática do composer para links Docuss
  • Persistência de SessionStorage
  • Modo de depuração para solução de problemas

Contribuição

Encontrou um bug ou tem uma solicitação de recurso? Por favor, abra uma issue no repositório do GitHub.

Licença

Este componente é de código aberto e está disponível sob a Licença MIT.

Créditos

Desenvolvido por Andy@Focallocal para uso com Docuss - um sistema para incorporar discussões do Discourse em qualquer site.

1 curtida

Então este componente deve ser usado com esse plugin instalado e um aplicativo React configurado? Existe mais alguma informação sobre isso? Talvez isso devesse ser iterado com mais força.

2 curtidas

Obrigado por apontar isso, @NateDhaliwal

Não, ele apenas analisa a URL em busca de uma string específica e preenche previamente o compositor com um de alguns modelos quando encontra essa string.

O plugin Docus insere essa string nos URLs como uma de suas funções, mas este componente funcionará com qualquer string ou mecanismo de entrega que alguém queira usar, então ele pode ser autônomo. Vou atualizar o readme para explicar isso.

Por exemplo, você poderia dizer a ele para procurar por: ‘/tag/introductions’ e ele se tornaria um componente de modelo de tag. Ou você poderia usá-lo como estou usando para colocar esse modelo em intersecções de tags, como: tags/intersection/introductions/webdevs

Vou mover a string que ele procura para a seção de administração para que seja mais fácil para outros modificarem e usarem sem precisar mexer no código.

1 curtida

Demorou muito mais do que eu pretendia, mas este componente está totalmente funcionando agora.

1 curtida

Parece bom. Mas talvez algumas capturas de tela das configurações, pois parecem mais limpas do que os blocos de código.

Muito bom. Tenho muito trabalho a fazer agora. :grin:

1 curtida