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

Материал из Revera Wiki
Нет описания правки
Нет описания правки
Строка 55: Строка 55:


             // Формируем строку даты
             // Формируем строку даты
             const dateText = `${reverinWeekDay}` </br> `${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`;
             const dateText = `${reverinWeekDay} ${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`;


             // Выводим дату в боковую панель
             // Выводим дату в боковую панель

Версия от 17:22, 25 февраля 2025

/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
$(document).ready(function() {
    // Найти панель навигации (можно заменить на другую панель, если нужно)
    let sidebar = document.getElementById("p-navigation");

    // Если боковая панель существует, добавляем контейнер для даты
    if (sidebar) {
        let portletBody = sidebar.querySelector(".body") || 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.innerText = "Загрузка реверинской даты...";

        portletBody.appendChild(dateDiv);

        // Функция для вычисления реверинской даты
        function isLeap(year) {
            return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
        }

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

            const reverinYear = (D_z >= D_offset ? earthYear : earthYear - 1);
            const D_r = ((D_z - D_offset + earthTotalDays) % earthTotalDays) + 1;

            // Длины лун (месяцев)
            const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, (isLeap(reverinYear) ? 30 : 29)];
            const monthNames = ["Любимец", "Жрец", "Хранитель", "Правитель", "Воитель",
                                "Хозяин", "Купец", "Творец", "Плут", "Колдун", "Отшельник", "Наставник"];

            // Дни недели в реверинском календаре
            const weekDays = ["Вивидис", "Аспирис", "Альтис", "Эквилис", "Либерис", "Реновис", "Мистерис"];

            // Определяем месяц и день
            let dayCount = D_r;
            let monthIndex = 0;
            while (monthIndex < monthLengths.length && dayCount > monthLengths[monthIndex]) {
                dayCount -= monthLengths[monthIndex];
                monthIndex++;
            }

            // Определяем день недели
            const weekDayIndex = (D_r - 1) % 7;
            const reverinWeekDay = weekDays[weekDayIndex];

            // Формируем строку даты
            const dateText = `${reverinWeekDay} ${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`;

            // Выводим дату в боковую панель
            dateDiv.innerText = dateText;
        }

        // Вызываем функцию для отображения даты
        getReverinDate();
    }
});