exports.getPreservedText = function(css, options, ignoredPseudos) { var parsed = mensch.parse(css, {position: true, comments: true}); var rules = typeof parsed.stylesheet != 'undefined' && parsed.stylesheet.rules ? parsed.stylesheet.rules : []; var preserved = []; var lastStart = null; for (var i = rules.length - 1; i >= 0; i--) { if ((options.fontFaces && rules[i].type === 'font-face') || (options.mediaQueries && rules[i].type === 'media') || (options.keyFrames && rules[i].type === 'keyframes') || (options.pseudos && rules[i].selectors && this.matchesPseudo(rules[i].selectors[0], ignoredPseudos))) { preserved.unshift( mensch.stringify( { stylesheet: { rules: [ rules[i] ] }}, { comments: false, indentation: ' ' } ) ); } lastStart = rules[i].position.start; } if (preserved.length === 0) { return false; } return '\n' + preserved.join('\n') + '\n'; };
xhr.onreadystatechange = function() { if (xhr.readyState === 4) { try { var ast = mensch.parse(xhr.responseText); callback({ast: JSON.stringify(ast)}); } catch (e) { callback({err: e}); } } };
exports.parseCSS = function(css) { var parsed = mensch.parse(css, {position: true, comments: true}); var rules = typeof parsed.stylesheet != 'undefined' && parsed.stylesheet.rules ? parsed.stylesheet.rules : []; var ret = []; for (var i = 0, l = rules.length; i < l; i++) { if (rules[i].type == 'rule') { var rule = rules[i]; var selectors = rule.selectors; for (var ii = 0, ll = selectors.length; ii < ll; ii++) { ret.push([selectors[ii], rule.declarations]); } } } return ret; };
exports.getPreservedText = function(css, options) { var parsed = mensch.parse(css, {position: true, comments: true}); var rules = typeof parsed.stylesheet != 'undefined' && parsed.stylesheet.rules ? parsed.stylesheet.rules : []; var preserved = css; var preserved2 = []; var lastStart = null; for (var i = rules.length - 1; i >= 0; i--) { if (options.fontFaces && rules[i].type === 'font-face') { // preserve // TODO remove the replace once we decide we don't need to mimic the previous outputs // we'll also have to remove the multiline hack in normalizeLineEndings preserved2.push( mensch.stringify( { stylesheet: { rules: [ rules[i] ] }}, { comments: false, indentation: ' ' } ).replace(/}/g,os.EOL+'}') ); } else if (options.mediaQueries && rules[i].type === 'media') { // preserve preserved2.push( mensch.stringify( { stylesheet: { rules: [ rules[i] ] }}, { comments: false, indentation: ' ' } ) ); } else { // remove preserved = removeStyle(preserved, rules[i].position.start, lastStart, 0, 0, 0, ''); } lastStart = rules[i].position.start; } // preserved works by removing unwanted stuff, preserved2 by generating a new style with "stuff to keep" // We have to decide what is our strategy (the preserved2 produces the same output of the cssom based version <= 2.0.0) /* method 1: clean up original style and keep the remaining "as is" */ /* if (preserved.trim().length === 0) return false; return preserved; */ /* method 2: create style from AST */ if (preserved2.length === 0) return false; return os.EOL+preserved2.join(os.EOL)+os.EOL; };
exports.getPreservedText = function(css, options) { var parsed = mensch.parse(css, {position: true, comments: true}); var rules = typeof parsed.stylesheet != 'undefined' && parsed.stylesheet.rules ? parsed.stylesheet.rules : []; var preserved = []; var lastStart = null; for (var i = rules.length - 1; i >= 0; i--) { if ((options.fontFaces && rules[i].type === 'font-face') || (options.mediaQueries && rules[i].type === 'media')) { preserved.push( mensch.stringify( { stylesheet: { rules: [ rules[i] ] }}, { comments: false, indentation: ' ' } ) ); } lastStart = rules[i].position.start; } if (preserved.length === 0) return false; return os.EOL+preserved.join(os.EOL)+os.EOL; };
fn: function () { mensch.stringify( mensch.parse(css) ); }