restore-from-optimizing.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. var compactable = require('./compactable');
  2. var BACKSLASH_HACK = '\\9';
  3. var IMPORTANT_TOKEN = '!important';
  4. var STAR_HACK = '*';
  5. var UNDERSCORE_HACK = '_';
  6. var BANG_HACK = '!ie';
  7. function restoreImportant(property) {
  8. property.value[property.value.length - 1][0] += IMPORTANT_TOKEN;
  9. }
  10. function restoreHack(property) {
  11. if (property.hack == 'underscore')
  12. property.name = UNDERSCORE_HACK + property.name;
  13. else if (property.hack == 'star')
  14. property.name = STAR_HACK + property.name;
  15. else if (property.hack == 'backslash')
  16. property.value[property.value.length - 1][0] += BACKSLASH_HACK;
  17. else if (property.hack == 'bang')
  18. property.value[property.value.length - 1][0] += ' ' + BANG_HACK;
  19. }
  20. function restoreFromOptimizing(properties, simpleMode) {
  21. for (var i = properties.length - 1; i >= 0; i--) {
  22. var property = properties[i];
  23. var descriptor = compactable[property.name];
  24. var restored;
  25. if (property.unused)
  26. continue;
  27. if (!property.dirty && !property.important && !property.hack)
  28. continue;
  29. if (!simpleMode && descriptor && descriptor.shorthand) {
  30. restored = descriptor.restore(property, compactable);
  31. property.value = restored;
  32. } else {
  33. restored = property.value;
  34. }
  35. if (property.important)
  36. restoreImportant(property);
  37. if (property.hack)
  38. restoreHack(property);
  39. if (!('all' in property))
  40. continue;
  41. var current = property.all[property.position];
  42. current[0][0] = property.name;
  43. current.splice(1, current.length - 1);
  44. Array.prototype.push.apply(current, restored);
  45. }
  46. }
  47. module.exports = restoreFromOptimizing;