You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.6 KiB
70 lines
1.6 KiB
(function() {
|
|
$.fn.markdown_editor = function() {
|
|
return this.each(function() {
|
|
var name = this.id;
|
|
var this_form = this.form;
|
|
|
|
$(this).replaceWith($('<div id="' + name + '-markdown-editor" class="markdown-editor"></div>')
|
|
.append(
|
|
$('<div id="' + name + '-markdown-editor-in" class="markdown-editor-in"></div>')
|
|
.append($(this).clone())
|
|
)
|
|
.append(
|
|
$('<div id="' + name + '-markdown-editor-out" class="markdown-editor-out"></div>')
|
|
)
|
|
);
|
|
|
|
var needRerender = false;
|
|
|
|
var update = function(e){
|
|
var val = e.getValue();
|
|
setOutput(val);
|
|
needRerender = true;
|
|
}
|
|
|
|
var autoRerender = function() {
|
|
if (needRerender) {
|
|
needRerender = false;
|
|
$('#' + name + '-markdown-editor-out').each(function() {
|
|
sh_highlightDocument(this);
|
|
MathJax.Hub.Queue(["Typeset", MathJax.Hub, this]);
|
|
});
|
|
}
|
|
setTimeout(autoRerender, 500);
|
|
}
|
|
|
|
var setOutput = function(val){
|
|
$('#' + name + '-markdown-editor-out').html(marked(val));
|
|
}
|
|
|
|
var codeeditor = CodeMirror.fromTextArea($('#' + name)[0], {
|
|
mode: 'gfm',
|
|
lineNumbers: true,
|
|
matchBrackets: true,
|
|
lineWrapping: true,
|
|
styleActiveLine: true,
|
|
theme: 'default'
|
|
});
|
|
|
|
codeeditor.on('change', update);
|
|
|
|
if (this_form) {
|
|
var changed = false;
|
|
codeeditor.on('change', function() {
|
|
before_window_unload_message = '您所编辑的内容尚未保存';
|
|
changed = true;
|
|
});
|
|
$(this_form).submit(function() {
|
|
if (changed) {
|
|
before_window_unload_message = null;
|
|
}
|
|
changed = false;
|
|
});
|
|
}
|
|
|
|
update(codeeditor);
|
|
autoRerender();
|
|
});
|
|
};
|
|
})()
|