summaryrefslogtreecommitdiff
path: root/public/js
diff options
context:
space:
mode:
Diffstat (limited to 'public/js')
-rw-r--r--public/js/common.js2
-rw-r--r--public/js/extra.js62
-rw-r--r--public/js/index.js24
-rw-r--r--public/js/slide.js16
4 files changed, 73 insertions, 31 deletions
diff --git a/public/js/common.js b/public/js/common.js
index b8ff3758..f5bfc8ec 100644
--- a/public/js/common.js
+++ b/public/js/common.js
@@ -12,7 +12,7 @@ window.serverurl = window.location.protocol + '//' + (domain ? domain : window.l
var noteid = urlpath ? window.location.pathname.slice(urlpath.length + 1, window.location.pathname.length).split('/')[1] : window.location.pathname.split('/')[1];
var noteurl = serverurl + '/' + noteid;
-var version = '0.4.5';
+var version = '0.5.0';
var checkAuth = false;
var profile = null;
diff --git a/public/js/extra.js b/public/js/extra.js
index a4eed879..4a9cc76e 100644
--- a/public/js/extra.js
+++ b/public/js/extra.js
@@ -11,6 +11,7 @@ var PDFObject = require('pdfobject');
var S = require('string');
var saveAs = require('file-saver').saveAs;
require('../vendor/md-toc');
+var Viz = require("viz.js");
//auto update last change
window.createtime = null;
@@ -308,6 +309,7 @@ function finishView(view) {
svg[0].setAttribute('preserveAspectRatio', 'xMidYMid meet');
} catch (err) {
$value.unwrap();
+ $value.parent().append('<div class="alert alert-warning">' + err + '</div>');
console.warn(err);
}
});
@@ -331,25 +333,36 @@ function finishView(view) {
$value.children().unwrap().unwrap();
} catch (err) {
$value.unwrap();
+ $value.parent().append('<div class="alert alert-warning">' + err + '</div>');
console.warn(err);
}
});
//graphviz
- var Viz = require("viz.js");
var graphvizs = view.find("div.graphviz.raw").removeClass("raw");
- graphvizs.each(function (key, value) {
- try {
- var $value = $(value);
- var $ele = $(value).parent().parent();
+ function parseGraphviz(key, value) {
+ var $value = $(value);
+ var $ele = $(value).parent().parent();
- var graphviz = Viz($value.text());
- $value.html(graphviz);
+ var graphviz = Viz($value.text());
+ if (!graphviz) throw Error('viz.js output empty graph');
+ $value.html(graphviz);
- $ele.addClass('graphviz');
- $value.children().unwrap().unwrap();
+ $ele.addClass('graphviz');
+ $value.children().unwrap().unwrap();
+ }
+ graphvizs.each(function (key, value) {
+ try {
+ parseGraphviz(key, value);
} catch (err) {
- $value.unwrap();
- console.warn(err);
+ // workaround for graphviz not recover from error
+ try {
+ parseGraphviz(key, value);
+ } catch (err) {
+ var $value = $(value);
+ $value.unwrap();
+ $value.parent().append('<div class="alert alert-warning">' + err + '</div>');
+ console.warn(err);
+ }
}
});
//mermaid
@@ -369,11 +382,11 @@ function finishView(view) {
$ele.html($value.text());
mermaid.init(undefined, $ele);
} else {
- $value.unwrap();
- console.warn(mermaidError);
+ throw new Error(mermaidError);
}
} catch (err) {
$value.unwrap();
+ $value.parent().append('<div class="alert alert-warning">' + err + '</div>');
console.warn(err);
}
});
@@ -532,6 +545,16 @@ function postProcess(code) {
});
}
}
+ // show yaml meta paring error
+ if (md.metaError) {
+ var warning = result.find('div#meta-error');
+ if (warning && warning.length > 0) {
+ warning.text(md.metaError)
+ } else {
+ warning = $('<div id="meta-error" class="alert alert-warning">' + md.metaError + '</div>')
+ result.prepend(warning);
+ }
+ }
return result;
}
window.postProcess = postProcess;
@@ -903,7 +926,14 @@ md.use(require('markdown-it-mark'));
md.use(require('markdown-it-ins'));
md.use(require('markdown-it-sub'));
md.use(require('markdown-it-sup'));
-md.use(require('../vendor/markdown-it-mathjax'));
+md.use(require('markdown-it-mathjax')({
+ beforeMath: '<span class="mathjax raw">',
+ afterMath: '</span>',
+ beforeInlineMath: '<span class="mathjax raw">\\(',
+ afterInlineMath: '\\)</span>',
+ beforeDisplayMath: '<span class="mathjax raw">\\[',
+ afterDisplayMath: '\\]</span>'
+}));
md.use(require('markdown-it-imsize'));
md.use(require('markdown-it-emoji'), {
@@ -980,7 +1010,7 @@ md.renderer.rules.fence = function (tokens, idx, options, env, self) {
};
/* Defined regex markdown it plugins */
-require('script!../vendor/markdown-it-regexp');
+var Plugin = require('markdown-it-regexp');
//youtube
var youtubePlugin = new Plugin(
@@ -1104,7 +1134,9 @@ function meta(state, start, end, silent) {
try {
md.meta = jsyaml.safeLoad(data.join('\n')) || {};
+ delete md.metaError;
} catch(err) {
+ md.metaError = err;
console.warn(err);
return false;
}
diff --git a/public/js/index.js b/public/js/index.js
index 96580fe3..56766657 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -11,7 +11,6 @@ require('highlight.js/styles/github-gist.css');
var toMarkdown = require('to-markdown');
var saveAs = require('file-saver').saveAs;
-var url = require('js-url');
var randomColor = require('randomcolor');
var _ = require("lodash");
@@ -1224,7 +1223,11 @@ function checkSyncToggle() {
}
}
-function checkEditorScrollbar() {
+var checkEditorScrollbar = _.debounce(function () {
+ editor.operation(checkEditorScrollbarInner);
+}, 50);
+
+function checkEditorScrollbarInner() {
// workaround simple scroll bar knob
// will get wrong position when editor height changed
var scrollInfo = editor.getScrollInfo();
@@ -2444,7 +2447,7 @@ function updateInfo(data) {
updateAuthorship();
}
}
-var updateAuthorship = _.throttle(function () {
+var updateAuthorship = _.debounce(function () {
editor.operation(updateAuthorshipInner);
}, 50);
function initMark() {
@@ -2646,8 +2649,6 @@ editor.on('update', function () {
});
});
socket.on('check', function (data) {
- data = LZString.decompressFromUTF16(data);
- data = JSON.parse(data);
//console.log(data);
updateInfo(data);
});
@@ -2657,8 +2658,6 @@ socket.on('permission', function (data) {
var docmaxlength = null;
var permission = null;
socket.on('refresh', function (data) {
- data = LZString.decompressFromUTF16(data);
- data = JSON.parse(data);
//console.log(data);
docmaxlength = data.docmaxlength;
editor.setOption("maxLength", docmaxlength);
@@ -2705,8 +2704,6 @@ var CodeMirrorAdapter = ot.CodeMirrorAdapter;
var cmClient = null;
socket.on('doc', function (obj) {
- obj = LZString.decompressFromUTF16(obj);
- obj = JSON.parse(obj);
var body = obj.str;
var bodyMismatch = editor.getValue() !== body;
var havePendingOperation = cmClient && Object.keys(cmClient.state).length > 0;
@@ -2767,8 +2764,6 @@ socket.on('operation', function () {
});
socket.on('online users', function (data) {
- data = LZString.decompressFromUTF16(data);
- data = JSON.parse(data);
if (debug)
console.debug(data);
onlineUsers = data.users;
@@ -3216,6 +3211,12 @@ function buildCursor(user) {
}
//editor actions
+function removeNullByte(cm, change) {
+ var str = change.text.join("\n");
+ if (/\u0000/g.test(str) && change.update) {
+ change.update(change.from, change.to, str.replace(/\u0000/g, "").split("\n"));
+ }
+}
function enforceMaxLength(cm, change) {
var maxLength = cm.getOption("maxLength");
if (maxLength && change.update) {
@@ -3237,6 +3238,7 @@ var ignoreEmitEvents = ['setValue', 'ignoreHistory'];
editor.on('beforeChange', function (cm, change) {
if (debug)
console.debug(change);
+ removeNullByte(cm, change);
if (enforceMaxLength(cm, change)) {
$('.limit-modal').modal('show');
}
diff --git a/public/js/slide.js b/public/js/slide.js
index 4962470e..1ff388a5 100644
--- a/public/js/slide.js
+++ b/public/js/slide.js
@@ -107,13 +107,21 @@ window.viewAjaxCallback = function () {
};
function renderSlide(event) {
- var markdown = $(event.currentSlide);
- if (!markdown.attr('data-rendered')) {
+ if (window.location.search.match( /print-pdf/gi )) {
+ var slides = $('.slides');
var title = document.title;
- finishView(markdown);
- markdown.attr('data-rendered', 'true');
+ finishView(slides);
document.title = title;
Reveal.layout();
+ } else {
+ var markdown = $(event.currentSlide);
+ if (!markdown.attr('data-rendered')) {
+ var title = document.title;
+ finishView(markdown);
+ markdown.attr('data-rendered', 'true');
+ document.title = title;
+ Reveal.layout();
+ }
}
}