DiscPage: um plugin para criar páginas estáticas e inserir balões de discussão no texto

Acho que é possível. No manipulador de eventos dpg_displaypage, você precisa usar $.ajax() para chamar sua API externa. Além disso, acredito que você precise adicionar sua API externa à configuração do Discourse content security policy script src.

2 curtidas

Parece que este plugin ainda está sendo mantido, mas parece que isolei um problema no meu servidor, onde a página de login não é visível quando este plugin está habilitado. Espero resolver isso.

Se este plugin estiver habilitado no meu servidor, posso confirmar que a página de login aparece em branco e, se eu desabilitar o plugin, a página de login volta a aparecer normalmente. Se um usuário já estiver logado, o problema não ocorre e o servidor funciona normalmente.

Procurando ajuda/suporte para resolver isso. Estou disposto a fornecer quaisquer informações adicionais necessárias para auxiliar na solução do problema.

Obrigado, Jordan.
Sim, precisarei de mais informações, pois verifiquei minhas várias instâncias do Discourse e não consegui reproduzir o problema.
Quando você diz que “a página de login não está visível”, você se refere ao pop-up de login, certo?
Por favor, forneça mais detalhes e/ou capturas de tela. Além disso, se possível, envie-me uma mensagem privada (PM) com o URL da sua instância do Discourse.

1 curtida

Olá, Syl,

Obrigado pela resposta.

Quando tenho o plugin discpage ativado e acesso a instância do Discourse sem estar logado, sou apresentado a uma página completamente em branco. Veja abaixo:

Também acabei de verificar os logs do console e notei alguns erros relacionados ao discpage. Embora eles não signifiquem nada para mim, talvez façam sentido para você…

Obrigado por relatar isso. O bug foi registrado aqui:

Até que o bug seja corrigido, uma solução alternativa é desativar a configuração “login necessário” do Discourse.

EDIT: o bug agora foi corrigido.

1 curtida

Olá, Syl,
É um pouco constrangedor :sweat_smile: desculpe ser direto, mas estava olhando o código-fonte do plugin, apenas por curiosidade, sem nenhuma habilidade de programação, e fiquei confuso com a formatação do arquivo lib. Acredito que não seja uma escolha técnica (mas o que eu sei :smile: ), e consigo imaginar e entender de onde isso vem.
Tenho a sensação de que você está no meio do caminho, e já está ótimo, então realmente não quero parecer ingrato, mas você consideraria compartilhar uma versão inteligível do seu trabalho?
Na minha opinião, a longo prazo, o ritmo das atualizações do núcleo pode ser desafiador de acompanhar para os autores de plugins; isso pode aliviar a mente daqueles que poderiam usar os recursos do seu plugin, mas hesitam em construir algo dependendo de poucas pessoas, e quem sabe até gerar boa vontade e interesse?

Muito obrigado mesmo :wink:

Olá Benjamin,
O código-fonte do plugin foi lançado na forma minificada porque tenho vergonha dele. É o resultado de um experimento de P&D e precisa de refatoração extensa. Adiei a tarefa até que o plugin despertasse algum interesse.

3 curtidas

:sweat_smile:
Bem, pode me contar na coluna “muito interessado”!
Acho que é uma variação muito legal para a funcionalidade principal de “citação”.
Estou buscando um incentivo para que meus usuários se envolvam em alguma análise de discursos (o que é bastante próximo do seu caso de uso Castafiore, eu acho, embora muito menos divertido, infelizmente!), e espero que esse design os incentive a entrar no modo de escrita.

2 curtidas

