diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index b5861ede..42dab5e3 100755 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -9,6 +9,7 @@ import Raphael from 'raphael' import flowchart from 'flowchart' import mermaidRender from './render/MermaidRender' import SequenceDiagram from 'js-sequence-diagrams' +import Chart from 'chart.js' import eventEmitter from 'browser/main/lib/eventEmitter' import htmlTextHelper from 'browser/lib/htmlTextHelper' import convertModeName from 'browser/lib/convertModeName' @@ -535,9 +536,29 @@ export default class MarkdownPreview extends React.Component { } }) - _.forEach(this.refs.root.contentWindow.document.querySelectorAll('.mermaid'), (el) => { - mermaidRender(el, htmlTextHelper.decodeEntities(el.innerHTML)) - }) + _.forEach( + this.refs.root.contentWindow.document.querySelectorAll('.chart'), + (el) => { + try { + const chartConfig = JSON.parse(el.innerHTML) + el.innerHTML = '' + var canvas = document.createElement('canvas') + el.appendChild(canvas) + /* eslint-disable no-new */ + new Chart(canvas, chartConfig) + } catch (e) { + console.error(e) + el.className = 'chart-error' + el.innerHTML = 'chartjs diagram parse error: ' + e.message + } + } + ) + _.forEach( + this.refs.root.contentWindow.document.querySelectorAll('.mermaid'), + (el) => { + mermaidRender(el, htmlTextHelper.decodeEntities(el.innerHTML)) + } + ) } focus () { diff --git a/browser/components/markdown.styl b/browser/components/markdown.styl index cf94bb8e..03503231 100644 --- a/browser/components/markdown.styl +++ b/browser/components/markdown.styl @@ -68,7 +68,7 @@ body padding 5px margin -5px border-radius 5px - .flowchart-error, .sequence-error + .flowchart-error, .sequence-error .chart-error background-color errorBackgroundColor color errorTextColor padding 5px @@ -213,7 +213,7 @@ pre margin 0 0 1em display flex line-height 1.4em - &.flowchart, &.sequence + &.flowchart, &.sequence, &.chart display flex justify-content center background-color white diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 48532538..e9c128b4 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -40,6 +40,9 @@ class Markdown { if (langType === 'sequence') { return `
${str}
` } + if (langType === 'chart') { + return `
${str}
` + } if (langType === 'mermaid') { return `
${str}
` } diff --git a/package.json b/package.json index 42839940..4aa078ff 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "@rokt33r/season": "^5.3.0", "aws-sdk": "^2.48.0", "aws-sdk-mobile-analytics": "^0.9.2", + "chart.js": "^2.7.2", "codemirror": "^5.39.0", "codemirror-mode-elixir": "^1.1.1", "electron-config": "^0.2.1", diff --git a/yarn.lock b/yarn.lock index 10d28022..a5a4a89c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1574,6 +1574,26 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chart.js@^2.7.2: + version "2.7.2" + resolved "http://registry.npm.taobao.org/chart.js/download/chart.js-2.7.2.tgz#3c9fde4dc5b95608211bdefeda7e5d33dffa5714" + dependencies: + chartjs-color "^2.1.0" + moment "^2.10.2" + +chartjs-color-string@^0.5.0: + version "0.5.0" + resolved "http://registry.npm.taobao.org/chartjs-color-string/download/chartjs-color-string-0.5.0.tgz#8d3752d8581d86687c35bfe2cb80ac5213ceb8c1" + dependencies: + color-name "^1.0.0" + +chartjs-color@^2.1.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/chartjs-color/download/chartjs-color-2.2.0.tgz#84a2fb755787ed85c39dd6dd8c7b1d88429baeae" + dependencies: + chartjs-color-string "^0.5.0" + color-convert "^0.5.3" + chokidar@^1.0.0, chokidar@^1.4.2: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -1750,6 +1770,10 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" +color-convert@^0.5.3: + version "0.5.3" + resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" + color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" @@ -5961,6 +5985,10 @@ mock-require@^3.0.1: get-caller-file "^1.0.2" normalize-path "^2.1.1" +moment@^2.10.2: + version "2.22.2" + resolved "http://registry.npm.taobao.org/moment/download/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + moment@^2.10.3: version "2.22.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.1.tgz#529a2e9bf973f259c9643d237fda84de3a26e8ad"