forked from dequelabs/axe-core
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparse-stylesheet.js
More file actions
75 lines (69 loc) · 1.71 KB
/
Copy pathparse-stylesheet.js
File metadata and controls
75 lines (69 loc) · 1.71 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
import parseSameOriginStylesheet from './parse-sameorigin-stylesheet';
import parseCrossOriginStylesheet from './parse-crossorigin-stylesheet';
/**
* Parse a given stylesheet
*
* @method parseStylesheet
* @memberof axe.utils
* @param {Object} sheet stylesheet to parse
* @param {Object} options configuration options object from `parseStylesheets`
* @param {Array<Number>} priority priority of stylesheet
* @param {Array<String>} importedUrls list of resolved `@import` urls
* @param {Boolean} isCrossOrigin boolean denoting if a stylesheet is `cross-origin`, passed for re-parsing `cross-origin` sheets
* @returns {Promise}
*/
function parseStylesheet(
sheet,
options,
priority,
importedUrls,
isCrossOrigin = false
) {
const isSameOrigin = isSameOriginStylesheet(sheet);
if (isSameOrigin) {
/**
* resolve `same-origin` stylesheet
*/
return parseSameOriginStylesheet(
sheet,
options,
priority,
importedUrls,
isCrossOrigin
);
}
/**
* resolve `cross-origin` stylesheet
*/
return parseCrossOriginStylesheet(
sheet.href,
options,
priority,
importedUrls,
true // -> isCrossOrigin
);
}
/**
* Check if a given stylesheet is from the `same-origin`
* Note:
* `sheet.cssRules` throws an error on `cross-origin` stylesheets
*
* @param {Object} sheet CSS stylesheet
* @returns {Boolean}
*/
function isSameOriginStylesheet(sheet) {
try {
/*eslint no-unused-vars: 0*/
const rules = sheet.cssRules;
/**
* Safari, does not throw an error when accessing cssRules property,
*/
if (!rules && sheet.href) {
return false;
}
return true;
} catch (e) {
return false;
}
}
export default parseStylesheet;