diff --git a/src/components/Blockly/BlocklyComponent.css b/src/components/Blockly/BlocklyComponent.css deleted file mode 100644 index 8705fbc..0000000 --- a/src/components/Blockly/BlocklyComponent.css +++ /dev/null @@ -1,7 +0,0 @@ -#blocklyDiv { - height: 100%; - min-height: 500px; - width: 100%; - /* border: 1px solid #4EAF47; */ - position: relative; -} diff --git a/src/components/Blockly/BlocklyComponent.jsx b/src/components/Blockly/BlocklyComponent.jsx index 627df9a..e76de57 100644 --- a/src/components/Blockly/BlocklyComponent.jsx +++ b/src/components/Blockly/BlocklyComponent.jsx @@ -22,7 +22,6 @@ */ import React from 'react'; -import './BlocklyComponent.css'; import Blockly from 'blockly/core'; import locale from 'blockly/msg/en'; diff --git a/src/components/Blockly/BlocklySvg.js b/src/components/Blockly/BlocklySvg.js new file mode 100644 index 0000000..174b7c3 --- /dev/null +++ b/src/components/Blockly/BlocklySvg.js @@ -0,0 +1,65 @@ +import React, { Component } from 'react'; + +import * as Blockly from 'blockly/core'; + +class BlocklySvg extends Component { + + constructor(props) { + super(props); + this.state = { + svg: '' + }; + } + + componentDidMount() { + this.getSvg(); + } + + componentDidUpdate(props) { + if(props.initialXml !== this.props.initialXml){ + this.getSvg(); + } + } + + getSvg = () => { + const workspace = Blockly.getMainWorkspace(); + workspace.clear(); + Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(this.props.initialXml), workspace); + 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}`; + + this.setState({svg: xml}); + } + } + + render() { + return ( +
+ ); + }; +} + +export default BlocklySvg; diff --git a/src/components/Blockly/BlocklyWindow.js b/src/components/Blockly/BlocklyWindow.js index a31cd15..7512870 100644 --- a/src/components/Blockly/BlocklyWindow.js +++ b/src/components/Blockly/BlocklyWindow.js @@ -3,7 +3,8 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { onChangeWorkspace, clearStats } from '../../actions/workspaceActions'; import * as De from './msg/de'; -import BlocklyComponent from './'; +import BlocklyComponent from './BlocklyComponent'; +import BlocklySvg from './BlocklySvg'; import * as Blockly from 'blockly/core'; import './blocks/index'; import './generator/index'; @@ -32,49 +33,52 @@ class BlocklyWindow extends Component { componentDidUpdate(props) { const workspace = Blockly.getMainWorkspace(); - var initialXML = this.props.initialXml - if(props.initialXml !== initialXml){ + var xml = this.props.initialXml + // if svg is true, then the update process is done in the BlocklySvg component + if(props.initialXml !== xml && !this.props.svg){ // guarantees that the current xml-code (this.props.initialXml) is rendered workspace.clear(); - if(!initialXML) initialXML = initialXml; - Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(initialXML), workspace) ; + if(!xml) xml = initialXml; + Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(xml), workspace); } Blockly.svgResize(workspace); } render() { return ( - - - +
+ + + {this.props.svg && this.props.initialXml ? : null} +
); }; } diff --git a/src/components/Home.js b/src/components/Home.js index 1f2b6a4..af14068 100644 --- a/src/components/Home.js +++ b/src/components/Home.js @@ -87,7 +87,7 @@ class Home extends Component { - + {this.state.codeOn ? diff --git a/src/components/Tutorial/Assessment.js b/src/components/Tutorial/Assessment.js index bfce041..36d107f 100644 --- a/src/components/Tutorial/Assessment.js +++ b/src/components/Tutorial/Assessment.js @@ -39,7 +39,10 @@ class Assessment extends Component {
- + diff --git a/src/components/Tutorial/Builder/BlocklyExample.js b/src/components/Tutorial/Builder/BlocklyExample.js index ea8e81b..ef7b590 100644 --- a/src/components/Tutorial/Builder/BlocklyExample.js +++ b/src/components/Tutorial/Builder/BlocklyExample.js @@ -114,7 +114,10 @@ class BlocklyExample extends Component {
- +