summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.js2
-rw-r--r--lib/realtime.js4
-rw-r--r--public/js/index.js8
-rwxr-xr-xpublic/vendor/jquery-textcomplete/jquery.textcomplete.js35
4 files changed, 32 insertions, 17 deletions
diff --git a/app.js b/app.js
index b877bc8f..b8034add 100644
--- a/app.js
+++ b/app.js
@@ -512,7 +512,7 @@ process.on('SIGINT', function () {
if (history.isReady() && realtime.isReady()) {
models.Revision.checkAllNotesRevision(function (err, notes) {
if (err) throw new Error(err);
- if (notes.length <= 0) {
+ if (!notes || notes.length <= 0) {
clearInterval(checkCleanTimer);
return process.exit(0);
}
diff --git a/lib/realtime.js b/lib/realtime.js
index ea3735a6..d069a486 100644
--- a/lib/realtime.js
+++ b/lib/realtime.js
@@ -396,7 +396,7 @@ function finishConnection(socket, note, user) {
// update user note history
setTimeout(function () {
var noteId = note.alias ? note.alias : LZString.compressToBase64(note.id);
- history.updateHistory(user.userid, noteId, note.server.document);
+ if (note.server) history.updateHistory(user.userid, noteId, note.server.document);
}, 0);
emitOnlineUsers(socket);
@@ -669,7 +669,7 @@ function operationCallback(socket, operation) {
// update user note history
setTimeout(function() {
var noteId = note.alias ? note.alias : LZString.compressToBase64(note.id);
- history.updateHistory(userId, noteId, note.server.document);
+ if (note.server) history.updateHistory(userId, noteId, note.server.document);
}, 0);
}
diff --git a/public/js/index.js b/public/js/index.js
index f3bdf115..f8f997d8 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -2870,14 +2870,14 @@ function sortOnlineUserList(list) {
else if (usera.idle && !userb.idle)
return 1;
else {
- if (usera.name.toLowerCase() < userb.name.toLowerCase()) {
+ if (usera.name && usera.name.toLowerCase() < userb.name.toLowerCase()) {
return -1;
- } else if (usera.name.toLowerCase() > userb.name.toLowerCase()) {
+ } else if (usera.name && usera.name.toLowerCase() > userb.name.toLowerCase()) {
return 1;
} else {
- if (usera.color.toLowerCase() < userb.color.toLowerCase())
+ if (usera.color && usera.color.toLowerCase() < userb.color.toLowerCase())
return -1;
- else if (usera.color.toLowerCase() > userb.color.toLowerCase())
+ else if (usera.color && usera.color.toLowerCase() > userb.color.toLowerCase())
return 1;
else
return 0;
diff --git a/public/vendor/jquery-textcomplete/jquery.textcomplete.js b/public/vendor/jquery-textcomplete/jquery.textcomplete.js
index e1d90d0a..cd2f863d 100755
--- a/public/vendor/jquery-textcomplete/jquery.textcomplete.js
+++ b/public/vendor/jquery-textcomplete/jquery.textcomplete.js
@@ -863,16 +863,31 @@ if (typeof jQuery === 'undefined') {
//
// FIXME: Calculate the left top corner of `this.option.appendTo` element.
getCaretPosition: function () {
- //var position = this._getCaretRelativePosition();
- //var offset = this.$el.offset();
- //var offset = $('.CodeMirror-cursor').offset();
- var position = $('.CodeMirror-cursor').position();
- var menu = $('.cursor-menu .dropdown-menu');
- var offsetLeft = parseFloat(menu.attr('data-offset-left'));
- var offsetTop = parseFloat(menu.attr('data-offset-top'));
- position.left += offsetLeft;
- position.top += offsetTop;
- return position;
+ if ($('.CodeMirror-cursor').length > 0) {
+ var position = $('.CodeMirror-cursor').position();
+ var menu = $('.cursor-menu .dropdown-menu');
+ var offsetLeft = parseFloat(menu.attr('data-offset-left'));
+ var offsetTop = parseFloat(menu.attr('data-offset-top'));
+ position.left += offsetLeft;
+ position.top += offsetTop;
+ return position;
+ } else {
+ var position = this._getCaretRelativePosition();
+ var offset = this.$el.offset();
+
+ // Calculate the left top corner of `this.option.appendTo` element.
+ var $parent = this.option.appendTo;
+ if ($parent) {
+ if (!($parent instanceof $)) { $parent = $($parent); }
+ var parentOffset = $parent.offsetParent().offset();
+ offset.top -= parentOffset.top;
+ offset.left -= parentOffset.left;
+ }
+
+ position.top += offset.top;
+ position.left += offset.left;
+ return position;
+ }
},
// Focus on the element.