UNPKG

angular-xml-editor

Version:
117 lines (116 loc) 12.9 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'; export class Html2xml { /** * @param {?} rules */ constructor(rules) { this.rules = rules; this.attributeWorker = new Xml2htmlAttributeWorker(rules); } /** * @param {?} html * @return {?} */ ToXml(html) { if (html === '') { return ''; } /** @type {?} */ const cleanHtml = this.CleanUpHtmlBeforeConvert2Xml(html); /** @type {?} */ const domparser = new DOMParser(); /** @type {?} */ const domdoc = domparser.parseFromString(cleanHtml, 'text/xml'); /** @type {?} */ const targetDocument = new Document(); if (domdoc.documentElement === null) { return ''; } /** @type {?} */ const body = this.GetXmlElementFromHtmlElement(domdoc.documentElement, targetDocument); if (body && body.nodeType === Node.ELEMENT_NODE) { /** @type {?} */ const xml = (/** @type {?} */ (body)).outerHTML; return xml; } else { throw new Error(`root node ${XmlToolbox.GetNodeDebugContext(body)} is no element`); } } /** * @param {?} html * @return {?} */ CleanUpHtmlBeforeConvert2Xml(html) { /** @type {?} */ const domparser = new DOMParser(); /** @type {?} */ const domdoc = domparser.parseFromString(html, 'text/html'); new DomDummyNodeManager().RemoveAllDummyNodes(domdoc.documentElement); /** @type {?} */ const cleanHtml = domdoc.body.innerHTML; return cleanHtml; } /** * @param {?} node * @param {?} targetDocument * @return {?} */ GetXmlElementFromHtmlElement(node, targetDocument) { switch (node.nodeType) { case Node.ELEMENT_NODE: // element node /** @type {?} */ const asElement = /** @type {?} */ (node); /** @type {?} */ const tagName = Xml2html.getTagNameFromNode(node); if (!tagName || tagName === '') { throw new Error(`no tagname in ${XmlToolbox.GetNodeDebugContext(node)}`); } /** @type {?} */ const newElement = targetDocument.createElement(tagName); /** @type {?} */ const children = asElement.childNodes; if (children.length === 0 && !asElement.classList.contains(Xml2html.NoClosingTagClassName)) { newElement.appendChild(targetDocument.createTextNode('')); // to prevent non closing tags } else { for (let i = 0; i < children.length; ++i) { /** @type {?} */ const 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 {?} */ const 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)}`); } } } if (false) { /** @type {?} */ Html2xml.prototype.attributeWorker; /** @type {?} */ Html2xml.prototype.rules; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbDJ4bWwuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXhtbC1lZGl0b3IvIiwic291cmNlcyI6WyJsaWIvY29kZS94bWwtaHRtbC1jb252ZXJ0ZXIvaHRtbDJ4bWwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFOUUsTUFBTTs7OztJQUdKLFlBQW1CLEtBQWU7UUFBZixVQUFLLEdBQUwsS0FBSyxDQUFVO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMzRDs7Ozs7SUFFTSxLQUFLLENBQUMsSUFBWTtRQUN2QixJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7WUFDZixPQUFPLEVBQUUsQ0FBQztTQUNYOztRQUtELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQzs7UUFDbEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7O1FBQ2hFLE1BQU0sY0FBYyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDdEMsSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLElBQUksRUFBRTtZQUNuQyxPQUFPLEVBQUUsQ0FBQztTQUNYOztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZG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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWG1sUnVsZXMgfSBmcm9tICcuLi94bWwtcnVsZXMtY2hlY2sveG1sUnVsZXMuY2xhc3MnO1xyXG5pbXBvcnQgeyBYbWwyaHRtbCB9IGZyb20gJy4veG1sMmh0bWwuY2xhc3MnO1xyXG5pbXBvcnQgeyBYbWxUb29sYm94IH0gZnJvbSAnLi4veG1sVG9vbGJveC5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbDJodG1sQXR0cmlidXRlV29ya2VyIH0gZnJvbSAnLi94bWwyaHRtbEF0dHJpYnV0ZVdvcmtlci5jbGFzcyc7XHJcbmltcG9ydCB7IERvbUR1bW15Tm9kZU1hbmFnZXIgfSBmcm9tICcuLi9kdW1teU5vZGVzL2RvbUR1bW15Tm9kZU1hbmFnZXIuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEh0bWwyeG1sIHtcclxuICBwcml2YXRlIGF0dHJpYnV0ZVdvcmtlcjogWG1sMmh0bWxBdHRyaWJ1dGVXb3JrZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBydWxlczogWG1sUnVsZXMpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlV29ya2VyID0gbmV3IFhtbDJodG1sQXR0cmlidXRlV29ya2VyKHJ1bGVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBUb1htbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGh0bWwgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIC8vIGh0bWwgPSBodG1sLnJlcGxhY2UoJ1xcdCcsICcnKTtcclxuICAgIC8vIGh0bWwgPSBodG1sLnJlcGxhY2UoJ1xccicsICcnKTtcclxuICAgIC8vIGh0bWwgPSBodG1sLnJlcGxhY2UoJ1xcbicsICcnKTtcclxuXHJcbiAgICBjb25zdCBjbGVhbkh0bWwgPSB0aGlzLkNsZWFuVXBIdG1sQmVmb3JlQ29udmVydDJYbWwoaHRtbCk7XHJcbiAgICBjb25zdCBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICBjb25zdCBkb21kb2MgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKGNsZWFuSHRtbCwgJ3RleHQveG1sJyk7XHJcbiAgICBjb25zdCB0YXJnZXREb2N1bWVudCA9IG5ldyBEb2N1bWVudCgpO1xyXG4gICAgaWYgKGRvbWRvYy5kb2N1bWVudEVsZW1lbnQgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLkdldFhtbEVsZW1lbnRGcm9tSHRtbEVsZW1lbnQoZG9tZG9jLmRvY3VtZW50RWxlbWVudCwgdGFyZ2V0RG9jdW1lbnQpO1xyXG4gICAgaWYgKGJvZHkgJiYgYm9keS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcclxuICAgICAgY29uc3QgeG1sID0gKGJvZHkgYXMgRWxlbWVudCkub3V0ZXJIVE1MO1xyXG4gICAgICByZXR1cm4geG1sO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGByb290IG5vZGUgJHtYbWxUb29sYm94LkdldE5vZGVEZWJ1Z0NvbnRleHQoYm9keSl9IGlzIG5vIGVsZW1lbnRgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgQ2xlYW5VcEh0bWxCZWZvcmVDb252ZXJ0MlhtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgY29uc3QgZG9tZG9jID0gZG9tcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XHJcbiAgICBuZXcgRG9tRHVtbXlOb2RlTWFuYWdlcigpLlJlbW92ZUFsbER1bW15Tm9kZXMoZG9tZG9jLmRvY3VtZW50RWxlbWVudCk7IC8vIHJlbW92ZSBhbGwgZHVtbXkgbm9kZXNcclxuICAgIGNvbnN0IGNsZWFuSHRtbCA9IGRvbWRvYy5ib2R5LmlubmVySFRNTDtcclxuICAgIHJldHVybiBjbGVhbkh0bWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldFhtbEVsZW1lbnRGcm9tSHRtbEVsZW1lbnQobm9kZTogTm9kZSwgdGFyZ2V0RG9jdW1lbnQ6IERvY3VtZW50KTogTm9kZSB7XHJcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcclxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTogLy8gZWxlbWVudCBub2RlXHJcbiAgICAgICAgY29uc3QgYXNFbGVtZW50ID0gbm9kZSBhcyBFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBYbWwyaHRtbC5nZXRUYWdOYW1lRnJvbU5vZGUobm9kZSk7XHJcblxyXG4gICAgICAgIGlmICghdGFnTmFtZSB8fCB0YWdOYW1lID09PSAnJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB0YWduYW1lIGluICR7WG1sVG9vbGJveC5HZXROb2RlRGVidWdDb250ZXh0KG5vZGUpfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY3JlYXRlIGVsZW1lbnQgbm9kZVxyXG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQgPSB0YXJnZXREb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xyXG5cclxuICAgICAgICAvLyBhcHBlbmQgY2hpbGQgZWxlbWVudHMgcmVjdXJzaXZlXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBhc0VsZW1lbnQuY2hpbGROb2RlcztcclxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmICFhc0VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFhtbDJodG1sLk5vQ2xvc2luZ1RhZ0NsYXNzTmFtZSkpIHtcclxuICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQodGFyZ2V0RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTsgLy8gdG8gcHJldmVudCBub24gY2xvc2luZyB0YWdzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRBc0h0bWwgPSB0aGlzLkdldFhtbEVsZW1lbnRGcm9tSHRtbEVsZW1lbnQoY2hpbGRyZW5baV0sIHRhcmdldERvY3VtZW50KTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkQXNIdG1sICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkQXNIdG1sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLy8gaW5zZXJ0IGF0dHJpYnV0ZXNcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZVdvcmtlci53cml0ZUFsbEh0bWxBdHRyaWJ1dGVzVG9YbWwoYXNFbGVtZW50LCBuZXdFbGVtZW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld0VsZW1lbnQ7XHJcblxyXG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiAvLyB0ZXh0IG5vZGVcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gKG5vZGUgYXMgRWxlbWVudCkudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRhcmdldERvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBodG1sIGVsZW1lbnQgbm9kZVR5cGUgJHtub2RlLm5vZGVUeXBlfSBpbiB2YWx1ZTogJHtYbWxUb29sYm94LkdldE5vZGVEZWJ1Z0NvbnRleHQobm9kZSl9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==