diff options
Diffstat (limited to 'node_modules/css-selector-tokenizer/lib/stringifyValues.js')
-rw-r--r-- | node_modules/css-selector-tokenizer/lib/stringifyValues.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/node_modules/css-selector-tokenizer/lib/stringifyValues.js b/node_modules/css-selector-tokenizer/lib/stringifyValues.js new file mode 100644 index 0000000..a61d8d5 --- /dev/null +++ b/node_modules/css-selector-tokenizer/lib/stringifyValues.js @@ -0,0 +1,62 @@ +"use strict"; + +var cssesc = require("cssesc"); + +var stringify; + +function escape(str, stringType) { + return cssesc(str, { + quotes: stringType === "\"" ? "double" : "single" + }); +} + +function stringifyWithoutBeforeAfter(tree) { + switch(tree.type) { + case "values": + return tree.nodes.map(stringify).join(","); + case "value": + return tree.nodes.map(stringify).join(""); + case "item": + return tree.name; + case "nested-item": + return tree.name + "(" + tree.nodes.map(stringify).join(",") + ")"; + case "invalid": + return tree.value; + case "comment": + return "/*" + tree.content + "*/"; + case "string": + switch(tree.stringType) { + case "'": + return "'" + escape(tree.value, "'") + "'"; + case "\"": + return "\"" + escape(tree.value, "\"") + "\""; + } + /* istanbul ignore next */ + throw new Error("Invalid stringType"); + case "url": + var start = "url(" + (tree.innerSpacingBefore || ""); + var end = (tree.innerSpacingAfter || "") + ")"; + switch(tree.stringType) { + case "'": + return start + "'" + tree.url.replace(/(\\)/g, "\\$1").replace(/'/g, "\\'") + "'" + end; + case "\"": + return start + "\"" + tree.url.replace(/(\\)/g, "\\$1").replace(/"/g, "\\\"") + "\"" + end; + default: + return start + tree.url.replace(/("|'|\)|\\)/g, "\\$1") + end; + } + } +} + + +stringify = function stringify(tree) { + var str = stringifyWithoutBeforeAfter(tree); + if(tree.before) { + str = tree.before + str; + } + if(tree.after) { + str = str + tree.after; + } + return str; +}; + +module.exports = stringify; |