7 Commits
v0.9 ... v0.9.1

Author SHA1 Message Date
Igor Shymko
cba12b7776 version bump 2018-09-29 10:25:53 +03:00
Igor Shymko
180350da77 Merge pull request #35 from juergenhoetzel/fix-emacs-26-network-server-process
Add workaround for Emacs 26 async network-server-process issues
2018-09-29 10:15:54 +03:00
Juergen Hoetzel
363692d79a Add workaround for Emacs 26 async network-server-process issues
Fixes #33
Fixes #30
2018-09-24 16:41:47 +02:00
Igor Shymko
4ec15183fc Merge pull request #27 from zenkiezhu/inline-css-js-support
Add inline css/js support
2017-11-22 09:23:10 +02:00
Igor Shymko
d81f271d4c Merge pull request #26 from zenkiezhu/fix-issue#25
Fix issue#25
2017-11-22 09:12:00 +02:00
Zenkie Zhu
e93fd4e47e Add inline css/js support 2017-11-22 12:33:16 +08:00
Zenkie Zhu
7c58f2c18b Fix issue#25
https://github.com/ancane/markdown-preview-mode/issues/25
2017-11-21 23:27:55 +08:00
2 changed files with 27 additions and 10 deletions

View File

@@ -5,7 +5,7 @@
;; Author: Igor Shymko <igor.shimko@gmail.com>
;; URL: https://github.com/ancane/markdown-preview-mode
;; Keywords: markdown, gfm, convenience
;; Version: 0.9
;; Version: 0.9.1
;; Package-Requires: ((emacs "24.3") (websocket "1.6") (markdown-mode "2.0") (cl-lib "0.5") (web-server "0.1.1") (uuidgen "0.3"))
;; This file is not part of GNU Emacs.
@@ -30,6 +30,7 @@
;;
;;; Code:
(eval-when-compile (require 'cl))
(require 'cl-lib)
(require 'websocket)
(require 'markdown-mode)
@@ -115,14 +116,16 @@
(when (timerp markdown-preview--idle-timer)
(cancel-timer markdown-preview--idle-timer)))
(defun markdown-preview--css-links ()
(defun markdown-preview--css ()
"Get list of styles for preview in backward compatible way."
(let* ((custom-style (list markdown-preview-style))
(all-styles
(mapc (lambda (x) (add-to-list 'custom-style x t)) markdown-preview-stylesheets)))
(mapconcat
(lambda (x)
(concat "<link rel=\"stylesheet\" type=\"text/css\" href=\"" x "\">"))
(if (string-match-p "^[\n\t ]*<style" x)
x
(concat "<link rel=\"stylesheet\" type=\"text/css\" href=\"" x "\">")))
all-styles
"\n")))
@@ -130,10 +133,12 @@
"Get list of javascript script tags for preview."
(mapconcat
(lambda (x)
(concat
"<script src=\"" (if (consp x) (car x) x) "\""
(if (consp x) (format " %s" (cdr x)))
"></script>"))
(if (string-match-p "^[\n\t ]*<script" x)
x
(concat
"<script src=\"" (if (consp x) (car x) x) "\""
(if (consp x) (format " %s" (cdr x)))
"></script>")))
markdown-preview-javascript
"\n"))
@@ -143,7 +148,7 @@ rendered copy to PREVIEW-FILE, ready to be open in browser."
(with-temp-file preview-file
(insert-file-contents (expand-file-name "preview.html" markdown-preview--home-dir))
(when (search-forward "${MD_STYLE}" nil t)
(replace-match (markdown-preview--css-links) t))
(replace-match (markdown-preview--css) t))
(when (search-forward "${MD_JS}" nil t)
(replace-match (markdown-preview--scripts) t))
(when (search-forward "${WS_HOST}" nil t)
@@ -154,10 +159,21 @@ rendered copy to PREVIEW-FILE, ready to be open in browser."
(replace-match (format "%s" preview-uuid) t))
(buffer-string)))
;; Emacs 26 async network workaround
(defun markdown-preview--fix-network-process-wait (plist)
"Ensure PLIST contains :nowait nil."
(if (and (>= emacs-major-version 26)
(equal (plist-get plist :name) "ws-server")
(plist-get plist :server)
(plist-get plist :nowait))
(plist-put plist :nowait nil)
plist))
(defun markdown-preview--start-http-server (port)
"Start http server at PORT to serve preview file via http."
(unless markdown-preview--http-server
(lexical-let ((docroot default-directory))
(advice-add 'make-network-process :filter-args #'markdown-preview--fix-network-process-wait)
(setq markdown-preview--http-server
(ws-start
(lambda (request)
@@ -181,7 +197,8 @@ rendered copy to PREVIEW-FILE, ready to be open in browser."
(ws-send-file process filename)
(ws-send-404 process)
))))))
markdown-preview-http-port nil :host markdown-preview-http-host)))))
markdown-preview-http-port nil :host markdown-preview-http-host))
(advice-remove 'make-network-process #'my-filter))))
(defun markdown-preview--parse-uuid (headers)
"Find uuid query param in HEADERS."

View File

@@ -23,7 +23,7 @@
console.log('Code: ' + event.code + ' reason: ' + event.reason);
};
socket.onmessage = function(event) {
$("#markdown-body").html($(event.data).find("#content").html());
$("#markdown-body").html($(event.data).find("#content").html()).trigger('mdContentChange');
var scroll = $(document).height() * ($(event.data).find("#position-percentage").html() / 100);
$("html, body").animate({ scrollTop: scroll }, 600);
};