diff --git a/package-lock.json b/package-lock.json index d746371..4e2d909 100644 --- a/package-lock.json +++ b/package-lock.json @@ -438,6 +438,12 @@ } } }, + "base64-arraybuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", + "dev": true + }, "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", @@ -984,6 +990,15 @@ "randomfill": "^1.0.3" } }, + "css-line-break": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz", + "integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==", + "dev": true, + "requires": { + "base64-arraybuffer": "^0.2.0" + } + }, "css-loader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz", @@ -1230,6 +1245,11 @@ "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", "dev": true }, + "d3-save-svg": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/d3-save-svg/-/d3-save-svg-0.0.2.tgz", + "integrity": "sha1-dLNegrlD6mxoD0NJisLrMCeCOUU=" + }, "d3-scale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.1.0.tgz", @@ -2533,6 +2553,15 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, + "html2canvas": { + "version": "1.0.0-rc.5", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.5.tgz", + "integrity": "sha512-DtNqPxJNXPoTajs+lVQzGS1SULRI4GQaROeU5R41xH8acffHukxRh/NBVcTBsfCkJSkLq91rih5TpbEwUP9yWA==", + "dev": true, + "requires": { + "css-line-break": "1.1.1" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", diff --git a/package.json b/package.json index 11a6687..deb9a3c 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "author": "Javier Garrayo ", "license": "ISC", "dependencies": { + "d3-save-svg": "0.0.2", "license-checker": "^25.0.1" } } diff --git a/src/app.js b/src/app.js index dc3e395..0077e99 100644 --- a/src/app.js +++ b/src/app.js @@ -1,8 +1,9 @@ import './app.css'; import { createApolloFetch } from 'apollo-fetch'; import { append_classifiers_list } from "./selection_list"; -import { createChart } from "./scatter_plot" -import html2canvas from 'html2canvas' +import { createChart } from "./scatter_plot"; +import html2canvas from 'html2canvas'; +import d3_save_svg from 'd3-save-svg'; // ./node_modules/.bin/webpack-cli src/app.js --output=build/build.js -d -w @@ -226,15 +227,25 @@ function add_buttons(divid, metric_x, metric_y, better){ }) - // add button to download chart in png format - d3.select('#' + divid + '_buttons_container').append("button") - .attr("class","download_button") - .attr("id",divid + "download_button") - .attr("name", "download") - .text("download PNG") - .on('click', function(d) { - download_png(divid) - }) + // add button to download chart in png format + d3.select('#' + divid + '_buttons_container').append("button") + .attr("class","download_button") + .attr("id",divid + "download_button") + .attr("name", "download") + .text("download PNG") + .on('click', function(d) { + download_png(divid) + }); + + // add button to download chart in svg format + d3.select('#' + divid + '_buttons_container').append("button") + .attr("class","download_button") + .attr("id",divid + "download_button_svg") + .attr("name", "download_svg") + .text("download SVG") + .on('click', function(d) { + download_svg(divid); + }); } @@ -254,6 +265,16 @@ function download_png(id){ } +function download_svg(id){ + // d3-save-svg requires svg element, so we cannot store the classification + // table for now. + var download_id = "svg_" + id; + var config = { + filename: 'benchmarking_chart_' + id, + } + d3_save_svg.save(d3.select('#'+download_id).node(), config); +} + function saveAs(uri, filename) { var link = document.createElement('a');