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