grid-template.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. "use strict";
  2. exports.__esModule = true;
  3. var _postcssValueParser = require("postcss-value-parser");
  4. var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
  5. var _cache = require("./cache");
  6. var _cache2 = _interopRequireDefault(_cache);
  7. var _isNum = require("./isNum");
  8. var _isNum2 = _interopRequireDefault(_isNum);
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. var RESERVED_KEYWORDS = ["auto", "span", "inherit", "initial", "unset"];
  11. var cache = {};
  12. var declCache = [];
  13. exports.default = {
  14. collect: function collect(node, encoder) {
  15. if (node.type !== 'decl') {
  16. return;
  17. }
  18. if (/(grid-template|grid-template-areas)/.test(node.prop)) {
  19. (0, _postcssValueParser2.default)(node.value).walk(function (child) {
  20. if (child.type === 'string') {
  21. child.value.split(/\s+/).forEach(function (word) {
  22. if (/\.+/.test(word)) {
  23. // reduce empty zones to a single `.`
  24. node.value = node.value.replace(word, ".");
  25. } else if (word && RESERVED_KEYWORDS.indexOf(word) === -1) {
  26. (0, _cache2.default)(word, encoder, cache);
  27. }
  28. });
  29. }
  30. });
  31. declCache.push(node);
  32. } else if (node.prop === 'grid-area') {
  33. (0, _postcssValueParser2.default)(node.value).walk(function (child) {
  34. if (child.type === 'word' && RESERVED_KEYWORDS.indexOf(child.value) === -1) {
  35. (0, _cache2.default)(child.value, encoder, cache);
  36. }
  37. });
  38. declCache.push(node);
  39. }
  40. },
  41. transform: function transform() {
  42. declCache.forEach(function (decl) {
  43. decl.value = (0, _postcssValueParser2.default)(decl.value).walk(function (node) {
  44. if (/(grid-template|grid-template-areas)/.test(decl.prop)) {
  45. node.value.split(/\s+/).forEach(function (word) {
  46. if (word in cache) {
  47. node.value = node.value.replace(word, cache[word].ident);
  48. }
  49. });
  50. node.value = node.value.replace(/\s+/g, " "); // merge white-spaces
  51. }
  52. if (decl.prop === 'grid-area' && !(0, _isNum2.default)(node)) {
  53. if (node.value in cache) {
  54. node.value = cache[node.value].ident;
  55. }
  56. }
  57. return false;
  58. }).toString();
  59. });
  60. // reset cache after transform
  61. cache = {};
  62. declCache = [];
  63. }
  64. };
  65. module.exports = exports["default"];