You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.2 KiB
JavaScript
90 lines
2.2 KiB
JavaScript
function removeWhitespace(match, value) {
|
|
return '[' + value.replace(/ /g, '') + ']';
|
|
}
|
|
|
|
function selectorSorter(s1, s2) {
|
|
return s1[0] > s2[0] ? 1 : -1;
|
|
}
|
|
|
|
function whitespaceReplacements(_, p1, p2, p3) {
|
|
if (p1 && p2 && p3.length)
|
|
return p1 + p2 + ' ';
|
|
else if (p1 && p2)
|
|
return p1 + p2;
|
|
else
|
|
return p2;
|
|
}
|
|
|
|
var CleanUp = {
|
|
selectors: function (selectors, removeUnsupported, adjacentSpace) {
|
|
var list = [];
|
|
var repeated = [];
|
|
|
|
for (var i = 0, l = selectors.length; i < l; i++) {
|
|
var selector = selectors[i];
|
|
var reduced = selector[0]
|
|
.replace(/\s+/g, ' ')
|
|
.replace(/ ?, ?/g, ',')
|
|
.replace(/\s*(\\)?([>+~])(\s*)/g, whitespaceReplacements)
|
|
.trim();
|
|
|
|
if (adjacentSpace && reduced.indexOf('nav') > 0)
|
|
reduced = reduced.replace(/\+nav(\S|$)/, '+ nav$1');
|
|
|
|
if (removeUnsupported && (reduced.indexOf('*+html ') != -1 || reduced.indexOf('*:first-child+html ') != -1))
|
|
continue;
|
|
|
|
if (reduced.indexOf('*') > -1) {
|
|
reduced = reduced
|
|
.replace(/\*([:#\.\[])/g, '$1')
|
|
.replace(/^(\:first\-child)?\+html/, '*$1+html');
|
|
}
|
|
|
|
if (reduced.indexOf('[') > -1)
|
|
reduced = reduced.replace(/\[([^\]]+)\]/g, removeWhitespace);
|
|
|
|
if (repeated.indexOf(reduced) == -1) {
|
|
selector[0] = reduced;
|
|
repeated.push(reduced);
|
|
list.push(selector);
|
|
}
|
|
}
|
|
|
|
return list.sort(selectorSorter);
|
|
},
|
|
|
|
selectorDuplicates: function (selectors) {
|
|
var list = [];
|
|
var repeated = [];
|
|
|
|
for (var i = 0, l = selectors.length; i < l; i++) {
|
|
var selector = selectors[i];
|
|
|
|
if (repeated.indexOf(selector[0]) == -1) {
|
|
repeated.push(selector[0]);
|
|
list.push(selector);
|
|
}
|
|
}
|
|
|
|
return list.sort(selectorSorter);
|
|
},
|
|
|
|
block: function (values, spaceAfterClosingBrace) {
|
|
values[0] = values[0]
|
|
.replace(/\s+/g, ' ')
|
|
.replace(/(,|:|\() /g, '$1')
|
|
.replace(/ \)/g, ')');
|
|
|
|
if (!spaceAfterClosingBrace)
|
|
values[0] = values[0].replace(/\) /g, ')');
|
|
},
|
|
|
|
atRule: function (values) {
|
|
values[0] = values[0]
|
|
.replace(/\s+/g, ' ')
|
|
.trim();
|
|
}
|
|
};
|
|
|
|
module.exports = CleanUp;
|