angular-xml-editor
Version:
XML editor component for Angular
80 lines (79 loc) • 6.88 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { XmlRuleElement } from './xmlRuleElement.class';
import { XmlEditRuleCheckTextInsert } from './xmlEditRuleCheckTextInsert.class';
import { XmlRules } from './xmlRules.class';
import { Xml2html } from '../xml-html-converter/xml2html.class';
export class XmlRulesCreator {
/**
* @param {?} schema
* @param {?} _floatingElementNames
*/
constructor(schema, _floatingElementNames) {
this.schema = schema;
this._floatingElementNames = _floatingElementNames;
this.rules = new XmlRules(this.getAllElementRuleNodes(Array.from(this.schema.xsdNodes.values())));
}
/**
* @param {?} node
* @return {?}
*/
findXsdNodeForHtmlNode(node) {
/** @type {?} */
const tagName = Xml2html.getTagNameFromNode(node);
return this.schema.xsdNodes.get(tagName);
}
/**
* @param {?} xsdNodes
* @return {?}
*/
getAllElementRuleNodes(xsdNodes) {
return new Map(xsdNodes.map(xsdNode => [xsdNode.attributes.getNamedItem('name').value, this.getRuleElementForXsdNode(xsdNode)]));
}
/**
* @param {?} xsdNode
* @return {?}
*/
getRuleElementForXsdNode(xsdNode) {
if (xsdNode) {
/** @type {?} */
const tagName = xsdNode.attributes.getNamedItem('name').value;
return new XmlRuleElement({
tagName: tagName,
floating: this.isFloating(tagName),
empty: this.isEmpty(xsdNode)
});
}
else {
return undefined;
}
}
/**
* @param {?} xsdNode
* @return {?}
*/
isEmpty(xsdNode) {
if (new XmlEditRuleCheckTextInsert(this.schema.xsdNodes).isTextAllowedInThisElement(xsdNode) === true) {
return false;
}
return true;
}
/**
* @param {?} tagName
* @return {?}
*/
isFloating(tagName) {
return this._floatingElementNames.includes(tagName);
}
}
if (false) {
/** @type {?} */
XmlRulesCreator.prototype.rules;
/** @type {?} */
XmlRulesCreator.prototype.schema;
/** @type {?} */
XmlRulesCreator.prototype._floatingElementNames;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sUnVsZXNDcmVhdG9yLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci14bWwtZWRpdG9yLyIsInNvdXJjZXMiOlsibGliL2NvZGUveG1sLXJ1bGVzLWNoZWNrL3htbFJ1bGVzQ3JlYXRvci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEUsTUFBTTs7Ozs7Z0JBR3VCLE1BQWlCLEVBQVUscUJBQStCO1FBQTFELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBVSwwQkFBcUIsR0FBckIscUJBQXFCLENBQVU7UUFDbkYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Ozs7O0lBRzVGLHNCQUFzQixDQUFDLElBQVU7O1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7Ozs7O0lBR25DLHNCQUFzQixDQUFDLFFBQW1CO1FBQ2hELE9BQU8sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBMkIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7OztJQUdySix3QkFBd0IsQ0FBQyxPQUFnQjtRQUMvQyxJQUFJLE9BQU8sRUFBRTs7WUFDWCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDOUQsT0FBTyxJQUFJLGNBQWMsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2FBRTdCLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjs7Ozs7O0lBR0ssT0FBTyxDQUFDLE9BQWE7UUFDM0IsSUFBSSxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3JHLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQzs7Ozs7O0lBR04sVUFBVSxDQUFDLE9BQWU7UUFDaEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztDQUV2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFhtbFJ1bGVFbGVtZW50IH0gZnJvbSAnLi94bWxSdWxlRWxlbWVudC5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbEVkaXRSdWxlQ2hlY2tUZXh0SW5zZXJ0IH0gZnJvbSAnLi94bWxFZGl0UnVsZUNoZWNrVGV4dEluc2VydC5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbFJ1bGVzIH0gZnJvbSAnLi94bWxSdWxlcy5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbFNjaGVtYSB9IGZyb20gJy4veG1sU2NoZW1hLmNsYXNzJztcclxuaW1wb3J0IHsgWG1sMmh0bWwgfSBmcm9tICcuLi94bWwtaHRtbC1jb252ZXJ0ZXIveG1sMmh0bWwuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFhtbFJ1bGVzQ3JlYXRvciB7XHJcbiAgcHVibGljIHJ1bGVzOiBYbWxSdWxlcztcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NoZW1hOiBYbWxTY2hlbWEsIHByaXZhdGUgX2Zsb2F0aW5nRWxlbWVudE5hbWVzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5ydWxlcyA9IG5ldyBYbWxSdWxlcyh0aGlzLmdldEFsbEVsZW1lbnRSdWxlTm9kZXMoQXJyYXkuZnJvbSh0aGlzLnNjaGVtYS54c2ROb2Rlcy52YWx1ZXMoKSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFhzZE5vZGVGb3JIdG1sTm9kZShub2RlOiBOb2RlKTogTm9kZSB7XHJcbiAgICBjb25zdCB0YWdOYW1lID0gWG1sMmh0bWwuZ2V0VGFnTmFtZUZyb21Ob2RlKG5vZGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLnhzZE5vZGVzLmdldCh0YWdOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsRWxlbWVudFJ1bGVOb2Rlcyh4c2ROb2RlczogRWxlbWVudFtdKSB7XHJcbiAgICByZXR1cm4gbmV3IE1hcCh4c2ROb2Rlcy5tYXA8W3N0cmluZywgWG1sUnVsZUVsZW1lbnRdPih4c2ROb2RlID0+IFt4c2ROb2RlLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCduYW1lJykudmFsdWUsIHRoaXMuZ2V0UnVsZUVsZW1lbnRGb3JYc2ROb2RlKHhzZE5vZGUpXSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSdWxlRWxlbWVudEZvclhzZE5vZGUoeHNkTm9kZTogRWxlbWVudCk6IFhtbFJ1bGVFbGVtZW50IHtcclxuICAgIGlmICh4c2ROb2RlKSB7XHJcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB4c2ROb2RlLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCduYW1lJykudmFsdWU7XHJcbiAgICAgIHJldHVybiBuZXcgWG1sUnVsZUVsZW1lbnQoe1xyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgZmxvYXRpbmc6IHRoaXMuaXNGbG9hdGluZyh0YWdOYW1lKSxcclxuICAgICAgICBlbXB0eTogdGhpcy5pc0VtcHR5KHhzZE5vZGUpXHJcbiAgICAgICAgLy8geHNkUmF3Tm9kZTogeHNkTm9kZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0VtcHR5KHhzZE5vZGU6IE5vZGUpOiBib29sZWFuIHtcclxuICAgIGlmIChuZXcgWG1sRWRpdFJ1bGVDaGVja1RleHRJbnNlcnQodGhpcy5zY2hlbWEueHNkTm9kZXMpLmlzVGV4dEFsbG93ZWRJblRoaXNFbGVtZW50KHhzZE5vZGUpID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0Zsb2F0aW5nKHRhZ05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zsb2F0aW5nRWxlbWVudE5hbWVzLmluY2x1ZGVzKHRhZ05hbWUpO1xyXG4gIH1cclxufVxyXG4iXX0=