MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 633: | Строка 633: | ||
var queue = []; | var queue = []; | ||
var processing = false; | var processing = false; | ||
// HTML для спиннера (анимация загрузки) | |||
var loadingImgHTML = '<img alt="Файл:Silva-loading.gif" src="/images/4/45/Silva-loading.gif?20260316201152" decoding="async" width="16" height="16" data-file-width="16" data-file-height="16" style="vertical-align:middle;margin-right:6px">'; | |||
function fetchParsedData(wikiText) { | function fetchParsedData(wikiText) { | ||
| Строка 695: | Строка 698: | ||
applyParsedHTML(parsedHTML, job.placeholder); | applyParsedHTML(parsedHTML, job.placeholder); | ||
} else { | } else { | ||
if (job.placeholder) job.placeholder.textContent = | if (job.placeholder) job.placeholder.textContent = "API не вернул ожидаемых данных."; | ||
} | } | ||
}) | }) | ||
.fail(function () { | .fail(function () { | ||
if (job.placeholder) job.placeholder.textContent = | if (job.placeholder) job.placeholder.textContent = "Ошибка при выполнении запроса к API."; | ||
}) | }) | ||
.always(function () { | .always(function () { | ||
| Строка 715: | Строка 718: | ||
var loadingEl = container.querySelector('.ajax-load-loading'); | var loadingEl = container.querySelector('.ajax-load-loading'); | ||
var | if (!contentEl) return; | ||
var wikiText = (contentEl.textContent || contentEl.innerText || "").trim(); | |||
if (!wikiText) return; | |||
var loadingText = (loadingEl && | var loadingText = (loadingEl && (loadingEl.textContent || loadingEl.innerText || "").trim()) || "Загрузка..."; | ||
// Если есть элемент .ajax-load-loading — можно удалить (как в оригинале), | |||
// но плейсхолдер мы всё равно создаём с картинкой + текстом. | |||
if (loadingEl && loadingEl.parentNode) { | if (loadingEl && loadingEl.parentNode) { | ||
loadingEl.parentNode.removeChild(loadingEl); | loadingEl.parentNode.removeChild(loadingEl); | ||
| Строка 725: | Строка 732: | ||
} | } | ||
if ( | function createPlaceholderWithSpinner(text) { | ||
var placeholder = document.createElement("span"); | |||
placeholder.className = "ajax-load-placeholder"; | |||
// Добавляем картинку в начало и текст после неё | |||
placeholder.innerHTML = loadingImgHTML + '<span class="ajax-load-text">' + (text || '') + '</span>'; | |||
return placeholder; | |||
} | |||
if (container.classList.contains('ajax-load-link')) { | |||
container.addEventListener('click', function (ev) { | |||
ev.preventDefault && ev.preventDefault(); | |||
if (container.dataset.ajaxLoaded === "1") return; | |||
container.dataset.ajaxLoaded = "1"; | |||
var placeholder = createPlaceholderWithSpinner(loadingText); | |||
if (container && container.parentNode) { | if (container && container.parentNode) { | ||
container.parentNode.replaceChild(placeholder, container); | container.parentNode.replaceChild(placeholder, container); | ||
| Строка 742: | Строка 756: | ||
} | } | ||
} | } | ||
queue.push({ wikiText: wikiText, placeholder: placeholder }); | |||
queue.push({ | processQueue(); | ||
}, { once: true }); | |||
} else { | |||
var placeholder = createPlaceholderWithSpinner(loadingText); | |||
if ( | if (contentEl && contentEl.parentNode) { | ||
contentEl.parentNode.replaceChild(placeholder, contentEl); | |||
} | } | ||
queue.push({ wikiText: wikiText, placeholder: placeholder }); | |||
} | } | ||
}); | }); | ||