MediaWiki:Common.js: различия между версиями

Материал из Revera Wiki
Отмена версии 4300, сделанной Luciana (обсуждение)
Метки: отмена отменено
Нет описания правки
Метка: ручная отмена
Строка 1: Строка 1:
mw.loader.load("https://revera.world/js/reverin-date.js");
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
$(document).ready(function() {
    function fetchReverinYear(callback) {
        $.ajax({
            url: "/wiki/index.php?title=Шаблон:Текущий_год_Альдморры&action=raw",
            dataType: "text",
            success: function(data) {
                console.log("Сырые данные из шаблона:", data); // Отладка


document.addEventListener("DOMContentLoaded", function() {
                let reverinYear = parseInt(data.trim(), 10);
    let sidebar = document.getElementById("p-navigation") || document.getElementById("p-tb");
                if (!isNaN(reverinYear)) {
                    console.log("Год Альдморры загружен:", reverinYear);
                    callback(reverinYear);
                } else {
                    console.error("Ошибка: невозможно прочитать год. Получено:", data);
                    callback(null);
                }
            },
            error: function() {
                console.error("Ошибка загрузки шаблона через raw HTML.");
                callback(null);
            }
        });
    }


     function ensureReverinDateWidget() {
     function getReverinDate(reverinYear) {
         if (sidebar && !document.getElementById("reverinDateWidget")) {
         const now = new Date();
        const startOfYear = new Date(now.getFullYear(), 0, 1);
        const dayOfYear = Math.floor((now - startOfYear) / (1000 * 60 * 60 * 24)) + 1;
        const D_offset = 49; // 18 февраля - 49-й день
 
        const D_r = ((dayOfYear - D_offset + 365) % 365) + 1;
 
        const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 29];
        const monthNames = ["Любимец", "Жрец", "Хранитель", "Правитель", "Воитель",
                            "Хозяин", "Купец", "Творец", "Плут", "Колдун", "Отшельник", "Наставник"];
        const weekDays = ["Вивидис", "Аспирис", "Альтис", "Эквилис", "Либерис", "Реновис", "Мистерис"];
 
        let dayCount = D_r, monthIndex = 0;
        while (dayCount > monthLengths[monthIndex]) {
            dayCount -= monthLengths[monthIndex];
            monthIndex++;
        }
 
        const reverinWeekDay = weekDays[(D_r - 1) % 7];
        return `${reverinWeekDay} \n${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`;
    }
 
    function insertReverinDate() {
        let sidebar = document.getElementById("p-navigation") || document.getElementById("p-tb");
        if (sidebar) {
             let dateDiv = document.createElement("div");
             let dateDiv = document.createElement("div");
             dateDiv.id = "reverinDateWidget";
             dateDiv.id = "reverinDateWidget";
Строка 13: Строка 57:
             dateDiv.style.fontWeight = "bold";
             dateDiv.style.fontWeight = "bold";
             dateDiv.style.whiteSpace = "pre-line";
             dateDiv.style.whiteSpace = "pre-line";
             dateDiv.innerText = "Загрузка реверинской даты...";
             dateDiv.innerText = "Загрузка...";
            sidebar.appendChild(dateDiv);


             sidebar.appendChild(dateDiv);
             fetchReverinYear(function(reverinYear) {
            console.log("`#reverinDateWidget` вставлен в сайтбар!");
                if (reverinYear) {
                    dateDiv.innerText = getReverinDate(reverinYear);
                } else {
                    dateDiv.innerText = "Ошибка загрузки даты";
                }
            });
         }
         }
     }
     }


     function waitForReverinScript(callback) {
     insertReverinDate();
        let attempts = 0;
        let checkInterval = setInterval(function() {
            if (typeof window.loadReverinDate === "function") {
                clearInterval(checkInterval);
                console.log("Скрипт `reverin-date.js` загружен, запускаем!");
                window.loadReverinDate();
                callback();
            } else if (attempts >= 20) {
                clearInterval(checkInterval);
                console.error("Ошибка: `reverin-date.js` не загрузился!");
            }
            attempts++;
        }, 250);
    }
 
    function waitForTooltips() {
        let attempts = 0;
        let checkInterval = setInterval(function() {
            if (typeof window.addTooltipHandlers === "function") {
                clearInterval(checkInterval);
                console.log("Подсказки загружены, запускаем!");
                window.addTooltipHandlers();
            } else if (attempts >= 20) {
                clearInterval(checkInterval);
                console.error("Ошибка: `addTooltipHandlers` не загрузился!");
            }
            attempts++;
        }, 250);
    }
 
    ensureReverinDateWidget();
    waitForReverinScript(waitForTooltips);
});
});

Версия от 00:28, 26 февраля 2025

/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
$(document).ready(function() {
    function fetchReverinYear(callback) {
        $.ajax({
            url: "/wiki/index.php?title=Шаблон:Текущий_год_Альдморры&action=raw",
            dataType: "text",
            success: function(data) {
                console.log("Сырые данные из шаблона:", data); // Отладка

                let reverinYear = parseInt(data.trim(), 10);
                if (!isNaN(reverinYear)) {
                    console.log("Год Альдморры загружен:", reverinYear);
                    callback(reverinYear);
                } else {
                    console.error("Ошибка: невозможно прочитать год. Получено:", data);
                    callback(null);
                }
            },
            error: function() {
                console.error("Ошибка загрузки шаблона через raw HTML.");
                callback(null);
            }
        });
    }

    function getReverinDate(reverinYear) {
        const now = new Date();
        const startOfYear = new Date(now.getFullYear(), 0, 1);
        const dayOfYear = Math.floor((now - startOfYear) / (1000 * 60 * 60 * 24)) + 1;
        const D_offset = 49; // 18 февраля - 49-й день

        const D_r = ((dayOfYear - D_offset + 365) % 365) + 1;

        const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 29];
        const monthNames = ["Любимец", "Жрец", "Хранитель", "Правитель", "Воитель",
                            "Хозяин", "Купец", "Творец", "Плут", "Колдун", "Отшельник", "Наставник"];
        const weekDays = ["Вивидис", "Аспирис", "Альтис", "Эквилис", "Либерис", "Реновис", "Мистерис"];

        let dayCount = D_r, monthIndex = 0;
        while (dayCount > monthLengths[monthIndex]) {
            dayCount -= monthLengths[monthIndex];
            monthIndex++;
        }

        const reverinWeekDay = weekDays[(D_r - 1) % 7];
        return `${reverinWeekDay} \n${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`;
    }

    function insertReverinDate() {
        let sidebar = document.getElementById("p-navigation") || document.getElementById("p-tb");
        if (sidebar) {
            let dateDiv = document.createElement("div");
            dateDiv.id = "reverinDateWidget";
            dateDiv.style.padding = "10px";
            dateDiv.style.borderTop = "1px solid #ccc";
            dateDiv.style.marginTop = "10px";
            dateDiv.style.fontWeight = "bold";
            dateDiv.style.whiteSpace = "pre-line";
            dateDiv.innerText = "Загрузка...";
            sidebar.appendChild(dateDiv);

            fetchReverinYear(function(reverinYear) {
                if (reverinYear) {
                    dateDiv.innerText = getReverinDate(reverinYear);
                } else {
                    dateDiv.innerText = "Ошибка загрузки даты";
                }
            });
        }
    }

    insertReverinDate();
});