Até agora, tudo bem!
Minha opinião:

  • Minha humilde opinião sobre o cabeçalho: eu preferiria mantê-lo centralizado. Sinto que isso integra as páginas estáticas do plugin de forma mais fluida em um discurso globalmente “normal”.
  • Caso de borda: pode ser interessante especificar uma categoria de balão por categoria estática, caso várias categorias estáticas tenham permissões de leitura/gravação diferentes.
  • Estou perdendo algo ou o [dpgb id=titulo] [/dpgb] (que, se não me engano, são convertidos em balões) precisa ser configurado manualmente? Tentei candidamente (e sem sucesso!) usar o botão de citação do compositor, ufa :sweat_smile:. Provavelmente é necessário, já que o slug da tag precisa ser definido :thinking:.
  • A configuração discpage hide tags poderia virar hide discpage tags? Não entendo muito bem a dificuldade de ocultar apenas as tags dpg-****, mas acho que elas podem um pouco poluir a lista sugerida ao criar um tópico.

Próximo passo: o teste de engajamento do usuário!

Obrigado @Benjamin_D, seu feedback é muito bem-vindo.

O alinhamento do cabeçalho deve se adequar a:

  1. Páginas normais do Discourse (largura máxima = 1110px),
  2. Páginas estáticas do DiscPage (largura máxima = 782px, pois 1110px é muito largo para uma página estática onde não é possível colocar barras laterais, widgets ou imagens),
  3. Layout dividido do DiscPage, com uma página estática à esquerda e tópicos à direita (largura máxima = 100%).

Fiz vários testes, tanto com alinhamento fixo do cabeçalho quanto com alinhamento dependente do layout, e cheguei à conclusão de que um alinhamento permanente à esquerda era o caminho a seguir.

No entanto, ficarei feliz em verificar qualquer ideia que você possa ter. Certifique-se de abordar os três casos mencionados acima.

Isso já é suportado. Veja este parágrafo na documentação:

Na verdade, você pode definir múltiplas categorias aqui. Vamos chamar PageCat a categoria da página estática à qual o balão pertence. Se houver mais de uma categoria de balão neste campo, o DiscPage escolherá a primeira que for ou um irmão de PageCat (mesmo pai imediato) ou o pai imediato de PageCat. Se nenhuma categoria assim for encontrada, o DiscPage escolherá a primeira categoria da lista. Esse recurso permite emparelhar [categoria de página estática, categoria de balão], o que é útil, por exemplo, em fóruns multilíngues ou para configurar páginas estáticas com permissões de grupo diferentes.

Concordo que isso não é fácil de compreender. Qualquer ideia sobre como melhorar a redação é bem-vinda.

Sim, os balões devem ser inseridos manualmente usando uma sintaxe de texto.
Quando você testou o plugin pela primeira vez, por que achou que o botão de citação seria de alguma ajuda? (Estou interessado no seu estado mental naquele momento)

O recurso hide discpage tags já está implementado: as tags do DiscPage são ocultadas por padrão em todas as páginas e widgets do Discourse. Em outras palavras, se você consegue ver uma tag do DiscPage em qualquer lugar (quando o DiscPage está habilitado), isso é um bug.

A configuração discpage hide tags é muito diferente: ela permite que pessoas que não querem habilitar tags em sua instância do Discourse, mas que foram forçadas a fazê-lo para usar o DiscPage, simulem uma instância sem tags.

1 curtida

:thinking: Na verdade, é mais o max-width = 1110px que eu manteria, mesmo que, na tela dividida, a página estática sob o cabeçalho ocupe 100%. Eu comentei o bloco html.dpg header.d-header .wrap e não parece tão ruim ter um pouco de espaço branco ao redor do cabeçalho acima da página estática dividida (mesmo que os botões de editar título e página pareçam um pouco perdidos lá em cima, no layout não dividido).

Eu, bobo, li o manual :sweat_smile: (em minha defesa, provavelmente li no ano passado e esqueci :smile:)
Não me lembrava que o DiscPage ocultava a categoria balão (acabei de testar como administrador), mas é um ótimo recurso.

