jodit
Version:
Jodit is an awesome and useful wysiwyg editor with filebrowser
94 lines (93 loc) • 3.29 kB
JavaScript
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
*/
import { IS_PROD } from "../constants.js";
import { camelCase, kebabCase } from "../helpers/index.js";
import { css } from "../helpers/utils/css.js";
export class Icon {
static getIcon(name) {
if (/<svg/i.test(name)) {
return name;
}
const icon = Icon.icons[name] ||
Icon.icons[name.replace(/-/g, '_')] ||
Icon.icons[name.replace(/_/g, '-')] ||
Icon.icons[camelCase(name)] ||
Icon.icons[kebabCase(name)] ||
Icon.icons[name.toLowerCase()];
if (!IS_PROD && !icon) {
console.warn(`Icon "${name}" not found`);
}
return icon;
}
/**
* Check if icon exist in store
*/
static exists(name) {
return this.getIcon(name) !== undefined;
}
/**
* Return SVG icon
*/
static get(name, defaultValue = '<span></span>') {
return this.getIcon(name) || defaultValue;
}
/**
* Set SVG in store
*/
static set(name, value) {
this.icons[name.replace('_', '-')] = value;
return this;
}
/**
* Make icon html element
*/
static makeIcon(jodit, icon) {
var _a, _b, _c, _d;
if (!icon) {
return;
}
let iconElement;
const { name, iconURL, fill, scale } = icon;
const clearName = name.replace(/[^a-zA-Z0-9]/g, '_');
let iconFromEvent;
if (!/<svg/.test(name)) {
iconFromEvent = (_b = (_a = jodit.o).getIcon) === null || _b === void 0 ? void 0 : _b.call(_a, name, clearName);
}
const cacheKey = `${name}${iconURL}${fill}${scale !== null && scale !== void 0 ? scale : ''}${iconFromEvent !== null && iconFromEvent !== void 0 ? iconFromEvent : ''}`;
if (jodit.o.cache && this.__cache.has(cacheKey)) {
return (_c = this.__cache.get(cacheKey)) === null || _c === void 0 ? void 0 : _c.cloneNode(true);
}
if (iconURL) {
iconElement = jodit.c.span();
css(iconElement, 'backgroundImage', 'url(' +
iconURL.replace('{basePath}', (jodit === null || jodit === void 0 ? void 0 : jodit.basePath) || '') +
')');
}
else {
const svg = iconFromEvent ||
Icon.get(name, '') ||
((_d = jodit.o.extraIcons) === null || _d === void 0 ? void 0 : _d[name]);
if (svg) {
iconElement = jodit.c.fromHTML(svg.trim());
if (!/^<svg/i.test(name)) {
iconElement.classList.add('jodit-icon_' + clearName);
}
}
}
if (iconElement) {
iconElement.classList.add('jodit-icon');
iconElement.style.fill = fill;
if (scale != null) {
iconElement.style.transform = `scale(${scale})`;
}
jodit.o.cache &&
this.__cache.set(cacheKey, iconElement.cloneNode(true));
}
return iconElement;
}
}
Icon.icons = {};
Icon.__cache = new Map();