UNPKG

@ribajs/bs5

Version:

Bootstrap 5 module for Riba.js

237 lines 19.4 kB
import { BasicComponent, HttpService, } from "@ribajs/core"; import { getLocation } from "@ribajs/utils"; import { BaseCache } from "@ribajs/cache"; export class Bs5IconComponent extends BasicComponent { static tagName = "bs5-icon"; static cache = new BaseCache(); static get observedAttributes() { return ["size", "width", "height", "src", "color", "direction", "alt"]; } scope = {}; constructor() { super(); } getSvg() { return this.querySelector("svg"); } async fetchCached(url) { let response = Bs5IconComponent.cache.get(url); if (response) { return response; } response = HttpService.get(url); if (response) { Bs5IconComponent.cache.set(url, response); } return response; } async fetchIcon(src) { let response; if (window?.ssr && !src.startsWith("http") && !src.startsWith("ftp") && !src.startsWith("sftp")) { let url; if (window.ssr.env.NEST_INTERN_URL) { url = new URL(src, window.ssr.env.NEST_INTERN_URL); } else if (window.ssr.ctx) { url = new URL(src, window.ssr.ctx.protocol + "://" + window.ssr.ctx.hostname); } else { throw new Error("Host for SSR not found!"); } response = await this.fetchCached(url.href); } else { response = await this.fetchCached(src); } if (response.status !== 200) { console.error(response.status); return ""; } if (response.headers.get("content-type")?.includes("image/svg+xml")) { return response.body; } console.error("[bs5-icon] Only SVG's are supported! But content-type is " + response.headers.get("content-type")); return ""; } getBasename(src) { const pathnames = getLocation(src).pathname.split("/"); return pathnames?.[pathnames.length - 1]; } getAlternativeText(src) { const basename = this.getBasename(src); return basename.split(".")[0]?.replaceAll("_", " "); } async onSrcChanged() { let icon = ""; if (!this.scope.src) { this.innerHTML = ""; return; } const alt = this.getAlternativeText(this.scope.src); if (alt) this.setAttribute("alt", alt); const currentSvg = this.getSvg(); const oldSrc = currentSvg ? currentSvg.getAttribute("src") : ""; if (oldSrc === this.scope.src) { return; } try { icon = await this.fetchIcon(this.scope.src); } catch (error) { console.warn(`Error on fetch icon "${this.scope.src}"! Try to switch the protocol...`, error); if (this.scope.src.startsWith("//")) { this.scope.src = location.protocol + this.scope.src; } const url = new URL(this.scope.src); if (url.protocol === "http:") { url.protocol = "https:"; } else { url.protocol = "http:"; } try { icon = await this.fetchIcon(url.href); } catch (error2) { console.error(`Error on fetch icon "${this.scope.src}"!`, error, error2); return; } } if (!icon) { console.error(`Error on fetch icon "${this.scope.src}"!`); return; } this.innerHTML = icon; const newSvg = this.getSvg(); if (newSvg) { newSvg.setAttribute("src", this.scope.src); } } removeColor() { this.className = this.className.replace(/(^|\s)color-\S+/g, ""); this.style.color = ""; } setColor(color) { if (!color) { return this.removeColor(); } if (color.includes(",")) { const colorArr = color.split(","); if (colorArr.length > 0) { this.className = this.className.replace(/(^|\s)color-\S+/g, ""); for (let i = 0; i < colorArr.length; i++) { const newColor = colorArr[i]; if (newColor.startsWith("#") || newColor.startsWith("rgb")) { this.style.color = newColor; } this.classList.add(`color-${newColor}`); } } } else { this.style.color = color; this.className = this.className.replace(/(^|\s)color-\S+/g, ""); this.classList.add(`color-${color}`); } } setSize(size) { this.style.height = size + "px"; this.style.width = size + "px"; this.className = this.className.replace(/(^|\s)size-\S+/g, ""); this.classList.add(`size-${size}`); } setWidth(width) { this.style.width = width + "px"; this.className = this.className.replace(/(^|\s)width-\S+/g, ""); this.classList.add(`width-${width}`); } setHeight(height) { this.style.height = height + "px"; this.className = this.className.replace(/(^|\s)height-\S+/g, ""); this.classList.add(`height-${height}`); } setDirection(direction) { let classString = `direction-${direction}`; if (direction === "left") { classString += " rotate-270"; } else if (direction === "left-top" || direction === "left-up" || direction === "top-left" || direction === "up-left") { classString += " rotate-315"; } else if (direction === "top" || direction === "up") { classString += " rotate-0"; } else if (direction === "top-right" || direction === "up-right" || direction === "right-top" || direction === "right-up") { classString += " rotate-45"; } else if (direction === "right") { classString += " rotate-90"; } else if (direction === "right-bottom" || direction === "right-down" || direction === "bottom-right" || direction === "down-right") { classString += " rotate-135"; } else if (direction === "bottom" || direction === "down") { classString += " rotate-180"; } else if (direction === "left-bottom" || direction === "left-down" || direction === "bottom-left" || direction === "down-left") { classString += " rotate-225"; } this.className = this.className.replace(/(^|\s)direction-\S+/g, ""); this.className = this.className.replace(/(^|\s)rotate-\S+/g, ""); this.className += " " + classString; } async attributeChangedCallback(name, oldValue, newValue, namespace) { super.attributeChangedCallback(name, oldValue, newValue, namespace); if (name === "src") { this.onSrcChanged(); } if (name === "color") { this.setColor(newValue); } if (name === "size") { this.setSize(newValue); } if (name === "width") { this.setWidth(newValue); } if (name === "height") { this.setHeight(newValue); } if (name === "direction") { this.setDirection(newValue); } } connectedCallback() { super.connectedCallback(); this.setAttribute("aria-hidden", "true"); this.setAttribute("role", "icon"); this.setAttribute("alt", "icon"); this.classList.add("iconset"); this.init(Bs5IconComponent.observedAttributes); if (!this.scope.direction) { this.scope.direction = "up"; this.attributeChangedCallback("direction", null, this.scope.direction, null); } } template() { return null; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnM1LWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYnM1LWljb24vYnM1LWljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBRWQsV0FBVyxHQUVaLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQUMzQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksU0FBUyxFQUF3QyxDQUFDO0lBRTVFLE1BQU0sS0FBSyxrQkFBa0I7UUFDM0IsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSxLQUFLLEdBQVEsRUFBRSxDQUFDO0lBRXZCO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRVMsTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRVMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFXO1FBQ3JDLElBQUksUUFBUSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsZ0JBQWdCLENBQUMs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