Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Änderung 917 von Secretsofnele (Diskussion) rückgängig gemacht.
Markierung: Rückgängigmachung
Zeile 1: Zeile 1:
// === Goreanische runde Uhr (oben 10 und 20) ===
mw.loader.using(['mediawiki.util'], function () {
mw.loader.using(['mediawiki.util'], function () {


Zeile 7: Zeile 6:
     const AHN_PER_DAY = 20;
     const AHN_PER_DAY = 20;


     const IHN_PER_AHN = IHN_PER_EHN * EHN_PER_AHN;
     const IHN_PER_AHN = IHN_PER_EHN * EHN_PER_AHN;   // 80 * 40 = 3200
     const IHN_PER_DAY = IHN_PER_AHN * AHN_PER_DAY;
     const IHN_PER_DAY = IHN_PER_AHN * AHN_PER_DAY;   // 64000


     const SEC_PER_IHN = 86400 / IHN_PER_DAY;
     const SEC_PER_IHN = 86400 / IHN_PER_DAY;         // 86400 sec pro Tag -> goreanische Ihn


     function getGoreanTime() {
     function getGoreanTime() {
Zeile 21: Zeile 20:


         const ahnIndex = Math.floor(dayIhn / IHN_PER_AHN);
         const ahnIndex = Math.floor(dayIhn / IHN_PER_AHN);
         const rest = dayIhn % IHN_PER_AHN;
         const rest1 = dayIhn % IHN_PER_AHN;


         const ehn = Math.floor(rest / IHN_PER_EHN);
         const ehn = Math.floor(rest1 / IHN_PER_EHN);
         const ihn = rest % IHN_PER_EHN;
         const ihn = rest1 % IHN_PER_EHN;


         const ahn = ahnIndex + 1;
         const ahn = ahnIndex + 1;
Zeile 41: Zeile 40:
         const centerY = clock.clientHeight / 2;
         const centerY = clock.clientHeight / 2;


         const radiusOuter = 100; // 1–10
         const radiusOuter = 100; // für 1–10
         const radiusInner = 78;   // 11–20
         const radiusInner = 78; // für 11–20
 
        // Wir wollen: oben = 10 (außen) + 20 (innen)
        // Standard 0° = rechts, aber oben ist -90°
        // Wir verschieben um +180°, damit oben 10 erscheint
        const baseOffset = 180;


        // Nur Zahlen (1–10 außen, 11–20 innen)
         for (let i = 0; i < 10; i++) {
         for (let i = 0; i < 10; i++) {
            const angle = (360 / 10) * i;


            // Winkel für 1–10/11–20: 36° Schritte
            const angle = baseOffset + (360 / 10) * i;
            // Umrechnung auf Kreis-Math-Winkel: oben = -90°
             const rad = (angle - 90) * Math.PI / 180;
             const rad = (angle - 90) * Math.PI / 180;


             // ÄUSSERE ZAHL (1–10)
             // Äußere Zahl 1–10
             const numOuter = document.createElement("div");
             const numOuter = document.createElement("div");
             numOuter.className = "gor-number";
             numOuter.className = "gor-number";
Zeile 67: Zeile 59:
             clock.appendChild(numOuter);
             clock.appendChild(numOuter);


             // INNERE ZAHL (11–20)
             // Innere Zahl 11–20
             const numInner = document.createElement("div");
             const numInner = document.createElement("div");
             numInner.className = "gor-number gor-number-inner";
             numInner.className = "gor-number gor-number-inner";
Zeile 84: Zeile 76:
         const handIhn = document.getElementById("handIhn");
         const handIhn = document.getElementById("handIhn");


         if (!handAhn) return;
         if (!handAhn || !handEhn || !handIhn) return;
 
        const t = getGoreanTime();


        // Ahn-Zeiger: 10er-Blatt mit zwei Runden
         const time = getGoreanTime();
         const ahnCycle = (t.ahn - 1) % 10;
        const angleAhn = ((ahnCycle + t.ehn / 40 + t.ihn / 3200) / 10) * 360;


         // Ehn-Zeiger (40 Ehn)
         // Ahn-Zeiger: 10er-Ziffernblatt, zwei Umdrehungen pro Tag
         const angleEhn = ((t.ehn + t.ihn / 80) / 40) * 360;
        const ahnCycle = (time.ahn - 1) % 10;
         const angleAhn = ((ahnCycle + time.ehn / 40 + time.ihn / 3200) / 10) * 360;


         // Ihn-Zeiger (80 Ihn)
         const angleEhn = ((time.ehn + time.ihn / 80) / 40) * 360;
         const angleIhn = (t.ihn / 80) * 360;
         const angleIhn = (time.ihn / 80) * 360;


         handAhn.style.transform = `translate(-50%, -100%) rotate(${angleAhn}deg)`;
         handAhn.style.transform = `translate(-50%, -100%) rotate(${angleAhn}deg)`;
Zeile 102: Zeile 91:
         handIhn.style.transform = `translate(-50%, -100%) rotate(${angleIhn}deg)`;
         handIhn.style.transform = `translate(-50%, -100%) rotate(${angleIhn}deg)`;


        // Digitale Ausgabe
         const pad2 = n => String(Math.floor(n)).padStart(2, "0");
         const pad2 = n => String(Math.floor(n)).padStart(2, "0");


         document.getElementById("digitalAhn").textContent = "Ahn " + pad2(t.ahn);
         const dAhn = document.getElementById("digitalAhn");
         document.getElementById("digitalEhn").textContent = "Ehn " + pad2(t.ehn);
        const dEhn = document.getElementById("digitalEhn");
         document.getElementById("digitalIhn").textContent = "Ihn " + pad2(t.ihn);
        const dIhn = document.getElementById("digitalIhn");
 
        if (dAhn) dAhn.textContent = "Ahn " + pad2(time.ahn);
         if (dEhn) dEhn.textContent = "Ehn " + pad2(time.ehn);
         if (dIhn) dIhn.textContent = "Ihn " + pad2(time.ihn);


         const info = document.getElementById("ahnInfo");
         const info = document.getElementById("ahnInfo");
 
        if (info) {
        if (t.ahn === 10) info.textContent = "10. Ahn – goreanischer Mittag";
            if (time.ahn === 10) info.textContent = "10. Ahn – goreanischer Mittag";
        else if (t.ahn === 20) info.textContent = "20. Ahn – goreanische Mitternacht";
            else if (time.ahn === 20) info.textContent = "20. Ahn – goreanische Mitternacht";
        else info.textContent = t.ahn + ". Ahn des goreanischen Tages";
            else info.textContent = time.ahn + ". Ahn des goreanischen Tages";
        }
     }
     }


     function init() {
     function initGoreanClock() {
         if (!document.getElementById("gorClock")) return;
         if (!document.getElementById("gorClock")) return;


Zeile 124: Zeile 117:
     }
     }


     mw.hook('wikipage.content').add(init);
     mw.hook('wikipage.content').add(initGoreanClock);
});
});

Version vom 25. November 2025, 09:35 Uhr

mw.loader.using(['mediawiki.util'], function () {

    // Goreanische Konstanten
    const IHN_PER_EHN = 80;
    const EHN_PER_AHN = 40;
    const AHN_PER_DAY = 20;

    const IHN_PER_AHN = IHN_PER_EHN * EHN_PER_AHN;   // 80 * 40 = 3200
    const IHN_PER_DAY = IHN_PER_AHN * AHN_PER_DAY;   // 64000

    const SEC_PER_IHN = 86400 / IHN_PER_DAY;         // 86400 sec pro Tag -> goreanische Ihn

    function getGoreanTime() {
        const now = new Date();
        const midnight = new Date(now.getFullYear(), now.getMonth(), now.getDate());
        const elapsed = (now - midnight) / 1000;

        const totalIhn = elapsed / SEC_PER_IHN;
        const dayIhn = ((totalIhn % IHN_PER_DAY) + IHN_PER_DAY) % IHN_PER_DAY;

        const ahnIndex = Math.floor(dayIhn / IHN_PER_AHN);
        const rest1 = dayIhn % IHN_PER_AHN;

        const ehn = Math.floor(rest1 / IHN_PER_EHN);
        const ihn = rest1 % IHN_PER_EHN;

        const ahn = ahnIndex + 1;

        return { ahnIndex, ahn, ehn, ihn };
    }

    function buildDial() {
        const clock = document.getElementById("gorClock");
        if (!clock) return;

        if (clock.dataset.gorDialBuilt === "1") return;
        clock.dataset.gorDialBuilt = "1";

        const centerX = clock.clientWidth / 2;
        const centerY = clock.clientHeight / 2;

        const radiusOuter = 100; // für 1–10
        const radiusInner = 78;  // für 11–20

        // Nur Zahlen (1–10 außen, 11–20 innen)
        for (let i = 0; i < 10; i++) {
            const angle = (360 / 10) * i;

            const rad = (angle - 90) * Math.PI / 180;

            // Äußere Zahl 1–10
            const numOuter = document.createElement("div");
            numOuter.className = "gor-number";
            numOuter.textContent = i + 1;

            numOuter.style.left = (centerX + radiusOuter * Math.cos(rad)) + "px";
            numOuter.style.top  = (centerY + radiusOuter * Math.sin(rad)) + "px";

            clock.appendChild(numOuter);

            // Innere Zahl 11–20
            const numInner = document.createElement("div");
            numInner.className = "gor-number gor-number-inner";
            numInner.textContent = i + 11;

            numInner.style.left = (centerX + radiusInner * Math.cos(rad)) + "px";
            numInner.style.top  = (centerY + radiusInner * Math.sin(rad)) + "px";

            clock.appendChild(numInner);
        }
    }

    function updateGoreanClock() {
        const handAhn = document.getElementById("handAhn");
        const handEhn = document.getElementById("handEhn");
        const handIhn = document.getElementById("handIhn");

        if (!handAhn || !handEhn || !handIhn) return;

        const time = getGoreanTime();

        // Ahn-Zeiger: 10er-Ziffernblatt, zwei Umdrehungen pro Tag
        const ahnCycle = (time.ahn - 1) % 10;
        const angleAhn = ((ahnCycle + time.ehn / 40 + time.ihn / 3200) / 10) * 360;

        const angleEhn = ((time.ehn + time.ihn / 80) / 40) * 360;
        const angleIhn = (time.ihn / 80) * 360;

        handAhn.style.transform = `translate(-50%, -100%) rotate(${angleAhn}deg)`;
        handEhn.style.transform = `translate(-50%, -100%) rotate(${angleEhn}deg)`;
        handIhn.style.transform = `translate(-50%, -100%) rotate(${angleIhn}deg)`;

        const pad2 = n => String(Math.floor(n)).padStart(2, "0");

        const dAhn = document.getElementById("digitalAhn");
        const dEhn = document.getElementById("digitalEhn");
        const dIhn = document.getElementById("digitalIhn");

        if (dAhn) dAhn.textContent = "Ahn " + pad2(time.ahn);
        if (dEhn) dEhn.textContent = "Ehn " + pad2(time.ehn);
        if (dIhn) dIhn.textContent = "Ihn " + pad2(time.ihn);

        const info = document.getElementById("ahnInfo");
        if (info) {
            if (time.ahn === 10) info.textContent = "10. Ahn – goreanischer Mittag";
            else if (time.ahn === 20) info.textContent = "20. Ahn – goreanische Mitternacht";
            else info.textContent = time.ahn + ". Ahn des goreanischen Tages";
        }
    }

    function initGoreanClock() {
        if (!document.getElementById("gorClock")) return;

        buildDial();
        updateGoreanClock();
        setInterval(updateGoreanClock, 150);
    }

    mw.hook('wikipage.content').add(initGoreanClock);
});