From 6ad8566e244c122ac70acc793036ed51b539d0a6 Mon Sep 17 00:00:00 2001 From: James Allen Date: Mon, 7 Apr 2014 11:23:21 +0100 Subject: [PATCH] Check that the ace text matches ShareJS each time --- .../web/public/coffee/editor/Document.coffee | 16 ++++++++++++++-- services/web/public/coffee/ide.coffee | 7 +++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/services/web/public/coffee/editor/Document.coffee b/services/web/public/coffee/editor/Document.coffee index 56c3aa384f..e1380dba8e 100644 --- a/services/web/public/coffee/editor/Document.coffee +++ b/services/web/public/coffee/editor/Document.coffee @@ -1,6 +1,7 @@ define [ "editor/ShareJsDoc" "libs/backbone" + "libs/underscore" ], (ShareJsDoc) -> class Document @getDocument: (ide, doc_id) -> @@ -13,14 +14,25 @@ define [ @connected = @ide.socket.socket.connected @joined = false @wantToBeJoined = false + @_checkConsistency = _.bind(@_checkConsistency, @) @_bindToEditorEvents() @_bindToSocketEvents() - attachToAce: (ace) -> - @doc?.attachToAce(ace) + attachToAce: (@ace) -> + @doc?.attachToAce(@ace) + editorDoc = @ace.getSession().getDocument() + editorDoc.on "change", @_checkConsistency detachFromAce: () -> @doc?.detachFromAce() + editorDoc = @ace.getSession().getDocument() + editorDoc.off "change", @_checkConsistency + + _checkConsistency: () -> + editorValue = @ace?.getValue() + sharejsValue = @doc?.getSnapshot() + if editorValue != sharejsValue + @_onError "error", new Error("Editor text does not match server text") getSnapshot: () -> @doc?.getSnapshot() diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index e58a5cc27b..2dec585952 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -174,8 +174,11 @@ define [ meta.client_now = new Date() meta.recent_events = @recentEvents errorObj = {} - for key in Object.getOwnPropertyNames(error) - errorObj[key] = error[key] + if typeof error == "object" + for key in Object.getOwnPropertyNames(error) + errorObj[key] = error[key] + else if typeof error == "string" + errorObj.message = error $.ajax url: "/error/client" type: "POST"