summernote-webpack
Version:
Super simple WYSIWYG editor
118 lines (99 loc) • 2.9 kB
JavaScript
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;
});