UNPKG

playable

Version:

Video player based on HTML5Video

83 lines 3.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var utils_1 = require("./utils"); var isElementMatchesSelector_1 = (0, tslib_1.__importDefault)(require("./isElementMatchesSelector")); // NOTE: "inspired" by https://github.com/marcj/css-element-queries/blob/1.0.2/src/ElementQueries.js#L340-L393 var CSS_SELECTOR_PATTERN = /,?[\s\t]*([^,\n]*?)((?:\[[\s\t]*?(?:[a-z-]+-)?(?:min|max)-width[\s\t]*?[~$\^]?=[\s\t]*?"[^"]*?"[\s\t]*?])+)([^,\n\s\{]*)/gim; var QUERY_ATTR_PATTERN = /\[[\s\t]*?(?:([a-z-]+)-)?(min|max)-width[\s\t]*?[~$\^]?=[\s\t]*?"([^"]*?)"[\s\t]*?]/gim; function getQueriesFromCssSelector(cssSelector) { var results = []; if (cssSelector.indexOf('min-width') === -1 && cssSelector.indexOf('max-width') === -1) { return []; } cssSelector = cssSelector.replace(/'/g, '"'); (0, utils_1.forEachMatch)(cssSelector, CSS_SELECTOR_PATTERN, function (matchedSelectors) { var _a = matchedSelectors.slice(1), selectorPart1 = _a[0], attribute = _a[1], selectorPart2 = _a[2]; var selector = selectorPart1 + selectorPart2; (0, utils_1.forEachMatch)(attribute, QUERY_ATTR_PATTERN, function (matchedAttributes) { var _a = matchedAttributes.slice(1), _b = _a[0], prefix = _b === void 0 ? '' : _b, mode = _a[1], width = _a[2]; results.push({ selector: selector, prefix: prefix, mode: mode, width: parseInt(width, 10), }); }); }); return results; } function getQueriesFromRules(rules) { return (0, utils_1.reduce)(rules, function (results, rule) { // https://developer.mozilla.org/en-US/docs/Web/API/CSSRule // CSSRule.STYLE_RULE if (rule.type === 1) { var selector = rule.selectorText || rule.cssText; return results.concat(getQueriesFromCssSelector(selector)); } // NOTE: add other `CSSRule` types if required. // Example - https://github.com/marcj/css-element-queries/blob/1.0.2/src/ElementQueries.js#L384-L390 return results; }, []); } function getQueries() { return (0, utils_1.reduce)(document.styleSheets, function (results, styleSheet) { // NOTE: browser may not able to read rules for cross-domain stylesheets try { var rules = styleSheet.cssRules || styleSheet.rules; if (rules) { return results.concat(getQueriesFromRules(rules)); } if (styleSheet.cssText) { return results.concat(getQueriesFromCssSelector(styleSheet.cssText)); } } catch (e) { } return results; }, []); } function getQueriesForElement(element, prefix) { if (prefix === void 0) { prefix = ''; } var matchedSelectors = new Map(); var queries = []; getQueries().forEach(function (query) { if (!matchedSelectors.has(query.selector)) { matchedSelectors.set(query.selector, (0, isElementMatchesSelector_1.default)(element, query.selector)); } if (!matchedSelectors.get(query.selector)) { return; } if (query.prefix === prefix && !queries.some(function (_query) { return _query.mode === query.mode && _query.width === query.width; })) { queries.push({ mode: query.mode, width: query.width, }); } }); return queries.sort(function (a, b) { return a.width - b.width; }); } exports.default = getQueriesForElement; //# sourceMappingURL=getQueriesForElement.js.map