UNPKG

laya-coreui-es

Version:

laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改

124 lines (123 loc) 5.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HTMLParse = void 0; const HTMLDivParser_1 = require("../dom/HTMLDivParser"); const HTMLElement_1 = require("../dom/HTMLElement"); const Pool_1 = require("../../utils/Pool"); const ClassUtils_1 = require("../../utils/ClassUtils"); const Utils_1 = require("../../utils/Utils"); const IHtml_1 = require("./IHtml"); const HTMLBrElement_1 = require("../dom/HTMLBrElement"); const HTMLStyleElement_1 = require("../dom/HTMLStyleElement"); const HTMLLinkElement_1 = require("../dom/HTMLLinkElement"); const HTMLImageElement_1 = require("../dom/HTMLImageElement"); class HTMLParse { static getInstance(type) { var rst = Pool_1.Pool.getItem(HTMLParse._htmlClassMapShort[type]); if (!rst) { rst = ClassUtils_1.ClassUtils.getInstance(type); } return rst; } static parse(ower, xmlString, url) { xmlString = xmlString.replace(/<br>/g, "<br/>"); xmlString = "<root>" + xmlString + "</root>"; xmlString = xmlString.replace(HTMLParse.spacePattern, HTMLParse.char255); var xml = Utils_1.Utils.parseXMLFromString(xmlString); HTMLParse._parseXML(ower, xml.childNodes[0].childNodes, url); } static _parseXML(parent, xml, url, href = null) { var i, n; if (xml.join || xml.item) { for (i = 0, n = xml.length; i < n; ++i) { HTMLParse._parseXML(parent, xml[i], url, href); } } else { var node; var nodeName; if (xml.nodeType == 3) { var txt; if (parent instanceof IHtml_1.IHtml.HTMLDivParser) { if (xml.nodeName == null) { xml.nodeName = "#text"; } nodeName = xml.nodeName.toLowerCase(); txt = xml.textContent.replace(/^\s+|\s+$/g, ''); if (txt.length > 0) { node = HTMLParse.getInstance(nodeName); if (node) { parent.addChild(node); (node.innerTEXT = txt.replace(HTMLParse.char255AndOneSpacePattern, " ")); } } } else { txt = xml.textContent.replace(/^\s+|\s+$/g, ''); if (txt.length > 0) { var containNode = parent; if (parent instanceof HTMLElement_1.HTMLElement && parent.innerTEXT && parent.innerTEXT.length > 0) { let cnode = HTMLParse.getInstance('p'); if (cnode) { parent.addChild(cnode); containNode = cnode; } } containNode.innerTEXT = txt.replace(HTMLParse.char255AndOneSpacePattern, " "); } } return; } else { nodeName = xml.nodeName.toLowerCase(); if (nodeName == "#comment") return; node = HTMLParse.getInstance(nodeName); if (node) { if (nodeName == "p") { parent.addChild(HTMLParse.getInstance("br")); node = parent.addChild(node); parent.addChild(HTMLParse.getInstance("br")); } else { node = parent.addChild(node); } node.URI = url; node.href = href; var attributes = xml.attributes; if (attributes && attributes.length > 0) { for (i = 0, n = attributes.length; i < n; ++i) { var attribute = attributes[i]; var attrName = attribute.nodeName; var value = attribute.value; node._setAttributes(attrName, value); } } HTMLParse._parseXML(node, xml.childNodes, url, node.href); } else { HTMLParse._parseXML(parent, xml.childNodes, url, href); } } } } } exports.HTMLParse = HTMLParse; HTMLParse.char255 = String.fromCharCode(255); HTMLParse.spacePattern = /&nbsp;|&#160;/g; HTMLParse.char255AndOneSpacePattern = new RegExp(String.fromCharCode(255) + "|(\\s+)", "g"); HTMLParse._htmlClassMapShort = { 'div': HTMLDivParser_1.HTMLDivParser, 'p': HTMLElement_1.HTMLElement, 'img': HTMLImageElement_1.HTMLImageElement, 'span': HTMLElement_1.HTMLElement, 'br': HTMLBrElement_1.HTMLBrElement, 'style': HTMLStyleElement_1.HTMLStyleElement, 'font': HTMLElement_1.HTMLElement, 'a': HTMLElement_1.HTMLElement, '#text': HTMLElement_1.HTMLElement, 'link': HTMLLinkElement_1.HTMLLinkElement }; IHtml_1.IHtml.HTMLParse = HTMLParse;