all files / src/js/base/module/ ImageDialog.js

41.1% Statements 30/73
12.5% Branches 2/16
33.33% Functions 6/18
40.28% Lines 29/72
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 97× 97× 97× 97× 97× 97×   97× 97× 97×           97×                         97× 97× 97×                                                                                                                                                                    
(function(global){global.wrappers['/Users/lqez/Dev/summernote/src/js/base/module/ImageDialog.js']=[function(require,module,exports,__dirname,__filename){ "use strict";
exports.__esModule = true;
var jquery_1 = require("jquery");
var env_1 = require("../core/env");
var key_1 = require("../core/key");
var ImageDialog = /** @class */ (function () {
    function ImageDialog(context) {
        this.context = context;
        this.ui = jquery_1["default"].summernote.ui;
        this.$body = jquery_1["default"](document.body);
        this.$editor = context.layoutInfo.editor;
        this.options = context.options;
        this.lang = this.options.langInfo;
    }
    ImageDialog.prototype.initialize = function () {
        var $container = this.options.dialogsInBody ? this.$body : this.$editor;
        var imageLimitation = '';
        Iif (this.options.maximumImageFileSize) {
            var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));
            var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +
                ' ' + ' KMGTP'[unit] + 'B';
            imageLimitation = "<small>" + (this.lang.image.maximumFileSize + ' : ' + readableSize) + "</small>";
        }
        var body = [
            '<div class="form-group note-form-group note-group-select-from-files">',
            '<label class="note-form-label">' + this.lang.image.selectFromFiles + '</label>',
            '<input class="note-image-input form-control-file note-form-control note-input" ',
            ' type="file" name="files" accept="image/*" multiple="multiple" />',
            imageLimitation,
            '</div>',
            '<div class="form-group note-group-image-url" style="overflow:auto;">',
            '<label class="note-form-label">' + this.lang.image.url + '</label>',
            '<input class="note-image-url form-control note-form-control note-input ',
            ' col-md-12" type="text" />',
            '</div>',
        ].join('');
        var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';
        var footer = "<input type=\"button\" href=\"#\" class=\"" + buttonClass + "\" value=\"" + this.lang.image.insert + "\" disabled>";
        this.$dialog = this.ui.dialog({
            title: this.lang.image.insert,
            fade: this.options.dialogsFade,
            body: body,
            footer: footer
        }).render().appendTo($container);
    };
    ImageDialog.prototype.destroy = function () {
        this.ui.hideDialog(this.$dialog);
        this.$dialog.remove();
    };
    ImageDialog.prototype.bindEnterKey = function ($input, $btn) {
        $input.on('keypress', function (event) {
            if (event.keyCode === key_1["default"].code.ENTER) {
                event.preventDefault();
                $btn.trigger('click');
            }
        });
    };
    ImageDialog.prototype.show = function () {
        var _this = this;
        this.context.invoke('editor.saveRange');
        this.showImageDialog().then(function (data) {
            // [workaround] hide dialog before restore range for IE range focus
            _this.ui.hideDialog(_this.$dialog);
            _this.context.invoke('editor.restoreRange');
            if (typeof data === 'string') { // image url
                // If onImageLinkInsert set,
                if (_this.options.callbacks.onImageLinkInsert) {
                    _this.context.triggerEvent('image.link.insert', data);
                }
                else {
                    _this.context.invoke('editor.insertImage', data);
                }
            }
            else { // array of files
                _this.context.invoke('editor.insertImagesOrCallback', data);
            }
        }).fail(function () {
            _this.context.invoke('editor.restoreRange');
        });
    };
    /**
     * show image dialog
     *
     * @param {jQuery} $dialog
     * @return {Promise}
     */
    ImageDialog.prototype.showImageDialog = function () {
        var _this = this;
        return jquery_1["default"].Deferred(function (deferred) {
            var $imageInput = _this.$dialog.find('.note-image-input');
            var $imageUrl = _this.$dialog.find('.note-image-url');
            var $imageBtn = _this.$dialog.find('.note-image-btn');
            _this.ui.onDialogShown(_this.$dialog, function () {
                _this.context.triggerEvent('dialog.shown');
                // Cloning imageInput to clear element.
                $imageInput.replaceWith($imageInput.clone().on('change', function (event) {
                    deferred.resolve(event.target.files || event.target.value);
                }).val(''));
                $imageBtn.click(function (event) {
                    event.preventDefault();
                    deferred.resolve($imageUrl.val());
                });
                $imageUrl.on('keyup paste', function () {
                    var url = $imageUrl.val();
                    _this.ui.toggleBtn($imageBtn, url);
                }).val('');
                if (!env_1["default"].isSupportTouch) {
                    $imageUrl.trigger('focus');
                }
                _this.bindEnterKey($imageUrl, $imageBtn);
            });
            _this.ui.onDialogHidden(_this.$dialog, function () {
                $imageInput.off('change');
                $imageUrl.off('keyup paste keypress');
                $imageBtn.off('click');
                if (deferred.state() === 'pending') {
                    deferred.reject();
                }
            });
            _this.ui.showDialog(_this.$dialog);
        });
    };
    return ImageDialog;
}());
exports["default"] = ImageDialog;
 
},'src/js/base/module/ImageDialog.js',{"jquery":"/Users/lqez/Dev/summernote/node_modules/jquery/dist/jquery.js","../core/env":"/Users/lqez/Dev/summernote/src/js/base/core/env.js","../core/key":"/Users/lqez/Dev/summernote/src/js/base/core/key.js"}];})(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2VEaWFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJJbWFnZURpYWxvZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUF1QjtBQUN2QixtQ0FBOEI7QUFDOUIsbUNBQThCO0FBRTlCO0lBQ0UscUJBQVksT0FBTztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLG1CQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLG1CQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVELGdDQUFVLEdBQVY7UUFDRSxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUUxRSxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFO1lBQ3JDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLElBQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FB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LE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUU7b0JBQzFCLElBQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDNUIsS0FBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRVgsSUFBSSxDQUFDLGdCQUFHLENBQUMsY0FBYyxFQUFFO29CQUN2QixTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM1QjtnQkFDRCxLQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUVILEtBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ25DLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFdkIsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssU0FBUyxFQUFFO29CQUNsQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ25CO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxLQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBbklELElBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBlbnYgZnJvbSAnLi4vY29yZS9lbnYnO1xuaW1wb3J0IGtleSBmcm9tICcuLi9jb3JlL2tleSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlRGlhbG9nIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCkge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy51aSA9ICQuc3VtbWVybm90ZS51aTtcbiAgICB0aGlzLiRib2R5ID0gJChkb2N1bWVudC5ib2R5KTtcbiAgICB0aGlzLiRlZGl0b3IgPSBjb250ZXh0LmxheW91dEluZm8uZWRpdG9yO1xuICAgIHRoaXMub3B0aW9ucyA9IGNvbnRleHQub3B0aW9ucztcbiAgICB0aGlzLmxhbmcgPSB0aGlzLm9wdGlvbnMubGFuZ0luZm87XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIGNvbnN0ICRjb250YWluZXIgPSB0aGlzLm9wdGlvbnMuZGlhbG9nc0luQm9keSA/IHRoaXMuJGJvZHkgOiB0aGlzLiRlZGl0b3I7XG5cbiAgICBsZXQgaW1hZ2VMaW1pdGF0aW9uID0gJyc7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhpbXVtSW1hZ2VGaWxlU2l6ZSkge1xuICAgICAgY29uc3QgdW5pdCA9IE1hdGguZmxvb3IoTWF0aC5sb2codGhpcy5vcHRpb25zLm1heGltdW1JbWFnZUZpbGVTaXplKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgICAgIGNvbnN0IHJlYWRhYmxlU2l6ZSA9ICh0aGlzLm9wdGlvbnMubWF4aW11bUltYWdlRmlsZVNpemUgLyBNYXRoLnBvdygxMDI0LCB1bml0KSkudG9GaXhlZCgyKSAqIDEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICcgJyArICcgS01HVFAnW3VuaXRdICsgJ0InO1xuICAgICAgaW1hZ2VMaW1pdGF0aW9uID0gYDxzbWFsbD4ke3RoaXMubGFuZy5pbWFnZS5tYXhpbXVtRmlsZVNpemUgKyAnIDogJyArIHJlYWRhYmxlU2l6ZX08L3NtYWxsPmA7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IFtcbiAgICAgICc8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBub3RlLWZvcm0tZ3JvdXAgbm90ZS1ncm91cC1zZWxlY3QtZnJvbS1maWxlc1wiPicsXG4gICAgICAnPGxhYmVsIGNsYXNzPVwibm90ZS1mb3JtLWxhYmVsXCI+JyArIHRoaXMubGFuZy5pbWFnZS5zZWxlY3RGcm9tRmlsZXMgKyAnPC9sYWJlbD4nLFxuICAgICAgJzxpbnB1dCBjbGFzcz1cIm5vdGUtaW1hZ2UtaW5wdXQgZm9ybS1jb250cm9sLWZpbGUgbm90ZS1mb3JtLWNvbnRyb2wgbm90ZS1pbnB1dFwiICcsXG4gICAgICAnIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVzXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIG11bHRpcGxlPVwibXVsdGlwbGVcIiAvPicsXG4gICAgICBpbWFnZUxpbWl0YXRpb24sXG4gICAgICAnPC9kaXY+JyxcbiAgICAgICc8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBub3RlLWdyb3VwLWltYWdlLXVybFwiIHN0eWxlPVwib3ZlcmZsb3c6YXV0bztcIj4nLFxuICAgICAgJzxsYWJlbCBjbGFzcz1cIm5vdGUtZm9ybS1sYWJlbFwiPicgKyB0aGlzLmxhbmcuaW1hZ2UudXJsICsgJzwvbGFiZWw+JyxcbiAgICAgICc8aW5wdXQgY2xhc3M9XCJub3RlLWltYWdlLXVybCBmb3JtLWNvbnRyb2wgbm90ZS1mb3JtLWNvbnRyb2wgbm90ZS1pbnB1dCAnLFxuICAgICAgJyBjb2wtbWQtMTJcIiB0eXBlPVwidGV4dFwiIC8+JyxcbiAgICAgICc8L2Rpdj4nLFxuICAgIF0uam9pbignJyk7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAnYnRuIGJ0bi1wcmltYXJ5IG5vdGUtYnRuIG5vdGUtYnRuLXByaW1hcnkgbm90ZS1pbWFnZS1idG4nO1xuICAgIGNvbnN0IGZvb3RlciA9IGA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGhyZWY9XCIjXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfVwiIHZhbHVlPVwiJHt0aGlzLmxhbmcuaW1hZ2UuaW5zZXJ0fVwiIGRpc2FibGVkPmA7XG5cbiAgICB0aGlzLiRkaWFsb2cgPSB0aGlzLnVpLmRpYWxvZyh7XG4gICAgICB0aXRsZTogdGhpcy5sYW5nLmltYWdlLmluc2VydCxcbiAgICAgIGZhZGU6IHRoaXMub3B0aW9ucy5kaWFsb2dzRmFkZSxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICBmb290ZXI6IGZvb3RlcixcbiAgICB9KS5yZW5kZXIoKS5hcHBlbmRUbygkY29udGFpbmVyKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy51aS5oaWRlRGlhbG9nKHRoaXMuJGRpYWxvZyk7XG4gICAgdGhpcy4kZGlhbG9nLnJlbW92ZSgpO1xuICB9XG5cbiAgYmluZEVudGVyS2V5KCRpbnB1dCwgJGJ0bikge1xuICAgICRpbnB1dC5vbigna2V5cHJlc3MnLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBrZXkuY29kZS5FTlRFUikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkYnRuLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuY29udGV4dC5pbnZva2UoJ2VkaXRvci5zYXZlUmFuZ2UnKTtcbiAgICB0aGlzLnNob3dJbWFnZURpYWxvZygpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIC8vIFt3b3JrYXJvdW5kXSBoaWRlIGRpYWxvZyBiZWZvcmUgcmVzdG9yZSByYW5nZSBmb3IgSUUgcmFuZ2UgZm9jdXNcbiAgICAgIHRoaXMudWkuaGlkZURpYWxvZyh0aGlzLiRkaWFsb2cpO1xuICAgICAgdGhpcy5jb250ZXh0Lmludm9rZSgnZWRpdG9yLnJlc3RvcmVSYW5nZScpO1xuXG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7IC8vIGltYWdlIHVybFxuICAgICAgICAvLyBJZiBvbkltYWdlTGlua0luc2VydCBzZXQsXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2FsbGJhY2tzLm9uSW1hZ2VMaW5rSW5zZXJ0KSB7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnRyaWdnZXJFdmVudCgnaW1hZ2UubGluay5pbnNlcnQnLCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuaW52b2tlKCdlZGl0b3IuaW5zZXJ0SW1hZ2UnLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgLy8gYXJyYXkgb2YgZmlsZXNcbiAgICAgICAgdGhpcy5jb250ZXh0Lmludm9rZSgnZWRpdG9yLmluc2VydEltYWdlc09yQ2FsbGJhY2snLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9KS5mYWlsKCgpID0+IHtcbiAgICAgIHRoaXMuY29udGV4dC5pbnZva2UoJ2VkaXRvci5yZXN0b3JlUmFuZ2UnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzaG93IGltYWdlIGRpYWxvZ1xuICAgKlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGRpYWxvZ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgc2hvd0ltYWdlRGlhbG9nKCkge1xuICAgIHJldHVybiAkLkRlZmVycmVkKChkZWZlcnJlZCkgPT4ge1xuICAgICAgY29uc3QgJGltYWdlSW5wdXQgPSB0aGlzLiRkaWFsb2cuZmluZCgnLm5vdGUtaW1hZ2UtaW5wdXQnKTtcbiAgICAgIGNvbnN0ICRpbWFnZVVybCA9IHRoaXMuJGRpYWxvZy5maW5kKCcubm90ZS1pbWFnZS11cmwnKTtcbiAgICAgIGNvbnN0ICRpbWFnZUJ0biA9IHRoaXMuJGRpYWxvZy5maW5kKCcubm90ZS1pbWFnZS1idG4nKTtcblxuICAgICAgdGhpcy51aS5vbkRpYWxvZ1Nob3duKHRoaXMuJGRpYWxvZywgKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRleHQudHJpZ2dlckV2ZW50KCdkaWFsb2cuc2hvd24nKTtcblxuICAgICAgICAvLyBDbG9uaW5nIGltYWdlSW5wdXQgdG8gY2xlYXIgZWxlbWVudC5cbiAgICAgICAgJGltYWdlSW5wdXQucmVwbGFjZVdpdGgoJGltYWdlSW5wdXQuY2xvbmUoKS5vbignY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShldmVudC50YXJnZXQuZmlsZXMgfHwgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfSkudmFsKCcnKSk7XG5cbiAgICAgICAgJGltYWdlQnRuLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCRpbWFnZVVybC52YWwoKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRpbWFnZVVybC5vbigna2V5dXAgcGFzdGUnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXJsID0gJGltYWdlVXJsLnZhbCgpO1xuICAgICAgICAgIHRoaXMudWkudG9nZ2xlQnRuKCRpbWFnZUJ0biwgdXJsKTtcbiAgICAgICAgfSkudmFsKCcnKTtcblxuICAgICAgICBpZiAoIWVudi5pc1N1cHBvcnRUb3VjaCkge1xuICAgICAgICAgICRpbWFnZVVybC50cmlnZ2VyKCdmb2N1cycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZEVudGVyS2V5KCRpbWFnZVVybCwgJGltYWdlQnRuKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnVpLm9uRGlhbG9nSGlkZGVuKHRoaXMuJGRpYWxvZywgKCkgPT4ge1xuICAgICAgICAkaW1hZ2VJbnB1dC5vZmYoJ2NoYW5nZScpO1xuICAgICAgICAkaW1hZ2VVcmwub2ZmKCdrZXl1cCBwYXN0ZSBrZXlwcmVzcycpO1xuICAgICAgICAkaW1hZ2VCdG4ub2ZmKCdjbGljaycpO1xuXG4gICAgICAgIGlmIChkZWZlcnJlZC5zdGF0ZSgpID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudWkuc2hvd0RpYWxvZyh0aGlzLiRkaWFsb2cpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=