UNPKG

@tarojs/components

Version:
76 lines (70 loc) 2.74 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const index = require('./index-a7069008.js'); const indexCss = "taro-rich-text-core{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}taro-rich-text-core[selectable=true],taro-rich-text-core[user-select=true]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;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) { index.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 index.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 (index.h(index.Host, null, nodes.map(node => renderNode(node)))); } else { return index.h(index.Host, { innerHTML: nodes }); } } }; RichText.style = indexCss; exports.taro_rich_text_core = RichText;