app/assets/htmls/gs-element-blockly.html in gobstones-blockly-0.28.1 vs app/assets/htmls/gs-element-blockly.html in gobstones-blockly-0.29.0

- old
+ new

@@ -3312,11 +3312,11 @@ };</script> <script>var PLUS = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAQAAAD2e2DtAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAHdElNRQfhDAUCCjFLV0NqAAAC60lEQVR42u3dQW7aQABA0Wl7MMjJICeDnIwuqm4qVQrYjMH/Pa/jsfFnTJDwjAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBUP7Y+gClOY4zznX9zHmN8bn3gLHcYtwXbYevDZ5nLost/G7dx2foUeNzyyy+BN7Zs8ncjeHvrvP/NAW9qvff/rueAn1sfwNMcX3hvL2S/3wPcVt7fTl+p/c4AfIsA4gQQJ4A4AcQJIE4AcQKIE0CcAOIEECeAOAHECSBOAHECiBNAnADiBBAngDgBxAkgTgBxAogTQJwA4gQQJ4A4AcQJIE4AcQKIE0CcAOIEECeAOAHECSBOAHECiBNAnADiBBAngDgBxAkgTgBxAogTQJwA4mYHcBinVRdz+v+2tjlHfdrv8lRjHFZcyG3P22VmBPOWQrrsd+WtJ7iOjzkDzQrA5b/XpATmBHAY1ynj7MtxfD1/kDkBrP+RrGHC1ZnxX8Bpwhj7NOGV8z1A3IxbgBvA455+fcwAcQKIE0CcAOIEECeAOAHECSBOAHECiBNAnADiBBAngDgBxAkgTgBxAogTQJwA4gQQJ4A4AcT9mjLKcevTfFPn5/860AwQ58ehr2wnPw51C3jMccYgcwL48nyAu11nPB3AI2Je1bRHxMz7EPgxjuaBb7mO46zLP3MG+OMwjuM8ecx3cp419f81O4B51v7PY6evlO8B4gQQJ4A4AcQJIE4AcQKIE0CcAOIEECeAOAHECSBOAHECiBNAnADiBBAngDgBxAkgTgBxAogTQJwA4gQQJ4A4AcQJIE4AcQKIE0CcAOIEECeAOAHECSBOAHECiBNAnADiBBAngDgBxAkgTgBxAogTQJwA4gQQN2fp2G0cV9zXhEVct7HfGeD6wntjisu4rbRdtj4VHnFYLYDD1qfCY9aZA7z/39jyBFz+N7fsRrD7yX+n62H+4zTG3QvWnscYn1sfOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALvzG8Ijm7EmMQYoAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEyLTA1VDAyOjEwOjQ5LTA1OjAwJa2zowAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMi0wNVQwMjoxMDo0OS0wNTowMFTwCx8AAAAASUVORK5CYII="; var MINUS = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAQAAAD2e2DtAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAHdElNRQfhDAUCCi+xWH4JAAABcUlEQVR42u3c7ZGCMBSG0etuYcTKls7AyrSEVWd4+bjnUECMeSbhD6kCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBzu4XHm2rUvPekD2yutR57/4itTLXU0/Pvs9SUW5TcDrDUyE3r9Na6ZwZKBWD5PxVKIBPAVGtknGsZibeBTADPyCjXE1idn8A0/gJjXFPgn0sEwIEljgAHwPc2Xx87QHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNDcb2SUsfc0T2re/utAO0BzPg49sot8HOoI+M5IDJIJ4OF+gI+F7gpyRcwxxa6Iyb0E3mvYB96y1kgtv2vijubS18QBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWXq7xrTQhKAi3AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEyLTA1VDAyOjEwOjQ3LTA1OjAwdZLI/gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMi0wNVQwMjoxMDo0Ny0wNTowMATPcEIAAAAASUVORK5CYII="; var HAND = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfiBAUBKBeKSgeBAAABTElEQVQoz22QzyvDcRjHX5/vvrMyStI2uZgftdVCSpJCyW1y00oUF+Xg4OIkx5VyUyJOsgv/gnJw4YCSSFMyB5pGbLJ99/k8LltreB2f9+v50eOigoc5FvGTJF8pugCwaKaNaE98uf9zMBXwjtNpbvmuaH2B0+HXuuyMEbOlQ4U1M5ZVcYbowg02YfZW5cnE9JIROdI7jsiOacoMPLZdEYPR1ouQkxCRG+feESlIXkQOzLR+NhvCpc3UbPcHAoRsADcAQ0Twq0ZosQgEVY0SqvGpkAUCxkIUYRP4bZRRNi9pvaD+TwXyFseHuYzy/Kt8CWfQ5Ems6C/5y7uZyDEH0Nt8vq0dUx0XzaapPyIIoIi23+47+SrlTvrTjLhKy2wmO95OqiacS+QBH9gAFDlOZnYbrimWOixSZCwUlK+vZd7bXiPldyi0yqX1OtkfCBS/9XAtDKAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMDQtMDVUMDQ6NDQ6NDItMDM6MDD+uUN1AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTA0LTA1VDA0OjQwOjIzLTAzOjAw5hdZgAAAAABJRU5ErkJggg=="; -window.initProcedsBlockly = function(customStatementType) { +window.initProcedsBlockly = function(customStatementType, initialize = () => {}) { Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT = 'Describe el procedimiento...'; Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE = "Hacer algo"; Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE = "Definir"; Blockly.Msg.PROCEDURES_DEFNORETURN_NOPARAMS = ""; Blockly.Msg.PROCEDURES_DEFRETURN_NOPARAMS = ""; @@ -3534,11 +3534,21 @@ addParameter(this, i, name); }.bind(this)); }; } - var makeProcedureInit = function(withReturn, withStatements = true, withParameters = false, defaultName, title, comment, tooltip, helpUrl) { + var makeProcedureInit = function( + withReturn, + withStatements = true, + withParameters = false, + defaultName, + title, + comment, + tooltip, + helpUrl, + returnMsg = Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + ) { return function() { var defaultLegalName = Blockly.Procedures.findLegalName(defaultName, this); var nameField = new Blockly.FieldTextInput(defaultLegalName, Blockly.Procedures.rename); nameField.setSpellcheck(false); @@ -3562,11 +3572,11 @@ input.appendField(addParameterButton); if (withReturn) this.appendValueInput('RETURN') .setAlign(Blockly.ALIGN_RIGHT) - .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN); + .appendField(returnMsg); // if (withParametersMutator) // this.setMutator(new Blockly.Mutator(['procedures_mutatorarg'])); if ((this.workspace.options.comments || @@ -3864,11 +3874,21 @@ onchange: Blockly.Blocks['procedures_callreturn'].onchange, customContextMenu: Blockly.Blocks['procedures_callreturn'].customContextMenu, defType_: 'procedures_defreturnsimple' }; - // ------------------------------------------------------------------- + // --------------------------------------------------------------- + // [!] Calling `initialize` to support another types of procedures + // --------------------------------------------------------------- + initialize( + makeProcedureInit, + makeUpdateParams, + makeProcedureDomToMutation, + makeProcedureCustomMenu + ); + + // ------------------------------------------------------------------- // [!] Adding two flyoutCategories: PROCEDURE_CALLS and FUNCTION_CALLS // ------------------------------------------------------------------- Blockly.Procedures.procedureCallFlyoutCategory = function(workspace) { var xmlList = []; @@ -4033,13 +4053,126 @@ this.workspace_.addChangeListener(this.reflowWrapper_); }; } </script> - <script>initProcedsBlockly("Statement");</script> <script>/* global Blockly */ +// Initialize proceds-blockly creating new custom functions +initProcedsBlockly("Statement", (makeProcedureInit, makeUpdateParams, makeProcedureDomToMutation, makeProcedureCustomMenu) => { + Blockly.Blocks['DefinicionDeFuncionDeclarativa'] = { + init: makeProcedureInit( + true, true, true, + "algo", + "Definir que", + Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT, + Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP, + Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL, + "es igual a" + ), + setStatements_: Blockly.Blocks['procedures_defreturn'].setStatements_, + updateParams_: makeUpdateParams(), + mutationToDom: Blockly.Blocks['procedures_defreturn'].mutationToDom, + domToMutation: makeProcedureDomToMutation(), + decompose: Blockly.Blocks['procedures_defreturn'].decompose, + compose: Blockly.Blocks['procedures_defreturn'].compose, + getProcedureDef: Blockly.Blocks['procedures_defreturn'].getProcedureDef, + getVars: Blockly.Blocks['procedures_defreturn'].getVars, + renameVar: Blockly.Blocks['procedures_defreturn'].renameVar, + customContextMenu: makeProcedureCustomMenu(true), + callType_: 'procedures_callreturndeclarative' + }; + + Blockly.Blocks['procedures_callreturndeclarative'] = { + init: Blockly.Blocks['procedures_callreturn'].init, + getProcedureCall: Blockly.Blocks['procedures_callreturn'].getProcedureCall, + renameProcedure: Blockly.Blocks['procedures_callreturn'].renameProcedure, + setProcedureParameters_: Blockly.Blocks['procedures_callreturn'].setProcedureParameters_, + updateShape_: Blockly.Blocks['procedures_callreturn'].updateShape_, + mutationToDom: Blockly.Blocks['procedures_callreturn'].mutationToDom, + domToMutation: Blockly.Blocks['procedures_callreturn'].domToMutation, + renameVar: Blockly.Blocks['procedures_callreturn'].renameVar, + onchange: Blockly.Blocks['procedures_callreturn'].onchange, + customContextMenu: Blockly.Blocks['procedures_callreturn'].customContextMenu, + defType_: 'DefinicionDeFuncionDeclarativa' + }; + + Blockly.Blocks['DefinicionDeFuncionSimpleConParametrosDeclarativa'] = { + init: makeProcedureInit( + true, false, true, + "algo", + "Definir que", + Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT, + Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP, + Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL, + "es igual a" + ), + setStatements_: Blockly.Blocks['procedures_defreturn'].setStatements_, + updateParams_: makeUpdateParams(), + mutationToDom: Blockly.Blocks['procedures_defreturn'].mutationToDom, + domToMutation: makeProcedureDomToMutation(), + decompose: Blockly.Blocks['procedures_defreturn'].decompose, + compose: Blockly.Blocks['procedures_defreturn'].compose, + getProcedureDef: Blockly.Blocks['procedures_defreturn'].getProcedureDef, + getVars: Blockly.Blocks['procedures_defreturn'].getVars, + renameVar: Blockly.Blocks['procedures_defreturn'].renameVar, + customContextMenu: makeProcedureCustomMenu(true), + callType_: 'procedures_callreturndeclarativesimplewithparams' + }; + + Blockly.Blocks['procedures_callreturndeclarativesimplewithparams'] = { + init: Blockly.Blocks['procedures_callreturn'].init, + getProcedureCall: Blockly.Blocks['procedures_callreturn'].getProcedureCall, + renameProcedure: Blockly.Blocks['procedures_callreturn'].renameProcedure, + setProcedureParameters_: Blockly.Blocks['procedures_callreturn'].setProcedureParameters_, + updateShape_: Blockly.Blocks['procedures_callreturn'].updateShape_, + mutationToDom: Blockly.Blocks['procedures_callreturn'].mutationToDom, + domToMutation: Blockly.Blocks['procedures_callreturn'].domToMutation, + renameVar: Blockly.Blocks['procedures_callreturn'].renameVar, + onchange: Blockly.Blocks['procedures_callreturn'].onchange, + customContextMenu: Blockly.Blocks['procedures_callreturn'].customContextMenu, + defType_: 'DefinicionDeFuncionSimpleConParametrosDeclarativa' + }; + + Blockly.Blocks['DefinicionDeFuncionSimpleDeclarativa'] = { + init: makeProcedureInit( + true, false, false, + "algo", + "Definir que", + Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT, + Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP, + Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL, + "es igual a" + ), + setStatements_: Blockly.Blocks['procedures_defreturn'].setStatements_, + updateParams_: makeUpdateParams(), + mutationToDom: Blockly.Blocks['procedures_defreturn'].mutationToDom, + domToMutation: makeProcedureDomToMutation(), + decompose: Blockly.Blocks['procedures_defreturn'].decompose, + compose: Blockly.Blocks['procedures_defreturn'].compose, + getProcedureDef: Blockly.Blocks['procedures_defreturn'].getProcedureDef, + getVars: Blockly.Blocks['procedures_defreturn'].getVars, + renameVar: Blockly.Blocks['procedures_defreturn'].renameVar, + customContextMenu: makeProcedureCustomMenu(false), + callType_: 'procedures_callreturndeclarativesimple' + }; + + Blockly.Blocks['procedures_callreturndeclarativesimple'] = { + init: Blockly.Blocks['procedures_callreturn'].init, + getProcedureCall: Blockly.Blocks['procedures_callreturn'].getProcedureCall, + renameProcedure: Blockly.Blocks['procedures_callreturn'].renameProcedure, + setProcedureParameters_: Blockly.Blocks['procedures_callreturn'].setProcedureParameters_, + updateShape_: Blockly.Blocks['procedures_callreturn'].updateShape_, + mutationToDom: Blockly.Blocks['procedures_callreturn'].mutationToDom, + domToMutation: Blockly.Blocks['procedures_callreturn'].domToMutation, + renameVar: Blockly.Blocks['procedures_callreturn'].renameVar, + onchange: Blockly.Blocks['procedures_callreturn'].onchange, + customContextMenu: Blockly.Blocks['procedures_callreturn'].customContextMenu, + defType_: 'DefinicionDeFuncionSimpleDeclarativa' + }; +}); + Blockly.CUSTOM_COLORS = {"globalHsvSaturation":0.45,"globalHsvValue":0.65,"primitiveCommand":"#1d3c99","assignation":"#051d66","controlStructure":"#0f2b80","literalExpression":"#1d992c","primitiveExpression":"#1d992c","operator":"#0f801c","program":"#8d1bb3","interactiveProgram":"#6e158c","interactiveBinding":"#a11fcc","procedure":"#935ba6","function":"#745380","primitiveProcedure":"#2e4fb3","primitiveFunction":"#2eb33e","procedure_call":"#355bcc","function_call":"#35cc47","variable":"#056610","parameter":"#056610","complete":"#ff0000","H":{"commands":225,"expressions":127,"definitions":285},"S":{"assignation":95,"variable":95,"parameter":95,"primitiveCommand":81,"literalExpression":81,"primitiveExpression":81,"controlStructure":88,"operator":88,"procedure_call":74,"function_call":74,"primitiveProcedure":74,"primitiveFunction":74,"program":85,"interactiveProgram":85,"interactiveBinding":85,"procedure":45,"function":35,"complete":99},"V":{"assignation":40,"variable":40,"parameter":40,"primitiveCommand":60,"literalExpression":60,"primitiveExpression":60,"controlStructure":50,"operator":50,"procedure_call":80,"function_call":80,"primitiveProcedure":70,"primitiveFunction":70,"program":70,"interactiveProgram":55,"interactiveBinding":80,"procedure":65,"function":50,"complete":99}}; Blockly.AVAILABLE_ICONS = ["bool-false.svg","bool-true.svg","clean.png","color-azul.svg","color-negro.svg","color-rojo.svg","color-verde.svg","direccion-este.svg","direccion-norte.svg","direccion-oeste.svg","direccion-sur.svg","hand.png","minus.png","plus.png"]; const EMPTY_GIF = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; const getOptions = (block) => { @@ -5896,10 +6029,13 @@ }; Blockly.GobstonesLanguage.procedures_defnoreturnnoparams = Blockly.GobstonesLanguage.procedures_defnoreturn; Blockly.GobstonesLanguage.procedures_defreturnsimplewithparams = Blockly.GobstonesLanguage.procedures_defreturn; Blockly.GobstonesLanguage.procedures_defreturnsimple = Blockly.GobstonesLanguage.procedures_defreturn; +Blockly.GobstonesLanguage.DefinicionDeFuncionDeclarativa = Blockly.GobstonesLanguage.procedures_defreturn; +Blockly.GobstonesLanguage.DefinicionDeFuncionSimpleConParametrosDeclarativa = Blockly.GobstonesLanguage.procedures_defreturn; +Blockly.GobstonesLanguage.DefinicionDeFuncionSimpleDeclarativa = Blockly.GobstonesLanguage.procedures_defreturn; var procedureCall = function(block, capitalizeFirst, newLine) { var procName = formatCallName(block.getFieldValue('NAME'),capitalizeFirst); var args = []; for (var i = 0; i < block.arguments_.length; i++) { @@ -5918,9 +6054,12 @@ }; Blockly.GobstonesLanguage.procedures_callnoreturnnoparams = Blockly.GobstonesLanguage.procedures_callnoreturn; Blockly.GobstonesLanguage.procedures_callreturnsimplewithparams = Blockly.GobstonesLanguage.procedures_callreturn; Blockly.GobstonesLanguage.procedures_callreturnsimple = Blockly.GobstonesLanguage.procedures_callreturn; +Blockly.GobstonesLanguage.procedures_callreturndeclarative = Blockly.GobstonesLanguage.procedures_callreturn; +Blockly.GobstonesLanguage.procedures_callreturndeclarativesimplewithparams = Blockly.GobstonesLanguage.procedures_callreturn; +Blockly.GobstonesLanguage.procedures_callreturndeclarativesimple = Blockly.GobstonesLanguage.procedures_callreturn; Blockly.GobstonesLanguage.variables_get = function (block) { var code = formatCallName(block.getFieldValue('VAR'),false,Blockly.VARIABLE_CATEGORY_NAME); return [code, Blockly.GobstonesLanguage.ORDER_ATOMIC]; }; \ No newline at end of file