Plugin de Eventos 📅

Vou tentar reproduzir isso.

3 curtidas

Como posso executar JavaScript após a página do calendário ter carregado?


edição: Explico meu caso.
Fui solicitado a ter eventos multicoloridos, como:

Não quero criar um fork do plugin, então consegui algo com o seguinte código.
As cores estão relacionadas às tags dos eventos e substituem a cor padrão da categoria.

Adicionei a lista de tags no HTML do evento desta forma: data-tags="{{event.topic.tags}}"

<script type="text/x-handlebars" data-template-name="javascripts/components/events-calendar-event">
<div class="{{event.classes}}" data-tags="{{event.topic.tags}}" {{action 'selectEvent' event.topic.url}} style="{{event.listStyle}}">
  {{#unless event.allDay}}
    <span style='{{event.dotStyle}}'>{{d-icon 'circle'}}</span>
  {{/unless}}
  {{#if event.time}}
    <span class="time">{{event.time}}</span>
  {{/if}}
  {{#if event.title}}
    <span class="title" style="{{event.titleStyle}}">{{replace-emoji event.title}}</span>
  {{/if}}
</div>

{{#if showEventCard}}
  {{events-calendar-card topic=event.topic selectEvent="selectEvent"}}
{{/if}}
</script>

Gero padrões simplificados:

<script type="text/discourse-plugin" version="0.8.23">
api.onPageChange((url, title) => {
    // cores das tags
    let colors = {muni: "#91D0B5", road: "#8ABBE2", freestyle: "#CFB3D3"};

    let events = document.getElementsByClassName("event");
    for (var i = 0; i < events.length; i++) {
        let event = events[i];
        let gradient = "";
        let tags = event.getAttribute("data-tags").split(",");
        for (j = 1; j <= tags.length; j++) {
            gradient +=
                ", " +
                colors[tags[j - 1]] +
                " " +
                j * 8 +
                "px, " +
                colors[tags[j - 1]] +
                " " +
                (j * 8 + 8) +
                "px";
        }
        event.style.background = "repeating-linear-gradient(-45deg" + gradient + ")";
    }
});
</script>

E adicionei um pouco de CSS.

O resultado:
evento com 2 tags:

evento com 3 tags:

O problema que encontro é que meu JavaScript é executado na mudança de página e não aplica as cores simplificadas nos eventos dos meses anteriores/próximos, já que o calendário carrega seu conteúdo dinamicamente.

Se estou em outubro e clico em “próximo” duas vezes, indo para dezembro, é assim que aparece:

É por isso que gostaria que meu JS fosse executado quando o conteúdo do calendário tivesse carregado.

3 curtidas

Tentei outro método e consegui o efeito listrado editando a função eventsForDay em /assets/javascripts/discourse/lib/date-utilities.js.es6:

Substituí esta linha:

let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);background-color:#${topic.category.color};`;

Por:

let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);`;

E adicionei o seguinte:

if (topic.tags.length > 0) {
  let colors = {muni: "#91D0B5", road: "#8ABBE2", freestyle: "#CFB3D3"};
  let gradient = "";
  for (let i = 1; i <= topic.tags.length; i++) {
    gradient +=
      ", " +
      colors[topic.tags[i - 1]] +
      " " +
      i * 8 +
      "px, " +
      colors[topic.tags[i - 1]] +
      " " +
      (i * 8 + 8) +
      "px";
  }
   attrs['listStyle'] += `background:repeating-linear-gradient(-45deg ${gradient});`;
}

Funciona muito bem e é uma maneira mais limpa de alcançar o que quero. No entanto, não sei como sobrescrever essa função ou arquivo sem ter que criar um fork do plugin…

2 curtidas

O plugin parece ser incompatível com a versão mais recente do Discourse.
A partir do arquivo de log de reconstrução:

1: from /var/www/discourse/lib/plugin/instance.rb:417:in block in notify_after_initialize' /var/www/discourse/plugins/discourse-events/plugin.rb:190:in block in activate!': constante não inicializada #Class:0x0000562a2a10fa90::SCOPES
Você quis dizer? Sprockets (NameError)

** PLUGIN INCOMPATÍVEL **

Você não consegue construir o Discourse devido a erros no plugin em
/var/www/discourse/plugins/discourse-events

Por favor, tente remover este plugin e reconstruir novamente!

4 curtidas

Parece que o problema estava no Discourse e não no plugin.
Na versão beta mais recente do Discourse, pelo menos o plugin está funcionando novamente.

2 curtidas

Posso confirmar que atualmente não é possível reconstruir a versão estável mais recente do Discourse com o plugin de eventos atual. :worried:

Infelizmente, não podemos mudar para o status tests-passed — escolhemos a branch stable justamente para evitar esse tipo de problema. Alguém está investigando isso?

Tentei reconstruir com a v2.5.2 (que costumava funcionar) e isso também falha com o mesmo erro, então não tenho certeza de onde está o problema. Existe algum commit específico (do plugin ou do Discourse stable) para o qual eu possa apontar o container?

2 curtidas

Nossa política de suporte visa garantir compatibilidade com a versão mais recente do Discourse que passou nos testes (tests-passed), já que essa é a configuração padrão no discourse_docker. No entanto, gostaríamos de entender quantos usuários dos plugins da família Pavilion estão na branch stable do Discourse.

Além disso, planejamos descontinuar o plugin de eventos em favor do plugin de eventos da equipe do Discourse em um futuro próximo.

3 curtidas

Entendo que os desenvolvedores precisem olhar para o futuro para manter a compatibilidade com o futuro do Discourse — isso faz sentido. Mas, se não houver uma ramificação estável do tipo para o plugin, isso deixa as pessoas procurando uma configuração estável em um cenário onde sua configuração quebra devido a uma versão beta que eles não estão usando.

Alguma dica sobre qual commit quebrou a compatibilidade? Poderia tentar trabalhar com isso, mas estou perdido sobre qual mudança causou isso.

Edição para adicionar: para quem tem problemas com isso e precisa de uma solução temporária, este commit parece ser o culpado.

3 curtidas

Houve um problema com as chaves de API do webcal, que já foi resolvido.

Obrigado pelo relatório, @md-misko

4 curtidas

Novamente, o plugin parece ser incompatível com a versão mais recente do Discourse 2.6.0.beta5 ( 2bb7676ba4 ).
Desta vez, ele cria apenas uma página em branco ao acessar o site. Mas, diferentemente da última vez, não houve erro ao usar admin/upgrade.
Após desativar o plugin e reconstruir o contêiner, o Discourse voltou a funcionar normalmente.

4 curtidas

Olá, este plugin de Eventos gera os links “Adicionar ao Calendário” no topo das postagens, como nesta página:

https://community.namati.org/t/asia-pacific-justice-for-all-webinar-series/78084

Além disso, aqui em 2021, quais são as opiniões das pessoas sobre o uso deste plugin Pavilion Events em comparação com o plugin oficial de Calendário?

Estou principalmente interessado em encontrar maneiras de facilitar a agregação de visualizações de tópicos em um calendário e também adoraria que nossos usuários pudessem adicionar eventos individuais aos seus próprios calendários do Google ou .ics.

Abraços.

1 curtida

Olá,

Como mencionado no OP

Por favor, reserve um momento para considerar se os novos recursos de Eventos no plugin Discourse Calendar criados pela equipe do Discourse são adequados para você. Se eles atenderem às suas necessidades, recomendamos o uso desse plugin. Você só deve usar este plugin se já tiver considerado primeiro o Discourse Calendar.

Recomendamos que você use o plugin Discourse Calendar, se possível. Só damos suporte a este plugin para casos de uso específicos que não são atendidos por aquele plugin. Felizmente, o plugin Calendário possui ambos os recursos que você mencionou.

Sim, é este plugin. Mas, como mencionado, parece que você tem um bom caso de uso para o Discourse Calendar, então sugiro que você use esse.

Internamente, nós realmente usamos o plugin Discourse Calendar para organizar eventos para nossos membros, em vez deste plugin. Oferecemos suporte a casos de uso específicos para alguns clientes e estamos abertos a casos de uso específicos se alguém tiver, mas é só isso.

3 curtidas

Obrigado, Angus. Li todos aqueles conselhos e me dirigi a você especificamente porque parecia que você estava envolvido na criação da comunidade da Legal Empowerment Network em questão, e gostei de como ela funcionava. Mas fico feliz em saber que você recomenda o plugin oficial de Calendário; vou explorá-lo.

3 curtidas

Estou correto ao afirmar que o plugin oficial Discourse Calendar não possui algo como o filtro “Agenda” na lista de tópicos? Classificar a lista de tópicos pelas datas dos eventos contidos neles é um dos principais casos de uso que me interessam. É mais para gerenciamento de projetos (tratando tópicos como tarefas e agendando-os de acordo) do que para eventos.

4 curtidas

Estou pensando em adicionar algo assim também. Você já encontrou alguma solução?

Esta é a minha ideia: Cada evento deve ser considerado uma resposta, como fixar um tópico. O botão ‘Adicionar evento’ se tornará um menu suspenso que lista todos os eventos do tópico.

2 curtidas

Vou verificar e retorno.

1 curtida

Não estamos desenvolvendo novos recursos para este plugin. Descontinuamos esta funcionalidade em favor do recurso Oficial de Eventos no plugin discourse-calendar.

2 curtidas

Acho que ainda não há uma lista de tópicos no estilo de pauta no plugin oficial.

1 curtida

Alguém sabe se há um novo link para o conteúdo que antes estava em Pavilion?

Quando este plugin é executado em uma categoria restrita, vemos:

… mas o link da documentação está quebrado e gera um erro 404. Procurei pelo site em questão e também aqui, mas não sei se há outro lugar onde essas instruções para o usuário estejam disponíveis.

2 curtidas

De alguma forma, movemos aquele tópico para uma categoria fechada. Precisamos trazê-lo de volta ao público. Vamos discutir e retornaremos em breve.

P.S.
A página deve estar de volta agora.

3 curtidas