From 7863db480ec2890dd6c76daaf928e0c4417ff1a4 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 20 Oct 2014 17:03:16 -0600 Subject: [PATCH] Override jQuery.contains instead of jQuery.fn.position MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Turns out the problems with position inside the shadow DOM are due to the fact that elements in the light DOM don’t claim to contain elements from a shadow DOM, causing jQuery.fn.offset to bail out early and misreport positions inside the editor. --- src/space-pen-extensions.coffee | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/space-pen-extensions.coffee b/src/space-pen-extensions.coffee index 08bb13064..5d72851ea 100644 --- a/src/space-pen-extensions.coffee +++ b/src/space-pen-extensions.coffee @@ -78,10 +78,17 @@ jQuery.event.remove = (elem, types, originalHandler, selector, mappedTypes) -> handler = HandlersByOriginalHandler.get(originalHandler) ? originalHandler JQueryEventRemove(elem, types, handler, selector, mappedTypes, RemoveEventListener if atom?.commands?) -jQuery.fn.position = -> - top = @[0].offsetTop - left = @[0].offsetLeft - {top, left} +JQueryContains = jQuery.contains + +jQuery.contains = (a, b) -> + shadowRoot = null + currentNode = b + while currentNode + if currentNode instanceof ShadowRoot and a.contains(currentNode.host) + return true + currentNode = currentNode.parentNode + + JQueryContains.call(this, a, b) tooltipDefaults = delay: