whitespace.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;
  2. var Marker = require('../../../tokenizer/marker');
  3. var CALC_DIVISION_WHITESPACE_PATTERN = /\) ?\/ ?/g;
  4. var COMMA_AND_SPACE_PATTERN = /, /g;
  5. var LINE_BREAK_PATTERN = /\r?\n/g;
  6. var MULTI_WHITESPACE_PATTERN = /\s+/g;
  7. var FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN = /\s+(;?\))/g;
  8. var FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN = /(\(;?)\s+/g;
  9. var VARIABLE_NAME_PATTERN = /^--\S+$/;
  10. var VARIABLE_VALUE_PATTERN = /^var\(\s*--\S+\s*\)$/;
  11. var plugin = {
  12. level1: {
  13. value: function whitespace(name, value, options) {
  14. if (!options.level[OptimizationLevel.One].removeWhitespace) {
  15. return value;
  16. }
  17. if (VARIABLE_NAME_PATTERN.test(name) && !VARIABLE_VALUE_PATTERN.test(value)) {
  18. return value;
  19. }
  20. if ((value.indexOf(' ') == -1 && value.indexOf('\n') == -1) || value.indexOf('expression') === 0) {
  21. return value;
  22. }
  23. if (value.indexOf(Marker.SINGLE_QUOTE) > -1 || value.indexOf(Marker.DOUBLE_QUOTE) > -1) {
  24. return value;
  25. }
  26. value = value.replace(LINE_BREAK_PATTERN, '');
  27. value = value.replace(MULTI_WHITESPACE_PATTERN, ' ');
  28. if (value.indexOf('calc') > -1) {
  29. value = value.replace(CALC_DIVISION_WHITESPACE_PATTERN, ')/ ');
  30. }
  31. return value
  32. .replace(FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN, '$1')
  33. .replace(FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN, '$1')
  34. .replace(COMMA_AND_SPACE_PATTERN, ',');
  35. }
  36. }
  37. };
  38. module.exports = plugin;