Ich werde versuchen, dies nachzuvollziehen.
Wie kann ich JavaScript ausfĂŒhren, nachdem die Kalenderseite geladen wurde?
Edit: Ich erklÀre meinen Fall.
Mir wurde aufgetragen, mehrfarbige Ereignisse darzustellen, wie zum Beispiel:
Ich möchte keinen Fork des Plugins erstellen, daher habe ich mit dem folgenden Code eine Lösung gefunden.
Die Farben beziehen sich auf Ereignistags und ersetzen die Standardkategorienfarbe.
Ich habe die Tag-Liste auf diese Weise in das Ereignis-HTML eingefĂŒgt: 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>
Ich generiere gestreifte Muster:
<script type="text/discourse-plugin" version="0.8.23">
api.onPageChange((url, title) => {
// Tag-Farben
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>
Und ich habe ein wenig CSS hinzugefĂŒgt.
Das Ergebnis:
Ereignis mit 2 Tags:
Ereignis mit 3 Tags:
Das Problem, das ich habe, ist, dass mein JavaScript bei der SeitenĂ€nderung ausgefĂŒhrt wird und die gestreiften Farben nicht auf Ereignisse der vorherigen/nĂ€chsten Monate anwendet, da der Kalender seinen Inhalt dynamisch lĂ€dt.
Wenn ich im Oktober bin und zweimal auf âweiterâ klicke, um nach Dezember zu gelangen, sieht es so aus:
Deshalb möchte ich, dass mein JS ausgefĂŒhrt wird, sobald der Kalenderinhalt geladen wurde.
Ich habe eine andere Methode ausprobiert und den Streifeneffekt erreicht, indem ich die Funktion eventsForDay in /assets/javascripts/discourse/lib/date-utilities.js.es6 bearbeitet habe:
Ich habe diese Zeile:
let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);background-color:#${topic.category.color};`;
durch diese ersetzt:
let tStyle = `width:calc((100%*${daysInRow}) - ${buffer}px);`;
Und ich habe Folgendes hinzugefĂŒgt:
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});`;
}
Das funktioniert sehr gut und ist eine sauberere Methode, um das zu erreichen, was ich möchte. Allerdings weiĂ ich nicht, wie ich diese Funktion oder Datei ĂŒberschreiben kann, ohne einen Fork des Plugins erstellen zu mĂŒssenâŠ
Das Plugin scheint mit der neuesten Discourse-Version inkompatibel zu sein.
Aus der Rebuild-Logdatei:
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!': uninitialized constant #Class:0x0000562a2a10fa90::SCOPES
Meinten Sie vielleicht Sprockets (NameError)
** INKOMPATIBLES PLUGIN **
Sie können Discourse aufgrund von Fehlern im Plugin unter
/var/www/discourse/plugins/discourse-events
nicht erstellen.
Bitte versuchen Sie, dieses Plugin zu entfernen und den Build erneut durchzufĂŒhren!
Es scheint, dass das Problem in Discourse und nicht im Plugin lag.
In der neuesten Beta-Version von Discourse funktioniert das Plugin zumindest wieder.
Ich kann bestÀtigen, dass es derzeit nicht möglich ist, die neueste stabile Version von Discourse mit dem aktuellen Events-Plugin neu zu erstellen. ![]()
Leider können wir nicht auf âtests-passedâ umsteigen â wir wĂ€hlen den stabilen Zweig gerade, um solche Probleme zu vermeiden. Untersucht jemand dieses Problem?
Ich habe versucht, mit v2.5.2 neu zu erstellen (was frĂŒher funktionierte), aber das schlĂ€gt mit demselben Fehler fehl, sodass ich nicht sicher bin, wo das Problem liegt. Gibt es einen bestimmten Commit (des Plugins oder von stabilem Discourse), auf den ich den Container verweisen kann?
Unsere Supportrichtlinie sieht vor, die KompatibilitÀt mit der neuesten tests-passed-Version von Discourse sicherzustellen (da dies die Standardeinstellung in discourse_docker ist). Wir möchten jedoch gerne wissen, wie viele Nutzer der Pavilion-Familie von Plugins die stable-Branch von Discourse verwenden.
AuĂerdem planen wir, das Events-Plugin in naher Zukunft zugunsten des Events-Plugins des Discourse-Teams einzustellen.
Ich verstehe, dass Entwickler in die Zukunft schauen mĂŒssen, um die KompatibilitĂ€t mit der Zukunft von Discourse zu gewĂ€hrleisten â das ergibt Sinn. Aber wenn es keinen stabilen Zweig fĂŒr das Plugin gibt, bleiben Nutzer, die eine stabile Einrichtung anstreben, in einer Situation zurĂŒck, in der ihre Konfiguration aufgrund einer Beta-Version, die sie nicht verwenden, zusammenbricht.
Edit: FĂŒr alle, die Probleme damit haben und eine vorĂŒbergehende Workaround benötigen, scheint dieser Commit der Verursacher zu sein.
Es gab ein Problem mit den Webcal-API-SchlĂŒsseln, das nun behoben ist.
Danke fĂŒr den Bericht @md-misko
Wieder einmal scheint das Plugin mit der neuesten Discourse-Version 2.6.0.beta5 ( 2bb7676ba4 ) inkompatibel zu sein.
Diesmal wird beim Aufrufen der Seite lediglich eine leere Seite angezeigt. Im Gegensatz zum letzten Mal trat jedoch kein Fehler beim Verwenden von admin/upgrade auf.
Nachdem das Plugin deaktiviert und der Container neu erstellt wurde, funktioniert Discourse wieder einwandfrei.
Hallo, erzeugt dieses Events-Plugin die Links âZum Kalender hinzufĂŒgen
Hallo,
Wie im Eröffnungspost erwÀhnt:
Bitte nehmen Sie sich einen Moment Zeit, um zu ĂŒberlegen, ob die neuen Event-Funktionen im Discourse-Kalender-Plugin, die vom Discourse-Team entwickelt wurden, fĂŒr Sie geeignet sind. Wenn sie Ihre Anforderungen erfĂŒllen, empfehlen wir die Verwendung dieses Plugins. Sie sollten dieses Plugin nur verwenden, wenn Sie zuvor das Discourse-Kalender-Plugin in Betracht gezogen haben.
Wir empfehlen Ihnen, das Discourse-Kalender-Plugin zu verwenden, wenn möglich. Wir unterstĂŒtzen dieses Plugin nur fĂŒr spezifische AnwendungsfĂ€lle, die von diesem Plugin nicht abgedeckt werden. Zum GlĂŒck bietet das Kalender-Plugin beide von Ihnen genannten Funktionen.
Ja, genau das macht dieses Plugin. Aber wie bereits erwĂ€hnt, scheint es, als hĂ€tten Sie einen guten Anwendungsfall fĂŒr das Discourse-Kalender-Plugin, daher empfehle ich Ihnen, dieses zu verwenden.
Intern verwenden wir tatsĂ€chlich das Discourse-Kalender-Plugin, um Veranstaltungen fĂŒr unsere Mitglieder zu organisieren, und nicht dieses Plugin. Wir unterstĂŒtzen spezifische AnwendungsfĂ€lle fĂŒr einige Kunden und sind offen fĂŒr weitere spezifische AnwendungsfĂ€lle, falls jemand welche hat â aber das ist es auch schon.
Danke, Angus. Ich habe all diese RatschlÀge gelesen und habe mich speziell an dich gewandt, weil es so aussah, als wÀrst du an der Einrichtung der betreffenden Legal Empowerment Network-Community beteiligt gewesen, und mir gefiel, wie sie funktionierte. Aber es freut mich zu hören, dass du das offizielle Kalender-Plugin empfiehlst; ich werde das mal erkunden.
Liege ich richtig, wenn ich sage, dass das offizielle Discourse Calendar-Plugin keine solche âAgendaâ-Filteroption in der Themenliste hat? Das Sortieren der Themenliste nach den Ereignisdaten in einem Thema ist einer der HauptanwendungsfĂ€lle, die mich interessieren. Es geht dabei weniger um Veranstaltungen, sondern vielmehr um Projektmanagement (Themen als Aufgaben behandeln und entsprechend planen).
Ich ĂŒberlege, auch so etwas hinzuzufĂŒgen. Hast du bereits Lösungen gefunden?
Mein Gedanke: Jedes Ereignis sollte wie das Anpinnen eines Themas als Antwort betrachtet werden. Der Button âEreignis hinzufĂŒgen
Ich prĂŒfe das und melde mich zurĂŒck.
Wir entwickeln keine neuen Funktionen fĂŒr dieses Plugin mehr. Wir haben es zugunsten der offiziellen âEventsâ-Funktion im discourse-calendar-Plugin veraltet.
Ich glaube nicht, dass es im offiziellen Plugin bereits eine Agenda-Liste gibt.
WeiĂ jemand, ob der Link, der frĂŒher den Inhalt unter Pavilion enthielt, nicht mehr existiert?
Wenn dieses Plugin in einer eingeschrĂ€nkten Kategorie ausgefĂŒhrt wird, sehen wir:
⊠aber der Link zur Dokumentation ist defekt und fĂŒhrt zu einem 404-Fehler. Ich habe auf der betreffenden Website und auch hier etwas gesucht, wusste aber nicht, ob es einen anderen Ort fĂŒr diese Benutzeranleitung gibt.
Wir haben das Thema irgendwie in eine geschlossene Kategorie verschoben. Es muss wieder öffentlich gemacht werden. Wir werden uns dazu austauschen und uns bald wieder melden.
p.s.
Die Seite sollte jetzt wieder verfĂŒgbar sein.




