MediaWiki:Common.js
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
$(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;
// Очищаем содержимое перед добавлением строк
while (dateDiv.firstChild) {
dateDiv.removeChild(dateDiv.firstChild);
}
// Создаём первую строку (день недели + дата)
let firstRow = document.createElement("div");
firstRow.classList.add("row");
firstRow.appendChild(document.createTextNode(`${reverinWeekDay}, ${dayCount} ${monthName}`));
// Создаём вторую строку (год + хранитель лет)
let secondRow = document.createElement("div");
secondRow.classList.add("row");
// Создаём ссылку на год
let yearLink = document.createElement("a");
yearLink.href = "/wiki/index.php/Шаблон:Текущий_год_Альдморры";
yearLink.textContent = `${formattedYear} год`;
yearLink.classList.add("year-link");
// Создаём ссылку на хранителя лет
let guardianLink = document.createElement("a");
guardianLink.href = "/wiki/index.php/Шаблон:Хранители_лет";
guardianLink.textContent = guardian;
guardianLink.classList.add("guardian-link");
// Добавляем элементы в `secondRow`
secondRow.appendChild(yearLink);
secondRow.appendChild(document.createTextNode(" ")); // Пробел между ссылками
secondRow.appendChild(guardianLink);
// Добавляем обе строки в `dateDiv`
dateDiv.appendChild(firstRow);
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.appendChild(document.createTextNode("Загрузка..."));
sidebar.appendChild(dateDiv);
fetchReverinYear(function(reverinYear) {
if (reverinYear) {
fetchGuardian(reverinYear, function(guardian) {
getReverinDate(reverinYear, guardian, dateDiv);
});
} else {
dateDiv.innerText = "Ошибка загрузки даты";
}
});
}
}
insertReverinDate();
});