mirror of
https://github.com/typecho/typecho.git
synced 2025-03-20 01:49:40 +01:00
一些修复
This commit is contained in:
parent
da52126a42
commit
7c6b067f59
@ -3179,8 +3179,9 @@ else
|
||||
that.refreshPreview();
|
||||
}
|
||||
}
|
||||
|
||||
uiManager = new UIManager(idPostfix, panels, undoManager, previewManager, commandManager, options.helpButton, getString);
|
||||
|
||||
fullScreenManager = new FullScreenManager(hooks);
|
||||
uiManager = new UIManager(idPostfix, panels, undoManager, previewManager, commandManager, fullScreenManager, options.helpButton, getString);
|
||||
uiManager.setUndoRedoButtonStates();
|
||||
|
||||
var forceRefresh = that.refreshPreview = function () { previewManager.refresh(true); };
|
||||
@ -4268,7 +4269,7 @@ else
|
||||
}, 0);
|
||||
};
|
||||
|
||||
function UIManager(postfix, panels, undoManager, previewManager, commandManager, helpOptions, getString) {
|
||||
function UIManager(postfix, panels, undoManager, previewManager, commandManager, fullScreenManager, helpOptions, getString) {
|
||||
|
||||
var inputBox = panels.input,
|
||||
buttons = {}; // buttons.undo, buttons.link, etc. The actual DOM elements.
|
||||
@ -4561,7 +4562,8 @@ else
|
||||
|
||||
buttons.redo = makeButton("wmd-redo-button", redoTitle, "-220px", null);
|
||||
buttons.redo.execute = function (manager) { if (manager) manager.redo(); };
|
||||
buttons.fullscreen = makeButton("wmd-fullscreen-button", getString("fullscreen"), "-240px", bindCommand("doFullScreen"));
|
||||
buttons.fullscreen = makeButton("wmd-fullscreen-button", getString("fullscreen"), "-240px", null);
|
||||
buttons.fullscreen.execute = function () { fullScreenManager.doFullScreen(); };
|
||||
|
||||
if (helpOptions) {
|
||||
var helpButton = document.createElement("li");
|
||||
@ -5284,11 +5286,16 @@ else
|
||||
chunk.selection = "";
|
||||
}
|
||||
|
||||
var getFullScreenAdapter = function () {
|
||||
function FullScreenManager (hooks) {
|
||||
this.fullScreenBind = false;
|
||||
this.hooks = hooks;
|
||||
}
|
||||
|
||||
function getFullScreenAdapter () {
|
||||
var selector = {
|
||||
fullScreenChange : ['onfullscreenchange', 'onwebkitfullscreenchange', 'onmozfullscreenchange'],
|
||||
requestFullscreen : ['requestFullscreen', 'webkitRequestFullScreen', 'mozRequestFullScreen'],
|
||||
cancelFullscreen : ['cancelFullscreen', 'webkitCancelFullScreen', 'mozCancelFullScreen']
|
||||
fullScreenChange : ['onfullscreenchange', 'onwebkitfullscreenchange', 'onmozfullscreenchange', 'onmsfullscreenchange'],
|
||||
requestFullscreen : ['requestFullscreen', 'webkitRequestFullScreen', 'mozRequestFullScreen', 'msRequestFullScreen'],
|
||||
cancelFullscreen : ['cancelFullscreen', 'exitFullScreen', 'webkitCancelFullScreen', 'mozCancelFullScreen', 'msCancelFullScreen']
|
||||
}, adapter = {};
|
||||
|
||||
for (var name in selector) {
|
||||
@ -5312,23 +5319,21 @@ else
|
||||
return adapter;
|
||||
};
|
||||
|
||||
var isFullScreen = function () {
|
||||
function isFullScreen () {
|
||||
return document.fullScreen ||
|
||||
document.mozFullScreen ||
|
||||
document.webkitIsFullScreen;
|
||||
};
|
||||
|
||||
var fullScreenBind = false;
|
||||
|
||||
// fullscreen
|
||||
commandProto.doFullScreen = function (chunk, postProcessing) {
|
||||
FullScreenManager.prototype.doFullScreen = function (chunk, postProcessing) {
|
||||
var adapter = getFullScreenAdapter(), self = this;
|
||||
|
||||
if (!adapter) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!fullScreenBind) {
|
||||
if (!this.fullScreenBind) {
|
||||
util.addEvent(document, adapter.fullScreenChange.substring(2), function () {
|
||||
if (!isFullScreen()) {
|
||||
self.hooks.exitFullScreen();
|
||||
@ -5337,7 +5342,7 @@ else
|
||||
}
|
||||
});
|
||||
|
||||
fullScreenBind = true;
|
||||
this.fullScreenBind = true;
|
||||
}
|
||||
|
||||
if (!isFullScreen()) {
|
||||
|
@ -251,50 +251,38 @@ $(document).ready(function () {
|
||||
};
|
||||
|
||||
var editor = new Markdown.Editor(converter, '', options),
|
||||
diffMatch = new diff_match_patch(), last = '', preview = $('#wmd-preview');
|
||||
diffMatch = new diff_match_patch(), last = '', preview = $('#wmd-preview'),
|
||||
boundary = '@boundary' + Math.ceil(Math.random() * 1000000) + '@';
|
||||
|
||||
// 自动跟随
|
||||
converter.postConversion = function (html) {
|
||||
var diffs = diffMatch.diff_main(html, last);
|
||||
last = html;
|
||||
converter.preConversion = function (text) {
|
||||
var diffs = diffMatch.diff_main(last, text);
|
||||
last = text;
|
||||
|
||||
|
||||
if (diffs.length > 0) {
|
||||
html = '';
|
||||
var added = false;
|
||||
text = '';
|
||||
|
||||
for (var i = 0; i < diffs.length; i ++) {
|
||||
var diff = diffs[i];
|
||||
|
||||
if (added) {
|
||||
var ep = diff[1].indexOf('>');
|
||||
|
||||
diff[1] = diff[1].substring(0, ep + 1)
|
||||
+ '<span class="diff" />' + diff[1].substring(ep + 1);
|
||||
if (diff[0] >= 0) {
|
||||
text += diff[1];
|
||||
}
|
||||
|
||||
added = false;
|
||||
|
||||
if (diff[0] != 0) {
|
||||
var sp = diff[1].lastIndexOf('<'), ep = diff[1].lastIndexOf('>');
|
||||
if (sp >= 0 && sp > ep) {
|
||||
if (diff[1] < 0) {
|
||||
diff[1] = diff[1].substring(0, sp) + '<span class="diff" />' + diff[1].substring(sp);
|
||||
} else {
|
||||
added = true;
|
||||
}
|
||||
} else {
|
||||
diff[1] += '<span class="diff" />';
|
||||
}
|
||||
}
|
||||
|
||||
if (diff[0] <= 0) {
|
||||
html += diff[1];
|
||||
text += '\n' + boundary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return html;
|
||||
};
|
||||
return text;
|
||||
}
|
||||
|
||||
converter.postConversion = function (html) {
|
||||
html = html.replace(boundary, '<span class="diff" />');
|
||||
return html.replace(new RegExp(boundary, 'g'), '');
|
||||
}
|
||||
|
||||
editor.hooks.chain('onPreviewRefresh', function () {
|
||||
var diff = $('.diff', preview);
|
||||
|
Loading…
x
Reference in New Issue
Block a user