Unified · Split
| @@ -170,7 +170,7 @@ onclick = (event) -> · 169 unmodified lines | ||
| 170 | 170 | catch |
| 171 | 171 | return |
| 172 | 172 | |
| 173 | − link = event.target | |
| 173 | + link = $.eventTarget(event) | |
| 174 | 174 | link = link.parentNode while link and link.tagName isnt 'A' |
| 175 | 175 | |
| 176 | 176 | if link and not link.target and isSameOrigin(link.href) |
| @@ -60,6 +60,9 @@ $.stopEvent = (event) -> · 59 unmodified lines | ||
| 60 | 60 | event.stopImmediatePropagation() |
| 61 | 61 | return |
| 62 | 62 | |
| 63 | +$.eventTarget = (event) -> | |
| 64 | + event.target.correspondingUseElement || event.target | |
| 65 | + | |
| 63 | 66 | # |
| 64 | 67 | # Manipulation |
| 65 | 68 | # |
| @@ -169,7 +169,7 @@ class app.views.Content extends app.View · 168 unmodified lines | ||
| 169 | 169 | return |
| 170 | 170 | |
| 171 | 171 | onClick: (event) => |
| 172 | − link = $.closestLink event.target, @el | |
| 172 | + link = $.closestLink $.eventTarget(event), @el | |
| 173 | 173 | if link and @isExternalUrl link.getAttribute('href') |
| 174 | 174 | $.stopEvent(event) |
| 175 | 175 | $.popup(link) |
| @@ -140,7 +140,7 @@ class app.views.EntryPage extends app.View · 139 unmodified lines | ||
| 140 | 140 | true |
| 141 | 141 | |
| 142 | 142 | onClick: (event) => |
| 143 | − target = event.target | |
| 143 | + target = $.eventTarget(event) | |
| 144 | 144 | if target.hasAttribute 'data-retry' |
| 145 | 145 | $.stopEvent(event) |
| 146 | 146 | @load() |
| @@ -50,7 +50,7 @@ class app.views.OfflinePage extends app.View · 49 unmodified lines | ||
| 50 | 50 | return |
| 51 | 51 | |
| 52 | 52 | onClick: (event) => |
| 53 | − el = event.target | |
| 53 | + el = $.eventTarget(event) | |
| 54 | 54 | if action = el.getAttribute('data-action') |
| 55 | 55 | doc = @docByEl(el) |
| 56 | 56 | action = 'install' if action is 'update' |
| @@ -30,7 +30,7 @@ class app.views.RootPage extends app.View · 29 unmodified lines | ||
| 30 | 30 | onRoute: -> |
| 31 | 31 | |
| 32 | 32 | onClick: (event) => |
| 33 | − if event.target.hasAttribute 'data-hide-intro' | |
| 33 | + if $.eventTarget(event).hasAttribute 'data-hide-intro' | |
| 34 | 34 | $.stopEvent(event) |
| 35 | 35 | @hideIntro() |
| 36 | 36 | return |
| @@ -71,9 +71,10 @@ class app.views.Document extends app.View · 70 unmodified lines | ||
| 71 | 71 | return |
| 72 | 72 | |
| 73 | 73 | onClick: (event) -> |
| 74 | − return unless event.target.hasAttribute('data-behavior') | |
| 74 | + target = $.eventTarget(event) | |
| 75 | + return unless target.hasAttribute('data-behavior') | |
| 75 | 76 | $.stopEvent(event) |
| 76 | − switch event.target.getAttribute('data-behavior') | |
| 77 | + switch target.getAttribute('data-behavior') | |
| 77 | 78 | when 'back' then history.back() |
| 78 | 79 | when 'reload' then window.location.reload() |
| 79 | 80 | when 'reboot' then window.location = '/' |
| @@ -10,7 +10,8 @@ class app.views.Menu extends app.View · 9 unmodified lines | ||
| 10 | 10 | return |
| 11 | 11 | |
| 12 | 12 | onClick: (event) -> |
| 13 | − event.target.blur() if event.target.tagName is 'A' | |
| 13 | + target = $.eventTarget(event) | |
| 14 | + target.blur() if target.tagName is 'A' | |
| 14 | 15 | return |
| 15 | 16 | |
| 16 | 17 | onGlobalClick: (event) => |
| @@ -117,6 +117,7 @@ class app.views.ListFocus extends app.View · 116 unmodified lines | ||
| 117 | 117 | |
| 118 | 118 | onClick: (event) => |
| 119 | 119 | return if event.which isnt 1 or event.metaKey or event.ctrlKey |
| 120 | − if event.target.tagName is 'A' | |
| 121 | − @focus event.target, silent: true | |
| 120 | + target = $.eventTarget(event) | |
| 121 | + if target.tagName is 'A' | |
| 122 | + @focus target, silent: true | |
| 122 | 123 | return |
| @@ -54,7 +54,7 @@ class app.views.ListFold extends app.View · 53 unmodified lines | ||
| 54 | 54 | onClick: (event) => |
| 55 | 55 | return if event.which isnt 1 or event.metaKey or event.ctrlKey |
| 56 | 56 | return unless event.pageY # ignore fabricated clicks |
| 57 | − el = event.target | |
| 57 | + el = $.eventTarget(event) | |
| 58 | 58 | el = el.parentNode if el.parentNode.tagName.toUpperCase() is 'SVG' |
| 59 | 59 | |
| 60 | 60 | if el.classList.contains @constructor.handleClass |
| @@ -37,6 +37,7 @@ class app.views.ListSelect extends app.View · 36 unmodified lines | ||
| 37 | 37 | |
| 38 | 38 | onClick: (event) => |
| 39 | 39 | return if event.which isnt 1 or event.metaKey or event.ctrlKey |
| 40 | − if event.target.tagName is 'A' | |
| 41 | − @select event.target | |
| 40 | + target = $.eventTarget(event) | |
| 41 | + if target.tagName is 'A' | |
| 42 | + @select target | |
| 42 | 43 | return |
| @@ -83,7 +83,8 @@ class app.views.PaginatedList extends app.View · 82 unmodified lines | ||
| 83 | 83 | return |
| 84 | 84 | |
| 85 | 85 | onClick: (event) => |
| 86 | − if event.target.tagName is 'SPAN' # link | |
| 86 | + target = $.eventTarget(event) | |
| 87 | + if target.tagName is 'SPAN' # link | |
| 87 | 88 | $.stopEvent(event) |
| 88 | − @paginate event.target | |
| 89 | + @paginate target | |
| 89 | 90 | return |
| @@ -51,8 +51,9 @@ class app.views.Notif extends app.View · 50 unmodified lines | ||
| 51 | 51 | |
| 52 | 52 | onClick: (event) => |
| 53 | 53 | return if event.which isnt 1 |
| 54 | − return if event.target.hasAttribute('data-behavior') | |
| 55 | − if event.target.tagName isnt 'A' or event.target.classList.contains('_notif-close') | |
| 54 | + target = $.eventTarget(event) | |
| 55 | + return if target.hasAttribute('data-behavior') | |
| 56 | + if target.tagName isnt 'A' or target.classList.contains('_notif-close') | |
| 56 | 57 | $.stopEvent(event) |
| 57 | 58 | @hide() |
| 58 | 59 | return |
| @@ -164,10 +164,11 @@ class app.views.DocList extends app.View · 163 unmodified lines | ||
| 164 | 164 | return |
| 165 | 165 | |
| 166 | 166 | onClick: (event) => |
| 167 | − if @disabledTitle and $.hasChild(@disabledTitle, event.target) and event.target.tagName isnt 'A' | |
| 167 | + target = $.eventTarget(event) | |
| 168 | + if @disabledTitle and $.hasChild(@disabledTitle, target) and target.tagName isnt 'A' | |
| 168 | 169 | $.stopEvent(event) |
| 169 | 170 | @toggleDisabled() |
| 170 | − else if slug = event.target.getAttribute('data-enable') | |
| 171 | + else if slug = target.getAttribute('data-enable') | |
| 171 | 172 | $.stopEvent(event) |
| 172 | 173 | doc = app.disabledDocs.findBy('slug', slug) |
| 173 | 174 | app.enableDoc(doc, @onEnabled, @onEnabled) if doc |
| @@ -62,7 +62,7 @@ class app.views.Results extends app.View · 61 unmodified lines | ||
| 62 | 62 | |
| 63 | 63 | onClick: (event) => |
| 64 | 64 | return if event.which isnt 1 |
| 65 | − if slug = event.target.getAttribute('data-enable') | |
| 65 | + if slug = $.eventTarget(event).getAttribute('data-enable') | |
| 66 | 66 | $.stopEvent(event) |
| 67 | 67 | doc = app.disabledDocs.findBy('slug', slug) |
| 68 | 68 | app.enableDoc(doc, @onDocEnabled.bind(@, doc), $.noop) if doc |
| @@ -131,7 +131,7 @@ class app.views.Sidebar extends app.View · 130 unmodified lines | ||
| 131 | 131 | |
| 132 | 132 | onClick: (event) => |
| 133 | 133 | return if event.which isnt 1 |
| 134 | − if event.target.hasAttribute? 'data-reset-list' | |
| 134 | + if $.eventTarget(event).hasAttribute? 'data-reset-list' | |
| 135 | 135 | $.stopEvent(event) |
| 136 | 136 | @onAltR() |
| 137 | 137 | return |