@ribajs/router
Version:
Routing extension for Riba.js inspired by Barba.js
92 lines • 7.08 kB
JavaScript
class Dom {
static getPrefetchLinkElements(content) {
return content.querySelectorAll('link[href][rel="dns-prefetch"], link[href][rel="preconnect"], link[href][rel="prefetch"], link[href][rel="subresource"], link[href][rel="preload"], link[href][rel="router-preload"]');
}
static parseTitle(content) {
let title = "";
const titleElement = content.querySelector("title");
if (titleElement && titleElement.innerText) {
title = titleElement.innerText;
}
return title;
}
static parseResponse(responseText, parseTitle, containerSelector, prefetchLinks = true) {
let title = "";
let prefetchLinkElements = [];
const template = document.createElement("template");
template.innerHTML = responseText;
if (parseTitle) {
title = this.parseTitle(template.content);
}
if (prefetchLinks) {
prefetchLinkElements = this.getPrefetchLinkElements(template.content);
}
const container = this.getContainer(template, containerSelector);
return {
container,
title,
prefetchLinks: prefetchLinkElements,
};
}
static parseInitial(parseTitle, containerSelector, prefetchLinks = true) {
let title = "";
let prefetchLinkElements = [];
const container = this.getContainer(document, containerSelector);
if (parseTitle) {
title = this.parseTitle(document);
}
if (prefetchLinks) {
prefetchLinkElements = this.getPrefetchLinkElements(document);
}
return {
container: container,
title,
prefetchLinks: prefetchLinkElements,
};
}
static getContainer(element, containerSelector) {
if (!element) {
throw new Error("Barba.js: [getContainer] No element to get container from, maybe the DOM is not ready!");
}
const container = this.parseContainer(element, containerSelector);
if (!container) {
throw new Error("[DOM] No container found");
}
return container;
}
static getNamespace(element) {
if (element && element.dataset && element.dataset.namespace) {
return element.dataset.namespace;
}
else {
return null;
}
}
static putContainer(element, wrapper) {
element = element;
element.style.visibility = "hidden";
wrapper.appendChild(element);
}
static parseContainer(newPage, containerSelector) {
if (!newPage) {
const error = new Error("New page not loaded!");
console.error(error, newPage);
throw error;
}
let result;
if (newPage.content) {
result = newPage.content.querySelector(containerSelector);
}
else {
result = newPage.querySelector(containerSelector);
}
if (!result) {
const error = new Error(`No container with selector "${containerSelector}" found!`);
console.error(error, newPage);
throw error;
}
return result;
}
}
export { Dom };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL1BqYXgvRG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sR0FBRztJQUNBLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxPQUFvQztRQUV4RSxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDN0Isc0xBQXNMLENBQ3hKLENBQUM7SUFDbkMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBb0M7UUFDM0QsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsS0FBSyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU1NLE1BQU0sQ0FBQyxhQUFhLENBQ3pCLFlBQW9CLEVBQ3BCLFVBQW1CLEVBQ25CLGlCQUF5QixFQUN6QixhQUFhLEdBQUcsSUFBSTtRQUVwQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLG9CQUFvQixHQUVLLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBd0IsQ0FBQztRQUMzRSxRQUFRLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQztRQUVsQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLG9CQUFvQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEUsQ0FBQztR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