app/assets/htmls/gs-element-blockly.html in gobstones-blockly-0.11.2 vs app/assets/htmls/gs-element-blockly.html in gobstones-blockly-0.12.0

- old
+ new

@@ -85,10 +85,12 @@ </category> <category name="Definiciones"> <category name="Programas"> <block type="Program"></block> <block type="InteractiveProgram"></block> + </category> + <category name="Asociaciones"> <block type="InteractiveLetterBinding"></block> <block type="InteractiveNumberBinding"></block> <block type="InteractiveKeyBinding"></block> </category> <category name="Procedimientos"> @@ -3308,11 +3310,11 @@ */ FUNCTION_TYPES: ['procedures_defnoreturn', 'procedures_defreturn'] };</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 WAND = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB41BMVEUAAACrhwmsiArFmQTtxjftxjjOnwThrQrirQvOmQToxETpxkfUnwS2hQLYohPYoxW/igOXagHKjgPNkQXUnxzfsjngtDzVoR/NkgbLjwOkcwHIiwbov1PJjQnAggPiskDkulXBgwO8fATnuEjpwVq9fgeCUwC3eAW4eAOLWQCQVwDGjBLIiQKWWwC9fgHBhAFlOgBhNQDCggHHigFwPQBoNQDIhgHDqADBqQDOkAF4PgBjLwDIhwLFjAGUUgCJRACIQgCSTwDCiwHNkAJ2OABSJgCcWgqPQgCCOgB8OACPQgCcWgthLQD06Xj16nn47YT14Hv35YD14Xzx1G744Hv44Xvy1m/00nX31nj32Hb323b43Xb43nb43Hb32nb313f103bpwlz2zG/30W/31W/42W/422/43W/43G/42m/412/302/3z2/3zmj402j42Gj43Gj53mj53Wj42mj41mj30WjswEr401/52V/53V/54F/64V/531/522H4zErtsir4yD350j352Tn63TL63Cj61Bn4xQL3twD3tgD4xgD61QD73wD74QD72wD5zgD3vgD3uAD5ywD73AD86wD97wD85AD61AD4wgD2tQD5yQD01gDz3AD60wD4vwDsrgHqswH////vUbxMAAAATXRSTlMABAQHwMIIen0c8fIeCa6yCgI5e7Hp67WAPwOD/otJ/PxLev7+fAKSlQIG3OEIy9IBA+HpBAj1/v77DAr58ZMtKo3u/Q4BcGcTEGJzAcqMNfMAAAABYktHRKBe076gAAAAB3RJTUUH4QwFFBQHSAc27gAAANRJREFUGNNjYIAARiYGFMDMwsqGIsDu68eBzOfk8vfn5kHwefkCAgOD+AXAHEEhYRHR4JDQ0JAwMXEJSSkGaZnwiMio6JiY6Ni4+IREWQY5+aTklNS09PSMzKzsHAVFBgYl5dy8/ILCwqLiklIVVaAhaupl5RWVVdU1tXX1GpogY7W0Gxqbmlta29p1dCG26nV0dnX39Pb16xuA+YZGEyZOmjxl6rTpxiZgAVOzGTNnmVvMnjPX0gosYG0zz9bO3sHRab6zC1jA1c3dA0R7enn7MDAAABs9NIkRbjxSAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEyLTA1VDIwOjIwOjA3LTA1OjAw6QjR4wAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMi0wNVQyMDoyMDowNy0wNTowMJhVaV8AAAAASUVORK5CYII="; +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) { Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT = 'Describe el procedimiento...'; Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE = "Hacer algo"; Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE = "Definir"; @@ -3442,11 +3444,11 @@ block.updateShape_(); } } var createCallButton = new Blockly.FieldImage( - WAND, + HAND, 16, 16, Blockly.Msg.VARIABLES_SET_CREATE_GET.replace('%1', name), function() { createParameterCaller(self, self.arguments_[i])(); @@ -3585,28 +3587,31 @@ this.statementConnection_ = null; // if (!withParametersMutator) this.updateParams_(); // [!] adding create call button - // TODO: Hacer esto - // var xmlMutation = goog.dom.createDom('mutation'); - // xmlMutation.setAttribute('name', name); - // for (var i = 0; i < self.arguments_.length; i++) { - // var xmlArg = goog.dom.createDom('arg'); - // xmlArg.setAttribute('name', self.arguments_[i]); - // xmlMutation.appendChild(xmlArg); - // } - // var xmlBlock = goog.dom.createDom('block', null, xmlMutation); - // xmlBlock.setAttribute('type', self.callType_); - // var createCallButton = new Blockly.FieldImage( - // WAND, - // 16, - // 16, - // "", - // Blockly.ContextMenu.callbackFactory(self, xmlBlock) - // ); - // input.appendField(createCallButton); + var createCallButton = new Blockly.FieldImage( + HAND, + 16, + 16, + "", + function() { + var name = self.getFieldValue('NAME'); + var xmlMutation = goog.dom.createDom('mutation'); + xmlMutation.setAttribute('name', name); + for (var i = 0; i < self.arguments_.length; i++) { + var xmlArg = goog.dom.createDom('arg'); + xmlArg.setAttribute('name', self.arguments_[i]); + xmlMutation.appendChild(xmlArg); + } + var xmlBlock = goog.dom.createDom('block', null, xmlMutation); + xmlBlock.setAttribute('type', self.callType_); + + Blockly.ContextMenu.callbackFactory(self, xmlBlock)(); + } + ); + input.appendField(createCallButton); }; }; // ----------------------- // [!] Custom context menu @@ -4028,12 +4033,14 @@ }; } </script> <script>initProcedsBlockly("Statement");</script> - <script>var MINUS = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAQAAAD2e2DtAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAHdElNRQfhDAUCCi+xWH4JAAABcUlEQVR42u3c7ZGCMBSG0etuYcTKls7AyrSEVWd4+bjnUECMeSbhD6kCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBzu4XHm2rUvPekD2yutR57/4itTLXU0/Pvs9SUW5TcDrDUyE3r9Na6ZwZKBWD5PxVKIBPAVGtknGsZibeBTADPyCjXE1idn8A0/gJjXFPgn0sEwIEljgAHwPc2Xx87QHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNDcb2SUsfc0T2re/utAO0BzPg49sot8HOoI+M5IDJIJ4OF+gI+F7gpyRcwxxa6Iyb0E3mvYB96y1kgtv2vijubS18QBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWXq7xrTQhKAi3AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEyLTA1VDAyOjEwOjQ3LTA1OjAwdZLI/gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMi0wNVQwMjoxMDo0Ny0wNTowMATPcEIAAAAASUVORK5CYII="; + <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=="; +var CLEAN = "data:image/png;base64,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"; /* global Blockly */ Blockly.CUSTOM_COLORS = { globalHsvSaturation: Blockly.HSV_SATURATION, @@ -4231,11 +4238,11 @@ [ 'SHIFT', 'SHIFT' ], [ 'CTRL', 'CTRL' ], [ 'ALT', 'ALT' ] ]; -const getModifiersInput = (block) => block.inputList[0]; +const getModifiersInput = (block) => block.inputList[1]; const getModifierFields = (block) => getModifiersInput(block).fieldRow.slice(2); const getModifierDropdownFields = (block) => getModifierFields(block).filter(it => it.constructor === Blockly.FieldDropdown); const getModifierValues = (block) => getModifierDropdownFields(block).map(it => it.getValue()); const getAvailableModifiers = (block) => { const currentModifiers = getModifierValues(block); @@ -4259,30 +4266,59 @@ createInteractiveBinding = (name, keys) => { return { init: function () { this.jsonInit({ - message0: "%1 %2", + message0: "%1 %2 %3 %4", type: "InteractiveBinding", previousStatement: "InteractiveBinding", nextStatement: "InteractiveBinding", args0: [ { "type": "field_label", "text": "Al apretar " + name }, + { "type": "input_dummy" }, + { + "type": "field_label", + "text": "➣" + }, { type: "field_dropdown", name: "InteractiveBindingDropdownKey", options: keys.map(it => [it.name, it.code]), } ], colour: Blockly.CUSTOM_COLORS.InteractiveBinding || Blockly.CUSTOM_COLORS.interactiveBinding, tooltip: "Escoger una entrada", }); - this.appendStatementInput('block').setCheck(["Statement"]); + this.appendStatementInput('block').setCheck(["Statement"]); + + const self = this; + const input = this.inputList[0]; + input.appendField(new Blockly.FieldImage( + PLUS, + 16, + 16, + "Agregar modificador", + function() { + const modifiersCount = getModifierFields(self).length / 2; + if (modifiersCount >= modifiers.length) return; + + self._addModifier(); + } + )); + input.appendField(new Blockly.FieldImage( + CLEAN, + 16, + 16, + "Limpiar modificadores", + function() { + self._cleanModifiers(); + } + )); }, customContextMenu: function(options) { const modifiersCount = getModifierFields(this).length / 2; @@ -5276,16 +5312,16 @@ if (Blockly.GobstonesLanguage.variableDB_) { Blockly.GobstonesLanguage.variableDB_.reset(); } else { Blockly.GobstonesLanguage.variableDB_ = new Blockly.Names(Blockly.GobstonesLanguage.RESERVED_WORDS_); - + // Gobstones lets ñáéíóú, so Blockly's safeName should be rewritten. // In the process, makes everything CamelCase which is Gobstones' default. Blockly.GobstonesLanguage.variableDB_.safeName_ = function(name) { if (!name) return 'unnamed'; - + //Get rid of unwanted chars var safe = name.replace(/[^\wáéíóúÁÉÍÓÚñÑ ]/g, '') //Escape initial numbers if ('0123456789'.indexOf(safe[0]) != -1) safe = 'my ' + safe; @@ -5293,11 +5329,11 @@ // Join spaces capitalizing in the process: ¡Gobstones is CamelCase! // Leave first char as user wanted, for now... safe = safe.split(' ').map((word, i) => !word | i == 0 ? word : word[0].toUpperCase() + word.slice(1) ).join(''); - + return safe; }; } }; @@ -5388,11 +5424,11 @@ return codigo; }; Blockly.GobstonesLanguage.InteractiveProgram = function (block) { let program = Blockly.GobstonesLanguage.statementToCode(block, 'interactiveprogram'); - + let init = ''; if (block.$init) init = ` INIT -> {\n${Blockly.GobstonesLanguage.statementToCode(block, 'init')} }\n`; let timeout = ''; @@ -5405,11 +5441,11 @@ Blockly.GobstonesLanguage.InteractiveLetterBinding = function (block) { let key = block.getFieldValue('InteractiveBindingDropdownKey'); const order = ["CTRL", "ALT", "SHIFT"]; - const modifier = block.inputList[0] + const modifier = block.inputList[1] .fieldRow .slice(2) .filter(it => it.constructor === Blockly.FieldDropdown) .map(it => order.indexOf(it.getValue())) .sort() @@ -5488,11 +5524,11 @@ }; var makeParameterList = function (block) { return block.arguments_ .map(arg => formatCallName(arg, false, Blockly.VARIABLE_CATEGORY_NAME)) - .join(', '); + .join(', '); }; Blockly.GobstonesLanguage.procedures_defnoreturn = function (block) { var name = formatCallName(block.getFieldValue('NAME'),true); var body = Blockly.GobstonesLanguage.statementToCode(block, 'STACK'); @@ -5551,11 +5587,11 @@ return [code, Blockly.GobstonesLanguage.ORDER_ATOMIC]; }; Blockly.GobstonesLanguage.Asignacion = function(block) { var varValue = Blockly.GobstonesLanguage.valueToCode(block, 'varValue', Blockly.GobstonesLanguage.ORDER_ASSIGNMENT); - var code = formatCallName(block.getFieldValue('varName'),false,Blockly.VARIABLE_CATEGORY_NAME) + + var code = formatCallName(block.getFieldValue('varName'),false,Blockly.VARIABLE_CATEGORY_NAME) + ' := ' + varValue + '\n'; return code; }; </script> <script>Blockly.GobstonesLanguage.blockIDAliases = { @@ -5734,11 +5770,11 @@ '.blocklyPreconditionError>.blocklyPath {', 'stroke: #f88;', 'stroke-width: 3px;', '}', ];</script> - + <script> const BLOCKLY_PRIMITIVE_PROCEDURES = "Procedimientos primitivos"; const BLOCKLY_PRIMITIVE_FUNCTIONS = "Funciones primitivas"; Polymer({ @@ -6110,11 +6146,11 @@ // Bloque Blockly.Blocks[name] = { init: function () { let argsIndex = 1; this.setColour(Blockly.CUSTOM_COLORS.primitiveProcedure); - + if (icon) { this.appendDummyInput().appendField(new Blockly.FieldImage( icon, 16, 16, @@ -6268,11 +6304,11 @@ const interactiveProgram = interactiveProgramXmls[0] && block(interactiveProgramXmls[0]); if (program && interactiveProgram) { program.setDeletable(true); interactiveProgram.setDeletable(true); - + const important = program.$timestamp > interactiveProgram.$timestamp ? program : interactiveProgram; const unimportant = program.$timestamp > interactiveProgram.$timestamp ? interactiveProgram : program; const twoActivePrograms = !program.disabled && !interactiveProgram.disabled; const twoDisabledPrograms = program.disabled && interactiveProgram.disabled; @@ -6294,11 +6330,11 @@ const blocks = this.workspace.getAllBlocks(); for (block of blocks) { if (block.type === "variables_get" && block.$parent) { const parentBlock = this.workspace.getBlockById(block.$parent); const varField = block.getField("VAR"); - + if ( parentBlock && ( !parentBlock.type.startsWith("procedures") || parentBlock.arguments_.some(it => it === varField.getValue()) @@ -6513,11 +6549,11 @@ // Element Behavior /** * Generate gobstones code from the blocks in the workspace. * It removes all highlighting and errors if already present. - * + * * There is an additional option which if provided adds pragma BEGIN/END REGION * to the output. * * `element.generateCode( {withRegions: true, clearErrors: false} );` * @return {string} The code. */ @@ -6545,16 +6581,16 @@ this.workspace.highlightBlock(blockId) }, /** * Highlight a given block, telling the user it has an error - * + * * `blockId` is the block ID where the error should appear - * + * * `errorKind` is either a string with the description or an object with a kind of error. * Next are examples with the existent error kinds. - * + * * Examples: * * `element.showBlockError('a1s2', 'Hey, here is an error')` * * `element.showBlockError('a1s2', { kind: 'INCOMPLETE_ERROR'} )` * * `element.showBlockError('a1s2', { kind: 'TYPE_ERROR', expectedType:'string', actualType: 'boolean' })` * * `element.showBlockError('a1s2', { kind: 'PRECONDITION_ERROR', description: "Susan can't move right" })` @@ -6563,13 +6599,13 @@ this.workspace.showBlockError(blockId, errorKind); }, testColors(colors) { Blockly.CUSTOM_COLORS = colors; - Blockly.HSV_SATURATION = colors.globalHsvSaturation; + Blockly.HSV_SATURATION = colors.globalHsvSaturation; Blockly.HSV_VALUE = colors.globalHsvValue; Blockly.Blocks.procedures.HUE = colors.procedure; - + var xmlDom = Blockly.Xml.workspaceToDom(this.workspace); const xml = Blockly.Xml.domToText(xmlDom); this.resetWorkspace(); setTimeout(() => { \ No newline at end of file