angular-xml-editor
Version:
XML editor component for Angular
129 lines (128 loc) • 13.3 kB
JavaScript
/**
* @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