MediaWiki:Common.js: различия между версиями
Luciana (обсуждение | вклад) Нет описания правки Метка: ручная отмена |
Luciana (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
$(document).ready(function() { | $(document).ready(function() { | ||
function fetchReverinYear(callback) { | function fetchReverinYear(callback) { | ||
Строка 6: | Строка 5: | ||
dataType: "text", | dataType: "text", | ||
success: function(data) { | success: function(data) { | ||
let reverinYear = parseInt(data.trim(), 10); | let reverinYear = parseInt(data.trim(), 10); | ||
if (!isNaN(reverinYear)) { | if (!isNaN(reverinYear)) { | ||
Строка 13: | Строка 10: | ||
callback(reverinYear); | callback(reverinYear); | ||
} else { | } else { | ||
console.error("Ошибка: невозможно прочитать год. | console.error("Ошибка: невозможно прочитать год."); | ||
callback(null); | callback(null); | ||
} | } | ||
}, | }, | ||
error: function() { | error: function() { | ||
console.error("Ошибка загрузки шаблона | console.error("Ошибка загрузки шаблона."); | ||
callback(null); | callback(null); | ||
} | } | ||
Строка 24: | Строка 21: | ||
} | } | ||
function getReverinDate(reverinYear) { | function fetchGuardian(year, callback) { | ||
$.ajax({ | |||
url: "/wiki/index.php?title=Шаблон:Хранители_лет&action=raw", | |||
dataType: "text", | |||
success: function(data) { | |||
let lines = data.split("\n"); | |||
let guardian = "Неизвестный Хранитель"; | |||
for (let line of lines) { | |||
let parts = line.split("="); | |||
if (parts.length === 2) { | |||
let storedYear = parseInt(parts[0].trim(), 10); | |||
if (storedYear === year) { | |||
guardian = parts[1].trim(); | |||
break; | |||
} | |||
} | |||
} | |||
console.log(`Хранитель для ${year}: ${guardian}`); | |||
callback(guardian); | |||
}, | |||
error: function() { | |||
console.error("Ошибка загрузки Хранителей лет."); | |||
callback("Неизвестный Хранитель"); | |||
} | |||
}); | |||
} | |||
function isReverinLeap(year) { | |||
return [1, 5, 9, 13, 17, 22, 26, 30].includes(year % 33); | |||
} | |||
function getReverinDate(reverinYear, guardian) { | |||
const now = new Date(); | const now = new Date(); | ||
const startOfYear = new Date(now.getFullYear(), 0, 1); | const startOfYear = new Date(now.getFullYear(), 0, 1); | ||
const dayOfYear = Math.floor((now - startOfYear) / (1000 * 60 * 60 * 24)) + 1; | const dayOfYear = Math.floor((now - startOfYear) / (1000 * 60 * 60 * 24)) + 1; | ||
const D_offset = 49; | const D_offset = 49; | ||
const D_r = ((dayOfYear - D_offset + 365) % 365) + 1; | const D_r = ((dayOfYear - D_offset + 365) % 365) + 1; | ||
const reverinLeap = isReverinLeap(reverinYear); | |||
const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 29]; | const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, reverinLeap ? 30 : 29]; | ||
const monthNames = ["Любимец", "Жрец", "Хранитель", "Правитель", "Воитель", | const monthNames = ["Любимец", "Жрец", "Хранитель", "Правитель", "Воитель", | ||
"Хозяин", "Купец", "Творец", "Плут", "Колдун", "Отшельник", "Наставник"]; | "Хозяин", "Купец", "Творец", "Плут", "Колдун", "Отшельник", "Наставник"]; | ||
Строка 44: | Строка 74: | ||
const reverinWeekDay = weekDays[(D_r - 1) % 7]; | const reverinWeekDay = weekDays[(D_r - 1) % 7]; | ||
return `${reverinWeekDay} \n${dayCount} ${monthNames[monthIndex]}, ${ | const formattedYear = reverinLeap ? `${reverinYear}'` : reverinYear; | ||
return `${reverinWeekDay}\n${dayCount} ${monthNames[monthIndex]}, ${formattedYear} год\n${guardian}`; | |||
} | } | ||
Строка 62: | Строка 94: | ||
fetchReverinYear(function(reverinYear) { | fetchReverinYear(function(reverinYear) { | ||
if (reverinYear) { | if (reverinYear) { | ||
dateDiv.innerText = getReverinDate(reverinYear); | fetchGuardian(reverinYear, function(guardian) { | ||
dateDiv.innerText = getReverinDate(reverinYear, guardian); | |||
}); | |||
} else { | } else { | ||
dateDiv.innerText = "Ошибка загрузки даты"; | dateDiv.innerText = "Ошибка загрузки даты"; |
Версия от 00:43, 26 февраля 2025
$(document).ready(function() { function fetchReverinYear(callback) { $.ajax({ url: "/wiki/index.php?title=Шаблон:Текущий_год_Альдморры&action=raw", dataType: "text", success: function(data) { let reverinYear = parseInt(data.trim(), 10); if (!isNaN(reverinYear)) { console.log("Год Альдморры загружен:", reverinYear); callback(reverinYear); } else { console.error("Ошибка: невозможно прочитать год."); callback(null); } }, error: function() { console.error("Ошибка загрузки шаблона."); callback(null); } }); } function fetchGuardian(year, callback) { $.ajax({ url: "/wiki/index.php?title=Шаблон:Хранители_лет&action=raw", dataType: "text", success: function(data) { let lines = data.split("\n"); let guardian = "Неизвестный Хранитель"; for (let line of lines) { let parts = line.split("="); if (parts.length === 2) { let storedYear = parseInt(parts[0].trim(), 10); if (storedYear === year) { guardian = parts[1].trim(); break; } } } console.log(`Хранитель для ${year}: ${guardian}`); callback(guardian); }, error: function() { console.error("Ошибка загрузки Хранителей лет."); callback("Неизвестный Хранитель"); } }); } function isReverinLeap(year) { return [1, 5, 9, 13, 17, 22, 26, 30].includes(year % 33); } function getReverinDate(reverinYear, guardian) { 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; const D_r = ((dayOfYear - D_offset + 365) % 365) + 1; const reverinLeap = isReverinLeap(reverinYear); const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, reverinLeap ? 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]; const formattedYear = reverinLeap ? `${reverinYear}'` : reverinYear; return `${reverinWeekDay}\n${dayCount} ${monthNames[monthIndex]}, ${formattedYear} год\n${guardian}`; } 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) { fetchGuardian(reverinYear, function(guardian) { dateDiv.innerText = getReverinDate(reverinYear, guardian); }); } else { dateDiv.innerText = "Ошибка загрузки даты"; } }); } } insertReverinDate(); });