MediaWiki:Common.js: различия между версиями
Luciana (обсуждение | вклад) Нет описания правки |
Luciana (обсуждение | вклад) Нет описания правки |
||
| Строка 54: | Строка 54: | ||
} | } | ||
function getReverinDate(reverinYear, guardian) { | function getReverinDate(reverinYear, guardian, dateDiv) { | ||
const now = new Date(); | const now = new Date(); | ||
const startOfYear = new Date(now.getFullYear(), 0, 1); | const startOfYear = new Date(now.getFullYear(), 0, 1); | ||
| Строка 89: | Строка 89: | ||
const formattedYear = reverinLeap ? `${reverinYear}'` : reverinYear; | const formattedYear = reverinLeap ? `${reverinYear}'` : reverinYear; | ||
// | // Вставляем первую строку с `innerText` | ||
dateDiv.innerText = `${reverinWeekDay}, ${dayCount} ${monthName}\n`; | |||
// Создаём вторую строку без `innerHTML` | |||
let secondRow = document.createElement("div"); | |||
// Создаём ссылку вручную | |||
let yearLink = document.createElement("a"); | |||
yearLink.href = "/wiki/index.php/Шаблон:Текущий_год_Альдморры"; | |||
yearLink.textContent = `${formattedYear} год`; | |||
yearLink.classList.add("year-link"); | |||
let guardianSpan = document.createElement("span"); | |||
guardianSpan.textContent = ` ${guardian}`; | |||
// Добавляем элементы в `div` | |||
secondRow.appendChild(yearLink); | |||
secondRow.appendChild(guardianSpan); | |||
// Добавляем вторую строку в `dateDiv` | |||
dateDiv.appendChild(secondRow); | |||
} | } | ||
| Строка 109: | Строка 128: | ||
if (reverinYear) { | if (reverinYear) { | ||
fetchGuardian(reverinYear, function(guardian) { | fetchGuardian(reverinYear, function(guardian) { | ||
getReverinDate(reverinYear, guardian, dateDiv); | |||
}); | }); | ||
} else { | } else { | ||
Версия от 00:09, 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, dateDiv) {
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 earthToReveraWeekDays = {
"Monday": "Вивидис",
"Tuesday": "Аспирис",
"Wednesday": "Альтис",
"Thursday": "Эквилис",
"Friday": "Либерис",
"Saturday": "Реновис",
"Sunday": "Мистерис"
};
const earthDayOfWeek = new Date().toLocaleDateString("en-US", { weekday: "long" });
const reverinWeekDay = earthToReveraWeekDays[earthDayOfWeek] || "Неизвестный день";
let dayCount = D_r, monthIndex = 0;
while (dayCount > monthLengths[monthIndex]) {
dayCount -= monthLengths[monthIndex];
monthIndex++;
}
const monthName = monthNames[monthIndex];
const formattedYear = reverinLeap ? `${reverinYear}'` : reverinYear;
// Вставляем первую строку с `innerText`
dateDiv.innerText = `${reverinWeekDay}, ${dayCount} ${monthName}\n`;
// Создаём вторую строку без `innerHTML`
let secondRow = document.createElement("div");
// Создаём ссылку вручную
let yearLink = document.createElement("a");
yearLink.href = "/wiki/index.php/Шаблон:Текущий_год_Альдморры";
yearLink.textContent = `${formattedYear} год`;
yearLink.classList.add("year-link");
let guardianSpan = document.createElement("span");
guardianSpan.textContent = ` ${guardian}`;
// Добавляем элементы в `div`
secondRow.appendChild(yearLink);
secondRow.appendChild(guardianSpan);
// Добавляем вторую строку в `dateDiv`
dateDiv.appendChild(secondRow);
}
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"; // ВАЖНО: это делает \n рабочим!
dateDiv.innerText = "Загрузка...";
sidebar.appendChild(dateDiv);
fetchReverinYear(function(reverinYear) {
if (reverinYear) {
fetchGuardian(reverinYear, function(guardian) {
getReverinDate(reverinYear, guardian, dateDiv);
});
} else {
dateDiv.innerText = "Ошибка загрузки даты";
}
});
}
}
insertReverinDate();
});