MediaWiki:Common.js: различия между версиями
Luciana (обсуждение | вклад) Новая страница: «→Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице: mw.loader.using('mediawiki.util').then(function() { var widgetContainer = document.getElementById("reverinDateWidget"); if (widgetContainer) { var script = document.createElement("script"); script.src = "https://revera.world/js/reverin-date.js"; script...» |
Luciana (обсуждение | вклад) Нет описания правки |
||
| (не показано 40 промежуточных версий этой же участницы) | |||
| Строка 1: | Строка 1: | ||
$(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(); | |||
}); | }); | ||
Текущая версия от 10:11, 7 июля 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();
});