MediaWiki:Common.js: различия между версиями

Нет описания правки
Нет описания правки
Строка 629: Строка 629:
// Для "Шаблон:Ajax"
// Для "Шаблон:Ajax"
function initAjaxLoader() {
function initAjaxLoader() {
var ajaxElements = document.querySelectorAll('.ajax-load-link');
var ajaxContainers = document.querySelectorAll('.ajax-load, .ajax-load-link');
 
var BATCH_SIZE = 1000;
var BATCH_SIZE = 1000;
var queue = [];
var queue = [];
Строка 647: Строка 646:
var newContainer = document.createElement("span");
var newContainer = document.createElement("span");
newContainer.innerHTML = parsedHTML;
newContainer.innerHTML = parsedHTML;
if (placeholder && placeholder.parentNode) {
if (placeholder && placeholder.parentNode) {
placeholder.replaceWith(newContainer);
placeholder.replaceWith(newContainer);
Строка 663: Строка 663:
try {
try {
$.globalEval(scr.textContent || scr.innerText || "");
$.globalEval(scr.textContent || scr.innerText || "");
} catch (e) {}
} catch (e) { /* ignore errors in inline scripts */ }
parent.removeChild(scr);
parent.removeChild(scr);
}
}
Строка 715: Строка 715:
}
}


var standaloneContents = document.querySelectorAll('.ajax-load-content');
ajaxContainers.forEach(function (container) {
standaloneContents.forEach(function (content) {
var contentEl = container.querySelector('.ajax-load-content');
if (!content.closest('.ajax-load-link')) {
var loadingEl = container.querySelector('.ajax-load-loading');
var wikiText = content ? (content.textContent || content.innerText) : null;
 
if (!wikiText) return;
if (!contentEl) return;
 
var wikiText = (contentEl.textContent || contentEl.innerText || "").trim();
if (!wikiText) return;
 
var loadingText = (loadingEl && (loadingEl.textContent || loadingEl.innerText || "").trim()) || "Загрузка...";
 
if (container.classList.contains('ajax-load-link')) {
container.addEventListener('click', function (ev) {
ev.preventDefault && ev.preventDefault();


var placeholder = document.createElement("span");
if (container.dataset.ajaxLoaded === "1") return;
placeholder.textContent = "Пожалуйста, подождите, содержимое загружается...";
container.dataset.ajaxLoaded = "1";
content.replaceWith(placeholder);


queue.push({ wikiText: wikiText, placeholder: placeholder });
var placeholder = document.createElement("span");
}
placeholder.className = "ajax-load-placeholder";
});
placeholder.textContent = loadingText;


ajaxElements.forEach(function (element) {
if (loadingEl && loadingEl.parentNode) {
element.addEventListener('click', function () {
loadingEl.replaceWith(placeholder);
var content = element.querySelector('.ajax-load-content');
} else {
var wikiText = content ? (content.textContent || content.innerText) : null;
container.replaceWith(placeholder);
if (!wikiText) return;
}


queue.push({ wikiText: wikiText, placeholder: placeholder });
processQueue();
}, { once: true });
} else {
var placeholder = document.createElement("span");
var placeholder = document.createElement("span");
placeholder.textContent = "Пожалуйста, подождите, содержимое загружается...";
placeholder.className = "ajax-load-placeholder";
element.replaceWith(placeholder);
placeholder.textContent = loadingText;
 
contentEl.replaceWith(placeholder);


queue.push({ wikiText: wikiText, placeholder: placeholder });
queue.push({ wikiText: wikiText, placeholder: placeholder });
processQueue();
}
});
});
});