laya-coreui-es
Version:
laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改
124 lines (123 loc) • 5.32 kB
JavaScript
;
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 = / | /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;