From f990927d3e4d5e79511611e43cc67a64c9a5862f Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Mon, 8 May 2017 12:01:51 +0200 Subject: [PATCH] implemented Y.utils.bubbleEvent --- src/Utils.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Utils.js b/src/Utils.js index 223514e2..18467db8 100644 --- a/src/Utils.js +++ b/src/Utils.js @@ -26,6 +26,20 @@ module.exports = function (Y /* : any*/) { Y.utils = {} + Y.utils.bubbleEvent = function (type, event) { + type.eventHandler.callEventListeners(event) + event.path = [] + while (type != null && type._deepEventHandler != null) { + type._deepEventHandler.callEventListeners(event) + if (type._parent != null && type._parentSub != null) { + event.path = [type._parentSub].concat(event.path) + type = type.os.getType(type._parent) + } else { + type = null + } + } + } + class EventListenerHandler { constructor () { this.eventListeners = [] @@ -50,7 +64,11 @@ module.exports = function (Y /* : any*/) { callEventListeners (event) { for (var i = 0; i < this.eventListeners.length; i++) { try { - this.eventListeners[i](event) + var _event = {} + for (var name in event) { + _event[name] = event[name] + } + this.eventListeners[i](_event) } catch (e) { console.error('Your observer threw an error. This error was caught so that Yjs still can ensure data consistency! In order to debug this error you have to check "Pause On Caught Exceptions"', e) }