This repository has been archived by the owner on Mar 24, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
73 lines (57 loc) · 1.4 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
* Module dependencies
*/
var listener = require('listener'),
bind = require('bind');
/**
* Expose Keyring
*/
module.exports = Keyring;
/**
* Private variables
*/
var styleEl = document.createElement('style'),
css = 'a, button, input, select, textarea, iframe, [tabindex] { outline: none; }';
/**
* Set the contents of the style element in the document head.
*
* @param {String} css
* @api private
*/
function setStyle(css) {
if (!!styleEl.styleSheet) styleEl.styleSheet.cssText = css; // IE8-
else styleEl.innerHTML = css;
}
/**
* Create new Keyring singleton for the document.
*
* @api public
*/
function Keyring() {
if ( Keyring.prototype._singletonInstance ) {
return Keyring.prototype._singletonInstance;
}
Keyring.prototype._singletonInstance = this;
this.isFocusVisible = true;
document.getElementsByTagName('head')[0].appendChild(styleEl);
listener.add( document, 'mousedown', bind(this, this.hideRing) );
listener.add( document, 'keydown', bind(this, this.showRing) );
}
/**
* Hide visible focus rings for focusable elements.
*
* @api public
*/
Keyring.prototype.hideRing = function() {
if (this.isFocusVisible) setStyle(css);
this.isFocusVisible = false;
};
/**
* Restore visible focus rings for focusable elements.
*
* @api public
*/
Keyring.prototype.showRing = function() {
if (!this.isFocusVisible) setStyle('');
this.isFocusVisible = true;
};