76 lines
2.7 KiB
JavaScript
76 lines
2.7 KiB
JavaScript
const _ = require('lodash');
|
|
const spec = require('../specs');
|
|
const versions = require('../utils').versions;
|
|
const {getPackageJSON} = require('../utils');
|
|
|
|
const checkKoenigCssClasses = function checkKoenigCssClasses(theme, options) {
|
|
const checkVersion = _.get(options, 'checkVersion', versions.default);
|
|
let ruleSet = spec.get([checkVersion]);
|
|
|
|
// CASE: 050-koenig-css-classes checks only needs `rules` that start with `GS050-`
|
|
const ruleRegex = /GS050-.*/g;
|
|
|
|
// Following the introduction of card assets, we disable certain rules
|
|
// when it's enabled by the theme.
|
|
const packageJson = getPackageJSON(theme, ruleSet.defaultPackageJSON);
|
|
const cardAssetsEnabled = packageJson
|
|
&& packageJson.config
|
|
&& packageJson.config.card_assets === true;
|
|
const enabledCards = packageJson
|
|
&& packageJson.config
|
|
&& packageJson.config.card_assets
|
|
&& Array.isArray(packageJson.config.card_assets.include)
|
|
&& packageJson.config.card_assets.include;
|
|
const disabledCards = !enabledCards // include takes priority over exclude
|
|
&& packageJson
|
|
&& packageJson.config
|
|
&& packageJson.config.card_assets
|
|
&& Array.isArray(packageJson.config.card_assets.exclude)
|
|
&& packageJson.config.card_assets.exclude;
|
|
|
|
ruleSet = _.pickBy(ruleSet.rules, function (rule, ruleCode) {
|
|
if (rule.cardAsset && (cardAssetsEnabled
|
|
|| (enabledCards && enabledCards.includes(rule.cardAsset))
|
|
|| (disabledCards && !disabledCards.includes(rule.cardAsset)))) {
|
|
return; // skip rule
|
|
}
|
|
if (ruleCode.match(ruleRegex)) {
|
|
return rule;
|
|
}
|
|
});
|
|
|
|
_.each(ruleSet, function (check, ruleCode) {
|
|
if (theme.files) {
|
|
// Check CSS files and HBS files for presence of the classes
|
|
_.each(theme.files, function (themeFile) {
|
|
if (!['.css', '.hbs'].includes(themeFile.ext)) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
let cssPresent = themeFile.content.match(check.regex);
|
|
|
|
if (cssPresent && theme.results.pass.indexOf(ruleCode) === -1) {
|
|
theme.results.pass.push(ruleCode);
|
|
}
|
|
} catch (err) {
|
|
// ignore for now
|
|
}
|
|
});
|
|
}
|
|
|
|
if (!theme.files || (theme.results.pass.indexOf(ruleCode) === -1 && !Object.prototype.hasOwnProperty.call(theme.results.fail, ruleCode))) {
|
|
theme.results.fail[ruleCode] = {};
|
|
theme.results.fail[ruleCode].failures = [
|
|
{
|
|
ref: 'styles'
|
|
}
|
|
];
|
|
}
|
|
});
|
|
|
|
return theme;
|
|
};
|
|
|
|
module.exports = checkKoenigCssClasses;
|