UNPKG

@tarojs/components

Version:
72 lines (68 loc) 2.52 kB
import { r as registerInstance, h, H as Host } from './index-5e431bb8.js'; const indexCss = "taro-rich-text-core{user-select:none}taro-rich-text-core[selectable=true],taro-rich-text-core[user-select=true]{user-select:text;display:block}taro-rich-text-core[space]{white-space:pre-wrap}taro-rich-text-core[space=ensp]{word-spacing:.5em}taro-rich-text-core[space=nbsp]{word-spacing:1em}"; const RichText = class { constructor(hostRef) { registerInstance(this, hostRef); this.renderNode = (node) => { if ('type' in node && node.type === 'text') { // nonsupport Html Entries const content = (node.text || '').replace(/ /g, '\u00A0'); return content; } else if ('name' in node && node.name) { const { name, attrs, children } = node; const attributes = {}; let childList = []; if (attrs && typeof attrs === 'object') { for (const key in attrs) { const val = attrs[key]; if (key === 'style' && typeof val === 'string') { // stencil JSX style props only support object const styles = val .split(';') .map(item => item.trim()) .filter(item => item); const styleObj = {}; styles.forEach(item => { if (!item) return; const res = /(.+): *(.+)/g.exec(item); if (!res) return; const [, name, value] = res; const styleName = name.replace(/-([a-z])/g, (...args) => args[1].toUpperCase()); styleObj[styleName] = value; }); if (Object.keys(styleObj).length) { attributes.style = styleObj; } continue; } attributes[key] = val; } } if (children && children.length) { childList = children.map(node => this.renderNode(node)); } // @ts-ignore return h(name, attributes, childList); } return null; }; this.nodes = undefined; this.selectable = false; this.userSelect = false; this.space = undefined; } render() { const { nodes, renderNode } = this; if (Array.isArray(nodes)) { return (h(Host, null, nodes.map(node => renderNode(node)))); } else { return h(Host, { innerHTML: nodes }); } } }; RichText.style = indexCss; export { RichText as taro_rich_text_core };