UNPKG

axe-core

Version:

Accessibility engine for automated Web UI testing

67 lines (59 loc) 1.68 kB
import parseStylesheet from './parse-stylesheet'; import constants from '../constants'; /** * Parse cross-origin stylesheets * * @method parseCrossOriginStylesheet * @memberof axe.utils * @param {String} url url from which to fetch stylesheet * @param {Object} options options object from `axe.utils.parseStylesheet` * @param {Array<Number>} priority sheet priority * @param {Array<String>} importedUrls urls of already imported stylesheets * @param {Boolean} isCrossOrigin boolean denoting if a stylesheet is `cross-origin` * @returns {Promise} */ function parseCrossOriginStylesheet( url, options, priority, importedUrls, isCrossOrigin ) { /** * Add `url` to `importedUrls` */ importedUrls.push(url); return new Promise((resolve, reject) => { const request = new XMLHttpRequest(); request.open('GET', url); request.timeout = constants.preload.timeout; request.addEventListener('error', reject); request.addEventListener('timeout', reject); request.addEventListener('loadend', event => { if (event.loaded && request.responseText) { return resolve(request.responseText); } reject(request.responseText); }); request.send(); }).then(data => { const result = options.convertDataToStylesheet({ data, isCrossOrigin, priority, root: options.rootNode, shadowId: options.shadowId }); /** * Parse resolved stylesheet further for any `@import` styles */ return parseStylesheet( result.sheet, options, priority, importedUrls, result.isCrossOrigin ); }); } export default parseCrossOriginStylesheet;