summaryrefslogtreecommitdiff
path: root/public/js
diff options
context:
space:
mode:
authorYukai Huang2016-10-11 18:39:15 +0800
committerYukai Huang2016-10-11 18:40:23 +0800
commit6e651c8108783d224c5f40d1bb8047a9ebbeff00 (patch)
treec7d501cc6ebb46399c397768b3f58ef05034c522 /public/js
parent21028c57735028574c769fb6650322eb3f0cb924 (diff)
parentcd9f8fe36b707ff5a9f8f7be4d55145ddee97f3a (diff)
Merge branch 'master' into webpack-frontend
Diffstat (limited to 'public/js')
-rw-r--r--public/js/common.js (renamed from public/js/common.js.example)20
-rw-r--r--public/js/config.js.example19
-rw-r--r--public/js/cover.js92
-rw-r--r--public/js/extra.js66
-rw-r--r--public/js/history.js59
-rw-r--r--public/js/index.js104
-rw-r--r--public/js/syncscroll.js2
-rw-r--r--public/js/unused.js45
8 files changed, 249 insertions, 158 deletions
diff --git a/public/js/common.js.example b/public/js/common.js
index 1c6a1c9c..19455f3d 100644
--- a/public/js/common.js.example
+++ b/public/js/common.js
@@ -1,20 +1,18 @@
-//common
-var domain = ''; // domain name
-var urlpath = ''; // sub url path, like: www.example.com/<urlpath>
-//settings
-var debug = false;
-
-var GOOGLE_API_KEY = '';
-var GOOGLE_CLIENT_ID = '';
-
-var DROPBOX_APP_KEY = '';
+var config = require('./config');
+var domain = config.domain; // domain name
+var urlpath = config.urlpath; // sub url path, like: www.example.com/<urlpath>
+var debug = config.debug;
+var GOOGLE_API_KEY = config.GOOGLE_API_KEY;
+var GOOGLE_CLIENT_ID = config.GOOGLE_CLIENT_ID;
+var DROPBOX_APP_KEY = config.DROPBOX_APP_KEY;
+//common
var port = window.location.port;
var serverurl = window.location.protocol + '//' + (domain ? domain : window.location.hostname) + (port ? ':' + port : '') + (urlpath ? '/' + urlpath : '');
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.4';
+var version = '0.4.5';
var checkAuth = false;
var profile = null;
diff --git a/public/js/config.js.example b/public/js/config.js.example
new file mode 100644
index 00000000..00c4f498
--- /dev/null
+++ b/public/js/config.js.example
@@ -0,0 +1,19 @@
+//config
+var domain = ''; // domain name
+var urlpath = ''; // sub url path, like: www.example.com/<urlpath>
+//settings
+var debug = false;
+
+var GOOGLE_API_KEY = '';
+var GOOGLE_CLIENT_ID = '';
+
+var DROPBOX_APP_KEY = '';
+
+module.exports = {
+ domain: domain,
+ urlpath: urlpath,
+ debug: debug,
+ GOOGLE_API_KEY: GOOGLE_API_KEY,
+ GOOGLE_CLIENT_ID: GOOGLE_CLIENT_ID,
+ DROPBOX_APP_KEY: DROPBOX_APP_KEY
+};
diff --git a/public/js/cover.js b/public/js/cover.js
index 6346f144..7156bf27 100644
--- a/public/js/cover.js
+++ b/public/js/cover.js
@@ -35,7 +35,11 @@ var options = {
</div>\
</div>\
</a>\
- </li>'
+ </li>',
+ page: 18,
+ plugins: [
+ ListPagination({})
+ ]
};
var historyList = new List('history', options);
@@ -183,19 +187,32 @@ function parseHistoryCallback(list, notehistory) {
pinned = false;
item._values.pinned = false;
}
- getHistory(function (notehistory) {
- for(var i = 0; i < notehistory.length; i++) {
- if (notehistory[i].id == id) {
- notehistory[i].pinned = pinned;
- break;
- }
- }
- saveHistory(notehistory);
- if (pinned)
- $this.addClass('active');
- else
- $this.removeClass('active');
- });
+ checkIfAuth(function () {
+ postHistoryToServer(id, {
+ pinned: pinned
+ }, function (err, result) {
+ if (!err) {
+ if (pinned)
+ $this.addClass('active');
+ else
+ $this.removeClass('active');
+ }
+ });
+ }, function () {
+ getHistory(function (notehistory) {
+ for(var i = 0; i < notehistory.length; i++) {
+ if (notehistory[i].id == id) {
+ notehistory[i].pinned = pinned;
+ break;
+ }
+ }
+ saveHistory(notehistory);
+ if (pinned)
+ $this.addClass('active');
+ else
+ $this.removeClass('active');
+ });
+ })
});
buildTagsFilter(filtertags);
}
@@ -216,23 +233,40 @@ var clearHistory = false;
var deleteId = null;
function deleteHistory() {
- if (clearHistory) {
- saveHistory([]);
- historyList.clear();
- checkHistoryList();
- deleteId = null;
- } else {
- if (!deleteId) return;
- getHistory(function (notehistory) {
- var newnotehistory = removeHistory(deleteId, notehistory);
- saveHistory(newnotehistory);
- historyList.remove('id', deleteId);
- checkHistoryList();
+ checkIfAuth(function () {
+ deleteServerHistory(deleteId, function (err, result) {
+ if (!err) {
+ if (clearHistory) {
+ historyList.clear();
+ checkHistoryList();
+ } else {
+ historyList.remove('id', deleteId);
+ checkHistoryList();
+ }
+ }
+ $('.delete-modal').modal('hide');
deleteId = null;
+ clearHistory = false;
});
- }
- $('.delete-modal').modal('hide');
- clearHistory = false;
+ }, function () {
+ if (clearHistory) {
+ saveHistory([]);
+ historyList.clear();
+ checkHistoryList();
+ deleteId = null;
+ } else {
+ if (!deleteId) return;
+ getHistory(function (notehistory) {
+ var newnotehistory = removeHistory(deleteId, notehistory);
+ saveHistory(newnotehistory);
+ historyList.remove('id', deleteId);
+ checkHistoryList();
+ deleteId = null;
+ });
+ }
+ $('.delete-modal').modal('hide');
+ clearHistory = false;
+ });
}
$(".ui-delete-modal-confirm").click(function () {
diff --git a/public/js/extra.js b/public/js/extra.js
index 4c4e66d6..25f0b3b1 100644
--- a/public/js/extra.js
+++ b/public/js/extra.js
@@ -12,6 +12,7 @@ var lastchangeui = {
user: $(".ui-lastchangeuser"),
nouser: $(".ui-no-lastchangeuser")
}
+var ownerui = $(".ui-owner");
function updateLastChange() {
if (!lastchangeui) return;
@@ -46,6 +47,23 @@ function updateLastChangeUser() {
}
}
+var owner = null;
+var ownerprofile = null;
+function updateOwner() {
+ if (ownerui) {
+ if (owner && ownerprofile && owner !== lastchangeuser) {
+ var icon = ownerui.children('i');
+ icon.attr('title', ownerprofile.name).tooltip('fixTitle');
+ var styleString = 'background-image:url(' + ownerprofile.photo + ')';
+ if (ownerprofile.photo && icon.attr('style') !== styleString)
+ icon.attr('style', styleString);
+ ownerui.show();
+ } else {
+ ownerui.hide();
+ }
+ }
+}
+
//get title
function getTitle(view) {
var title = "";
@@ -426,6 +444,33 @@ function finishView(view) {
height: '400px'
});
});
+ //syntax highlighting
+ view.find("pre.raw").removeClass("raw")
+ .each(function (key, value) {
+ var langDiv = $(value).find('code.hljs');
+ if (langDiv.length > 0) {
+ var reallang = langDiv[0].className.replace('hljs', '').trim();
+ var codeDiv = $(value).find('.code');
+ var code = "";
+ if (codeDiv.length > 0) code = codeDiv.html();
+ else code = langDiv.html();
+ code = md.utils.unescapeAll(code);
+ if (reallang == "tiddlywiki" || reallang == "mediawiki") {
+ var result = {
+ value: Prism.highlight(code, Prism.languages.wiki)
+ };
+ } else {
+ var languages = hljs.listLanguages();
+ if (languages.indexOf(reallang) == -1) {
+ var result = hljs.highlightAuto(code);
+ } else {
+ var result = hljs.highlight(reallang, code);
+ }
+ }
+ if (codeDiv.length > 0) codeDiv.html(result.value);
+ else langDiv.html(result.value);
+ }
+ });
//render title
document.title = renderTitle(view);
}
@@ -766,19 +811,9 @@ function highlightRender(code, lang) {
} else if (lang == 'mermaid') {
return '<div class="mermaid raw">' + code + '</div>';
}
- var reallang = lang.replace(/\=$|\=\d+$|\=\+$/, '');
- if (reallang == "tiddlywiki" || reallang == "mediawiki") {
- var result = {
- value: Prism.highlight(code, Prism.languages.wiki)
- };
- } else {
- var languages = hljs.listLanguages();
- if (languages.indexOf(reallang) == -1) {
- var result = hljs.highlightAuto(code);
- } else {
- var result = hljs.highlight(reallang, code);
- }
- }
+ var result = {
+ value: code
+ };
var showlinenumbers = /\=$|\=\d+$|\=\+$/.test(lang);
if (showlinenumbers) {
var startnumber = 1;
@@ -878,7 +913,7 @@ md.renderer.rules.fence = function (tokens, idx, options, env, self) {
return highlighted + '\n';
}
- return '<pre><code' + self.renderAttrs(token) + '>'
+ return '<pre class="raw"><code' + self.renderAttrs(token) + '>'
+ highlighted
+ '</code></pre>\n';
};
@@ -1050,5 +1085,6 @@ module.exports = {
renderFilename: renderFilename,
generateToc: generateToc,
smoothHashScroll: smoothHashScroll,
- scrollToHash: scrollToHash
+ scrollToHash: scrollToHash,
+ owner: owner
};
diff --git a/public/js/history.js b/public/js/history.js
index 192a40b3..91f3cccf 100644
--- a/public/js/history.js
+++ b/public/js/history.js
@@ -58,7 +58,7 @@ function saveHistoryToStorage(notehistory) {
if (store.enabled)
store.set('notehistory', JSON.stringify(notehistory));
else
- saveHistoryToStorage(notehistory);
+ saveHistoryToCookie(notehistory);
}
function saveHistoryToCookie(notehistory) {
@@ -107,8 +107,8 @@ function clearDuplicatedHistory(notehistory) {
var id = notehistory[i].id.replace(/\=+$/, '');
var newId = newnotehistory[j].id.replace(/\=+$/, '');
if (id == newId || notehistory[i].id == newnotehistory[j].id || !notehistory[i].id || !newnotehistory[j].id) {
- var time = moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a');
- var newTime = moment(newnotehistory[j].time, 'MMMM Do YYYY, h:mm:ss a');
+ var time = (typeof notehistory[i].time === 'number' ? moment(notehistory[i].time) : moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a'));
+ var newTime = (typeof newnotehistory[i].time === 'number' ? moment(newnotehistory[i].time) : moment(newnotehistory[i].time, 'MMMM Do YYYY, h:mm:ss a'));
if(time >= newTime) {
newnotehistory[j] = notehistory[i];
}
@@ -150,7 +150,8 @@ function removeHistory(id, notehistory) {
function writeHistory(view) {
checkIfAuth(
function () {
- writeHistoryToServer(view);
+ // no need to do this anymore, this will count from server-side
+ // writeHistoryToServer(view);
},
function () {
writeHistoryToStorage(view);
@@ -176,8 +177,8 @@ function writeHistoryToServer(view) {
var newnotehistory = generateHistory(view, notehistory);
saveHistoryToServer(newnotehistory);
})
- .fail(function () {
- writeHistoryToStorage(view);
+ .fail(function (xhr, status, error) {
+ console.error(xhr.responseText);
});
}
@@ -257,7 +258,7 @@ function renderHistory(view) {
return {
id: id,
text: title,
- time: moment().format('MMMM Do YYYY, h:mm:ss a'),
+ time: moment().valueOf(),
tags: tags
};
}
@@ -297,8 +298,8 @@ function getServerHistory(callback) {
callback(data.history);
}
})
- .fail(function () {
- getStorageHistory(callback);
+ .fail(function (xhr, status, error) {
+ console.error(xhr.responseText);
});
}
@@ -338,8 +339,8 @@ function parseServerToHistory(list, callback) {
parseToHistory(list, data.history, callback);
}
})
- .fail(function () {
- parseStorageToHistory(list, callback);
+ .fail(function (xhr, status, error) {
+ console.error(xhr.responseText);
});
}
@@ -368,9 +369,10 @@ function parseToHistory(list, notehistory, callback) {
else if (notehistory && notehistory.length > 0) {
for (var i = 0; i < notehistory.length; i++) {
//parse time to timestamp and fromNow
- notehistory[i].timestamp = moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a').valueOf();
- notehistory[i].fromNow = moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a').fromNow();
- notehistory[i].time = moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a').format('llll');
+ var timestamp = (typeof notehistory[i].time === 'number' ? moment(notehistory[i].time) : moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a'));
+ notehistory[i].timestamp = timestamp.valueOf();
+ notehistory[i].fromNow = timestamp.fromNow();
+ notehistory[i].time = timestamp.format('llll');
if (notehistory[i].id && list.get('id', notehistory[i].id).length == 0)
list.add(notehistory[i]);
}
@@ -378,6 +380,31 @@ function parseToHistory(list, notehistory, callback) {
callback(list, notehistory);
}
+function postHistoryToServer(noteId, data, callback) {
+ $.post(serverurl + '/history/' + noteId, data)
+ .done(function (result) {
+ return callback(null, result);
+ })
+ .fail(function (xhr, status, error) {
+ console.error(xhr.responseText);
+ return callback(error, null);
+ });
+}
+
+function deleteServerHistory(noteId, callback) {
+ $.ajax({
+ url: serverurl + '/history' + (noteId ? '/' + noteId : ""),
+ type: 'DELETE'
+ })
+ .done(function (result) {
+ return callback(null, result);
+ })
+ .fail(function (xhr, status, error) {
+ console.error(xhr.responseText);
+ return callback(error, null);
+ });
+}
+
module.exports = {
writeHistory: writeHistory,
parseHistory: parseHistory,
@@ -385,5 +412,7 @@ module.exports = {
getHistory: getHistory,
saveHistory: saveHistory,
removeHistory: removeHistory,
- parseStorageToHistory: parseStorageToHistory
+ parseStorageToHistory: parseStorageToHistory,
+ postHistoryToServer: postHistoryToServer,
+ deleteServerHistory: deleteServerHistory
}
diff --git a/public/js/index.js b/public/js/index.js
index ae823c42..67499f86 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -62,6 +62,7 @@ var renderTOC = extra.renderTOC;
var renderTitle = extra.renderTitle;
var renderFilename = extra.renderFilename;
var scrollToHash = extra.scrollToHash;
+var owner = extra.owner;
var historyModule = require('./history');
var writeHistory = historyModule.writeHistory;
@@ -72,6 +73,7 @@ var preventXSS = renderer.preventXSS;
var defaultTextHeight = 20;
var viewportMargin = 20;
var mac = CodeMirror.keyMap["default"] == CodeMirror.keyMap.macDefault;
+var defaultEditorMode = 'gfm';
var defaultExtraKeys = {
"F10": function (cm) {
cm.setOption("fullScreen", !cm.getOption("fullScreen"));
@@ -214,7 +216,7 @@ var cursorMenuThrottle = 50;
var cursorActivityDebounce = 50;
var cursorAnimatePeriod = 100;
var supportContainers = ['success', 'info', 'warning', 'danger'];
-var supportCodeModes = ['javascript', 'htmlmixed', 'htmlembedded', 'css', 'xml', 'clike', 'clojure', 'ruby', 'python', 'shell', 'php', 'sql', 'coffeescript', 'yaml', 'jade', 'lua', 'cmake', 'nginx', 'perl', 'sass', 'r', 'dockerfile', 'tiddlywiki', 'mediawiki'];
+var supportCodeModes = ['javascript', 'htmlmixed', 'htmlembedded', 'css', 'xml', 'clike', 'clojure', 'ruby', 'python', 'shell', 'php', 'sql', 'coffeescript', 'yaml', 'pug', 'lua', 'cmake', 'nginx', 'perl', 'sass', 'r', 'dockerfile', 'tiddlywiki', 'mediawiki'];
var supportCharts = ['sequence', 'flow', 'graphviz', 'mermaid'];
var supportHeaders = [
{
@@ -430,8 +432,8 @@ window.fileTypes = {
var textit = document.getElementById("textit");
if (!textit) throw new Error("There was no textit area!");
window.editor = CodeMirror.fromTextArea(textit, {
- mode: 'gfm',
- backdrop: 'gfm',
+ mode: defaultEditorMode,
+ backdrop: defaultEditorMode,
keyMap: "sublime",
viewportMargin: viewportMargin,
styleActiveLine: true,
@@ -440,7 +442,6 @@ window.editor = CodeMirror.fromTextArea(textit, {
showCursorWhenSelecting: true,
highlightSelectionMatches: true,
indentUnit: 4,
- indentWithTabs: true,
continueComments: "Enter",
theme: "one-dark",
inputStyle: "textarea",
@@ -675,7 +676,7 @@ function setSpellcheck() {
if (cookieSpellcheck === 'true' || cookieSpellcheck === true) {
mode = 'spell-checker';
} else {
- mode = 'gfm';
+ mode = defaultEditorMode;
}
if (mode && mode !== editor.getOption('mode')) {
editor.setOption('mode', mode);
@@ -685,10 +686,10 @@ function setSpellcheck() {
var spellcheckToggle = statusSpellcheck.find('.ui-spellcheck-toggle');
spellcheckToggle.click(function () {
var mode = editor.getOption('mode');
- if (mode == "gfm") {
+ if (mode == defaultEditorMode) {
mode = "spell-checker";
} else {
- mode = "gfm";
+ mode = defaultEditorMode;
}
if (mode && mode !== editor.getOption('mode')) {
editor.setOption('mode', mode);
@@ -700,7 +701,7 @@ function setSpellcheck() {
});
function checkSpellcheck() {
var mode = editor.getOption('mode');
- if (mode == "gfm") {
+ if (mode == defaultEditorMode) {
spellcheckToggle.removeClass('active');
} else {
spellcheckToggle.addClass('active');
@@ -748,7 +749,18 @@ function updateStatusBar() {
statusCursor.text(cursorText);
var fileText = ' — ' + editor.lineCount() + ' Lines';
statusFile.text(fileText);
- statusLength.text('Length ' + editor.getValue().length);
+ var docLength = editor.getValue().length;
+ statusLength.text('Length ' + docLength);
+ if (docLength > (docmaxlength * 0.95)) {
+ statusLength.css('color', 'red');
+ statusLength.attr('title', 'Your almost reach note max length limit.');
+ } else if (docLength > (docmaxlength * 0.8)) {
+ statusLength.css('color', 'orange');
+ statusLength.attr('title', 'You nearly fill the note, consider to make more pieces.');
+ } else {
+ statusLength.css('color', 'white');
+ statusLength.attr('title', 'You could write up to ' + docmaxlength + ' characters in this note.');
+ }
}
//ui vars
@@ -800,7 +812,8 @@ var ui = {
editable: $(".ui-permission-editable"),
locked: $(".ui-permission-locked"),
private: $(".ui-permission-private")
- }
+ },
+ delete: $(".ui-delete-note")
},
toc: {
toc: $('.ui-toc'),
@@ -989,7 +1002,7 @@ $(window).resize(function () {
});
//when page unload
$(window).on('unload', function () {
- updateHistoryInner();
+ //updateHistoryInner();
});
$(window).on('error', function () {
//setNeedRefresh();
@@ -1817,7 +1830,7 @@ function initRevisionViewer() {
if (revisionViewer) return;
var revisionViewerTextArea = document.getElementById("revisionViewer");
revisionViewer = CodeMirror.fromTextArea(revisionViewerTextArea, {
- mode: 'gfm',
+ mode: defaultEditorMode,
viewportMargin: viewportMargin,
lineNumbers: true,
lineWrapping: true,
@@ -2175,6 +2188,13 @@ ui.infobar.permission.locked.click(function () {
ui.infobar.permission.private.click(function () {
emitPermission("private");
});
+// delete note
+ui.infobar.delete.click(function () {
+ $('.delete-modal').modal('show');
+});
+$('.ui-delete-modal-confirm').click(function () {
+ socket.emit('delete');
+});
function emitPermission(_permission) {
if (_permission != permission) {
@@ -2263,24 +2283,30 @@ socket.on('info', function (data) {
console.error(data);
switch (data.code) {
case 403:
- location.href = "./403";
+ location.href = serverurl + "/403";
break;
case 404:
- location.href = "./404";
+ location.href = serverurl + "/404";
break;
case 500:
- location.href = "./500";
+ location.href = serverurl + "/500";
break;
}
});
socket.on('error', function (data) {
console.error(data);
if (data.message && data.message.indexOf('AUTH failed') === 0)
- location.href = "./403";
+ location.href = serverurl + "/403";
+});
+socket.on('delete', function () {
+ deleteServerHistory(noteid, function (err, data) {
+ if (!err) location.href = serverurl;
+ });
});
var retryOnDisconnect = false;
var retryTimer = null;
socket.on('maintenance', function () {
+ cmClient.revision = -1;
retryOnDisconnect = true;
});
socket.on('disconnect', function (data) {
@@ -2310,8 +2336,6 @@ socket.on('connect', function (data) {
personalInfo['id'] = socket.id;
showStatus(statusType.connected);
socket.emit('version');
- if (socket.id.indexOf('/') == -1)
- socket.id = socket.nsp + '#' + socket.id;
});
socket.on('version', function (data) {
if (version != data.version) {
@@ -2328,7 +2352,7 @@ var authorship = [];
var authorshipMarks = {};
var authorMarks = {}; // temp variable
var addTextMarkers = []; // temp variable
-function updateLastInfo(data) {
+function updateInfo(data) {
//console.log(data);
if (data.hasOwnProperty('createtime') && createtime !== data.createtime) {
createtime = data.createtime;
@@ -2338,10 +2362,16 @@ function updateLastInfo(data) {
lastchangetime = data.updatetime;
updateLastChange();
}
+ if (data.hasOwnProperty('owner') && owner !== data.owner) {
+ owner = data.owner;
+ ownerprofile = data.ownerprofile;
+ updateOwner();
+ }
if (data.hasOwnProperty('lastchangeuser') && lastchangeuser !== data.lastchangeuser) {
lastchangeuser = data.lastchangeuser;
lastchangeuserprofile = data.lastchangeuserprofile;
updateLastChangeUser();
+ updateOwner();
}
if (data.hasOwnProperty('authors') && authors !== data.authors) {
authors = data.authors;
@@ -2391,7 +2421,7 @@ var addStyleRule = (function () {
}());
function updateAuthorshipInner() {
// ignore when ot not synced yet
- if (Object.keys(cmClient.state).length > 0) return;
+ if (cmClient && Object.keys(cmClient.state).length > 0) return;
authorMarks = {};
for (var i = 0; i < authorship.length; i++) {
var atom = authorship[i];
@@ -2556,14 +2586,12 @@ socket.on('check', function (data) {
data = LZString.decompressFromUTF16(data);
data = JSON.parse(data);
//console.log(data);
- updateLastInfo(data);
+ updateInfo(data);
});
socket.on('permission', function (data) {
updatePermission(data.permission);
});
var docmaxlength = null;
-var otk = null;
-var owner = null;
var permission = null;
socket.on('refresh', function (data) {
data = LZString.decompressFromUTF16(data);
@@ -2571,10 +2599,8 @@ socket.on('refresh', function (data) {
//console.log(data);
docmaxlength = data.docmaxlength;
editor.setOption("maxLength", docmaxlength);
- otk = data.otk;
- owner = data.owner;
+ updateInfo(data);
updatePermission(data.permission);
- updateLastInfo(data);
if (!loaded) {
// auto change mode if no content detected
var nocontent = editor.getValue().length <= 0;
@@ -2617,16 +2643,14 @@ socket.on('doc', function (obj) {
obj = LZString.decompressFromUTF16(obj);
obj = JSON.parse(obj);
var body = obj.str;
- var bodyMismatch = (editor.getValue() != body);
+ var bodyMismatch = editor.getValue() !== body;
+ var setDoc = !cmClient || (cmClient && cmClient.revision === -1) || obj.force;
saveInfo();
- if (bodyMismatch) {
- if (cmClient)
- cmClient.editorAdapter.ignoreNextChange = true;
- if (body)
- editor.setValue(body);
- else
- editor.setValue("");
+ if (setDoc && bodyMismatch) {
+ if (cmClient) cmClient.editorAdapter.ignoreNextChange = true;
+ if (body) editor.setValue(body);
+ else editor.setValue("");
}
if (!loaded) {
@@ -2635,12 +2659,8 @@ socket.on('doc', function (obj) {
ui.content.fadeIn();
} else {
//if current doc is equal to the doc before disconnect
- if (bodyMismatch)
- editor.clearHistory();
- else {
- if (lastInfo.history)
- editor.setHistory(lastInfo.history);
- }
+ if (setDoc && bodyMismatch) editor.clearHistory();
+ else if (lastInfo.history) editor.setHistory(lastInfo.history);
lastInfo.history = null;
}
@@ -2649,7 +2669,7 @@ socket.on('doc', function (obj) {
obj.revision, obj.clients,
new SocketIOAdapter(socket), new CodeMirrorAdapter(editor)
);
- } else {
+ } else if (setDoc) {
if (bodyMismatch) {
cmClient.undoManager.undoStack.length = 0;
cmClient.undoManager.redoStack.length = 0;
@@ -2660,7 +2680,7 @@ socket.on('doc', function (obj) {
cmClient.initializeClients(obj.clients);
}
- if (bodyMismatch) {
+ if (setDoc && bodyMismatch) {
isDirty = true;
updateView();
}
diff --git a/public/js/syncscroll.js b/public/js/syncscroll.js
index 644022de..511c5000 100644
--- a/public/js/syncscroll.js
+++ b/public/js/syncscroll.js
@@ -78,7 +78,7 @@ md.renderer.rules.fence = function (tokens, idx, options, env, self) {
if (tokens[idx].map && tokens[idx].level === 0) {
var startline = tokens[idx].map[0] + 1;
var endline = tokens[idx].map[1];
- return '<pre class="part" data-startline="' + startline + '" data-endline="' + endline + '"><code' + self.renderAttrs(token) + '>'
+ return '<pre class="part raw" data-startline="' + startline + '" data-endline="' + endline + '"><code' + self.renderAttrs(token) + '>'
+ highlighted
+ '</code></pre>\n';
}
diff --git a/public/js/unused.js b/public/js/unused.js
deleted file mode 100644
index 4ff5b280..00000000
--- a/public/js/unused.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
- //parse Youtube
- result.find(".youtube").each(function (key, value) {
- if (!$(value).attr('videoid')) return;
- setSizebyAttr(this, this);
- var icon = '<i class="icon fa fa-youtube-play fa-5x"></i>';
- $(this).append(icon);
- var videoid = $(value).attr('videoid');
- var thumbnail_src = '//img.youtube.com/vi/' + videoid + '/hqdefault.jpg';
- $(value).css('background-image', 'url(' + thumbnail_src + ')');
- $(this).click(function () {
- imgPlayiframe(this, '//www.youtube.com/embed/');
- });
- });
- //parse vimeo
- result.find(".vimeo").each(function (key, value) {
- if (!$(value).attr('videoid')) return;
- setSizebyAttr(this, this);
- var icon = '<i class="icon fa fa-vimeo-square fa-5x"></i>';
- $(this).append(icon);
- var videoid = $(value).attr('videoid');
- $.ajax({
- type: 'GET',
- url: 'http://vimeo.com/api/v2/video/' + videoid + '.json',
- jsonp: 'callback',
- dataType: 'jsonp',
- success: function (data) {
- var thumbnail_src = data[0].thumbnail_large;
- $(value).css('background-image', 'url(' + thumbnail_src + ')');
- }
- });
- $(this).click(function () {
- imgPlayiframe(this, '//player.vimeo.com/video/');
- });
- });
- //todo list
- var lis = result[0].getElementsByTagName('li');
- for (var i = 0; i < lis.length; i++) {
- var html = lis[i].innerHTML;
- if (/^\s*\[[x ]\]\s*/.test(html)) {
- lis[i].innerHTML = html.replace(/^\s*\[ \]\s*/, '<input type="checkbox" class="task-list-item-checkbox" disabled>')
- .replace(/^\s*\[x\]\s*/, '<input type="checkbox" class="task-list-item-checkbox" checked disabled>');
- lis[i].setAttribute('class', 'task-list-item');
- }
- } \ No newline at end of file