UNPKG

@dicdikshaorg/epub-player-v9

Version:

Contains Epub player library components powered by angular. These components are designed to be used in sunbird consumption platforms *(mobile app, web portal, offline desktop app)* to drive reusability, maintainability hence reducing the redundant develo

206 lines 25.8 kB
import { __awaiter } from "tslib"; import { ViewChild, Component, ElementRef, Input, EventEmitter, Output } from '@angular/core'; import Epub from 'epubjs'; import { ViwerService } from '../services/viewerService/viwer-service'; import { epubPlayerConstants as fromConst } from '../sunbird-epub.constant'; import { errorCode, errorMessage } from '@project-sunbird/sunbird-player-sdk-v9'; import { UtilService } from '../services/utilService/util.service'; const MAX_TIME_TO_LOAD_SPINE = 5 * 60 * 1000; // 5 minutes export class EpubViewerComponent { constructor(viwerService, utilService) { this.viwerService = viwerService; this.utilService = utilService; this.actions = new EventEmitter(); this.showFullScreen = false; this.viewerEvent = new EventEmitter(); } ngOnInit() { this.idForRendition = `${this.identifier}-content`; } ngOnChanges(changes) { var _a; if (this.rendition && !((_a = changes === null || changes === void 0 ? void 0 : changes.showFullScreen) === null || _a === void 0 ? void 0 : _a.firstChange)) { this.rendition.resize(); } } ngAfterViewInit() { return __awaiter(this, void 0, void 0, function* () { try { if (!this.viwerService.isAvailableLocally) { this.epubBlob = yield this.viwerService.isValidEpubSrc(this.epubSrc); this.eBook = Epub(this.epubBlob); } else if (this.viwerService.isAvailableLocally) { this.eBook = Epub(this.epubSrc); } this.rendition = this.eBook.renderTo(this.idForRendition, { flow: 'paginated', width: '100%', }); this.rendition.on('layout', (layout) => { var _a, _b; this.viwerService.totalNumberOfPages = (_b = (_a = this.eBook) === null || _a === void 0 ? void 0 : _a.navigation) === null || _b === void 0 ? void 0 : _b.length; if (this.eBook.navigation.length > 2) { this.rendition.spread('none'); this.rendition.flow('scrolled'); this.scrolled = true; } else { this.rendition.spread('auto'); this.scrolled = false; } }); this.rendition.on('displayError', (error) => { this.emitErrorEvent(); }); const spine = yield this.utilService.fulfillWithTimeLimit(MAX_TIME_TO_LOAD_SPINE, this.eBook.loaded.spine, null); if (spine) { this.displayEpub(); this.lastSection = spine.last(); this.viewerEvent.emit({ type: fromConst.EPUBLOADED, data: spine }); this.handleActions(spine); } else { this.emitErrorEvent(); } } catch (error) { this.emitErrorEvent(); } }); } displayEpub() { const { currentLocation } = this.config; if (!currentLocation) { this.rendition.display(); } this.eBook.ready.then(() => { return this.eBook.locations.generate(1000); }).then((locations) => { var _a, _b; const totalPages = (_b = (_a = this.eBook) === null || _a === void 0 ? void 0 : _a.spine) === null || _b === void 0 ? void 0 : _b.length; this.viwerService.totalNumberOfPages = totalPages ? (totalPages - 1) : 0; if (currentLocation) { const cfi = this.eBook.locations.cfiFromPercentage(Number(currentLocation)); this.rendition.display(cfi); } }); } handleActions(spine) { this.actions.subscribe((event) => { var _a, _b; const type = event.type; if ((_b = (_a = this.rendition) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.start) { const data = this.rendition.location.start; if (this.scrolled && data.href === this.lastSection.href) { this.viwerService.metaData.currentLocation = 0; this.emitEndEvent(); } else { if (this.rendition.location.atEnd || (spine.length === 1 && (this.rendition.location.end.displayed.page + 1 >= this.rendition.location.end.displayed.total))) { this.viwerService.metaData.currentLocation = 0; this.emitEndEvent(); } } if (type === fromConst.NEXT) { this.rendition.next().then(() => { this.saveCurrentLocation(); this.viewerEvent.emit({ type: fromConst.PAGECHANGE, data, interaction: fromConst.NEXT }); }); } else if (type === fromConst.PREVIOUS) { this.rendition.prev().then(() => { this.saveCurrentLocation(); this.viewerEvent.emit({ type: fromConst.PAGECHANGE, data, interaction: fromConst.PREVIOUS }); }); } if (type === fromConst.NAVIGATE_TO_PAGE) { this.rendition.display(event.data); this.viewerEvent.emit({ type: fromConst.NAVIGATE_TO_PAGE, event, interaction: fromConst.NAVIGATE_TO_PAGE }); } if (type === fromConst.INVALID_PAGE_ERROR) { this.viewerEvent.emit({ type: fromConst.INVALID_PAGE_ERROR, event, interaction: fromConst.INVALID_PAGE_ERROR }); } } }); } saveCurrentLocation() { var _a; const currentLocation = this.rendition.currentLocation(); if ((_a = currentLocation === null || currentLocation === void 0 ? void 0 : currentLocation.start) === null || _a === void 0 ? void 0 : _a.cfi) { // Get the Percentage (or location) from that CFI const currentPageLocation = this.eBook.locations.percentageFromCfi(currentLocation.start.cfi); this.viwerService.metaData.currentLocation = currentPageLocation; } } emitEndEvent() { this.viewerEvent.emit({ type: fromConst.END, data: { percentage: 100 } }); } emitErrorEvent() { this.viewerEvent.emit({ type: fromConst.ERROR, errorCode: errorCode.contentLoadFails, errorMessage: errorMessage.contentLoadFails }); } ngOnDestroy() { var _a; (_a = this.eBook) === null || _a === void 0 ? void 0 : _a.destroy(); } } /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ EpubViewerComponent.decorators = [ { type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'epub-viewer', template: "<div class=\"rendition\" [id]=\"idForRendition\" #epubViewer></div>", styles: [""] },] } ]; /** * @type {function(): !Array<(null|{ * type: ?, * decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>), * })>} * @nocollapse */ EpubViewerComponent.ctorParameters = () => [ { type: ViwerService }, { type: UtilService } ]; /** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ EpubViewerComponent.propDecorators = { epubViewer: [{ type: ViewChild, args: ['epubViewer', { static: true },] }], epubSrc: [{ type: Input }], config: [{ type: Input }], identifier: [{ type: Input }], actions: [{ type: Input }], showFullScreen: [{ type: Input }], viewerEvent: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXB1Yi12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VuYmlyZC1lcHViLXBsYXllci9zcmMvbGliL2VwdWItdmlld2VyL2VwdWItdmlld2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQzdELFlBQVksRUFBRSxNQUFNLEVBQStDLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUMxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixJQUFJLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRW5FLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZO0FBTzFELE1BQU0sT0FBTyxtQkFBbUI7SUFlOUIsWUFDUyxZQUEwQixFQUN6QixXQUF3QjtRQUR6QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVJ6QixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsQyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN0QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFPNUMsQ0FBQztJQUNMLFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsVUFBVSxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7O1FBQ2hDLElBQUksSUFB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LFlBQVksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLG1CQUFtQixDQUFDO1NBQ2xFO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQixJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUc7WUFDbkIsSUFBSSxFQUFFO2dCQUNKLFVBQVUsRUFBRSxHQUFHO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQixJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUs7WUFDckIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0I7WUFDckMsWUFBWSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0I7U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7O1FBQ1QsTUFBQSxJQUFJLENBQUMsS0FBSywwQ0FBRSxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDOzs7O1lBcExGLFNBQVMsU0FBQztnQkFDVCw4Q0FBOEM7Z0JBQzlDLFFBQVEsRUFBRSxhQUFhO2dCQUN2QiwrRUFBMkM7O2FBRTVDOzs7Ozs7Ozs7O1lBWFEsWUFBWTtZQUdaLFdBQVc7Ozs7eUJBY2pCLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3NCQUN4QyxLQUFLO3FCQUNMLEtBQUs7eUJBQ0wsS0FBSztzQkFDTCxLQUFLOzZCQUNMLEtBQUs7MEJBQ0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgRXB1YiBmcm9tICdlcHVianMnO1xyXG5pbXBvcnQgeyBWaXdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy92aWV3ZXJTZXJ2aWNlL3Zpd2VyLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBlcHViUGxheWVyQ29uc3RhbnRzIGFzIGZyb21Db25zdCB9IGZyb20gJy4uL3N1bmJpcmQtZXB1Yi5jb25zdGFudCc7XHJcbmltcG9ydCB7IGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHByb2plY3Qtc3VuYmlyZC9zdW5iaXJkLXBsYXllci1zZGstdjknO1xyXG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3V0aWxTZXJ2aWNlL3V0aWwuc2VydmljZSc7XHJcblxyXG5jb25zdCBNQVhfVElNRV9UT19MT0FEX1NQSU5FID0gNSAqIDYwICogMTAwMDsgLy8gNSBtaW51dGVzXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ2VwdWItdmlld2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZXB1Yi12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VwdWItdmlld2VyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXB1YlZpZXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIGVCb29rOiBhbnk7XHJcbiAgcmVuZGl0aW9uOiBhbnk7XHJcbiAgbGFzdFNlY3Rpb246IGFueTtcclxuICBzY3JvbGxlZDogYm9vbGVhbjtcclxuICBAVmlld0NoaWxkKCdlcHViVmlld2VyJywgeyBzdGF0aWM6IHRydWUgfSkgZXB1YlZpZXdlcjogRWxlbWVudFJlZjtcclxuICBASW5wdXQoKSBlcHViU3JjOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29uZmlnOiBhbnk7XHJcbiAgQElucHV0KCkgaWRlbnRpZmllcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBASW5wdXQoKSBzaG93RnVsbFNjcmVlbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSB2aWV3ZXJFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIGlkRm9yUmVuZGl0aW9uOiBhbnk7XHJcbiAgZXB1YkJsb2I6IG9iamVjdDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdml3ZXJTZXJ2aWNlOiBWaXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZVxyXG4gICkgeyB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlkRm9yUmVuZGl0aW9uID0gYCR7dGhpcy5pZGVudGlmaWVyfS1jb250ZW50YDtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICh0aGlzLnJlbmRpdGlvbiAmJiAhY2hhbmdlcz8uc2hvd0Z1bGxTY3JlZW4/LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMucmVuZGl0aW9uLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnZpd2VyU2VydmljZS5pc0F2YWlsYWJsZUxvY2FsbHkpIHtcclxuICAgICAgICB0aGlzLmVwdWJCbG9iID0gYXdhaXQgdGhpcy52aXdlclNlcnZpY2UuaXNWYWxpZEVwdWJTcmModGhpcy5lcHViU3JjKTtcclxuICAgICAgICB0aGlzLmVCb29rID0gRXB1Yih0aGlzLmVwdWJCbG9iKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnZpd2VyU2VydmljZS5pc0F2YWlsYWJsZUxvY2FsbHkpIHtcclxuICAgICAgICB0aGlzLmVCb29rID0gRXB1Yih0aGlzLmVwdWJTcmMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGl0aW9uID0gdGhpcy5lQm9vay5yZW5kZXJUbyh0aGlzLmlkRm9yUmVuZGl0aW9uLCB7XHJcbiAgICAgICAgZmxvdzogJ3BhZ2luYXRlZCcsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVuZGl0aW9uLm9uKCdsYXlvdXQnLCAobGF5b3V0KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aXdlclNlcnZpY2UudG90YWxOdW1iZXJPZlBhZ2VzID0gdGhpcy5lQm9vaz8ubmF2aWdhdGlvbj8ubGVuZ3RoO1xyXG4gICAgICAgIGlmICh0aGlzLmVCb29rLm5hdmlnYXRpb24ubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgdGhpcy5yZW5kaXRpb24uc3ByZWFkKCdub25lJyk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRpdGlvbi5mbG93KCdzY3JvbGxlZCcpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVuZGl0aW9uLnNwcmVhZCgnYXV0bycpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlbmRpdGlvbi5vbignZGlzcGxheUVycm9yJywgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbWl0RXJyb3JFdmVudCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHNwaW5lID0gYXdhaXQgdGhpcy51dGlsU2VydmljZS5mdWxmaWxsV2l0aFRpbWVMaW1pdChNQVhfVElNRV9UT19MT0FEX1NQSU5FLCB0aGlzLmVCb29rLmxvYWRlZC5zcGluZSwgbnVsbCk7XHJcblxyXG4gICAgICBpZiAoc3BpbmUpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlFcHViKCk7XHJcbiAgICAgICAgdGhpcy5sYXN0U2VjdGlvbiA9IHNwaW5lLmxhc3QoKTtcclxuICAgICAgICB0aGlzLnZpZXdlckV2ZW50LmVtaXQoe1xyXG4gICAgICAgICAgdHlwZTogZnJvbUNvbnN0LkVQVUJMT0FERUQsXHJcbiAgICAgICAgICBkYXRhOiBzcGluZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9ucyhzcGluZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbWl0RXJyb3JFdmVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLmVtaXRFcnJvckV2ZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5RXB1YigpIHtcclxuICAgIGNvbnN0IHsgY3VycmVudExvY2F0aW9uIH0gPSB0aGlzLmNvbmZpZztcclxuICAgIGlmICghY3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVuZGl0aW9uLmRpc3BsYXkoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZUJvb2sucmVhZHkudGhlbigoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmVCb29rLmxvY2F0aW9ucy5nZW5lcmF0ZSgxMDAwKTtcclxuICAgIH0pLnRoZW4oKGxvY2F0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5lQm9vaz8uc3BpbmU/Lmxlbmd0aDtcclxuICAgICAgdGhpcy52aXdlclNlcnZpY2UudG90YWxOdW1iZXJPZlBhZ2VzID0gdG90YWxQYWdlcyA/ICh0b3RhbFBhZ2VzIC0gMSkgOiAwO1xyXG4gICAgICBpZiAoY3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgY2ZpID0gdGhpcy5lQm9vay5sb2NhdGlvbnMuY2ZpRnJvbVBlcmNlbnRhZ2UoTnVtYmVyKGN1cnJlbnRMb2NhdGlvbikpO1xyXG4gICAgICAgIHRoaXMucmVuZGl0aW9uLmRpc3BsYXkoY2ZpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVBY3Rpb25zKHNwaW5lKSB7XHJcbiAgICB0aGlzLmFjdGlvbnMuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gZXZlbnQudHlwZTtcclxuICAgICAgaWYgKHRoaXMucmVuZGl0aW9uPy5sb2NhdGlvbj8uc3RhcnQpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZW5kaXRpb24ubG9jYXRpb24uc3RhcnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsZWQgJiYgZGF0YS5ocmVmID09PSB0aGlzLmxhc3RTZWN0aW9uLmhyZWYpIHtcclxuICAgICAgICAgIHRoaXMudml3ZXJTZXJ2aWNlLm1ldGFEYXRhLmN1cnJlbnRMb2NhdGlvbiA9IDA7XHJcbiAgICAgICAgICB0aGlzLmVtaXRFbmRFdmVudCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZW5kaXRpb24ubG9jYXRpb24uYXRFbmQgfHwgKHNwaW5lLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAodGhpcy5yZW5kaXRpb24ubG9jYXRpb24uZW5kLmRpc3BsYXllZC5wYWdlICsgMSA+PSB0aGlzLnJlbmRpdGlvbi5sb2NhdGlvbi5lbmQuZGlzcGxheWVkLnRvdGFsKSkpIHtcclxuICAgICAgICAgICAgdGhpcy52aXdlclNlcnZpY2UubWV0YURhdGEuY3VycmVudExvY2F0aW9uID0gMDtcclxuICAgICAgICAgICAgdGhpcy5lbWl0RW5kRXZlbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGUgPT09IGZyb21Db25zdC5ORVhUKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRpdGlvbi5uZXh0KCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRMb2NhdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlckV2ZW50LmVtaXQoe1xyXG4gICAgICAgICAgICAgIHR5cGU6IGZyb21Db25zdC5QQUdFQ0hBTkdFLFxyXG4gICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgaW50ZXJhY3Rpb246IGZyb21Db25zdC5ORVhUXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBmcm9tQ29uc3QuUFJFVklPVVMpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGl0aW9uLnByZXYoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudExvY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyRXZlbnQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgdHlwZTogZnJvbUNvbnN0LlBBR0VDSEFOR0UsXHJcbiAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICBpbnRlcmFjdGlvbjogZnJvbUNvbnN0LlBSRVZJT1VTXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlID09PSBmcm9tQ29uc3QuTkFWSUdBVEVfVE9fUEFHRSkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kaXRpb24uZGlzcGxheShldmVudC5kYXRhKTtcclxuICAgICAgICAgIHRoaXMudmlld2VyRXZlbnQuZW1pdCh7XHJcbiAgICAgICAgICAgIHR5cGU6IGZyb21Db25zdC5OQVZJR0FURV9UT19QQUdFLFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgaW50ZXJhY3Rpb246IGZyb21Db25zdC5OQVZJR0FURV9UT19QQUdFXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBmcm9tQ29uc3QuSU5WQUxJRF9QQUdFX0VSUk9SKSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdlckV2ZW50LmVtaXQoe1xyXG4gICAgICAgICAgICB0eXBlOiBmcm9tQ29uc3QuSU5WQUxJRF9QQUdFX0VSUk9SLFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgaW50ZXJhY3Rpb246IGZyb21Db25zdC5JTlZBTElEX1BBR0VfRVJST1JcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlQ3VycmVudExvY2F0aW9uKCkge1xyXG4gICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gdGhpcy5yZW5kaXRpb24uY3VycmVudExvY2F0aW9uKCk7XHJcbiAgICBpZiAoY3VycmVudExvY2F0aW9uPy5zdGFydD8uY2ZpKSB7XHJcbiAgICAgIC8vIEdldCB0aGUgUGVyY2VudGFnZSAob3IgbG9jYXRpb24pIGZyb20gdGhhdCBDRklcclxuICAgICAgY29uc3QgY3VycmVudFBhZ2VMb2NhdGlvbiA9IHRoaXMuZUJvb2subG9jYXRpb25zLnBlcmNlbnRhZ2VGcm9tQ2ZpKGN1cnJlbnRMb2NhdGlvbi5zdGFydC5jZmkpO1xyXG4gICAgICB0aGlzLnZpd2VyU2VydmljZS5tZXRhRGF0YS5jdXJyZW50TG9jYXRpb24gPSBjdXJyZW50UGFnZUxvY2F0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW1pdEVuZEV2ZW50KCkge1xyXG4gICAgdGhpcy52aWV3ZXJFdmVudC5lbWl0KHtcclxuICAgICAgdHlwZTogZnJvbUNvbnN0LkVORCxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHBlcmNlbnRhZ2U6IDEwMFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGVtaXRFcnJvckV2ZW50KCkge1xyXG4gICAgdGhpcy52aWV3ZXJFdmVudC5lbWl0KHtcclxuICAgICAgdHlwZTogZnJvbUNvbnN0LkVSUk9SLFxyXG4gICAgICBlcnJvckNvZGU6IGVycm9yQ29kZS5jb250ZW50TG9hZEZhaWxzLFxyXG4gICAgICBlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZS5jb250ZW50TG9hZEZhaWxzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5lQm9vaz8uZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG4iXX0=