From 698338b49aec2f11993b4e92110d2f6851bf3760 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 | 14 ++++++++++---- 2 files changed, 12 insertions(+), 5 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 67bfaff89..33cf3a65c 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) { @@ -165,7 +171,7 @@ define([ doc: inner, // provide initialstate... - initialState: JSON.stringify(Hyperjson + initialState: stringify(Hyperjson .fromDOM(inner, isNotMagicLine)) || '{}', // really basic operational transform @@ -221,7 +227,7 @@ define([ // build a dom from HJSON, diff, and patch the editor applyHjson(shjson); - var shjson2 = JSON.stringify(Hyperjson.fromDOM(inner)); + var shjson2 = stringify(Hyperjson.fromDOM(inner)); if (shjson2 !== shjson) { console.error("shjson2 !== shjson"); module.realtimeInput.patchText(shjson2); @@ -270,7 +276,7 @@ define([ the code less extensible. */ var propogate = rti.onLocal = function () { - var shjson = JSON.stringify(Hyperjson.fromDOM(inner, isNotMagicLine, brFilter)); + var shjson = stringify(Hyperjson.fromDOM(inner, isNotMagicLine, brFilter)); if (!rti.patchText(shjson)) { return; }