diff --git a/src/routes/_components/status/Notification.html b/src/routes/_components/status/Notification.html
index c2dd90cc..333aaf45 100644
--- a/src/routes/_components/status/Notification.html
+++ b/src/routes/_components/status/Notification.html
@@ -9,9 +9,7 @@
aria-posinset={index}
aria-setsize={length}
aria-label={ariaLabel}
- on:focus="onFocus()"
- on:blur="onBlur()"
- ref:article
+ on:applyFocusStylesToParent="noop()"
>
@@ -48,6 +46,8 @@
import { goto } from '../../../../__sapper__/client'
import { composeNewStatusMentioning } from '../../_actions/mention'
import { classname } from '../../_utils/classname'
+ import { applyFocusStylesToParent } from '../../_utils/events'
+ import noop from 'lodash-es/noop'
export default {
components: {
@@ -80,6 +80,7 @@
))
},
methods: {
+ noop,
openAuthorProfile () {
let { accountId } = this.get()
goto(`/accounts/${accountId}`)
@@ -87,14 +88,10 @@
async mentionAuthor () {
let { account } = this.get()
await composeNewStatusMentioning(account)
- },
- // apply focus styles to parent rather than article because it shows up better
- onFocus () {
- this.refs.article.parentElement.classList.toggle('focus', true)
- },
- onBlur () {
- this.refs.article.parentElement.classList.toggle('focus', false)
}
+ },
+ events: {
+ applyFocusStylesToParent
}
}
diff --git a/src/routes/_components/status/Status.html b/src/routes/_components/status/Status.html
index 442783f0..e10aa0d6 100644
--- a/src/routes/_components/status/Status.html
+++ b/src/routes/_components/status/Status.html
@@ -5,9 +5,7 @@
aria-setsize={length}
aria-label={ariaLabel}
on:recalculateHeight
- on:focus="onFocus()"
- on:blur="onBlur()"
- ref:article
+ on:applyFocusStylesToParent="noop()"
>
{#if showHeader}
@@ -136,6 +134,8 @@
import { LONG_POST_LENGTH, LONG_POST_TEXT } from '../../_static/statuses'
import { absoluteDateFormatter } from '../../_utils/formatters'
import { composeNewStatusMentioning } from '../../_actions/mention'
+ import { applyFocusStylesToParent } from '../../_utils/events'
+ import noop from 'lodash-es/noop'
const INPUT_TAGS = new Set(['a', 'button', 'input', 'textarea'])
const isUserInputElement = node => INPUT_TAGS.has(node.localName)
@@ -181,6 +181,7 @@
}),
store: () => store,
methods: {
+ noop,
onClickOrKeydown (e) {
let { type, keyCode, target } = e
@@ -214,13 +215,6 @@
async mentionAuthor () {
let { accountForShortcut } = this.get()
await composeNewStatusMentioning(accountForShortcut)
- },
- // apply focus styles to parent rather than article because it shows up better
- onFocus () {
- this.refs.article.parentElement.classList.toggle('focus', true)
- },
- onBlur () {
- this.refs.article.parentElement.classList.toggle('focus', false)
}
},
computed: {
@@ -324,6 +318,9 @@
absoluteFormattedDate,
shortcutScope
})
+ },
+ events: {
+ applyFocusStylesToParent
}
}
diff --git a/src/routes/_utils/events.js b/src/routes/_utils/events.js
index 3188479f..1b0839fe 100644
--- a/src/routes/_utils/events.js
+++ b/src/routes/_utils/events.js
@@ -49,3 +49,25 @@ export function selectionChange (node, callback) {
}
}
}
+
+// in some cases we apply focus styles to parent rather
+// than the node itself because it shows up better
+export function applyFocusStylesToParent (node) {
+ function onFocus () {
+ node.parentElement.classList.toggle('focus', true)
+ }
+
+ function onBlur () {
+ node.parentElement.classList.toggle('focus', false)
+ }
+
+ node.addEventListener('focus', onFocus)
+ node.addEventListener('blur', onBlur)
+
+ return {
+ destroy () {
+ node.removeEventListener('focus', onFocus)
+ node.removeEventListener('blur', onBlur)
+ }
+ }
+}