var css = require("css"), fs = require("fs"), filePath = "../../src/webvowl/css/vowl.css"; fs.readFile(filePath, {encoding: "utf8"}, function (err, data) { if (err) { console.log(err); } else { console.log("// inline vowl styles"); console.log(convertCssToD3Rules(data)); console.log("\n// remove inline vowl styles"); console.log(createInlineStyleRemoveCommand(data)); } }); function createInlineStyleRemoveCommand(cssText) { var selectors = [], obj = css.parse(cssText), rules = obj.stylesheet.rules; rules.forEach(function (rule) { if (rule.type === "rule") { selectors = selectors.concat(rule.selectors); } }); return "d3.selectAll(\"".concat(selectors.join(", "), "\")"); } function convertCssToD3Rules(cssText) { var d3Rules = "", obj = css.parse(cssText), rules = obj.stylesheet.rules; rules.forEach(function (rule) { if (rule.type === "rule") { var builder = d3RuleBuilder(), selectors = rule.selectors, declarations = rule.declarations, declaration; builder.selectors(selectors); for (var i = 0, l = declarations.length; i < l; i++) { declaration = declarations[i]; if (declaration.type === "declaration") { builder.addRule(declaration.property, declaration.value); } } d3Rules = d3Rules.concat(builder.build(), "\n"); } }); return d3Rules; } function d3RuleBuilder() { var builder = {}, selector = "", rules = []; builder.selectors = function (selectors) { if (!arguments.length) return selector; if (selectors instanceof Array) { selector = selectors.join(", "); } else { selector = selectors; } return builder; }; builder.addRule = function (name, value) { rules.push({name: name, value: value}); return builder; }; builder.build = function () { var result = "setStyleSensitively(\"" + selector + "\", ["; for (var i = 0, l = rules.length; i < l; i++) { if (i > 0) { result = result.concat(", "); } var rule = rules[i]; result = result.concat("{name:\"", rule.name, "\", value:\"", rule.value, "\"}"); } result = result.concat("]);"); return result; }; return builder; }