diff --git a/lib/cli.js b/lib/cli.js index 918d79bab..af4a2de70 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -24,6 +24,7 @@ function cli(options) { , verbose: 'v' , phantomPath: 'e' , sequenceConfig: 'c' + , css: 't' } , 'boolean': ['help', 'png', 'svg'] , 'string': ['outputDir'] @@ -42,6 +43,7 @@ function cli(options) { , " -p --png If SVG was selected, and you also want PNG, set this flag" , " -o --outputDir Directory to save files, will be created automatically, defaults to `cwd`" , " -e --phantomPath Specify the path to the phantomjs executable" + , " -t --css Specify the path to a CSS file to be included when processing output" , " -c --sequenceConfig Specify the path to the file with the configuration to be applied in the sequence diagram" , " -h --help Show this message" , " -v --verbose Show logging" @@ -72,7 +74,7 @@ cli.prototype.parse = function(argv, next) { } // ensure that parameter-expecting options have parameters - ;['outputDir', 'phantomPath', 'sequenceConfig'].forEach(function(i) { + ;['outputDir', 'phantomPath', 'sequenceConfig', 'css'].forEach(function(i) { if(typeof options[i] !== 'undefined') { if (typeof options[i] !== 'string' || options[i].length < 1) { this.errors.push(new Error(i + " expects a value.")) @@ -92,6 +94,14 @@ cli.prototype.parse = function(argv, next) { options.sequenceConfig = checkConfig(options.sequenceConfig) } + if (options.css) { + try { + options.css = fs.readFileSync(options.css, 'utf8') + } catch (err) { + this.errors.push(err) + } + } + this.checkPhantom = createCheckPhantom(options.phantomPath) this.checkPhantom(function(err, path) { diff --git a/lib/index.js b/lib/index.js index b34505306..50c4d7fa6 100644 --- a/lib/index.js +++ b/lib/index.js @@ -18,6 +18,7 @@ function processMermaid(files, _options, _next) { , outputDir , options.png , options.svg + , options.css || '' , options.sequenceConfig , options.verbose ] diff --git a/lib/phantomscript.js b/lib/phantomscript.js index 0a5903141..5503dcc3d 100644 --- a/lib/phantomscript.js +++ b/lib/phantomscript.js @@ -29,13 +29,14 @@ var system = require('system') , webpage = require('webpage') var page = webpage.create() - , files = phantom.args.slice(5, phantom.args.length) + , files = phantom.args.slice(6, phantom.args.length) , options = { outputDir: phantom.args[0] , png: phantom.args[1] === 'true' ? true : false , svg: phantom.args[2] === 'true' ? true : false - , sequenceConfig: phantom.args[3] - , verbose: phantom.args[4] === 'true' ? true : false + , css: phantom.args[3] !== '' ? phantom.args[3] : '* { margin: 0; padding: 0; }' + , sequenceConfig: phantom.args[4] + , verbose: phantom.args[5] === 'true' ? true : false } , log = logger(options.verbose) @@ -43,7 +44,7 @@ page.content = [ '' , '' , '' , '' , '' diff --git a/test/cli_test-output.js b/test/cli_test-output.js index 5cea818d0..b4f771f2f 100644 --- a/test/cli_test-output.js +++ b/test/cli_test-output.js @@ -80,6 +80,35 @@ test('output of multiple svg', function(t) { }) }) +test('output including CSS', function(t) { + t.plan(5) + + var expected = ['test.mermaid.png'] + , opt = clone(singleFile) + , filename + , one + , two + + opt.png = true + + mermaid.process(opt.files, opt, function(code) { + t.equal(code, 0, 'has clean exit code') + filename = path.join(opt.outputDir, path.basename(expected[0])) + one = fs.statSync(filename) + + opt.css = fs.readFileSync('test/fixtures/test.css', 'utf8') + + mermaid.process(opt.files, opt, function(code) { + t.equal(code, 0, 'has clean exit code') + two = fs.statSync(filename) + + t.notEqual(one.size, two.size) + + verifyFiles(expected, opt.outputDir, t) + }) + }) +}) + function verifyFiles(expected, dir, t) { async.each( expected diff --git a/test/cli_test-parser.js b/test/cli_test-parser.js index f21acfd67..be03bebe1 100644 --- a/test/cli_test-parser.js +++ b/test/cli_test-parser.js @@ -71,6 +71,18 @@ test('setting an output directory succeeds', function(t) { }) }) +test('setting a css source file succeeds', function(t) { + t.plan(1) + + var cli = require(cliPath) + , argv = ['-t', 'test/fixtures/test.css'] + + cli.parse(argv, function(err, msg, opt) { + t.ok(opt.css, 'css file is populated') + t.end() + }) +}) + test('setting an output directory incorrectly causes an error', function(t) { t.plan(1) diff --git a/test/fixtures/test.css b/test/fixtures/test.css new file mode 100644 index 000000000..f5cb0fa58 --- /dev/null +++ b/test/fixtures/test.css @@ -0,0 +1,3 @@ +body { + background: #f00; +}