UNPKG

angular-xml-editor

Version:
129 lines (128 loc) 13.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Xml2html } from './xml2html.class'; import { XmlToolbox } from '../xmlToolbox.class'; import { Xml2htmlAttributeWorker } from './xml2htmlAttributeWorker.class'; import { DomDummyNodeManager } from '../dummyNodes/domDummyNodeManager.class'; var Html2xml = /** @class */ (function () { function Html2xml(rules) { this.rules = rules; this.attributeWorker = new Xml2htmlAttributeWorker(rules); } /** * @param {?} html * @return {?} */ Html2xml.prototype.ToXml = /** * @param {?} html * @return {?} */ function (html) { if (html === '') { return ''; } /** @type {?} */ var cleanHtml = this.CleanUpHtmlBeforeConvert2Xml(html); /** @type {?} */ var domparser = new DOMParser(); /** @type {?} */ var domdoc = domparser.parseFromString(cleanHtml, 'text/xml'); /** @type {?} */ var targetDocument = new Document(); if (domdoc.documentElement === null) { return ''; } /** @type {?} */ var body = this.GetXmlElementFromHtmlElement(domdoc.documentElement, targetDocument); if (body && body.nodeType === Node.ELEMENT_NODE) { /** @type {?} */ var xml = (/** @type {?} */ (body)).outerHTML; return xml; } else { throw new Error("root node " + XmlToolbox.GetNodeDebugContext(body) + " is no element"); } }; /** * @param {?} html * @return {?} */ Html2xml.prototype.CleanUpHtmlBeforeConvert2Xml = /** * @param {?} html * @return {?} */ function (html) { /** @type {?} */ var domparser = new DOMParser(); /** @type {?} */ var domdoc = domparser.parseFromString(html, 'text/html'); new DomDummyNodeManager().RemoveAllDummyNodes(domdoc.documentElement); /** @type {?} */ var cleanHtml = domdoc.body.innerHTML; return cleanHtml; }; /** * @param {?} node * @param {?} targetDocument * @return {?} */ Html2xml.prototype.GetXmlElementFromHtmlElement = /** * @param {?} node * @param {?} targetDocument * @return {?} */ function (node, targetDocument) { switch (node.nodeType) { case Node.ELEMENT_NODE: // element node /** @type {?} */ var asElement = /** @type {?} */ (node); /** @type {?} */ var tagName = Xml2html.getTagNameFromNode(node); if (!tagName || tagName === '') { throw new Error("no tagname in " + XmlToolbox.GetNodeDebugContext(node)); } /** @type {?} */ var newElement = targetDocument.createElement(tagName); /** @type {?} */ var children = asElement.childNodes; if (children.length === 0 && !asElement.classList.contains(Xml2html.NoClosingTagClassName)) { newElement.appendChild(targetDocument.createTextNode('')); // to prevent non closing tags } else { for (var i = 0; i < children.length; ++i) { /** @type {?} */ var childAsHtml = this.GetXmlElementFromHtmlElement(children[i], targetDocument); if (childAsHtml !== undefined) { newElement.appendChild(childAsHtml); } } } // // insert attributes this.attributeWorker.writeAllHtmlAttributesToXml(asElement, newElement); return newElement; case Node.TEXT_NODE: // text node /** @type {?} */ var content = (/** @type {?} */ (node)).textContent; if (content.length > 0) { return targetDocument.createTextNode(content); } else { return undefined; } default: // tslint:disable-next-line:max-line-length throw new Error("unknown html element nodeType " + node.nodeType + " in value: " + XmlToolbox.GetNodeDebugContext(node)); } }; return Html2xml; }()); export { Html2xml }; if (false) { /** @type {?} */ Html2xml.prototype.attributeWorker; /** @type {?} */ Html2xml.prototype.rules; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbDJ4bWwuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXhtbC1lZGl0b3IvIiwic291cmNlcyI6WyJsaWIvY29kZS94bWwtaHRtbC1jb252ZXJ0ZXIvaHRtbDJ4bWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFOUUsSUFBQTtJQUdFLGtCQUFtQixLQUFlO1FBQWYsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDM0Q7Ozs7O0lBRU0sd0JBQUs7Ozs7Y0FBQyxJQUFZO1FBQ3ZCLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBRSxDQUFDO1NBQ1g7O1FBS0QsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDOztRQUMxRCxJQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDOztRQUNsQyxJQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQzs7UUFDaEUsSUFBTSxjQUFjLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxDQUFDO1NBQ1g7O1FBRUQsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFD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Rkw7SUEwRkMsQ0FBQTtBQXBGRCxvQkFvRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBYbWxSdWxlcyB9IGZyb20gJy4uL3htbC1ydWxlcy1jaGVjay94bWxSdWxlcy5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbDJodG1sIH0gZnJvbSAnLi94bWwyaHRtbC5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbFRvb2xib3ggfSBmcm9tICcuLi94bWxUb29sYm94LmNsYXNzJztcclxuaW1wb3J0IHsgWG1sMmh0bWxBdHRyaWJ1dGVXb3JrZXIgfSBmcm9tICcuL3htbDJodG1sQXR0cmlidXRlV29ya2VyLmNsYXNzJztcclxuaW1wb3J0IHsgRG9tRHVtbXlOb2RlTWFuYWdlciB9IGZyb20gJy4uL2R1bW15Tm9kZXMvZG9tRHVtbXlOb2RlTWFuYWdlci5jbGFzcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSHRtbDJ4bWwge1xyXG4gIHByaXZhdGUgYXR0cmlidXRlV29ya2VyOiBYbWwyaHRtbEF0dHJpYnV0ZVdvcmtlcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJ1bGVzOiBYbWxSdWxlcykge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVXb3JrZXIgPSBuZXcgWG1sMmh0bWxBdHRyaWJ1dGVXb3JrZXIocnVsZXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFRvWG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaHRtbCA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgLy8gaHRtbCA9IGh0bWwucmVwbGFjZSgnXFx0JywgJycpO1xyXG4gICAgLy8gaHRtbCA9IGh0bWwucmVwbGFjZSgnXFxyJywgJycpO1xyXG4gICAgLy8gaHRtbCA9IGh0bWwucmVwbGFjZSgnXFxuJywgJycpO1xyXG5cclxuICAgIGNvbnN0IGNsZWFuSHRtbCA9IHRoaXMuQ2xlYW5VcEh0bWxCZWZvcmVDb252ZXJ0MlhtbChodG1sKTtcclxuICAgIGNvbnN0IGRvbXBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcclxuICAgIGNvbnN0IGRvbWRvYyA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoY2xlYW5IdG1sLCAndGV4dC94bWwnKTtcclxuICAgIGNvbnN0IHRhcmdldERvY3VtZW50ID0gbmV3IERvY3VtZW50KCk7XHJcbiAgICBpZiAoZG9tZG9jLmRvY3VtZW50RWxlbWVudCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYm9keSA9IHRoaXMuR2V0WG1sRWxlbWVudEZyb21IdG1sRWxlbWVudChkb21kb2MuZG9jdW1lbnRFbGVtZW50LCB0YXJnZXREb2N1bWVudCk7XHJcbiAgICBpZiAoYm9keSAmJiBib2R5Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xyXG4gICAgICBjb25zdCB4bWwgPSAoYm9keSBhcyBFbGVtZW50KS5vdXRlckhUTUw7XHJcbiAgICAgIHJldHVybiB4bWw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJvb3Qgbm9kZSAke1htbFRvb2xib3guR2V0Tm9kZURlYnVnQ29udGV4dChib2R5KX0gaXMgbm8gZWxlbWVudGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBDbGVhblVwSHRtbEJlZm9yZUNvbnZlcnQyWG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICBjb25zdCBkb21kb2MgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcclxuICAgIG5ldyBEb21EdW1teU5vZGVNYW5hZ2VyKCkuUmVtb3ZlQWxsRHVtbXlOb2Rlcyhkb21kb2MuZG9jdW1lbnRFbGVtZW50KTsgLy8gcmVtb3ZlIGFsbCBkdW1teSBub2Rlc1xyXG4gICAgY29uc3QgY2xlYW5IdG1sID0gZG9tZG9jLmJvZHkuaW5uZXJIVE1MO1xyXG4gICAgcmV0dXJuIGNsZWFuSHRtbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgR2V0WG1sRWxlbWVudEZyb21IdG1sRWxlbWVudChub2RlOiBOb2RlLCB0YXJnZXREb2N1bWVudDogRG9jdW1lbnQpOiBOb2RlIHtcclxuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xyXG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiAvLyBlbGVtZW50IG5vZGVcclxuICAgICAgICBjb25zdCBhc0VsZW1lbnQgPSBub2RlIGFzIEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IFhtbDJodG1sLmdldFRhZ05hbWVGcm9tTm9kZShub2RlKTtcclxuXHJcbiAgICAgICAgaWYgKCF0YWdOYW1lIHx8IHRhZ05hbWUgPT09ICcnKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHRhZ25hbWUgaW4gJHtYbWxUb29sYm94LkdldE5vZGVEZWJ1Z0NvbnRleHQobm9kZSl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjcmVhdGUgZWxlbWVudCBub2RlXHJcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudCA9IHRhcmdldERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIGFwcGVuZCBjaGlsZCBlbGVtZW50cyByZWN1cnNpdmVcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGFzRWxlbWVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgIWFzRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoWG1sMmh0bWwuTm9DbG9zaW5nVGFnQ2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZCh0YXJnZXREb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpOyAvLyB0byBwcmV2ZW50IG5vbiBjbG9zaW5nIHRhZ3NcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZEFzSHRtbCA9IHRoaXMuR2V0WG1sRWxlbWVudEZyb21IdG1sRWxlbWVudChjaGlsZHJlbltpXSwgdGFyZ2V0RG9jdW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRBc0h0bWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGRBc0h0bWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAvLyBpbnNlcnQgYXR0cmlidXRlc1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlV29ya2VyLndyaXRlQWxsSHRtbEF0dHJpYnV0ZXNUb1htbChhc0VsZW1lbnQsIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3RWxlbWVudDtcclxuXHJcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IC8vIHRleHQgbm9kZVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSAobm9kZSBhcyBFbGVtZW50KS50ZXh0Q29udGVudDtcclxuICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGh0bWwgZWxlbWVudCBub2RlVHlwZSAke25vZGUubm9kZVR5cGV9IGluIHZhbHVlOiAke1htbFRvb2xib3guR2V0Tm9kZURlYnVnQ29udGV4dChub2RlKX1gKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19