From 2c0a5ccb0c8be6523df4eb4d2045d50310289144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Mon, 10 Jun 2024 17:14:40 -0300 Subject: [PATCH 01/21] blockly 11 --- package-lock.json | 317 ++++++++++++++---- package.json | 4 +- src/components/blockly/PBBlocklyWorkspace.tsx | 2 +- src/components/blockly/blockly.ts | 4 +- src/components/blockly/utils.ts | 2 +- .../challengeView/ChallengeView.tsx | 2 +- src/theme/ThemeContext.tsx | 5 +- 7 files changed, 257 insertions(+), 79 deletions(-) diff --git a/package-lock.json b/package-lock.json index a5e5e6bd..0ac932b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "babel-plugin-transform-import-meta": "^2.2.1", "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", - "blockly": "^10.4.3", + "blockly": "^11.0.0", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -4964,6 +4964,7 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -5891,6 +5892,7 @@ }, "node_modules/agent-base": { "version": "6.0.2", + "devOptional": true, "license": "MIT", "dependencies": { "debug": "4" @@ -6726,11 +6728,14 @@ } }, "node_modules/blockly": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.4.3.tgz", - "integrity": "sha512-+opfBmQnSiv7vTiY/TkDEBOslxUyfj8luS3S+qs1NnQKjInC+Waf2l9cNsMh9J8BMkmiCIT+Ed/3mmjIaL9wug==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.1.0.tgz", + "integrity": "sha512-q/e3denY0RQcfqJVsfGsBRA3QlB4Hi6fgb8Dp+YeGnWlPgTm7UbPw8o1OSsii6YBlXsfrikTr7IQF00DIIbzsw==", "dependencies": { - "jsdom": "22.1.0" + "jsdom": "23.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/blockly-package": { @@ -7195,9 +7200,21 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, + "node_modules/blockly/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/blockly/node_modules/cssstyle": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", "dependencies": { "rrweb-cssom": "^0.6.0" }, @@ -7206,50 +7223,84 @@ } }, "node_modules/blockly/node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/blockly/node_modules/html-encoding-sniffer": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/blockly/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/blockly/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/blockly/node_modules/jsdom": { - "version": "22.1.0", - "license": "MIT", + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz", + "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==", "dependencies": { - "abab": "^2.0.6", "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", + "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "domexception": "^4.0.0", "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", + "nwsapi": "^2.2.7", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "ws": "^8.13.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.14.2", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -7258,24 +7309,64 @@ } }, "node_modules/blockly/node_modules/tr46": { - "version": "4.1.1", - "license": "MIT", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dependencies": { - "punycode": "^2.3.0" + "punycode": "^2.3.1" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/blockly/node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/blockly/node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/blockly/node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "engines": { + "node": ">=18" } }, "node_modules/blockly/node_modules/whatwg-url": { - "version": "12.0.1", - "license": "MIT", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", "dependencies": { - "tr46": "^4.1.1", + "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/blockly/node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "engines": { + "node": ">=18" } }, "node_modules/bluebird": { @@ -10375,6 +10466,7 @@ }, "node_modules/domexception": { "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { "webidl-conversions": "^7.0.0" @@ -14140,6 +14232,7 @@ }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" @@ -14275,6 +14368,7 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { "@tootallnate/once": "2", @@ -14334,6 +14428,7 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", + "devOptional": true, "license": "MIT", "dependencies": { "agent-base": "6", @@ -22134,8 +22229,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -26860,6 +26956,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -27239,6 +27336,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, @@ -27255,6 +27353,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, "engines": { "node": ">=12" } @@ -27841,6 +27940,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, "engines": { "node": ">=12" } @@ -30775,7 +30875,8 @@ } }, "@tootallnate/once": { - "version": "2.0.0" + "version": "2.0.0", + "dev": true }, "@trysound/sax": { "version": "0.2.0" @@ -31447,6 +31548,7 @@ }, "agent-base": { "version": "6.0.2", + "devOptional": true, "requires": { "debug": "4" } @@ -31974,67 +32076,134 @@ } }, "blockly": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.4.3.tgz", - "integrity": "sha512-+opfBmQnSiv7vTiY/TkDEBOslxUyfj8luS3S+qs1NnQKjInC+Waf2l9cNsMh9J8BMkmiCIT+Ed/3mmjIaL9wug==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.1.0.tgz", + "integrity": "sha512-q/e3denY0RQcfqJVsfGsBRA3QlB4Hi6fgb8Dp+YeGnWlPgTm7UbPw8o1OSsii6YBlXsfrikTr7IQF00DIIbzsw==", "requires": { - "jsdom": "22.1.0" + "jsdom": "23.0.0" }, "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, "cssstyle": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", "requires": { "rrweb-cssom": "^0.6.0" } }, "data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "requires": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + } + }, + "html-encoding-sniffer": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "requires": { + "whatwg-encoding": "^3.1.1" + } + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "requires": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" } }, "jsdom": { - "version": "22.1.0", + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz", + "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==", "requires": { - "abab": "^2.0.6", "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", + "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "domexception": "^4.0.0", "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", + "nwsapi": "^2.2.7", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "ws": "^8.13.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.14.2", + "xml-name-validator": "^5.0.0" } }, "tr46": { - "version": "4.1.1", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "requires": { + "punycode": "^2.3.1" + } + }, + "w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "requires": { + "xml-name-validator": "^5.0.0" + } + }, + "whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "requires": { - "punycode": "^2.3.0" + "iconv-lite": "0.6.3" } }, + "whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==" + }, "whatwg-url": { - "version": "12.0.1", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", "requires": { - "tr46": "^4.1.1", + "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" } + }, + "xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==" } } }, @@ -34402,6 +34571,7 @@ }, "domexception": { "version": "4.0.0", + "dev": true, "requires": { "webidl-conversions": "^7.0.0" } @@ -36964,6 +37134,7 @@ }, "html-encoding-sniffer": { "version": "3.0.0", + "dev": true, "requires": { "whatwg-encoding": "^2.0.0" } @@ -37051,6 +37222,7 @@ }, "http-proxy-agent": { "version": "5.0.0", + "dev": true, "requires": { "@tootallnate/once": "2", "agent-base": "6", @@ -37087,6 +37259,7 @@ }, "https-proxy-agent": { "version": "5.0.1", + "devOptional": true, "requires": { "agent-base": "6", "debug": "4" @@ -41820,7 +41993,9 @@ } }, "punycode": { - "version": "2.3.0" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "pupa": { "version": "3.1.0", @@ -45133,6 +45308,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, "requires": { "xml-name-validator": "^4.0.0" } @@ -45410,6 +45586,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, "requires": { "iconv-lite": "0.6.3" } @@ -45422,7 +45599,8 @@ "whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true }, "whatwg-url": { "version": "5.0.0", @@ -45896,7 +46074,8 @@ "xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true }, "xmlbuilder": { "version": "15.1.1", diff --git a/package.json b/package.json index c9e84df5..5380c6d0 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "babel-plugin-transform-import-meta": "^2.2.1", "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", - "blockly": "^10.4.3", + "blockly": "^11.0.0", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -262,4 +262,4 @@ "react-app" ] } -} \ No newline at end of file +} diff --git a/src/components/blockly/PBBlocklyWorkspace.tsx b/src/components/blockly/PBBlocklyWorkspace.tsx index 284b2a4f..b4c1a08b 100644 --- a/src/components/blockly/PBBlocklyWorkspace.tsx +++ b/src/components/blockly/PBBlocklyWorkspace.tsx @@ -4,7 +4,7 @@ import { Toolbox, categorizedToolbox, setupBlockly, setupBlocklyBlocks, setXml, import { PBCard } from "../PBCard"; import { Box, PaperProps, Typography } from "@mui/material"; import { useState } from "react"; -import Blockly from "blockly/core" +import * as Blockly from 'blockly/core' import { useThemeContext } from "../../theme/ThemeContext"; // inject options https://developers.google.com/blockly/reference/js/blockly.blocklyoptions_interface.md diff --git a/src/components/blockly/blockly.ts b/src/components/blockly/blockly.ts index 6d3120e6..f1e8fd43 100644 --- a/src/components/blockly/blockly.ts +++ b/src/components/blockly/blockly.ts @@ -1,6 +1,6 @@ import { BlockType, categories } from "./blocks" -import Es from 'blockly/msg/es'; -import Blockly from "blockly/core" +import * as Es from 'blockly/msg/es'; +import * as Blockly from 'blockly/core' import { javascriptGenerator, Order } from 'blockly/javascript' import { enableUnwantedProcedureBlocks, disableUnwantedProcedureBlocks, optionType, createCommonBlocklyBlocks, validateRequiredOptions } from "./utils"; import 'blockly/blocks'; diff --git a/src/components/blockly/utils.ts b/src/components/blockly/utils.ts index f1d0f489..9c54dbd9 100644 --- a/src/components/blockly/utils.ts +++ b/src/components/blockly/utils.ts @@ -1,4 +1,4 @@ -import Blockly from "blockly/core" +import * as Blockly from 'blockly/core' export type optionType = { 'comportamiento'?: string diff --git a/src/components/challengeView/ChallengeView.tsx b/src/components/challengeView/ChallengeView.tsx index c4c2e7d4..5a57bdcb 100644 --- a/src/components/challengeView/ChallengeView.tsx +++ b/src/components/challengeView/ChallengeView.tsx @@ -1,6 +1,6 @@ import { useParams } from "react-router-dom" import { Challenge, PathToChallenge, currentIdFor, getPathToChallenge } from "../../staticData/challenges"; -import { useMediaQuery, PaperProps, Stack } from "@mui/material"; +import { PaperProps, Stack } from "@mui/material"; import { StatementDescription } from "./StatementDescription"; import { EditableBlocklyWorkspace } from "./EditableBlocklyWorkspace"; import { InfoButton, SceneButtons, SceneButtonsVertical } from "./SceneButtons/SceneButtons"; diff --git a/src/theme/ThemeContext.tsx b/src/theme/ThemeContext.tsx index af4d7922..e5ff5c94 100644 --- a/src/theme/ThemeContext.tsx +++ b/src/theme/ThemeContext.tsx @@ -3,8 +3,7 @@ import { createContext, FC, PropsWithChildren, useContext, useEffect, useMemo, u import { getDesignTokens } from "./theme"; import { LocalStorage } from "../localStorage"; import { Ember } from "../emberCommunication"; -import Blockly, { Theme as BlocklyTheme } from 'blockly/core' - +import * as Blockly from 'blockly/core' const BlocklyClassicTheme = Blockly.Theme.defineTheme('classicBlockly', { base: Blockly.Themes.Classic, @@ -43,7 +42,7 @@ type ThemeContextType = { setSimpleReadModeEnabled: (mode: boolean) => void; theme: Theme; isSmallScreen: boolean; - blocklyTheme: BlocklyTheme; + blocklyTheme: Blockly.Theme; }; export const ThemeContext = createContext({ From 8013920224d7fa82947e6fdaebb9251c12321d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 19 Jun 2024 22:46:07 -0300 Subject: [PATCH 02/21] procedure def no return (without behaviour) --- package-lock.json | 315 ++++++----------------- package.json | 2 +- src/components/blockly/blockly.ts | 2 + src/components/blockly/procedsBlockly.ts | 84 ++++++ 4 files changed, 164 insertions(+), 239 deletions(-) create mode 100644 src/components/blockly/procedsBlockly.ts diff --git a/package-lock.json b/package-lock.json index 0ac932b7..7d639097 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "babel-plugin-transform-import-meta": "^2.2.1", "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", - "blockly": "^11.0.0", + "blockly": "^10.4.3", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -4964,7 +4964,6 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -5892,7 +5891,6 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "devOptional": true, "license": "MIT", "dependencies": { "debug": "4" @@ -6728,14 +6726,11 @@ } }, "node_modules/blockly": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.1.0.tgz", - "integrity": "sha512-q/e3denY0RQcfqJVsfGsBRA3QlB4Hi6fgb8Dp+YeGnWlPgTm7UbPw8o1OSsii6YBlXsfrikTr7IQF00DIIbzsw==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.4.3.tgz", + "integrity": "sha512-+opfBmQnSiv7vTiY/TkDEBOslxUyfj8luS3S+qs1NnQKjInC+Waf2l9cNsMh9J8BMkmiCIT+Ed/3mmjIaL9wug==", "dependencies": { - "jsdom": "23.0.0" - }, - "engines": { - "node": ">=18" + "jsdom": "22.1.0" } }, "node_modules/blockly-package": { @@ -7200,17 +7195,6 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, - "node_modules/blockly/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/blockly/node_modules/cssstyle": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", @@ -7223,84 +7207,52 @@ } }, "node_modules/blockly/node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/blockly/node_modules/html-encoding-sniffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/blockly/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/blockly/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" }, "engines": { - "node": ">= 14" + "node": ">=14" } }, "node_modules/blockly/node_modules/jsdom": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz", - "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", "dependencies": { + "abab": "^2.0.6", "cssstyle": "^3.0.0", - "data-urls": "^5.0.0", + "data-urls": "^4.0.0", "decimal.js": "^10.4.3", + "domexception": "^4.0.0", "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", + "nwsapi": "^2.2.4", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.14.2", - "xml-name-validator": "^5.0.0" + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=16" }, "peerDependencies": { - "canvas": "^3.0.0" + "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { @@ -7309,64 +7261,26 @@ } }, "node_modules/blockly/node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/blockly/node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/blockly/node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dependencies": { - "iconv-lite": "0.6.3" + "punycode": "^2.3.0" }, "engines": { - "node": ">=18" - } - }, - "node_modules/blockly/node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "engines": { - "node": ">=18" + "node": ">=14" } }, "node_modules/blockly/node_modules/whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", "dependencies": { - "tr46": "^5.0.0", + "tr46": "^4.1.1", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=18" - } - }, - "node_modules/blockly/node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "engines": { - "node": ">=18" + "node": ">=14" } }, "node_modules/bluebird": { @@ -10466,7 +10380,6 @@ }, "node_modules/domexception": { "version": "4.0.0", - "dev": true, "license": "MIT", "dependencies": { "webidl-conversions": "^7.0.0" @@ -14232,7 +14145,6 @@ }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", - "dev": true, "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" @@ -14368,7 +14280,6 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", - "dev": true, "license": "MIT", "dependencies": { "@tootallnate/once": "2", @@ -14428,7 +14339,6 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "devOptional": true, "license": "MIT", "dependencies": { "agent-base": "6", @@ -26956,7 +26866,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -27336,7 +27245,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, @@ -27353,7 +27261,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, "engines": { "node": ">=12" } @@ -27940,7 +27847,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, "engines": { "node": ">=12" } @@ -30875,8 +30781,7 @@ } }, "@tootallnate/once": { - "version": "2.0.0", - "dev": true + "version": "2.0.0" }, "@trysound/sax": { "version": "0.2.0" @@ -31548,7 +31453,6 @@ }, "agent-base": { "version": "6.0.2", - "devOptional": true, "requires": { "debug": "4" } @@ -32076,21 +31980,13 @@ } }, "blockly": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.1.0.tgz", - "integrity": "sha512-q/e3denY0RQcfqJVsfGsBRA3QlB4Hi6fgb8Dp+YeGnWlPgTm7UbPw8o1OSsii6YBlXsfrikTr7IQF00DIIbzsw==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-10.4.3.tgz", + "integrity": "sha512-+opfBmQnSiv7vTiY/TkDEBOslxUyfj8luS3S+qs1NnQKjInC+Waf2l9cNsMh9J8BMkmiCIT+Ed/3mmjIaL9wug==", "requires": { - "jsdom": "23.0.0" + "jsdom": "22.1.0" }, "dependencies": { - "agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "requires": { - "debug": "^4.3.4" - } - }, "cssstyle": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", @@ -32100,110 +31996,61 @@ } }, "data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "requires": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - } - }, - "html-encoding-sniffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", "requires": { - "whatwg-encoding": "^3.1.1" - } - }, - "http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - }, - "https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" } }, "jsdom": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz", - "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", "requires": { + "abab": "^2.0.6", "cssstyle": "^3.0.0", - "data-urls": "^5.0.0", + "data-urls": "^4.0.0", "decimal.js": "^10.4.3", + "domexception": "^4.0.0", "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", + "nwsapi": "^2.2.4", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.14.2", - "xml-name-validator": "^5.0.0" + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" } }, "tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "requires": { - "punycode": "^2.3.1" - } - }, - "w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "requires": { - "xml-name-validator": "^5.0.0" - } - }, - "whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "requires": { - "iconv-lite": "0.6.3" + "punycode": "^2.3.0" } }, - "whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==" - }, "whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", "requires": { - "tr46": "^5.0.0", + "tr46": "^4.1.1", "webidl-conversions": "^7.0.0" } - }, - "xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==" } } }, @@ -34571,7 +34418,6 @@ }, "domexception": { "version": "4.0.0", - "dev": true, "requires": { "webidl-conversions": "^7.0.0" } @@ -37134,7 +36980,6 @@ }, "html-encoding-sniffer": { "version": "3.0.0", - "dev": true, "requires": { "whatwg-encoding": "^2.0.0" } @@ -37222,7 +37067,6 @@ }, "http-proxy-agent": { "version": "5.0.0", - "dev": true, "requires": { "@tootallnate/once": "2", "agent-base": "6", @@ -37259,7 +37103,6 @@ }, "https-proxy-agent": { "version": "5.0.1", - "devOptional": true, "requires": { "agent-base": "6", "debug": "4" @@ -45308,7 +45151,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, "requires": { "xml-name-validator": "^4.0.0" } @@ -45586,7 +45428,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, "requires": { "iconv-lite": "0.6.3" } @@ -45599,8 +45440,7 @@ "whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" }, "whatwg-url": { "version": "5.0.0", @@ -46074,8 +45914,7 @@ "xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" }, "xmlbuilder": { "version": "15.1.1", diff --git a/package.json b/package.json index 5380c6d0..17e301a8 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "babel-plugin-transform-import-meta": "^2.2.1", "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", - "blockly": "^11.0.0", + "blockly": "^10.4.3", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", diff --git a/src/components/blockly/blockly.ts b/src/components/blockly/blockly.ts index f1e8fd43..e6c0662e 100644 --- a/src/components/blockly/blockly.ts +++ b/src/components/blockly/blockly.ts @@ -4,6 +4,7 @@ import * as Blockly from 'blockly/core' import { javascriptGenerator, Order } from 'blockly/javascript' import { enableUnwantedProcedureBlocks, disableUnwantedProcedureBlocks, optionType, createCommonBlocklyBlocks, validateRequiredOptions } from "./utils"; import 'blockly/blocks'; +import { ProcedsBlocklyInit } from "./procedsBlockly"; Blockly.setLocale(Es); // TODO: this needs to be taken from chosen intl @@ -1348,6 +1349,7 @@ const createOthersBlocks = (t: (key: string) => string) => { categoryId: 'myprocedures', }; + ProcedsBlocklyInit() Blockly.Blocks['Procedimiento'] = { init: Blockly.Blocks['procedures_defnoreturn'].init, setStatements_: Blockly.Blocks['procedures_defnoreturn'].setStatements_, diff --git a/src/components/blockly/procedsBlockly.ts b/src/components/blockly/procedsBlockly.ts new file mode 100644 index 00000000..4d3c3e6e --- /dev/null +++ b/src/components/blockly/procedsBlockly.ts @@ -0,0 +1,84 @@ +import * as Blockly from 'blockly/core'; + +const 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=" +const MINUS = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAQAAAD2e2DtAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAHdElNRQfhDAUCCi+xWH4JAAABcUlEQVR42u3c7ZGCMBSG0etuYcTKls7AyrSEVWd4+bjnUECMeSbhD6kCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBzu4XHm2rUvPekD2yutR57/4itTLXU0/Pvs9SUW5TcDrDUyE3r9Na6ZwZKBWD5PxVKIBPAVGtknGsZibeBTADPyCjXE1idn8A0/gJjXFPgn0sEwIEljgAHwPc2Xx87QHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNDcb2SUsfc0T2re/utAO0BzPg49sot8HOoI+M5IDJIJ4OF+gI+F7gpyRcwxxa6Iyb0E3mvYB96y1kgtv2vijubS18QBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWXq7xrTQhKAi3AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEyLTA1VDAyOjEwOjQ3LTA1OjAwdZLI/gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMi0wNVQwMjoxMDo0Ny0wNTowMATPcEIAAAAASUVORK5CYII=" +const 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==" + +export const ProcedsBlocklyInit = () => { + Blockly.Blocks['procedures_defnoreturn'] = { + init: function () { + makeProcedureInit(this, + true, + Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE, + Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE, + Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT, + Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP, + Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL + ) + }, + + /* customContextMenu: makeProcedureCustomMenu(), + updateParams_: makeUpdateParams(), + domToMutation: makeProcedureDomToMutation(), */ + }; + +} + + +var makeProcedureInit = function ( + block: Blockly.Block, + withParameters = false, + defaultName: string, + title: string, + comment: string, + tooltip: string, + helpUrl: string, +) { + + var defaultLegalName = Blockly.Procedures.findLegalName(defaultName, block); + var nameField = new Blockly.FieldTextInput(defaultLegalName, Blockly.Procedures.rename); + nameField.setSpellcheck(false); + + // [!] + var addParameterButton = new Blockly.FieldImage( + PLUS, + 16, + 16, + Blockly.Msg.PROCEDURES_ADD_PARAMETER, + function () { } + ); + + var input = block.appendDummyInput() + .appendField(title) + .appendField(nameField, 'NAME') + .appendField('', 'PARAMS') + + block.appendStatementInput("DO").setCheck(null) + + if (withParameters) + input.appendField(addParameterButton); + + if ((block.workspace.options.comments || + (block.workspace.options.parentWorkspace && + block.workspace.options.parentWorkspace.options.comments)) && + comment) { + block.setCommentText(comment); + } + block.setCommentText(null); + block.setColour(290); + block.setTooltip(tooltip); + block.setHelpUrl(helpUrl); + //block.arguments_ = []; + //block.statementConnection_ = null; + + // [!] adding create call button + var createCallButton = new Blockly.FieldImage( + HAND, + 16, + 16, + "", + function () { + } + ); + input.appendField(createCallButton); +}; From 65ec0e3eb43d13f8f76fa4a3a43c571975b25082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Mon, 24 Jun 2024 17:16:57 -0300 Subject: [PATCH 03/21] add parameter --- src/components/blockly/procedsBlockly.ts | 92 +++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/src/components/blockly/procedsBlockly.ts b/src/components/blockly/procedsBlockly.ts index 4d3c3e6e..a58eaf34 100644 --- a/src/components/blockly/procedsBlockly.ts +++ b/src/components/blockly/procedsBlockly.ts @@ -45,7 +45,7 @@ var makeProcedureInit = function ( 16, 16, Blockly.Msg.PROCEDURES_ADD_PARAMETER, - function () { } + function () { /*addParameter(block, 0, nameField)*/} ); var input = block.appendDummyInput() @@ -82,3 +82,93 @@ var makeProcedureInit = function ( ); input.appendField(createCallButton); }; + + +/* var addParameter = function(self: Blockly.Block, index: number, name: string) { + //var i = index === undefined ? self.arguments_.length : index; + var tmpName = name === undefined ? Blockly.Msg.PROCEDURES_PARAMETER + " " + (i + 1) : name; + var name = index === undefined ? getAvailableName(self, tmpName) : tmpName; + var id = "INPUTARG" + i; + + if (index === undefined) { + self.arguments_.push(name); + self.updateParams_(); + + var blocks = self.workspace.getAllBlocks(); + for (block of blocks) + if (block.type === self.callType_ && block.getProcedureCall() === self.getProcedureDef()[0]) { + block.arguments_.push(name); + block.updateShape_(); + } + } + + var createCallButton = new Blockly.FieldImage( + ProcedsBlockly.HAND, + 16, + 16, + Blockly.Msg.VARIABLES_SET_CREATE_GET.replace('%1', name), + function() { + createParameterCaller(self, self.arguments_[i])(); + } + ); + + var removeParameterButton = new Blockly.FieldImage( + ProcedsBlockly.MINUS, + 16, + 16, + Blockly.Msg.PROCEDURES_REMOVE_PARAMETER, + function() { + for (var j = 0; j < self.arguments_.length; j++) + self.removeInput("INPUTARG" + j); + self.arguments_.splice(i, 1); + self.arguments_.forEach(function(name, i) { + addParameter(this, i, name, true); + }.bind(self)); + + var blocks = self.workspace.getAllBlocks(); + for (block of blocks) + if (block.type === self.callType_ && block.getProcedureCall() === self.getProcedureDef()[0]) { + block.arguments_.splice(i, 1); + block.updateShape_(); + } + } + ); + + var nameField = new Blockly.FieldTextInput(name, function(newName) { + var oldName = self.arguments_[i]; + + if (oldName !== newName) + newName = getAvailableName(self, newName); + + self.arguments_[i] = newName; + + var blocks = self.workspace.getAllBlocks(); + for (block of blocks) { + if (block.type === self.callType_ && block.getProcedureCall() === self.getProcedureDef()[0]) { + block.arguments_ = block.arguments_.map(function(it) { + return it === oldName ? newName : it; + }); + block.updateShape_(); + } + + if (block.type === "variables_get" && block.$parent === self.id) { + var varField = block.getField("VAR"); + if (varField.getValue() === oldName) { + varField.setValue(newName); + } + } + } + + return newName; + }); + + self + .appendDummyInput(id) + .appendField(Blockly.Msg.PROCEDURES_BEFORE_PARAMS) + .appendField(nameField, 'ARG' + i) + .appendField(createCallButton) + .appendField(removeParameterButton); + + self.moveInputBefore(id, 'STACK'); +}; + */ \ No newline at end of file From 2f3648b65354954e243e8bc7558e1c77cc9133d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Mon, 8 Jul 2024 15:01:05 -0300 Subject: [PATCH 04/21] using blockly-proceds --- package-lock.json | 25 +++++++++++++++++++++++++ package.json | 1 + src/components/blockly/blockly.ts | 3 ++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 7d639097..4db2a88f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", + "blockly-proceds": "file:../blockly-proceds", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -112,6 +113,18 @@ "electron-installer-debian": "^3.2.0" } }, + "../blockly-proceds": { + "version": "1.0.0", + "license": "Apache-2.0", + "devDependencies": { + "@blockly/dev-scripts": "^4.0.1", + "@blockly/dev-tools": "^8.0.2", + "blockly": "^11.1.1" + }, + "peerDependencies": { + "blockly": "^11.1.1" + } + }, "node_modules/@adobe/css-tools": { "version": "4.2.0", "license": "MIT" @@ -7195,6 +7208,10 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, + "node_modules/blockly-proceds": { + "resolved": "../blockly-proceds", + "link": true + }, "node_modules/blockly/node_modules/cssstyle": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", @@ -32409,6 +32426,14 @@ } } }, + "blockly-proceds": { + "version": "file:../blockly-proceds", + "requires": { + "@blockly/dev-scripts": "^4.0.1", + "@blockly/dev-tools": "^8.0.2", + "blockly": "^11.1.1" + } + }, "bluebird": { "version": "3.7.2" }, diff --git a/package.json b/package.json index 17e301a8..030d7c7b 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", + "blockly-proceds": "file:../blockly-proceds", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", diff --git a/src/components/blockly/blockly.ts b/src/components/blockly/blockly.ts index e6c0662e..b2939bb8 100644 --- a/src/components/blockly/blockly.ts +++ b/src/components/blockly/blockly.ts @@ -4,7 +4,8 @@ import * as Blockly from 'blockly/core' import { javascriptGenerator, Order } from 'blockly/javascript' import { enableUnwantedProcedureBlocks, disableUnwantedProcedureBlocks, optionType, createCommonBlocklyBlocks, validateRequiredOptions } from "./utils"; import 'blockly/blocks'; -import { ProcedsBlocklyInit } from "./procedsBlockly"; +//@ts-ignore +import { ProcedsBlocklyInit } from "blockly-proceds"; Blockly.setLocale(Es); // TODO: this needs to be taken from chosen intl From cd0051c81b46aedb8b94faab0b37605e3308b208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Fri, 12 Jul 2024 11:19:26 -0300 Subject: [PATCH 05/21] ups --- package-lock.json | 6 +++++- src/components/blockly/blockly.ts | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4db2a88f..91d291ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -116,6 +116,9 @@ "../blockly-proceds": { "version": "1.0.0", "license": "Apache-2.0", + "dependencies": { + "google-closure-library": "^20230802.0.0" + }, "devDependencies": { "@blockly/dev-scripts": "^4.0.1", "@blockly/dev-tools": "^8.0.2", @@ -32431,7 +32434,8 @@ "requires": { "@blockly/dev-scripts": "^4.0.1", "@blockly/dev-tools": "^8.0.2", - "blockly": "^11.1.1" + "blockly": "^11.1.1", + "google-closure-library": "^20230802.0.0" } }, "bluebird": { diff --git a/src/components/blockly/blockly.ts b/src/components/blockly/blockly.ts index b2939bb8..e6939b85 100644 --- a/src/components/blockly/blockly.ts +++ b/src/components/blockly/blockly.ts @@ -1350,7 +1350,7 @@ const createOthersBlocks = (t: (key: string) => string) => { categoryId: 'myprocedures', }; - ProcedsBlocklyInit() + ProcedsBlocklyInit(Blockly) Blockly.Blocks['Procedimiento'] = { init: Blockly.Blocks['procedures_defnoreturn'].init, setStatements_: Blockly.Blocks['procedures_defnoreturn'].setStatements_, From b8831279e640848e3609ada7c7f6c1c95c7823a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 17 Jul 2024 11:37:35 -0300 Subject: [PATCH 06/21] deleting procedsBlockly file --- src/components/blockly/procedsBlockly.ts | 174 ----------------------- 1 file changed, 174 deletions(-) delete mode 100644 src/components/blockly/procedsBlockly.ts diff --git a/src/components/blockly/procedsBlockly.ts b/src/components/blockly/procedsBlockly.ts deleted file mode 100644 index a58eaf34..00000000 --- a/src/components/blockly/procedsBlockly.ts +++ /dev/null @@ -1,174 +0,0 @@ -import * as Blockly from 'blockly/core'; - -const 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=" -const MINUS = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAQAAAD2e2DtAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAHdElNRQfhDAUCCi+xWH4JAAABcUlEQVR42u3c7ZGCMBSG0etuYcTKls7AyrSEVWd4+bjnUECMeSbhD6kCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBzu4XHm2rUvPekD2yutR57/4itTLXU0/Pvs9SUW5TcDrDUyE3r9Na6ZwZKBWD5PxVKIBPAVGtknGsZibeBTADPyCjXE1idn8A0/gJjXFPgn0sEwIEljgAHwPc2Xx87QHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNCcAJoTQHMCaE4AzQmgOQE0J4DmBNDcb2SUsfc0T2re/utAO0BzPg49sot8HOoI+M5IDJIJ4OF+gI+F7gpyRcwxxa6Iyb0E3mvYB96y1kgtv2vijubS18QBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWXq7xrTQhKAi3AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEyLTA1VDAyOjEwOjQ3LTA1OjAwdZLI/gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMi0wNVQwMjoxMDo0Ny0wNTowMATPcEIAAAAASUVORK5CYII=" -const 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==" - -export const ProcedsBlocklyInit = () => { - Blockly.Blocks['procedures_defnoreturn'] = { - init: function () { - makeProcedureInit(this, - true, - Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE, - Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE, - Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT, - Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP, - Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL - ) - }, - - /* customContextMenu: makeProcedureCustomMenu(), - updateParams_: makeUpdateParams(), - domToMutation: makeProcedureDomToMutation(), */ - }; - -} - - -var makeProcedureInit = function ( - block: Blockly.Block, - withParameters = false, - defaultName: string, - title: string, - comment: string, - tooltip: string, - helpUrl: string, -) { - - var defaultLegalName = Blockly.Procedures.findLegalName(defaultName, block); - var nameField = new Blockly.FieldTextInput(defaultLegalName, Blockly.Procedures.rename); - nameField.setSpellcheck(false); - - // [!] - var addParameterButton = new Blockly.FieldImage( - PLUS, - 16, - 16, - Blockly.Msg.PROCEDURES_ADD_PARAMETER, - function () { /*addParameter(block, 0, nameField)*/} - ); - - var input = block.appendDummyInput() - .appendField(title) - .appendField(nameField, 'NAME') - .appendField('', 'PARAMS') - - block.appendStatementInput("DO").setCheck(null) - - if (withParameters) - input.appendField(addParameterButton); - - if ((block.workspace.options.comments || - (block.workspace.options.parentWorkspace && - block.workspace.options.parentWorkspace.options.comments)) && - comment) { - block.setCommentText(comment); - } - block.setCommentText(null); - block.setColour(290); - block.setTooltip(tooltip); - block.setHelpUrl(helpUrl); - //block.arguments_ = []; - //block.statementConnection_ = null; - - // [!] adding create call button - var createCallButton = new Blockly.FieldImage( - HAND, - 16, - 16, - "", - function () { - } - ); - input.appendField(createCallButton); -}; - - -/* var addParameter = function(self: Blockly.Block, index: number, name: string) { - //var i = index === undefined ? self.arguments_.length : index; - var tmpName = name === undefined ? Blockly.Msg.PROCEDURES_PARAMETER + " " + (i + 1) : name; - var name = index === undefined ? getAvailableName(self, tmpName) : tmpName; - var id = "INPUTARG" + i; - - if (index === undefined) { - self.arguments_.push(name); - self.updateParams_(); - - var blocks = self.workspace.getAllBlocks(); - for (block of blocks) - if (block.type === self.callType_ && block.getProcedureCall() === self.getProcedureDef()[0]) { - block.arguments_.push(name); - block.updateShape_(); - } - } - - var createCallButton = new Blockly.FieldImage( - ProcedsBlockly.HAND, - 16, - 16, - Blockly.Msg.VARIABLES_SET_CREATE_GET.replace('%1', name), - function() { - createParameterCaller(self, self.arguments_[i])(); - } - ); - - var removeParameterButton = new Blockly.FieldImage( - ProcedsBlockly.MINUS, - 16, - 16, - Blockly.Msg.PROCEDURES_REMOVE_PARAMETER, - function() { - for (var j = 0; j < self.arguments_.length; j++) - self.removeInput("INPUTARG" + j); - self.arguments_.splice(i, 1); - self.arguments_.forEach(function(name, i) { - addParameter(this, i, name, true); - }.bind(self)); - - var blocks = self.workspace.getAllBlocks(); - for (block of blocks) - if (block.type === self.callType_ && block.getProcedureCall() === self.getProcedureDef()[0]) { - block.arguments_.splice(i, 1); - block.updateShape_(); - } - } - ); - - var nameField = new Blockly.FieldTextInput(name, function(newName) { - var oldName = self.arguments_[i]; - - if (oldName !== newName) - newName = getAvailableName(self, newName); - - self.arguments_[i] = newName; - - var blocks = self.workspace.getAllBlocks(); - for (block of blocks) { - if (block.type === self.callType_ && block.getProcedureCall() === self.getProcedureDef()[0]) { - block.arguments_ = block.arguments_.map(function(it) { - return it === oldName ? newName : it; - }); - block.updateShape_(); - } - - if (block.type === "variables_get" && block.$parent === self.id) { - var varField = block.getField("VAR"); - if (varField.getValue() === oldName) { - varField.setValue(newName); - } - } - } - - return newName; - }); - - self - .appendDummyInput(id) - .appendField(Blockly.Msg.PROCEDURES_BEFORE_PARAMS) - .appendField(nameField, 'ARG' + i) - .appendField(createCallButton) - .appendField(removeParameterButton); - - self.moveInputBefore(id, 'STACK'); -}; - */ \ No newline at end of file From f8f14fb9619dac967a610c691ece4abdf0498b74 Mon Sep 17 00:00:00 2001 From: Daniel Ferro Date: Sat, 20 Jul 2024 15:45:22 -0300 Subject: [PATCH 07/21] callback --- src/components/blockly/PBBlocklyWorkspace.tsx | 2 +- src/components/blockly/blockly.ts | 68 ++++++++++++++++--- 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/src/components/blockly/PBBlocklyWorkspace.tsx b/src/components/blockly/PBBlocklyWorkspace.tsx index a22eb0b2..27786350 100644 --- a/src/components/blockly/PBBlocklyWorkspace.tsx +++ b/src/components/blockly/PBBlocklyWorkspace.tsx @@ -31,7 +31,7 @@ export const PBBlocklyWorkspace = ({ blockIds, categorized, sx, title, ...props setupBlocklyBlocks(t) - if (blocklyContainer) setupBlockly(blocklyContainer, { theme: blocklyTheme, toolbox, ...props.workspaceConfiguration } ) + if (blocklyContainer) setupBlockly(blocklyContainer, { theme: blocklyTheme, toolbox, ...props.workspaceConfiguration } ) if (blocklyContainer && props.initialXml) setXml(props.initialXml ) diff --git a/src/components/blockly/blockly.ts b/src/components/blockly/blockly.ts index 1138f199..8619d824 100644 --- a/src/components/blockly/blockly.ts +++ b/src/components/blockly/blockly.ts @@ -5,7 +5,8 @@ import { javascriptGenerator, Order } from 'blockly/javascript' import { enableUnwantedProcedureBlocks, disableUnwantedProcedureBlocks, optionType, createCommonBlocklyBlocks, validateRequiredOptions } from "./utils"; import 'blockly/blocks'; //@ts-ignore -import { ProcedsBlocklyInit } from "blockly-proceds"; +import { ProcedsBlocklyInit, allProcedures } from "blockly-proceds"; + Blockly.setLocale(Es); // TODO: this needs to be taken from chosen intl @@ -30,7 +31,7 @@ type BlocklyBlockDefinition = { export type Toolbox = { kind: "categoryToolbox" | "flyoutToolbox", contents: ToolboxItem[] } type ToolboxItem = ToolboxBlock | ToolBoxCategory type ToolboxBlock = { kind: "block", type: string } -type ToolBoxCategory = { kind: "category" | '', name: string, contents: ToolboxItem[] } +type ToolBoxCategory = { kind: "category" | '', name: string, contents: ToolboxItem[], custom?: string } const primitivesColor = '#4a6cd4'; const controlColor = '#ee7d16'; @@ -1350,6 +1351,9 @@ const createOthersBlocks = (t: (key: string) => string) => { categoryId: 'myprocedures', }; + enableUnwantedProcedureBlocks() + + ProcedsBlocklyInit(Blockly) Blockly.Blocks['Procedimiento'] = { init: Blockly.Blocks['procedures_defnoreturn'].init, @@ -1369,6 +1373,9 @@ const createOthersBlocks = (t: (key: string) => string) => { categoryId: 'myprocedures' }; + //ProcedsBlockly.init() + disableUnwantedProcedureBlocks() + Blockly.Blocks['OpComparacion'] = { init: Blockly.Blocks["logic_compare"].init, categoryId: 'operators', @@ -1430,16 +1437,19 @@ const defineBlocklyTranslations = (t: (key: string) => string) => { disableUnwantedProcedureBlocks() } - - export const categorizedToolbox = (t: (key: string) => string, blocks: BlockType[]): Toolbox => { const categoryBlocksFor = (categoryId: string): ToolboxItem => { const contents = blocks.filter(block => block.categoryId === categoryId).map(blockTypeToToolboxBlock) - return contents.length ? { + return contents.length ? categoryId === 'myprocedures' ? { + kind: "category", + name: `${t(`categories.${categoryId}`)}`, + contents: contents, + custom: "PROCEDURE" + } : { kind: "category", name: `${t(`categories.${categoryId}`)}`, - contents: contents + contents: contents, } : { kind: '', name: '', @@ -1449,7 +1459,7 @@ export const categorizedToolbox = (t: (key: string) => string, blocks: BlockType return ({ kind: "categoryToolbox", - contents: categories.map(category => categoryBlocksFor(category) ) + contents: categories.map(category => categoryBlocksFor(category)) }) } @@ -1477,15 +1487,55 @@ export const setupBlocklyBlocks = (t: (key: string) => string) => { createCommonCode() } -export const setXml = (xml: string ) => { +export const setXml = (xml: string) => { Blockly.Xml.domToWorkspace( Blockly.utils.xml.textToDom(xml), Blockly.getMainWorkspace() ); } +// Returns an array of objects. +var flyoutCallback = function (workspace: Blockly.WorkspaceSvg) { + + console.log(workspace.getAllBlocks()); + + //const allBlocks = Object(Blockly.Blocks) + + var blockList = [] + + const procedureList = allProcedures(workspace); + + + blockList.push({ + 'kind': 'block', + 'type': 'Procedimiento', + 'fields': { + 'NAME': 'hacer algo' //Blockly.Blocks['Procedimiento'].getFieldValue('NAME') + } + }) + + + for (var i = 0; i < procedureList.length; i++) { + blockList.push({ + 'kind': 'block', + 'type': 'procedures_callnoreturn', + 'fields': { + 'NAME': procedureList[i].getFieldValue('NAME') + } + }); + } + console.log(blockList) + return blockList; +}; + + export const setupBlockly = (container: Element, workspaceConfiguration: Blockly.BlocklyOptions) => { container.replaceChildren() //Removes previous injection, otherwise it might keep inserting below the current workspace container.ariaValueText = 'child-blockly' - Blockly.inject(container, workspaceConfiguration) + const workspace = Blockly.inject(container, workspaceConfiguration) + + workspace.registerToolboxCategoryCallback( + 'PROCEDURE', flyoutCallback); +// return workspace; + } \ No newline at end of file From 53695cd625484999afafd5ddf958fe59d87eea95 Mon Sep 17 00:00:00 2001 From: Daniel Ferro Date: Fri, 26 Jul 2024 15:33:55 -0300 Subject: [PATCH 08/21] blockly.ts to compare with develop --- package-lock.json | 6 +- src/components/blockly/blockly.ts | 97 +++++++------------------------ 2 files changed, 25 insertions(+), 78 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91d291ae..44a9fba7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,7 +117,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "google-closure-library": "^20230802.0.0" + "@blockly/block-shareable-procedures": "^5.0.5" }, "devDependencies": { "@blockly/dev-scripts": "^4.0.1", @@ -32432,10 +32432,10 @@ "blockly-proceds": { "version": "file:../blockly-proceds", "requires": { + "@blockly/block-shareable-procedures": "^5.0.5", "@blockly/dev-scripts": "^4.0.1", "@blockly/dev-tools": "^8.0.2", - "blockly": "^11.1.1", - "google-closure-library": "^20230802.0.0" + "blockly": "^11.1.1" } }, "bluebird": { diff --git a/src/components/blockly/blockly.ts b/src/components/blockly/blockly.ts index 8619d824..e7bb2054 100644 --- a/src/components/blockly/blockly.ts +++ b/src/components/blockly/blockly.ts @@ -5,8 +5,7 @@ import { javascriptGenerator, Order } from 'blockly/javascript' import { enableUnwantedProcedureBlocks, disableUnwantedProcedureBlocks, optionType, createCommonBlocklyBlocks, validateRequiredOptions } from "./utils"; import 'blockly/blocks'; //@ts-ignore -import { ProcedsBlocklyInit, allProcedures } from "blockly-proceds"; - +import { ProcedsBlocklyInit } from "blockly-proceds"; Blockly.setLocale(Es); // TODO: this needs to be taken from chosen intl @@ -47,7 +46,7 @@ export const xmlBloqueEmpezarAEjecutar = ` { - javascriptGenerator.forBlock[id] = function (block: { getFieldValue: (arg0: string) => any; }, generator: { statementToCode: (arg0: any, arg1: string) => any; valueToCode: (arg0: any, arg1: string) => any; }) { + javascriptGenerator.forBlock[id] = function (block: { getFieldValue: (arg0: string) => any; }, generator: { statementToCode: (arg0: any, arg1: string) => any; valueToCode: (arg0: any, arg1: string, arg2: any) => any; }) { let variables = customCode.match(/\$(\w+)/g); let code = customCode; @@ -61,7 +60,7 @@ const createGenericJSCode = (id: string, customCode: string) => { if (variable_name === "DO") { variable_object = generator.statementToCode(block, variable_name); } else { - variable_object = generator.valueToCode(block, variable_name) || block.getFieldValue(variable_name) || null; + variable_object = generator.valueToCode(block, variable_name, Order.ATOMIC) || block.getFieldValue(variable_name) || null; } code = code.replace(regex, variable_object); @@ -1121,22 +1120,28 @@ const createValueBlocks = (t: (key: string) => string) => { const createRepeatBlocks = (t: (key: string) => string) => { const repeatBlocksCode = (id: string) => { - javascriptGenerator.forBlock[id] = function (block: { id: any; }, generator: { valueToCode: (arg0: any, arg1: string, arg2: Order) => string; statementToCode: (arg0: any, arg1: string) => any; addLoopTrap: (arg0: any, arg1: any) => any; nameDB_: { getDistinctName: (arg0: string, arg1: Blockly.Names.NameType) => any; }; }) { - const repeats = generator.valueToCode(block, 'count', Order.ASSIGNMENT) || '0'; + + javascriptGenerator.forBlock[id] = function (block: { id: any }, + generator: { valueToCode: (arg0: any, arg1: string, arg2: any) => string; + statementToCode: (arg0: any, arg1: string) => any; + addLoopTrap: (arg0: any, arg1: any) => any; + nameDB_?: { getDistinctName: (arg0: string, arg1: any) => any; }; + }) { + const repeats = generator.valueToCode(block, 'count', Order.ASSIGNMENT) || '0'; + var branch = generator.statementToCode(block, 'block'); branch = generator.addLoopTrap(branch, block.id); var code = ''; - const loopVar = generator.nameDB_.getDistinctName( + const loopVar = generator.nameDB_?.getDistinctName( 'count', Blockly.Names.NameType.VARIABLE); - var endVar = repeats; - if (!repeats.match(/^\w+$/) && Blockly.utils.string.isNumber(repeats)) { - endVar = generator.nameDB_.getDistinctName( + var endVar = repeats + if (!repeats.match(/^\w+$/) && Blockly.utils.string.isNumber(repeats)) { + endVar = generator.nameDB_?.getDistinctName( 'repeat_end', Blockly.Names.NameType.VARIABLE); code += 'var ' + endVar + ' = ' + repeats + ';\n'; } - code += 'for (var ' + loopVar + ' = 0; ' + loopVar + ' < ' + endVar + '; ' + loopVar + '++) {\n' + @@ -1330,7 +1335,7 @@ const createOthersBlocks = (t: (key: string) => string) => { // Power in JavaScript requires a special case since it has no operator. if (isPow) { code = 'Math.pow(' + argument0 + ', ' + argument1 + ')'; - return [code, Order.FUNCTION_CALL]; + return [code, Order.FUNCTION_CALL as number]; } code = ` (function(){ @@ -1340,7 +1345,7 @@ const createOthersBlocks = (t: (key: string) => string) => { return ${argument0 + operator + argument1} })() `; - return [code, order]; + return [code, order as number]; }; Blockly.Blocks['param_get'] = { @@ -1353,27 +1358,8 @@ const createOthersBlocks = (t: (key: string) => string) => { enableUnwantedProcedureBlocks() - ProcedsBlocklyInit(Blockly) - Blockly.Blocks['Procedimiento'] = { - init: Blockly.Blocks['procedures_defnoreturn'].init, - setStatements_: Blockly.Blocks['procedures_defnoreturn'].setStatements_, - updateParams_: Blockly.Blocks['procedures_defnoreturn'].updateParams_, - mutationToDom: Blockly.Blocks['procedures_defnoreturn'].mutationToDom, - domToMutation: Blockly.Blocks['procedures_defnoreturn'].domToMutation, - decompose: Blockly.Blocks['procedures_defnoreturn'].decompose, - compose: Blockly.Blocks['procedures_defnoreturn'].compose, - getProcedureDef: Blockly.Blocks['procedures_defnoreturn'].getProcedureDef, - getVars: Blockly.Blocks['procedures_defnoreturn'].getVars, - getVarModels: Blockly.Blocks['procedures_defnoreturn'].getVarModels, - renameVarById: Blockly.Blocks['procedures_defnoreturn'].renameVarById, - updateVarName: Blockly.Blocks['procedures_defnoreturn'].updateVarName, - displayRenamedVar_: Blockly.Blocks['procedures_defnoreturn'].displayRenamedVar_, - customContextMenu: Blockly.Blocks['procedures_defnoreturn'].customContextMenu, - categoryId: 'myprocedures' - }; - //ProcedsBlockly.init() disableUnwantedProcedureBlocks() Blockly.Blocks['OpComparacion'] = { @@ -1383,8 +1369,9 @@ const createOthersBlocks = (t: (key: string) => string) => { } const createCommonCode = () => { - javascriptGenerator.addReservedWords('main', 'hacer', 'out_hacer', 'evaluar'); + javascriptGenerator.addReservedWords('main,hacer,out_hacer,evaluar'); + /* javascriptGenerator.required_value = function () { return null }; @@ -1392,6 +1379,7 @@ const createCommonCode = () => { javascriptGenerator.required_statement = function () { return null }; +*/ javascriptGenerator.STATEMENT_PREFIX = 'highlightBlock(%1);\n'; javascriptGenerator.addReservedWords('highlightBlock'); @@ -1429,7 +1417,6 @@ const defineBlocklyTranslations = (t: (key: string) => string) => { Blockly.Msg.CLEAN_UP = t("contextMenu.cleanUp") Blockly.Msg.EXTERNAL_INPUTS = t("contextMenu.externalInputs") - // ProcedsBlockly.init() needs all procedure blocks to work, so we need to put them back // After calling init(), we disable unwanted toolbox blocks again enableUnwantedProcedureBlocks() @@ -1494,48 +1481,8 @@ export const setXml = (xml: string) => { ); } -// Returns an array of objects. -var flyoutCallback = function (workspace: Blockly.WorkspaceSvg) { - - console.log(workspace.getAllBlocks()); - - //const allBlocks = Object(Blockly.Blocks) - - var blockList = [] - - const procedureList = allProcedures(workspace); - - - blockList.push({ - 'kind': 'block', - 'type': 'Procedimiento', - 'fields': { - 'NAME': 'hacer algo' //Blockly.Blocks['Procedimiento'].getFieldValue('NAME') - } - }) - - - for (var i = 0; i < procedureList.length; i++) { - blockList.push({ - 'kind': 'block', - 'type': 'procedures_callnoreturn', - 'fields': { - 'NAME': procedureList[i].getFieldValue('NAME') - } - }); - } - console.log(blockList) - return blockList; -}; - - export const setupBlockly = (container: Element, workspaceConfiguration: Blockly.BlocklyOptions) => { container.replaceChildren() //Removes previous injection, otherwise it might keep inserting below the current workspace container.ariaValueText = 'child-blockly' - const workspace = Blockly.inject(container, workspaceConfiguration) - - workspace.registerToolboxCategoryCallback( - 'PROCEDURE', flyoutCallback); -// return workspace; - + Blockly.inject(container, workspaceConfiguration) } \ No newline at end of file From 6007e8f27cacd6df78da5a9e48f3fd1cf360c192 Mon Sep 17 00:00:00 2001 From: Daniel Ferro Date: Fri, 2 Aug 2024 16:59:09 -0300 Subject: [PATCH 09/21] bad draft --- src/components/blockly/utils.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/components/blockly/utils.ts b/src/components/blockly/utils.ts index 9c54dbd9..afce6e53 100644 --- a/src/components/blockly/utils.ts +++ b/src/components/blockly/utils.ts @@ -48,8 +48,9 @@ export const isFlying = (block: { getRootBlock: () => any; }) => export const getParams = (procedureBlock: { getProcedureDef: () => any[]; }) => procedureBlock.getProcedureDef()[1] -export const hasParam = (procedureBlock: { getProcedureDef: () => any[]; }, paramBlock: { getFieldValue: (arg0: string) => any; }) => - getParams(procedureBlock).includes(paramBlock.getFieldValue('VAR')) +export const hasParam = (procedureBlock: { getProcedureDef: () => any[]; }, paramBlock: { getFieldValue: (arg0: string) => any; }) => { + return getParams(procedureBlock).includes(paramBlock.getFieldValue('VAR')) +} export const clearValidations = (workspace: Blockly.Workspace = Blockly.getMainWorkspace()) => { workspace.getAllBlocks(false).forEach(clearValidationsFor) @@ -94,10 +95,14 @@ const drawWarningIcon = (group: Element | null | undefined, colour: any, seconda group); }; -const setWarningColour = (block: { warning: { setVisible: (visible: any) => void; bubble_: { setColour: (arg0: any) => void; }; iconGroup_: Element | null | undefined; }; }, colour: any, secondaryColour: any) => { +const setWarningColour = (block: { warning: { setVisible: (visible: any) => void; textBubble: { setColour: (arg0: any) => void; }; bubble_: { setColour: (arg0: any) => void; }; iconGroup_: Element | null | undefined; }; }, colour: any, secondaryColour: any) => { const unBoundedSetVisible = block.warning.setVisible const boundedSetVisible = unBoundedSetVisible.bind(block.warning) - block.warning.setVisible = (visible) => { boundedSetVisible(visible); if (visible) block.warning.bubble_.setColour(colour) } + block.warning.setVisible = (visible) => { + boundedSetVisible(visible); + if (visible) + block.warning.textBubble.setColour(colour) + } drawWarningIcon(block.warning.iconGroup_, colour, secondaryColour) } @@ -177,7 +182,8 @@ export const createCommonBlocklyBlocks = (t: (key: string) => string, color: str if (this.$parent) { // Este if sirve para las soluciones viejas que no tienen $parent var procedureDef = this.workspace.getBlockById(this.$parent) var ok = isInsideProcedureDef(this) && hasParam(procedureDef, this) - this.setDisabled(!ok) + //this.setDisabled(!ok) + this.setEnabled(ok) if (ok || isFlying(this) || !procedureDef) { clearValidationsFor(this) } else { From 5462a8093de585a7c7e71d30e621d23fde9c6b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Thu, 8 Aug 2024 16:32:50 -0300 Subject: [PATCH 10/21] fixing variables_get --- src/components/blockly/utils.ts | 379 +------------------------------- 1 file changed, 2 insertions(+), 377 deletions(-) diff --git a/src/components/blockly/utils.ts b/src/components/blockly/utils.ts index afce6e53..28844de8 100644 --- a/src/components/blockly/utils.ts +++ b/src/components/blockly/utils.ts @@ -148,16 +148,14 @@ export const createCommonBlocklyBlocks = (t: (key: string) => string, color: str "message0": "%1", "args0": [ { - "type": "field_variable", + "type": "field_label", "name": "VAR", - "variable": t("procedures.variableName") - } + "variable": t("procedures.variableName") } ], "output": null, "style": "variable_blocks", "tooltip": "", "helpUrl": "", - "extensions": ["contextMenu_variableSetterGetter"] }); }, mutationToDom: function () { @@ -220,379 +218,6 @@ export const createCommonBlocklyBlocks = (t: (key: string) => string, color: str } } - Blockly.Blocks['procedures_defnoreturn'] = { - init: function () { - var nameField = new Blockly.FieldTextInput(Blockly.Msg['PROCEDURES_DEFNORETURN_PROCEDURE'], - Blockly.Procedures.rename); - nameField.setSpellcheck(false); - this.appendDummyInput() - .appendField(Blockly.Msg['PROCEDURES_DEFNORETURN_TITLE']) - .appendField(nameField, 'NAME') - .appendField('', 'PARAMS'); - this.setMutator(new Blockly.icons.MutatorIcon(['procedures_mutatorarg'], this)); - if ((this.workspace.options.comments || - (this.workspace.options.parentWorkspace && - this.workspace.options.parentWorkspace.options.comments)) && - Blockly.Msg['PROCEDURES_DEFNORETURN_COMMENT']) { - this.setCommentText(Blockly.Msg['PROCEDURES_DEFNORETURN_COMMENT']); - } - this.setStyle('procedure_blocks'); - this.setTooltip(Blockly.Msg['PROCEDURES_DEFNORETURN_TOOLTIP']); - this.setHelpUrl(Blockly.Msg['PROCEDURES_DEFNORETURN_HELPURL']); - this.arguments_ = []; - this.argumentVarModels_ = []; - this.setStatements_(true); - this.statementConnection_ = null; - - }, - /** - * Add or remove the statement block from this function definition. - * @param {boolean} hasStatements True if a statement block is needed. - * @this {Blockly.Block} - */ - setStatements_: function (hasStatements: boolean) { - if (this.hasStatements_ === hasStatements) { - return; - } - if (hasStatements) { - this.appendStatementInput('STACK') - .appendField(Blockly.Msg['PROCEDURES_DEFNORETURN_DO']); - if (this.getInput('RETURN')) { - this.moveInputBefore('STACK', 'RETURN'); - } - } else { - this.removeInput('STACK', true); - } - this.hasStatements_ = hasStatements; - }, - /** - * Update the display of parameters for this procedure definition block. - * @private - * @this {Blockly.Block} - */ - updateParams_: function () { - - // Merge the arguments into a human-readable list. - var paramString = ''; - if (this.arguments_.length) { - paramString = Blockly.Msg['PROCEDURES_BEFORE_PARAMS'] + - ' ' + this.arguments_.join(', '); - } - // The params field is deterministic based on the mutation, - // no need to fire a change event. - Blockly.Events.disable(); - try { - this.setFieldValue(paramString, 'PARAMS'); - } finally { - Blockly.Events.enable(); - } - }, - /** - * Create XML to represent the argument inputs. - * @param {boolean=} opt_paramIds If true include the IDs of the parameter - * quarks. Used by Blockly.Procedures.mutateCallers for reconnection. - * @return {!Element} XML storage element. - * @this {Blockly.Block} - */ - mutationToDom: function (opt_paramIds: any) { - var container = Blockly.utils.xml.createElement('mutation'); - if (opt_paramIds) { - container.setAttribute('name', this.getFieldValue('NAME')); - } - for (var i = 0; i < this.argumentVarModels_.length; i++) { - var parameter = Blockly.utils.xml.createElement('arg'); - var argModel = this.argumentVarModels_[i]; - parameter.setAttribute('name', argModel.name); - parameter.setAttribute('varid', argModel.getId()); - if (opt_paramIds && this.paramIds_) { - parameter.setAttribute('paramId', this.paramIds_[i]); - } - container.appendChild(parameter); - } - - // Save whether the statement input is visible. - if (!this.hasStatements_) { - container.setAttribute('statements', 'false'); - } - return container; - }, - /** - * Parse XML to restore the argument inputs. - * @param {!Element} xmlElement XML storage element. - * @this {Blockly.Block} - */ - domToMutation: function (xmlElement: { childNodes: any[]; getAttribute: (arg0: string) => string; }) { - this.arguments_ = []; - this.argumentVarModels_ = []; - for (var i = 0, childNode; (childNode = xmlElement.childNodes[i]); i++) { - if (childNode.nodeName.toLowerCase() == 'arg') { - var varName = childNode.getAttribute('name'); - var varId = childNode.getAttribute('varid') || childNode.getAttribute('varId'); - this.arguments_.push(varName); - var variable = Blockly.Variables.getOrCreateVariablePackage( - this.workspace, varId, varName, ''); - if (variable != null) { - this.argumentVarModels_.push(variable); - } else { - console.log('Failed to create a variable with name ' + varName + ', ignoring.'); - } - } - } - this.updateParams_(); - Blockly.Procedures.mutateCallers(this); - - // Show or hide the statement input. - this.setStatements_(xmlElement.getAttribute('statements') !== 'false'); - }, - /** - * Populate the mutator's dialog with this block's components. - * @param {!Blockly.Workspace} workspace Mutator's workspace. - * @return {!Blockly.Block} Root block in mutator. - * @this {Blockly.Block} - */ - decompose: function (workspace: Blockly.Workspace) { - /* - * Creates the following XML: - * - * - * - * arg1_name - * etc... - * - * - * - */ - - var containerBlockNode = Blockly.utils.xml.createElement('block'); - containerBlockNode.setAttribute('type', 'procedures_mutatorcontainer'); - var statementNode = Blockly.utils.xml.createElement('statement'); - statementNode.setAttribute('name', 'STACK'); - containerBlockNode.appendChild(statementNode); - - var node = statementNode; - for (var i = 0; i < this.arguments_.length; i++) { - var argBlockNode = Blockly.utils.xml.createElement('block'); - argBlockNode.setAttribute('type', 'procedures_mutatorarg'); - var fieldNode = Blockly.utils.xml.createElement('field'); - fieldNode.setAttribute('name', 'NAME'); - var argumentName = Blockly.utils.xml.createTextNode(this.arguments_[i]); - fieldNode.appendChild(argumentName); - argBlockNode.appendChild(fieldNode); - var nextNode = Blockly.utils.xml.createElement('next'); - argBlockNode.appendChild(nextNode); - - node.appendChild(argBlockNode); - node = nextNode; - } - - var containerBlock = Blockly.Xml.domToBlock(containerBlockNode, workspace); - - if (this.type == 'procedures_defreturn') { - containerBlock.setFieldValue(this.hasStatements_, 'STATEMENTS'); - } else { - containerBlock.removeInput('STATEMENT_INPUT'); - } - - // Initialize procedure's callers with blank IDs. - Blockly.Procedures.mutateCallers(this); - return containerBlock; - }, - /** - * Reconfigure this block based on the mutator dialog's components. - * @param {!Blockly.Block} containerBlock Root block in mutator. - * @this {Blockly.Block} - */ - compose: function (containerBlock: { getInputTargetBlock: (arg0: string) => any; getFieldValue: (arg0: string) => any; }) { - // Parameter list. - this.arguments_ = []; - this.paramIds_ = []; - this.argumentVarModels_ = []; - var paramBlock = containerBlock.getInputTargetBlock('STACK'); - while (paramBlock) { - var varName = paramBlock.getFieldValue('NAME'); - this.arguments_.push(varName); - var variable = this.workspace.getVariable(varName, ''); - this.argumentVarModels_.push(variable); - - this.paramIds_.push(paramBlock.id); - paramBlock = paramBlock.nextConnection && - paramBlock.nextConnection.targetBlock(); - } - this.updateParams_(); - Blockly.Procedures.mutateCallers(this); - - // Show/hide the statement input. - var hasStatements = containerBlock.getFieldValue('STATEMENTS'); - if (hasStatements !== null) { - hasStatements = hasStatements == 'TRUE'; - if (this.hasStatements_ != hasStatements) { - if (hasStatements) { - this.setStatements_(true); - // Restore the stack, if one was saved. - Blockly.icons.MutatorIcon.reconnect(this.statementConnection_, this, 'STACK'); - this.statementConnection_ = null; - } else { - // Save the stack, then disconnect it. - var stackConnection = this.getInput('STACK').connection; - this.statementConnection_ = stackConnection.targetConnection; - if (this.statementConnection_) { - var stackBlock = stackConnection.targetBlock(); - stackBlock.unplug(); - stackBlock.bumpNeighbours(); - } - this.setStatements_(false); - } - } - } - }, - /** - * Return the signature of this procedure definition. - * @return {!Array} Tuple containing three elements: - * - the name of the defined procedure, - * - a list of all its arguments, - * - that it DOES NOT have a return value. - * @this {Blockly.Block} - */ - getProcedureDef: function () { - return [this.getFieldValue('NAME'), this.arguments_, false]; - }, - /** - * Return all variables referenced by this block. - * @return {!Array.} List of variable names. - * @this {Blockly.Block} - */ - getVars: function () { - return this.arguments_; - }, - /** - * Return all variables referenced by this block. - * @return {!Array.} List of variable models. - * @this {Blockly.Block} - */ - getVarModels: function () { - return this.argumentVarModels_; - }, - /** - * Notification that a variable is renaming. - * If the ID matches one of this block's variables, rename it. - * @param {string} oldId ID of variable to rename. - * @param {string} newId ID of new variable. May be the same as oldId, but - * with an updated name. Guaranteed to be the same type as the old - * variable. - * @override - * @this {Blockly.Block} - */ - renameVarById: function (oldId: any, newId: any) { - var oldVariable = this.workspace.getVariableById(oldId); - if (oldVariable.type != '') { - // Procedure arguments always have the empty type. - return; - } - var oldName = oldVariable.name; - var newVar = this.workspace.getVariableById(newId); - - var change = false; - for (var i = 0; i < this.argumentVarModels_.length; i++) { - if (this.argumentVarModels_[i].getId() == oldId) { - this.arguments_[i] = newVar.name; - this.argumentVarModels_[i] = newVar; - change = true; - } - } - if (change) { - this.displayRenamedVar_(oldName, newVar.name); - Blockly.Procedures.mutateCallers(this); - } - }, - /** - * Notification that a variable is renaming but keeping the same ID. If the - * variable is in use on this block, rerender to show the new name. - * @param {!Blockly.VariableModel} variable The variable being renamed. - * @package - * @override - * @this {Blockly.Block} - */ - updateVarName: function (variable: { name: any; getId: () => any; }) { - var newName = variable.name; - var change = false; - for (var i = 0; i < this.argumentVarModels_.length; i++) { - if (this.argumentVarModels_[i].getId() == variable.getId()) { - var oldName = this.arguments_[i]; - this.arguments_[i] = newName; - change = true; - } - } - if (change) { - this.displayRenamedVar_(oldName, newName); - Blockly.Procedures.mutateCallers(this); - } - }, - /** - * Update the display to reflect a newly renamed argument. - * @param {string} oldName The old display name of the argument. - * @param {string} newName The new display name of the argument. - * @private - * @this {Blockly.Block} - */ - displayRenamedVar_: function (oldName: string, newName: any) { - this.updateParams_(); - // Update the mutator's variables if the mutator is open. - if (this.mutator && this.mutator.isVisible()) { - var blocks = this.mutator.workspace_.getAllBlocks(false); - for (var i = 0, block; (block = blocks[i]); i++) { - if (block.type == 'procedures_mutatorarg' && - Blockly.Names.equals(oldName, block.getFieldValue('NAME'))) { - block.setFieldValue(newName, 'NAME'); - } - } - } - }, - /** - * Add custom menu options to this block's context menu. - * @param {!Array} options List of menu options to add to. - * @this {Blockly.Block} - */ - customContextMenu: function (options: { enabled: boolean; }[]) { - if (this.isInFlyout) { - return; - } - // Add option to create caller. - var option = { enabled: true, text: '', callback: () => { } }; - var name = this.getFieldValue('NAME'); - option.text = Blockly.Msg['PROCEDURES_CREATE_DO'].replace('%1', name); - var xmlMutation = Blockly.utils.xml.createElement('mutation'); - xmlMutation.setAttribute('name', name); - for (var i = 0; i < this.arguments_.length; i++) { - var xmlArg = Blockly.utils.xml.createElement('arg'); - xmlArg.setAttribute('name', this.arguments_[i]); - xmlMutation.appendChild(xmlArg); - } - var xmlBlock = Blockly.utils.xml.createElement('block'); - xmlBlock.setAttribute('type', this.callType_); - xmlBlock.appendChild(xmlMutation); - option.callback = Blockly.ContextMenu.callbackFactory(this, xmlBlock); - options.push(option); - - // Add options to create getters for each parameter. - if (!this.isCollapsed()) { - for (var i = 0; i < this.argumentVarModels_.length; i++) { - var argOption = { enabled: true, text: '', callback: () => { } }; - var argVar = this.argumentVarModels_[i]; - argOption.text = Blockly.Msg['VARIABLES_SET_CREATE_GET'] - .replace('%1', argVar.name); - - var argXmlField = Blockly.Variables.generateVariableFieldDom(argVar); - var argXmlBlock = Blockly.utils.xml.createElement('block'); - argXmlBlock.setAttribute('type', 'variables_get'); - argXmlBlock.appendChild(argXmlField); - argOption.callback = - Blockly.ContextMenu.callbackFactory(this, argXmlBlock); - options.push(argOption); - } - } - }, - callType_: 'procedures_callnoreturn', - } Blockly.Blocks['procedures_defreturn'] = { /** From d5f68e5739a8b995f1ab53c0200a2e26924a29e9 Mon Sep 17 00:00:00 2001 From: Rocio Gonzalez Date: Fri, 15 Nov 2024 16:01:15 -0300 Subject: [PATCH 11/21] para que no se ejecuten bloques por fuera del "al empezar a ejectuar" --- src/components/blockly/blockly.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/blockly/blockly.ts b/src/components/blockly/blockly.ts index 1486768d..5c3698ed 100644 --- a/src/components/blockly/blockly.ts +++ b/src/components/blockly/blockly.ts @@ -67,7 +67,8 @@ export const setXml = (xml: string) => { export const setupBlockly = (container: Element, workspaceConfiguration: Blockly.BlocklyOptions) => { container.replaceChildren() //Removes previous injection, otherwise it might keep inserting below the current workspace container.ariaValueText = 'child-blockly' - Blockly.inject(container, workspaceConfiguration) + const workspace = Blockly.inject(container, workspaceConfiguration) + workspace.addChangeListener(Blockly.Events.disableOrphans); } export const workspaceToCode = () => javascriptGenerator.workspaceToCode(Blockly.getMainWorkspace()) From 441aa3d8c8fbb25c20adddb7bf5adafac8808b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Tue, 26 Nov 2024 17:35:32 -0300 Subject: [PATCH 12/21] bumping proceds --- package-lock.json | 4 +- package.json | 2 +- .../blockly/blocksGallery/others.ts | 1 - src/test/integration/ChallengeView.cy.tsx | 65 ++++++++++++++++++- 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index a3e5eaac..73184ec8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "file:../blockly-proceds", + "blockly-proceds": "1.0.7", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -121,7 +121,7 @@ } }, "../blockly-proceds": { - "version": "1.0.0", + "version": "1.0.7", "license": "Apache-2.0", "dependencies": { "@blockly/block-shareable-procedures": "^5.0.5" diff --git a/package.json b/package.json index 56bd4b72..796458a7 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "file:../blockly-proceds", + "blockly-proceds": "1.0.7", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", diff --git a/src/components/blockly/blocksGallery/others.ts b/src/components/blockly/blocksGallery/others.ts index 1f82cc8d..0bbf2c3d 100644 --- a/src/components/blockly/blocksGallery/others.ts +++ b/src/components/blockly/blocksGallery/others.ts @@ -2,7 +2,6 @@ import { createCommonBlocklyBlocks, disableUnwantedProcedureBlocks, enableUnwant import Blockly, { Block } from "blockly/core" import { sensorsColor } from "./sensors"; import { javascriptGenerator, Order } from "blockly/javascript"; -//@ts-ignore import { ProcedsBlocklyInit } from "blockly-proceds"; const othersColor = '#cc5b22'; diff --git a/src/test/integration/ChallengeView.cy.tsx b/src/test/integration/ChallengeView.cy.tsx index c92b4fec..e00eb4dc 100644 --- a/src/test/integration/ChallengeView.cy.tsx +++ b/src/test/integration/ChallengeView.cy.tsx @@ -37,7 +37,7 @@ describe('Challenge view with blocks', () => { //TODO - remove the skip once this issue is resolved: https://github.com/Program-AR/pilas-bloques-app/issues/312 const testExecutionWithBlocks = (name: string, solution: string, expected: any, skip = true) => { - (skip ? it.skip: it)(name, () => { + (skip ? it.skip : it)(name, () => { LocalStorage.saveCreatorChallenge(challenge(solution)) mount( @@ -72,7 +72,7 @@ describe('Challenge view with blocks', () => { ` - + const ifSolution = ` @@ -187,7 +187,7 @@ describe('Challenge view with blocks', () => { ` -const aritmethicSolution = ` + const aritmethicSolution = ` @@ -220,6 +220,60 @@ const aritmethicSolution = ` ` + + const procedureSolution = ` + + + + + + + + + + + Hacer algo + + + + +` + + const procedureWithParameterSolution = ` + + + + + + + + + + + + + + + + + + + + Hacer algo + parámetro 1 + + + + + + + + + + + +` + testExecutionWithBlocks('Execution of a solution has effect on scene view', simpleMoveSolution, 1, false) //Code from blocks have effect @@ -235,4 +289,9 @@ const aritmethicSolution = ` testExecutionWithBlocks('Code from blocks have effect - repeat', repeatSolution, 2) testExecutionWithBlocks('Code from blocks have effect - repeat until', repeatUntilSolution, 1) + + testExecutionWithBlocks('Code from blocks have effect - procedures', procedureSolution, 1) + + testExecutionWithBlocks('Code from blocks have effect - procedures with parameter', procedureWithParameterSolution, 1) + }) From 601a44132ee4fb2633620f02839fbaab91e1fa92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 12:37:00 -0300 Subject: [PATCH 13/21] fixing tests --- package-lock.json | 4 ++-- package.json | 2 +- src/components/blockly/blocksGallery/others.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73184ec8..6189b8c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "1.0.7", + "blockly-proceds": "1.0.10", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -121,7 +121,7 @@ } }, "../blockly-proceds": { - "version": "1.0.7", + "version": "1.0.10", "license": "Apache-2.0", "dependencies": { "@blockly/block-shareable-procedures": "^5.0.5" diff --git a/package.json b/package.json index 796458a7..cf4fbabd 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "1.0.7", + "blockly-proceds": "1.0.10", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", diff --git a/src/components/blockly/blocksGallery/others.ts b/src/components/blockly/blocksGallery/others.ts index 0bbf2c3d..afc92c80 100644 --- a/src/components/blockly/blocksGallery/others.ts +++ b/src/components/blockly/blocksGallery/others.ts @@ -2,7 +2,7 @@ import { createCommonBlocklyBlocks, disableUnwantedProcedureBlocks, enableUnwant import Blockly, { Block } from "blockly/core" import { sensorsColor } from "./sensors"; import { javascriptGenerator, Order } from "blockly/javascript"; -import { ProcedsBlocklyInit } from "blockly-proceds"; +import { procedsBlocklyInit } from 'blockly-proceds' const othersColor = '#cc5b22'; const eventsColor = '#00a65a'; // == boton ejecutar @@ -142,7 +142,7 @@ export const createOthersBlocks = (t: (key: string) => string) => { enableUnwantedProcedureBlocks() - ProcedsBlocklyInit(Blockly) + procedsBlocklyInit(Blockly) disableUnwantedProcedureBlocks() } \ No newline at end of file From e728b07e7bd320f7aca10ab1a3c5c236a7ad0b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 12:44:52 -0300 Subject: [PATCH 14/21] fixing ci? --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6189b8c4..5ca497c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "1.0.10", + "blockly-proceds": "1.0.11", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -121,7 +121,7 @@ } }, "../blockly-proceds": { - "version": "1.0.10", + "version": "1.0.11", "license": "Apache-2.0", "dependencies": { "@blockly/block-shareable-procedures": "^5.0.5" diff --git a/package.json b/package.json index cf4fbabd..373d9dd8 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "1.0.10", + "blockly-proceds": "1.0.11", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", From 7499ac90baa326d8cd361719c09480cc08d84246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 12:52:19 -0300 Subject: [PATCH 15/21] trying ci --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b6bf87fe..ecd37d44 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,6 +25,10 @@ jobs: - run: npm install + - name: Verify package installation + run: ls -la node_modules | grep blockly-proceds + + - name: Run tests run: xvfb-run -a npm run test From da7a9a644fd3dd2ad5e335dd7802940ad0416b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 12:58:10 -0300 Subject: [PATCH 16/21] trying ci --- .github/workflows/build.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ecd37d44..4f392603 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,6 +9,9 @@ jobs: with: node-version-file: '.nvmrc' + - name: Clean npm cache + run: npm cache clean --force + #https://docs.github.com/es/actions/guides/caching-dependencies-to-speed-up-workflows#using-the-cache-action - name: Cache node modules uses: actions/cache@v3 @@ -24,11 +27,7 @@ jobs: ${{ runner.os }}- - run: npm install - - - name: Verify package installation - run: ls -la node_modules | grep blockly-proceds - - + - name: Run tests run: xvfb-run -a npm run test From 821635f270e68f4dfc430a4daa2d84cb472679dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 13:00:53 -0300 Subject: [PATCH 17/21] trying ci again:( --- .github/workflows/build.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4f392603..18672939 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,9 +9,6 @@ jobs: with: node-version-file: '.nvmrc' - - name: Clean npm cache - run: npm cache clean --force - #https://docs.github.com/es/actions/guides/caching-dependencies-to-speed-up-workflows#using-the-cache-action - name: Cache node modules uses: actions/cache@v3 @@ -27,7 +24,11 @@ jobs: ${{ runner.os }}- - run: npm install - + + - name: Verify package installation + run: ls -la node_modules/blockly-proceds/dist + + - name: Run tests run: xvfb-run -a npm run test From 65497cf8d2db6a65674892516d0c77a9b2a0f574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 13:03:26 -0300 Subject: [PATCH 18/21] ups --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 18672939..58aaf7a7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: - run: npm install - name: Verify package installation - run: ls -la node_modules/blockly-proceds/dist + run: ls -la node_modules/blockly-proceds - name: Run tests From 60a641c40d1dec62d20bb40b1fe803bc35eb931e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 13:11:40 -0300 Subject: [PATCH 19/21] ci --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 58aaf7a7..71befe7c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: - run: npm install - name: Verify package installation - run: ls -la node_modules/blockly-proceds + run: ls -la node_modules/blockly - name: Run tests From 1aedf25721d199eb4da226f23283c02381b04ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diana=20L=C3=B3pez=20Alvas?= Date: Wed, 27 Nov 2024 14:08:05 -0300 Subject: [PATCH 20/21] finally fixing ci? --- .github/workflows/build.yml | 4 ---- package-lock.json | 36 +++++++++++------------------------- package.json | 2 +- 3 files changed, 12 insertions(+), 30 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 71befe7c..b6bf87fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,10 +25,6 @@ jobs: - run: npm install - - name: Verify package installation - run: ls -la node_modules/blockly - - - name: Run tests run: xvfb-run -a npm run test diff --git a/package-lock.json b/package-lock.json index 5ca497c1..573e015f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "1.0.11", + "blockly-proceds": "^1.0.15", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", @@ -120,21 +120,6 @@ "electron-installer-debian": "^3.2.0" } }, - "../blockly-proceds": { - "version": "1.0.11", - "license": "Apache-2.0", - "dependencies": { - "@blockly/block-shareable-procedures": "^5.0.5" - }, - "devDependencies": { - "@blockly/dev-scripts": "^4.0.1", - "@blockly/dev-tools": "^8.0.2", - "blockly": "^11.1.1" - }, - "peerDependencies": { - "blockly": "^11.1.1" - } - }, "node_modules/@adobe/css-tools": { "version": "4.2.0", "license": "MIT" @@ -7652,8 +7637,12 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, "node_modules/blockly-proceds": { - "resolved": "../blockly-proceds", - "link": true + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/blockly-proceds/-/blockly-proceds-1.0.15.tgz", + "integrity": "sha512-rrS2iuujX/0gUnbN3NZj5LBoPJct6POgh0S3ljcSXSMoUQ/cB6OP/h3X87VNlsFzaZyH2kv3Ige1kuS2GP6evw==", + "peerDependencies": { + "blockly": "^10.4.3" + } }, "node_modules/blockly/node_modules/cssstyle": { "version": "3.0.0", @@ -34245,13 +34234,10 @@ } }, "blockly-proceds": { - "version": "file:../blockly-proceds", - "requires": { - "@blockly/block-shareable-procedures": "^5.0.5", - "@blockly/dev-scripts": "^4.0.1", - "@blockly/dev-tools": "^8.0.2", - "blockly": "^11.1.1" - } + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/blockly-proceds/-/blockly-proceds-1.0.15.tgz", + "integrity": "sha512-rrS2iuujX/0gUnbN3NZj5LBoPJct6POgh0S3ljcSXSMoUQ/cB6OP/h3X87VNlsFzaZyH2kv3Ige1kuS2GP6evw==", + "requires": {} }, "bluebird": { "version": "3.7.2" diff --git a/package.json b/package.json index 373d9dd8..dbe2c182 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "babel-preset-react-app": "^10.0.1", "bfj": "^7.0.2", "blockly": "^10.4.3", - "blockly-proceds": "1.0.11", + "blockly-proceds": "^1.0.15", "browserslist": "^4.18.1", "camelcase": "^6.2.1", "case-sensitive-paths-webpack-plugin": "^2.4.0", From d034a83f6c16d6380d7585d1e982f71b46cfe2ba Mon Sep 17 00:00:00 2001 From: Rocio Gonzalez Date: Thu, 28 Nov 2024 13:08:51 -0300 Subject: [PATCH 21/21] traduccion comeToEnd e icono --- locales/en-us/blocks.json | 1 + locales/es-ar/blocks.json | 1 + public/imagenes/iconos/icono.marcadorBlanco.png | Bin 0 -> 424 bytes 3 files changed, 2 insertions(+) create mode 100644 public/imagenes/iconos/icono.marcadorBlanco.png diff --git a/locales/en-us/blocks.json b/locales/en-us/blocks.json index d8530c44..ca2b5f8f 100644 --- a/locales/en-us/blocks.json +++ b/locales/en-us/blocks.json @@ -40,6 +40,7 @@ "moveRight": "Move right", "moveTo": "Move (with parameter)", "moveUp": "Move up", + "comeToTheEnd": "Am I at the end?", "canMoveDown": "Can I move down?", "canMoveRight": "Can I move to the right?", "canMoveUp": "Can I move up?", diff --git a/locales/es-ar/blocks.json b/locales/es-ar/blocks.json index a0d62291..f3be674e 100644 --- a/locales/es-ar/blocks.json +++ b/locales/es-ar/blocks.json @@ -40,6 +40,7 @@ "moveRight": "Mover a la derecha", "moveTo": "Mover a (con parámetro)", "moveUp": "Mover arriba", + "comeToTheEnd": "¿Llegué al final?", "canMoveDown": "¿Puedo mover abajo?", "canMoveLeft": "¿Puedo mover a la izquierda?", "canMoveRight": "¿Puedo mover a la derecha?", diff --git a/public/imagenes/iconos/icono.marcadorBlanco.png b/public/imagenes/iconos/icono.marcadorBlanco.png new file mode 100644 index 0000000000000000000000000000000000000000..8593bb159f79a345ea0afbbed057ce2d60a8eef0 GIT binary patch literal 424 zcmV;Z0ayNsP)bB0jSBN&-PLufX*_yziV)a_4Z)y{f9h zVHi+72SLEdGY0~9Krs-Xrir(0%kwU^@qM2F_k@qO`d(JcvJ9(zDI;C*A7c#dNTIHS)!6qvfesQ_+M0k; zngEMXb{t3g?r)8N!N`)0InnuQ6WF$m?0vKGkBuACCHTdUWm&{^T@+8SdECnZ