diff --git a/admin/js/markdown.js b/admin/js/markdown.js
index d745bbd5..350bd54c 100644
--- a/admin/js/markdown.js
+++ b/admin/js/markdown.js
@@ -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()) {
diff --git a/admin/write-js.php b/admin/write-js.php
index b1af29cd..9f3ecf83 100644
--- a/admin/write-js.php
+++ b/admin/write-js.php
@@ -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)
- + '' + 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) + '' + diff[1].substring(sp);
- } else {
- added = true;
- }
- } else {
- diff[1] += '';
- }
- }
-
- if (diff[0] <= 0) {
- html += diff[1];
+ text += '\n' + boundary;
}
}
}
- return html;
- };
+ return text;
+ }
+
+ converter.postConversion = function (html) {
+ html = html.replace(boundary, '');
+ return html.replace(new RegExp(boundary, 'g'), '');
+ }
editor.hooks.chain('onPreviewRefresh', function () {
var diff = $('.diff', preview);