From f5b0e1a5df7c51be6615885b3a51db8cec8fcecd Mon Sep 17 00:00:00 2001 From: ansuz Date: Thu, 7 Apr 2016 15:50:56 +0200 Subject: [PATCH] Add comments, debug variables. initialize better Expose Hyperscript via window.REALTIME_MODULE Make sure to pass in a JSON.parse'able initial state. Add comments detailing the problems with not using setAttribute --- www/_socket/main.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/www/_socket/main.js b/www/_socket/main.js index 0974a66f0..3b2095be4 100644 --- a/www/_socket/main.js +++ b/www/_socket/main.js @@ -28,7 +28,9 @@ define([ toolbar; var module = window.REALTIME_MODULE = { - localChangeInProgress: 0 + localChangeInProgress: 0, + Hyperjson: Hyperjson, + Hyperscript: Hyperscript }; var isNotMagicLine = function (el) { @@ -163,7 +165,8 @@ define([ doc: inner, // provide initialstate... - initialState: JSON.stringify(Hyperjson.fromDOM(inner, isNotMagicLine)), + initialState: JSON.stringify(Hyperjson + .fromDOM(inner, isNotMagicLine)) || '{}', // really basic operational transform // reject patch if it results in invalid JSON @@ -200,6 +203,21 @@ define([ var userDocStateDom = hjsonToDom(JSON.parse(shjson)); localWorkInProgress(2); // check again + + + /* in the DOM contentEditable is "false" + while "contenteditable" is undefined. + + When it goes over the wire, it seems hyperjson transforms it. + of course, hyperjson simply gets attributes from the DOM. + + el.attributes returns 'contenteditable', so we have to correct for that + + There are quite possibly all sorts of other attributes which might lose + information, and we won't know what they are until after we've lost them. + + this comes from hyperscript line 101. FIXME maybe + */ userDocStateDom.setAttribute("contenteditable", "true"); // lol wtf localWorkInProgress(3); // check again var patch = (DD).diff(inner, userDocStateDom);