index.js (36 lines of code) (raw):
/* eslint-disable max-len */
function wrapInMediaQuery(node) {
return (
'@media (hover: hover), (-moz-touch-enabled: 0), (-ms-high-contrast: none), (-ms-high-contrast: active) {' +
node +
'}'
);
}
const plugin = function () {
return {
postcssPlugin: 'postcss-require-hover',
Once(root) {
root.walkRules(function (rule) {
if (rule.selector.indexOf(':hover') !== -1) {
var clone = rule.clone();
var hoverSelectors = [];
var selectors = rule.selectors.filter(function (selector) {
if (selector.indexOf(':hover') !== -1) {
hoverSelectors.push(selector);
return false;
}
return true;
});
if (selectors.length > 0) {
clone.selectors = hoverSelectors;
rule.selectors = selectors;
rule.parent.prepend(wrapInMediaQuery(clone));
} else {
rule.replaceWith(wrapInMediaQuery(clone));
}
}
});
}
};
};
plugin.postcss = true;
module.exports = plugin;