Proverò a riprodurlo.
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.
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âŚ
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!
Sembra che il problema fosse in Discourse e non nel plugin.
Nellâultima versione beta di Discourse, almeno il plugin funziona di nuovo.
Posso confermare che al momento non è possibile ricompilare lâultima versione stabile di Discourse con il plugin events attuale. ![]()
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?
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.
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.
Câera un problema con le chiavi API webcal, che è stato risolto.
Grazie per la segnalazione @md-misko
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.
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.
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.
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ò.
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.
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.
Controllo e ti faccio sapere.
Non stiamo sviluppando nuove funzionalitĂ per questo plugin. Lâabbiamo deprecato a favore della funzione Eventi Ufficiali presente nel plugin discourse-calendar.
Non credo che ci sia ancora una lista di argomenti in stile agenda nel plugin ufficiale.
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.
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.




