11import Canvg from 'canvg'
2+ let IMG_PADDING = 40
23let $d = document
34// calculate distances to center from top,left,bottom,right
4- let maxTop = 10000
5- let maxBottom = 10000
6- let maxLeft = 10000
7- let maxRight = 10000
85
9- let imgPadding = 40
10- let svgHeight , svgWidth
6+ let maxTop , maxBottom , maxLeft , maxRight , svgHeight , svgWidth
7+
8+ function initVar ( ) {
9+ maxTop = 10000
10+ maxBottom = 10000
11+ maxLeft = 10000
12+ maxRight = 10000
13+ svgHeight = 0
14+ svgWidth = 0
15+ }
1116
1217let head = `<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">`
1318function generateSvgDom ( ) {
@@ -38,8 +43,8 @@ function generateSvgDom() {
3843 console . log ( maxTop , maxBottom , maxLeft , maxRight )
3944 svgContent += RootToSvg ( )
4045 // 需要添加图片边缘padding
41- svgHeight = maxBottom - maxTop + imgPadding * 2
42- svgWidth = maxRight - maxLeft + imgPadding * 2
46+ svgHeight = maxBottom - maxTop + IMG_PADDING * 2
47+ svgWidth = maxRight - maxLeft + IMG_PADDING * 2
4348 // svgContent += customLinkTransform()
4449 let svgFile = createSvg ( svgHeight , svgWidth )
4550 svgContent =
@@ -72,13 +77,13 @@ function RootToSvg() {
7277
7378 let svg2ndEle = $d . querySelector ( '.svg2nd' )
7479
75- let svg2nd = `<g transform="translate(${ imgPadding - maxLeft } , ${
76- imgPadding - maxTop
80+ let svg2nd = `<g transform="translate(${ IMG_PADDING - maxLeft } , ${
81+ IMG_PADDING - maxTop
7782 } )">${ svg2ndEle . innerHTML } </g>`
7883 return (
7984 svg2nd +
80- `<g id="root" transform="translate(${ rootOffsetX + imgPadding } , ${
81- rootOffsetY + imgPadding
85+ `<g id="root" transform="translate(${ rootOffsetX + IMG_PADDING } , ${
86+ rootOffsetY + IMG_PADDING
8287 } )">
8388 <rect x="${ left } " y="${ top } " rx="5px" ry="5px" width="${
8489 rect . width
@@ -99,8 +104,8 @@ function PrimaryToSvg(primaryNode) {
99104
100105 let svg = ''
101106 let svg3rd = primaryNode . querySelector ( '.svg3rd' )
102- svg += `<g transform="translate(${ primaryNodeOffsetX + imgPadding } , ${
103- primaryNodeOffsetY + imgPadding
107+ svg += `<g transform="translate(${ primaryNodeOffsetX + IMG_PADDING } , ${
108+ primaryNodeOffsetY + IMG_PADDING
104109 } )">`
105110 svg += svg3rd ? svg3rd . innerHTML : ''
106111 for ( let i = 0 ; i < topics . length ; i ++ ) {
@@ -233,8 +238,10 @@ function customLinkTransform() {
233238 return resLinks
234239}
235240
236- export let exportSvg = function ( fileName , instance ) {
237- if ( instance ) $d = instance . container
241+ export let exportSvg = function ( instance , fileName ) {
242+ if ( ! instance ) throw new Error ( 'Mind-elixir instance is not presented. ---> exportSvg(instance, fileName)' )
243+ initVar ( )
244+ $d = instance . container
238245 let svgFile = generateSvgDom ( )
239246 let dlUrl = URL . createObjectURL (
240247 new Blob ( [ head + svgFile . outerHTML . replace ( / & n b s p ; / g, ' ' ) ] )
@@ -245,8 +252,10 @@ export let exportSvg = function (fileName, instance) {
245252 a . click ( )
246253}
247254
248- export let exportPng = async function ( fileName , instance ) {
249- if ( instance ) $d = instance . container
255+ export let exportPng = async function ( instance , fileName ) {
256+ if ( ! instance ) throw new Error ( 'Mind-elixir instance is not presented. ---> exportSvg(instance, fileName)' )
257+ initVar ( )
258+ $d = instance . container
250259 let svgFile = generateSvgDom ( )
251260 const canvas = document . createElement ( 'canvas' )
252261 canvas . style . display = 'none'
0 commit comments