From 49d2e42b41eb772e7d428d72641584198273c7e4 Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Sat, 5 May 2018 15:33:16 +0200 Subject: [PATCH] fix missing dom-binding - still investigating --- src/Bindings/DomBinding/domObserver.js | 14 +++++++++++++- src/Bindings/DomBinding/typeObserver.js | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Bindings/DomBinding/domObserver.js b/src/Bindings/DomBinding/domObserver.js index 593510a5..48929dfa 100644 --- a/src/Bindings/DomBinding/domObserver.js +++ b/src/Bindings/DomBinding/domObserver.js @@ -60,8 +60,8 @@ function applyChangesFromDom (binding, dom, yxml, _document) { removeAssociation(binding, childNode, childType) } else { // child was moved to a different position. - childType._delete(y) removeAssociation(binding, childNode, childType) + childType._delete(y) } prevExpectedType = insertNodeHelper(yxml, prevExpectedType, childNode, _document, binding) } else { @@ -92,6 +92,18 @@ export default function domObserver (mutations, _document) { const yxml = this.domToType.get(dom) if (yxml === false || yxml === undefined || yxml.constructor === YXmlHook) { // dom element is filtered + if (yxml === undefined) { // In case yxml is undefined, we double check if we forgot to bind the dom + console.error('Yjs DomBinding: Reconstructing DomBinding, please report how to reproduce this.') + let parent + let yParent + do { + parent = dom.parentNode + yParent = this.domToType.get(parent) + } while (yParent === undefined) + if (yParent !== false && yParent !== undefined && yParent.constructor !== YXmlHook) { + diffChildren.add(parent) + } + } return } switch (mutation.type) { diff --git a/src/Bindings/DomBinding/typeObserver.js b/src/Bindings/DomBinding/typeObserver.js index 6b193159..d874e7af 100644 --- a/src/Bindings/DomBinding/typeObserver.js +++ b/src/Bindings/DomBinding/typeObserver.js @@ -8,7 +8,7 @@ function findScrollReference (scrollingElement) { if (scrollingElement !== null) { let anchor = getSelection().anchorNode if (anchor == null) { - let children = scrollingElement.children + let children = scrollingElement.children // only iterate through non-text nodes for (let i = 0; i < children.length; i++) { const elem = children[i] const rect = elem.getBoundingClientRect()