UNPKG

r2-navigator-js

Version:

Readium 2 'navigator' for NodeJS (TypeScript)

307 lines 10.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseDOM = exports.serializeDOM = void 0; var tslib_1 = require("tslib"); var xmldom = require("@xmldom/xmldom"); function serializeDOM(documant) { var serialized = new xmldom.XMLSerializer().serializeToString(documant); return serialized; } exports.serializeDOM = serializeDOM; function parseDOM(htmlStrToParse, mediaType) { if (mediaType === "application/xhtml+xml") { mediaType = "application/xhtml"; } var documant = mediaType ? new xmldom.DOMParser().parseFromString(htmlStrToParse, mediaType) : new xmldom.DOMParser().parseFromString(htmlStrToParse); if (!documant.head) { definePropertyGetterSetter_DocHeadBody(documant, "head"); } if (!documant.body) { definePropertyGetterSetter_DocHeadBody(documant, "body"); } if (!documant.documentElement.style) { definePropertyGetterSetter_ElementStyle(documant.documentElement); } if (!documant.body.style) { definePropertyGetterSetter_ElementStyle(documant.body); } if (!documant.documentElement.classList) { definePropertyGetterSetter_ElementClassList(documant.documentElement); } return documant; } exports.parseDOM = parseDOM; function definePropertyGetterSetter_ElementClassList(element) { var classListObj = {}; classListObj.element = element; classListObj.contains = classListContains.bind(classListObj); classListObj.add = classListAdd.bind(classListObj); classListObj.remove = classListRemove.bind(classListObj); element.classList = classListObj; } function classListContains(className) { var e_1, _a; var style = this; var elem = style.element; var classAttr = elem.getAttribute("class"); if (!classAttr) { return false; } var classes = classAttr.split(" "); try { for (var classes_1 = tslib_1.__values(classes), classes_1_1 = classes_1.next(); !classes_1_1.done; classes_1_1 = classes_1.next()) { var clazz = classes_1_1.value; if (clazz === className) { return true; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (classes_1_1 && !classes_1_1.done && (_a = classes_1.return)) _a.call(classes_1); } finally { if (e_1) throw e_1.error; } } return false; } function classListAdd(className) { var e_2, _a; var style = this; var elem = style.element; var classAttr = elem.getAttribute("class"); if (!classAttr) { elem.setAttribute("class", className); return; } var needsAdding = true; var classes = classAttr.split(" "); try { for (var classes_2 = tslib_1.__values(classes), classes_2_1 = classes_2.next(); !classes_2_1.done; classes_2_1 = classes_2.next()) { var clazz = classes_2_1.value; if (clazz === className) { needsAdding = false; break; } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (classes_2_1 && !classes_2_1.done && (_a = classes_2.return)) _a.call(classes_2); } finally { if (e_2) throw e_2.error; } } if (needsAdding) { elem.setAttribute("class", "".concat(classAttr, " ").concat(className)); } } function classListRemove(className) { var e_3, _a; var style = this; var elem = style.element; var classAttr = elem.getAttribute("class"); if (!classAttr) { return; } var arr = []; var classes = classAttr.split(" "); try { for (var classes_3 = tslib_1.__values(classes), classes_3_1 = classes_3.next(); !classes_3_1.done; classes_3_1 = classes_3.next()) { var clazz = classes_3_1.value; if (clazz !== className) { arr.push(clazz); } } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (classes_3_1 && !classes_3_1.done && (_a = classes_3.return)) _a.call(classes_3); } finally { if (e_3) throw e_3.error; } } elem.setAttribute("class", arr.join(" ")); } function definePropertyGetterSetter_DocHeadBody(documant, elementName) { Object.defineProperty(documant, elementName, { get: function () { var doc = this; var key = elementName + "_"; if (doc[key]) { return doc[key]; } if (doc.documentElement.childNodes && doc.documentElement.childNodes.length) { for (var i = 0; i < doc.documentElement.childNodes.length; i++) { var child = doc.documentElement.childNodes[i]; if (child.nodeType === 1) { var element = child; if (element.localName && element.localName.toLowerCase() === elementName) { doc[key] = element; return element; } } } } return undefined; }, set: function (_val) { console.log("documant." + elementName + " CANNOT BE SET!!"); }, }); } function definePropertyGetterSetter_ElementStyle(element) { var styleObj = {}; styleObj.element = element; styleObj.setProperty = cssSetProperty.bind(styleObj); styleObj.removeProperty = cssRemoveProperty.bind(styleObj); styleObj.item = cssStyleItem.bind(styleObj); Object.defineProperty(styleObj, "length", { get: function () { var e_4, _a; var style = this; var elem = style.element; var styleAttr = elem.getAttribute("style"); if (!styleAttr) { return 0; } var count = 0; var cssProps = styleAttr.split(";"); try { for (var cssProps_1 = tslib_1.__values(cssProps), cssProps_1_1 = cssProps_1.next(); !cssProps_1_1.done; cssProps_1_1 = cssProps_1.next()) { var cssProp = cssProps_1_1.value; if (cssProp.trim().length) { count++; } } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (cssProps_1_1 && !cssProps_1_1.done && (_a = cssProps_1.return)) _a.call(cssProps_1); } finally { if (e_4) throw e_4.error; } } return count; }, set: function (_val) { console.log("style.length CANNOT BE SET!!"); }, }); var cssProperties = ["overflow", "width", "height", "margin", "transformOrigin", "transform"]; cssProperties.forEach(function (cssProperty) { Object.defineProperty(styleObj, cssProperty, { get: function () { var style = this; var elem = style.element; return cssStyleGet(cssProperty, elem); }, set: function (val) { var style = this; var elem = style.element; cssStyleSet(cssProperty, val, elem); }, }); }); element.style = styleObj; } function cssSetProperty(cssProperty, val) { var style = this; var elem = style.element; cssStyleSet(cssProperty, val, elem); } function cssRemoveProperty(cssProperty) { var style = this; var elem = style.element; cssStyleSet(cssProperty, undefined, elem); } function cssStyleItem(i) { var e_5, _a; var style = this; var elem = style.element; var styleAttr = elem.getAttribute("style"); if (!styleAttr) { return undefined; } var count = -1; var cssProps = styleAttr.split(";"); try { for (var cssProps_2 = tslib_1.__values(cssProps), cssProps_2_1 = cssProps_2.next(); !cssProps_2_1.done; cssProps_2_1 = cssProps_2.next()) { var cssProp = cssProps_2_1.value; var trimmed = cssProp.trim(); if (trimmed.length) { count++; if (count === i) { var regExStr = "(.+)[\s]*:[\s]*(.+)"; var regex = new RegExp(regExStr, "g"); var regexMatch = regex.exec(trimmed); if (regexMatch) { return regexMatch[1]; } } } } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (cssProps_2_1 && !cssProps_2_1.done && (_a = cssProps_2.return)) _a.call(cssProps_2); } finally { if (e_5) throw e_5.error; } } return undefined; } function cssStyleGet(cssProperty, elem) { var e_6, _a; var styleAttr = elem.getAttribute("style"); if (!styleAttr) { return undefined; } var regExStr = "".concat(cssProperty, "[s]*:[s]*(.+)"); var cssProps = styleAttr.split(";"); var cssPropertyValue; try { for (var cssProps_3 = tslib_1.__values(cssProps), cssProps_3_1 = cssProps_3.next(); !cssProps_3_1.done; cssProps_3_1 = cssProps_3.next()) { var cssProp = cssProps_3_1.value; var regex = new RegExp(regExStr, "g"); var regexMatch = regex.exec(cssProp.trim()); if (regexMatch) { cssPropertyValue = regexMatch[1]; break; } } } catch (e_6_1) { e_6 = { error: e_6_1 }; } finally { try { if (cssProps_3_1 && !cssProps_3_1.done && (_a = cssProps_3.return)) _a.call(cssProps_3); } finally { if (e_6) throw e_6.error; } } return cssPropertyValue ? cssPropertyValue : undefined; } function cssStyleSet(cssProperty, val, elem) { var str = val ? "".concat(cssProperty, ": ").concat(val) : undefined; var styleAttr = elem.getAttribute("style"); if (!styleAttr) { if (str) { elem.setAttribute("style", str); } } else { var regExStr = "".concat(cssProperty, "[s]*:[s]*(.+)"); var regex = new RegExp(regExStr, "g"); var regexMatch = regex.exec(styleAttr); if (regexMatch) { elem.setAttribute("style", styleAttr.replace(regex, str ? "".concat(str) : "")); } else { if (str) { elem.setAttribute("style", "".concat(styleAttr, "; ").concat(str)); } } } } //# sourceMappingURL=dom.js.map