Events Plugin :Kalender:

Ich werde versuchen, dies nachzuvollziehen.

3 „Gefällt mir“

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.

3 „Gefällt mir“

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…

2 „Gefällt mir“

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!

4 „Gefällt mir“

Es scheint, dass das Problem in Discourse und nicht im Plugin lag.
In der neuesten Beta-Version von Discourse funktioniert das Plugin zumindest wieder.

2 „Gefällt mir“

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. :worried:

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?

2 „Gefällt mir“

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.

3 „Gefällt mir“

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.

3 „Gefällt mir“

Es gab ein Problem mit den Webcal-API-Schlüsseln, das nun behoben ist.

Danke für den Bericht @md-misko

4 „Gefällt mir“

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.

4 „Gefällt mir“

Hallo, erzeugt dieses Events-Plugin die Links „Zum Kalender hinzufügen

1 „Gefällt mir“

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.

3 „Gefällt mir“

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.

3 „Gefällt mir“

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).

4 „Gefällt mir“

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

2 „Gefällt mir“

Ich prüfe das und melde mich zurück.

1 „Gefällt mir“

Wir entwickeln keine neuen Funktionen für dieses Plugin mehr. Wir haben es zugunsten der offiziellen „Events“-Funktion im discourse-calendar-Plugin veraltet.

2 „Gefällt mir“

Ich glaube nicht, dass es im offiziellen Plugin bereits eine Agenda-Liste gibt.

1 „Gefällt mir“

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.

2 „Gefällt mir“

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.

3 „Gefällt mir“