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

Материал из Revera Wiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
/* Размещённый здесь код 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}\n${dayCount} ${monthNames[monthIndex]}, {{Текущий_год_Альдморры}}`;
/* const dateText = `${reverinWeekDay}\n${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`; */
            // Выводим дату в боковую панель
            dateDiv.innerText = dateText;
        }
        // Вызываем функцию для отображения даты
        getReverinDate();
    }
});
$(document).ready(function() {
$(document).ready(function() {
     function fetchReverinYear(callback) {
     function fetchReverinYear(callback) {
         $.getJSON("/api.php?action=parse&page=Шаблон:Текущий_год_Альдморры&prop=text&format=json", function(data) {
         $.get("/api.php?action=parse&page=Шаблон:Текущий_год_Альдморры&prop=text&format=json", function(data) {
             if (data.parse && data.parse.text) {
             if (data.parse && data.parse.text) {
                 let parser = new DOMParser();
                 let parser = new DOMParser();
                 let doc = parser.parseFromString(data.parse.text["*"], "text/html");
                 let doc = parser.parseFromString(data.parse.text["*"], "text/html");
                 let reverinYearText = doc.body.textContent.trim();
                 let reverinYear = parseInt(doc.body.textContent.trim(), 10);
                let reverinYear = parseInt(reverinYearText, 10);
                  
                  
                 if (!isNaN(reverinYear)) {
                 if (!isNaN(reverinYear)) {
Строка 86: Строка 19:
             callback(null);
             callback(null);
         });
         });
    }
    function isLeap(year) {
        return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
     }
     }


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


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


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


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


        // Определяем день недели
         const reverinWeekDay = weekDays[(D_r - 1) % 7];
         const weekDayIndex = (D_r - 1) % 7;
        const reverinWeekDay = weekDays[weekDayIndex];
 
        // Формируем строку даты
         return `${reverinWeekDay},\n${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`;
         return `${reverinWeekDay},\n${dayCount} ${monthNames[monthIndex]}, ${reverinYear}`;
     }
     }
Строка 128: Строка 47:
     function insertReverinDate() {
     function insertReverinDate() {
         let sidebar = document.getElementById("p-navigation") || document.getElementById("p-tb");
         let sidebar = document.getElementById("p-navigation") || document.getElementById("p-tb");
         if (sidebar) {
         if (sidebar) {
            let portletBody = sidebar.querySelector(".body") || sidebar;
             let dateDiv = document.createElement("div");
             let dateDiv = document.createElement("div");
             dateDiv.id = "reverinDateWidget";
             dateDiv.id = "reverinDateWidget";
Строка 138: Строка 54:
             dateDiv.style.marginTop = "10px";
             dateDiv.style.marginTop = "10px";
             dateDiv.style.fontWeight = "bold";
             dateDiv.style.fontWeight = "bold";
             dateDiv.style.whiteSpace = "pre-line"; // Делает \n видимым
             dateDiv.style.whiteSpace = "pre-line";
             dateDiv.innerText = "Загрузка...";
             dateDiv.innerText = "Загрузка...";
 
             sidebar.appendChild(dateDiv);
             portletBody.appendChild(dateDiv);


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

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

/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
$(document).ready(function() {
    function fetchReverinYear(callback) {
        $.get("/api.php?action=parse&page=Шаблон:Текущий_год_Альдморры&prop=text&format=json", function(data) {
            if (data.parse && data.parse.text) {
                let parser = new DOMParser();
                let doc = parser.parseFromString(data.parse.text["*"], "text/html");
                let reverinYear = parseInt(doc.body.textContent.trim(), 10);
                
                if (!isNaN(reverinYear)) {
                    callback(reverinYear);
                } else {
                    console.error("Ошибка: не удалось получить корректный год.");
                    callback(null);
                }
            }
        }).fail(function() {
            console.error("Ошибка запроса к API MediaWiki.");
            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) {
                dateDiv.innerText = reverinYear ? getReverinDate(reverinYear) : "Ошибка загрузки даты";
            });
        }
    }

    insertReverinDate();
});