Tecnoblog の Discourse コメントに関する体験

はい、しかし私の理解と記憶が正しければ、それは Discourse がオペレーティングシステムがダークモードを使用しているかを検出し、それに応じて自身を調整できるようにするものです。私が開始したこの投稿(あなたがリンクした投稿への返信であり、その投稿も相互にリンクしていました)は、オペレーティングシステムのモードに関係なく、ブログのライトモードとダークモードを手動で切り替えるブログ内のトグル/ボタンに関するものでした。私の認識は正しいでしょうか(それによって、私の以前の質問が関連性を持つでしょうか)?

明確にしておきますが、これは私が誰かに書いてもらった、私のブログで使用するためのスクリプトです。おそらく今、いくつかの調整が必要でしょう(おそらくクラスを少し変更するだけで済むかもしれませんが、確信はありません)。

<style>:root.dark{background: #1D2224}</style>
<script>
    const discourseUrl = 'https://ff2f.discourse.group';
    const clearDarkModeThrottle = () => window.darkThrottled = false;
    window.isDark = false;
    window.discourseLoaded = false;
    window.setDarkMode = state => {
        window.isDark = state;
        window.darkThrottled = true;
        localStorage.setItem('darkmode-enabled', state);
        Array.from(document.getElementsByClassName('dm-input')).forEach(element => element.checked = state);
        document.documentElement.classList[state ? 'add' : 'remove']('dark');
        setTimeout(clearDarkModeThrottle, 250);
        window.discourseLoaded && setIframeStyle();
    };
    let sub = () => {};
    if (localStorage.getItem('darkmode-enabled') === "true") {
        document.documentElement.classList.add('dark');
        // Update elements after domContentLoaded
        sub = () => window.setDarkMode(true);
    }
    document.addEventListener('DOMContentLoaded', () => {
        Array.from(document.getElementsByClassName('darkmode-toggle'))
            .forEach(element => element.onchange = darkmodeToggled);
        function darkmodeToggled() {
            const input = this.querySelector('input');
            window.darkThrottled ? (input.checked = !input.checked) : window.setDarkMode(input.checked);
        }
        sub();
        sub = null;
    });

    const handleMessageListener = (event) => {
        var origin = event.origin;
        if (origin === discourseUrl) {
            setIframeStyle();
            window.discourseLoaded = true;
        }
    };

    const setIframeStyle = () => {
        const iframe = document.getElementById("discourse-embed-frame");
        if (iframe && iframe.contentWindow) {
            iframe.contentWindow.postMessage(
                window.isDark ? "dark" : "light",
                discourseUrl
            );
        }
    };

  window.addEventListener("message", handleMessageListener);
</script>