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

Нет описания правки
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 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);
Строка 661: Строка 661:
parent.replaceChild(scriptNode, scr);
parent.replaceChild(scriptNode, scr);
} else {
} else {
try {
try { $.globalEval(scr.textContent || scr.innerText || ""); } catch (e) {}
$.globalEval(scr.textContent || scr.innerText || "");
} catch (e) {}
parent.removeChild(scr);
parent.removeChild(scr);
}
}
Строка 705: Строка 703:
.always(function () {
.always(function () {
remaining--;
remaining--;
if (remaining === 0) {
if (remaining === 0) nextBatch();
nextBatch();
}
});
});
});
});
Строка 715: Строка 711:
}
}


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;


var placeholder = document.createElement("span");
if (!contentEl) return;
placeholder.textContent = "Пожалуйста, подождите, содержимое загружается...";
 
content.replaceWith(placeholder);
var wikiText = (contentEl.textContent || contentEl.innerText || "").trim();
if (!wikiText) return;
 
var loadingText = (loadingEl && (loadingEl.textContent || loadingEl.innerText || "").trim()) || "Загрузка...";


queue.push({ wikiText: wikiText, placeholder: placeholder });
if (loadingEl && loadingEl.parentNode) {
loadingEl.parentNode.removeChild(loadingEl);
loadingEl = null;
}
}
});


ajaxElements.forEach(function (element) {
if (container.classList.contains('ajax-load-link')) {
element.addEventListener('click', function () {
container.addEventListener('click', function (ev) {
var content = element.querySelector('.ajax-load-content');
ev.preventDefault && ev.preventDefault();
var wikiText = content ? (content.textContent || content.innerText) : null;
 
if (!wikiText) return;
if (container.dataset.ajaxLoaded === "1") return;
container.dataset.ajaxLoaded = "1";
 
var placeholder = document.createElement("span");
placeholder.className = "ajax-load-placeholder";
placeholder.textContent = loadingText;
 
if (container && container.parentNode) {
container.parentNode.replaceChild(placeholder, container);
} else {
if (contentEl && contentEl.parentNode) {
contentEl.parentNode.replaceChild(placeholder, contentEl);
}
}


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;
 
if (contentEl && contentEl.parentNode) {
contentEl.parentNode.replaceChild(placeholder, contentEl);
}


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