-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbrowser-classes.js
More file actions
124 lines (113 loc) · 2.8 KB
/
browser-classes.js
File metadata and controls
124 lines (113 loc) · 2.8 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* Browser Classes
* @class
* @see https://github.com/etoxin/browser-classes
*/
export default class BrowserClasses {
/**
* BrowserClasses constructor.
*
* @memberof BrowserClasses
*/
constructor() {
BrowserClasses.ready(() =>
BrowserClasses.setClassOnBody(BrowserClasses.detectBrowser())
);
}
/**
* Is String
*
* @memberof BrowserClasses
* @since 1.0.0
* @param {string} x
* @returns {boolean}
*/
static isString(x) {
return Object.prototype.toString.call(x) === "[object String]";
}
/**
* Adds a class on `document.body`.
*
* @memberof BrowserClasses
* @since 1.0.0
* @param {string} browser
*/
static setClassOnBody(browser) {
BrowserClasses.isString(browser) &&
document.body.classList.add(`browser-${browser}`);
}
/**
* Detects the Browser and returns the name
*
* @memberof BrowserClasses
* @since 1.0.0
* @param {string} uaOverride
* @returns {string} String of browser
*/
static detectBrowser(uaOverride) {
const ua = uaOverride || window.navigator.userAgent;
const msie = ua.indexOf("MSIE ");
if (msie > 0) {
// IE 10 or older => return version number
return (
"ie-" + parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)), 10)
);
}
const trident = ua.indexOf("Trident/");
if (trident > 0) {
// IE 11 => return version number
let rv = ua.indexOf("rv:");
return "ie-" + parseInt(ua.substring(rv + 3, ua.indexOf(".", rv)), 10);
}
const edge = ua.indexOf("Edge/");
if (edge > 0) {
// Edge (IE 12+) => return version number
return (
"edge-" + parseInt(ua.substring(edge + 5, ua.indexOf(".", edge)), 10)
);
}
const firefox = ua.indexOf("Firefox/");
if (firefox > 0) {
// Firefox => return version number
return (
"firefox-" +
parseInt(ua.substring(firefox + 8, ua.indexOf(".", firefox)), 10)
);
}
const chrome = ua.indexOf("Chrome/");
if (chrome > 0) {
// Chrome => return version number
return (
"chrome-" +
parseInt(ua.substring(chrome + 7, ua.indexOf(".", chrome)), 10)
);
}
const safari = ua.indexOf("Safari/");
if (safari > 0) {
// Safari => return version number
return (
"safari-" + parseInt(ua.substring(ua.indexOf('Version/') + 8).split(' Safari')[0])
);
}
// other browsers
return false;
}
/**
* Document Ready Function
*
* @since 1.0.0
* @memberof BrowserClasses
* @param {function} fn
*/
static ready(fn) {
if (
document.attachEvent
? document.readyState === "complete"
: document.readyState !== "loading"
) {
fn();
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
}