UNPKG

summernote-webpack

Version:
118 lines (99 loc) 2.9 kB
define([ 'summernote/base/core/agent', 'summernote/base/core/dom' ], function (agent, dom) { var CodeMirror; if (agent.hasCodeMirror) { if (agent.isSupportAmd) { require(['codemirror'], function (cm) { CodeMirror = cm; }); } else { CodeMirror = window.CodeMirror; } } /** * @class Codeview */ var Codeview = function (context) { var $editor = context.layoutInfo.editor; var $editable = context.layoutInfo.editable; var $codable = context.layoutInfo.codable; var options = context.options; this.sync = function () { var isCodeview = this.isActivated(); if (isCodeview && agent.hasCodeMirror) { $codable.data('cmEditor').save(); } }; /** * @return {Boolean} */ this.isActivated = function () { return $editor.hasClass('codeview'); }; /** * toggle codeview */ this.toggle = function () { if (this.isActivated()) { this.deactivate(); } else { this.activate(); } context.triggerEvent('codeview.toggled'); }; /** * activate code view */ this.activate = function () { $codable.val(dom.html($editable, options.prettifyHtml)); $codable.height($editable.height()); context.invoke('toolbar.updateCodeview', true); $editor.addClass('codeview'); $codable.focus(); // activate CodeMirror as codable if (agent.hasCodeMirror) { var cmEditor = CodeMirror.fromTextArea($codable[0], options.codemirror); // CodeMirror TernServer if (options.codemirror.tern) { var server = new CodeMirror.TernServer(options.codemirror.tern); cmEditor.ternServer = server; cmEditor.on('cursorActivity', function (cm) { server.updateArgHints(cm); }); } // CodeMirror hasn't Padding. cmEditor.setSize(null, $editable.outerHeight()); $codable.data('cmEditor', cmEditor); } }; /** * deactivate code view */ this.deactivate = function () { // deactivate CodeMirror as codable if (agent.hasCodeMirror) { var cmEditor = $codable.data('cmEditor'); $codable.val(cmEditor.getValue()); cmEditor.toTextArea(); } var value = dom.value($codable, options.prettifyHtml) || dom.emptyPara; var isChange = $editable.html() !== value; $editable.html(value); $editable.height(options.height ? $codable.height() : 'auto'); $editor.removeClass('codeview'); if (isChange) { context.triggerEvent('change', $editable.html(), $editable); } $editable.focus(); context.invoke('toolbar.updateCodeview', false); }; this.destroy = function () { if (this.isActivated()) { this.deactivate(); } }; }; return Codeview; });