You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.7 KiB
69 lines
1.7 KiB
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;
|
|
|