ngx-joyride
Version:
An Angular Tour (Joyride) library built entirely in Angular, without using any heavy external dependencies like Bootstrap or JQuery. From now on you can easily guide your users through your site showing them all the sections and features.
118 lines • 15.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { of, Observable } from 'rxjs';
import * as i0 from "@angular/core";
export const DEFAULT_THEME_COLOR = '#3b5560';
export const STEP_DEFAULT_POSITION = 'bottom';
export const DEFAULT_TIMEOUT_BETWEEN_STEPS = 1;
export class ObservableCustomTexts {
}
export const DEFAULT_TEXTS = {
prev: of('prev'),
next: of('next'),
done: of('done'),
close: of(null)
};
export class JoyrideOptionsService {
constructor() {
this.themeColor = DEFAULT_THEME_COLOR;
this.stepDefaultPosition = STEP_DEFAULT_POSITION;
this.logsEnabled = false;
this.showCounter = true;
this.showPrevButton = true;
this.stepsOrder = [];
}
setOptions(options) {
this.stepsOrder = options.steps;
this.stepDefaultPosition = options.stepDefaultPosition
? options.stepDefaultPosition
: this.stepDefaultPosition;
this.logsEnabled =
typeof options.logsEnabled !== 'undefined'
? options.logsEnabled
: this.logsEnabled;
this.showCounter =
typeof options.showCounter !== 'undefined'
? options.showCounter
: this.showCounter;
this.showPrevButton =
typeof options.showPrevButton !== 'undefined'
? options.showPrevButton
: this.showPrevButton;
this.themeColor = options.themeColor
? options.themeColor
: this.themeColor;
this.firstStep = options.startWith;
this.waitingTime =
typeof options.waitingTime !== 'undefined'
? options.waitingTime
: DEFAULT_TIMEOUT_BETWEEN_STEPS;
typeof options.customTexts !== 'undefined'
? this.setCustomText(options.customTexts)
: this.setCustomText(DEFAULT_TEXTS);
}
getBackdropColor() {
return this.hexToRgb(this.themeColor);
}
getThemeColor() {
return this.themeColor;
}
getStepDefaultPosition() {
return this.stepDefaultPosition;
}
getStepsOrder() {
return this.stepsOrder;
}
getFirstStep() {
return this.firstStep;
}
getWaitingTime() {
return this.waitingTime;
}
areLogsEnabled() {
return this.logsEnabled;
}
isCounterVisible() {
return this.showCounter;
}
isPrevButtonVisible() {
return this.showPrevButton;
}
getCustomTexts() {
return this.customTexts;
}
setCustomText(texts) {
let prev;
let next;
let done;
let close;
prev = texts.prev ? texts.prev : DEFAULT_TEXTS.prev;
next = texts.next ? texts.next : DEFAULT_TEXTS.next;
done = texts.done ? texts.done : DEFAULT_TEXTS.done;
close = texts.close ? texts.close : DEFAULT_TEXTS.close;
this.customTexts = {
prev: this.toObservable(prev),
next: this.toObservable(next),
done: this.toObservable(done),
close: this.toObservable(close)
};
}
toObservable(value) {
return value instanceof Observable ? value : of(value);
}
hexToRgb(hex) {
const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(shorthandRegex, (m, r, g, b) => {
return r + r + g + g + b + b;
});
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result
? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}`
: null;
}
}
JoyrideOptionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: JoyrideOptionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
JoyrideOptionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: JoyrideOptionsService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: JoyrideOptionsService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam95cmlkZS1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtam95cmlkZS9zcmMvbGliL3NlcnZpY2VzL2pveXJpZGUtb3B0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRXRDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sT0FBTyxxQkFBcUI7Q0FLakM7QUFDRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQTBCO0lBQ2hELElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2hCLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2hCLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2hCLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO0NBQ2xCLENBQUM7QUFpQkYsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVZLGVBQVUsR0FBVyxtQkFBbUIsQ0FBQztRQUN6Qyx3QkFBbUIsR0FBVyxxQkFBcUIsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixlQUFVLEdBQWEsRUFBRSxDQUFDO0tBOEdyQztJQXpHRyxVQUFVLENBQUMsT0FBdUI7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CO1lBQ2xELENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1lBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVc7WUFDWixPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVztnQkFDdEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXO2dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVztZQUNaLE9BQU8sT0FBTyxDQUFDLFdBQVcsS0FBSyxXQUFXO2dCQUN0QyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7Z0JBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjO1lBQ2YsT0FBTyxPQUFPLENBQUMsY0FBYyxLQUFLLFdBQVc7Z0JBQ3pDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYztnQkFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVTtZQUNoQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXO1lBQ1osT0FBTyxPQUFPLENBQUMsV0FBVyxLQUFLLFdBQVc7Z0JBQ3RDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVztnQkFDckIsQ0FBQyxDQUFDLDZCQUE2QixDQUFDO1FBQ3hDLE9BQU8sT0FBTyxDQUFDLFdBQVcsS0FBSyxXQUFXO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLElBQWlDLENBQUM7UUFDdEMsSUFBSSxJQUFpQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztRQUNwRCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1NBQ1QsQ0FBQztJQUMvQixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWtDO1FBQ25ELE9BQU8sS0FBSyxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFRO1FBQ3JCLE1BQU0sY0FBYyxHQUFHLGtDQUFrQyxDQUFDO1FBQzFELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFO1lBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRywyQ0FBMkMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckUsT0FBTyxNQUFNO1lBQ1QsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxRQUFRLENBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxFQUFFLENBQ0wsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDZixDQUFDOztrSEFuSFEscUJBQXFCO3NIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgSm95cmlkZU9wdGlvbnMsXG4gICAgQ3VzdG9tVGV4dHMsXG4gICAgSUN1c3RvbVRleHRzXG59IGZyb20gJy4uL21vZGVscy9qb3lyaWRlLW9wdGlvbnMuY2xhc3MnO1xuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEhFTUVfQ09MT1IgPSAnIzNiNTU2MCc7XG5leHBvcnQgY29uc3QgU1RFUF9ERUZBVUxUX1BPU0lUSU9OID0gJ2JvdHRvbSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FT1VUX0JFVFdFRU5fU1RFUFMgPSAxO1xuXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZUN1c3RvbVRleHRzIGltcGxlbWVudHMgSUN1c3RvbVRleHRzIHtcbiAgICBwcmV2OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgbmV4dDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIGRvbmU6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBjbG9zZTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xufVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVYVFM6IE9ic2VydmFibGVDdXN0b21UZXh0cyA9IHtcbiAgICBwcmV2OiBvZigncHJldicpLFxuICAgIG5leHQ6IG9mKCduZXh0JyksXG4gICAgZG9uZTogb2YoJ2RvbmUnKSxcbiAgICBjbG9zZTogb2YobnVsbClcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUpveXJpZGVPcHRpb25zU2VydmljZSB7XG4gICAgc2V0T3B0aW9ucyhvcHRpb25zOiBKb3lyaWRlT3B0aW9ucyk6IHZvaWQ7XG4gICAgZ2V0QmFja2Ryb3BDb2xvcigpOiBzdHJpbmc7XG4gICAgZ2V0VGhlbWVDb2xvcigpOiBzdHJpbmc7XG4gICAgZ2V0U3RlcERlZmF1bHRQb3NpdGlvbigpO1xuICAgIGdldFN0ZXBzT3JkZXIoKTogc3RyaW5nW107XG4gICAgZ2V0Rmlyc3RTdGVwKCk6IHN0cmluZztcbiAgICBnZXRXYWl0aW5nVGltZSgpOiBudW1iZXI7XG4gICAgYXJlTG9nc0VuYWJsZWQoKTogYm9vbGVhbjtcbiAgICBpc0NvdW50ZXJWaXNpYmxlKCk6IGJvb2xlYW47XG4gICAgaXNQcmV2QnV0dG9uVmlzaWJsZSgpOiBib29sZWFuO1xuICAgIGdldEN1c3RvbVRleHRzKCk6IE9ic2VydmFibGVDdXN0b21UZXh0cztcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEpveXJpZGVPcHRpb25zU2VydmljZSBpbXBsZW1lbnRzIElKb3lyaWRlT3B0aW9uc1NlcnZpY2Uge1xuICAgIHByaXZhdGUgdGhlbWVDb2xvcjogc3RyaW5nID0gREVGQVVMVF9USEVNRV9DT0xPUjtcbiAgICBwcml2YXRlIHN0ZXBEZWZhdWx0UG9zaXRpb246IHN0cmluZyA9IFNURVBfREVGQVVMVF9QT1NJVElPTjtcbiAgICBwcml2YXRlIGxvZ3NFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzaG93Q291bnRlciA9IHRydWU7XG4gICAgcHJpdmF0ZSBzaG93UHJldkJ1dHRvbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBzdGVwc09yZGVyOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgZmlyc3RTdGVwOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB3YWl0aW5nVGltZTogbnVtYmVyO1xuICAgIHByaXZhdGUgY3VzdG9tVGV4dHM6IE9ic2VydmFibGVDdXN0b21UZXh0cztcblxuICAgIHNldE9wdGlvbnMob3B0aW9uczogSm95cmlkZU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdGVwc09yZGVyID0gb3B0aW9ucy5zdGVwcztcbiAgICAgICAgdGhpcy5zdGVwRGVmYXVsdFBvc2l0aW9uID0gb3B0aW9ucy5zdGVwRGVmYXVsdFBvc2l0aW9uXG4gICAgICAgICAgICA/IG9wdGlvbnMuc3RlcERlZmF1bHRQb3NpdGlvblxuICAgICAgICAgICAgOiB0aGlzLnN0ZXBEZWZhdWx0UG9zaXRpb247XG4gICAgICAgIHRoaXMubG9nc0VuYWJsZWQgPVxuICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMubG9nc0VuYWJsZWQgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLmxvZ3NFbmFibGVkXG4gICAgICAgICAgICAgICAgOiB0aGlzLmxvZ3NFbmFibGVkO1xuICAgICAgICB0aGlzLnNob3dDb3VudGVyID1cbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dDb3VudGVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5zaG93Q291bnRlclxuICAgICAgICAgICAgICAgIDogdGhpcy5zaG93Q291bnRlcjtcbiAgICAgICAgdGhpcy5zaG93UHJldkJ1dHRvbiA9XG4gICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93UHJldkJ1dHRvbiAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuc2hvd1ByZXZCdXR0b25cbiAgICAgICAgICAgICAgICA6IHRoaXMuc2hvd1ByZXZCdXR0b247XG4gICAgICAgIHRoaXMudGhlbWVDb2xvciA9IG9wdGlvbnMudGhlbWVDb2xvclxuICAgICAgICAgICAgPyBvcHRpb25zLnRoZW1lQ29sb3JcbiAgICAgICAgICAgIDogdGhpcy50aGVtZUNvbG9yO1xuICAgICAgICB0aGlzLmZpcnN0U3RlcCA9IG9wdGlvbnMuc3RhcnRXaXRoO1xuICAgICAgICB0aGlzLndhaXRpbmdUaW1lID1cbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLndhaXRpbmdUaW1lICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgID8gb3B0aW9ucy53YWl0aW5nVGltZVxuICAgICAgICAgICAgICAgIDogREVGQVVMVF9USU1FT1VUX0JFVFdFRU5fU1RFUFM7XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmN1c3RvbVRleHRzICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyB0aGlzLnNldEN1c3RvbVRleHQob3B0aW9ucy5jdXN0b21UZXh0cylcbiAgICAgICAgICAgIDogdGhpcy5zZXRDdXN0b21UZXh0KERFRkFVTFRfVEVYVFMpO1xuICAgIH1cblxuICAgIGdldEJhY2tkcm9wQ29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhleFRvUmdiKHRoaXMudGhlbWVDb2xvcik7XG4gICAgfVxuXG4gICAgZ2V0VGhlbWVDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbWVDb2xvcjtcbiAgICB9XG5cbiAgICBnZXRTdGVwRGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwRGVmYXVsdFBvc2l0aW9uO1xuICAgIH1cblxuICAgIGdldFN0ZXBzT3JkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBzT3JkZXI7XG4gICAgfVxuXG4gICAgZ2V0Rmlyc3RTdGVwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maXJzdFN0ZXA7XG4gICAgfVxuXG4gICAgZ2V0V2FpdGluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndhaXRpbmdUaW1lO1xuICAgIH1cblxuICAgIGFyZUxvZ3NFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2dzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBpc0NvdW50ZXJWaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93Q291bnRlcjtcbiAgICB9XG5cbiAgICBpc1ByZXZCdXR0b25WaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93UHJldkJ1dHRvbjtcbiAgICB9XG5cbiAgICBnZXRDdXN0b21UZXh0cygpOiBPYnNlcnZhYmxlQ3VzdG9tVGV4dHMge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21UZXh0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEN1c3RvbVRleHQodGV4dHM6IEN1c3RvbVRleHRzKSB7XG4gICAgICAgIGxldCBwcmV2OiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgICAgIGxldCBuZXh0OiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgICAgIGxldCBkb25lO1xuICAgICAgICBsZXQgY2xvc2U7XG4gICAgICAgIHByZXYgPSB0ZXh0cy5wcmV2ID8gdGV4dHMucHJldiA6IERFRkFVTFRfVEVYVFMucHJldjtcbiAgICAgICAgbmV4dCA9IHRleHRzLm5leHQgPyB0ZXh0cy5uZXh0IDogREVGQVVMVF9URVhUUy5uZXh0O1xuICAgICAgICBkb25lID0gdGV4dHMuZG9uZSA/IHRleHRzLmRvbmUgOiBERUZBVUxUX1RFWFRTLmRvbmU7XG4gICAgICAgIGNsb3NlID0gdGV4dHMuY2xvc2UgPyB0ZXh0cy5jbG9zZSA6IERFRkFVTFRfVEVYVFMuY2xvc2U7XG4gICAgICAgIHRoaXMuY3VzdG9tVGV4dHMgPSB7XG4gICAgICAgICAgICBwcmV2OiB0aGlzLnRvT2JzZXJ2YWJsZShwcmV2KSxcbiAgICAgICAgICAgIG5leHQ6IHRoaXMudG9PYnNlcnZhYmxlKG5leHQpLFxuICAgICAgICAgICAgZG9uZTogdGhpcy50b09ic2VydmFibGUoZG9uZSksXG4gICAgICAgICAgICBjbG9zZTogdGhpcy50b09ic2VydmFibGUoY2xvc2UpXG4gICAgICAgIH0gYXMgT2JzZXJ2YWJsZUN1c3RvbVRleHRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9PYnNlcnZhYmxlKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHZhbHVlIDogb2YodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGV4VG9SZ2IoaGV4OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzaG9ydGhhbmRSZWdleCA9IC9eIz8oW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkkL2k7XG4gICAgICAgIGhleCA9IGhleC5yZXBsYWNlKHNob3J0aGFuZFJlZ2V4LCAobTogYW55LCByOiBhbnksIGc6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gciArIHIgKyBnICsgZyArIGIgKyBiO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgPyBgJHtwYXJzZUludChyZXN1bHRbMV0sIDE2KX0sICR7cGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICByZXN1bHRbMl0sXG4gICAgICAgICAgICAgICAgICAxNlxuICAgICAgICAgICAgICApfSwgJHtwYXJzZUludChyZXN1bHRbM10sIDE2KX1gXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxufVxuIl19