1*4882a593Smuzhiyunvar fs = require('fs'); 2*4882a593Smuzhiyunvar system = require('system'); 3*4882a593Smuzhiyunvar page = require('webpage').create(); 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun// Examine console log for message from chart drawing 6*4882a593Smuzhiyunpage.onConsoleMessage = function(msg) { 7*4882a593Smuzhiyun console.log(msg); 8*4882a593Smuzhiyun if (msg === "ALL CHARTS READY") { 9*4882a593Smuzhiyun window.charts_ready = true; 10*4882a593Smuzhiyun } 11*4882a593Smuzhiyun else if (msg.slice(0, 11) === "CHART READY") { 12*4882a593Smuzhiyun var chart_id = msg.split(" ")[2]; 13*4882a593Smuzhiyun console.log('grabbing ' + chart_id); 14*4882a593Smuzhiyun var png_data = page.evaluate(function (chart_id) { 15*4882a593Smuzhiyun var chart_div = document.getElementById(chart_id + '_png'); 16*4882a593Smuzhiyun return chart_div.outerHTML; 17*4882a593Smuzhiyun }, chart_id); 18*4882a593Smuzhiyun fs.write(args[2] + '/' + chart_id + '.png', png_data, 'w'); 19*4882a593Smuzhiyun } 20*4882a593Smuzhiyun}; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun// Check command line arguments 23*4882a593Smuzhiyunvar args = system.args; 24*4882a593Smuzhiyunif (args.length != 3) { 25*4882a593Smuzhiyun console.log("USAGE: " + args[0] + " REPORT_HTML OUT_DIR\n"); 26*4882a593Smuzhiyun phantom.exit(1); 27*4882a593Smuzhiyun} 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun// Open the web page 30*4882a593Smuzhiyunpage.open(args[1], function(status) { 31*4882a593Smuzhiyun if (status == 'fail') { 32*4882a593Smuzhiyun console.log("Failed to open file '" + args[1] + "'"); 33*4882a593Smuzhiyun phantom.exit(1); 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun}); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun// Check status every 100 ms 38*4882a593Smuzhiyuninterval = window.setInterval(function () { 39*4882a593Smuzhiyun //console.log('waiting'); 40*4882a593Smuzhiyun if (window.charts_ready) { 41*4882a593Smuzhiyun clearTimeout(timer); 42*4882a593Smuzhiyun clearInterval(interval); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun var fname = args[1].replace(/\/+$/, "").split("/").pop() 45*4882a593Smuzhiyun console.log("saving " + fname); 46*4882a593Smuzhiyun fs.write(args[2] + '/' + fname, page.content, 'w'); 47*4882a593Smuzhiyun phantom.exit(0); 48*4882a593Smuzhiyun } 49*4882a593Smuzhiyun}, 100); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun// Time-out after 10 seconds 52*4882a593Smuzhiyuntimer = window.setTimeout(function () { 53*4882a593Smuzhiyun clearInterval(interval); 54*4882a593Smuzhiyun console.log("ERROR: timeout"); 55*4882a593Smuzhiyun phantom.exit(1); 56*4882a593Smuzhiyun}, 10000); 57