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