UNPKG

@knora/viewer

Version:
181 lines 27.1 kB
import * as tslib_1 from "tslib"; import { Component, Inject, Input, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { ApiResponseError, Constants, IHasProperty, KnoraApiConnection, ReadResource, ReadValue, ResourcePropertyDefinition } from '@knora/api'; import { KnoraApiConnectionToken } from '@knora/core'; import { StillImageComponent } from '../../representation'; // list of file value iris; TODO: not yet well done. It should be defined in global knora constants in knora-api-js-lib var FileRepresentation = /** @class */ (function () { function FileRepresentation() { } FileRepresentation.list = [ Constants.KnoraApiV2 + Constants.Delimiter + 'hasAudioFileValue', Constants.KnoraApiV2 + Constants.Delimiter + 'hasDDDFileValue', Constants.KnoraApiV2 + Constants.Delimiter + 'hasMovingImageFileValue', Constants.KnoraApiV2 + Constants.Delimiter + 'hasStillImageFileValue', Constants.KnoraApiV2 + Constants.Delimiter + 'hasTextFileValue' ]; return FileRepresentation; }()); export { FileRepresentation }; var jsonld = require('jsonld'); var ResourceViewComponent = /** @class */ (function () { function ResourceViewComponent(knoraApiConnection, _route, _router) { this.knoraApiConnection = knoraApiConnection; this._route = _route; this._router = _router; /** * Show all properties, even they don't have a value. * * @param {boolean} [allProps] */ this.allProps = false; /** * Show toolbar with project info and some action tools on top of properties if true. * * @param {boolean} [toolbar] */ this.toolbar = false; this.propArray = []; this.Constants = Constants; } ResourceViewComponent.prototype.ngOnInit = function () { // this.getResource(this.iri); }; ResourceViewComponent.prototype.ngOnChanges = function () { this.getResource(this.iri); // console.log(this.kuiStillImage.k; }; /** * Get a read resource sequence with ontology information and incoming resources. * * @param {string} id Resource iri */ ResourceViewComponent.prototype.getResource = function (id) { var _this = this; this.loading = true; this.error = undefined; this.knoraApiConnection.v2.res.getResource(id).subscribe(function (response) { var e_1, _a; _this.resource = response; // console.log(response); // get list of all properties var hasProps = _this.resource.entityInfo.classes[_this.resource.type].propertiesList; var i = 0; try { for (var hasProps_1 = tslib_1.__values(hasProps), hasProps_1_1 = hasProps_1.next(); !hasProps_1_1.done; hasProps_1_1 = hasProps_1.next()) { var hasProp = hasProps_1_1.value; var index = hasProp.propertyIndex; if (FileRepresentation.list.includes(index)) { // property value is of type hasFileRepresentations _this.fileRepresentation = _this.resource.properties[index]; } else { // filter all properties by type ResourcePropertyDefinition if (_this.resource.entityInfo.properties[index] && _this.resource.entityInfo.properties[index] instanceof ResourcePropertyDefinition) { var tempProp = { guiDef: hasProp, propDef: _this.resource.entityInfo.properties[index], values: _this.resource.properties[index] }; _this.propArray.push(tempProp); } } i++; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (hasProps_1_1 && !hasProps_1_1.done && (_a = hasProps_1.return)) _a.call(hasProps_1); } finally { if (e_1) throw e_1.error; } } // sort properties by guiOrder _this.propArray.sort(function (a, b) { return (a.guiDef.guiOrder > b.guiDef.guiOrder) ? 1 : -1; }); // console.log(this.propArray); // TODO: get info about file representation to load corresponding media view _this.loading = false; // setTimeout(() => { // }); }, function (error) { console.error(error); _this.loading = false; }); }; /** * Get incoming links for a resource. * * @param offset * @param callback */ // getIncomingLinks(offset: number, callback?: (numberOfResources: number) => void): void { // this.loading = true; // this._incomingService.getIncomingLinksForResource(this.sequence.resources[0].id, offset).subscribe( // (incomingResources: ReadResourcesSequence) => { // // update ontology information // this.ontologyInfo.updateOntologyInformation(incomingResources.ontologyInformation); // // Append elements incomingResources to this.sequence.incomingLinks // Array.prototype.push.apply(this.sequence.resources[0].incomingLinks, incomingResources.resources); // // if callback is given, execute function with the amount of incoming resources as the parameter // if (callback !== undefined) { // callback(incomingResources.resources.length); // } // this.loading = false; // }, // (error: any) => { // console.error(error); // this.loading = false; // } // ); // } ResourceViewComponent.prototype.openLink = function (id) { this.loading = true; // this.routeChanged.emit(id); this._router.navigate(['/resource/' + encodeURIComponent(id)]); }; ResourceViewComponent.prototype.refreshProperties = function (index) { // console.log('from still-image-component: ', index); // TODO: commented for knora-api-js-lib: // this.currentResource = this.sequence.resources[0].incomingFileRepresentations[index]; }; ResourceViewComponent.prototype.toggleProps = function (show) { this.allProps = !this.allProps; }; ResourceViewComponent.ctorParameters = function () { return [ { type: KnoraApiConnection, decorators: [{ type: Inject, args: [KnoraApiConnectionToken,] }] }, { type: ActivatedRoute }, { type: Router } ]; }; tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String) ], ResourceViewComponent.prototype, "iri", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean) ], ResourceViewComponent.prototype, "allProps", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean) ], ResourceViewComponent.prototype, "toolbar", void 0); tslib_1.__decorate([ ViewChild('kuiStillImage', { static: false }), tslib_1.__metadata("design:type", StillImageComponent) ], ResourceViewComponent.prototype, "kuiStillImage", void 0); ResourceViewComponent = tslib_1.__decorate([ Component({ selector: 'kui-resource-view', template: "<kui-progress-indicator *ngIf=\"loading\"></kui-progress-indicator>\n<div class=\"resource-view\" *ngIf=\"!error && !loading && resource\">\n\n <!-- media: show file representation -->\n <div *ngIf=\"fileRepresentation\">\n <div [ngSwitch]=\"fileRepresentation[0].type\" class=\"media\">\n\n <kui-still-image *ngSwitchCase=\"Constants.StillImageFileValue\" #kuiStillImage class=\"osd-viewer\"\n [images]=\"fileRepresentation\">\n </kui-still-image>\n\n <!-- TODO: switch through all other media type --\n <kui-moving-image></kui-moving-image>\n <kui-audio></kui-audio>\n <kui-ddd></kui-ddd>\n <kui-document></kui-document>\n\n <kui-collection></kui-collection>\n\n <kui-annotation></kui-annotation>\n <kui-link-obj></kui-link-obj>\n <kui-object></kui-object>\n <kui-region></kui-region>\n <kui-text></kui-text>\n -->\n\n <kui-message *ngSwitchDefault [medium]=\"true\"\n [message]=\"{status: 501, statusMsg: 'Not yet implemented', statusText: fileRepresentation[0].type + ' is not yet implemented'}\">\n </kui-message>\n\n </div>\n </div>\n\n <!-- properties / meta data -->\n <!-- tabs with header toolbar and properties -->\n <mat-tab-group animationDuration=\"0ms\" class=\"full-width data\">\n <!-- first tab for the main resource e.g. book -->\n <mat-tab [label]=\"resource.entityInfo?.classes[resource.type].label\">\n <!-- header with project / ontology / resource class info / ark url -->\n <kui-properties-toolbar *ngIf=\"toolbar\" [projectiri]=\"resource.attachedToProject\" [allProps]=\"allProps\"\n (toggleProps)=\"toggleProps($event)\">\n </kui-properties-toolbar>\n\n <kui-properties-view [propArray]=\"propArray\" [toolbar]=\"toolbar\" [allProps]=\"allProps\">\n </kui-properties-view>\n\n </mat-tab>\n\n <!-- TODO: second tab for a \"part-of\"-resource e.g. book page -->\n <!-- TODO: knora-api-js-lib: incoming file representations is empty; can't test it -->\n <!-- <mat-tab *ngIf=\"resource.incomingReferences.length > 0 && activeResource\"\n [label]=\"sequence.ontologyInformation.getLabelForResourceClass(activeResource.type)\">\n </mat-tab> -->\n\n <!-- TODO: third tab for a \"region\"-resource e.g. region on book page -->\n <!-- <mat-tab></mat-tab> -->\n </mat-tab-group>\n</div>\n\n<!-- in case of an error show the following message -->\n<div class=\"resource-view error content large middle\" *ngIf=\"error\">\n <kui-message *ngIf=\"error\" [message]=\"error\" [medium]=\"true\"></kui-message>\n</div>\n", styles: [".mat-form-field{width:320px}.fill-remaining-space{-webkit-box-flex:1;flex:1 1 auto}.center{text-align:center}a{text-decoration:none;color:inherit}.kui-link{cursor:pointer;border-bottom:2px solid rgba(0,105,92,.25)}.lv-prop-label{color:rgba(0,0,0,.54)}.lv-html-text{position:relative;overflow:hidden}.resource-view{max-width:960px;margin:0 auto}.resource-view .media{height:500px;display:block;margin:0 auto}.resource-view .data{min-height:700px;padding:24px 36px}.hidden{display:none}.property{margin-bottom:12px}.property .property-value-item{min-height:48px;height:auto}.property .property-value-item li{list-style-type:none}.property .property-value-item li.list:before{content:\"- \"}.property .property-value-item li.lastItem{margin-bottom:12px}@media (max-width:576px){.resource-view .resource .media{width:auto}}"] }), tslib_1.__param(0, Inject(KnoraApiConnectionToken)), tslib_1.__metadata("design:paramtypes", [KnoraApiConnection, ActivatedRoute, Router]) ], ResourceViewComponent); return ResourceViewComponent; }()); export { ResourceViewComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa25vcmEvdmlld2VyLyIsInNvdXJjZXMiOlsibGliL3ZpZXcvcmVzb3VyY2Utdmlldy9yZXNvdXJjZS12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWhKLE9BQU8sRUFBWSx1QkFBdUIsRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFFckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFTM0QsdUhBQXVIO0FBQ3ZIO0lBQUE7SUFRQSxDQUFDO0lBUFUsdUJBQUksR0FBYTtRQUNwQixTQUFTLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEdBQUcsbUJBQW1CO1FBQ2hFLFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsR0FBRyxpQkFBaUI7UUFDOUQsU0FBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsU0FBUyxHQUFHLHlCQUF5QjtRQUN0RSxTQUFTLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEdBQUcsd0JBQXdCO1FBQ3JFLFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsR0FBRyxrQkFBa0I7S0FDbEUsQ0FBQztJQUNOLHlCQUFDO0NBQUEsQUFSRCxJQVFDO1NBUlksa0JBQWtCO0FBWS9CLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FB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QUFFOzswREFBMkI7SUFJWTtRQUE5QyxTQUFTLENBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDOzBDQUFnQixtQkFBbUI7Z0VBQUM7SUF6QnpFLHFCQUFxQjtRQUxqQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLDh6RkFBNkM7O1NBRWhELENBQUM7UUFpRE8sbUJBQUEsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUE7aURBQTZCLGtCQUFrQjtZQUM3RCxjQUFjO1lBQ2IsTUFBTTtPQWxEcEIscUJBQXFCLENBd0xqQztJQUFELDRCQUFDO0NBQUEsQUF4TEQsSUF3TEM7U0F4TFkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEt1aU1lc3NhZ2VEYXRhIH0gZnJvbSAnQGtub3JhL2FjdGlvbic7XG5pbXBvcnQgeyBBcGlSZXNwb25zZUVycm9yLCBDb25zdGFudHMsIElIYXNQcm9wZXJ0eSwgS25vcmFBcGlDb25uZWN0aW9uLCBSZWFkUmVzb3VyY2UsIFJlYWRWYWx1ZSwgUmVzb3VyY2VQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICdAa25vcmEvYXBpJztcbmltcG9ydCB7IFByb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJ0Brbm9yYS9hcGkvc3JjL21vZGVscy92Mi9vbnRvbG9naWVzL3Byb3BlcnR5LWRlZmluaXRpb24nO1xuaW1wb3J0IHsgR3VpT3JkZXIsIEtub3JhQXBpQ29ubmVjdGlvblRva2VuLCBPbnRvbG9neUluZm9ybWF0aW9uIH0gZnJvbSAnQGtub3JhL2NvcmUnO1xuXG5pbXBvcnQgeyBTdGlsbEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVwcmVzZW50YXRpb24nO1xuXG4vLyBvYmplY3Qgb2YgcHJvcGVydHkgaW5mb3JtYXRpb24gZnJvbSBvbnRvbG9neSBjbGFzcywgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgdmFsdWVzXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBQcm9wZXJ0eSB7XG4gICAgZ3VpRGVmOiBJSGFzUHJvcGVydHk7XG4gICAgcHJvcERlZjogUHJvcGVydHlEZWZpbml0aW9uO1xuICAgIHZhbHVlczogUmVhZFZhbHVlW107XG59XG5cbi8vIGxpc3Qgb2YgZmlsZSB2YWx1ZSBpcmlzOyBUT0RPOiBub3QgeWV0IHdlbGwgZG9uZS4gSXQgc2hvdWxkIGJlIGRlZmluZWQgaW4gZ2xvYmFsIGtub3JhIGNvbnN0YW50cyBpbiBrbm9yYS1hcGktanMtbGliXG5leHBvcnQgY2xhc3MgRmlsZVJlcHJlc2VudGF0aW9uIHtcbiAgICBzdGF0aWMgbGlzdDogc3RyaW5nW10gPSBbXG4gICAgICAgIENvbnN0YW50cy5Lbm9yYUFwaVYyICsgQ29uc3RhbnRzLkRlbGltaXRlciArICdoYXNBdWRpb0ZpbGVWYWx1ZScsXG4gICAgICAgIENvbnN0YW50cy5Lbm9yYUFwaVYyICsgQ29uc3RhbnRzLkRlbGltaXRlciArICdoYXNERERGaWxlVmFsdWUnLFxuICAgICAgICBDb25zdGFudHMuS25vcmFBcGlWMiArIENvbnN0YW50cy5EZWxpbWl0ZXIgKyAnaGFzTW92aW5nSW1hZ2VGaWxlVmFsdWUnLFxuICAgICAgICBDb25zdGFudHMuS25vcmFBcGlWMiArIENvbnN0YW50cy5EZWxpbWl0ZXIgKyAnaGFzU3RpbGxJbWFnZUZpbGVWYWx1ZScsXG4gICAgICAgIENvbnN0YW50cy5Lbm9yYUFwaVYyICsgQ29uc3RhbnRzLkRlbGltaXRlciArICdoYXNUZXh0RmlsZVZhbHVlJ1xuICAgIF07XG59XG4vLyBpbXBvcnQgeyBSZWdpb24sIFN0aWxsSW1hZ2VSZXByZXNlbnRhdGlvbiB9IGZyb20gJy4uLy4uL3Jlc291cmNlJztcblxuZGVjbGFyZSBsZXQgcmVxdWlyZTogYW55O1xuY29uc3QganNvbmxkID0gcmVxdWlyZSgnanNvbmxkJyk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna3VpLXJlc291cmNlLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS12aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gICAgLyoqXG4gICAgICogUmVzb3VyY2UgaXJpXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2lyaV0gUmVzb3VyY2UgaXJpXG4gICAgICovXG4gICAgQElucHV0KCkgaXJpPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBhbGwgcHJvcGVydGllcywgZXZlbiB0aGV5IGRvbid0IGhhdmUgYSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFthbGxQcm9wc11cbiAgICAgKi9cbiAgICBASW5wdXQoKSBhbGxQcm9wcz86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgdG9vbGJhciB3aXRoIHByb2plY3QgaW5mbyBhbmQgc29tZSBhY3Rpb24gdG9vbHMgb24gdG9wIG9mIHByb3BlcnRpZXMgaWYgdHJ1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFt0b29sYmFyXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvb2xiYXI/OiBib29sZWFuID0gZmFsc2U7XG5cblxuICAgIC8vIFRPRE86IG5lZWRzIHByb2JhYmx5IGdlbmVyYWwgZmlsZVJlcHJlc2VudGF0aW9uIGNvbnRhaW5lciB0byB3YXRjaCBvblxuICAgIEBWaWV3Q2hpbGQoJ2t1aVN0aWxsSW1hZ2UnLCB7IHN0YXRpYzogZmFsc2UgfSkga3VpU3RpbGxJbWFnZTogU3RpbGxJbWFnZUNvbXBvbmVudDtcblxuICAgIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgICByZXNvdXJjZTogUmVhZFJlc291cmNlO1xuXG4gICAgLy8gY3VycmVudCByZXNvdXJjZSBkaXNwbGF5ZWQgaW4gY2FzZSBvZiBjb21wb3VuZCBvYmplY3RcbiAgICBhY3RpdmVSZXNvdXJjZTogUmVhZFJlc291cmNlO1xuXG4gICAgcHJvcEFycmF5OiBUZW1wUHJvcGVydHlbXSA9IFtdO1xuXG4gICAgLy8gZG9lcyB0aGUgcmVzb3VyY2UgaGFzIGEgZmlsZSByZXByZXNlbnRhdGlvbiAobWVkaWEgZmlsZSk/XG4gICAgZmlsZVJlcHJlc2VudGF0aW9uOiBSZWFkVmFsdWVbXTsgLy8gVE9ETzogZXhwYW5kIHdpdGggZm9sbG93aW5nIHR5cGVzOiB8IFJlYWRNb3ZpbmdJbWFnZUZpbGVWYWx1ZSB8IFJlYWRBdWRpb0ZpbGVWYWx1ZSB8IFJlYWREb2N1bWVudEZpbGVWYWx1ZSB8IFJlYWRUZXh0RmlsZVZhbHVlO1xuXG4gICAgQ29uc3RhbnRzID0gQ29uc3RhbnRzO1xuXG4gICAgLy8gVE9ETzogY2xlYW4gdXAgZm9sbG93aW5nIHVudXNlZCB2YXJpYWJsZXNcbiAgICBvbnRvbG9neUluZm86IE9udG9sb2d5SW5mb3JtYXRpb247XG4gICAgc2VxdWVuY2U6IFJlYWRSZXNvdXJjZVtdO1xuICAgIGd1aU9yZGVyOiBHdWlPcmRlcltdO1xuICAgIGVycm9yOiBLdWlNZXNzYWdlRGF0YTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEtub3JhQXBpQ29ubmVjdGlvblRva2VuKSBwcml2YXRlIGtub3JhQXBpQ29ubmVjdGlvbjogS25vcmFBcGlDb25uZWN0aW9uLFxuICAgICAgICBwcm90ZWN0ZWQgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlclxuICAgICkge1xuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIHRoaXMuZ2V0UmVzb3VyY2UodGhpcy5pcmkpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmdldFJlc291cmNlKHRoaXMuaXJpKTtcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmt1aVN0aWxsSW1hZ2UuaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSByZWFkIHJlc291cmNlIHNlcXVlbmNlIHdpdGggb250b2xvZ3kgaW5mb3JtYXRpb24gYW5kIGluY29taW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBSZXNvdXJjZSBpcmlcbiAgICAgKi9cbiAgICBnZXRSZXNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5rbm9yYUFwaUNvbm5lY3Rpb24udjIucmVzLmdldFJlc291cmNlKGlkKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAocmVzcG9uc2U6IFJlYWRSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBnZXQgbGlzdCBvZiBhbGwgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Byb3BzOiBJSGFzUHJvcGVydHlbXSA9IHRoaXMucmVzb3VyY2UuZW50aXR5SW5mby5jbGFzc2VzW3RoaXMucmVzb3VyY2UudHlwZV0ucHJvcGVydGllc0xpc3Q7XG5cbiAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYXNQcm9wIG9mIGhhc1Byb3BzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBoYXNQcm9wLnByb3BlcnR5SW5kZXg7XG5cblxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChGaWxlUmVwcmVzZW50YXRpb24ubGlzdC5pbmNsdWRlcyhpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5IHZhbHVlIGlzIG9mIHR5cGUgaGFzRmlsZVJlcHJlc2VudGF0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlUmVwcmVzZW50YXRpb24gPSB0aGlzLnJlc291cmNlLnByb3BlcnRpZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyIGFsbCBwcm9wZXJ0aWVzIGJ5IHR5cGUgUmVzb3VyY2VQcm9wZXJ0eURlZmluaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlLmVudGl0eUluZm8ucHJvcGVydGllc1tpbmRleF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlLmVudGl0eUluZm8ucHJvcGVydGllc1tpbmRleF0gaW5zdGFuY2VvZiBSZXNvdXJjZVByb3BlcnR5RGVmaW5pdGlvbikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcFByb3A6IFRlbXBQcm9wZXJ0eSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpRGVmOiBoYXNQcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wRGVmOiB0aGlzLnJlc291cmNlLmVudGl0eUluZm8ucHJvcGVydGllc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogdGhpcy5yZXNvdXJjZS5wcm9wZXJ0aWVzW2luZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BBcnJheS5wdXNoKHRlbXBQcm9wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBzb3J0IHByb3BlcnRpZXMgYnkgZ3VpT3JkZXJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BBcnJheS5zb3J0KChhLCBiKSA9PiAoYS5ndWlEZWYuZ3VpT3JkZXIgPiBiLmd1aURlZi5ndWlPcmRlcikgPyAxIDogLTEpO1xuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5wcm9wQXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogZ2V0IGluZm8gYWJvdXQgZmlsZSByZXByZXNlbnRhdGlvbiB0byBsb2FkIGNvcnJlc3BvbmRpbmcgbWVkaWEgdmlld1xuXG5cblxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnJvcjogQXBpUmVzcG9uc2VFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXQgaW5jb21pbmcgbGlua3MgZm9yIGEgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAgICovXG4gICAgLy8gZ2V0SW5jb21pbmdMaW5rcyhvZmZzZXQ6IG51bWJlciwgY2FsbGJhY2s/OiAobnVtYmVyT2ZSZXNvdXJjZXM6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQge1xuXG4gICAgLy8gICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAvLyAgICAgdGhpcy5faW5jb21pbmdTZXJ2aWNlLmdldEluY29taW5nTGlua3NGb3JSZXNvdXJjZSh0aGlzLnNlcXVlbmNlLnJlc291cmNlc1swXS5pZCwgb2Zmc2V0KS5zdWJzY3JpYmUoXG4gICAgLy8gICAgICAgICAoaW5jb21pbmdSZXNvdXJjZXM6IFJlYWRSZXNvdXJjZXNTZXF1ZW5jZSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIC8vIHVwZGF0ZSBvbnRvbG9neSBpbmZvcm1hdGlvblxuICAgIC8vICAgICAgICAgICAgIHRoaXMub250b2xvZ3lJbmZvLnVwZGF0ZU9udG9sb2d5SW5mb3JtYXRpb24oaW5jb21pbmdSZXNvdXJjZXMub250b2xvZ3lJbmZvcm1hdGlvbik7XG5cbiAgICAvLyAgICAgICAgICAgICAvLyBBcHBlbmQgZWxlbWVudHMgaW5jb21pbmdSZXNvdXJjZXMgdG8gdGhpcy5zZXF1ZW5jZS5pbmNvbWluZ0xpbmtzXG4gICAgLy8gICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5zZXF1ZW5jZS5yZXNvdXJjZXNbMF0uaW5jb21pbmdMaW5rcywgaW5jb21pbmdSZXNvdXJjZXMucmVzb3VyY2VzKTtcblxuICAgIC8vICAgICAgICAgICAgIC8vIGlmIGNhbGxiYWNrIGlzIGdpdmVuLCBleGVjdXRlIGZ1bmN0aW9uIHdpdGggdGhlIGFtb3VudCBvZiBpbmNvbWluZyByZXNvdXJjZXMgYXMgdGhlIHBhcmFtZXRlclxuICAgIC8vICAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWNrKGluY29taW5nUmVzb3VyY2VzLnJlc291cmNlcy5sZW5ndGgpO1xuICAgIC8vICAgICAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICk7XG4gICAgLy8gfVxuXG4gICAgb3BlbkxpbmsoaWQ6IHN0cmluZykge1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIC8vIHRoaXMucm91dGVDaGFuZ2VkLmVtaXQoaWQpO1xuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycvcmVzb3VyY2UvJyArIGVuY29kZVVSSUNvbXBvbmVudChpZCldKTtcblxuICAgIH1cblxuICAgIHJlZnJlc2hQcm9wZXJ0aWVzKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2Zyb20gc3RpbGwtaW1hZ2UtY29tcG9uZW50OiAnLCBpbmRleCk7XG5cbiAgICAgICAgLy8gVE9ETzogY29tbWVudGVkIGZvciBrbm9yYS1hcGktanMtbGliOlxuICAgICAgICAvLyB0aGlzLmN1cnJlbnRSZXNvdXJjZSA9IHRoaXMuc2VxdWVuY2UucmVzb3VyY2VzWzBdLmluY29taW5nRmlsZVJlcHJlc2VudGF0aW9uc1tpbmRleF07XG5cbiAgICB9XG5cblxuICAgIHRvZ2dsZVByb3BzKHNob3c6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5hbGxQcm9wcyA9ICF0aGlzLmFsbFByb3BzO1xuICAgIH1cbn1cbiJdfQ==