diff --git a/src/components/WorkspaceFunc.js b/src/components/WorkspaceFunc.js index 2beff96..dbc3c3d 100644 --- a/src/components/WorkspaceFunc.js +++ b/src/components/WorkspaceFunc.js @@ -25,7 +25,7 @@ import Tooltip from '@material-ui/core/Tooltip'; import TextField from '@material-ui/core/TextField'; import Typography from '@material-ui/core/Typography'; -import { faPen, faSave, faUpload, faShare } from "@fortawesome/free-solid-svg-icons"; +import { faPen, faSave, faUpload, faCamera, faShare } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; const styles = (theme) => ({ @@ -61,7 +61,7 @@ class WorkspaceFunc extends Component { content: '', open: false, file: false, - saveXml: false, + saveFile: false, name: props.name }; } @@ -86,15 +86,48 @@ class WorkspaceFunc extends Component { saveAs(blob, fileName); } - createFileName = () => { - if(this.state.name){ - this.saveXmlFile(); - } - else{ - this.setState({ file: true, saveXml: true, open: true, title: 'Blöcke speichern', content: 'Bitte gib einen Namen für die Bennenung der XML-Datei ein und bestätige diesen mit einem Klick auf \'Eingabe\'.' }); + getSvg = () => { + const workspace = Blockly.getMainWorkspace(); + var canvas = workspace.svgBlockCanvas_.cloneNode(true); + + if (canvas.children[0] !== undefined) { + canvas.removeAttribute("transform"); + + // does not work in react + // var cssContent = Blockly.Css.CONTENT.join(''); + var cssContent = ''; + for (var i = 0; i < document.getElementsByTagName('style').length; i++) { + if(/^blockly.*$/.test(document.getElementsByTagName('style')[i].id)){ + cssContent += document.getElementsByTagName('style')[i].firstChild.data.replace(/\..* \./g, '.'); + } + } + + var css = ''; + + var bbox = document.getElementsByClassName("blocklyBlockCanvas")[0].getBBox(); + var content = new XMLSerializer().serializeToString(canvas); + + var xml = ` + ${css}">${content}`; + var fileName = detectWhitespacesAndReturnReadableResult(this.state.name); + fileName = `${fileName}.svg` + var blob = new Blob([xml], { type: 'image/svg+xml;base64' }); + saveAs(blob, fileName); } } + createFileName = (filetype) => { + this.setState({file: filetype}, () => { + if(this.state.name){ + this.state.file === 'xml' ? this.saveXmlFile() : this.getSvg() + } + else{ + this.setState({ saveFile: true, file: filetype, open: true, title: this.state.file === 'xml' ? 'Blöcke speichern' : 'Screenshot erstellen', content: `Bitte gib einen Namen für die Bennenung der ${this.state.file === 'xml' ? 'XML' : 'SVG'}-Datei ein und bestätige diesen mit einem Klick auf \'Eingabe\'.` }); + } + }); + } + setFileName = (e) => { this.setState({name: e.target.value}); } @@ -152,7 +185,7 @@ class WorkspaceFunc extends Component {
{!this.props.solutionCheck ? -
{this.setState({file: true, open: true, saveXml: false, title: 'Projekt benennen', content: 'Bitte gib einen Namen für das Projekt ein und bestätige diesen mit einem Klick auf \'Eingabe\'.'})}}> +
{this.setState({file: true, open: true, saveFile: false, title: 'Projekt benennen', content: 'Bitte gib einen Namen für das Projekt ein und bestätige diesen mit einem Klick auf \'Eingabe\'.'})}}> {this.props.name && !isWidthDown('xs', this.props.width) ? {this.props.name} : null}
@@ -164,7 +197,7 @@ class WorkspaceFunc extends Component { this.createFileName()} + onClick={() => {this.createFileName('xml');}} > @@ -187,6 +220,14 @@ class WorkspaceFunc extends Component {
+ + {this.createFileName('svg');}} + > + + + - - + +
: null}