UNPKG

rabbit-simple-ui

Version:

A simple UI component library based on JavaScript

58 lines (44 loc) 1.96 kB
import { $el, getStrTypeAttr, setHtml, removeAttrs } from '../../dom-utils'; import PREFIX from '../prefix'; import DefaultImage from '../../../assets/empty.svg'; class Empty { readonly VERSION: string; readonly COMPONENTS: NodeListOf<Element>; constructor() { this.VERSION = 'v1.0'; this.COMPONENTS = $el('r-empty', { all: true }); this._create(this.COMPONENTS); } private _create(COMPONENTS: NodeListOf<Element>) { COMPONENTS.forEach((node) => { const { desc, image, imageStyle } = this._attrs(node); const footerElm = node.firstElementChild; this._setMainTemplate(node, desc, image, imageStyle); this._setFooter(node, footerElm); removeAttrs(node, ['desc', 'image', 'image-style']); }); } private _setMainTemplate(node: Element, desc: string, image: string, imageStyle: string): void { const template = ` <div class="${PREFIX.empty}-image" style="${imageStyle}"> <img src="${image}" alt="empty" /> </div> <div class="${PREFIX.empty}-description">${desc == 'false' ? '' : desc}</div>`; setHtml(node, template); } private _setFooter(node: Element, footerElm: Element | null): void { if (!footerElm) return; const footerTpl = `<div class="${PREFIX.empty}-footer"></div>`; node.insertAdjacentHTML('beforeend', footerTpl); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion node.querySelector(`.${PREFIX.empty}-footer`)!.appendChild(footerElm); } private _attrs(node: Element) { return { desc: getStrTypeAttr(node, 'desc', '暂无数据'), image: getStrTypeAttr(node, 'image', `${DefaultImage}`), imageStyle: getStrTypeAttr(node, 'image-style', '') }; } } export default Empty;