index.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. var postcss = require('postcss');
  2. var charset = 'charset';
  3. module.exports = postcss.plugin('postcss-normalize-' + charset, function (opts) {
  4. opts = opts || {};
  5. return function (css) {
  6. var charsetRule;
  7. var nonAsciiNode;
  8. var nonAscii = /[^\x00-\x7F]/;
  9. css.walk(function (node) {
  10. if (node.type === 'atrule' && node.name === charset) {
  11. if (!charsetRule) {
  12. charsetRule = node;
  13. }
  14. node.remove();
  15. } else if (!nonAsciiNode && node.parent === css && nonAscii.test(node)) {
  16. nonAsciiNode = node;
  17. }
  18. });
  19. if (nonAsciiNode) {
  20. if (!charsetRule && opts.add !== false) {
  21. charsetRule = postcss.atRule({
  22. name: charset,
  23. params: '"utf-8"'
  24. });
  25. }
  26. if (charsetRule) {
  27. charsetRule.source = nonAsciiNode.source;
  28. css.prepend(charsetRule);
  29. }
  30. }
  31. };
  32. });