angular-xml-editor
Version:
XML editor component for Angular
157 lines (156 loc) • 14.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input } from '@angular/core';
import { XmlEditRuleCheckAttributes } from '../../code/xml-rules-check/xmlEditRuleCheckAttributes.class';
import { RuleAttributeTypes } from '../../code/xml-rules-check/xmlRuleAttribut.class';
import { AngularXmlEditorService } from '../../angular-xml-editor.service';
import { Xml2htmlAttributeWorker } from '../../code/xml-html-converter/xml2htmlAttributeWorker.class';
import { Xml2html } from '../../code/xml-html-converter/xml2html.class';
var XmlEditorAttributeEditorComponent = /** @class */ (function () {
function XmlEditorAttributeEditorComponent(editorService) {
this.editorService = editorService;
this.attribTypes = RuleAttributeTypes;
this.attributes = [];
}
Object.defineProperty(XmlEditorAttributeEditorComponent.prototype, "editorContextId", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
if (!value) {
return;
}
this.editorContext = this.editorService.getEditorContext(value);
this.actualCursorPosChangedSubscription = this.editorContext.actualCursorChanged.subscribe(function (pos) {
_this.attributes = _this.GetAttributesForCursorPos(pos.StartPos);
_this.elementName = _this.GetElementNameForCursorPos(pos.StartPos);
});
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
XmlEditorAttributeEditorComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () { };
/**
* @return {?}
*/
XmlEditorAttributeEditorComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.actualCursorPosChangedSubscription.unsubscribe();
};
/**
* @param {?} key
* @param {?} value
* @return {?}
*/
XmlEditorAttributeEditorComponent.prototype.attributeValueChanged = /**
* @param {?} key
* @param {?} value
* @return {?}
*/
function (key, value) {
if (this.actualElement) {
/** @type {?} */
var attribWorker = new Xml2htmlAttributeWorker(this.editorContext.config.rules);
attribWorker.writeAttributeToHtml(this.actualElement, key, value);
}
};
/**
* @param {?} pos
* @return {?}
*/
XmlEditorAttributeEditorComponent.prototype.GetElementNameForCursorPos = /**
* @param {?} pos
* @return {?}
*/
function (pos) {
/** @type {?} */
var rulesCheck = new XmlEditRuleCheckAttributes(this.editorContext.config.xmlSchema);
/** @type {?} */
var parentNode = /** @type {?} */ (rulesCheck.getRelevantParentNodeForCursorPos(pos));
if (parentNode) {
return Xml2html.getTagNameFromNode(parentNode);
}
return undefined;
};
/**
* @param {?} pos
* @return {?}
*/
XmlEditorAttributeEditorComponent.prototype.GetAttributesForCursorPos = /**
* @param {?} pos
* @return {?}
*/
function (pos) {
/** @type {?} */
var attribWorker = new Xml2htmlAttributeWorker(this.editorContext.config.rules);
/** @type {?} */
var rulesCheck = new XmlEditRuleCheckAttributes(this.editorContext.config.xmlSchema);
/** @type {?} */
var parentNode = /** @type {?} */ (rulesCheck.getRelevantParentNodeForCursorPos(pos));
this.actualElement = parentNode;
if (parentNode) {
/** @type {?} */
var allowedAttributes = rulesCheck.AttributesAllowedAtThisCursorPos(pos);
return allowedAttributes.map(function (a) {
return /** @type {?} */ ({
rules: a,
value: attribWorker.getAttributeValueFromHtml(parentNode, a.attribName)
});
});
}
return [];
};
XmlEditorAttributeEditorComponent.decorators = [
{ type: Component, args: [{
selector: 'axed-attribute-editor',
template: "<div class=\"sws-attribute-editor-toolbar\" *ngIf=\"elementName\">\r\n\r\n <h3>Attributes</h3>\r\n\r\n <div *ngIf=\"attributes.length > 0; else noAttributes\">\r\n <p>Attributes for <b>{{elementName}}</b> element</p>\r\n <div *ngFor=\"let attrib of attributes\">\r\n <span>{{attrib.rules.attribName}}</span>:<br />\r\n\r\n <input type=\"text\" *ngIf=\"attrib.rules.typ === attribTypes.String\" value=\"{{attrib.value}}\"\r\n (input)=\"attributeValueChanged(attrib.rules.attribName, $event.target.value);\">\r\n\r\n <select *ngIf=\"attrib.rules.typ === attribTypes.Enum\" value=\"{{attrib.value}}\"\r\n (input)=\"attributeValueChanged(attrib.rules.attribName, $event.target.value);\">\r\n <option *ngIf=\"attrib.rules.required === false\"></option>\r\n <option *ngFor=\"let value of attrib.rules.fixedValues\">{{value}}</option>\r\n </select>\r\n\r\n </div>\r\n </div>\r\n\r\n <ng-template #noAttributes>\r\n No attributes to edit for element <b>{{elementName}}</b>\r\n </ng-template>\r\n\r\n</div>\r\n",
styles: [".sws-attribute-editor-toolbar input,.sws-attribute-editor-toolbar select{width:100%;border-radius:5px;background-color:transparent;padding:.6em 0 .4em;margin-bottom:.3em;border:.5px solid #eee}"]
}] }
];
/** @nocollapse */
XmlEditorAttributeEditorComponent.ctorParameters = function () { return [
{ type: AngularXmlEditorService }
]; };
XmlEditorAttributeEditorComponent.propDecorators = {
editorContextId: [{ type: Input, args: ['editorContextId',] }]
};
return XmlEditorAttributeEditorComponent;
}());
export { XmlEditorAttributeEditorComponent };
if (false) {
/** @type {?} */
XmlEditorAttributeEditorComponent.prototype.editorContext;
/** @type {?} */
XmlEditorAttributeEditorComponent.prototype.actualCursorPosChangedSubscription;
/** @type {?} */
XmlEditorAttributeEditorComponent.prototype.attribTypes;
/** @type {?} */
XmlEditorAttributeEditorComponent.prototype.attributes;
/** @type {?} */
XmlEditorAttributeEditorComponent.prototype.elementName;
/** @type {?} */
XmlEditorAttributeEditorComponent.prototype.actualElement;
/** @type {?} */
XmlEditorAttributeEditorComponent.prototype.editorService;
}
/**
* @record
*/
export function ToolbarAttributData() { }
/** @type {?} */
ToolbarAttributData.prototype.rules;
/** @type {?} */
ToolbarAttributData.prototype.value;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLWVkaXRvci1hdHRyaWJ1dGUtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXIteG1sLWVkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3htbC1lZGl0b3ItYXR0cmlidXRlLWVkaXRvci94bWwtZWRpdG9yLWF0dHJpYnV0ZS1lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN6RyxPQUFPLEVBQW1CLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztJQThCdEUsMkNBQW9CLGFBQXNDO1FBQXRDLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjsyQkFONUMsa0JBQWtCOzBCQUVJLEVBQUU7S0FJd0I7SUFwQjlELHNCQUNJLDhEQUFlOzs7OztRQURuQixVQUNvQixLQUFhO1lBRGpDLGlCQVVDO1lBUkMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFVBQUEsR0FBRztnQkFDNUYsS0FBSSxDQUFDLFVBQVUsR0FBRyxLQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCxLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbEUsQ0FBQyxDQUFDO1NBQ0o7OztPQUFBOzs7O0lBWUQsb0RBQVE7OztJQUFSLGVBQWE7Ozs7SUFFYix1REFBVzs7O0lBQVg7UUFDRSxJQUFJLENBQUMsa0NBQWtDLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDdkQ7Ozs7OztJQUVELGlFQUFxQjs7Ozs7SUFBckIsVUFBc0IsR0FBVyxFQUFFLEtBQWE7UUFDOUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFOztZQUN0QixJQUFNLFlBQVksR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xGLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNuRTtLQUNGOzs7OztJQUVELHNFQUEwQjs7OztJQUExQixVQUEyQixHQUFpQjs7UUFDMUMsSUFBTSxVQUFVLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQzs7UUFDdkYsSUFBTSxVQUFVLHFCQUFHLFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxHQUFHLENBQVksRUFBQztRQUNoRixJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEI7Ozs7O0lBRUQscUVBQXlCOzs7O0lBQXpCLFVBQTBCLEdBQWlCOztRQUN6QyxJQUFNLFlBQVksR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOztRQUNsRixJQUFNLFVBQVUsR0FBRyxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztRQUN2RixJQUFNLFVBQVUscUJBQUcsVUFBVSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBWSxFQUFDO1FBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLElBQUksVUFBVSxFQUFFOztZQUNkLElBQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNFLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQztnQkFDNUIseUJBQU87b0JBQ0wsS0FBSyxFQUFFLENBQUM7b0JBQ1IsS0FBSyxFQUFFLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQztpQkFDakQsRUFBQzthQUMxQixDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sRUFBRSxDQUFDO0tBQ1g7O2dCQW5FRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsc2pDQUEyRDs7aUJBRTVEOzs7O2dCQVZRLHVCQUF1Qjs7O2tDQWM3QixLQUFLLFNBQUMsaUJBQWlCOzs0Q0FsQjFCOztTQWVhLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhtbEN1cnNvclBvcyB9IGZyb20gJy4uLy4uL2NvZGUvY3Vyc29yL3htbEN1cnNvclBvcy5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbEVkaXRSdWxlQ2hlY2tBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vLi4vY29kZS94bWwtcnVsZXMtY2hlY2sveG1sRWRpdFJ1bGVDaGVja0F0dHJpYnV0ZXMuY2xhc3MnO1xyXG5pbXBvcnQgeyBYbWxSdWxlQXR0cmlidXQsIFJ1bGVBdHRyaWJ1dGVUeXBlcyB9IGZyb20gJy4uLy4uL2NvZGUveG1sLXJ1bGVzLWNoZWNrL3htbFJ1bGVBdHRyaWJ1dC5jbGFzcyc7XHJcbmltcG9ydCB7IEFuZ3VsYXJYbWxFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYW5ndWxhci14bWwtZWRpdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgWG1sRWRpdG9yQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvZGUveG1sRWRpdG9yQ29udGV4dC5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbDJodG1sQXR0cmlidXRlV29ya2VyIH0gZnJvbSAnLi4vLi4vY29kZS94bWwtaHRtbC1jb252ZXJ0ZXIveG1sMmh0bWxBdHRyaWJ1dGVXb3JrZXIuY2xhc3MnO1xyXG5pbXBvcnQgeyBYbWwyaHRtbCB9IGZyb20gJy4uLy4uL2NvZGUveG1sLWh0bWwtY29udmVydGVyL3htbDJodG1sLmNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXhlZC1hdHRyaWJ1dGUtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4veG1sLWVkaXRvci1hdHRyaWJ1dGUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi94bWwtZWRpdG9yLWF0dHJpYnV0ZS1lZGl0b3IuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWG1sRWRpdG9yQXR0cmlidXRlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgZWRpdG9yQ29udGV4dDogWG1sRWRpdG9yQ29udGV4dDtcclxuXHJcbiAgQElucHV0KCdlZGl0b3JDb250ZXh0SWQnKVxyXG4gIHNldCBlZGl0b3JDb250ZXh0SWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRvckNvbnRleHQgPSB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0RWRpdG9yQ29udGV4dCh2YWx1ZSk7XHJcbiAgICB0aGlzLmFjdHVhbEN1cnNvclBvc0NoYW5nZWRTdWJzY3JpcHRpb24gPSB0aGlzLmVkaXRvckNvbnRleHQuYWN0dWFsQ3Vyc29yQ2hhbmdlZC5zdWJzY3JpYmUocG9zID0+IHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gdGhpcy5HZXRBdHRyaWJ1dGVzRm9yQ3Vyc29yUG9zKHBvcy5TdGFydFBvcyk7XHJcbiAgICAgIHRoaXMuZWxlbWVudE5hbWUgPSB0aGlzLkdldEVsZW1lbnROYW1lRm9yQ3Vyc29yUG9zKHBvcy5TdGFydFBvcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFjdHVhbEN1cnNvclBvc0NoYW5nZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgYXR0cmliVHlwZXMgPSBSdWxlQXR0cmlidXRlVHlwZXM7XHJcblxyXG4gIGF0dHJpYnV0ZXM6IFRvb2xiYXJBdHRyaWJ1dERhdGFbXSA9IFtdO1xyXG4gIGVsZW1lbnROYW1lOiBzdHJpbmc7XHJcbiAgYWN0dWFsRWxlbWVudDogRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBBbmd1bGFyWG1sRWRpdG9yU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0dWFsQ3Vyc29yUG9zQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgYXR0cmlidXRlVmFsdWVDaGFuZ2VkKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5hY3R1YWxFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGF0dHJpYldvcmtlciA9IG5ldyBYbWwyaHRtbEF0dHJpYnV0ZVdvcmtlcih0aGlzLmVkaXRvckNvbnRleHQuY29uZmlnLnJ1bGVzKTtcclxuICAgICAgYXR0cmliV29ya2VyLndyaXRlQXR0cmlidXRlVG9IdG1sKHRoaXMuYWN0dWFsRWxlbWVudCwga2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBHZXRFbGVtZW50TmFtZUZvckN1cnNvclBvcyhwb3M6IFhtbEN1cnNvclBvcyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBydWxlc0NoZWNrID0gbmV3IFhtbEVkaXRSdWxlQ2hlY2tBdHRyaWJ1dGVzKHRoaXMuZWRpdG9yQ29udGV4dC5jb25maWcueG1sU2NoZW1hKTtcclxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBydWxlc0NoZWNrLmdldFJlbGV2YW50UGFyZW50Tm9kZUZvckN1cnNvclBvcyhwb3MpIGFzIEVsZW1lbnQ7XHJcbiAgICBpZiAocGFyZW50Tm9kZSkge1xyXG4gICAgICByZXR1cm4gWG1sMmh0bWwuZ2V0VGFnTmFtZUZyb21Ob2RlKHBhcmVudE5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIEdldEF0dHJpYnV0ZXNGb3JDdXJzb3JQb3MocG9zOiBYbWxDdXJzb3JQb3MpOiBUb29sYmFyQXR0cmlidXREYXRhW10ge1xyXG4gICAgY29uc3QgYXR0cmliV29ya2VyID0gbmV3IFhtbDJodG1sQXR0cmlidXRlV29ya2VyKHRoaXMuZWRpdG9yQ29udGV4dC5jb25maWcucnVsZXMpO1xyXG4gICAgY29uc3QgcnVsZXNDaGVjayA9IG5ldyBYbWxFZGl0UnVsZUNoZWNrQXR0cmlidXRlcyh0aGlzLmVkaXRvckNvbnRleHQuY29uZmlnLnhtbFNjaGVtYSk7XHJcbiAgICBjb25zdCBwYXJlbnROb2RlID0gcnVsZXNDaGVjay5nZXRSZWxldmFudFBhcmVudE5vZGVGb3JDdXJzb3JQb3MocG9zKSBhcyBFbGVtZW50O1xyXG4gICAgdGhpcy5hY3R1YWxFbGVtZW50ID0gcGFyZW50Tm9kZTtcclxuICAgIGlmIChwYXJlbnROb2RlKSB7XHJcbiAgICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gcnVsZXNDaGVjay5BdHRyaWJ1dGVzQWxsb3dlZEF0VGhpc0N1cnNvclBvcyhwb3MpO1xyXG4gICAgICByZXR1cm4gYWxsb3dlZEF0dHJpYnV0ZXMubWFwKGEgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBydWxlczogYSxcclxuICAgICAgICAgIHZhbHVlOiBhdHRyaWJXb3JrZXIuZ2V0QXR0cmlidXRlVmFsdWVGcm9tSHRtbChwYXJlbnROb2RlLCBhLmF0dHJpYk5hbWUpXHJcbiAgICAgICAgfSBhcyBUb29sYmFyQXR0cmlidXREYXRhO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9vbGJhckF0dHJpYnV0RGF0YSB7XHJcbiAgcnVsZXM6IFhtbFJ1bGVBdHRyaWJ1dDtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcbiJdfQ==