Plugin Eventi 📅

Proverò a riprodurlo.

3 Mi Piace

Come posso eseguire JavaScript dopo che la pagina del calendario è stata caricata?


Modifica: spiego il mio caso.
Mi è stato chiesto di avere eventi multicolore, come:

Non voglio creare un fork del plugin, quindi ho ottenuto un risultato con il seguente codice.
I colori sono legati ai tag degli eventi e sostituiscono il colore predefinito della categoria.

Ho aggiunto l’elenco dei tag nell’HTML dell’evento in questo modo: 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>

Genero pattern semplificati:

<script type="text/discourse-plugin" version="0.8.23">
api.onPageChange((url, title) => {
    // colori dei tag
    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 ho aggiunto un po’ di CSS.

Il risultato:
evento con 2 tag:

evento con 3 tag:

Il problema che incontro è che il mio JavaScript viene eseguito al cambio di pagina e non applica i colori semplificati agli eventi dei mesi precedenti/successivi, poichÊ il calendario carica dinamicamente il suo contenuto.

Se sono a ottobre e clicco “avanti” due volte, arrivando a dicembre, ecco come appare:

Per questo motivo vorrei che il mio JS venisse eseguito quando il contenuto del calendario è stato caricato.

3 Mi Piace

Ho provato un altro metodo e ottenuto l’effetto a strisce modificando la funzione eventsForDay in /assets/javascripts/discourse/lib/date-utilities.js.es6:

Ho sostituito questa riga:

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

con:

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

E ho aggiunto questo:

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});`;
}

Funziona molto bene ed è un modo più pulito per ottenere ciò che volevo. Tuttavia, non so come sovrascrivere questa funzione o file senza dover creare un fork del plugin…

2 Mi Piace

Il plugin sembra non essere compatibile con l’ultima versione di Discourse.
Dal file di log del rebuild:

1: da /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!': costante non inizializzata #Class:0x0000562a2a10fa90::SCOPES
Intendevi? Sprockets (NameError)

** PLUGIN INCOMPATIBILE **

Non è possibile compilare Discourse a causa di errori nel plugin in
/var/www/discourse/plugins/discourse-events

Prova a rimuovere questo plugin e a ricompilare di nuovo!

4 Mi Piace

Sembra che il problema fosse in Discourse e non nel plugin.
Nell’ultima versione beta di Discourse, almeno il plugin funziona di nuovo.

2 Mi Piace

Posso confermare che al momento non è possibile ricompilare l’ultima versione stabile di Discourse con il plugin events attuale. :worried:

Purtroppo non possiamo passare a tests-passed: scegliamo il ramo stable proprio per evitare questo tipo di problemi. Sta qualcuno indagando la questione?

Ho provato a ricompilare con la v2.5.2 (che in passato funzionava), ma anche questa fallisce con lo stesso errore, quindi non sono sicuro di dove risieda il problema. C’è un commit particolare (del plugin o di Discourse stable) a cui posso puntare il container?

2 Mi Piace

La nostra politica di supporto mira a garantire la compatibilità con l’ultima versione di Discourse in cui i test sono superati (poiché questa è l’impostazione predefinita in discourse_docker). Tuttavia, vorremmo comprendere quanti utenti dei plugin della famiglia Pavilion utilizzano il ramo stable di Discourse.

Inoltre, prevediamo di deprecare il plugin events a favore del plugin events del team di Discourse nel prossimo futuro.

3 Mi Piace

Capisco che gli sviluppatori debbano guardare al futuro per mantenere la compatibilità con il futuro di Discourse — ha senso. Ma se non esiste un ramo stabile per il plugin, allora si lascia chi cerca una configurazione stabile in uno scenario in cui il loro setup si rompe a causa di una versione beta che non stanno utilizzando.

Hai qualche consiglio su quale commit ha rotto la compatibilitĂ ? Potrei provare a lavorare su quello, ma sono perso riguardo a quale modifica abbia causato questo.

Modifica: per chiunque abbia problemi con questo e abbia bisogno di una soluzione temporanea, questo commit sembra essere il colpevole.

3 Mi Piace

C’era un problema con le chiavi API webcal, che è stato risolto.

Grazie per la segnalazione @md-misko

4 Mi Piace

Ancora una volta, il plugin sembra incompatibile con l’ultima release di Discourse 2.6.0.beta5 ( 2bb7676ba4 ).
Questa volta, quando si accede al sito, viene visualizzata solo una pagina vuota. Tuttavia, a differenza della volta scorsa, non si è verificato alcun errore durante l’utilizzo di admin/upgrade.
Dopo aver disabilitato il plugin e ricostruito il contenitore, Discourse funziona correttamente di nuovo.

4 Mi Piace

Ciao, questo plugin Events genera i link “Aggiungi al calendario” nella parte superiore dei post, come in questa pagina:

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

Inoltre, qui nel 2021, quali sono le opinioni sull’uso di questo plugin Pavilion Events rispetto al plugin Calendar ufficiale?

Sono principalmente interessato a trovare modi per facilitare l’aggregazione delle visualizzazioni dei topic in un calendario e vorrei anche che i nostri utenti potessero aggiungere singoli eventi ai propri calendari Google o .ics.

Ciao.

1 Mi Piace

Ciao,

Come menzionato nell’OP

Ti invitiamo a dedicare un momento a valutare se le nuove funzionalitĂ  Eventi nel plugin Calendario di Discourse create dal team di Discourse siano adatte alle tue esigenze. Se soddisfano le tue necessitĂ , ti consigliamo di utilizzare quel plugin. Dovresti usare questo plugin solo se hai giĂ  preso in considerazione Discourse Calendar.

Ti consigliamo di utilizzare il plugin Calendario di Discourse se possibile. Supportiamo questo plugin solo per casi d’uso specifici che non sono coperti da quel plugin. Fortunatamente, il plugin Calendario include entrambe le funzionalità che hai menzionato.

Sì, è proprio questo plugin. Tuttavia, come già detto, sembra che tu abbia un buon caso d’uso per Discourse Calendar, quindi ti suggeriamo di usare quello.

Internamente, utilizziamo effettivamente il plugin Calendario di Discourse per organizzare eventi per i nostri membri, piuttosto che questo plugin. Supportiamo casi d’uso specifici per alcuni clienti e siamo aperti a nuovi casi d’uso specifici se qualcuno ne ha, ma questo è tutto.

3 Mi Piace

Grazie, Angus. Ho letto tutti quei consigli e mi sono rivolto a te in particolare perchÊ sembrava che tu fossi coinvolto nella creazione della community della Legal Empowerment Network in questione, e mi piaceva come funzionava. Ma sono contento di sentire che consigli il plugin ufficiale Calendario; lo esplorerò.

3 Mi Piace

Ho ragione nel dire che il plugin ufficiale Discourse Calendar non dispone di un filtro simile a “Agenda” nell’elenco degli argomenti? Ordinare l’elenco degli argomenti in base alle date degli eventi contenuti in essi è uno dei casi d’uso principali che mi interessano. Lo scopo è più legato alla gestione di progetti (trattare gli argomenti come attività e pianificarle di conseguenza) che agli eventi.

4 Mi Piace

Sto pensando di aggiungere anche qualcosa del genere. Hai trovato qualche soluzione?

Questa è la mia idea: ogni evento dovrebbe essere considerato una risposta, simile al fissare un argomento. Il pulsante “Aggiungi evento” diventa un menu a discesa che elenca tutti gli eventi nell’argomento.

2 Mi Piace

Controllo e ti faccio sapere.

1 Mi Piace

Non stiamo sviluppando nuove funzionalità per questo plugin. L’abbiamo deprecato a favore della funzione Eventi Ufficiali presente nel plugin discourse-calendar.

2 Mi Piace

Non credo che ci sia ancora una lista di argomenti in stile agenda nel plugin ufficiale.

1 Mi Piace

Qualcuno sa se c’è un nuovo link che conteneva in precedenza il contenuto di Pavilion?

Quando questo plugin viene eseguito in una categoria con restrizioni, vediamo:

… ma il collegamento alla documentazione è rotto e genera un errore 404. Ho cercato sul sito in questione e anche qui, ma non sapevo se ci fosse un’altra sede per queste istruzioni per l’utente.

2 Mi Piace

In qualche modo abbiamo spostato quell’argomento in una categoria chiusa. Dobbiamo riportarlo al pubblico. Ne discuteremo e torneremo presto da voi.

P.S.
La pagina dovrebbe essere di nuovo disponibile ora.

3 Mi Piace