UNPKG

rabbit-simple-ui

Version:

A simple UI component library based on JavaScript

80 lines (64 loc) 2.18 kB
import { type, validComps } from '../../utils'; import { $el, bind, getStrTypeAttr, removeAttrs, setHtml } from '../../dom-utils'; import PREFIX from '../prefix'; interface Config { config( el: string ): { events({ onBack }: PHEvent): void; }; } interface PHEvent { onBack: () => void; } class PageHeader implements Config { readonly VERSION: string; private COMPONENTS: NodeListOf<Element>; constructor() { this.VERSION = 'v1.0'; this.COMPONENTS = $el('r-page-header', { all: true }); this._create(this.COMPONENTS); } public config( el: string ): { events({ onBack }: PHEvent): void; } { const target = $el(el) as HTMLElement; validComps(target, 'page-header'); const backButton = target.querySelector(`.${PREFIX.pageHeader}-back`); return { events({ onBack }) { bind(backButton, 'click', () => { type.isFn(onBack); }); } }; } private _create(COMPONENTS: NodeListOf<Element>): void { COMPONENTS.forEach((node) => { const { title, subTitle } = this._attrs(node); this._setMainTemplate(node, title, subTitle); removeAttrs(node, ['title', 'sub-title']); }); } private _setMainTemplate(node: Element, title: string, subTitle: string): void { const template = ` <div class="${PREFIX.pageHeader}-heading"> <div class="${PREFIX.pageHeader}-back"> <i class="${PREFIX.icon} ${PREFIX.icon}-md-arrow-back"></i> </div> <span class="${PREFIX.pageHeader}-heading-title">${title}</span> <span class="${PREFIX.pageHeader}-heading-sub-title">${subTitle}</span> </div> `; setHtml(node, template); } private _attrs(node: Element) { return { title: getStrTypeAttr(node, 'title', ''), subTitle: getStrTypeAttr(node, 'sub-title', '') }; } } export default PageHeader;