Zeitzonen-Text (besonders bei Events) bearbeitbar machen

Die Diskussion aus :globe_showing_europe_africa: Neue Kalenderfunktion: Ortszeit anzeigen fortsetzend:

Unsere Seite(n) ist/sind fast ausschließlich auf unsere Nation beschränkt.

Wir haben ein besonderes Problem, bei dem unsere Zeitzone wie ein bestimmter Ort in unserem Land aussieht und Benutzer verwirren kann, wenn sie mit dem direkt darunter liegenden Ortsfeld gesehen wird:

In diesem Fall findet die (lokale) Veranstaltung in einer bekannten lokalen Einrichtung etwa 1000 km von der Stadt Auckland entfernt (in einer anderen Stadt) statt. Das (Auckland) dort anzugeben, ist ziemlich irreführend.

Im verlinkten Thread gab es einige Diskussionen dazu:

Es wäre sehr hilfreich, die Zeitzone (insbesondere bei Veranstaltungen) für lokale Veranstaltungen auf Site-Ebene ausblenden zu können, kann aber nicht erkennen, wie dies mit CSS möglich ist – und ask.discourse.com hilft nicht weiter.

Eng damit verbunden wäre es sehr hilfreich, lokale Veranstaltungen standardmäßig festlegen zu können.

1 „Gefällt mir“

Wenn ich richtig verstehe:

  • Die Zeitzonenstadt der Veranstaltung wird nur angezeigt, wenn Zeige lokale Zeit in den Veranstaltungseinstellungen aktiviert ist
  • Zeige lokale Zeit ist standardmäßig deaktiviert

Ich nehme also an, Sie haben Benutzer, die Zeige lokale Zeit aktivieren, und das möchten Sie nicht.

Was wäre, wenn Sie die Einstellung Zeige lokale Zeit ausblenden, sodass sie nicht aktiviert werden kann?

.event-field.show-local-time {
    display: none;
}

Neue Veranstaltungen zeigen dann die Uhrzeit und die Zeitzonenstadt des Benutzers an. (Ich sehe keine Möglichkeit, die Stadt auszublenden, da es sich um aufbereitete Inhalte handelt.)
z. B. wird eine in Phoenix-Zeit erstellte Veranstaltung mit meiner eigenen Ortszeit und „Chicago“ angezeigt.

Vielen Dank für Ihre Überlegungen und Vorschläge, Todd!

Nicht ganz – das ist nicht das Problem. Es spielt eigentlich keine große Rolle, ob es sich um die Ortszeit oder die Benutzerzeit handelt (in den meisten Fällen wird es dasselbe sein).
Das Problem ist, dass unsere spezifische Zeitzone aufgrund des enthaltenen Textes irreführend ist (es ist die einzige Zeitzone Neuseelands). Das gilt auch für Sie: In Ihrem obigen Beispiel wird impliziert, dass die Veranstaltung in Little Creek, Chicago, stattfindet.

Stattdessen strebe ich dies an:

Nachdem ich mir eine Weile den Kopf über das Vibe-Coding zerbrochen habe, habe ich dieses Stück JavaScript (in den JS-Tab einer lokalen Theme Component eingefügt), das den Trick für mich macht:

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("swap-auckland-for-nz", (api) => {
  function swapTimezones(root = document) {
    root.querySelectorAll('.relative-time').forEach(elem => {
      if (elem.textContent && elem.textContent.includes('(Auckland)')) {
        elem.textContent = elem.textContent.replace('(Auckland)', '(NZ)');
      }
    });
  }

  api.onPageChange(() => {
    swapTimezones(document);

    // Richten Sie einen persistenten Mutationsbeobachter für dynamische Ereignisse/Kalenderausgaben ein
    const observer = new MutationObserver(() => {
      swapTimezones(document);
    });

    observer.observe(document.body, { childList: true, subtree: true });

    // Optional: Erneutes Ausführen nach anderen Navigationsereignissen
    window.addEventListener("hashchange", () => swapTimezones(document));
    window.addEventListener("popstate", () => swapTimezones(document));
  });
});

Wenn ich Zeit finde, werde ich dies als installierbare Theme Component zusammenfassen, damit andere es bei Bedarf verwenden können.

Mir war nicht klar, dass Neuseeland in einer Zeitzone liegt, aber als ich dort fertig war, hatte ich das Gefühl, dass Ihr Problem JavaScript benötigen würde. Schön, dass Sie eine JS-Lösung zum Laufen gebracht haben!

1 „Gefällt mir“