diff --git a/bower.json b/bower.json index bdb976482..2f1277bc5 100644 --- a/bower.json +++ b/bower.json @@ -25,6 +25,7 @@ "ckeditor": "~4.5.6", "requirejs": "~2.1.15", "modalBox": "~1.0.2", - "reconnectingWebsocket": "" + "reconnectingWebsocket": "", + "diff-dom": "~2.0.0" } } diff --git a/www/common/realtime-input.js b/www/common/realtime-input.js index 3a0788401..146206dd1 100644 --- a/www/common/realtime-input.js +++ b/www/common/realtime-input.js @@ -230,8 +230,8 @@ define([ //verbose("Received own message"); } else { //verbose("Received remote message"); - // obviously this is only going to get called if - onRemote && onRemote(realtime.getAuthDoc()); + // obviously this is only going to get called if + onRemote && onRemote(realtime.getUserDoc()); } } } @@ -290,7 +290,7 @@ define([ }); return { onEvent: function () { - onEvent(); + onEvent(); }, bumpSharejs: function () { bump(); } }; diff --git a/www/vdom/main.js b/www/vdom/main.js index b734039b1..350e5e8ca 100644 --- a/www/vdom/main.js +++ b/www/vdom/main.js @@ -6,12 +6,15 @@ define([ '/common/convert.js', '/common/toolbar.js', '/common/cursor.js', + '/bower_components/diff-dom/diffDOM.js', + '/bower_components/jquery/dist/jquery.min.js', '/customize/pad.js' ], function (Config, Messages, Crypto, realtimeInput, Convert, Toolbar, Cursor) { var $ = window.jQuery; var ifrw = $('#pad-iframe')[0].contentWindow; window.Ckeditor = ifrw.CKEDITOR; + var DiffDom = window.diffDOM; var userName = Crypto.rand64(8), toolbar; @@ -59,16 +62,11 @@ define([ var applyHjson = function (shjson) { console.log("Applying HJSON"); - // before integrating external changes, check in your own - vdom1 = Convert.dom.to.vdom(inner); - // the authoritative document is hyperjson, parse it - var authDoc = JSON.parse(shjson); - // use the authdoc to construct a second vdom - var vdom2 = Convert.hjson.to.vdom(authDoc); - // diff it against your version - var patches = Vdom.diff(vdom1, vdom2); - // apply the resulting patches - Vdom.patch(inner, patches); + var userDocStateDom = Vdom.create(Convert.hjson.to.vdom(JSON.parse(shjson))); + userDocStateDom.setAttribute("contentEditable", "true"); // lol wtf + var patch = (new DiffDom()).diff(inner, userDocStateDom); + console.log(userDocStateDom.outerHTML); + (new DiffDom()).apply(inner, patch); }; var onRemote = function (shjson) { @@ -104,7 +102,7 @@ define([ onInit: onInit, transformFunction : function (text, toTransform, transformBy) { - /* FIXME + /* FIXME operational transform on json shouldn't be in all editors just those transmitting/expecting JSON */