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

Материал из Revera Wiki
Нет описания правки
Нет описания правки
Строка 2: Строка 2:
$(document).ready(function() {
$(document).ready(function() {
     function fetchReverinYear(callback) {
     function fetchReverinYear(callback) {
         $.get("/api.php?action=parse&page=Шаблон:Текущий_год_Альдморры&prop=text&format=json", function(data) {
         $.ajax({
            if (data.parse && data.parse.text) {
            url: "/api.php",
                let parser = new DOMParser();
            data: {
                let doc = parser.parseFromString(data.parse.text["*"], "text/html");
                action: "parse",
                let reverinYear = parseInt(doc.body.textContent.trim(), 10);
                page: "Шаблон:Текущий_год_Альдморры",
               
                prop: "wikitext",
                if (!isNaN(reverinYear)) {
                format: "json"
                     callback(reverinYear);
            },
            dataType: "json",
            success: function(data) {
                if (data.parse && data.parse.wikitext) {
                    let rawText = data.parse.wikitext["*"].trim();
                    let reverinYear = parseInt(rawText, 10);
                   
                    if (!isNaN(reverinYear)) {
                        console.log("Год Альдморры успешно загружен:", reverinYear);
                        callback(reverinYear);
                     } else {
                        console.error("Ошибка: невозможно прочитать год из шаблона. Получено:", rawText);
                        callback(null);
                    }
                 } else {
                 } else {
                     console.error("Ошибка: не удалось получить корректный год.");
                     console.error("Ошибка: некорректный ответ от API MediaWiki.");
                     callback(null);
                     callback(null);
                 }
                 }
            },
            error: function() {
                console.error("Ошибка: не удалось выполнить запрос к API MediaWiki.");
                callback(null);
             }
             }
        }).fail(function() {
            console.error("Ошибка запроса к API MediaWiki.");
            callback(null);
         });
         });
     }
     }
Строка 59: Строка 73:


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

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

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

    insertReverinDate();
});