@mescius/inputman.comment.angular
Version:
このパッケージには、Angular用の[InputManJS](https://developer.mescius.jp/inputmanjs)コンポーネントが含まれます。
270 lines • 35.7 kB
JavaScript
import { ElementRef, Input, Output, EventEmitter, Component, } from "@angular/core";
import { GC } from "../inputman";
import { MethodType, isEmpty, getMethodPrefix, IMCommentCtrl, } from "./common";
import * as i0 from "@angular/core";
export class GcCommentComponent {
constructor(ref) {
this.editorCreated = new EventEmitter();
this.preprocessError = new EventEmitter();
this.beforeExecuteCommand = new EventEmitter();
this.afterExecuteCommand = new EventEmitter();
this.beforeFirstLoad = new EventEmitter();
this.afterFirstLoad = new EventEmitter();
this.onInitialized = new EventEmitter();
this._container = ref.nativeElement;
}
ngOnChanges(changes) {
if (!this._imGcComment) {
return;
}
Object.keys(changes).forEach((key) => {
let currentValue = changes[key].currentValue;
this.setValueToIMControl(key, currentValue);
});
}
setValueToIMControl(key, value) {
if (value === undefined) {
return;
}
if (this.isSetAccessor(key)) {
this._imGcComment[key] = value;
return;
}
let setter = this.tryGetPropertyOperator(key, MethodType.setter);
if (this.hasRealMethod(setter)) {
if (this.propDic &&
this.propDic[key] &&
this.propDic[key].isPramArr === true) {
this._imGcComment[setter].apply(this._imGcComment, value);
}
else {
this._imGcComment[setter](value);
}
}
}
hasRealMethod(methodName) {
return (this._imGcComment &&
typeof this._imGcComment[methodName] === "function");
}
isSetAccessor(key) {
let descriptor = Object.getOwnPropertyDescriptor(this._imGcComment.constructor.prototype, key);
if (descriptor && descriptor.set) {
return true;
}
return false;
}
tryGetPropertyOperator(propertyName, methodType) {
let method = "";
if (this.propDic && this.propDic[propertyName]) {
method =
methodType === MethodType.getter
? this.propDic[propertyName].getter
: this.propDic[propertyName].setter;
if (!isEmpty(method)) {
return method;
}
}
return (getMethodPrefix(methodType) +
propertyName[0].toUpperCase() +
propertyName.slice(1));
}
ngAfterContentInit() {
this.initGcComment();
this.bindEvent();
if (this.propDic) {
var unSupportWithinConfigProps = Object.keys(this.propDic).filter((p) => this.propDic[p] &&
this.propDic[p].supportWithinConfig === false);
unSupportWithinConfigProps.sort((p1, p2) => {
return this.propDic[p1].order - this.propDic[p2].order;
});
unSupportWithinConfigProps.forEach((p) => {
this.setValueToIMControl(p, this[p]);
});
}
this._container[IMCommentCtrl] = this._imGcComment;
}
bindEvent() {
if (!this._imGcComment) {
return;
}
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.EditorCreated, (e) => {
this.editorCreated.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.PreprocessError, (e) => {
this.preprocessError.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeExecuteCommand, (e) => {
this.beforeExecuteCommand.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterExecuteCommand, (e) => {
this.afterExecuteCommand.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeFirstLoad, () => {
this.beforeFirstLoad.emit();
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterFirstLoad, () => {
this.afterFirstLoad.emit();
});
}
ngOnDestroy() {
if (this._container != null) {
this._container.remove();
this._imGcComment?.destroy?.();
this._imGcComment = null;
}
}
initGcComment() {
let element = document.createElement('div');
this.createTemplate(element);
this._imGcComment = new GC.InputMan.GcComment(element, this);
if (Array.isArray(this.comments)) {
this._imGcComment.comments = this.comments;
}
if (this.stickedComment) {
this._imGcComment.stickedComment = this.stickedComment;
}
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.CreateEditor, this.createEditor);
this.onInitialized.emit(this._imGcComment);
}
createTemplate(element) {
this._container.innerHTML = "";
this._container.appendChild(element);
}
getNestedIMControl() {
return this._imGcComment;
}
}
GcCommentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
GcCommentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GcCommentComponent, selector: "gc-comment", inputs: { userInfo: "userInfo", candidateReactionList: "candidateReactionList", candidateReactionListColumns: "candidateReactionListColumns", postTimeFormatter: "postTimeFormatter", updateTimeFormatter: "updateTimeFormatter", showIcon: "showIcon", addCommentEditorPosition: "addCommentEditorPosition", commentMode: "commentMode", header: "header", footer: "footer", headerFooterItems: "headerFooterItems", commentAction: "commentAction", commentInfoAction: "commentInfoAction", commentActionItem: "commentActionItem", commentInfoActionItem: "commentInfoActionItem", commentActionButtonType: "commentActionButtonType", pageSize: "pageSize", loadOnDemand: "loadOnDemand", allowAnonymous: "allowAnonymous", anonymousUserInfo: "anonymousUserInfo", warningMessage: "warningMessage", watermark: "watermark", commentFormatter: "commentFormatter", editorConfig: "editorConfig", avatarType: "avatarType", loadUsersInfoHandler: "loadUsersInfoHandler", loadComments: "loadComments", addNewCommentTo: "addNewCommentTo", keepDraft: "keepDraft", dataSource: "dataSource", loadCommentCount: "loadCommentCount", commentCountFormatter: "commentCountFormatter", loadReactionCount: "loadReactionCount", reactionCountFormatter: "reactionCountFormatter", sortInfo: "sortInfo", createEditor: "createEditor", loadRepliesOnDemand: "loadRepliesOnDemand", replyLevel: "replyLevel", collapseRepliesMode: "collapseRepliesMode", showCurrentUserName: "showCurrentUserName", contextToolbar: "contextToolbar", contextToolbarItem: "contextToolbarItem", loadCommentReplies: "loadCommentReplies", comments: "comments", stickedComment: "stickedComment", copiedLinkDisplayTextFormatter: "copiedLinkDisplayTextFormatter", copiedLinkFormatter: "copiedLinkFormatter", copiedLinkSearchParams: "copiedLinkSearchParams", pastedLinkType: "pastedLinkType", showLinkTypeContextToolbar: "showLinkTypeContextToolbar", loadCommentByLink: "loadCommentByLink", openLinkMode: "openLinkMode", loadStickedComment: "loadStickedComment", showZeroReaction: "showZeroReaction", showOpenReactionListButton: "showOpenReactionListButton" }, outputs: { editorCreated: "editorCreated", preprocessError: "preprocessError", beforeExecuteCommand: "beforeExecuteCommand", afterExecuteCommand: "afterExecuteCommand", beforeFirstLoad: "beforeFirstLoad", afterFirstLoad: "afterFirstLoad", onInitialized: "onInitialized" }, usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, decorators: [{
type: Component,
args: [{
selector: "gc-comment",
template: `<ng-content></ng-content>`,
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { userInfo: [{
type: Input
}], candidateReactionList: [{
type: Input
}], candidateReactionListColumns: [{
type: Input
}], postTimeFormatter: [{
type: Input
}], updateTimeFormatter: [{
type: Input
}], showIcon: [{
type: Input
}], addCommentEditorPosition: [{
type: Input
}], commentMode: [{
type: Input
}], header: [{
type: Input
}], footer: [{
type: Input
}], headerFooterItems: [{
type: Input
}], commentAction: [{
type: Input
}], commentInfoAction: [{
type: Input
}], commentActionItem: [{
type: Input
}], commentInfoActionItem: [{
type: Input
}], commentActionButtonType: [{
type: Input
}], pageSize: [{
type: Input
}], loadOnDemand: [{
type: Input
}], allowAnonymous: [{
type: Input
}], anonymousUserInfo: [{
type: Input
}], warningMessage: [{
type: Input
}], watermark: [{
type: Input
}], commentFormatter: [{
type: Input
}], editorConfig: [{
type: Input
}], avatarType: [{
type: Input
}], loadUsersInfoHandler: [{
type: Input
}], loadComments: [{
type: Input
}], addNewCommentTo: [{
type: Input
}], keepDraft: [{
type: Input
}], dataSource: [{
type: Input
}], loadCommentCount: [{
type: Input
}], commentCountFormatter: [{
type: Input
}], loadReactionCount: [{
type: Input
}], reactionCountFormatter: [{
type: Input
}], sortInfo: [{
type: Input
}], createEditor: [{
type: Input
}], loadRepliesOnDemand: [{
type: Input
}], replyLevel: [{
type: Input
}], collapseRepliesMode: [{
type: Input
}], showCurrentUserName: [{
type: Input
}], contextToolbar: [{
type: Input
}], contextToolbarItem: [{
type: Input
}], loadCommentReplies: [{
type: Input
}], comments: [{
type: Input
}], stickedComment: [{
type: Input
}], copiedLinkDisplayTextFormatter: [{
type: Input
}], copiedLinkFormatter: [{
type: Input
}], copiedLinkSearchParams: [{
type: Input
}], pastedLinkType: [{
type: Input
}], showLinkTypeContextToolbar: [{
type: Input
}], loadCommentByLink: [{
type: Input
}], openLinkMode: [{
type: Input
}], loadStickedComment: [{
type: Input
}], showZeroReaction: [{
type: Input
}], showOpenReactionListButton: [{
type: Input
}], editorCreated: [{
type: Output
}], preprocessError: [{
type: Output
}], beforeExecuteCommand: [{
type: Output
}], afterExecuteCommand: [{
type: Output
}], beforeFirstLoad: [{
type: Output
}], afterFirstLoad: [{
type: Output
}], onInitialized: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2NDb21tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tbWVudC9HY0NvbW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILFVBQVUsRUFFVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBRWYsYUFBYSxHQUNoQixNQUFNLFVBQVUsQ0FBQzs7QUFNbEIsTUFBTSxPQUFPLGtCQUFrQjtJQU8zQixZQUFZLEdBQWU7UUE4UnBCLGtCQUFhLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekQsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzRCx5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRSx3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvRCxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTNELG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXpTNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzdDLElBQUksQ0FBQyxtQkFBbUIs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QkFEYixLQUFLO2dCQUdOLDhCQUE4QjtzQkFEN0IsS0FBSztnQkFHTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBR04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBR04sMEJBQTBCO3NCQUR6QixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU07Z0JBR0EsZUFBZTtzQkFEckIsTUFBTTtnQkFHQSxvQkFBb0I7c0JBRDFCLE1BQU07Z0JBR0EsbUJBQW1CO3NCQUR6QixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLE1BQU07Z0JBR0EsY0FBYztzQkFEcEIsTUFBTTtnQkFHQSxhQUFhO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ29tcG9uZW50LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgR0MgfSBmcm9tIFwiLi4vaW5wdXRtYW5cIjtcbmltcG9ydCB7XG4gICAgTWV0aG9kVHlwZSxcbiAgICBpc0VtcHR5LFxuICAgIGdldE1ldGhvZFByZWZpeCxcbiAgICBQcm9wZXJ0eURpY3Rpb25hcnksXG4gICAgSU1Db21tZW50Q3RybCxcbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcImdjLWNvbW1lbnRcIixcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxufSlcbmV4cG9ydCBjbGFzcyBHY0NvbW1lbnRDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gICAgcHJvdGVjdGVkIF9jb250YWluZXI6IEVsZW1lbnQ7XG4gICAgcHJvdGVjdGVkIF9pbUdjQ29tbWVudDogR0MuSW5wdXRNYW4uR2NDb21tZW50O1xuICAgIHByb3RlY3RlZCBwcm9wRGljOiBQcm9wZXJ0eURpY3Rpb25hcnk7XG5cbiAgICBjb25zdHJ1Y3RvcihyZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gcmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbUdjQ29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZVRvSU1Db250cm9sKGtleSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlVG9JTUNvbnRyb2woa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU2V0QWNjZXNzb3Ioa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNldHRlciA9IHRoaXMudHJ5R2V0UHJvcGVydHlPcGVyYXRvcihrZXksIE1ldGhvZFR5cGUuc2V0dGVyKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVhbE1ldGhvZChzZXR0ZXIpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljW2tleV0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNba2V5XS5pc1ByYW1BcnIgPT09IHRydWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50W3NldHRlcl0uYXBwbHkodGhpcy5faW1HY0NvbW1lbnQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRbc2V0dGVyXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1JlYWxNZXRob2QobWV0aG9kTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pbUdjQ29tbWVudCAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2ltR2NDb21tZW50W21ldGhvZE5hbWVdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2V0QWNjZXNzb3Ioa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICAgICAgICAga2V5XG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cnlHZXRQcm9wZXJ0eU9wZXJhdG9yKFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgICAgbWV0aG9kVHlwZTogTWV0aG9kVHlwZVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGxldCBtZXRob2Q6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLnByb3BEaWMgJiYgdGhpcy5wcm9wRGljW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgICAgICAgIG1ldGhvZCA9XG4gICAgICAgICAgICAgICAgbWV0aG9kVHlwZSA9PT0gTWV0aG9kVHlwZS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5zZXR0ZXI7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkobWV0aG9kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldE1ldGhvZFByZWZpeChtZXRob2RUeXBlKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVbMF0udG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUuc2xpY2UoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRHY0NvbW1lbnQoKTtcbiAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcERpYykge1xuICAgICAgICAgICAgdmFyIHVuU3VwcG9ydFdpdGhpbkNvbmZpZ1Byb3BzID0gT2JqZWN0LmtleXModGhpcy5wcm9wRGljKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcERpY1twXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNbcF0uc3VwcG9ydFdpdGhpbkNvbmZpZyA9PT0gZmFsc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB1blN1cHBvcnRXaXRoaW5Db25maWdQcm9wcy5zb3J0KChwMSwgcDIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wRGljW3AxXS5vcmRlciAtIHRoaXMucHJvcERpY1twMl0ub3JkZXI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdW5TdXBwb3J0V2l0aGluQ29uZmlnUHJvcHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVUb0lNQ29udHJvbChwLCB0aGlzW3BdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lcltJTUNvbW1lbnRDdHJsXSA9IHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBiaW5kRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5faW1HY0NvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuRWRpdG9yQ3JlYXRlZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5QcmVwcm9jZXNzRXJyb3IsXG4gICAgICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc0Vycm9yLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVFeGVjdXRlQ29tbWFuZC5lbWl0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckV4ZWN1dGVDb21tYW5kLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVGaXJzdExvYWQuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckZpcnN0TG9hZC5lbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50Py5kZXN0cm95Py4oKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEdjQ29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUZW1wbGF0ZShlbGVtZW50KTtcbiAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQgPSBuZXcgR0MuSW5wdXRNYW4uR2NDb21tZW50KGVsZW1lbnQsIHRoaXMgYXMgYW55KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb21tZW50cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmNvbW1lbnRzID0gdGhpcy5jb21tZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGlja2VkQ29tbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuc3RpY2tlZENvbW1lbnQgPSB0aGlzLnN0aWNrZWRDb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5DcmVhdGVFZGl0b3IsXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUVkaXRvclxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uSW5pdGlhbGl6ZWQuZW1pdCh0aGlzLl9pbUdjQ29tbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUZW1wbGF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROZXN0ZWRJTUNvbnRyb2woKTogR0MuSW5wdXRNYW4uR2NDb21tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgdXNlckluZm8/OiBHQy5JbnB1dE1hbi5Vc2VySW5mbztcbiAgICBASW5wdXQoKVxuICAgIGNhbmRpZGF0ZVJlYWN0aW9uTGlzdD86IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpXG4gICAgY2FuZGlkYXRlUmVhY3Rpb25MaXN0Q29sdW1ucz86IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIHBvc3RUaW1lRm9ybWF0dGVyPzogR0MuSW5wdXRNYW4uRGF0ZUZvcm1hdHRlcjtcbiAgICBASW5wdXQoKVxuICAgIHVwZGF0ZVRpbWVGb3JtYXR0ZXI/OiBHQy5JbnB1dE1hbi5EYXRlRm9ybWF0dGVyO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0ljb24/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgYWRkQ29tbWVudEVkaXRvclBvc2l0aW9uPzogR0MuSW5wdXRNYW4uR2NDb21tZW50RWRpdG9yUG9zaXRpb247XG4gICAgQElucHV0KClcbiAgICBjb21tZW50TW9kZT86IEdDLklucHV0TWFuLkdjQ29tbWVudE1vZGU7XG4gICAgQElucHV0KClcbiAgICBoZWFkZXI/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50SGVhZGVyRm9vdGVySXRlbSlbXTtcbiAgICBASW5wdXQoKVxuICAgIGZvb3Rlcj86IChzdHJpbmcgfCBHQy5JbnB1dE1hbi5HY0NvbW1lbnRIZWFkZXJGb290ZXJJdGVtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVyRm9vdGVySXRlbXM/OiB7IFtrZXk6IHN0cmluZ106IChnY0NvbW1lbnQ6IEdDLklucHV0TWFuLkdjQ29tbWVudCkgPT4gR0MuSW5wdXRNYW4uSUhlYWRlckZvb3Rlckl0ZW0gfTtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRBY3Rpb24/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50Q29tbWVudEFjdGlvbkl0ZW0pW107XG4gICAgQElucHV0KClcbiAgICBjb21tZW50SW5mb0FjdGlvbj86IChzdHJpbmcgfCBHQy5JbnB1dE1hbi5HY0NvbW1lbnRDb21tZW50SW5mb0FjdGlvbkl0ZW0pW107XG4gICAgQElucHV0KClcbiAgICBjb21tZW50QWN0aW9uSXRlbT86IHsgW2tleTogc3RyaW5nXTogR0MuSW5wdXRNYW4uSUNvbW1lbnRBY3Rpb25JdGVtIH07XG4gICAgQElucHV0KClcbiAgICBjb21tZW50SW5mb0FjdGlvbkl0ZW0/OiB7IFtrZXk6IHN0cmluZ106IEdDLklucHV0TWFuLklDb21tZW50SW5mb0FjdGlvbkl0ZW0gfTtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRBY3Rpb25CdXR0b25UeXBlPzogR0MuSW5wdXRNYW4uR2NDb21tZW50QWN0aW9uQnV0dG9uVHlwZTtcbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTaXplPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZE9uRGVtYW5kPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGFsbG93QW5vbnltb3VzPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGFub255bW91c1VzZXJJbmZvPzogR0MuSW5wdXRNYW4uVXNlckluZm87XG4gICAgQElucHV0KClcbiAgICB3YXJuaW5nTWVzc2FnZT86IEdDLklucHV0TWFuLklXYXJuaW5nTWVzc2FnZTtcbiAgICBASW5wdXQoKVxuICAgIHdhdGVybWFyaz86IEdDLklucHV0TWFuLklXYXRlck1hcms7XG4gICAgQElucHV0KClcbiAgICBjb21tZW50Rm9ybWF0dGVyPzogR0MuSW5wdXRNYW4uQ29tbWVudEZvcm1hdHRlcjtcbiAgICBASW5wdXQoKVxuICAgIGVkaXRvckNvbmZpZz86IEdDLklucHV0TWFuLkVkaXRvckNvbmZpZztcbiAgICBASW5wdXQoKVxuICAgIGF2YXRhclR5cGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRVc2VySWNvblR5cGU7XG4gICAgQElucHV0KClcbiAgICBsb2FkVXNlcnNJbmZvSGFuZGxlcj86IEdDLklucHV0TWFuLkxvYWRVc2Vyc0NhbGxiYWNrO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRzPzogKGFyZ3M6IEdDLklucHV0TWFuLkxvYWRNb3JlQ29tbWVudHNJbmZvKSA9PiBHQy5JbnB1dE1hbi5Mb2FkQ29tbWVudHNSZXN1bHQ7XG4gICAgQElucHV0KClcbiAgICBhZGROZXdDb21tZW50VG8/OiBHQy5JbnB1dE1hbi5BZGROZXdDb21tZW50UG9zaXRpb247XG4gICAgQElucHV0KClcbiAgICBrZWVwRHJhZnQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgZGF0YVNvdXJjZT86IEdDLklucHV0TWFuLklHY0NvbW1lbnREYXRhU291cmNlO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRDb3VudD86ICgpID0+IG51bWJlciB8IFByb21pc2U8bnVtYmVyPjtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRDb3VudEZvcm1hdHRlcj86IChuOiBudW1iZXIpID0+IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFJlYWN0aW9uQ291bnQ/OiAoKSA9PiBudW1iZXIgfCBQcm9taXNlPG51bWJlcj47XG4gICAgQElucHV0KClcbiAgICByZWFjdGlvbkNvdW50Rm9ybWF0dGVyPzogKG46IG51bWJlcikgPT4gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KClcbiAgICBzb3J0SW5mbz86IEdDLklucHV0TWFuLlNvcnRJbmZvO1xuICAgIEBJbnB1dCgpXG4gICAgY3JlYXRlRWRpdG9yPzogKGFyZ3M6IEdDLklucHV0TWFuLkNyZWF0ZUVkaXRvckFyZ3MpID0+IEdDLklucHV0TWFuLklDb21tZW50RWRpdG9yO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFJlcGxpZXNPbkRlbWFuZD86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICByZXBseUxldmVsPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpXG4gICAgY29sbGFwc2VSZXBsaWVzTW9kZT86IEdDLklucHV0TWFuLkdjQ29tbWVudENvbGxhcHNlUmVwbGllc01vZGU7XG4gICAgQElucHV0KClcbiAgICBzaG93Q3VycmVudFVzZXJOYW1lPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGNvbnRleHRUb29sYmFyPzogKHN0cmluZyB8IEdDLklucHV0TWFuLkdjQ29tbWVudENvbnRleHRUb29sYmFyIHwgR0MuSW5wdXRNYW4uQ29udGV4dFRvb2xiYXJPcHRpb24pW107XG4gICAgQElucHV0KClcbiAgICBjb250ZXh0VG9vbGJhckl0ZW0/OiB7IFtrZXk6IHN0cmluZ106IEdDLklucHV0TWFuLklDb21tZW50Q29udGV4dFRvb2xiYXJJdGVtIH07XG4gICAgQElucHV0KClcbiAgICBsb2FkQ29tbWVudFJlcGxpZXM/OiAoY29tbWVudDogR0MuSW5wdXRNYW4uSUNvbW1lbnQsIGxvYWRlZENvdW50OiBudW1iZXIpID0+IEdDLklucHV0TWFuLkxvYWRDb21tZW50c1Jlc3VsdDtcbiAgICBASW5wdXQoKVxuICAgIGNvbW1lbnRzPzogR0MuSW5wdXRNYW4uSUNvbW1lbnRbXTtcbiAgICBASW5wdXQoKVxuICAgIHN0aWNrZWRDb21tZW50PzogR0MuSW5wdXRNYW4uSUNvbW1lbnQ7XG4gICAgQElucHV0KClcbiAgICBjb3BpZWRMaW5rRGlzcGxheVRleHRGb3JtYXR0ZXI/OiAoY29tbWVudDogR0MuSW5wdXRNYW4uSUNvbW1lbnQpID0+IEdDLklucHV0TWFuLklDb3BpZWRMaW5rRGlzcGxheVRleHRDb25maWc7XG4gICAgQElucHV0KClcbiAgICBjb3BpZWRMaW5rRm9ybWF0dGVyPzogKGNvbW1lbnQ6IEdDLklucHV0TWFuLklDb21tZW50KSA9PiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBjb3BpZWRMaW5rU2VhcmNoUGFyYW1zPzogKEdDLklucHV0TWFuLkdjQ29tbWVudExpbmtTZWFyY2hQYXJhbXMgfCBHQy5JbnB1dE1hbi5DdXN0b21MaW5rU2VhcmNoUGFyYW0pW107XG4gICAgQElucHV0KClcbiAgICBwYXN0ZWRMaW5rVHlwZT86IEdDLklucHV0TWFuLkdjQ29tbWVudFBhc3RlTGlua1R5cGU7XG4gICAgQElucHV0KClcbiAgICBzaG93TGlua1R5cGVDb250ZXh0VG9vbGJhcj86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBsb2FkQ29tbWVudEJ5TGluaz86IChsaW5rOiBzdHJpbmcpID0+IFByb21pc2U8R0MuSW5wdXRNYW4uTG9hZENvbW1lbnRCeUxpbmtSZXN1bHQ+O1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbkxpbmtNb2RlPzogR0MuSW5wdXRNYW4uT3BlbkxpbmtNb2RlO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFN0aWNrZWRDb21tZW50PzogKCkgPT4gR0MuSW5wdXRNYW4uSUNvbW1lbnQgfCBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1plcm9SZWFjdGlvbj86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBzaG93T3BlblJlYWN0aW9uTGlzdEJ1dHRvbj86IGJvb2xlYW47XG4gICAgXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGVkaXRvckNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwcmVwcm9jZXNzRXJyb3I6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBiZWZvcmVFeGVjdXRlQ29tbWFuZDogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGFmdGVyRXhlY3V0ZUNvbW1hbmQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBiZWZvcmVGaXJzdExvYWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBhZnRlckZpcnN0TG9hZDogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSW5pdGlhbGl6ZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xufVxuIl19