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