all files / src/js/base/ Context.js

94.78% Statements 127/134
81.82% Branches 45/55
96.55% Functions 28/29
94.74% Lines 126/133
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208         71× 71× 71× 71× 71× 71× 71×         96× 96× 96× 96×                     97×   97× 97×     97×   97× 2134×   97× 2134×       44×   182×                       145×             205× 205× 205× 205×     205×   2134× 2134× 2134× 485×     1649× 1455×     1649× 485×     2134×     2134× 2134×       44× 44× 34× 10×   34× 30×     44×   14779× 5950×   8829×   182×     182×         461× 461× 13× 13×     3211× 3211× 14× 14× 14×     1092× 1092× 1092× 1092× 1092× 1092× 1092× 1092×   1088× 1088×              
(function(global){global.wrappers['/Users/lqez/Dev/summernote/src/js/base/Context.js']=[function(require,module,exports,__dirname,__filename){ "use strict";
exports.__esModule = true;
var jquery_1 = require("jquery");
var func_1 = require("./core/func");
var lists_1 = require("./core/lists");
var dom_1 = require("./core/dom");
var Context = /** @class */ (function () {
    /**
     * @param {jQuery} $note
     * @param {Object} options
     */
    function Context($note, options) {
        this.ui = jquery_1["default"].summernote.ui;
        this.$note = $note;
        this.memos = {};
        this.modules = {};
        this.layoutInfo = {};
        this.options = options;
        this.initialize();
    }
    /**
     * create layout and initialize modules and other resources
     */
    Context.prototype.initialize = function () {
        this.layoutInfo = this.ui.createLayout(this.$note, this.options);
        this._initialize();
        this.$note.hide();
        return this;
    };
    /**
     * destroy modules and other resources and remove layout
     */
    Context.prototype.destroy = function () {
        this._destroy();
        this.$note.removeData('summernote');
        this.ui.removeLayout(this.$note, this.layoutInfo);
    };
    /**
     * destory modules and other resources and initialize it again
     */
    Context.prototype.reset = function () {
        var disabled = this.isDisabled();
        this.code(dom_1["default"].emptyPara);
        this._destroy();
        this._initialize();
        Eif (disabled) {
            this.disable();
        }
    };
    Context.prototype._initialize = function () {
        var _this = this;
        // add optional buttons
        var buttons = jquery_1["default"].extend({}, this.options.buttons);
        Object.keys(buttons).forEach(function (key) {
            _this.memo('button.' + key, buttons[key]);
        });
        var modules = jquery_1["default"].extend({}, this.options.modules, jquery_1["default"].summernote.plugins || {});
        // add and initialize modules
        Object.keys(modules).forEach(function (key) {
            _this.module(key, modules[key], true);
        });
        Object.keys(this.modules).forEach(function (key) {
            _this.initializeModule(key);
        });
    };
    Context.prototype._destroy = function () {
        var _this = this;
        // destroy modules with reversed order
        Object.keys(this.modules).reverse().forEach(function (key) {
            _this.removeModule(key);
        });
        Object.keys(this.memos).forEach(function (key) {
            _this.removeMemo(key);
        });
        // trigger custom onDestroy callback
        this.triggerEvent('destroy', this);
    };
    Context.prototype.code = function (html) {
        var isActivated = this.invoke('codeview.isActivated');
        if (html === undefined) {
            this.invoke('codeview.sync');
            return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();
        }
        else {
            Iif (isActivated) {
                this.layoutInfo.codable.val(html);
            }
            else {
                this.layoutInfo.editable.html(html);
            }
            this.$note.val(html);
            this.triggerEvent('change', html, this.layoutInfo.editable);
        }
    };
    Context.prototype.isDisabled = function () {
        return this.layoutInfo.editable.attr('contenteditable') === 'false';
    };
    Context.prototype.enable = function () {
        this.layoutInfo.editable.attr('contenteditable', true);
        this.invoke('toolbar.activate', true);
        this.triggerEvent('disable', false);
    };
    Context.prototype.disable = function () {
        // close codeview if codeview is opend
        Iif (this.invoke('codeview.isActivated')) {
            this.invoke('codeview.deactivate');
        }
        this.layoutInfo.editable.attr('contenteditable', false);
        this.invoke('toolbar.deactivate', true);
        this.triggerEvent('disable', true);
    };
    Context.prototype.triggerEvent = function () {
        var namespace = lists_1["default"].head(arguments);
        var args = lists_1["default"].tail(lists_1["default"].from(arguments));
        var callback = this.options.callbacks[func_1["default"].namespaceToCamel(namespace, 'on')];
        Iif (callback) {
            callback.apply(this.$note[0], args);
        }
        this.$note.trigger('summernote.' + namespace, args);
    };
    Context.prototype.initializeModule = function (key) {
        var module = this.modules[key];
        module.shouldInitialize = module.shouldInitialize || func_1["default"].ok;
        if (!module.shouldInitialize()) {
            return;
        }
        // initialize module
        if (module.initialize) {
            module.initialize();
        }
        // attach events
        if (module.events) {
            dom_1["default"].attachEvents(this.$note, module.events);
        }
    };
    Context.prototype.module = function (key, ModuleClass, withoutIntialize) {
        Iif (arguments.length === 1) {
            return this.modules[key];
        }
        this.modules[key] = new ModuleClass(this);
        Iif (!withoutIntialize) {
            this.initializeModule(key);
        }
    };
    Context.prototype.removeModule = function (key) {
        var module = this.modules[key];
        if (module.shouldInitialize()) {
            if (module.events) {
                dom_1["default"].detachEvents(this.$note, module.events);
            }
            if (module.destroy) {
                module.destroy();
            }
        }
        delete this.modules[key];
    };
    Context.prototype.memo = function (key, obj) {
        if (arguments.length === 1) {
            return this.memos[key];
        }
        this.memos[key] = obj;
    };
    Context.prototype.removeMemo = function (key) {
        Iif (this.memos[key] && this.memos[key].destroy) {
            this.memos[key].destroy();
        }
        delete this.memos[key];
    };
    /**
     * Some buttons need to change their visual style immediately once they get pressed
     */
    Context.prototype.createInvokeHandlerAndUpdateState = function (namespace, value) {
        var _this = this;
        return function (event) {
            _this.createInvokeHandler(namespace, value)(event);
            _this.invoke('buttons.updateCurrentStyle');
        };
    };
    Context.prototype.createInvokeHandler = function (namespace, value) {
        var _this = this;
        return function (event) {
            event.preventDefault();
            var $target = jquery_1["default"](event.target);
            _this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);
        };
    };
    Context.prototype.invoke = function () {
        var namespace = lists_1["default"].head(arguments);
        var args = lists_1["default"].tail(lists_1["default"].from(arguments));
        var splits = namespace.split('.');
        var hasSeparator = splits.length > 1;
        var moduleName = hasSeparator && lists_1["default"].head(splits);
        var methodName = hasSeparator ? lists_1["default"].last(splits) : lists_1["default"].head(splits);
        var module = this.modules[moduleName || 'editor'];
        if (!moduleName && this[methodName]) {
            return this[methodName].apply(this, args);
        }
        else Eif (module && module[methodName] && module.shouldInitialize()) {
            return module[methodName].apply(module, args);
        }
    };
    return Context;
}());
exports["default"] = Context;
 
},'src/js/base/Context.js',{"jquery":"/Users/lqez/Dev/summernote/node_modules/jquery/dist/jquery.js","./core/func":"/Users/lqez/Dev/summernote/src/js/base/core/func.js","./core/lists":"/Users/lqez/Dev/summernote/src/js/base/core/lists.js","./core/dom":"/Users/lqez/Dev/summernote/src/js/base/core/dom.js"}];})(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvbnRleHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBdUI7QUFDdkIsb0NBQStCO0FBQy9CLHNDQUFpQztBQUNqQyxrQ0FBNkI7QUFFN0I7SUFDRTs7O09BR0c7SUFDSCxpQkFBWSxLQUFLLEVBQUUsT0FBTztRQUN4QixJQUFJLENBQUMsRUFBRSxHQUFHLG1CQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsNEJBQVUsR0FBVjtRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCx5QkFBTyxHQUFQO1FBQ0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENB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QUN0RCxJQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLGtCQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxRSxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BFLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBQ0gsY0FBQztBQUFELENBQUMsQUFqT0QsSUFpT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGZ1bmMgZnJvbSAnLi9jb3JlL2Z1bmMnO1xuaW1wb3J0IGxpc3RzIGZyb20gJy4vY29yZS9saXN0cyc7XG5pbXBvcnQgZG9tIGZyb20gJy4vY29yZS9kb20nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkbm90ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoJG5vdGUsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnVpID0gJC5zdW1tZXJub3RlLnVpO1xuICAgIHRoaXMuJG5vdGUgPSAkbm90ZTtcblxuICAgIHRoaXMubWVtb3MgPSB7fTtcbiAgICB0aGlzLm1vZHVsZXMgPSB7fTtcbiAgICB0aGlzLmxheW91dEluZm8gPSB7fTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGxheW91dCBhbmQgaW5pdGlhbGl6ZSBtb2R1bGVzIGFuZCBvdGhlciByZXNvdXJjZXNcbiAgICovXG4gIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5sYXlvdXRJbmZvID0gdGhpcy51aS5jcmVhdGVMYXlvdXQodGhpcy4kbm90ZSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLl9pbml0aWFsaXplKCk7XG4gICAgdGhpcy4kbm90ZS5oaWRlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZGVzdHJveSBtb2R1bGVzIGFuZCBvdGhlciByZXNvdXJjZXMgYW5kIHJlbW92ZSBsYXlvdXRcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSgpO1xuICAgIHRoaXMuJG5vdGUucmVtb3ZlRGF0YSgnc3VtbWVybm90ZScpO1xuICAgIHRoaXMudWkucmVtb3ZlTGF5b3V0KHRoaXMuJG5vdGUsIHRoaXMubGF5b3V0SW5mbyk7XG4gIH1cblxuICAvKipcbiAgICogZGVzdG9yeSBtb2R1bGVzIGFuZCBvdGhlciByZXNvdXJjZXMgYW5kIGluaXRpYWxpemUgaXQgYWdhaW5cbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG4gICAgdGhpcy5jb2RlKGRvbS5lbXB0eVBhcmEpO1xuICAgIHRoaXMuX2Rlc3Ryb3koKTtcbiAgICB0aGlzLl9pbml0aWFsaXplKCk7XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9pbml0aWFsaXplKCkge1xuICAgIC8vIGFkZCBvcHRpb25hbCBidXR0b25zXG4gICAgY29uc3QgYnV0dG9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMuYnV0dG9ucyk7XG4gICAgT2JqZWN0LmtleXMoYnV0dG9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLm1lbW8oJ2J1dHRvbi4nICsga2V5LCBidXR0b25zW2tleV0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbW9kdWxlcyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMubW9kdWxlcywgJC5zdW1tZXJub3RlLnBsdWdpbnMgfHwge30pO1xuXG4gICAgLy8gYWRkIGFuZCBpbml0aWFsaXplIG1vZHVsZXNcbiAgICBPYmplY3Qua2V5cyhtb2R1bGVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHRoaXMubW9kdWxlKGtleSwgbW9kdWxlc1trZXldLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMubW9kdWxlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLmluaXRpYWxpemVNb2R1bGUoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9kZXN0cm95KCkge1xuICAgIC8vIGRlc3Ryb3kgbW9kdWxlcyB3aXRoIHJldmVyc2VkIG9yZGVyXG4gICAgT2JqZWN0LmtleXModGhpcy5tb2R1bGVzKS5yZXZlcnNlKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZU1vZHVsZShrZXkpO1xuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5tZW1vcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZU1lbW8oa2V5KTtcbiAgICB9KTtcbiAgICAvLyB0cmlnZ2VyIGN1c3RvbSBvbkRlc3Ryb3kgY2FsbGJhY2tcbiAgICB0aGlzLnRyaWdnZXJFdmVudCgnZGVzdHJveScsIHRoaXMpO1xuICB9XG5cbiAgY29kZShodG1sKSB7XG4gICAgY29uc3QgaXNBY3RpdmF0ZWQgPSB0aGlzLmludm9rZSgnY29kZXZpZXcuaXNBY3RpdmF0ZWQnKTtcblxuICAgIGlmIChodG1sID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW52b2tlKCdjb2Rldmlldy5zeW5jJyk7XG4gICAgICByZXR1cm4gaXNBY3RpdmF0ZWQgPyB0aGlzLmxheW91dEluZm8uY29kYWJsZS52YWwoKSA6IHRoaXMubGF5b3V0SW5mby5lZGl0YWJsZS5odG1sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0FjdGl2YXRlZCkge1xuICAgICAgICB0aGlzLmxheW91dEluZm8uY29kYWJsZS52YWwoaHRtbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxheW91dEluZm8uZWRpdGFibGUuaHRtbChodG1sKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJG5vdGUudmFsKGh0bWwpO1xuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2NoYW5nZScsIGh0bWwsIHRoaXMubGF5b3V0SW5mby5lZGl0YWJsZSk7XG4gICAgfVxuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRJbmZvLmVkaXRhYmxlLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScpID09PSAnZmFsc2UnO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMubGF5b3V0SW5mby5lZGl0YWJsZS5hdHRyKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKTtcbiAgICB0aGlzLmludm9rZSgndG9vbGJhci5hY3RpdmF0ZScsIHRydWUpO1xuICAgIHRoaXMudHJpZ2dlckV2ZW50KCdkaXNhYmxlJywgZmFsc2UpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICAvLyBjbG9zZSBjb2RldmlldyBpZiBjb2RldmlldyBpcyBvcGVuZFxuICAgIGlmICh0aGlzLmludm9rZSgnY29kZXZpZXcuaXNBY3RpdmF0ZWQnKSkge1xuICAgICAgdGhpcy5pbnZva2UoJ2NvZGV2aWV3LmRlYWN0aXZhdGUnKTtcbiAgICB9XG4gICAgdGhpcy5sYXlvdXRJbmZvLmVkaXRhYmxlLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScsIGZhbHNlKTtcbiAgICB0aGlzLmludm9rZSgndG9vbGJhci5kZWFjdGl2YXRlJywgdHJ1ZSk7XG5cbiAgICB0aGlzLnRyaWdnZXJFdmVudCgnZGlzYWJsZScsIHRydWUpO1xuICB9XG5cbiAgdHJpZ2dlckV2ZW50KCkge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGxpc3RzLmhlYWQoYXJndW1lbnRzKTtcbiAgICBjb25zdCBhcmdzID0gbGlzdHMudGFpbChsaXN0cy5mcm9tKGFyZ3VtZW50cykpO1xuXG4gICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLm9wdGlvbnMuY2FsbGJhY2tzW2Z1bmMubmFtZXNwYWNlVG9DYW1lbChuYW1lc3BhY2UsICdvbicpXTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMuJG5vdGVbMF0sIGFyZ3MpO1xuICAgIH1cbiAgICB0aGlzLiRub3RlLnRyaWdnZXIoJ3N1bW1lcm5vdGUuJyArIG5hbWVzcGFjZSwgYXJncyk7XG4gIH1cblxuICBpbml0aWFsaXplTW9kdWxlKGtleSkge1xuICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1trZXldO1xuICAgIG1vZHVsZS5zaG91bGRJbml0aWFsaXplID0gbW9kdWxlLnNob3VsZEluaXRpYWxpemUgfHwgZnVuYy5vaztcbiAgICBpZiAoIW1vZHVsZS5zaG91bGRJbml0aWFsaXplKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpbml0aWFsaXplIG1vZHVsZVxuICAgIGlmIChtb2R1bGUuaW5pdGlhbGl6ZSkge1xuICAgICAgbW9kdWxlLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICAvLyBhdHRhY2ggZXZlbnRzXG4gICAgaWYgKG1vZHVsZS5ldmVudHMpIHtcbiAgICAgIGRvbS5hdHRhY2hFdmVudHModGhpcy4kbm90ZSwgbW9kdWxlLmV2ZW50cyk7XG4gICAgfVxuICB9XG5cbiAgbW9kdWxlKGtleSwgTW9kdWxlQ2xhc3MsIHdpdGhvdXRJbnRpYWxpemUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kdWxlc1trZXldO1xuICAgIH1cblxuICAgIHRoaXMubW9kdWxlc1trZXldID0gbmV3IE1vZHVsZUNsYXNzKHRoaXMpO1xuXG4gICAgaWYgKCF3aXRob3V0SW50aWFsaXplKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVNb2R1bGUoa2V5KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVNb2R1bGUoa2V5KSB7XG4gICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzW2tleV07XG4gICAgaWYgKG1vZHVsZS5zaG91bGRJbml0aWFsaXplKCkpIHtcbiAgICAgIGlmIChtb2R1bGUuZXZlbnRzKSB7XG4gICAgICAgIGRvbS5kZXRhY2hFdmVudHModGhpcy4kbm90ZSwgbW9kdWxlLmV2ZW50cyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUuZGVzdHJveSkge1xuICAgICAgICBtb2R1bGUuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLm1vZHVsZXNba2V5XTtcbiAgfVxuXG4gIG1lbW8oa2V5LCBvYmopIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtb3Nba2V5XTtcbiAgICB9XG4gICAgdGhpcy5tZW1vc1trZXldID0gb2JqO1xuICB9XG5cbiAgcmVtb3ZlTWVtbyhrZXkpIHtcbiAgICBpZiAodGhpcy5tZW1vc1trZXldICYmIHRoaXMubWVtb3Nba2V5XS5kZXN0cm95KSB7XG4gICAgICB0aGlzLm1lbW9zW2tleV0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLm1lbW9zW2tleV07XG4gIH1cblxuICAvKipcbiAgICogU29tZSBidXR0b25zIG5lZWQgdG8gY2hhbmdlIHRoZWlyIHZpc3VhbCBzdHlsZSBpbW1lZGlhdGVseSBvbmNlIHRoZXkgZ2V0IHByZXNzZWRcbiAgICovXG4gIGNyZWF0ZUludm9rZUhhbmRsZXJBbmRVcGRhdGVTdGF0ZShuYW1lc3BhY2UsIHZhbHVlKSB7XG4gICAgcmV0dXJuIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVJbnZva2VIYW5kbGVyKG5hbWVzcGFjZSwgdmFsdWUpKGV2ZW50KTtcbiAgICAgIHRoaXMuaW52b2tlKCdidXR0b25zLnVwZGF0ZUN1cnJlbnRTdHlsZScpO1xuICAgIH07XG4gIH1cblxuICBjcmVhdGVJbnZva2VIYW5kbGVyKG5hbWVzcGFjZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgIHRoaXMuaW52b2tlKG5hbWVzcGFjZSwgdmFsdWUgfHwgJHRhcmdldC5jbG9zZXN0KCdbZGF0YS12YWx1ZV0nKS5kYXRhKCd2YWx1ZScpLCAkdGFyZ2V0KTtcbiAgICB9O1xuICB9XG5cbiAgaW52b2tlKCkge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGxpc3RzLmhlYWQoYXJndW1lbnRzKTtcbiAgICBjb25zdCBhcmdzID0gbGlzdHMudGFpbChsaXN0cy5mcm9tKGFyZ3VtZW50cykpO1xuXG4gICAgY29uc3Qgc3BsaXRzID0gbmFtZXNwYWNlLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgaGFzU2VwYXJhdG9yID0gc3BsaXRzLmxlbmd0aCA+IDE7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IGhhc1NlcGFyYXRvciAmJiBsaXN0cy5oZWFkKHNwbGl0cyk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGhhc1NlcGFyYXRvciA/IGxpc3RzLmxhc3Qoc3BsaXRzKSA6IGxpc3RzLmhlYWQoc3BsaXRzKTtcblxuICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lIHx8ICdlZGl0b3InXTtcbiAgICBpZiAoIW1vZHVsZU5hbWUgJiYgdGhpc1ttZXRob2ROYW1lXSkge1xuICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBlbHNlIGlmIChtb2R1bGUgJiYgbW9kdWxlW21ldGhvZE5hbWVdICYmIG1vZHVsZS5zaG91bGRJbml0aWFsaXplKCkpIHtcbiAgICAgIHJldHVybiBtb2R1bGVbbWV0aG9kTmFtZV0uYXBwbHkobW9kdWxlLCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==