MediaWiki:Common.js: различия между версиями
Luciana (обсуждение | вклад) Нет описания правки |
Luciana (обсуждение | вклад) Нет описания правки |
||
(не показано 10 промежуточных версий этой же участницы) | |||
Строка 1: | Строка 1: | ||
$(document).ready(function() { | $(document).ready(function() { | ||
function fetchReverinYear(callback) { | function fetchReverinYear(callback) { | ||
Строка 54: | Строка 55: | ||
} | } | ||
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); | ||
Строка 63: | Строка 64: | ||
const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, reverinLeap ? 30 : 29]; | const monthLengths = [30, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, reverinLeap ? 30 : 29]; | ||
const monthNames = [" | const monthNames = ["Любимца", "Жреца", "Хранителя", "Правителя", "Воителя", | ||
" | "Хозяина", "Купца", "Творца", "Плута", "Колдуна", "Отшельника", "Наставника"]; | ||
// Соответствие земных дней недели реверинским | // Соответствие земных дней недели реверинским | ||
const earthToReveraWeekDays = { | const earthToReveraWeekDays = { | ||
Строка 89: | Строка 90: | ||
const formattedYear = reverinLeap ? `${reverinYear}'` : reverinYear; | 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); | |||
} | } | ||
Строка 103: | Строка 136: | ||
dateDiv.style.fontWeight = "bold"; | dateDiv.style.fontWeight = "bold"; | ||
dateDiv.style.whiteSpace = "pre-line"; // ВАЖНО: это делает \n рабочим! | dateDiv.style.whiteSpace = "pre-line"; // ВАЖНО: это делает \n рабочим! | ||
dateDiv. | dateDiv.appendChild(document.createTextNode("Загрузка...")); | ||
sidebar.appendChild(dateDiv); | sidebar.appendChild(dateDiv); | ||
Строка 109: | Строка 142: | ||
if (reverinYear) { | if (reverinYear) { | ||
fetchGuardian(reverinYear, function(guardian) { | fetchGuardian(reverinYear, function(guardian) { | ||
getReverinDate(reverinYear, guardian, dateDiv); | |||
}); | }); | ||
} else { | } else { |
Текущая версия от 01:45, 27 февраля 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; // Очищаем содержимое перед добавлением строк 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(); });