scancss
Version:
A robust CSS stylesheet statistics collector and analyzer
102 lines (72 loc) • 3.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.handleMediaQueryParams = handleMediaQueryParams;
var _postcss = require('postcss');
var _postcss2 = _interopRequireDefault(_postcss);
var _cssBrowserHacks = require('../../../constants/cssBrowserHacks');
var _cssDeprecatedMediaTypes = require('../../../constants/cssDeprecatedMediaTypes');
var _reCssMediaFeature = require('../../../constants/reCssMediaFeature');
var _reCssMediaType = require('../../../constants/reCssMediaType');
var _rePrefixedString = require('../../../constants/rePrefixedString');
var _countUsage = require('../../../calculators/countUsage');
var _transformString = require('../../../converters/transformString');
var _trimExtraSpaces = require('../../../converters/trimExtraSpaces');
var _trimSpacesNearColon = require('../../../converters/trimSpacesNearColon');
var _trimSpacesNearCommas = require('../../../converters/trimSpacesNearCommas');
var _trimSpacesNearParentheses = require('../../../converters/trimSpacesNearParentheses');
var _trimTrailingZeros = require('../../../converters/trimTrailingZeros');
var _trimLeadingZeros = require('../../../converters/trimLeadingZeros');
var _isDeprecatedMediaFeature = require('../../../predicates/isDeprecatedMediaFeature');
var _handleVendorPrefix = require('../../handleVendorPrefix');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const reOnlyKeyword = /\bonly\b/g;
const cssMediaBrowserHacks = _cssBrowserHacks.cssBrowserHacks.filter(hack => hack.type === 'media');
function handleMediaQueryParams(params, report, options) {
_postcss2.default.list.comma(params).forEach(mediaQuery => {
report.mediaQueries.total++;
const cleanedMediaQuery = (0, _transformString.transformString)(mediaQuery, [_trimExtraSpaces.trimExtraSpaces, _trimSpacesNearCommas.trimSpacesNearCommas, _trimSpacesNearParentheses.trimSpacesNearParentheses, _trimSpacesNearColon.trimSpacesNearColon, _trimTrailingZeros.trimTrailingZeros, _trimLeadingZeros.trimLeadingZeros]);
if (reOnlyKeyword.test(cleanedMediaQuery)) {
report.mediaQueries.onlyKeyword += cleanedMediaQuery.match(reOnlyKeyword).length;
}
if (_reCssMediaType.reCssMediaType.test(cleanedMediaQuery)) {
cleanedMediaQuery.match(_reCssMediaType.reCssMediaType).forEach(type => {
report.mediaQueries.types.total++;
(0, _countUsage.countUsage)(type, report.mediaQueries.types.usage);
if (_cssDeprecatedMediaTypes.cssDeprecatedMediaTypes.includes(type)) {
report.mediaQueries.types.deprecated.total++;
(0, _countUsage.countUsage)(type, report.mediaQueries.types.deprecated.usage);
}
});
}
if (_reCssMediaFeature.reCssMediaFeature.test(cleanedMediaQuery)) {
cleanedMediaQuery.match(_reCssMediaFeature.reCssMediaFeature).forEach(feature => {
if (/^(min|max)--moz-/.test(feature)) {
report.mediaQueries.features.prefixed++;
(0, _handleVendorPrefix.handleVendorPrefix)('-moz-', report);
} else if (_rePrefixedString.rePrefixedString.test(feature)) {
report.mediaQueries.features.prefixed++;
(0, _handleVendorPrefix.handleVendorPrefix)(feature, report);
}
if ((0, _isDeprecatedMediaFeature.isDeprecatedMediaFeature)(feature)) {
report.mediaQueries.features.deprecated.total++;
(0, _countUsage.countUsage)(feature, report.mediaQueries.features.deprecated.usage);
}
report.mediaQueries.features.total++;
(0, _countUsage.countUsage)(feature, report.mediaQueries.features.usage);
});
}
(0, _countUsage.countUsage)(cleanedMediaQuery, report.mediaQueries.usage);
if (options.browserHacks) {
cssMediaBrowserHacks.forEach(hack => {
if (hack.regex.test(cleanedMediaQuery)) {
cleanedMediaQuery.match(hack.regex).forEach(match => {
report.browserHacks.total++;
(0, _countUsage.countUsage)(match, report.browserHacks.usage.media);
});
}
});
}
});
}