Então, se entendi corretamente, no caso de múltiplas {categorias de página estática, permissões de usuário}, deve-se fazer uma categoria balão associada ser uma subcategoria da estática (o que faz sentido do ponto de vista das permissões) ou ter ambas as categorias como subcategorias de uma mesma terceira categoria pai. Não é importante, mas funcionaria também se a estática fosse uma subcategoria da balão?

Provavelmente apenas a forma de balão do ícone, juntamente com o fato de que eu provavelmente nunca usei o botão de citação do compositor, e talvez eu tenha pensado: Ei, isso estava lá antes? Então eu tentei :crazy_face:
Não me importo de ter que escrever algumas linhas de “código”, mas consigo ouvir meus usuários uivando daqui. Talvez eles simplesmente não configurem as páginas estáticas por enquanto. Às vezes, sinto que cada toque no teclado pode ser a gota d’água… :roll_eyes:

Claro, desculpe… Vou culpar minha leve febre, não sei por que pensei que elas não estavam ocultas; talvez eu tenha visto um vislumbre de uma na caixa de seleção de tags na parte do balão da tela dividida? Agora entendi a vírgula final que vi ao tentar de tudo, inclusive taggear os tópicos do balão!

Seria possível permitir que os usuários criem e editem suas próprias postagens estáticas? A restrição de administrador poderia então ser aplicada apenas pelas configurações de segurança de categoria.

edit:
Talvez não, modificar tag_groups parece exigir StaffConstraint :disappointed_relieved:

Posso permitir que um usuário TL4 defina um balão alterando a = User.current()) && a.admin para User.current()) && a.trust_level >= 4, mas a tag não será criada até que um administrador edite a página estática… :thinking:
Seria ótimo: um moderador de categoria que pudesse alterar o grupo de tags da sua própria categoria :smile:

A propósito, notei que a lista de verificação de plugins parece interferir no discpage (algo relacionado ao getmodel()).

Prefiro o layout atual. No entanto, deveria haver uma maneira fácil de personalizar isso. Vou pensar sobre o assunto.

Não, essa combinação não é suportada.

Como você já percebeu, a criação de páginas estáticas não é limitada a administradores, mas a inserção de balões sim. O motivo é que não há uma maneira direta de criar tags no Discourse (veja este tópico). Para resolver isso, optei por usar a API de grupo de tags, que é restrita a administradores. Havia soluções alternativas, mas cada uma trazia suas próprias desvantagens.

Você está se referindo a este plugin? O que está acontecendo?

De fato, com os dois plugins ativados, ao atualizar uma página estática, o discpage é basicamente desativado (retorna um layout normal) e o console exibe um erro:

Uncaught (in promise) TypeError: postModel is undefined
checklistSyntax javascripts/discourse/initializers/checklist:29

Ambos os plugins funcionam bem separadamente.

Obrigado, @Benjamin_D. O problema foi registrado aqui:

EDIT: isso foi corrigido na versão mais recente (1.0.38).

2 curtidas

Olá @syl, lamento ser o portador de más notícias :sweat_smile:, encontrei outro problema de compatibilidade, um pouco mais problemático: com o discpage ativado, um link de convite leva a uma página em branco (em vez da página de registro).
O console do navegador diz:

  r.site.categories is undefined

Desativando o plugin, o link de convite funciona como de costume.

1 curtida

Muito obrigado por relatar isso, @Benjamin_D. Este é mais um bug com o modo “login obrigatório”, então reabri a questão anterior no GitHub. Até que isso seja corrigido, uma solução alternativa é desativar o modo “login obrigatório”.

EDIT: isso foi corrigido na versão mais recente (1.0.38)

2 curtidas

Olá @syl!
Acho que a recente alteração nas rotas de tags

quebrou algo :thinking:
No mínimo, o link nos balões agora deve apontar para /tag/dpg-xxx e não para /tags/dpg-xxx

2 curtidas

Obrigado, @Benjamin_D, isso foi corrigido na v1.0.38.

2 curtidas