UNPKG

1.13 kBJavaScriptView Raw
1const DATA_MOUSE_FOCUS = 'data-focus-mouse'
2const CLASS_NAME_MOUSE_FOCUS = 'focus--mouse'
3
4class TrackFocus {
5 constructor() {
6 this._usingMouse = false
7
8 this._bindEvents()
9 }
10
11 // Public
12
13 // Private
14 _bindEvents() {
15 const events = ['keydown', 'mousedown']
16 events.forEach((evtName) => {
17 document.addEventListener(evtName, (evt) => {
18 this._usingMouse = evt.type === 'mousedown'
19 })
20 })
21 document.addEventListener('focusin', (evt) => {
22 if (this._usingMouse) {
23 if (evt.target) {
24 evt.target.classList.add(CLASS_NAME_MOUSE_FOCUS)
25 evt.target.setAttribute(DATA_MOUSE_FOCUS, true)
26 }
27 }
28 })
29 document.addEventListener('focusout', (evt) => {
30 if (evt.target) {
31 evt.target.classList.remove(CLASS_NAME_MOUSE_FOCUS)
32 evt.target.setAttribute(DATA_MOUSE_FOCUS, false)
33 }
34 })
35 }
36}
37
38/**
39 * ------------------------------------------------------------------------
40 * Data Api implementation
41 * ------------------------------------------------------------------------
42 */
43
44new TrackFocus()
45
46export default TrackFocus