markdown editor v2
This commit is contained in:
public
26
public/js/markdown.min.js
vendored
26
public/js/markdown.min.js
vendored
File diff suppressed because one or more lines are too long
@ -585,9 +585,13 @@ listStr=addAnchors(listStr);listStr=listStr.replace(/\n{2,}(?=\\x03)/,"\n");list
|
|||||||
var _mathJaxEnd = false;
|
var _mathJaxEnd = false;
|
||||||
|
|
||||||
// 如果是jQuery对象
|
// 如果是jQuery对象
|
||||||
if(!toElem['querySelectorAll'] && toElem['get']) {
|
if(toElem && !toElem['querySelectorAll'] && toElem['get']) {
|
||||||
toElem = toElem.get(0);
|
toElem = toElem.get(0);
|
||||||
}
|
}
|
||||||
|
if(!toElem || typeof toElem == 'function') {
|
||||||
|
callback = toElem;
|
||||||
|
toElem = document.createElement('div');
|
||||||
|
}
|
||||||
function _go(mdText, toElem) {
|
function _go(mdText, toElem) {
|
||||||
var htmlParsed = converter.makeHtml(mdText);
|
var htmlParsed = converter.makeHtml(mdText);
|
||||||
toElem.innerHTML = htmlParsed;
|
toElem.innerHTML = htmlParsed;
|
||||||
@ -609,7 +613,8 @@ listStr=addAnchors(listStr);listStr=listStr.replace(/\n{2,}(?=\\x03)/,"\n");list
|
|||||||
// 表示有mathjax?
|
// 表示有mathjax?
|
||||||
// 加载mathJax
|
// 加载mathJax
|
||||||
if(mdText.indexOf('$') !== -1) {
|
if(mdText.indexOf('$') !== -1) {
|
||||||
loadJs("http://leanote.com/public/libs/MathJax/MathJax.js?config=TeX-AMS_HTML", function() {
|
// loadJs("http://leanote.com/public/libs/MathJax/MathJax.js?config=TeX-AMS_HTML", function() {
|
||||||
|
loadJs("http://cdn.bootcss.com/mathjax/2.5.3/MathJax.js?config=TeX-AMS_HTML", function() {
|
||||||
if(!m) {
|
if(!m) {
|
||||||
var m = initMathJax();
|
var m = initMathJax();
|
||||||
}
|
}
|
||||||
|
@ -12053,6 +12053,15 @@ define('extensions/markdownExtra',[
|
|||||||
eventMgr = eventMgrParameter;
|
eventMgr = eventMgrParameter;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function onToggleMode(editor) {
|
||||||
|
editor.hooks.chain("onPreviewRefresh", function () {
|
||||||
|
$('#preview-contents pre').addClass('prettyprint'); // 不能加linenums, 加了后, uml不能显示
|
||||||
|
prettify.prettyPrint();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
markdownExtra.onToggleMode = onToggleMode;
|
||||||
|
|
||||||
markdownExtra.onPagedownConfigure = function(editor) {
|
markdownExtra.onPagedownConfigure = function(editor) {
|
||||||
var converter = editor.getConverter();
|
var converter = editor.getConverter();
|
||||||
if(markdownExtra.config.intraword === true) {
|
if(markdownExtra.config.intraword === true) {
|
||||||
@ -12078,10 +12087,8 @@ define('extensions/markdownExtra',[
|
|||||||
};
|
};
|
||||||
|
|
||||||
extraOptions.highlighter = "prettify";
|
extraOptions.highlighter = "prettify";
|
||||||
editor.hooks.chain("onPreviewRefresh", function () {
|
|
||||||
$('#preview-contents pre').addClass('prettyprint'); // 不能加linenums, 加了后, uml不能显示
|
onToggleMode(editor);
|
||||||
prettify.prettyPrint();
|
|
||||||
});
|
|
||||||
|
|
||||||
Markdown.Extra.init(converter, extraOptions);
|
Markdown.Extra.init(converter, extraOptions);
|
||||||
};
|
};
|
||||||
@ -12278,6 +12285,10 @@ define('extensions/markdownSectionParser',[
|
|||||||
regexp = '^```.*\\n[\\s\\S]*?\\n```|' + regexp; // Fenced block delimiters
|
regexp = '^```.*\\n[\\s\\S]*?\\n```|' + regexp; // Fenced block delimiters
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO 代码```
|
||||||
|
// regexp = '^```$|' + regexp;
|
||||||
|
|
||||||
if(mathJax.enabled) {
|
if(mathJax.enabled) {
|
||||||
// Math delimiter has to follow 1 empty line to be considered as a section delimiter
|
// Math delimiter has to follow 1 empty line to be considered as a section delimiter
|
||||||
regexp = '^[ \\t]*\\n\\$\\$[\\s\\S]*?\\$\\$|' + regexp; // $$ math block delimiters
|
regexp = '^[ \\t]*\\n\\$\\$[\\s\\S]*?\\$\\$|' + regexp; // $$ math block delimiters
|
||||||
@ -12288,6 +12299,8 @@ define('extensions/markdownSectionParser',[
|
|||||||
|
|
||||||
var converter = editor.getConverter();
|
var converter = editor.getConverter();
|
||||||
converter.hooks.chain("preConversion", function(text) {
|
converter.hooks.chain("preConversion", function(text) {
|
||||||
|
// console.log('preConversion');
|
||||||
|
// console.log(text);
|
||||||
eventMgr.previewStartTime = new Date();
|
eventMgr.previewStartTime = new Date();
|
||||||
var tmpText = text + "\n\n";
|
var tmpText = text + "\n\n";
|
||||||
function addSection(startOffset, endOffset) {
|
function addSection(startOffset, endOffset) {
|
||||||
@ -12497,7 +12510,8 @@ define('extensions/partialRendering',[
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
partialRendering.onPagedownConfigure = function(editor) {
|
// 初始化时, toggleMode时
|
||||||
|
function onPagedownConfigure(editor) {
|
||||||
converter = editor.getConverter();
|
converter = editor.getConverter();
|
||||||
converter.hooks.chain("preConversion", function() {
|
converter.hooks.chain("preConversion", function() {
|
||||||
var result = _.map(modifiedSections, function(section) {
|
var result = _.map(modifiedSections, function(section) {
|
||||||
@ -12509,7 +12523,10 @@ define('extensions/partialRendering',[
|
|||||||
editor.hooks.chain("onPreviewRefresh", function() {
|
editor.hooks.chain("onPreviewRefresh", function() {
|
||||||
refreshSections();
|
refreshSections();
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
|
partialRendering.onPagedownConfigure = onPagedownConfigure;
|
||||||
|
partialRendering.onToggleMode = onPagedownConfigure;
|
||||||
|
|
||||||
partialRendering.onInit = function() {
|
partialRendering.onInit = function() {
|
||||||
if(markdownExtra.enabled) {
|
if(markdownExtra.enabled) {
|
||||||
@ -12636,12 +12653,15 @@ define('extensions/umlDiagrams',[
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
umlDiagrams.onPagedownConfigure = function(editor) {
|
function onToggleMode(editor) {
|
||||||
editor.hooks.chain("onPreviewRefresh", function() {
|
editor.hooks.chain("onPreviewRefresh", function() {
|
||||||
renderSequence();
|
renderSequence();
|
||||||
renderFlow();
|
renderFlow();
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
|
umlDiagrams.onPagedownConfigure = onToggleMode;
|
||||||
|
umlDiagrams.onToggleMode = onToggleMode;
|
||||||
|
|
||||||
return umlDiagrams;
|
return umlDiagrams;
|
||||||
});
|
});
|
||||||
@ -12822,6 +12842,18 @@ define('extensions/emailConverter',[
|
|||||||
return emailConverter;
|
return emailConverter;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
scrollLink原理
|
||||||
|
|
||||||
|
1) preview分出一个个section
|
||||||
|
2) Md text通过这些section一个个取高度, 成mdSection
|
||||||
|
3) 将mdSection和previewSection建立映射
|
||||||
|
4) 滚动时, 通过scollTop()得到section的位置, 到另一边的section得到另一方scrollTop(), 滚动之
|
||||||
|
|
||||||
|
注意要点:
|
||||||
|
light下得到左侧的mdSection是通过helper, 每一个section的文字设到helper容器内得到高度. 所以helper的样式要和wmd-input的样式要一模一样, 不然就会有误差!!
|
||||||
|
|
||||||
|
*/
|
||||||
define('extensions/scrollLink',[
|
define('extensions/scrollLink',[
|
||||||
// "jquery",
|
// "jquery",
|
||||||
"underscore",
|
"underscore",
|
||||||
@ -13083,8 +13115,12 @@ define('extensions/scrollLink',[
|
|||||||
mdSectionList = [];
|
mdSectionList = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
var scrollAdjust = false;
|
function initScrollEvent () {
|
||||||
scrollLink.onReady = function() {
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 切换编辑模式时
|
||||||
|
var onToggleMode = function (isOnToggleMode) {
|
||||||
$previewElt = $(".preview-container");
|
$previewElt = $(".preview-container");
|
||||||
$textareaElt = $("#wmd-input");
|
$textareaElt = $("#wmd-input");
|
||||||
// This helper is used to measure sections height in light mode
|
// This helper is used to measure sections height in light mode
|
||||||
@ -13105,12 +13141,46 @@ define('extensions/scrollLink',[
|
|||||||
doScrollLink();
|
doScrollLink();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if(window.lightMode) {
|
|
||||||
$textareaElt.scroll(handleEditorScroll);
|
// editor 滚动时操作
|
||||||
}
|
var timeout = isOnToggleMode ? 500 : 0;
|
||||||
else {
|
setTimeout(function () {
|
||||||
aceEditor.session.on("changeScrollTop", handleEditorScroll);
|
if(window.lightMode) {
|
||||||
}
|
$textareaElt.scroll(handleEditorScroll);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aceEditor.session.on("changeScrollTop", handleEditorScroll);
|
||||||
|
}
|
||||||
|
}, timeout);
|
||||||
|
};
|
||||||
|
|
||||||
|
scrollLink.onToggleMode = function () {
|
||||||
|
$previewElt = $(".preview-container");
|
||||||
|
$textareaElt = $("#wmd-input");
|
||||||
|
$textareaHelperElt = $('.textarea-helper');
|
||||||
|
|
||||||
|
buildSections();
|
||||||
|
|
||||||
|
// 可以不要这一段
|
||||||
|
// isScrollPreview = true;
|
||||||
|
// isScrollEditor = false;
|
||||||
|
// doScrollLink();
|
||||||
|
|
||||||
|
// console.log('-----------------')
|
||||||
|
onToggleMode(true);
|
||||||
|
|
||||||
|
// 左侧滚动到之前的位置
|
||||||
|
// $previewElt.scrollTop($previewElt.scrollTop());
|
||||||
|
};
|
||||||
|
|
||||||
|
var scrollAdjust = false;
|
||||||
|
scrollLink.onReady = function() {
|
||||||
|
$previewElt = $(".preview-container");
|
||||||
|
$textareaElt = $("#wmd-input");
|
||||||
|
// This helper is used to measure sections height in light mode
|
||||||
|
$textareaHelperElt = $('.textarea-helper');
|
||||||
|
|
||||||
|
onToggleMode();
|
||||||
|
|
||||||
// 添加目录, 两种目录
|
// 添加目录, 两种目录
|
||||||
// Reimplement anchor scrolling to work without preview
|
// Reimplement anchor scrolling to work without preview
|
||||||
@ -13487,6 +13557,8 @@ define('eventMgr',[
|
|||||||
addEventHook("onFileOpen");
|
addEventHook("onFileOpen");
|
||||||
addEventHook("onFileClosed");
|
addEventHook("onFileClosed");
|
||||||
addEventHook("onContentChanged");
|
addEventHook("onContentChanged");
|
||||||
|
|
||||||
|
addEventHook('onToggleMode');
|
||||||
// addEventHook("onTitleChanged");
|
// addEventHook("onTitleChanged");
|
||||||
|
|
||||||
// Operations on folders
|
// Operations on folders
|
||||||
@ -16243,6 +16315,12 @@ define('shortcutMgr',[
|
|||||||
|
|
||||||
define("pagedown-light", function(){});
|
define("pagedown-light", function(){});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已知BUG:
|
||||||
|
* 从light切换到normal, 快捷键没用了
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
/*globals Markdown, requirejs */
|
/*globals Markdown, requirejs */
|
||||||
define('core',[
|
define('core',[
|
||||||
"underscore",
|
"underscore",
|
||||||
@ -16281,7 +16359,7 @@ define('core',[
|
|||||||
function createAceEditor() {
|
function createAceEditor() {
|
||||||
aceEditor = ace.edit("wmd-input");
|
aceEditor = ace.edit("wmd-input");
|
||||||
MD.aceEditor = aceEditor;
|
MD.aceEditor = aceEditor;
|
||||||
aceEditor.setOption("spellcheck", true);
|
// aceEditor.setOption("spellcheck", true);
|
||||||
|
|
||||||
// vim
|
// vim
|
||||||
// aceEditor.setKeyboardHandler("ace/keyboard/vim");
|
// aceEditor.setKeyboardHandler("ace/keyboard/vim");
|
||||||
@ -16363,22 +16441,6 @@ define('core',[
|
|||||||
eventMgr.onAceCreated(aceEditor);
|
eventMgr.onAceCreated(aceEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 本地缓存
|
|
||||||
var localS = {
|
|
||||||
get: function(key) {
|
|
||||||
if (localStorage) {
|
|
||||||
return localStorage.getItem(key);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
},
|
|
||||||
set: function(key, value) {
|
|
||||||
value += '';
|
|
||||||
if (localStorage) {
|
|
||||||
localStorage.setItem(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the layout
|
// Create the layout
|
||||||
var $editorButtonsElt;
|
var $editorButtonsElt;
|
||||||
|
|
||||||
@ -16395,8 +16457,234 @@ define('core',[
|
|||||||
var documentContent;
|
var documentContent;
|
||||||
// var UndoManager = require("ace/undomanager").UndoManager;
|
// var UndoManager = require("ace/undomanager").UndoManager;
|
||||||
var previewWrapper;
|
var previewWrapper;
|
||||||
core.initEditor = function(fileDescParam) {
|
|
||||||
|
|
||||||
|
var converter;
|
||||||
|
|
||||||
|
var lightEditor;
|
||||||
|
|
||||||
|
var $mdKeyboardMode;
|
||||||
|
|
||||||
|
core._resetToolBar = function () {
|
||||||
|
/*
|
||||||
|
<ul class="nav left-buttons">
|
||||||
|
<li class="wmd-button-group1 btn-group"></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="nav left-buttons">
|
||||||
|
<li class="wmd-button-group2 btn-group"></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="nav left-buttons">
|
||||||
|
<li class="wmd-button-group3 btn-group"></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="nav left-buttons">
|
||||||
|
<li class="wmd-button-group4 btn-group"></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="nav left-buttons">
|
||||||
|
<li class="wmd-button-group6 btn-group">
|
||||||
|
<li class="wmd-button btn btn-success" id="wmd-help-button" title="Markdown syntax" style="left: 0px; display: none;"><span style="display: none; background-position: 0px 0px;"></span><i class="fa fa-question-circle"></i></li>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
*/
|
||||||
|
$('#wmd-button-row').remove();
|
||||||
|
$('#wmd-button-bar .wmd-button-bar-inner').html('<ul class="nav left-buttons"><li class="wmd-button-group1 btn-group"></li></ul><ul class="nav left-buttons"><li class="wmd-button-group2 btn-group"></li></ul><ul class="nav left-buttons"><li class="wmd-button-group3 btn-group"></li></ul><ul class="nav left-buttons"><li class="wmd-button-group4 btn-group"></li></ul><ul class="nav left-buttons"><li class="wmd-button-group6 btn-group"></li><li class="wmd-button btn btn-success" id="wmd-help-button" title="' + getMsg('Markdown syntax') +'" style="left:0;display:none"><span style="display:none;background-position:0 0"></span><i class="fa fa-question-circle"></i></li></ul>');
|
||||||
|
};
|
||||||
|
|
||||||
|
core._setEditorHook = function () {
|
||||||
|
// Custom insert link dialog
|
||||||
|
editor.hooks.set("insertLinkDialog", function(callback) {
|
||||||
|
core.insertLinkCallback = callback;
|
||||||
|
utils.resetModalInputs();
|
||||||
|
insertLinkO.modal();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
// Custom insert image dialog
|
||||||
|
editor.hooks.set("insertImageDialog", function(callback) {
|
||||||
|
core.insertLinkCallback = callback;
|
||||||
|
if(core.catchModal) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
utils.resetModalInputs();
|
||||||
|
var ifr = $("#leauiIfrForMD");
|
||||||
|
if(!ifr.attr('src')) {
|
||||||
|
ifr.attr('src', '/album/index?md=1');
|
||||||
|
}
|
||||||
|
$(".modal-insert-image").modal();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
editor.hooks.chain("onPreviewRefresh", eventMgr.onAsyncPreview);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 行
|
||||||
|
core._moveCursorTo = function (row, column) {
|
||||||
|
if (!window.lightMode) {
|
||||||
|
aceEditor.moveCursorTo(row, column);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 得到offset
|
||||||
|
var offset = core._getTextareaCursorOffset(row, column);
|
||||||
|
|
||||||
|
$('#wmd-input').get(0).setSelectionRange(offset, offset);
|
||||||
|
$('#wmd-input').focus();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 得到文本编辑器的位置
|
||||||
|
// 返回 {row: 0, column: 0}
|
||||||
|
core._getTextareaCusorPosition = function () {
|
||||||
|
var offset = $('#wmd-input').get(0).selectionStart;
|
||||||
|
if (offset == 0) {
|
||||||
|
return {row: 0, column: 0};
|
||||||
|
}
|
||||||
|
var content = MD.getContent() || '';
|
||||||
|
var contentArr = content.split('\n');
|
||||||
|
var to = 0;
|
||||||
|
var row = 0;
|
||||||
|
var column = 0;
|
||||||
|
for (var row = 0; row < contentArr.length; ++row) {
|
||||||
|
var line = contentArr[row];
|
||||||
|
|
||||||
|
if (offset <= line.length) {
|
||||||
|
column = offset;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
offset -= line.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下一行\n
|
||||||
|
offset--;
|
||||||
|
}
|
||||||
|
return {row: row, column: column};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 通过row, column 得到offset
|
||||||
|
core._getTextareaCursorOffset = function (row, column) {
|
||||||
|
var offset = 0;
|
||||||
|
// 得到offset
|
||||||
|
var content = MD.getContent();
|
||||||
|
var contentArr = content.split('\n');
|
||||||
|
var offset = 0;
|
||||||
|
for (var i = 0; i < contentArr.length && i < row; ++i) {
|
||||||
|
offset += contentArr[i].length + 1; // \n 算1个
|
||||||
|
}
|
||||||
|
offset += column;
|
||||||
|
return offset + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 切换到轻量编辑器
|
||||||
|
core.initLightEditor = function () {
|
||||||
|
if (window.lightMode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var scrollTop = aceEditor.renderer.getScrollTop();
|
||||||
|
var pos = aceEditor.getCursorPosition();
|
||||||
|
var content = MD.getContent();
|
||||||
|
|
||||||
|
core._resetToolBar();
|
||||||
|
aceEditor && aceEditor.destroy();
|
||||||
|
|
||||||
|
// In light mode, we replace ACE with a textarea
|
||||||
|
$('#wmd-input').replaceWith(function() {
|
||||||
|
return $('<textarea id="wmd-input" class="ace_editor ace-tm wmd-textarea">').addClass(this.className).addClass('form-control');
|
||||||
|
});
|
||||||
|
|
||||||
|
core._pre();
|
||||||
|
|
||||||
|
// unbind all event
|
||||||
|
// $editorElt.off();
|
||||||
|
|
||||||
|
editor = new Markdown.EditorLight(converter);
|
||||||
|
|
||||||
|
core._setEditorHook();
|
||||||
|
|
||||||
|
editor.run(previewWrapper);
|
||||||
|
|
||||||
|
core._setToolBars();
|
||||||
|
|
||||||
|
$editorElt.val(content);
|
||||||
|
|
||||||
|
window.lightMode = true;
|
||||||
|
MD.clearUndo();
|
||||||
|
eventMgr.onToggleMode(editor);
|
||||||
|
core._moveCursorTo(pos.row, pos.column);
|
||||||
|
$editorElt.focus();
|
||||||
|
$('#wmd-input').scrollTop(scrollTop);
|
||||||
|
|
||||||
|
// 设置API
|
||||||
|
// MD.insertLink = editor.insertLink;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 切换到Ace编辑器
|
||||||
|
core.initAceEditor = function () {
|
||||||
|
if (!window.lightMode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var scrollTop = $('#wmd-input').scrollTop(); // :
|
||||||
|
var pos = core._getTextareaCusorPosition();
|
||||||
|
// console.log(pos);
|
||||||
|
var content = MD.getContent();
|
||||||
|
|
||||||
|
core._resetToolBar();
|
||||||
|
aceEditor && aceEditor.destroy();
|
||||||
|
|
||||||
|
$('#wmd-input').replaceWith(function () {
|
||||||
|
return '<pre id="wmd-input" class="form-control"><div id="wmd-input-sub" class="editor-content mousetrap" contenteditable=true></div><div class="editor-margin"></div></pre>';
|
||||||
|
});
|
||||||
|
|
||||||
|
core._pre();
|
||||||
|
|
||||||
|
// ACE editor
|
||||||
|
createAceEditor();
|
||||||
|
// Editor's element
|
||||||
|
$editorElt.find('.ace_content').css({
|
||||||
|
"background-size": "64px " + Math.round(constants.fontSize * (20 / 12)) + "px",
|
||||||
|
});
|
||||||
|
|
||||||
|
// unbind all event
|
||||||
|
// $editorElt.off();
|
||||||
|
|
||||||
|
editor = new Markdown.Editor(converter, undefined, {
|
||||||
|
keyStrokes: shortcutMgr.getPagedownKeyStrokes()
|
||||||
|
});
|
||||||
|
|
||||||
|
core._setEditorHook();
|
||||||
|
editor.run(aceEditor, previewWrapper);
|
||||||
|
|
||||||
|
core._setToolBars();
|
||||||
|
|
||||||
|
aceEditor.setValue(content, -1);
|
||||||
|
window.lightMode = false;
|
||||||
|
MD.clearUndo();
|
||||||
|
|
||||||
|
eventMgr.onToggleMode(editor);
|
||||||
|
core._moveCursorTo(pos.row, pos.column);
|
||||||
|
aceEditor.focus();
|
||||||
|
aceEditor.session.setScrollTop(scrollTop);
|
||||||
|
|
||||||
|
// 设置API
|
||||||
|
// MD.insertLink = editor.insertLink;
|
||||||
|
};
|
||||||
|
|
||||||
|
core._initMarkdownConvert = function () {
|
||||||
|
// Create the converter and the editor
|
||||||
|
converter = new Markdown.Converter();
|
||||||
|
var options = {
|
||||||
|
_DoItalicsAndBold: function(text) {
|
||||||
|
// Restore original markdown implementation
|
||||||
|
text = text.replace(/(\*\*|__)(?=\S)(.+?[*_]*)(?=\S)\1/g,
|
||||||
|
"<strong>$2</strong>");
|
||||||
|
text = text.replace(/(\*|_)(?=\S)(.+?)(?=\S)\1/g,
|
||||||
|
"<em>$2</em>");
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
converter.setOptions(options);
|
||||||
|
|
||||||
|
return converter;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化
|
||||||
|
core.initEditor = function(fileDescParam) {
|
||||||
if(fileDesc !== undefined) {
|
if(fileDesc !== undefined) {
|
||||||
eventMgr.onFileClosed(fileDesc);
|
eventMgr.onFileClosed(fileDesc);
|
||||||
}
|
}
|
||||||
@ -16438,6 +16726,7 @@ define('core',[
|
|||||||
|
|
||||||
var $previewContainerElt = $(".preview-container");
|
var $previewContainerElt = $(".preview-container");
|
||||||
|
|
||||||
|
/*
|
||||||
if(window.lightMode) {
|
if(window.lightMode) {
|
||||||
// Store editor scrollTop on scroll event
|
// Store editor scrollTop on scroll event
|
||||||
$editorElt.scroll(function() {
|
$editorElt.scroll(function() {
|
||||||
@ -16476,20 +16765,20 @@ define('core',[
|
|||||||
fileDesc.previewScrollTop = $previewContainerElt.scrollTop();
|
fileDesc.previewScrollTop = $previewContainerElt.scrollTop();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
// Create the converter and the editor
|
if(window.lightMode) {
|
||||||
var converter = new Markdown.Converter();
|
editor = new Markdown.EditorLight(converter);
|
||||||
var options = {
|
}
|
||||||
_DoItalicsAndBold: function(text) {
|
else {
|
||||||
// Restore original markdown implementation
|
editor = new Markdown.Editor(converter, undefined, {
|
||||||
text = text.replace(/(\*\*|__)(?=\S)(.+?[*_]*)(?=\S)\1/g,
|
keyStrokes: shortcutMgr.getPagedownKeyStrokes()
|
||||||
"<strong>$2</strong>");
|
});
|
||||||
text = text.replace(/(\*|_)(?=\S)(.+?)(?=\S)\1/g,
|
}
|
||||||
"<em>$2</em>");
|
|
||||||
return text;
|
// editor['eventMgr'] = eventMgr;
|
||||||
}
|
|
||||||
};
|
core._setEditorHook();
|
||||||
converter.setOptions(options);
|
|
||||||
|
|
||||||
function checkDocumentChanges() {
|
function checkDocumentChanges() {
|
||||||
var newDocumentContent = $editorElt.val();
|
var newDocumentContent = $editorElt.val();
|
||||||
@ -16502,147 +16791,44 @@ define('core',[
|
|||||||
}
|
}
|
||||||
documentContent = newDocumentContent;
|
documentContent = newDocumentContent;
|
||||||
}
|
}
|
||||||
|
previewWrapper = function(makePreview) {
|
||||||
|
var debouncedMakePreview = _.debounce(makePreview, 500);
|
||||||
|
return function() {
|
||||||
|
if(documentContent === undefined) {
|
||||||
|
makePreview();
|
||||||
|
|
||||||
|
eventMgr.onFileOpen(fileDesc);
|
||||||
if(window.lightMode) {
|
$previewContainerElt.scrollTop(fileDesc.previewScrollTop);
|
||||||
editor = new Markdown.EditorLight(converter);
|
if(window.lightMode) {
|
||||||
}
|
$editorElt.scrollTop(fileDesc.editorScrollTop);
|
||||||
else {
|
|
||||||
editor = new Markdown.Editor(converter, undefined, {
|
|
||||||
keyStrokes: shortcutMgr.getPagedownKeyStrokes()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
editor['eventMgr'] = eventMgr;
|
|
||||||
|
|
||||||
//==============
|
|
||||||
// MD API start
|
|
||||||
|
|
||||||
MD = editor;
|
|
||||||
MD.focus = function () {
|
|
||||||
aceEditor ? aceEditor.focus() : $editorElt.focus();
|
|
||||||
};
|
|
||||||
MD.setContent = function (content) {
|
|
||||||
var desc = {
|
|
||||||
content: content
|
|
||||||
}
|
|
||||||
// Notify extensions
|
|
||||||
// eventMgr.onFileSelected(desc);
|
|
||||||
|
|
||||||
// Refresh the editor (even if it's the same file)
|
|
||||||
core.initEditor(desc);
|
|
||||||
};
|
|
||||||
MD.getContent = function () {
|
|
||||||
if(aceEditor !== undefined) {
|
|
||||||
return aceEditor.getValue();
|
|
||||||
}
|
|
||||||
return $editorElt.val();
|
|
||||||
};
|
|
||||||
// 重新refresh preview
|
|
||||||
MD.onResize = function () {
|
|
||||||
eventMgr.onLayoutResize();
|
|
||||||
return fileDesc;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!window.lightMode) {
|
|
||||||
MD.aceEditor = aceEditor;
|
|
||||||
}
|
|
||||||
|
|
||||||
MD.clearUndo = function () {
|
|
||||||
if(window.lightMode) {
|
|
||||||
MD.undoManager.reinit();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
aceEditor.getSession().setUndoManager(new ace.UndoManager());
|
|
||||||
}
|
|
||||||
// 重新设置undo, redo button是否可用状态
|
|
||||||
MD.uiManager.setUndoRedoButtonStates();
|
|
||||||
};
|
|
||||||
|
|
||||||
// MD API end
|
|
||||||
//==============
|
|
||||||
|
|
||||||
// Custom insert link dialog
|
|
||||||
editor.hooks.set("insertLinkDialog", function(callback) {
|
|
||||||
core.insertLinkCallback = callback;
|
|
||||||
utils.resetModalInputs();
|
|
||||||
insertLinkO.modal();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
// Custom insert image dialog
|
|
||||||
editor.hooks.set("insertImageDialog", function(callback) {
|
|
||||||
core.insertLinkCallback = callback;
|
|
||||||
if(core.catchModal) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
utils.resetModalInputs();
|
|
||||||
var ifr = $("#leauiIfrForMD");
|
|
||||||
if(!ifr.attr('src')) {
|
|
||||||
ifr.attr('src', '/album/index?md=1');
|
|
||||||
}
|
|
||||||
$(".modal-insert-image").modal();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
if(true) {
|
|
||||||
previewWrapper = function(makePreview) {
|
|
||||||
var debouncedMakePreview = _.debounce(makePreview, 500);
|
|
||||||
return function() {
|
|
||||||
if(documentContent === undefined) {
|
|
||||||
makePreview();
|
|
||||||
|
|
||||||
eventMgr.onFileOpen(fileDesc);
|
|
||||||
$previewContainerElt.scrollTop(fileDesc.previewScrollTop);
|
|
||||||
if(window.lightMode) {
|
|
||||||
$editorElt.scrollTop(fileDesc.editorScrollTop);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_.defer(function() {
|
|
||||||
aceEditor.renderer.scrollToY(fileDesc.editorScrollTop);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
debouncedMakePreview();
|
_.defer(function() {
|
||||||
|
aceEditor.renderer.scrollToY(fileDesc.editorScrollTop);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
checkDocumentChanges();
|
}
|
||||||
};
|
else {
|
||||||
|
debouncedMakePreview();
|
||||||
|
}
|
||||||
|
checkDocumentChanges();
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
else {
|
|
||||||
previewWrapper = function(makePreview) {
|
|
||||||
return function() {
|
|
||||||
makePreview();
|
|
||||||
if(documentContent === undefined) {
|
|
||||||
eventMgr.onFileOpen(fileDesc);
|
|
||||||
$previewContainerElt.scrollTop(fileDesc.previewScrollTop);
|
|
||||||
if(window.lightMode) {
|
|
||||||
$editorElt.scrollTop(fileDesc.editorScrollTop);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_.defer(function() {
|
|
||||||
aceEditor.renderer.scrollToY(fileDesc.editorScrollTop);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
checkDocumentChanges();
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
eventMgr.onPagedownConfigure(editor);
|
eventMgr.onPagedownConfigure(editor);
|
||||||
editor.hooks.chain("onPreviewRefresh", eventMgr.onAsyncPreview);
|
|
||||||
if(window.lightMode) {
|
if(window.lightMode) {
|
||||||
editor.run(previewWrapper);
|
editor.run(previewWrapper);
|
||||||
editor.undoManager.reinit(initDocumentContent, fileDesc.editorStart, fileDesc.editorEnd, fileDesc.editorScrollTop);
|
editor.undoManager.reinit(initDocumentContent, fileDesc.editorStart, fileDesc.editorEnd, fileDesc.editorScrollTop);
|
||||||
// $editorElt.focus();
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
editor.run(aceEditor, previewWrapper);
|
editor.run(aceEditor, previewWrapper);
|
||||||
fileDesc.editorSelectRange && aceEditor.selection.setSelectionRange(fileDesc.editorSelectRange);
|
fileDesc.editorSelectRange && aceEditor.selection.setSelectionRange(fileDesc.editorSelectRange);
|
||||||
// aceEditor.focus();
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 工具栏按钮
|
||||||
|
core._setToolBars = function () {
|
||||||
// Hide default buttons
|
// Hide default buttons
|
||||||
$(".wmd-button-row li").addClass("btn btn-success").css("left", 0).find("span").hide();
|
$(".wmd-button-row li").addClass("btn btn-success").css("left", 0).find("span").hide();
|
||||||
|
|
||||||
@ -16665,55 +16851,193 @@ define('core',[
|
|||||||
$("#wmd-undo-button").append($('<i class="fa fa-undo">')).appendTo($btnGroupElt);
|
$("#wmd-undo-button").append($('<i class="fa fa-undo">')).appendTo($btnGroupElt);
|
||||||
$("#wmd-redo-button").append($('<i class="fa fa-repeat">')).appendTo($btnGroupElt);
|
$("#wmd-redo-button").append($('<i class="fa fa-repeat">')).appendTo($btnGroupElt);
|
||||||
|
|
||||||
|
core._initModeToolbar();
|
||||||
|
};
|
||||||
|
|
||||||
|
core.setMDApi = function () {
|
||||||
|
//==============
|
||||||
|
// MD API start
|
||||||
|
|
||||||
|
// 设置API
|
||||||
|
// MD.insertLink = editor.insertLink;
|
||||||
|
|
||||||
|
MD.focus = function () {
|
||||||
|
!window.lightMode ? aceEditor.focus() : $('#wmd-input').focus();
|
||||||
|
};
|
||||||
|
MD.setContent = function (content) {
|
||||||
|
var desc = {
|
||||||
|
content: content
|
||||||
|
}
|
||||||
|
// Notify extensions
|
||||||
|
// eventMgr.onFileSelected(desc);
|
||||||
|
|
||||||
|
// Refresh the editor (even if it's the same file)
|
||||||
|
core.initEditor(desc);
|
||||||
|
};
|
||||||
|
MD.getContent = function () {
|
||||||
|
if(!window.lightMode) {
|
||||||
|
return aceEditor.getValue();
|
||||||
|
}
|
||||||
|
return $('#wmd-input').val();
|
||||||
|
// return $editorElt.val(); // 有延迟?
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
if (!window.lightMode) {
|
if (!window.lightMode) {
|
||||||
|
MD.aceEditor = aceEditor;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 重新refresh preview
|
||||||
|
MD.onResize = function () {
|
||||||
|
eventMgr.onLayoutResize();
|
||||||
|
};
|
||||||
|
|
||||||
|
// aceEditor resize
|
||||||
|
MD.resize = function () {
|
||||||
|
if (!window.lightMode) {
|
||||||
|
aceEditor.resize();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MD.clearUndo = function () {
|
||||||
|
if(window.lightMode) {
|
||||||
|
editor.undoManager.reinit();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aceEditor.getSession().setUndoManager(new ace.UndoManager());
|
||||||
|
}
|
||||||
|
// 重新设置undo, redo button是否可用状态
|
||||||
|
editor.uiManager.setUndoRedoButtonStates();
|
||||||
|
};
|
||||||
|
|
||||||
|
MD.toggleToAce = function () {
|
||||||
|
core.initAceEditor();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 切换成light模式
|
||||||
|
MD.toggleToLight = function () {
|
||||||
|
core.initLightEditor();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 以下一行是为了i18n能分析到
|
||||||
|
// getMsg('Light') getMsg('Normal')
|
||||||
|
MD.setModeName = function(mode) {
|
||||||
|
if (mode === 'textarea') {
|
||||||
|
mode = 'Normal';
|
||||||
|
}
|
||||||
|
var msg = getMsg(mode);
|
||||||
|
$mdKeyboardMode.html(msg);
|
||||||
|
};
|
||||||
|
|
||||||
|
MD.changeAceKeyboardMode = function(mode, modeName) {
|
||||||
|
// 保存之
|
||||||
|
localS.set(localSModeKey, mode);
|
||||||
|
|
||||||
|
// 之前是lightMode
|
||||||
|
if (window.lightMode) {
|
||||||
|
// 要切换成ace
|
||||||
|
if (mode != 'light') {
|
||||||
|
core.initAceEditor();
|
||||||
|
if (!MD.defaultKeyboardMode) {
|
||||||
|
MD.defaultKeyboardMode = aceEditor.getKeyboardHandler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 还是ligth, 则返回
|
||||||
|
else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 当前是ace
|
||||||
|
else {
|
||||||
|
// 如果mode是light, 则切换之, 否则
|
||||||
|
if (mode == 'light') {
|
||||||
|
core.initLightEditor();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ace切换成其它模式
|
||||||
|
|
||||||
|
if (mode != 'vim' && mode != 'emacs') {
|
||||||
|
aceEditor.setKeyboardHandler(MD.defaultKeyboardMode);
|
||||||
|
// shortcutMgr.configureAce(aceEditor);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aceEditor.setKeyboardHandler("ace/keyboard/" + mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (mode != 'light') {
|
||||||
|
// aceEditor.focus();
|
||||||
|
// }
|
||||||
|
};
|
||||||
|
|
||||||
|
// MD API end
|
||||||
|
//==============
|
||||||
|
};
|
||||||
|
|
||||||
|
core._initModeToolbar = function () {
|
||||||
|
// 可以切换
|
||||||
|
if (!window.lightModeForce) {
|
||||||
$('.wmd-button-group4').html(['<div class="btn-group">',
|
$('.wmd-button-group4').html(['<div class="btn-group">',
|
||||||
'<button type="button" class="wmd-button btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="' + getMsg('Edit mode') + '">',
|
'<button type="button" class="wmd-button btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="' + getMsg('Edit mode') + '">',
|
||||||
'<i class="fa fa-gear"></i> <i id="md-keyboard-mode"></i>',
|
'<i class="fa fa-gear"></i> <i id="md-keyboard-mode"></i>',
|
||||||
'</button>',
|
'</button>',
|
||||||
'<ul class="dropdown-menu wmd-mode">',
|
'<ul class="dropdown-menu wmd-mode">',
|
||||||
'<li><a href="#" data-mode="textarea">' + getMsg('Normal mode') + '</a></li>',
|
'<li><a href="#" data-mode="Normal"><i class="fa fa-check"></i> ' + getMsg('Normal mode') + '</a></li>',
|
||||||
'<li><a href="#" data-mode="Vim">' + getMsg('Vim mode') + '</a></li>',
|
'<li><a href="#" data-mode="Vim"><i class="fa"></i> ' + getMsg('Vim mode') + '</a></li>',
|
||||||
'<li><a href="#" data-mode="Emacs">' + getMsg('Emacs mode') + '</a></li>',
|
'<li><a href="#" data-mode="Emacs"><i class="fa"></i> ' + getMsg('Emacs mode') + '</a></li>',
|
||||||
|
'<li role="separator" class="divider"></li>',
|
||||||
|
'<li><a href="#" data-mode="Light"><i class="fa"></i> ' + getMsg('Light editor') + '</a></li>',
|
||||||
'</ul>',
|
'</ul>',
|
||||||
'</div>'].join(''));
|
'</div>'].join(''));
|
||||||
|
|
||||||
$("#wmd-help-button").show();
|
$("#wmd-help-button").show();
|
||||||
var $mdKeyboardMode = $('#md-keyboard-mode');
|
$mdKeyboardMode = $('#md-keyboard-mode');
|
||||||
var localSKey = 'LeaMdAceMode'
|
|
||||||
MD.changeAceKeyboardMode = function(mode, modeName) {
|
|
||||||
localS.set(localSKey, mode);
|
|
||||||
if (mode != 'vim' && mode != 'emacs') {
|
|
||||||
aceEditor.setKeyboardHandler(MD.defaultKeyboardMode);
|
|
||||||
$mdKeyboardMode.html('');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
aceEditor.setKeyboardHandler("ace/keyboard/" + mode);
|
|
||||||
$mdKeyboardMode.html(modeName);
|
|
||||||
}
|
|
||||||
aceEditor.focus();
|
|
||||||
}
|
|
||||||
// 编辑模式选择
|
// 编辑模式选择
|
||||||
MD.defaultKeyboardMode = aceEditor.getKeyboardHandler();
|
|
||||||
$('.wmd-mode a').click(function () {
|
$('.wmd-mode a').click(function () {
|
||||||
var mode = $(this).data('mode');
|
var $this = $(this);
|
||||||
|
var mode = $this.data('mode');
|
||||||
MD.changeAceKeyboardMode(mode.toLowerCase(), mode);
|
MD.changeAceKeyboardMode(mode.toLowerCase(), mode);
|
||||||
|
MD.setModeName(mode);
|
||||||
|
|
||||||
|
// 切换后可能会重绘html, 所以这里重新获取
|
||||||
|
$('.wmd-mode').find('i').removeClass('fa-check');
|
||||||
|
$('.wmd-mode a[data-mode="' + mode + '"]').find('i').addClass('fa-check');
|
||||||
});
|
});
|
||||||
// 是否可以从storage中设置md mode
|
|
||||||
if (!window.LEA || (window.LEA && window.LEA.canSetMDModeFromStorage && window.LEA.canSetMDModeFromStorage())) {
|
if (!window.LEA
|
||||||
var userMode = localS.get(localSKey);
|
|| (window.LEA
|
||||||
if (userMode) {
|
&& window.LEA.canSetMDModeFromStorage
|
||||||
var userModeUpper = userMode[0].toUpperCase() + userMode.substr(1);
|
&& window.LEA.canSetMDModeFromStorage())) {
|
||||||
MD.changeAceKeyboardMode(userMode, userModeUpper);
|
var aceMode = localS.get(localSModeKey);
|
||||||
|
if (!aceMode) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
var aceModeUpper = aceMode[0].toUpperCase() + aceMode.substr(1);
|
||||||
|
$('.wmd-mode i').removeClass('fa-check');
|
||||||
|
$('.wmd-mode a[data-mode="' + aceModeUpper + '"] i').addClass('fa-check');
|
||||||
|
|
||||||
|
MD.setModeName(aceModeUpper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
core._pre = function () {
|
||||||
|
$editorElt = $("#wmd-input, .textarea-helper").css({
|
||||||
|
// Apply editor font
|
||||||
|
"font-family": constants.fontFamily,
|
||||||
|
"font-size": constants.fontSize + "px",
|
||||||
|
"line-height": Math.round(constants.fontSize * (20 / 12)) + "px"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// Initialize multiple things and then fire eventMgr.onReady
|
// Initialize multiple things and then fire eventMgr.onReady
|
||||||
var isDocumentPanelShown = false;
|
var isDocumentPanelShown = false;
|
||||||
var isMenuPanelShown = false;
|
var isMenuPanelShown = false;
|
||||||
core.onReady = function() {
|
core.onReady = function() {
|
||||||
|
|
||||||
$navbarElt = $('.navbar');
|
$navbarElt = $('.navbar');
|
||||||
$leftBtnElts = $navbarElt.find('.left-buttons');
|
$leftBtnElts = $navbarElt.find('.left-buttons');
|
||||||
$rightBtnElts = $navbarElt.find('.right-buttons');
|
$rightBtnElts = $navbarElt.find('.right-buttons');
|
||||||
@ -16724,16 +17048,11 @@ define('core',[
|
|||||||
if(window.lightMode) {
|
if(window.lightMode) {
|
||||||
// In light mode, we replace ACE with a textarea
|
// In light mode, we replace ACE with a textarea
|
||||||
$('#wmd-input').replaceWith(function() {
|
$('#wmd-input').replaceWith(function() {
|
||||||
return $('<textarea id="wmd-input">').addClass(this.className).addClass('form-control');
|
return $('<textarea id="wmd-input" class="ace_editor ace-tm wmd-textarea">').addClass(this.className).addClass('form-control');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$editorElt = $("#wmd-input, .textarea-helper").css({
|
core._pre();
|
||||||
// Apply editor font
|
|
||||||
"font-family": constants.fontFamily,
|
|
||||||
"font-size": constants.fontSize + "px",
|
|
||||||
"line-height": Math.round(constants.fontSize * (20 / 12)) + "px"
|
|
||||||
});
|
|
||||||
|
|
||||||
if(!window.lightMode) {
|
if(!window.lightMode) {
|
||||||
// ACE editor
|
// ACE editor
|
||||||
@ -16746,7 +17065,27 @@ define('core',[
|
|||||||
}
|
}
|
||||||
|
|
||||||
eventMgr.onReady();
|
eventMgr.onReady();
|
||||||
|
core._initMarkdownConvert();
|
||||||
core.initEditor();
|
core.initEditor();
|
||||||
|
core.setMDApi();
|
||||||
|
core._setToolBars();
|
||||||
|
|
||||||
|
// 默认Ace编辑模式
|
||||||
|
if (!window.lightMode) {
|
||||||
|
MD.defaultKeyboardMode = aceEditor.getKeyboardHandler();
|
||||||
|
}
|
||||||
|
// 初始时
|
||||||
|
// 是否可以从storage中设置md mode
|
||||||
|
if (!window.LEA
|
||||||
|
|| (window.LEA
|
||||||
|
&& window.LEA.canSetMDModeFromStorage
|
||||||
|
&& window.LEA.canSetMDModeFromStorage())) {
|
||||||
|
var aceMode = localS.get(localSModeKey);
|
||||||
|
if (!window.lightMode && aceMode) {
|
||||||
|
var aceModeUpper = aceMode[0].toUpperCase() + aceMode.substr(1);
|
||||||
|
MD.changeAceKeyboardMode(aceMode, aceModeUpper);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Other initialization that are not prioritary
|
// Other initialization that are not prioritary
|
||||||
@ -16824,17 +17163,8 @@ define('core',[
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 弹框显示markdown语法
|
// 弹框显示markdown语法
|
||||||
$('#wmd-help-button').click(function() {
|
$('#wmd-button-bar').on('click', '#wmd-help-button', function() {
|
||||||
window.open("http://leanote.com/blog/post/531b263bdfeb2c0ea9000002");
|
window.open("http://leanote.leanote.com/post/Leanote-Markdown-Manual");
|
||||||
});
|
|
||||||
|
|
||||||
// Load images
|
|
||||||
_.each(document.querySelectorAll('img'), function(imgElt) {
|
|
||||||
var $imgElt = $(imgElt);
|
|
||||||
var src = $imgElt.data('stackeditSrc');
|
|
||||||
if(src) {
|
|
||||||
$imgElt.attr('src', window.baseDir + '/img/' + src);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -16896,15 +17226,42 @@ requirejs.config({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 本地缓存
|
||||||
|
var localS = {
|
||||||
|
get: function(key) {
|
||||||
|
if (localStorage) {
|
||||||
|
return localStorage.getItem(key);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
set: function(key, value) {
|
||||||
|
value += '';
|
||||||
|
if (localStorage) {
|
||||||
|
localStorage.setItem(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var localSModeKey = 'LeaMdAceMode';
|
||||||
|
|
||||||
// Viewer mode is deduced from the body class
|
// Viewer mode is deduced from the body class
|
||||||
window.viewerMode = false;
|
window.viewerMode = false;
|
||||||
|
|
||||||
// Light mode is for mobile or viewer
|
// Light mode is for mobile or viewer
|
||||||
window.lightMode = window.viewerMode || /_light_/.test(localStorage.mode) || /(\?|&)light($|&)/.test(location.search) || (function(a) {
|
window.lightModeForce = window.viewerMode || /_light_/.test(localStorage.mode) || /(\?|&)light($|&)/.test(location.search) || (function(a) {
|
||||||
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
|
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
})(navigator.userAgent || navigator.vendor || window.opera);
|
})(navigator.userAgent || navigator.vendor || window.opera);
|
||||||
|
// 是否是强制lightMode
|
||||||
|
if (window.lightModeForce) {
|
||||||
|
window.lightMode = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var mode = localS.get(localSModeKey);
|
||||||
|
if (mode === 'light') {
|
||||||
|
window.lightMode = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// window.lightMode = true;
|
// window.lightMode = true;
|
||||||
|
|
||||||
|
12
public/md/main-v2.min.js
vendored
12
public/md/main-v2.min.js
vendored
File diff suppressed because one or more lines are too long
2
public/md/themes/default-min.css
vendored
2
public/md/themes/default-min.css
vendored
File diff suppressed because one or more lines are too long
1263
public/md/themes/default-v1.less
Normal file
1263
public/md/themes/default-v1.less
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user