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

72.09% Statements 62/86
59.38% Branches 19/32
66.67% Functions 12/18
71.76% Lines 61/85
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                         100× 100× 100× 100× 100×               20×                           10×                     10×                                                                                                    
(function(global){global.wrappers['/Users/lqez/Dev/summernote/src/js/base/module/Codeview.js']=[function(require,module,exports,__dirname,__filename){ "use strict";
exports.__esModule = true;
var env_1 = require("../core/env");
var dom_1 = require("../core/dom");
var CodeMirror;
Iif (env_1["default"].hasCodeMirror) {
    if (env_1["default"].isSupportAmd) {
        require(['codemirror'], function (cm) {
            CodeMirror = cm;
        });
    }
    else {
        CodeMirror = window.CodeMirror;
    }
}
/**
 * @class Codeview
 */
var CodeView = /** @class */ (function () {
    function CodeView(context) {
        this.context = context;
        this.$editor = context.layoutInfo.editor;
        this.$editable = context.layoutInfo.editable;
        this.$codable = context.layoutInfo.codable;
        this.options = context.options;
    }
    CodeView.prototype.sync = function () {
        var isCodeview = this.isActivated();
        Iif (isCodeview && env_1["default"].hasCodeMirror) {
            this.$codable.data('cmEditor').save();
        }
    };
    /**
     * @return {Boolean}
     */
    CodeView.prototype.isActivated = function () {
        return this.$editor.hasClass('codeview');
    };
    /**
     * toggle codeview
     */
    CodeView.prototype.toggle = function () {
        if (this.isActivated()) {
            this.deactivate();
        }
        else {
            this.activate();
        }
        this.context.triggerEvent('codeview.toggled');
    };
    /**
     * purify input value
     * @param value
     * @returns {*}
     */
    CodeView.prototype.purify = function (value) {
        if (this.options.codeviewFilter) {
            // filter code view regex
            value = value.replace(this.options.codeviewFilterRegex, '');
            // allow specific iframe tag
            if (this.options.codeviewIframeFilter) {
                var whitelist_1 = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);
                value = value.replace(/(<iframe.*?>.*?(?:<\/iframe>)?)/gi, function (tag) {
                    // remove if src attribute is duplicated
                    if (/<.+src(?==?('|"|\s)?)[\s\S]+src(?=('|"|\s)?)[^>]*?>/i.test(tag)) {
                        return '';
                    }
                    for (var _i = 0, whitelist_2 = whitelist_1; _i < whitelist_2.length; _i++) {
                        var src = whitelist_2[_i];
                        // pass if src is trusted
                        if ((new RegExp('src="(https?:)?\/\/' + src + '\/(.+)"')).test(tag)) {
                            return tag;
                        }
                    }
                    return '';
                });
            }
        }
        return value;
    };
    /**
     * activate code view
     */
    CodeView.prototype.activate = function () {
        var _this = this;
        this.$codable.val(dom_1["default"].html(this.$editable, this.options.prettifyHtml));
        this.$codable.height(this.$editable.height());
        this.context.invoke('toolbar.updateCodeview', true);
        this.$editor.addClass('codeview');
        this.$codable.focus();
        // activate CodeMirror as codable
        Iif (env_1["default"].hasCodeMirror) {
            var cmEditor_1 = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);
            // CodeMirror TernServer
            if (this.options.codemirror.tern) {
                var server_1 = new CodeMirror.TernServer(this.options.codemirror.tern);
                cmEditor_1.ternServer = server_1;
                cmEditor_1.on('cursorActivity', function (cm) {
                    server_1.updateArgHints(cm);
                });
            }
            cmEditor_1.on('blur', function (event) {
                _this.context.triggerEvent('blur.codeview', cmEditor_1.getValue(), event);
            });
            cmEditor_1.on('change', function (event) {
                _this.context.triggerEvent('change.codeview', cmEditor_1.getValue(), cmEditor_1);
            });
            // CodeMirror hasn't Padding.
            cmEditor_1.setSize(null, this.$editable.outerHeight());
            this.$codable.data('cmEditor', cmEditor_1);
        }
        else {
            this.$codable.on('blur', function (event) {
                _this.context.triggerEvent('blur.codeview', _this.$codable.val(), event);
            });
            this.$codable.on('input', function (event) {
                _this.context.triggerEvent('change.codeview', _this.$codable.val(), _this.$codable);
            });
        }
    };
    /**
     * deactivate code view
     */
    CodeView.prototype.deactivate = function () {
        // deactivate CodeMirror as codable
        Iif (env_1["default"].hasCodeMirror) {
            var cmEditor = this.$codable.data('cmEditor');
            this.$codable.val(cmEditor.getValue());
            cmEditor.toTextArea();
        }
        var value = this.purify(dom_1["default"].value(this.$codable, this.options.prettifyHtml) || dom_1["default"].emptyPara);
        var isChange = this.$editable.html() !== value;
        this.$editable.html(value);
        this.$editable.height(this.options.height ? this.$codable.height() : 'auto');
        this.$editor.removeClass('codeview');
        Iif (isChange) {
            this.context.triggerEvent('change', this.$editable.html(), this.$editable);
        }
        this.$editable.focus();
        this.context.invoke('toolbar.updateCodeview', false);
    };
    CodeView.prototype.destroy = function () {
        Iif (this.isActivated()) {
            this.deactivate();
        }
    };
    return CodeView;
}());
exports["default"] = CodeView;
 
},'src/js/base/module/Codeview.js',{"../core/env":"/Users/lqez/Dev/summernote/src/js/base/core/env.js","../core/dom":"/Users/lqez/Dev/summernote/src/js/base/core/dom.js"}];})(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJDb2Rldmlldy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUE4QjtBQUM5QixtQ0FBOEI7QUFFOUIsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLGdCQUFHLENBQUMsYUFBYSxFQUFFO0lBQ3JCLElBQUksZ0JBQUcsQ0FBQyxZQUFZLEVBQUU7UUFDcEIsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBUyxFQUFFO1lBQ2pDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7S0FDSjtTQUFNO1FBQ0wsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7S0FDaEM7Q0FDRjtBQUVEOztHQUVHO0FBQ0g7SUFDRSxrQkFBWSxPQUFPO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBRUQsdUJBQUksR0FBSjtRQUNFLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFVBQVUsSUFBSSxnQkFBRyxDQUFDLGFBQWEsRUFBRTtZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILDhCQUFXLEdBQVg7UUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxD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QUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCwwQkFBTyxHQUFQO1FBQ0UsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUNILGVBQUM7QUFBRCxDQUFDLEFBN0lELElBNklDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGVudiBmcm9tICcuLi9jb3JlL2Vudic7XG5pbXBvcnQgZG9tIGZyb20gJy4uL2NvcmUvZG9tJztcblxubGV0IENvZGVNaXJyb3I7XG5pZiAoZW52Lmhhc0NvZGVNaXJyb3IpIHtcbiAgaWYgKGVudi5pc1N1cHBvcnRBbWQpIHtcbiAgICByZXF1aXJlKFsnY29kZW1pcnJvciddLCBmdW5jdGlvbihjbSkge1xuICAgICAgQ29kZU1pcnJvciA9IGNtO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIENvZGVNaXJyb3IgPSB3aW5kb3cuQ29kZU1pcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIEBjbGFzcyBDb2Rldmlld1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2RlVmlldyB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuJGVkaXRvciA9IGNvbnRleHQubGF5b3V0SW5mby5lZGl0b3I7XG4gICAgdGhpcy4kZWRpdGFibGUgPSBjb250ZXh0LmxheW91dEluZm8uZWRpdGFibGU7XG4gICAgdGhpcy4kY29kYWJsZSA9IGNvbnRleHQubGF5b3V0SW5mby5jb2RhYmxlO1xuICAgIHRoaXMub3B0aW9ucyA9IGNvbnRleHQub3B0aW9ucztcbiAgfVxuXG4gIHN5bmMoKSB7XG4gICAgY29uc3QgaXNDb2RldmlldyA9IHRoaXMuaXNBY3RpdmF0ZWQoKTtcbiAgICBpZiAoaXNDb2RldmlldyAmJiBlbnYuaGFzQ29kZU1pcnJvcikge1xuICAgICAgdGhpcy4kY29kYWJsZS5kYXRhKCdjbUVkaXRvcicpLnNhdmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGlzQWN0aXZhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLiRlZGl0b3IuaGFzQ2xhc3MoJ2NvZGV2aWV3Jyk7XG4gIH1cblxuICAvKipcbiAgICogdG9nZ2xlIGNvZGV2aWV3XG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmF0ZWQoKSkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5jb250ZXh0LnRyaWdnZXJFdmVudCgnY29kZXZpZXcudG9nZ2xlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIHB1cmlmeSBpbnB1dCB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBwdXJpZnkodmFsdWUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvZGV2aWV3RmlsdGVyKSB7XG4gICAgICAvLyBmaWx0ZXIgY29kZSB2aWV3IHJlZ2V4XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UodGhpcy5vcHRpb25zLmNvZGV2aWV3RmlsdGVyUmVnZXgsICcnKTtcbiAgICAgIC8vIGFsbG93IHNwZWNpZmljIGlmcmFtZSB0YWdcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29kZXZpZXdJZnJhbWVGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgd2hpdGVsaXN0ID0gdGhpcy5vcHRpb25zLmNvZGV2aWV3SWZyYW1lV2hpdGVsaXN0U3JjLmNvbmNhdCh0aGlzLm9wdGlvbnMuY29kZXZpZXdJZnJhbWVXaGl0ZWxpc3RTcmNCYXNlKTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oPGlmcmFtZS4qPz4uKj8oPzo8XFwvaWZyYW1lPik/KS9naSwgZnVuY3Rpb24odGFnKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIGlmIHNyYyBhdHRyaWJ1dGUgaXMgZHVwbGljYXRlZFxuICAgICAgICAgIGlmICgvPC4rc3JjKD89PT8oJ3xcInxcXHMpPylbXFxzXFxTXStzcmMoPz0oJ3xcInxcXHMpPylbXj5dKj8+L2kudGVzdCh0YWcpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoY29uc3Qgc3JjIG9mIHdoaXRlbGlzdCkge1xuICAgICAgICAgICAgLy8gcGFzcyBpZiBzcmMgaXMgdHJ1c3RlZFxuICAgICAgICAgICAgaWYgKChuZXcgUmVnRXhwKCdzcmM9XCIoaHR0cHM/Oik/XFwvXFwvJyArIHNyYyArICdcXC8oLispXCInKSkudGVzdCh0YWcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0YWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhY3RpdmF0ZSBjb2RlIHZpZXdcbiAgICovXG4gIGFjdGl2YXRlKCkge1xuICAgIHRoaXMuJGNvZGFibGUudmFsKGRvbS5odG1sKHRoaXMuJGVkaXRhYmxlLCB0aGlzLm9wdGlvbnMucHJldHRpZnlIdG1sKSk7XG4gICAgdGhpcy4kY29kYWJsZS5oZWlnaHQodGhpcy4kZWRpdGFibGUuaGVpZ2h0KCkpO1xuXG4gICAgdGhpcy5jb250ZXh0Lmludm9rZSgndG9vbGJhci51cGRhdGVDb2RldmlldycsIHRydWUpO1xuICAgIHRoaXMuJGVkaXRvci5hZGRDbGFzcygnY29kZXZpZXcnKTtcbiAgICB0aGlzLiRjb2RhYmxlLmZvY3VzKCk7XG5cbiAgICAvLyBhY3RpdmF0ZSBDb2RlTWlycm9yIGFzIGNvZGFibGVcbiAgICBpZiAoZW52Lmhhc0NvZGVNaXJyb3IpIHtcbiAgICAgIGNvbnN0IGNtRWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEodGhpcy4kY29kYWJsZVswXSwgdGhpcy5vcHRpb25zLmNvZGVtaXJyb3IpO1xuXG4gICAgICAvLyBDb2RlTWlycm9yIFRlcm5TZXJ2ZXJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29kZW1pcnJvci50ZXJuKSB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IG5ldyBDb2RlTWlycm9yLlRlcm5TZXJ2ZXIodGhpcy5vcHRpb25zLmNvZGVtaXJyb3IudGVybik7XG4gICAgICAgIGNtRWRpdG9yLnRlcm5TZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgICAgIGNtRWRpdG9yLm9uKCdjdXJzb3JBY3Rpdml0eScsIChjbSkgPT4ge1xuICAgICAgICAgIHNlcnZlci51cGRhdGVBcmdIaW50cyhjbSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjbUVkaXRvci5vbignYmx1cicsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRleHQudHJpZ2dlckV2ZW50KCdibHVyLmNvZGV2aWV3JywgY21FZGl0b3IuZ2V0VmFsdWUoKSwgZXZlbnQpO1xuICAgICAgfSk7XG4gICAgICBjbUVkaXRvci5vbignY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dC50cmlnZ2VyRXZlbnQoJ2NoYW5nZS5jb2RldmlldycsIGNtRWRpdG9yLmdldFZhbHVlKCksIGNtRWRpdG9yKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb2RlTWlycm9yIGhhc24ndCBQYWRkaW5nLlxuICAgICAgY21FZGl0b3Iuc2V0U2l6ZShudWxsLCB0aGlzLiRlZGl0YWJsZS5vdXRlckhlaWdodCgpKTtcbiAgICAgIHRoaXMuJGNvZGFibGUuZGF0YSgnY21FZGl0b3InLCBjbUVkaXRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGNvZGFibGUub24oJ2JsdXInLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnRyaWdnZXJFdmVudCgnYmx1ci5jb2RldmlldycsIHRoaXMuJGNvZGFibGUudmFsKCksIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kY29kYWJsZS5vbignaW5wdXQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnRyaWdnZXJFdmVudCgnY2hhbmdlLmNvZGV2aWV3JywgdGhpcy4kY29kYWJsZS52YWwoKSwgdGhpcy4kY29kYWJsZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZGVhY3RpdmF0ZSBjb2RlIHZpZXdcbiAgICovXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgLy8gZGVhY3RpdmF0ZSBDb2RlTWlycm9yIGFzIGNvZGFibGVcbiAgICBpZiAoZW52Lmhhc0NvZGVNaXJyb3IpIHtcbiAgICAgIGNvbnN0IGNtRWRpdG9yID0gdGhpcy4kY29kYWJsZS5kYXRhKCdjbUVkaXRvcicpO1xuICAgICAgdGhpcy4kY29kYWJsZS52YWwoY21FZGl0b3IuZ2V0VmFsdWUoKSk7XG4gICAgICBjbUVkaXRvci50b1RleHRBcmVhKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnB1cmlmeShkb20udmFsdWUodGhpcy4kY29kYWJsZSwgdGhpcy5vcHRpb25zLnByZXR0aWZ5SHRtbCkgfHwgZG9tLmVtcHR5UGFyYSk7XG4gICAgY29uc3QgaXNDaGFuZ2UgPSB0aGlzLiRlZGl0YWJsZS5odG1sKCkgIT09IHZhbHVlO1xuXG4gICAgdGhpcy4kZWRpdGFibGUuaHRtbCh2YWx1ZSk7XG4gICAgdGhpcy4kZWRpdGFibGUuaGVpZ2h0KHRoaXMub3B0aW9ucy5oZWlnaHQgPyB0aGlzLiRjb2RhYmxlLmhlaWdodCgpIDogJ2F1dG8nKTtcbiAgICB0aGlzLiRlZGl0b3IucmVtb3ZlQ2xhc3MoJ2NvZGV2aWV3Jyk7XG5cbiAgICBpZiAoaXNDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY29udGV4dC50cmlnZ2VyRXZlbnQoJ2NoYW5nZScsIHRoaXMuJGVkaXRhYmxlLmh0bWwoKSwgdGhpcy4kZWRpdGFibGUpO1xuICAgIH1cblxuICAgIHRoaXMuJGVkaXRhYmxlLmZvY3VzKCk7XG5cbiAgICB0aGlzLmNvbnRleHQuaW52b2tlKCd0b29sYmFyLnVwZGF0ZUNvZGV2aWV3JywgZmFsc2UpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5pc0FjdGl2YXRlZCgpKSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==