| 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; |