From 30dd32c1b538d5eaa7cc45be9de3619bd246071a Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Mon, 4 Sep 2017 11:05:20 -0400 Subject: [PATCH] Normalize event.target for old browsers incorrectly handling SVG elements --- assets/javascripts/lib/page.coffee | 2 +- assets/javascripts/lib/util.coffee | 3 +++ assets/javascripts/views/content/content.coffee | 2 +- assets/javascripts/views/content/entry_page.coffee | 2 +- assets/javascripts/views/content/offline_page.coffee | 2 +- assets/javascripts/views/content/root_page.coffee | 2 +- assets/javascripts/views/layout/document.coffee | 5 +++-- assets/javascripts/views/layout/menu.coffee | 3 ++- assets/javascripts/views/list/list_focus.coffee | 5 +++-- assets/javascripts/views/list/list_fold.coffee | 2 +- assets/javascripts/views/list/list_select.coffee | 5 +++-- assets/javascripts/views/list/paginated_list.coffee | 5 +++-- assets/javascripts/views/misc/notif.coffee | 5 +++-- assets/javascripts/views/sidebar/doc_list.coffee | 5 +++-- assets/javascripts/views/sidebar/results.coffee | 2 +- assets/javascripts/views/sidebar/sidebar.coffee | 2 +- 16 files changed, 31 insertions(+), 21 deletions(-) diff --git a/assets/javascripts/lib/page.coffee b/assets/javascripts/lib/page.coffee index 2089def2..d8159094 100644 --- a/assets/javascripts/lib/page.coffee +++ b/assets/javascripts/lib/page.coffee @@ -170,7 +170,7 @@ onclick = (event) -> catch return - link = event.target + link = $.eventTarget(event) link = link.parentNode while link and link.tagName isnt 'A' if link and not link.target and isSameOrigin(link.href) diff --git a/assets/javascripts/lib/util.coffee b/assets/javascripts/lib/util.coffee index f0c9140f..1242d85f 100644 --- a/assets/javascripts/lib/util.coffee +++ b/assets/javascripts/lib/util.coffee @@ -60,6 +60,9 @@ $.stopEvent = (event) -> event.stopImmediatePropagation() return +$.eventTarget = (event) -> + event.target.correspondingUseElement || event.target + # # Manipulation # diff --git a/assets/javascripts/views/content/content.coffee b/assets/javascripts/views/content/content.coffee index 848a2e9b..7cf99409 100644 --- a/assets/javascripts/views/content/content.coffee +++ b/assets/javascripts/views/content/content.coffee @@ -169,7 +169,7 @@ class app.views.Content extends app.View return onClick: (event) => - link = $.closestLink event.target, @el + link = $.closestLink $.eventTarget(event), @el if link and @isExternalUrl link.getAttribute('href') $.stopEvent(event) $.popup(link) diff --git a/assets/javascripts/views/content/entry_page.coffee b/assets/javascripts/views/content/entry_page.coffee index 93f8eaf5..3779d5ba 100644 --- a/assets/javascripts/views/content/entry_page.coffee +++ b/assets/javascripts/views/content/entry_page.coffee @@ -140,7 +140,7 @@ class app.views.EntryPage extends app.View true onClick: (event) => - target = event.target + target = $.eventTarget(event) if target.hasAttribute 'data-retry' $.stopEvent(event) @load() diff --git a/assets/javascripts/views/content/offline_page.coffee b/assets/javascripts/views/content/offline_page.coffee index 58f2a181..f37bbf8f 100644 --- a/assets/javascripts/views/content/offline_page.coffee +++ b/assets/javascripts/views/content/offline_page.coffee @@ -50,7 +50,7 @@ class app.views.OfflinePage extends app.View return onClick: (event) => - el = event.target + el = $.eventTarget(event) if action = el.getAttribute('data-action') doc = @docByEl(el) action = 'install' if action is 'update' diff --git a/assets/javascripts/views/content/root_page.coffee b/assets/javascripts/views/content/root_page.coffee index 5ab7c278..c963830b 100644 --- a/assets/javascripts/views/content/root_page.coffee +++ b/assets/javascripts/views/content/root_page.coffee @@ -30,7 +30,7 @@ class app.views.RootPage extends app.View onRoute: -> onClick: (event) => - if event.target.hasAttribute 'data-hide-intro' + if $.eventTarget(event).hasAttribute 'data-hide-intro' $.stopEvent(event) @hideIntro() return diff --git a/assets/javascripts/views/layout/document.coffee b/assets/javascripts/views/layout/document.coffee index 8a541361..5d01a325 100644 --- a/assets/javascripts/views/layout/document.coffee +++ b/assets/javascripts/views/layout/document.coffee @@ -71,9 +71,10 @@ class app.views.Document extends app.View return onClick: (event) -> - return unless event.target.hasAttribute('data-behavior') + target = $.eventTarget(event) + return unless target.hasAttribute('data-behavior') $.stopEvent(event) - switch event.target.getAttribute('data-behavior') + switch target.getAttribute('data-behavior') when 'back' then history.back() when 'reload' then window.location.reload() when 'reboot' then window.location = '/' diff --git a/assets/javascripts/views/layout/menu.coffee b/assets/javascripts/views/layout/menu.coffee index 6909ea6c..e2282176 100644 --- a/assets/javascripts/views/layout/menu.coffee +++ b/assets/javascripts/views/layout/menu.coffee @@ -10,7 +10,8 @@ class app.views.Menu extends app.View return onClick: (event) -> - event.target.blur() if event.target.tagName is 'A' + target = $.eventTarget(event) + target.blur() if target.tagName is 'A' return onGlobalClick: (event) => diff --git a/assets/javascripts/views/list/list_focus.coffee b/assets/javascripts/views/list/list_focus.coffee index 05ea909c..3be0d2b5 100644 --- a/assets/javascripts/views/list/list_focus.coffee +++ b/assets/javascripts/views/list/list_focus.coffee @@ -117,6 +117,7 @@ class app.views.ListFocus extends app.View onClick: (event) => return if event.which isnt 1 or event.metaKey or event.ctrlKey - if event.target.tagName is 'A' - @focus event.target, silent: true + target = $.eventTarget(event) + if target.tagName is 'A' + @focus target, silent: true return diff --git a/assets/javascripts/views/list/list_fold.coffee b/assets/javascripts/views/list/list_fold.coffee index 91bebb1a..da6f1d5e 100644 --- a/assets/javascripts/views/list/list_fold.coffee +++ b/assets/javascripts/views/list/list_fold.coffee @@ -54,7 +54,7 @@ class app.views.ListFold extends app.View onClick: (event) => return if event.which isnt 1 or event.metaKey or event.ctrlKey return unless event.pageY # ignore fabricated clicks - el = event.target + el = $.eventTarget(event) el = el.parentNode if el.parentNode.tagName.toUpperCase() is 'SVG' if el.classList.contains @constructor.handleClass diff --git a/assets/javascripts/views/list/list_select.coffee b/assets/javascripts/views/list/list_select.coffee index 64e7ff40..fe06b70b 100644 --- a/assets/javascripts/views/list/list_select.coffee +++ b/assets/javascripts/views/list/list_select.coffee @@ -37,6 +37,7 @@ class app.views.ListSelect extends app.View onClick: (event) => return if event.which isnt 1 or event.metaKey or event.ctrlKey - if event.target.tagName is 'A' - @select event.target + target = $.eventTarget(event) + if target.tagName is 'A' + @select target return diff --git a/assets/javascripts/views/list/paginated_list.coffee b/assets/javascripts/views/list/paginated_list.coffee index 815e4824..0c6c4385 100644 --- a/assets/javascripts/views/list/paginated_list.coffee +++ b/assets/javascripts/views/list/paginated_list.coffee @@ -83,7 +83,8 @@ class app.views.PaginatedList extends app.View return onClick: (event) => - if event.target.tagName is 'SPAN' # link + target = $.eventTarget(event) + if target.tagName is 'SPAN' # link $.stopEvent(event) - @paginate event.target + @paginate target return diff --git a/assets/javascripts/views/misc/notif.coffee b/assets/javascripts/views/misc/notif.coffee index 44db6e5a..dcf2a051 100644 --- a/assets/javascripts/views/misc/notif.coffee +++ b/assets/javascripts/views/misc/notif.coffee @@ -51,8 +51,9 @@ class app.views.Notif extends app.View onClick: (event) => return if event.which isnt 1 - return if event.target.hasAttribute('data-behavior') - if event.target.tagName isnt 'A' or event.target.classList.contains('_notif-close') + target = $.eventTarget(event) + return if target.hasAttribute('data-behavior') + if target.tagName isnt 'A' or target.classList.contains('_notif-close') $.stopEvent(event) @hide() return diff --git a/assets/javascripts/views/sidebar/doc_list.coffee b/assets/javascripts/views/sidebar/doc_list.coffee index 55c8fd20..c72877a8 100644 --- a/assets/javascripts/views/sidebar/doc_list.coffee +++ b/assets/javascripts/views/sidebar/doc_list.coffee @@ -164,10 +164,11 @@ class app.views.DocList extends app.View return onClick: (event) => - if @disabledTitle and $.hasChild(@disabledTitle, event.target) and event.target.tagName isnt 'A' + target = $.eventTarget(event) + if @disabledTitle and $.hasChild(@disabledTitle, target) and target.tagName isnt 'A' $.stopEvent(event) @toggleDisabled() - else if slug = event.target.getAttribute('data-enable') + else if slug = target.getAttribute('data-enable') $.stopEvent(event) doc = app.disabledDocs.findBy('slug', slug) app.enableDoc(doc, @onEnabled, @onEnabled) if doc diff --git a/assets/javascripts/views/sidebar/results.coffee b/assets/javascripts/views/sidebar/results.coffee index c75776eb..5cdd55a2 100644 --- a/assets/javascripts/views/sidebar/results.coffee +++ b/assets/javascripts/views/sidebar/results.coffee @@ -62,7 +62,7 @@ class app.views.Results extends app.View onClick: (event) => return if event.which isnt 1 - if slug = event.target.getAttribute('data-enable') + if slug = $.eventTarget(event).getAttribute('data-enable') $.stopEvent(event) doc = app.disabledDocs.findBy('slug', slug) app.enableDoc(doc, @onDocEnabled.bind(@, doc), $.noop) if doc diff --git a/assets/javascripts/views/sidebar/sidebar.coffee b/assets/javascripts/views/sidebar/sidebar.coffee index dcb7687b..c8dc52a6 100644 --- a/assets/javascripts/views/sidebar/sidebar.coffee +++ b/assets/javascripts/views/sidebar/sidebar.coffee @@ -131,7 +131,7 @@ class app.views.Sidebar extends app.View onClick: (event) => return if event.which isnt 1 - if event.target.hasAttribute? 'data-reset-list' + if $.eventTarget(event).hasAttribute? 'data-reset-list' $.stopEvent(event) @onAltR() return