@ribajs/bs5
Version:
Bootstrap 5 module for Riba.js
237 lines • 19.4 kB
JavaScript
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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