UNPKG

@ngx-gallery/core

Version:

Angular gallery directive that hooks the lightbox with the images automatically.

479 lines 29.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { BehaviorSubject, Subject, of, EMPTY } from 'rxjs'; import { delay, filter, switchMap, tap } from 'rxjs/operators'; import { defaultState } from '../utils/gallery.default'; import { GalleryAction } from '../models/constants'; import { IframeItem, ImageItem, VideoItem, YoutubeItem } from '../components/templates/items.model'; /** @type {?} */ var filterActions = function (actions) { return filter(function (state) { return actions.indexOf(state.action) > -1; }); }; var ɵ0 = filterActions; var GalleryRef = /** @class */ (function () { function GalleryRef(config, deleteInstance) { this.deleteInstance = deleteInstance; /** * Stream that emits on item click */ this.itemClick = new Subject(); /** * Stream that emits on thumbnail click */ this.thumbClick = new Subject(); /** * Stream that emits on an error occurs */ this.error = new Subject(); this._state = new BehaviorSubject(defaultState); this._config = new BehaviorSubject(config); this.state = this._state.asObservable(); this.config = this._config.asObservable(); } Object.defineProperty(GalleryRef.prototype, "initialized", { /** Stream that emits when gallery is initialized/reset */ get: /** * Stream that emits when gallery is initialized/reset * @return {?} */ function () { return this.state.pipe(filterActions([GalleryAction.INITIALIZED])); }, enumerable: true, configurable: true }); Object.defineProperty(GalleryRef.prototype, "itemsChanged", { /** Stream that emits when items is changed (items loaded, item added, item removed) */ get: /** * Stream that emits when items is changed (items loaded, item added, item removed) * @return {?} */ function () { return this.state.pipe(filterActions([GalleryAction.ITEMS_CHANGED])); }, enumerable: true, configurable: true }); Object.defineProperty(GalleryRef.prototype, "indexChanged", { /** Stream that emits when current item is changed */ get: /** * Stream that emits when current item is changed * @return {?} */ function () { return this.state.pipe(filterActions([GalleryAction.INDEX_CHANGED])); }, enumerable: true, configurable: true }); Object.defineProperty(GalleryRef.prototype, "playingChanged", { /** Stream that emits when the player should start or stop */ get: /** * Stream that emits when the player should start or stop * @return {?} */ function () { return this.state.pipe(filterActions([GalleryAction.PLAY, GalleryAction.STOP])); }, enumerable: true, configurable: true }); Object.defineProperty(GalleryRef.prototype, "playerActions", { /** Stream that emits when the player should start or stop */ get: /** * Stream that emits when the player should start or stop * @private * @return {?} */ function () { return this.state.pipe(filterActions([GalleryAction.PLAY, GalleryAction.STOP, GalleryAction.INDEX_CHANGED])); }, enumerable: true, configurable: true }); /** * Activate player actions listener */ /** * Activate player actions listener * @return {?} */ GalleryRef.prototype.activatePlayer = /** * Activate player actions listener * @return {?} */ function () { var _this = this; return this.playerActions.pipe(switchMap(function (e) { return e.isPlaying ? of({}).pipe(delay(_this._config.value.playerInterval), tap(function () { return _this.next(); })) : EMPTY; })); }; /** * Set gallery state * @param state */ /** * Set gallery state * @private * @param {?} state * @return {?} */ GalleryRef.prototype.setState = /** * Set gallery state * @private * @param {?} state * @return {?} */ function (state) { this._state.next(tslib_1.__assign({}, this._state.value, state)); }; /** * Set gallery config * @param config */ /** * Set gallery config * @param {?} config * @return {?} */ GalleryRef.prototype.setConfig = /** * Set gallery config * @param {?} config * @return {?} */ function (config) { this._config.next(tslib_1.__assign({}, this._config.value, config)); }; /** Add gallery item * @param item - Gallery item object * @param active - Set the new item as current slide */ /** * Add gallery item * @param {?} item - Gallery item object * @param {?=} active - Set the new item as current slide * @return {?} */ GalleryRef.prototype.add = /** * Add gallery item * @param {?} item - Gallery item object * @param {?=} active - Set the new item as current slide * @return {?} */ function (item, active) { /** @type {?} */ var items = tslib_1.__spread(this._state.value.items, [item]); this.setState({ action: GalleryAction.ITEMS_CHANGED, items: items, hasNext: items.length > 1, currIndex: active ? items.length - 1 : this._state.value.currIndex }); }; /** * Add image item * @param data * @param active */ /** * Add image item * @param {?} data * @param {?=} active * @return {?} */ GalleryRef.prototype.addImage = /** * Add image item * @param {?} data * @param {?=} active * @return {?} */ function (data, active) { this.add(new ImageItem(data), active); }; /** * Add video item * @param data * @param active */ /** * Add video item * @param {?} data * @param {?=} active * @return {?} */ GalleryRef.prototype.addVideo = /** * Add video item * @param {?} data * @param {?=} active * @return {?} */ function (data, active) { this.add(new VideoItem(data), active); }; /** * Add iframe item * @param data * @param active */ /** * Add iframe item * @param {?} data * @param {?=} active * @return {?} */ GalleryRef.prototype.addIframe = /** * Add iframe item * @param {?} data * @param {?=} active * @return {?} */ function (data, active) { this.add(new IframeItem(data), active); }; /** * Add youtube item * @param data * @param active */ /** * Add youtube item * @param {?} data * @param {?=} active * @return {?} */ GalleryRef.prototype.addYoutube = /** * Add youtube item * @param {?} data * @param {?=} active * @return {?} */ function (data, active) { this.add(new YoutubeItem(data), active); }; /** Remove gallery item * @param i - Item index */ /** * Remove gallery item * @param {?} i - Item index * @return {?} */ GalleryRef.prototype.remove = /** * Remove gallery item * @param {?} i - Item index * @return {?} */ function (i) { /** @type {?} */ var items = tslib_1.__spread(this._state.value.items.slice(0, i), this._state.value.items.slice(i + 1, this._state.value.items.length)); this.setState({ action: GalleryAction.ITEMS_CHANGED, items: items, hasNext: items.length > 1, hasPrev: i > 0 }); }; /** * Load items and reset the state * @param items - Gallery images data */ /** * Load items and reset the state * @param {?} items - Gallery images data * @return {?} */ GalleryRef.prototype.load = /** * Load items and reset the state * @param {?} items - Gallery images data * @return {?} */ function (items) { if (items) { this.setState({ action: GalleryAction.ITEMS_CHANGED, items: items, hasNext: items.length > 1, hasPrev: false }); } }; /** * Set active item * @param i - Active Index */ /** * Set active item * @param {?} i - Active Index * @return {?} */ GalleryRef.prototype.set = /** * Set active item * @param {?} i - Active Index * @return {?} */ function (i) { if (i !== this._state.value.currIndex) { this.setState({ action: GalleryAction.INDEX_CHANGED, currIndex: i, hasNext: i < this._state.value.items.length - 1, hasPrev: i > 0 }); } }; /** * Next item */ /** * Next item * @return {?} */ GalleryRef.prototype.next = /** * Next item * @return {?} */ function () { if (this._state.value.hasNext) { this.set(this._state.value.currIndex + 1); } else if (this._config.value.loop) { this.set(0); } }; /** * Prev item */ /** * Prev item * @return {?} */ GalleryRef.prototype.prev = /** * Prev item * @return {?} */ function () { if (this._state.value.hasPrev) { this.set(this._state.value.currIndex - 1); } else if (this._config.value.loop) { this.set(this._state.value.items.length - 1); } }; /** * Start gallery player * @param interval */ /** * Start gallery player * @param {?=} interval * @return {?} */ GalleryRef.prototype.play = /** * Start gallery player * @param {?=} interval * @return {?} */ function (interval) { if (interval) { this.setConfig({ playerInterval: interval }); } this.setState({ action: GalleryAction.PLAY, isPlaying: true }); }; /** * Stop gallery player */ /** * Stop gallery player * @return {?} */ GalleryRef.prototype.stop = /** * Stop gallery player * @return {?} */ function () { this.setState({ action: GalleryAction.STOP, isPlaying: false }); }; /** * Reset gallery to initial state */ /** * Reset gallery to initial state * @return {?} */ GalleryRef.prototype.reset = /** * Reset gallery to initial state * @return {?} */ function () { this.setState(defaultState); }; /** * Destroy gallery */ /** * Destroy gallery * @return {?} */ GalleryRef.prototype.destroy = /** * Destroy gallery * @return {?} */ function () { this._state.complete(); this._config.complete(); this.itemClick.complete(); this.thumbClick.complete(); this.deleteInstance(); }; return GalleryRef; }()); export { GalleryRef }; if (false) { /** * Stream that emits gallery state * @type {?} * @private */ GalleryRef.prototype._state; /** * Stream that emits gallery config * @type {?} * @private */ GalleryRef.prototype._config; /** * Stream that emits on item click * @type {?} */ GalleryRef.prototype.itemClick; /** * Stream that emits on thumbnail click * @type {?} */ GalleryRef.prototype.thumbClick; /** * Stream that emits on an error occurs * @type {?} */ GalleryRef.prototype.error; /** * Stream that emits gallery state * @type {?} */ GalleryRef.prototype.state; /** * Stream that emits gallery config * @type {?} */ GalleryRef.prototype.config; /** * @type {?} * @private */ GalleryRef.prototype.deleteInstance; } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS1yZWYuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWdhbGxlcnkvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9nYWxsZXJ5LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztJQUU5RixhQUFhLEdBQUcsVUFBQyxPQUFpQjtJQUN0QyxPQUFPLE1BQU0sQ0FBQyxVQUFDLEtBQW1CLElBQUssT0FBQSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBbEMsQ0FBa0MsQ0FBQyxDQUFDO0FBQzdFLENBQUM7O0FBRUQ7SUFrREUsb0JBQVksTUFBcUIsRUFBVSxjQUF3QjtRQUF4QixtQkFBYyxHQUFkLGNBQWMsQ0FBVTs7OztRQXpDMUQsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7Ozs7UUFHbEMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7Ozs7UUFHbkMsVUFBSyxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBb0MzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFlLFlBQVksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLE1BQU0sQ0FBQyxDQUFD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QztJQUNoRSxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0gsMEJBQUs7Ozs7SUFBTDtRQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNILDRCQUFPOzs7O0lBQVA7UUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUgsaUJBQUM7QUFBRCxDQUFDLEFBbFBELElBa1BDOzs7Ozs7OztJQS9PQyw0QkFBdUQ7Ozs7OztJQUd2RCw2QkFBeUQ7Ozs7O0lBR3pELCtCQUEyQzs7Ozs7SUFHM0MsZ0NBQTRDOzs7OztJQUc1QywyQkFBNkM7Ozs7O0lBSzdDLDJCQUF5Qzs7Ozs7SUFHekMsNEJBQTJDOzs7OztJQTJCUixvQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBFTVBUWX0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRlZmF1bHRTdGF0ZSB9IGZyb20gJy4uL3V0aWxzL2dhbGxlcnkuZGVmYXVsdCc7XG5pbXBvcnQgeyBHYWxsZXJ5RXJyb3IsIEdhbGxlcnlJdGVtLCBHYWxsZXJ5U3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvZ2FsbGVyeS5tb2RlbCc7XG5pbXBvcnQgeyBHYWxsZXJ5Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBHYWxsZXJ5QWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJZnJhbWVJdGVtLCBJbWFnZUl0ZW0sIFZpZGVvSXRlbSwgWW91dHViZUl0ZW0gfSBmcm9tICcuLi9jb21wb25lbnRzL3RlbXBsYXRlcy9pdGVtcy5tb2RlbCc7XG5cbmNvbnN0IGZpbHRlckFjdGlvbnMgPSAoYWN0aW9uczogc3RyaW5nW10pID0+IHtcbiAgcmV0dXJuIGZpbHRlcigoc3RhdGU6IEdhbGxlcnlTdGF0ZSkgPT4gYWN0aW9ucy5pbmRleE9mKHN0YXRlLmFjdGlvbikgPiAtMSk7XG59O1xuXG5leHBvcnQgY2xhc3MgR2FsbGVyeVJlZiB7XG5cbiAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIGdhbGxlcnkgc3RhdGUgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGU6IEJlaGF2aW9yU3ViamVjdDxHYWxsZXJ5U3RhdGU+O1xuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyBnYWxsZXJ5IGNvbmZpZyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc6IEJlaGF2aW9yU3ViamVjdDxHYWxsZXJ5Q29uZmlnPjtcblxuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgb24gaXRlbSBjbGljayAqL1xuICByZWFkb25seSBpdGVtQ2xpY2sgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIG9uIHRodW1ibmFpbCBjbGljayAqL1xuICByZWFkb25seSB0aHVtYkNsaWNrID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyBvbiBhbiBlcnJvciBvY2N1cnMgKi9cbiAgcmVhZG9ubHkgZXJyb3IgPSBuZXcgU3ViamVjdDxHYWxsZXJ5RXJyb3I+KCk7XG5cbiAgLyoqIEdhbGxlcnkgRXZlbnRzICovXG5cbiAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIGdhbGxlcnkgc3RhdGUgKi9cbiAgcmVhZG9ubHkgc3RhdGU6IE9ic2VydmFibGU8R2FsbGVyeVN0YXRlPjtcblxuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgZ2FsbGVyeSBjb25maWcgKi9cbiAgcmVhZG9ubHkgY29uZmlnOiBPYnNlcnZhYmxlPEdhbGxlcnlDb25maWc+O1xuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIGdhbGxlcnkgaXMgaW5pdGlhbGl6ZWQvcmVzZXQgKi9cbiAgZ2V0IGluaXRpYWxpemVkKCk6IE9ic2VydmFibGU8R2FsbGVyeVN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucGlwZShmaWx0ZXJBY3Rpb25zKFtHYWxsZXJ5QWN0aW9uLklOSVRJQUxJWkVEXSkpO1xuICB9XG5cbiAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gaXRlbXMgaXMgY2hhbmdlZCAoaXRlbXMgbG9hZGVkLCBpdGVtIGFkZGVkLCBpdGVtIHJlbW92ZWQpICovXG4gIGdldCBpdGVtc0NoYW5nZWQoKTogT2JzZXJ2YWJsZTxHYWxsZXJ5U3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5waXBlKGZpbHRlckFjdGlvbnMoW0dhbGxlcnlBY3Rpb24uSVRFTVNfQ0hBTkdFRF0pKTtcbiAgfVxuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIGN1cnJlbnQgaXRlbSBpcyBjaGFuZ2VkICovXG4gIGdldCBpbmRleENoYW5nZWQoKTogT2JzZXJ2YWJsZTxHYWxsZXJ5U3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5waXBlKGZpbHRlckFjdGlvbnMoW0dhbGxlcnlBY3Rpb24uSU5ERVhfQ0hBTkdFRF0pKTtcbiAgfVxuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0IG9yIHN0b3AgKi9cbiAgZ2V0IHBsYXlpbmdDaGFuZ2VkKCk6IE9ic2VydmFibGU8R2FsbGVyeVN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucGlwZShmaWx0ZXJBY3Rpb25zKFtHYWxsZXJ5QWN0aW9uLlBMQVksIEdhbGxlcnlBY3Rpb24uU1RPUF0pKTtcbiAgfVxuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0IG9yIHN0b3AgKi9cbiAgcHJpdmF0ZSBnZXQgcGxheWVyQWN0aW9ucygpOiBPYnNlcnZhYmxlPEdhbGxlcnlTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnBpcGUoZmlsdGVyQWN0aW9ucyhbR2FsbGVyeUFjdGlvbi5QTEFZLCBHYWxsZXJ5QWN0aW9uLlNUT1AsIEdhbGxlcnlBY3Rpb24uSU5ERVhfQ0hBTkdFRF0pKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogR2FsbGVyeUNvbmZpZywgcHJpdmF0ZSBkZWxldGVJbnN0YW5jZTogRnVuY3Rpb24pIHtcbiAgICB0aGlzLl9zdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R2FsbGVyeVN0YXRlPihkZWZhdWx0U3RhdGUpO1xuICAgIHRoaXMuX2NvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R2FsbGVyeUNvbmZpZz4oY29uZmlnKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLl9jb25maWcuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUgcGxheWVyIGFjdGlvbnMgbGlzdGVuZXJcbiAgICovXG4gIGFjdGl2YXRlUGxheWVyKCk6IE9ic2VydmFibGU8R2FsbGVyeVN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucGxheWVyQWN0aW9ucy5waXBlKFxuICAgICAgc3dpdGNoTWFwKChlOiBHYWxsZXJ5U3RhdGUpID0+XG4gICAgICAgIGUuaXNQbGF5aW5nID8gb2Yoe30pLnBpcGUoXG4gICAgICAgICAgZGVsYXkodGhpcy5fY29uZmlnLnZhbHVlLnBsYXllckludGVydmFsKSxcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5uZXh0KCkpXG4gICAgICAgICkgOiBFTVBUWVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGdhbGxlcnkgc3RhdGVcbiAgICogQHBhcmFtIHN0YXRlXG4gICAqL1xuICBwcml2YXRlIHNldFN0YXRlKHN0YXRlOiBHYWxsZXJ5U3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHsuLi50aGlzLl9zdGF0ZS52YWx1ZSwgLi4uc3RhdGV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZ2FsbGVyeSBjb25maWdcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgc2V0Q29uZmlnKGNvbmZpZzogR2FsbGVyeUNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZy5uZXh0KHsuLi50aGlzLl9jb25maWcudmFsdWUsIC4uLmNvbmZpZ30pO1xuICB9XG5cbiAgLyoqIEFkZCBnYWxsZXJ5IGl0ZW1cbiAgICogQHBhcmFtIGl0ZW0gLSBHYWxsZXJ5IGl0ZW0gb2JqZWN0XG4gICAqIEBwYXJhbSBhY3RpdmUgLSBTZXQgdGhlIG5ldyBpdGVtIGFzIGN1cnJlbnQgc2xpZGVcbiAgICovXG4gIGFkZChpdGVtOiBHYWxsZXJ5SXRlbSwgYWN0aXZlPzogYm9vbGVhbikge1xuXG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5fc3RhdGUudmFsdWUuaXRlbXMsIGl0ZW1dO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYWN0aW9uOiBHYWxsZXJ5QWN0aW9uLklURU1TX0NIQU5HRUQsXG4gICAgICBpdGVtczogaXRlbXMsXG4gICAgICBoYXNOZXh0OiBpdGVtcy5sZW5ndGggPiAxLFxuICAgICAgY3VyckluZGV4OiBhY3RpdmUgPyBpdGVtcy5sZW5ndGggLSAxIDogdGhpcy5fc3RhdGUudmFsdWUuY3VyckluZGV4XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGltYWdlIGl0ZW1cbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGFjdGl2ZVxuICAgKi9cbiAgYWRkSW1hZ2UoZGF0YTogYW55LCBhY3RpdmU/OiBib29sZWFuKSB7XG4gICAgdGhpcy5hZGQobmV3IEltYWdlSXRlbShkYXRhKSwgYWN0aXZlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdmlkZW8gaXRlbVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gYWN0aXZlXG4gICAqL1xuICBhZGRWaWRlbyhkYXRhOiBhbnksIGFjdGl2ZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFkZChuZXcgVmlkZW9JdGVtKGRhdGEpLCBhY3RpdmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBpZnJhbWUgaXRlbVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gYWN0aXZlXG4gICAqL1xuICBhZGRJZnJhbWUoZGF0YTogYW55LCBhY3RpdmU/OiBib29sZWFuKSB7XG4gICAgdGhpcy5hZGQobmV3IElmcmFtZUl0ZW0oZGF0YSksIGFjdGl2ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHlvdXR1YmUgaXRlbVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gYWN0aXZlXG4gICAqL1xuICBhZGRZb3V0dWJlKGRhdGE6IGFueSwgYWN0aXZlPzogYm9vbGVhbikge1xuICAgIHRoaXMuYWRkKG5ldyBZb3V0dWJlSXRlbShkYXRhKSwgYWN0aXZlKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgZ2FsbGVyeSBpdGVtXG4gICAqIEBwYXJhbSBpIC0gSXRlbSBpbmRleFxuICAgKi9cbiAgcmVtb3ZlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IGl0ZW1zID0gW1xuICAgICAgLi4udGhpcy5fc3RhdGUudmFsdWUuaXRlbXMuc2xpY2UoMCwgaSksXG4gICAgICAuLi50aGlzLl9zdGF0ZS52YWx1ZS5pdGVtcy5zbGljZShpICsgMSwgdGhpcy5fc3RhdGUudmFsdWUuaXRlbXMubGVuZ3RoKVxuICAgIF07XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY3Rpb246IEdhbGxlcnlBY3Rpb24uSVRFTVNfQ0hBTkdFRCxcbiAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgIGhhc05leHQ6IGl0ZW1zLmxlbmd0aCA+IDEsXG4gICAgICBoYXNQcmV2OiBpID4gMFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgaXRlbXMgYW5kIHJlc2V0IHRoZSBzdGF0ZVxuICAgKiBAcGFyYW0gaXRlbXMgLSBHYWxsZXJ5IGltYWdlcyBkYXRhXG4gICAqL1xuICBsb2FkKGl0ZW1zOiBHYWxsZXJ5SXRlbVtdKSB7XG4gICAgaWYgKGl0ZW1zKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aW9uOiBHYWxsZXJ5QWN0aW9uLklURU1TX0NIQU5HRUQsXG4gICAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgICAgaGFzTmV4dDogaXRlbXMubGVuZ3RoID4gMSxcbiAgICAgICAgaGFzUHJldjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYWN0aXZlIGl0ZW1cbiAgICogQHBhcmFtIGkgLSBBY3RpdmUgSW5kZXhcbiAgICovXG4gIHNldChpOiBudW1iZXIpIHtcbiAgICBpZiAoaSAhPT0gdGhpcy5fc3RhdGUudmFsdWUuY3VyckluZGV4KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aW9uOiBHYWxsZXJ5QWN0aW9uLklOREVYX0NIQU5HRUQsXG4gICAgICAgIGN1cnJJbmRleDogaSxcbiAgICAgICAgaGFzTmV4dDogaSA8IHRoaXMuX3N0YXRlLnZhbHVlLml0ZW1zLmxlbmd0aCAtIDEsXG4gICAgICAgIGhhc1ByZXY6IGkgPiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmV4dCBpdGVtXG4gICAqL1xuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9zdGF0ZS52YWx1ZS5oYXNOZXh0KSB7XG4gICAgICB0aGlzLnNldCh0aGlzLl9zdGF0ZS52YWx1ZS5jdXJySW5kZXggKyAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbmZpZy52YWx1ZS5sb29wKSB7XG4gICAgICB0aGlzLnNldCgwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJldiBpdGVtXG4gICAqL1xuICBwcmV2KCkge1xuICAgIGlmICh0aGlzLl9zdGF0ZS52YWx1ZS5oYXNQcmV2KSB7XG4gICAgICB0aGlzLnNldCh0aGlzLl9zdGF0ZS52YWx1ZS5jdXJySW5kZXggLSAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbmZpZy52YWx1ZS5sb29wKSB7XG4gICAgICB0aGlzLnNldCh0aGlzLl9zdGF0ZS52YWx1ZS5pdGVtcy5sZW5ndGggLSAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgZ2FsbGVyeSBwbGF5ZXJcbiAgICogQHBhcmFtIGludGVydmFsXG4gICAqL1xuICBwbGF5KGludGVydmFsPzogbnVtYmVyKSB7XG4gICAgaWYgKGludGVydmFsKSB7XG4gICAgICB0aGlzLnNldENvbmZpZyh7cGxheWVySW50ZXJ2YWw6IGludGVydmFsfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe2FjdGlvbjogR2FsbGVyeUFjdGlvbi5QTEFZLCBpc1BsYXlpbmc6IHRydWV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGdhbGxlcnkgcGxheWVyXG4gICAqL1xuICBzdG9wKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe2FjdGlvbjogR2FsbGVyeUFjdGlvbi5TVE9QLCBpc1BsYXlpbmc6IGZhbHNlfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgZ2FsbGVyeSB0byBpbml0aWFsIHN0YXRlXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLnNldFN0YXRlKGRlZmF1bHRTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSBnYWxsZXJ5XG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3N0YXRlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29uZmlnLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5pdGVtQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLnRodW1iQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmRlbGV0ZUluc3RhbmNlKCk7XG4gIH1cblxufVxuIl19