From 319f5b95f7e33f42184a0f48e1cd44a163a8b977 Mon Sep 17 00:00:00 2001 From: Caleb James DeLisle Date: Wed, 13 Apr 2016 16:43:59 +0200 Subject: [PATCH] Use canonical serializer for json serialization --- bower.json | 3 ++- www/_socket/main.js | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/bower.json b/bower.json index ec66645b9..cd96b4d24 100644 --- a/bower.json +++ b/bower.json @@ -28,6 +28,7 @@ "reconnectingWebsocket": "", "diff-dom": "https://github.com/fiduswriter/diffDOM.git#6fdb82c8a4f2096c07c129797a313fe13769e094", "marked": "~0.3.5", - "rangy": "rangy-release#~1.3.0" + "rangy": "rangy-release#~1.3.0", + "json.sortify": "~2.1.0" } } diff --git a/www/_socket/main.js b/www/_socket/main.js index 042bd3c20..73831ac71 100644 --- a/www/_socket/main.js +++ b/www/_socket/main.js @@ -1,3 +1,4 @@ +require.config({ paths: { 'json.sortify': '/bower_components/json.sortify/dist/JSON.sortify' } }); define([ '/api/config?cb=' + Math.random().toString(16).substring(2), '/common/messages.js', @@ -9,15 +10,20 @@ define([ '/common/cursor.js', '/common/json-ot.js', '/common/TypingTests.js', + 'json.sortify', '/bower_components/diff-dom/diffDOM.js', '/bower_components/jquery/dist/jquery.min.js', '/customize/pad.js' -], function (Config, Messages, Crypto, realtimeInput, Hyperjson, Hyperscript, Toolbar, Cursor, JsonOT, TypingTest) { +], function (Config, Messages, Crypto, realtimeInput, Hyperjson, Hyperscript, Toolbar, Cursor, JsonOT, TypingTest, JSONSortify) { var $ = window.jQuery; var ifrw = $('#pad-iframe')[0].contentWindow; var Ckeditor; // to be initialized later... var DiffDom = window.diffDOM; + var stringify = function (obj) { + return JSONSortify(obj); + }; + window.Hyperjson = Hyperjson; var hjsonToDom = function (H) { @@ -52,7 +58,7 @@ define([ }; var stringifyDOM = function (dom) { - return JSON.stringify(Hyperjson.fromDOM(dom, isNotMagicLine, brFilter)); + return stringify(Hyperjson.fromDOM(dom, isNotMagicLine, brFilter)); }; var andThen = function (Ckeditor) { @@ -233,7 +239,6 @@ define([ applyHjson(shjson); var shjson2 = stringifyDOM(inner); - if (shjson2 !== shjson) { console.error("shjson2 !== shjson"); module.realtimeInput.patchText(shjson2);