Blame view

node_modules/clean-css/lib/optimizer/restore-from-optimizing.js 1.68 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  var Hack = require('./hack');
  
  var Marker = require('../tokenizer/marker');
  
  var ASTERISK_HACK = '*';
  var BACKSLASH_HACK = '\\';
  var IMPORTANT_TOKEN = '!important';
  var UNDERSCORE_HACK = '_';
  var BANG_HACK = '!ie';
  
  function restoreFromOptimizing(properties, restoreCallback) {
    var property;
    var restored;
    var current;
    var i;
  
    for (i = properties.length - 1; i >= 0; i--) {
      property = properties[i];
  
      if (property.unused) {
        continue;
      }
  
      if (!property.dirty && !property.important && !property.hack) {
        continue;
      }
  
      if (restoreCallback) {
        restored = restoreCallback(property);
        property.value = restored;
      } else {
        restored = property.value;
      }
  
      if (property.important) {
        restoreImportant(property);
      }
  
      if (property.hack) {
        restoreHack(property);
      }
  
      if ('all' in property) {
        current = property.all[property.position];
        current[1][1] = property.name;
  
        current.splice(2, current.length - 1);
        Array.prototype.push.apply(current, restored);
      }
    }
  }
  
  function restoreImportant(property) {
    property.value[property.value.length - 1][1] += IMPORTANT_TOKEN;
  }
  
  function restoreHack(property) {
    if (property.hack[0] == Hack.UNDERSCORE) {
      property.name = UNDERSCORE_HACK + property.name;
    } else if (property.hack[0] == Hack.ASTERISK) {
      property.name = ASTERISK_HACK + property.name;
    } else if (property.hack[0] == Hack.BACKSLASH) {
      property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1];
    } else if (property.hack[0] == Hack.BANG) {
      property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK;
    }
  }
  
  module.exports = restoreFromOptimizing;