From dacf6254a66e4c174b461156a5d3d3841cc812a4 Mon Sep 17 00:00:00 2001 From: Maxim Baz Date: Sat, 3 Jan 2015 00:59:34 +0100 Subject: [PATCH] added a rule to skip addEventListener hook only if element is used as a container to hold delegated events for children #1404 --- pages/addEventListener_hook.coffee | 10 +++++++++- pages/jQuery_delegatedEvents_hook.coffee | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pages/addEventListener_hook.coffee b/pages/addEventListener_hook.coffee index ae19689d1..f0134e9ba 100644 --- a/pages/addEventListener_hook.coffee +++ b/pages/addEventListener_hook.coffee @@ -6,7 +6,15 @@ _addEventListener = Element::addEventListener Element::addEventListener = (type, listener, useCapture) -> if type == "click" unless @hasAttribute "vimium-has-onclick-listener" - @setAttribute "vimium-has-onclick-listener", "" + skipCounter = 0 + if @hasAttribute "vimium-skip-onclick-listener" + skipCounter = parseInt @getAttribute("vimium-skip-onclick-listener") + + if skipCounter is 0 + @setAttribute "vimium-has-onclick-listener", "" + else + @setAttribute "vimium-skip-onclick-listener", skipCounter - 1 + _addEventListener.apply this, arguments if window.event? diff --git a/pages/jQuery_delegatedEvents_hook.coffee b/pages/jQuery_delegatedEvents_hook.coffee index 2166bacab..84e607380 100644 --- a/pages/jQuery_delegatedEvents_hook.coffee +++ b/pages/jQuery_delegatedEvents_hook.coffee @@ -18,6 +18,10 @@ Object.defineProperty window, "jQuery", if selectors.indexOf("#{sep}#{selector}#{sep}") < 0 element.setAttribute attrKey, selectors + selector + sep + # jQuery will use addEventListener, but we don't want to hook this particular call. + skipCounter = parseInt element.getAttribute("vimium-skip-onclick-listener") || "0" + element.setAttribute "vimium-skip-onclick-listener", skipCounter + 1 + return on_.apply @, arguments return jQuery