From 7c6b067f5964968e99c82e07ffd4ab61b6d54f38 Mon Sep 17 00:00:00 2001 From: joyqi Date: Fri, 25 Oct 2013 10:10:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/js/markdown.js | 33 +++++++++++++++++-------------- admin/write-js.php | 46 ++++++++++++++++---------------------------- 2 files changed, 36 insertions(+), 43 deletions(-) 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);