diff --git a/src/components/blocks.js b/src/components/blocks.js index 73c173a964c9844f19dc4c05a30ace6b28fa051e..0d05a95f059b9cd3ea412df2e2af5d7198a5af08 100644 --- a/src/components/blocks.js +++ b/src/components/blocks.js @@ -3,12 +3,13 @@ const React = require('react'); const ScratchBlocks = require('scratch-blocks'); class Blocks extends React.Component { - componentDidUpdate (prevProps) { - if (!prevProps.options.toolbox && this.props.options.toolbox) { - let workspaceConfig = defaultsDeep({}, Blocks.defaultOptions, this.props.options); - this.workspace = ScratchBlocks.inject(this.refs.scratchBlocks, workspaceConfig); - this.props.onReceiveWorkspace(this.workspace); - } + componentDidMount () { + let workspaceConfig = defaultsDeep({}, Blocks.defaultOptions, this.props.options); + this.workspace = ScratchBlocks.inject(this.refs.scratchBlocks, workspaceConfig); + this.props.onReceiveWorkspace(this.workspace); + } + componentWillUnmount () { + this.workspace.dispose(); } render () { return ( diff --git a/src/components/gui.js b/src/components/gui.js index 59d30604250c0180bad9bd1045da42e2d118e3ab..38488311e40d2af11fa131e62b18b7a361e87ebc 100644 --- a/src/components/gui.js +++ b/src/components/gui.js @@ -6,7 +6,6 @@ const Renderer = require('scratch-render'); const SpriteSelector = require('./sprite-selector'); const Stage = require('./stage'); const StopAll = require('./stop-all'); -const Toolbox = require('./toolbox'); const VM = require('scratch-vm'); const VMManager = require('../lib/vm-manager'); @@ -17,11 +16,6 @@ class GUI extends React.Component { this.onReceiveWorkspace = this.onReceiveWorkspace.bind(this); this.state = {}; } - componentDidMount () { - this.setState({ - toolbox: this.toolbox - }); - } componentWillReceiveProps (nextProps) { if (this.props.projectData !== nextProps.projectData) { this.props.vm.loadProject(nextProps.projectData); @@ -58,11 +52,9 @@ class GUI extends React.Component { <StopAll vm={this.props.vm} /> <Stage stageRef={stage => this.stage = stage} /> <SpriteSelector vm={this.props.vm} /> - <Toolbox toolboxRef={toolbox => this.toolbox = toolbox} /> <Blocks options={{ - media: this.props.basePath + 'static/blocks-media/', - toolbox: this.state.toolbox + media: this.props.basePath + 'static/blocks-media/' }} vm={this.props.vm} onReceiveWorkspace={this.onReceiveWorkspace} diff --git a/src/components/toolbox.js b/src/components/toolbox.js deleted file mode 100644 index e32a625e60ca1a84a5b143698adedb8c8cfb7261..0000000000000000000000000000000000000000 --- a/src/components/toolbox.js +++ /dev/null @@ -1,700 +0,0 @@ -const React = require('react'); - -class Toolbox extends React.Component { - render () { - return ( - <xml - className="scratch-toolbox" - style={{ display: 'none' }} - ref={this.props.toolboxRef} - > - {this.props.children} - </xml> - ); - } -} - -Toolbox.propTypes = { - children: React.PropTypes.node, - toolboxRef: React.PropTypes.func -}; - -Toolbox.defaultProps = { - toolboxRef: function () {}, - children: [ - <category is key="motion" name="Motion" colour="#4C97FF" secondaryColour="#3373CC"> - <block type="motion_movesteps"> - <value name="STEPS"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="motion_turnright"> - <value name="DEGREES"> - <shadow type="math_number"> - <field name="NUM">15</field> - </shadow> - </value> - </block> - <block type="motion_turnleft"> - <value name="DEGREES"> - <shadow type="math_number"> - <field name="NUM">15</field> - </shadow> - </value> - </block> - <block type="motion_pointindirection"> - <value name="DIRECTION"> - <shadow type="math_angle"> - <field name="NUM">90</field> - </shadow> - </value> - </block> - <block type="motion_pointtowards"> - <value name="TOWARDS"> - <shadow type="motion_pointtowards_menu"> - </shadow> - </value> - </block> - <block type="motion_gotoxy"> - <value name="X"> - <shadow type="math_number"> - <field name="NUM">0</field> - </shadow> - </value> - <value name="Y"> - <shadow type="math_number"> - <field name="NUM">0</field> - </shadow> - </value> - </block> - <block type="motion_goto"> - <value name="TO"> - <shadow type="motion_goto_menu"> - </shadow> - </value> - </block> - <block type="motion_glidesecstoxy"> - <value name="SECS"> - <shadow type="math_number"> - <field name="NUM">1</field> - </shadow> - </value> - <value name="X"> - <shadow type="math_number"> - <field name="NUM">0</field> - </shadow> - </value> - <value name="Y"> - <shadow type="math_number"> - <field name="NUM">0</field> - </shadow> - </value> - </block> - <block type="motion_changexby"> - <value name="DX"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="motion_setx"> - <value name="X"> - <shadow type="math_number"> - <field name="NUM">0</field> - </shadow> - </value> - </block> - <block type="motion_changeyby"> - <value name="DY"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="motion_sety"> - <value name="Y"> - <shadow type="math_number"> - <field name="NUM">0</field> - </shadow> - </value> - </block> - <block type="motion_ifonedgebounce"></block> - <block type="motion_setrotationstyle"> - <value name="STYLE"> - <shadow type="motion_setrotationstyle_menu"></shadow> - </value> - </block> - <block type="motion_xposition"></block> - <block type="motion_yposition"></block> - <block type="motion_direction"></block> - </category>, - <category is key="looks" name="Looks" colour="#9966FF" secondaryColour="#774DCB"> - <block type="looks_sayforsecs"> - <value name="MESSAGE"> - <shadow type="text"> - <field name="TEXT">Hello!</field> - </shadow> - </value> - <value name="SECS"> - <shadow type="math_number"> - <field name="NUM">2</field> - </shadow> - </value> - </block> - <block type="looks_say"> - <value name="MESSAGE"> - <shadow type="text"> - <field name="TEXT">Hello!</field> - </shadow> - </value> - </block> - <block type="looks_thinkforsecs"> - <value name="MESSAGE"> - <shadow type="text"> - <field name="TEXT">Hmm...</field> - </shadow> - </value> - <value name="SECS"> - <shadow type="math_number"> - <field name="NUM">2</field> - </shadow> - </value> - </block> - <block type="looks_think"> - <value name="MESSAGE"> - <shadow type="text"> - <field name="TEXT">Hmm...</field> - </shadow> - </value> - </block> - <block type="looks_show"></block> - <block type="looks_hide"></block> - <block type="looks_switchcostumeto"> - <value name="COSTUME"> - <shadow type="looks_costume"></shadow> - </value> - </block> - <block type="looks_nextcostume"></block> - <block type="looks_nextbackdrop"></block> - <block type="looks_switchbackdropto"> - <value name="BACKDROP"> - <shadow type="looks_backdrops"></shadow> - </value> - </block> - <block type="looks_switchbackdroptoandwait"> - <value name="BACKDROP"> - <shadow type="looks_backdrops"></shadow> - </value> - </block> - <block type="looks_changeeffectby"> - <value name="EFFECT"> - <shadow type="looks_effectmenu"></shadow> - </value> - <value name="CHANGE"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="looks_seteffectto"> - <value name="EFFECT"> - <shadow type="looks_effectmenu"></shadow> - </value> - <value name="VALUE"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="looks_cleargraphiceffects"></block> - <block type="looks_changesizeby"> - <value name="CHANGE"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="looks_setsizeto"> - <value name="SIZE"> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - </value> - </block> - <block type="looks_gotofront"></block> - <block type="looks_gobacklayers"> - <value name="NUM"> - <shadow type="math_integer"> - <field name="NUM">1</field> - </shadow> - </value> - </block> - <block type="looks_costumeorder"></block> - <block type="looks_backdroporder"></block> - <block type="looks_backdropname"></block> - <block type="looks_size"></block> - </category>, - <category is key="sound" name="Sound" colour="#D65CD6" secondaryColour="#BD42BD"> - <block type="sound_play"> - <value name="SOUND_MENU"> - <shadow type="sound_sounds_option"></shadow> - </value> - </block> - <block type="sound_playuntildone"> - <value name="SOUND_MENU"> - <shadow type="sound_sounds_option"></shadow> - </value> - </block> - <block type="sound_stopallsounds"></block> - <block type="sound_playdrumforbeats"> - <value name="DRUMTYPE"> - <shadow type="math_number"> - <field name="NUM">1</field> - </shadow> - </value> - <value name="BEATS"> - <shadow type="math_number"> - <field name="NUM">0.25</field> - </shadow> - </value> - </block> - <block type="sound_restforbeats"> - <value name="BEATS"> - <shadow type="math_number"> - <field name="NUM">0.25</field> - </shadow> - </value> - </block> - <block type="sound_playnoteforbeats"> - <value name="NOTE"> - <shadow type="math_number"> - <field name="NUM">1</field> - </shadow> - </value> - <value name="BEATS"> - <shadow type="math_number"> - <field name="NUM">0.5</field> - </shadow> - </value> - </block> - <block type="sound_setinstrumentto"> - <value name="INSTRUMENT"> - <shadow type="math_number"> - <field name="NUM">1</field> - </shadow> - </value> - </block> - <block type="sound_changeeffectby"> - <value name="EFFECT"> - <shadow type="sound_effects_menu"></shadow> - </value> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </block> - <block type="sound_seteffectto"> - <value name="EFFECT"> - <shadow type="sound_effects_menu"></shadow> - </value> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - </block> - <block type="sound_cleareffects"></block> - <block type="sound_changevolumeby"> - <value name="VOLUME"> - <shadow type="math_number"> - <field name="NUM">-10</field> - </shadow> - </value> - </block> - <block type="sound_setvolumeto"> - <value name="VOLUME"> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - </value> - </block> - <block type="sound_volume"></block> - <block type="sound_changetempoby"> - <value name="TEMPO"> - <shadow type="math_number"> - <field name="NUM">20</field> - </shadow> - </value> - </block> - <block type="sound_settempotobpm"> - <value name="TEMPO"> - <shadow type="math_number"> - <field name="NUM">60</field> - </shadow> - </value> - </block> - <block type="sound_tempo"></block> - </category>, - <category is key="pen" name="Pen" colour="#00B295" secondaryColour="#0B8E69"> - <block type="pen_clear"></block> - <block type="pen_stamp"></block> - <block type="pen_pendown"></block> - <block type="pen_penup"></block> - <block type="pen_setpencolortocolor"> - <value name="COLOR"> - <shadow type="colour_picker"> - </shadow> - </value> - </block> - <block type="pen_changepencolorby"> - <value name="COLOR"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="pen_setpencolortonum"> - <value name="COLOR"> - <shadow type="math_number"> - <field name="NUM">0</field> - </shadow> - </value> - </block> - <block type="pen_changepenshadeby"> - <value name="SHADE"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="pen_setpenshadeto"> - <value name="SHADE"> - <shadow type="math_number"> - <field name="NUM">50</field> - </shadow> - </value> - </block> - <block type="pen_changepensizeby"> - <value name="SIZE"> - <shadow type="math_number"> - <field name="NUM">1</field> - </shadow> - </value> - </block> - <block type="pen_setpensizeto"> - <value name="SIZE"> - <shadow type="math_number"> - <field name="NUM">1</field> - </shadow> - </value> - </block> - </category>, - <category is key="data" name="Data" colour="#FF8C1A" secondaryColour="#DB6E00" custom="VARIABLE"></category>, - <category is key="events" name="Events" colour="#FFD500" secondaryColour="#CC9900"> - <block type="event_whenflagclicked"></block> - <block type="event_whenkeypressed"> - <value name="KEY_OPTION"> - <shadow type="event_keyoptions"></shadow> - </value> - </block> - <block type="event_whenthisspriteclicked"></block> - <block type="event_whenbackdropswitchesto"> - <value name="BACKDROP"> - <shadow type="event_backdrops"></shadow> - </value> - </block> - <block type="event_whengreaterthan"> - <value name="WHENGREATERTHANMENU"> - <shadow type="event_whengreaterthanmenu"></shadow> - </value> - <value name="VALUE"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="event_whenbroadcastreceived"> - <value name="BROADCAST_OPTION"> - <shadow type="event_broadcast_menu"></shadow> - </value> - </block> - <block type="event_broadcast"> - <value name="BROADCAST_OPTION"> - <shadow type="event_broadcast_menu"></shadow> - </value> - </block> - <block type="event_broadcastandwait"> - <value name="BROADCAST_OPTION"> - <shadow type="event_broadcast_menu"></shadow> - </value> - </block> - </category>, - <category is key="control" name="Control" colour="#FFAB19" secondaryColour="#CF8B17"> - <block type="control_wait"> - <value name="DURATION"> - <shadow type="math_positive_number"> - <field name="NUM">1</field> - </shadow> - </value> - </block> - <block type="control_repeat"> - <value name="TIMES"> - <shadow type="math_whole_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="control_forever"></block> - <block type="control_if"></block> - <block type="control_if_else"></block> - <block type="control_wait_until"></block> - <block type="control_repeat_until"></block> - <block type="control_stop"> - <value name="STOP_OPTION"> - <shadow type="control_stop_menu"></shadow> - </value> - </block> - <block type="control_start_as_clone"></block> - <block type="control_create_clone_of"> - <value name="CLONE_OPTION"> - <shadow type="control_create_clone_of_menu"></shadow> - </value> - </block> - <block type="control_delete_this_clone"></block> - </category>, - <category is key="sensing" name="Sensing" colour="#4CBFE6" secondaryColour="#2E8EB8"> - <block type="sensing_touchingobject"> - <value name="TOUCHINGOBJECTMENU"> - <shadow type="sensing_touchingobjectmenu"></shadow> - </value> - </block> - <block type="sensing_touchingcolor"> - <value name="COLOR"> - <shadow type="colour_picker"></shadow> - </value> - </block> - <block type="sensing_coloristouchingcolor"> - <value name="COLOR"> - <shadow type="colour_picker"></shadow> - </value> - <value name="COLOR2"> - <shadow type="colour_picker"></shadow> - </value> - </block> - <block type="sensing_distanceto"> - <value name="DISTANCETOMENU"> - <shadow type="sensing_distancetomenu"></shadow> - </value> - </block> - <block type="sensing_askandwait"> - <value name="QUESTION"> - <shadow type="text"> - <field name="TEXT">What's your name?</field> - </shadow> - </value> - </block> - <block type="sensing_answer"></block> - <block type="sensing_keypressed"> - <value name="KEY_OPTION"> - <shadow type="sensing_keyoptions"></shadow> - </value> - </block> - <block type="sensing_mousedown"></block> - <block type="sensing_mousex"></block> - <block type="sensing_mousey"></block> - <block type="sensing_loudness"></block> - <block type="sensing_videoon"> - <value name="VIDEOONMENU1"> - <shadow type="sensing_videoonmenuone"></shadow> - </value> - <value name="VIDEOONMENU2"> - <shadow type="sensing_videoonmenutwo"></shadow> - </value> - </block> - <block type="sensing_videotoggle"> - <value name="VIDEOTOGGLEMENU"> - <shadow type="sensing_videotogglemenu"></shadow> - </value> - </block> - <block type="sensing_setvideotransparency"> - <value name="TRANSPARENCY"> - <shadow type="math_number"> - <field name="NUM">50</field> - </shadow> - </value> - </block> - <block type="sensing_timer"></block> - <block type="sensing_resettimer"></block> - <block type="sensing_current"> - <value name="CURRENTMENU"> - <shadow type="sensing_currentmenu"></shadow> - </value> - </block> - <block type="sensing_dayssince2000"></block> - <block type="sensing_username"></block> - </category>, - <category is key="operators" name="Operators" colour="#40BF4A" secondaryColour="#389438"> - <block type="operator_add"> - <value name="NUM1"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - <value name="NUM2"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - </block> - <block type="operator_subtract"> - <value name="NUM1"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - <value name="NUM2"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - </block> - <block type="operator_multiply"> - <value name="NUM1"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - <value name="NUM2"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - </block> - <block type="operator_divide"> - <value name="NUM1"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - <value name="NUM2"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - </block> - <block type="operator_random"> - <value name="FROM"> - <shadow type="math_number"> - <field name="NUM">1</field> - </shadow> - </value> - <value name="TO"> - <shadow type="math_number"> - <field name="NUM">10</field> - </shadow> - </value> - </block> - <block type="operator_lt"> - <value name="OPERAND1"> - <shadow type="text"> - <field name="TEXT"></field> - </shadow> - </value> - <value name="OPERAND2"> - <shadow type="text"> - <field name="TEXT"></field> - </shadow> - </value> - </block> - <block type="operator_equals"> - <value name="OPERAND1"> - <shadow type="text"> - <field name="TEXT"></field> - </shadow> - </value> - <value name="OPERAND2"> - <shadow type="text"> - <field name="TEXT"></field> - </shadow> - </value> - </block> - <block type="operator_gt"> - <value name="OPERAND1"> - <shadow type="text"> - <field name="TEXT"></field> - </shadow> - </value> - <value name="OPERAND2"> - <shadow type="text"> - <field name="TEXT"></field> - </shadow> - </value> - </block> - <block type="operator_and"></block> - <block type="operator_or"></block> - <block type="operator_not"></block> - <block type="operator_join"> - <value name="STRING1"> - <shadow type="text"> - <field name="TEXT">hello</field> - </shadow> - </value> - <value name="STRING2"> - <shadow type="text"> - <field name="TEXT">world</field> - </shadow> - </value> - </block> - <block type="operator_letter_of"> - <value name="LETTER"> - <shadow type="math_whole_number"> - <field name="NUM">1</field> - </shadow> - </value> - <value name="STRING"> - <shadow type="text"> - <field name="TEXT">world</field> - </shadow> - </value> - </block> - <block type="operator_length"> - <value name="STRING"> - <shadow type="text"> - <field name="TEXT">world</field> - </shadow> - </value> - </block> - <block type="operator_mod"> - <value name="NUM1"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - <value name="NUM2"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - </block> - <block type="operator_round"> - <value name="NUM"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - </block> - <block type="operator_mathop"> - <value name="OPERATOR"> - <shadow type="operator_mathop_menu"></shadow> - </value> - <value name="NUM"> - <shadow type="math_number"> - <field name="NUM"></field> - </shadow> - </value> - </block> - </category>, - <category is key="more" name="More Blocks" colour="#FF6680" secondaryColour="#FF3355"></category> - ] -}; - -module.exports = Toolbox;