MediaWiki:Common.js: различия между версиями
Luciana (обсуждение | вклад) Нет описания правки |
Luciana (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */ | /* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
function fetchReverinYear(callback) { | function fetchReverinYear(callback) { | ||
$. | $.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 | let reverinYear = parseInt(doc.body.textContent.trim(), 10); | ||
if (!isNaN(reverinYear)) { | if (!isNaN(reverinYear)) { | ||
Строка 86: | Строка 19: | ||
callback(null); | callback(null); | ||
}); | }); | ||
} | } | ||
function getReverinDate(reverinYear) { | function getReverinDate(reverinYear) { | ||
const now = new Date(); | const now = new Date(); | ||
const | const startOfYear = new Date(now.getFullYear(), 0, 1); | ||
const dayOfYear = Math.floor((now - startOfYear) / (1000 * 60 * 60 * 24)) + 1; | |||
const | |||
const D_offset = 49; // 18 февраля - 49-й день | const D_offset = 49; // 18 февраля - 49-й день | ||
const D_r = (( | const D_r = ((dayOfYear - D_offset + 365) % 365) + 1; | ||
// | // Лунный календарь | ||
const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, | 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]) { | ||
while ( | |||
dayCount -= monthLengths[monthIndex]; | dayCount -= monthLengths[monthIndex]; | ||
monthIndex++; | monthIndex++; | ||
} | } | ||
const reverinWeekDay = weekDays[(D_r - 1) % 7]; | |||
const | |||
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 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"; | dateDiv.style.whiteSpace = "pre-line"; | ||
dateDiv.innerText = "Загрузка..."; | dateDiv.innerText = "Загрузка..."; | ||
sidebar.appendChild(dateDiv); | |||
fetchReverinYear(function(reverinYear) { | fetchReverinYear(function(reverinYear) { | ||
dateDiv.innerText = reverinYear ? getReverinDate(reverinYear) : "Ошибка загрузки даты"; | |||
}); | }); | ||
} | } |
Версия от 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(); });