UIManager.js 26.4 KB

                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/scripts/ui/UIManager.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, '83d1824AgVC8Z6URdLQKprC', 'UIManager');
// scripts/ui/UIManager.ts

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UIManager = void 0;
var UIBase_1 = require("./UIBase");
var UIManager = /** @class */ (function () {
    function UIManager() {
        this._cache = new Map();
        // playResFlyEffect
    }
    Object.defineProperty(UIManager, "ins", {
        get: function () {
            if (this._ins == null) {
                this._ins = new UIManager();
            }
            return this._ins;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(UIManager.prototype, "uiLayer", {
        get: function () { return this._uiLayer; },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(UIManager.prototype, "widgetLayer", {
        get: function () { return this._widgetLayer; },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(UIManager.prototype, "loadingLayer", {
        get: function () { return this._loadingLayer; },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(UIManager.prototype, "adLayer", {
        get: function () { return this._adLayer; },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(UIManager.prototype, "cache", {
        get: function () { return this._cache; },
        enumerable: false,
        configurable: true
    });
    // setLoadingNode(node: Node): void {
    //     this._loadingNode = node;
    // }
    // setAdNode(node: cc.Node) {
    //     this._adRoot = node;
    // }
    UIManager.prototype.init = function (uiRoot) {
        //已经进入了GameMain场景
        this._uiRoot = uiRoot;
        this._uiLayer = this._uiRoot.getChildByName("uiLayer");
        this._windowLockLayer = this._uiRoot.getChildByName("windowBlcok");
        this._windowLockLayer.active = false;
        // this._windowLockLayer.getComponent(Widget).updateAlignment();
        this._windowLayer = this._uiRoot.getChildByName("windowLayer");
        this._widgetLayer = this._uiRoot.getChildByName("widgetLayer");
        this._loadingLayer = this._uiRoot.getChildByName("loadingLayer");
        this._loadingLayer.active = false;
        this._tipsLayer = this._uiRoot.getChildByName("tipsLayer");
        this._adLayer = this._uiRoot.getChildByName("adLayer");
        // if (this._loadingNode) {
        //     // this._loadingNode.removeFromParent(); 
        //     this._loadingLayer.addChild(this._loadingNode);
        //     this._loadingNode.getChildByName("type1").active = false;
        //     this._loadingNode.getChildByName("type2").active = true;
        //     this._loadingNode.active = false;
        // }
        // uiRoot.addChild(this._adRoot);//添加广告节点
    };
    // static get adRoot() {
    //     let _scene: any = cc.director.getScene();
    //     let _adRoot = _scene.getChildByName('Canvas').getChildByName('adLayer') as cc.Node;
    //     if (_adRoot == null) {
    //         _adRoot = new cc.Node();
    //         _adRoot.name = 'adLayer';
    //         _adRoot.parent = _scene.getChildByName('Canvas');
    //         _adRoot.x = 0;
    //         _adRoot.y = 0;
    //         _adRoot.width = cc.winSize.width;
    //         _adRoot.height = cc.winSize.height;
    //         _adRoot.setSiblingIndex(999);
    //     }
    //     return _adRoot;
    // }
    UIManager.prototype.openScene = function (name) {
        var _this = this;
        this._loadingLayer.active = true;
        this._loadingLayer.getChildByName('sceneNode').active = true;
        this._loadingLayer.getChildByName('windowNode').active = false;
        cc.resources.loadScene('scenes/' + name, function (finish, total) {
            var prg = finish / total;
            _this._loadingLayer.getChildByName('sceneNode').getComponentInChildren(cc.ProgressBar).progress = prg;
        }, function (error, scene) {
            _this._loadingLayer.active = false;
            cc.director.runScene(scene);
        });
        // cc.director.scene
    };
    /**
     *
     * @param type
     * @param callBack 参数 view:cc.Node
     */
    UIManager.prototype.loadWindow = function (type, callBack) {
        var _this = this;
        if (this._cache.has(type)) {
            callBack(this._cache.get(type));
        }
        else {
            this._loadingLayer.active = true;
            this._loadingLayer.getChildByName('sceneNode').active = false;
            this._loadingLayer.getChildByName('windowNode').active = true;
            cc.resources.load(type, cc.Prefab, function (error, prefab) {
                _this._loadingLayer.active = false;
                if (!error) {
                    if (!_this._cache.has(type)) {
                        var view = cc.instantiate(prefab);
                        _this._cache.set(type, view);
                        callBack(view);
                    }
                }
            });
        }
    };
    UIManager.prototype.openWindow = function (type, openParam) {
        var _this = this;
        if (openParam === void 0) { openParam = null; }
        if (this._cache.has(type)) {
            this.doOpenWindow(this._cache.get(type), openParam);
        }
        else {
            // this._loadingLayer.active = true;
            // this._loadingLayer.getChildByName('sceneNode').active = false;
            // this._loadingLayer.getChildByName('windowNode').active = true;
            // cc.resources.load(type, cc.Prefab,
            //     (finished, total) => {
            //         let prg = finished / total;
            //     },
            //     (error, prefab: cc.Prefab) => {
            //         //finish
            //         if (!this._cache.has(type)) {
            //             let view = cc.instantiate(prefab);
            //             this._cache.set(type, view);
            //             this._loadingLayer.active = false;
            //             this.doOpenWindow(view, openParam);
            //         }
            //     });
            this.loadWindow(type, function (view) {
                _this.doOpenWindow(view, openParam);
            });
        }
    };
    UIManager.prototype.doOpenWindow = function (view, param) {
        if (!view.parent) {
            !this._windowLockLayer.active && (this._windowLockLayer.active = true);
            var base = view.getComponent(UIBase_1.UIBase);
            base && (base.enableParam = param);
            this._windowLayer.addChild(view);
            view.active = true;
            base && base.onPopUpEffect();
        }
    };
    UIManager.prototype.closeWindow = function (type, callback) {
        var _this = this;
        if (callback === void 0) { callback = null; }
        if (this._cache.has(type)) {
            var view_1 = this._cache.get(type);
            // view.active = false;
            var base = view_1.getComponent(UIBase_1.UIBase);
            base && base.onBeforeClose();
            base.onCloseEffect(function () {
                var isOnWindowLayer = (view_1.isValid && view_1.parent === _this._windowLayer);
                if (isOnWindowLayer) {
                    view_1.removeFromParent();
                    view_1.active = false;
                }
                if (isOnWindowLayer && _this._windowLayer.children.length == 0) {
                    _this._windowLockLayer.active = false;
                }
                callback && callback();
            }, this);
        }
    };
    UIManager.prototype.getWidgetNode = function (type) {
        return this._widgetLayer.getChildByName('widget' + type.toString());
    };
    UIManager.prototype.showTips = function (str) {
        // let node = this._tipsLayer.getChildByName('TipsNode');
        // node.active = true;
        // node.getComponentInChildren(Label).string = str;
        // Tween.stopAllByTarget(node);
        // tween(node).delay(3).call(this.closeTips.bind(this)).start()
    };
    UIManager.prototype.closeTips = function () {
        var node = this._tipsLayer.getChildByName('TipsNode');
        node.active = false;
    };
    UIManager._ins = null;
    return UIManager;
}());
exports.UIManager = UIManager;

cc._RF.pop();
                    }
                    if (nodeEnv) {
                        __define(__module.exports, __require, __module);
                    }
                    else {
                        __quick_compile_project__.registerModuleFunc(__filename, function () {
                            __define(__module.exports, __require, __module);
                        });
                    }
                })();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0c1xcdWlcXFVJTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxtQ0FBa0M7QUFFbEM7SUFBQTtRQXlCWSxXQUFNLEdBQXlCLElBQUksR0FBRyxFQUFtQixDQUFDO1FBb05sRSxtQkFBbUI7SUFDdkIsQ0FBQztJQTNPRyxzQkFBVyxnQkFBRzthQUFkO1lBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2FBQy9CO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLENBQUM7OztPQUFBO0lBSUQsc0JBQUksOEJBQU87YUFBWCxjQUF5QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUloRCxzQkFBSSxrQ0FBVzthQUFmLGNBQTZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBRXhELHNCQUFJLG1DQUFZO2FBQWhCLGNBQThCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBSTFELHNCQUFJLDhCQUFPO2FBQVgsY0FBeUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFHaEQsc0JBQUksNEJBQUs7YUFBVCxjQUFvQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7T0FBQTtJQUl6RCxxQ0FBcUM7SUFDckMsZ0NBQWdDO0lBQ2hDLElBQUk7SUFFSiw2QkFBNkI7SUFDN0IsMkJBQTJCO0lBQzNCLElBQUk7SUFJSix3QkFBSSxHQUFKLFVBQUssTUFBZTtRQUNoQixpQkFBaUI7UUFFakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFD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YW1lIH0gZnJvbSBcIi4uL0dsb2JhbFwiO1xuaW1wb3J0IHsgVUlCYXNlIH0gZnJvbSBcIi4vVUlCYXNlXCI7XG5cbmV4cG9ydCBjbGFzcyBVSU1hbmFnZXIge1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luczogVUlNYW5hZ2VyID0gbnVsbDtcbiAgICBzdGF0aWMgZ2V0IGlucygpOiBVSU1hbmFnZXIge1xuICAgICAgICBpZiAodGhpcy5faW5zID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucyA9IG5ldyBVSU1hbmFnZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdWlSb290OiBjYy5Ob2RlO1xuICAgIHByaXZhdGUgX3VpTGF5ZXI6IGNjLk5vZGU7XG4gICAgZ2V0IHVpTGF5ZXIoKTogY2MuTm9kZSB7IHJldHVybiB0aGlzLl91aUxheWVyOyB9XG4gICAgcHJpdmF0ZSBfd2luZG93TG9ja0xheWVyOiBjYy5Ob2RlO1xuICAgIHByaXZhdGUgX3dpbmRvd0xheWVyOiBjYy5Ob2RlO1xuICAgIHByaXZhdGUgX3dpZGdldExheWVyOiBjYy5Ob2RlO1xuICAgIGdldCB3aWRnZXRMYXllcigpOiBjYy5Ob2RlIHsgcmV0dXJuIHRoaXMuX3dpZGdldExheWVyOyB9XG4gICAgcHJpdmF0ZSBfbG9hZGluZ0xheWVyOiBjYy5Ob2RlO1xuICAgIGdldCBsb2FkaW5nTGF5ZXIoKTogY2MuTm9kZSB7IHJldHVybiB0aGlzLl9sb2FkaW5nTGF5ZXI7IH1cbiAgICAvLyBwcml2YXRlIF9sb2FkaW5nTm9kZTogTm9kZTtcbiAgICBwcml2YXRlIF90aXBzTGF5ZXI6IGNjLk5vZGU7XG4gICAgcHJpdmF0ZSBfYWRMYXllcjogY2MuTm9kZTtcbiAgICBnZXQgYWRMYXllcigpOiBjYy5Ob2RlIHsgcmV0dXJuIHRoaXMuX2FkTGF5ZXI7IH1cblxuICAgIHByaXZhdGUgX2NhY2hlOiBNYXA8c3RyaW5nLCBjYy5Ob2RlPiA9IG5ldyBNYXA8c3RyaW5nLCBjYy5Ob2RlPigpO1xuICAgIGdldCBjYWNoZSgpOiBNYXA8c3RyaW5nLCBjYy5Ob2RlPiB7IHJldHVybiB0aGlzLl9jYWNoZTsgfVxuXG4gICAgcHJpdmF0ZSBfYWRSb290OiBjYy5Ob2RlO1xuXG4gICAgLy8gc2V0TG9hZGluZ05vZGUobm9kZTogTm9kZSk6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLl9sb2FkaW5nTm9kZSA9IG5vZGU7XG4gICAgLy8gfVxuXG4gICAgLy8gc2V0QWROb2RlKG5vZGU6IGNjLk5vZGUpIHtcbiAgICAvLyAgICAgdGhpcy5fYWRSb290ID0gbm9kZTtcbiAgICAvLyB9XG5cblxuXG4gICAgaW5pdCh1aVJvb3Q6IGNjLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy/lt7Lnu4/ov5vlhaXkuoZHYW1lTWFpbuWcuuaZr1xuXG4gICAgICAgIHRoaXMuX3VpUm9vdCA9IHVpUm9vdDtcbiAgICAgICAgdGhpcy5fdWlMYXllciA9IHRoaXMuX3VpUm9vdC5nZXRDaGlsZEJ5TmFtZShcInVpTGF5ZXJcIik7XG4gICAgICAgIHRoaXMuX3dpbmRvd0xvY2tMYXllciA9IHRoaXMuX3VpUm9vdC5nZXRDaGlsZEJ5TmFtZShcIndpbmRvd0JsY29rXCIpO1xuICAgICAgICB0aGlzLl93aW5kb3dMb2NrTGF5ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuX3dpbmRvd0xvY2tMYXllci5nZXRDb21wb25lbnQoV2lkZ2V0KS51cGRhdGVBbGlnbm1lbnQoKTtcbiAgICAgICAgdGhpcy5fd2luZG93TGF5ZXIgPSB0aGlzLl91aVJvb3QuZ2V0Q2hpbGRCeU5hbWUoXCJ3aW5kb3dMYXllclwiKTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0TGF5ZXIgPSB0aGlzLl91aVJvb3QuZ2V0Q2hpbGRCeU5hbWUoXCJ3aWRnZXRMYXllclwiKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0xheWVyID0gdGhpcy5fdWlSb290LmdldENoaWxkQnlOYW1lKFwibG9hZGluZ0xheWVyXCIpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nTGF5ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RpcHNMYXllciA9IHRoaXMuX3VpUm9vdC5nZXRDaGlsZEJ5TmFtZShcInRpcHNMYXllclwiKTtcblxuICAgICAgICB0aGlzLl9hZExheWVyID0gdGhpcy5fdWlSb290LmdldENoaWxkQnlOYW1lKFwiYWRMYXllclwiKTtcblxuICAgICAgICAvLyBpZiAodGhpcy5fbG9hZGluZ05vZGUpIHtcbiAgICAgICAgLy8gICAgIC8vIHRoaXMuX2xvYWRpbmdOb2RlLnJlbW92ZUZyb21QYXJlbnQoKTsgXG4gICAgICAgIC8vICAgICB0aGlzLl9sb2FkaW5nTGF5ZXIuYWRkQ2hpbGQodGhpcy5fbG9hZGluZ05vZGUpO1xuXG4gICAgICAgIC8vICAgICB0aGlzLl9sb2FkaW5nTm9kZS5nZXRDaGlsZEJ5TmFtZShcInR5cGUxXCIpLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAvLyAgICAgdGhpcy5fbG9hZGluZ05vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0eXBlMlwiKS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAvLyAgICAgdGhpcy5fbG9hZGluZ05vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyB1aVJvb3QuYWRkQ2hpbGQodGhpcy5fYWRSb290KTsvL+a3u+WKoOW5v+WRiuiKgueCuVxuXG4gICAgfVxuICAgIC8vIHN0YXRpYyBnZXQgYWRSb290KCkge1xuICAgIC8vICAgICBsZXQgX3NjZW5lOiBhbnkgPSBjYy5kaXJlY3Rvci5nZXRTY2VuZSgpO1xuICAgIC8vICAgICBsZXQgX2FkUm9vdCA9IF9zY2VuZS5nZXRDaGlsZEJ5TmFtZSgnQ2FudmFzJykuZ2V0Q2hpbGRCeU5hbWUoJ2FkTGF5ZXInKSBhcyBjYy5Ob2RlO1xuICAgIC8vICAgICBpZiAoX2FkUm9vdCA9PSBudWxsKSB7XG4gICAgLy8gICAgICAgICBfYWRSb290ID0gbmV3IGNjLk5vZGUoKTtcbiAgICAvLyAgICAgICAgIF9hZFJvb3QubmFtZSA9ICdhZExheWVyJztcbiAgICAvLyAgICAgICAgIF9hZFJvb3QucGFyZW50ID0gX3NjZW5lLmdldENoaWxkQnlOYW1lKCdDYW52YXMnKTtcbiAgICAvLyAgICAgICAgIF9hZFJvb3QueCA9IDA7XG4gICAgLy8gICAgICAgICBfYWRSb290LnkgPSAwO1xuICAgIC8vICAgICAgICAgX2FkUm9vdC53aWR0aCA9IGNjLndpblNpemUud2lkdGg7XG4gICAgLy8gICAgICAgICBfYWRSb290LmhlaWdodCA9IGNjLndpblNpemUuaGVpZ2h0O1xuICAgIC8vICAgICAgICAgX2FkUm9vdC5zZXRTaWJsaW5nSW5kZXgoOTk5KTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gX2FkUm9vdDtcbiAgICAvLyB9XG4gICAgb3BlblNjZW5lKG5hbWU6IHN0cmluZykge1xuXG4gICAgICAgIHRoaXMuX2xvYWRpbmdMYXllci5hY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX2xvYWRpbmdMYXllci5nZXRDaGlsZEJ5TmFtZSgnc2NlbmVOb2RlJykuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0xheWVyLmdldENoaWxkQnlOYW1lKCd3aW5kb3dOb2RlJykuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgY2MucmVzb3VyY2VzLmxvYWRTY2VuZSgnc2NlbmVzLycgKyBuYW1lLFxuICAgICAgICAgICAgKGZpbmlzaDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJnID0gZmluaXNoIC8gdG90YWw7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0xheWVyLmdldENoaWxkQnlOYW1lKCdzY2VuZU5vZGUnKS5nZXRDb21wb25lbnRJbkNoaWxkcmVuKGNjLlByb2dyZXNzQmFyKS5wcm9ncmVzcyA9IHByZztcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnJvciwgc2NlbmU6IGNjLlNjZW5lQXNzZXQpID0+IHtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdMYXllci5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjYy5kaXJlY3Rvci5ydW5TY2VuZShzY2VuZSk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGNjLmRpcmVjdG9yLnNjZW5lXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHR5cGUgXG4gICAgICogQHBhcmFtIGNhbGxCYWNrIOWPguaVsCB2aWV3OmNjLk5vZGVcbiAgICAgKi9cbiAgICBsb2FkV2luZG93KHR5cGU6IFdpbmRvd05hbWUsIGNhbGxCYWNrOiBGdW5jdGlvbikge1xuXG4gICAgICAgIGlmICh0aGlzLl9jYWNoZS5oYXModHlwZSkpIHtcbiAgICAgICAgICAgIGNhbGxCYWNrKHRoaXMuX2NhY2hlLmdldCh0eXBlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdMYXllci5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0xheWVyLmdldENoaWxkQnlOYW1lKCdzY2VuZU5vZGUnKS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdMYXllci5nZXRDaGlsZEJ5TmFtZSgnd2luZG93Tm9kZScpLmFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAgIGNjLnJlc291cmNlcy5sb2FkKHR5cGUsIGNjLlByZWZhYiwgKGVycm9yLCBwcmVmYWI6IGNjLlByZWZhYikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0xheWVyLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FjaGUuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmlldyA9IGNjLmluc3RhbnRpYXRlKHByZWZhYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5zZXQodHlwZSwgdmlldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsQmFjayh2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIG9wZW5XaW5kb3codHlwZTogV2luZG93TmFtZSwgb3BlblBhcmFtOiBhbnkgPSBudWxsKTogdm9pZCB7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5kb09wZW5XaW5kb3codGhpcy5fY2FjaGUuZ2V0KHR5cGUpLCBvcGVuUGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICAvLyB0aGlzLl9sb2FkaW5nTGF5ZXIuYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gdGhpcy5fbG9hZGluZ0xheWVyLmdldENoaWxkQnlOYW1lKCdzY2VuZU5vZGUnKS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHRoaXMuX2xvYWRpbmdMYXllci5nZXRDaGlsZEJ5TmFtZSgnd2luZG93Tm9kZScpLmFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIGNjLnJlc291cmNlcy5sb2FkKHR5cGUsIGNjLlByZWZhYixcblxuICAgICAgICAgICAgLy8gICAgIChmaW5pc2hlZCwgdG90YWwpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgbGV0IHByZyA9IGZpbmlzaGVkIC8gdG90YWw7XG4gICAgICAgICAgICAvLyAgICAgfSxcblxuICAgICAgICAgICAgLy8gICAgIChlcnJvciwgcHJlZmFiOiBjYy5QcmVmYWIpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgLy9maW5pc2hcblxuICAgICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuX2NhY2hlLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbGV0IHZpZXcgPSBjYy5pbnN0YW50aWF0ZShwcmVmYWIpO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5fY2FjaGUuc2V0KHR5cGUsIHZpZXcpO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0xheWVyLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5kb09wZW5XaW5kb3codmlldywgb3BlblBhcmFtKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRXaW5kb3codHlwZSwgKHZpZXc6IGNjLk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvT3BlbldpbmRvdyh2aWV3LCBvcGVuUGFyYW0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9PcGVuV2luZG93KHZpZXc6IGNjLk5vZGUsIHBhcmFtOiBhbnkpOiB2b2lkIHtcblxuICAgICAgICBpZiAoIXZpZXcucGFyZW50KSB7XG4gICAgICAgICAgICAhdGhpcy5fd2luZG93TG9ja0xheWVyLmFjdGl2ZSAmJiAodGhpcy5fd2luZG93TG9ja0xheWVyLmFjdGl2ZSA9IHRydWUpO1xuXG4gICAgICAgICAgICBsZXQgYmFzZSA9IHZpZXcuZ2V0Q29tcG9uZW50KFVJQmFzZSk7XG4gICAgICAgICAgICBiYXNlICYmIChiYXNlLmVuYWJsZVBhcmFtID0gcGFyYW0pO1xuXG4gICAgICAgICAgICB0aGlzLl93aW5kb3dMYXllci5hZGRDaGlsZCh2aWV3KTtcbiAgICAgICAgICAgIHZpZXcuYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICAgICAgYmFzZSAmJiBiYXNlLm9uUG9wVXBFZmZlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb3NlV2luZG93KHR5cGU6IFdpbmRvd05hbWUsIGNhbGxiYWNrOiBGdW5jdGlvbiA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgbGV0IHZpZXcgPSB0aGlzLl9jYWNoZS5nZXQodHlwZSk7XG5cbiAgICAgICAgICAgIC8vIHZpZXcuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgYmFzZSA9IHZpZXcuZ2V0Q29tcG9uZW50KFVJQmFzZSk7XG4gICAgICAgICAgICBiYXNlICYmIGJhc2Uub25CZWZvcmVDbG9zZSgpO1xuXG4gICAgICAgICAgICBiYXNlLm9uQ2xvc2VFZmZlY3QoKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgaXNPbldpbmRvd0xheWVyID0gKHZpZXcuaXNWYWxpZCAmJiB2aWV3LnBhcmVudCA9PT0gdGhpcy5fd2luZG93TGF5ZXIpXG5cbiAgICAgICAgICAgICAgICBpZiAoaXNPbldpbmRvd0xheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcucmVtb3ZlRnJvbVBhcmVudCgpO1xuICAgICAgICAgICAgICAgICAgICB2aWV3LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaWYgKGlzT25XaW5kb3dMYXllciAmJiB0aGlzLl93aW5kb3dMYXllci5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93aW5kb3dMb2NrTGF5ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRXaWRnZXROb2RlKHR5cGU6IFJlc1R5cGUpOiBjYy5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZGdldExheWVyLmdldENoaWxkQnlOYW1lKCd3aWRnZXQnICsgdHlwZS50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBzaG93VGlwcyhzdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBsZXQgbm9kZSA9IHRoaXMuX3RpcHNMYXllci5nZXRDaGlsZEJ5TmFtZSgnVGlwc05vZGUnKTtcbiAgICAgICAgLy8gbm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAvLyBub2RlLmdldENvbXBvbmVudEluQ2hpbGRyZW4oTGFiZWwpLnN0cmluZyA9IHN0cjtcblxuICAgICAgICAvLyBUd2Vlbi5zdG9wQWxsQnlUYXJnZXQobm9kZSk7XG4gICAgICAgIC8vIHR3ZWVuKG5vZGUpLmRlbGF5KDMpLmNhbGwodGhpcy5jbG9zZVRpcHMuYmluZCh0aGlzKSkuc3RhcnQoKVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VUaXBzKCk6IHZvaWQge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX3RpcHNMYXllci5nZXRDaGlsZEJ5TmFtZSgnVGlwc05vZGUnKTtcbiAgICAgICAgbm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBwbGF5UmVzRmx5RWZmZWN0XG59Il19