diff --git a/bundles/org.openhab.ui/web/package-lock.json b/bundles/org.openhab.ui/web/package-lock.json index 8696b34b5a..d29c6ee23d 100644 --- a/bundles/org.openhab.ui/web/package-lock.json +++ b/bundles/org.openhab.ui/web/package-lock.json @@ -10,12 +10,14 @@ "hasInstallScript": true, "license": "EPL-2.0", "dependencies": { - "@blockly/field-slider": "^6.1.4", - "@blockly/plugin-typed-variable-modal": "^7.0.15", - "@blockly/plugin-workspace-search": "^8.1.2", - "@blockly/shadow-block-converter": "^5.0.0", - "@blockly/theme-dark": "^6.0.5", - "@blockly/zoom-to-fit": "^5.0.11", + "@blockly/field-colour": "^5.0.19", + "@blockly/field-multilineinput": "^5.0.17", + "@blockly/field-slider": "^7.0.16", + "@blockly/plugin-typed-variable-modal": "^8.0.16", + "@blockly/plugin-workspace-search": "^9.1.10", + "@blockly/shadow-block-converter": "^6.0.17", + "@blockly/theme-dark": "^7.0.12", + "@blockly/zoom-to-fit": "^6.0.16", "@codemirror/autocomplete": "^6.18.6", "@codemirror/commands": "^6.8.1", "@codemirror/lang-css": "^6.3.1", @@ -34,11 +36,11 @@ "@jsep-plugin/object": "^1.2.1", "@jsep-plugin/regex": "^1.0.3", "@jsep-plugin/template": "^1.0.4", - "@mit-app-inventor/blockly-plugin-workspace-multiselect": "^0.1.12", + "@mit-app-inventor/blockly-plugin-workspace-multiselect": "^1.0.2", "@replit/codemirror-indentation-markers": "^6.5.3", "@uiw/codemirror-theme-gruvbox-dark": "^4.24.2", "@vue-leaflet/vue-leaflet": "^0.10.1", - "blockly": "^10.4.2", + "blockly": "^11.2.2", "codemirror": "^6.0.2", "cronstrue": "^2.50.0", "crypto-browserify": "^3.12.0", @@ -165,6 +167,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "dev": true, @@ -192,6 +207,7 @@ "version": "7.28.4", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -1790,77 +1806,115 @@ "node": ">=6.9.0" } }, + "node_modules/@blockly/field-colour": { + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@blockly/field-colour/-/field-colour-5.0.19.tgz", + "integrity": "sha512-OLqGHTihuqtnZi51lsmd8uhZK+kyf07V9fd0wFQ+dfFhuyVcqrQkKBEE5NvDzdcdSLgdewWMBesGzweo5Q1XCg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "blockly": "^11.0.0" + } + }, + "node_modules/@blockly/field-multilineinput": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/@blockly/field-multilineinput/-/field-multilineinput-5.0.17.tgz", + "integrity": "sha512-kI5dgsJDAggXgkjcKDIwHZ59ZqsVQE+96vT6+FUCjRE82vYp1KAV2/PK9tSBqB2LU8nWUAeBdOT1dD8fOwz5yA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "blockly": "^11.0.0" + } + }, "node_modules/@blockly/field-slider": { - "version": "6.1.10", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@blockly/field-slider/-/field-slider-7.0.16.tgz", + "integrity": "sha512-FsRhdVDuq4n4xJ1NKt+zBUxXOTmGNTja+Nw0beE3PGdMpQHk5NM1AGt3dMMygchPzFm3qf6jt1KlHBBVaRf1nw==", "license": "Apache-2.0", "engines": { "node": ">=8.0.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^11.0.0" } }, "node_modules/@blockly/plugin-modal": { - "version": "6.0.15", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/@blockly/plugin-modal/-/plugin-modal-7.0.16.tgz", + "integrity": "sha512-Xh/BzIWkvHk7RmkhSbjy8nGqDMqB+CMzW7wQrbB7bx1Mt8ENIXXQdeap4uunYpgv9AnTzqLvp5okD8sd5xAm0g==", "license": "Apache 2.0", "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^11.0.0" } }, "node_modules/@blockly/plugin-typed-variable-modal": { - "version": "7.0.15", + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/@blockly/plugin-typed-variable-modal/-/plugin-typed-variable-modal-8.0.16.tgz", + "integrity": "sha512-Xl2cb369orlTgAbIV0I6I+PkhQFP9QTZILGJboizbf8C/QNOxNK17Dib4n1/03UJ+TYqCnW0tSQ+MFMRh1Pi3Q==", "license": "Apache-2.0", "dependencies": { - "@blockly/plugin-modal": "^6.0.15" + "@blockly/plugin-modal": "^7.0.16" }, "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^11.0.0" } }, "node_modules/@blockly/plugin-workspace-search": { - "version": "8.1.8", + "version": "9.1.10", + "resolved": "https://registry.npmjs.org/@blockly/plugin-workspace-search/-/plugin-workspace-search-9.1.10.tgz", + "integrity": "sha512-9fWgrlL5QC+0Cxqc7jtGCiKmVL7kdXKjR9BDxhsoN57BUF95P/38ek8RgvV1NIDo48OjzWtmJtwiGogfMZ24FA==", "license": "Apache-2.0", "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^11.0.0" } }, "node_modules/@blockly/shadow-block-converter": { - "version": "5.0.6", + "version": "6.0.17", + "resolved": "https://registry.npmjs.org/@blockly/shadow-block-converter/-/shadow-block-converter-6.0.17.tgz", + "integrity": "sha512-RUFI28R1ir+BnV4mupCArS4Yk9+uUOTkzzkspN7AO8wiqpJHki4fJSUIKZKgaLh9atLrcxQahQ1WN7X2LoMX8Q==", "license": "Apache-2.0", "engines": { "node": ">=8.0.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^11.0.0" } }, "node_modules/@blockly/theme-dark": { - "version": "6.0.7", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.12.tgz", + "integrity": "sha512-DbRiiwSfVTAbAISnCQ1ismCxqc0lnSvtPL4t526X/m5WsLlMh0GT09ivDcP4ajXyWV4yk70wkhv3RYhZkmXuAQ==", "license": "Apache-2.0", "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^11.0.0" } }, "node_modules/@blockly/zoom-to-fit": { - "version": "5.0.18", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/@blockly/zoom-to-fit/-/zoom-to-fit-6.0.16.tgz", + "integrity": "sha512-4z/YIZAkuCb4Q+F8F1G8dxoXC6ENud1mftClcgD/fe9TtbcJiNR+l/F2s5gyJvx7/heRuAprfoSiK1MuyKR67A==", "license": "Apache-2.0", "engines": { "node": ">=8.17.0" }, "peerDependencies": { - "blockly": "^10.0.0" + "blockly": "^11.0.0" } }, "node_modules/@codemirror/autocomplete": { @@ -1954,6 +2008,7 @@ "node_modules/@codemirror/language": { "version": "6.11.3", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -1991,6 +2046,7 @@ "node_modules/@codemirror/state": { "version": "6.5.2", "license": "MIT", + "peer": true, "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } @@ -1998,6 +2054,7 @@ "node_modules/@codemirror/view": { "version": "6.38.6", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -2029,7 +2086,6 @@ }, "node_modules/@csstools/color-helpers": { "version": "5.1.0", - "dev": true, "funding": [ { "type": "github", @@ -2047,7 +2103,6 @@ }, "node_modules/@csstools/css-calc": { "version": "2.1.4", - "dev": true, "funding": [ { "type": "github", @@ -2069,7 +2124,6 @@ }, "node_modules/@csstools/css-color-parser": { "version": "3.1.0", - "dev": true, "funding": [ { "type": "github", @@ -2095,7 +2149,6 @@ }, "node_modules/@csstools/css-parser-algorithms": { "version": "3.0.5", - "dev": true, "funding": [ { "type": "github", @@ -2107,6 +2160,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2116,7 +2170,6 @@ }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", - "dev": true, "funding": [ { "type": "github", @@ -2128,6 +2181,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2232,6 +2286,7 @@ "version": "7.1.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2637,6 +2692,7 @@ "version": "7.1.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -4315,7 +4371,9 @@ "license": "MIT" }, "node_modules/@mit-app-inventor/blockly-plugin-workspace-multiselect": { - "version": "0.1.12", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mit-app-inventor/blockly-plugin-workspace-multiselect/-/blockly-plugin-workspace-multiselect-1.0.2.tgz", + "integrity": "sha512-uC0E9ZqQ+ru8e9BFbLkHylYrXRQ3NFg7zG04W6X8dfMY9+AnMICXY9lnt8xpLd4Tr4osYNsEGHF4W0a82flzaQ==", "license": "Apache-2.0", "dependencies": { "dragselect": "^2.7.4" @@ -4324,7 +4382,7 @@ "node": ">=8.17.0" }, "peerDependencies": { - "blockly": ">=10.4.0 <= 11" + "blockly": ">=11 <12" } }, "node_modules/@napi-rs/wasm-runtime": { @@ -5551,13 +5609,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/@tsconfig/node22": { "version": "22.0.2", "dev": true, @@ -5613,7 +5664,6 @@ "version": "3.7.7", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -5713,6 +5763,7 @@ "version": "8.46.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.1", "@typescript-eslint/types": "8.46.1", @@ -6788,6 +6839,7 @@ "node_modules/@vue/runtime-core": { "version": "3.5.22", "license": "MIT", + "peer": true, "dependencies": { "@vue/reactivity": "3.5.22", "@vue/shared": "3.5.22" @@ -6856,7 +6908,6 @@ "version": "1.14.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -6865,26 +6916,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -6894,14 +6941,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6913,7 +6958,6 @@ "version": "1.13.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -6922,7 +6966,6 @@ "version": "1.13.2", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -6930,14 +6973,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6953,7 +6994,6 @@ "version": "1.14.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -6966,7 +7006,6 @@ "version": "1.14.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6978,7 +7017,6 @@ "version": "1.14.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -6992,7 +7030,6 @@ "version": "1.14.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -7008,24 +7045,18 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "dev": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "dev": true, "license": "BSD-2-Clause" }, - "node_modules/abab": { - "version": "2.0.6", - "license": "BSD-3-Clause" - }, "node_modules/abbrev": { "version": "2.0.0", "dev": true, @@ -7038,6 +7069,7 @@ "version": "8.15.0", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7049,7 +7081,6 @@ "version": "1.0.4", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" }, @@ -7109,13 +7140,12 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ajv": { @@ -7424,10 +7454,16 @@ } }, "node_modules/blockly": { - "version": "10.4.3", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.2.2.tgz", + "integrity": "sha512-YJW9jMz4qoBXzOOUqxWBOHL35QhOOTAg2a6sVAFJh+/uNTXW0z506JS7qkqZI4PQ9fnUhDqmhF8a0qWSTL1tjg==", "license": "Apache-2.0", + "peer": true, "dependencies": { - "jsdom": "22.1.0" + "jsdom": "25.0.1" + }, + "engines": { + "node": ">=18" } }, "node_modules/bn.js": { @@ -7544,6 +7580,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -7712,7 +7749,6 @@ "version": "1.0.4", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.0" } @@ -7847,6 +7883,7 @@ "node_modules/codemirror": { "version": "6.0.2", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", @@ -8190,6 +8227,7 @@ "version": "7.1.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8280,29 +8318,39 @@ } }, "node_modules/cssstyle": { - "version": "3.0.0", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "license": "MIT" + }, "node_modules/csstype": { "version": "3.1.3", "license": "MIT" }, "node_modules/data-urls": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/data-view-buffer": { @@ -8627,16 +8675,6 @@ "ssr-window": "^4.0.0" } }, - "node_modules/domexception": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/dragselect": { "version": "2.7.4", "license": "MIT" @@ -8941,6 +8979,7 @@ "version": "0.25.10", "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -9023,6 +9062,7 @@ "version": "9.37.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -9485,6 +9525,7 @@ "version": "10.2.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", @@ -10239,8 +10280,7 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "dev": true, - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.2", @@ -10511,36 +10551,41 @@ "license": "Apache-2.0" }, "node_modules/html-encoding-sniffer": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "license": "MIT", "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", + "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==", "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -10560,6 +10605,8 @@ }, "node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -11287,7 +11334,6 @@ "version": "27.5.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11358,38 +11404,38 @@ } }, "node_modules/jsdom": { - "version": "22.1.0", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", + "cssstyle": "^4.1.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.2", + "https-proxy-agent": "^7.0.5", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", + "nwsapi": "^2.2.12", "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", + "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^5.0.0", + "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.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^2.11.2" }, "peerDependenciesMeta": { "canvas": { @@ -11397,6 +11443,15 @@ } } }, + "node_modules/jsdom/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==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, "node_modules/jse-eval": { "version": "1.5.2", "license": "MIT", @@ -11407,6 +11462,7 @@ "node_modules/jsep": { "version": "1.4.0", "license": "MIT", + "peer": true, "engines": { "node": ">= 10.16.0" } @@ -11482,6 +11538,7 @@ "version": "2.4.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "acorn": "^8.5.0", "eslint-visitor-keys": "^3.0.0", @@ -11596,7 +11653,8 @@ }, "node_modules/leaflet": { "version": "1.9.4", - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "peer": true }, "node_modules/leaflet-providers": { "version": "2.0.0", @@ -11890,7 +11948,6 @@ "version": "4.3.1", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.11.5" }, @@ -11969,7 +12026,6 @@ }, "node_modules/lru-cache": { "version": "10.4.3", - "dev": true, "license": "ISC" }, "node_modules/m3u8-parser": { @@ -12040,8 +12096,7 @@ "node_modules/merge-stream": { "version": "2.0.0", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -12322,8 +12377,7 @@ "node_modules/neo-async": { "version": "2.6.2", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.27", @@ -14820,6 +14874,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15607,6 +15662,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -16259,6 +16315,7 @@ "version": "7.1.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -16543,6 +16600,7 @@ "version": "3.6.2", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -16621,16 +16679,6 @@ "dev": true, "license": "ISC" }, - "node_modules/psl": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, "node_modules/public-encrypt": { "version": "4.0.3", "license": "MIT", @@ -16657,6 +16705,7 @@ "node_modules/qrcode": { "version": "1.5.4", "license": "MIT", + "peer": true, "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", @@ -16669,10 +16718,6 @@ "node": ">=10.13.0" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "dev": true, @@ -16918,10 +16963,6 @@ "version": "2.0.0", "license": "ISC" }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" - }, "node_modules/resolve": { "version": "1.22.10", "dev": true, @@ -17111,6 +17152,7 @@ "version": "1.0.0-beta.42", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/types": "=0.94.0", "@rolldown/pluginutils": "1.0.0-beta.42", @@ -17148,6 +17190,7 @@ "version": "4.52.4", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -17411,7 +17454,9 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.6.0", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "license": "MIT" }, "node_modules/run-applescript": { @@ -17545,6 +17590,8 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sax": { @@ -17584,6 +17631,7 @@ "version": "8.17.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -18338,6 +18386,7 @@ "version": "0.64.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@adobe/css-tools": "~4.3.3", "debug": "^4.3.2", @@ -18406,7 +18455,6 @@ "version": "8.1.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -18582,7 +18630,6 @@ "version": "5.3.14", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -18670,6 +18717,24 @@ "node": ">=14.0.0" } }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.5", "dev": true, @@ -18710,33 +18775,27 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { - "version": "4.1.1", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "license": "MIT", "dependencies": { - "punycode": "^2.3.0" + "punycode": "^2.3.1" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/ts-api-utils": { @@ -18955,6 +19014,7 @@ "version": "5.8.3", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19205,14 +19265,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url-toolkit": { "version": "2.2.5", "license": "Apache-2.0" @@ -19267,6 +19319,7 @@ "version": "7.1.16", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/runtime": "0.92.0", "fdir": "^6.5.0", @@ -19679,6 +19732,7 @@ "node_modules/vue": { "version": "3.5.22", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", @@ -19783,6 +19837,7 @@ "version": "10.2.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", @@ -19938,20 +19993,30 @@ "license": "MIT" }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "license": "MIT", "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/w3c-xmlserializer/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==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" } }, "node_modules/watchpack": { "version": "2.4.4", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -19975,6 +20040,8 @@ }, "node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -20032,7 +20099,6 @@ "version": "3.3.3", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" } @@ -20046,7 +20112,6 @@ "version": "5.1.1", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -20059,37 +20124,42 @@ "version": "4.3.0", "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=4.0" } }, "node_modules/whatwg-encoding": { - "version": "2.0.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-url": { - "version": "12.0.1", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "license": "MIT", "dependencies": { - "tr46": "^4.1.1", + "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/which": { @@ -20376,6 +20446,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -20542,6 +20613,7 @@ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -20865,6 +20937,7 @@ }, "node_modules/xml-name-validator": { "version": "4.0.0", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12" @@ -20900,6 +20973,7 @@ "version": "1.3.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", "yaml": "^2.0.0" diff --git a/bundles/org.openhab.ui/web/package.json b/bundles/org.openhab.ui/web/package.json index 0a10f8443c..a4a9217326 100644 --- a/bundles/org.openhab.ui/web/package.json +++ b/bundles/org.openhab.ui/web/package.json @@ -58,12 +58,14 @@ "Samsung >= 5" ], "dependencies": { - "@blockly/field-slider": "^6.1.4", - "@blockly/plugin-typed-variable-modal": "^7.0.15", - "@blockly/plugin-workspace-search": "^8.1.2", - "@blockly/shadow-block-converter": "^5.0.0", - "@blockly/theme-dark": "^6.0.5", - "@blockly/zoom-to-fit": "^5.0.11", + "@blockly/field-colour": "^5.0.19", + "@blockly/field-multilineinput": "^5.0.17", + "@blockly/field-slider": "^7.0.16", + "@blockly/plugin-typed-variable-modal": "^8.0.16", + "@blockly/plugin-workspace-search": "^9.1.10", + "@blockly/shadow-block-converter": "^6.0.17", + "@blockly/theme-dark": "^7.0.12", + "@blockly/zoom-to-fit": "^6.0.16", "@codemirror/autocomplete": "^6.18.6", "@codemirror/commands": "^6.8.1", "@codemirror/lang-css": "^6.3.1", @@ -82,11 +84,11 @@ "@jsep-plugin/object": "^1.2.1", "@jsep-plugin/regex": "^1.0.3", "@jsep-plugin/template": "^1.0.4", - "@mit-app-inventor/blockly-plugin-workspace-multiselect": "^0.1.12", + "@mit-app-inventor/blockly-plugin-workspace-multiselect": "^1.0.2", "@replit/codemirror-indentation-markers": "^6.5.3", "@uiw/codemirror-theme-gruvbox-dark": "^4.24.2", "@vue-leaflet/vue-leaflet": "^0.10.1", - "blockly": "^10.4.2", + "blockly": "^11.2.2", "codemirror": "^6.0.2", "cronstrue": "^2.50.0", "crypto-browserify": "^3.12.0", diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/_tmp/blocks-exec.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/_tmp/blocks-exec.js index 9340455206..1b37679a58 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/_tmp/blocks-exec.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/_tmp/blocks-exec.js @@ -1,5 +1,6 @@ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function defineOHBlocks_Exec (f7) { Blockly.Blocks['oh_exec'] = { @@ -24,7 +25,7 @@ export default function defineOHBlocks_Exec (f7) { javascriptGenerator.forBlock['oh_exec'] = function (block) { let runCommand = block.getFieldValue('execCommand') - const itemName = javascriptGenerator.valueToCode(block, 'sendTo', javascriptGenerator.ORDER_ATOMIC) + const itemName = valueToCode(block, 'sendTo', javascriptGenerator.ORDER_ATOMIC) let code = 'var exec = Java.type("org.openhab.core.model.script.actions.Exec");\n' code += 'var duration = Java.type("java.time.Duration");\n' code += 'var results = exec.executeCommandLine(duration.ofSeconds(1), "' + runCommand + '", "")\n' diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-audio.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-audio.js index 300f8aa49a..5307262c7d 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-audio.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-audio.js @@ -10,9 +10,10 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' import { FieldSlider } from '@blockly/field-slider' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7, sinks, voices) { Blockly.Blocks['oh_volumeslider'] = { @@ -57,8 +58,8 @@ export default function (f7, sinks, voices) { * Code part */ javascriptGenerator.forBlock['oh_playmedia_sink'] = function (block) { - let fileName = javascriptGenerator.valueToCode(block, 'fileName', javascriptGenerator.ORDER_ATOMIC) - let sinkName = javascriptGenerator.valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') + let fileName = valueToCode(block, 'fileName', javascriptGenerator.ORDER_ATOMIC) + let sinkName = valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') return `actions.Audio.playSound(${sinkName}, ${fileName});\n` } @@ -93,9 +94,9 @@ export default function (f7, sinks, voices) { * Code part */ javascriptGenerator.forBlock['oh_playmedia_sink_volume'] = function (block) { - let fileName = javascriptGenerator.valueToCode(block, 'fileName', javascriptGenerator.ORDER_ATOMIC) - let sinkName = javascriptGenerator.valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') - let volume = javascriptGenerator.valueToCode(block, 'volume', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + let fileName = valueToCode(block, 'fileName', javascriptGenerator.ORDER_ATOMIC) + let sinkName = valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') + let volume = valueToCode(block, 'volume', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') return `actions.Audio.playSound(${sinkName}, ${fileName}, (${volume}/100));\n` } @@ -126,8 +127,8 @@ export default function (f7, sinks, voices) { * Blockly part */ javascriptGenerator.forBlock['oh_playstream_sink'] = function (block) { - let url = javascriptGenerator.valueToCode(block, 'url', javascriptGenerator.ORDER_ATOMIC) - let sinkName = javascriptGenerator.valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') + let url = valueToCode(block, 'url', javascriptGenerator.ORDER_ATOMIC) + let sinkName = valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') return `actions.Audio.playStream(${sinkName}, ${url});\n` } @@ -156,7 +157,7 @@ export default function (f7, sinks, voices) { */ javascriptGenerator.forBlock['oh_stopstream_sink'] = function (block) { let url = block.getFieldValue('url') - let sinkName = javascriptGenerator.valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') + let sinkName = valueToCode(block, 'sinkName', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') return `actions.Audio.playStream(${sinkName}, null);\n` } @@ -189,9 +190,9 @@ export default function (f7, sinks, voices) { * Code part */ javascriptGenerator.forBlock['oh_say'] = function (block) { - const textToSay = javascriptGenerator.valueToCode(block, 'textToSay', javascriptGenerator.ORDER_ATOMIC) - const voiceName = javascriptGenerator.valueToCode(block, 'voice', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') - const deviceSink = javascriptGenerator.valueToCode(block, 'deviceSink', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') + const textToSay = valueToCode(block, 'textToSay', javascriptGenerator.ORDER_ATOMIC) + const voiceName = valueToCode(block, 'voice', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') + const deviceSink = valueToCode(block, 'deviceSink', javascriptGenerator.ORDER_ATOMIC).replace('(', '').replace(/[()]/g, '') return `actions.Voice.say(${textToSay}, ${voiceName}, ${deviceSink});\n` } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-color.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-color.js index 5b54731e5a..572a5d2228 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-color.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-color.js @@ -3,9 +3,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from '@/assets/definitions/blockly/utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { blockGetCheckedInputType, valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7) { /* @@ -31,7 +31,7 @@ export default function (f7) { */ javascriptGenerator.forBlock['oh_color_to_hsb'] = function (block) { let conversionFunction = addConvertColourHexToHSB() - const hexColor = javascriptGenerator.valueToCode(block, 'hexColor', javascriptGenerator.ORDER_ATOMIC) + const hexColor = valueToCode(block, 'hexColor', javascriptGenerator.ORDER_ATOMIC) let code = `${conversionFunction}(${hexColor})` return [code, 0] } @@ -65,7 +65,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_color_item'] = function (block) { - const theItem = javascriptGenerator.valueToCode(block, 'item', javascriptGenerator.ORDER_ATOMIC) + const theItem = valueToCode(block, 'item', javascriptGenerator.ORDER_ATOMIC) const inputType = blockGetCheckedInputType(block, 'item') let attributeName = block.getFieldValue('attributeName') diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dateoffsets.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dateoffsets.js index 84fec4ea85..b71f924f28 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dateoffsets.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dateoffsets.js @@ -1,10 +1,10 @@ /** * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' import { FieldDatePicker } from './fields/date-field.js' -import { addDateComparisonSupport } from './utils.js' +import { addDateComparisonSupport, valueToCode } from './utils.js' export default function (f7) { /* @@ -55,7 +55,7 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_dayoffset'] = function (block) { - let offsetValue = javascriptGenerator.valueToCode(block, 'offset', javascriptGenerator.ORDER_ATOMIC) + let offsetValue = valueToCode(block, 'offset', javascriptGenerator.ORDER_ATOMIC) let code = `${offsetValue}` return [code, javascriptGenerator.ORDER_NONE] } @@ -112,7 +112,7 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_zdt_plusminus'] = function (block) { - const offsetValue = javascriptGenerator.valueToCode(block, 'offset', javascriptGenerator.ORDER_ATOMIC) + const offsetValue = valueToCode(block, 'offset', javascriptGenerator.ORDER_ATOMIC) const plusMinus = block.getFieldValue('plusminus') const period = block.getFieldValue('period') @@ -159,12 +159,12 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_zdt_create'] = function (block) { - const year = javascriptGenerator.valueToCode(block, 'year', javascriptGenerator.ORDER_ATOMIC) - const month = javascriptGenerator.valueToCode(block, 'month', javascriptGenerator.ORDER_ATOMIC) - const day = javascriptGenerator.valueToCode(block, 'day', javascriptGenerator.ORDER_ATOMIC) - const hour = javascriptGenerator.valueToCode(block, 'hour', javascriptGenerator.ORDER_ATOMIC) - const minute = javascriptGenerator.valueToCode(block, 'minute', javascriptGenerator.ORDER_ATOMIC) - const second = javascriptGenerator.valueToCode(block, 'second', javascriptGenerator.ORDER_ATOMIC) + const year = valueToCode(block, 'year', javascriptGenerator.ORDER_ATOMIC) + const month = valueToCode(block, 'month', javascriptGenerator.ORDER_ATOMIC) + const day = valueToCode(block, 'day', javascriptGenerator.ORDER_ATOMIC) + const hour = valueToCode(block, 'hour', javascriptGenerator.ORDER_ATOMIC) + const minute = valueToCode(block, 'minute', javascriptGenerator.ORDER_ATOMIC) + const second = valueToCode(block, 'second', javascriptGenerator.ORDER_ATOMIC) const code = `time.ZonedDateTime.now().withYear(${year}).withMonth(${month}).withDayOfMonth(${day}).withHour(${hour}).withMinute(${minute}).withSecond(${second}).withNano(0)` return [code, javascriptGenerator.ORDER_ATOMIC] @@ -233,7 +233,7 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_zdt_fromText'] = function (block) { - const day = javascriptGenerator.valueToCode(block, 'day', javascriptGenerator.ORDER_ATOMIC) + const day = valueToCode(block, 'day', javascriptGenerator.ORDER_ATOMIC) return [`time.toZDT(${day})`, javascriptGenerator.ORDER_NONE] } @@ -259,7 +259,7 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_zdt_fromItem'] = function (block) { - const itemName = javascriptGenerator.valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) + const itemName = valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) return [`time.toZDT(items.getItem(${itemName}))`, javascriptGenerator.ORDER_NONE] } @@ -496,7 +496,7 @@ export default function (f7) { for (i = 0; i < this.itemCount_; i++) { if (!this.getInput('ADD' + i)) { let input = this.appendValueInput('ADD' + i) - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck('zdtTemporalUnit') if (i === 0) { input.appendField(new Blockly.FieldDropdown([['set', 'with'], ['add', 'plus'], ['subtract', 'minus']]), 'operation') diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js index 148f57d7cf..99bc678db1 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-dicts.js @@ -2,9 +2,13 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from '@/assets/definitions/blockly/utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { + blockGetCheckedInputType, + statementToCode, + valueToCode +} from '@/assets/definitions/blockly/utils.js' export default function (f7) { Blockly.Blocks['dicts_create_with'] = { @@ -121,7 +125,7 @@ export default function (f7) { for (i = 0; i < this.itemCount_; i++) { if (!this.getInput('ADD' + i)) { let input = this.appendValueInput('ADD' + i) - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) if (i === 0) { input.appendField('dictionary of') } @@ -172,7 +176,7 @@ export default function (f7) { let elements = new Array(block.itemCount_) for (let i = 0; i < block.itemCount_; i++) { elements[i] = '\'' + block.getFieldValue('KEY' + i) + '\': ' - elements[i] += javascriptGenerator.valueToCode(block, 'ADD' + i, + elements[i] += valueToCode(block, 'ADD' + i, javascriptGenerator.ORDER_NONE) || 'null' } let code = '{' + elements.join(', ') + '}' @@ -205,9 +209,9 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['dicts_get'] = function (block) { - const key = javascriptGenerator.valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) + const key = valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) // note: even though the dict can be directly used without a variable, we need to keep the variable name as "varName" for backwards compatibility - let varName = javascriptGenerator.valueToCode(block, 'varName', javascriptGenerator.ORDER_ATOMIC) + let varName = valueToCode(block, 'varName', javascriptGenerator.ORDER_ATOMIC) const varNameType = blockGetCheckedInputType(block, 'varName') if (varNameType !== 'Dictionary') { varName = varName.replace(/'/g, '') @@ -238,12 +242,12 @@ export default function (f7) { } javascriptGenerator.forBlock['dicts_set'] = function (block) { - const dict = javascriptGenerator.valueToCode(block, 'dictionary', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') - const key = javascriptGenerator.valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) + const dict = valueToCode(block, 'dictionary', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + const key = valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) if (dict === '' || key === '\'\'') { throw new Error('dictionary and key name need to be provided') } - const value = javascriptGenerator.valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + const value = valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') let code = `${dict}[${key}] = '${value}';\n` return code } @@ -282,8 +286,8 @@ export default function (f7) { */ javascriptGenerator.forBlock['dicts_for'] = function (block) { const loopVar = block.getField('loopVar').getVariable().name - const dict = javascriptGenerator.valueToCode(block, 'dict', javascriptGenerator.ORDER_ATOMIC) - const dictForCode = javascriptGenerator.statementToCode(block, 'dictForCode') + const dict = valueToCode(block, 'dict', javascriptGenerator.ORDER_ATOMIC) + const dictForCode = statementToCode(block, 'dictForCode') const dictCheck = block.getInput('dict').connection.targetBlock().outputConnection.getCheck() const dictType = (dictCheck) ? block.getInput('dict').connection.targetBlock().outputConnection.getCheck()[0] : '' diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-ephemeris.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-ephemeris.js index 1d16037941..c03b91cd27 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-ephemeris.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-ephemeris.js @@ -6,8 +6,9 @@ * See usage discussion here: https://community.openhab.org/t/wip-ephemeris-documentation/84536 * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7) { /* @@ -38,7 +39,7 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_ephemeris_check'] = function (block) { - const dayInfo = javascriptGenerator.valueToCode(block, 'dayInfo', javascriptGenerator.ORDER_NONE) + const dayInfo = valueToCode(block, 'dayInfo', javascriptGenerator.ORDER_NONE) const checkType = block.getFieldValue('checkType') let code = '' @@ -79,7 +80,7 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_ephemeris_getHolidayName'] = function (block) { - const dayInfo = javascriptGenerator.valueToCode(block, 'dayInfo', javascriptGenerator.ORDER_NONE) + const dayInfo = valueToCode(block, 'dayInfo', javascriptGenerator.ORDER_NONE) return [`actions.Ephemeris.getBankHolidayName(${dayInfo})`, javascriptGenerator.ORDER_NONE] } @@ -105,7 +106,7 @@ export default function (f7) { * Code part */ javascriptGenerator.forBlock['oh_ephemeris_getDaysUntilHoliday'] = function (block) { - const holidayName = javascriptGenerator.valueToCode(block, 'holidayName', javascriptGenerator.ORDER_NONE) + const holidayName = valueToCode(block, 'holidayName', javascriptGenerator.ORDER_NONE) return [`actions.Ephemeris.getDaysUntil(${holidayName})`, javascriptGenerator.ORDER_NONE] } } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-eventbus.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-eventbus.js index fe9ec4a139..62c07fef49 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-eventbus.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-eventbus.js @@ -3,9 +3,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from './utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { blockGetCheckedInputType, valueToCode } from './utils.js' export default function (f7) { /* @@ -19,7 +19,7 @@ export default function (f7) { .appendField(new Blockly.FieldDropdown([['send command', 'sendCommand'], ['post update', 'postUpdate']]), 'eventType') this.appendValueInput('itemName') .appendField('to') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck(['String', 'oh_item', 'oh_itemtype']) this.setInputsInline(true) this.setPreviousStatement(true, null) @@ -32,8 +32,8 @@ export default function (f7) { javascriptGenerator.forBlock['oh_event'] = function (block) { const eventType = block.getFieldValue('eventType') - const itemName = javascriptGenerator.valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) - const value = javascriptGenerator.valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC) + const itemName = valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) + const value = valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC) const inputType = blockGetCheckedInputType(block, 'itemName') diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-http.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-http.js index b065fb01eb..aa0bd579f3 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-http.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-http.js @@ -2,8 +2,9 @@ * Adds HTTP blocks */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7) { const timeoutImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAhCAYAAAC4JqlRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAK1UlEQVRYhcWYaXAT5xnH/3voXMmyJFs+ZCPJ4LsIm8MMbQiEhGAYjiFpDuIpR5qSQkiYtGnaJCSQZNpMCk1MScKRcAYYmhQwhgEDtTmSYohxIECNDYlt+TaWJaNrpdXuvv0gW1yh0295ZvbLM7P7/PY5/s+7SxFC8FMa/ZNGB8ACQGqq5Q4nz/NwOByJycnJyS6X63p+fj4aGhpQWFgIlmULJkyYMHXatOljCwoKrDRNM21tbX2nTp28UlVVVR0KBb9qaroGq9WKhIQE9Pe7wfM8vF4vQqEQKIqKx2lv7wRFCMHEiQ/EnRQFNDe3YN26dbtLS6c/UlhYYMnOHkHPmjX7zUWLFr3CcTodAHR1dd1oaWm+IQiCZLPZTTabLZNhGADA/v379xw6dPCPtbW1bTodB5Zl4Xa7fxSABYCMDOtt70+BEKCkZHzJ8ePH9k+dOnXOxo2bKgBg796967Zs2bwtKcn8rVqtRkPDf+D3BzF69GjEoDrtpaUzHl+wYP4f5s6d69q/f9+Ot99etaCrqwsJCQk/WgKKEIKZM2fEHaIoIhzmsXv3P1pkWVampaUnfvDBmpW7du1ck5aWhqamJkybVgq73Y76+jr4fAGMHz8ekUgEFRX7YDKZwfMhjBkz7onPPtv8hSRJ0pQpk7NPn/66xWbLgCTJ92bA5XLFnR5PP/LyCuzp6el2AFizZvWy8vIPPw4Gg4hGo6AoCrIs4/TpU7hy5TK0Wi0IkZCTkwuzORkOhwMeTz8OHar8sqjISX3yyfqqU6e+ai4tfXTC0aPHz9rtmRBFKR6PBgBZluMXw7AIBgOhmprqL1pbWxqXLn3hb52d3WTt2rWbm5qugaIoHDxYicOHq0BRDJOYaGSvX7+GmppqhEJByLIMlmWRnZ0DrVaLKVMmlx4/fnxvVdWx2qysrPTW1nYAFCRJulUCozERFAXQNA1JksCyLLKyspCXl4/MzExzIOAf39/viRw//q/q9PQ0pKWloqWlFStWrFg9alRR6eOPzx2ZnGwBIMNiSUUkEsHAgBcmkwn19fXo6urB+fN1Z5zOUcUqlVJjNpuh1WrgcrXHMqDTcdBoNGBZFizLguM4ZGZmQqfTIRAI9FdUVBw+cuRwNSEESUlm5ORkw2YbBofDkZKRkTHcYEiE0WiE2ZwMQoCBgQEolUp0dnaCEAKO0+Khhyb/XKFQqHfu3Lne7e4HyzK3SpCamgKHwwGapnG7MrIsC61Wi5SUFOh0ephMRmRkWOHxeBAOh+H3+4N+v98rSRJEUYQoiohGBSQmJqKvrw/d3d3QaDSwWtPh9wfx6quvPPvMM2W/zcvLUQWD/C0AiqKgVCrBsgrIsgxCCFQqdXwqZFlGOByGw2GHVsvd0UR3myzLUCqVMBqNsFgsMJvNMBgMKCoaha1bt26VJBErV65a4/P5bgEQQgabgoBhGCiVSnR3d+Hs2TM4f74ODocDNpsNra2tCAaDUCqV9wWICQ0FiqLh9Xrh9Q5gYGAAPB+C2+3B5s2bP3z66XnLUlIsNDAoxUNGCAFN02BZFp2dHWAYBgzDQqfTITHRgJaWZnR0dCAjIwO3Cdo9JggR6HQ65OcXDELF/AaDARcvXtgB4OXZs+dMBXCUHUrb0FgMgahUKlAUBZqmIQgCwuEwGIYBz/MIBAIghEAUJV4URZGmaXAcd0f/xO6LQJLkuPwajUY0N7dclGUZs2fPeSQO4Ha7kZBggCAIIIRAEATQNAWfz4dwOAKDwTCYTi+GBCkaFUHTdJJer+c8Hg8EQYBCobijF0wmI5RKZVz9ZFmG1zuAjo4Oobi42BEvwYYNmz60WCwTy8rKpvT13fAlJycjEAhi1aq335s3r2w5x3EUIURx8+ZNRqPREJVKRQWDQXAcBwB4+OEpc7Zt23bAbnfEASRJglqtuq2/AEJk+Hw34fV6AykpKYlxgOnTZ4wFMMbpHJnc1tbmkyQRvb09aGi4WldRsX+9x9NPQiFeyszMjAwMDIS+//57UlJSIhUUFD5AiJx24cKFSxzHIRoVBt+UgJBY6iUpprBDGaAoCgqFQgmQCDCohPX158vHjBm7fMmS58dfunTpG5ZV4OLFenCcHuEwD683NjLZ2cPh891Eb68bTz31JARBQGdnBy5d+g46nR6EEFAUhVAoiGHDbMjNzUM4zMezIooiQiEeR48eI11dnVtyc/N+TQNAdXX1GQAoKiqeEI2KsNlsyM8vhMGQgOHDs5GVZYPZbITNZoPd7oBSySI1NQ1GoxEmkym+almWBSEEBkMirNYM8HwI0agYv3w+PywWS4per8fp01/VAYM6UFGx/0hbW1v7uHHjnrhy5QquXm1AIOCHWq0GcL8zY2xkaZoeHDUKoigiGAwiIcEAn+8murt74Ha74Xa70d/fj6amJhQUFDwKAPv2/bMiDlBXd96/deuWd0ePHvMLgyEBHo8HAAW1WgtCCGSZQBTF+4DEgvM8D5qm4XQ6oVQqEAqFwLIMaJoCTVNgGBqBQAALFy56raGh4XJNzYmeOIBWq8WmTRs/BYA33ljxusvlglqtRigUHHwQC41GA1kmCIfDEAQRHMdBq9VCoVAgHI5Aq9Vi0qTJKCoqhlqthkKhgM/nhyAIiEajaG11Yfz4kpScnJz8t95a8ZshyaAIIbDbh8HlasfGjRv+snjx868lJiZQDMPCYEhAJBJBdvYI6HR6CIKAlJRUnDt3DtnZ2aAoIBAIoKOjHenp6cjJycfNmwMYGPCC4zicPHkKSqUCNE2jt7cPjY1XG00ms95isVjT01PQ2dkTywDLMkhLS8GyZS+8DoBUVh485vF40dXVjWHDbEhIMECWY3vCarXCbnfghx9+QH19PZqaGmE0miBJMiKRMCiKQjQaBcOwyM3NgVarQW9vH5Yvf3F+bm5e7qxZMx9SKhXxZUcDQDAYAk3TiEYljBlTnPfgg5Omrl1b/l4kIsBiSY6flggh4HkePB8Cx3FQq9VgGAaiKOLuD5xIJAydTg+e5zF79qyJ5eV/375y5Vu/P3fum2tJSWaEQretYyCmXOnpqfj224vXFi6c/+RLLy3/0/bt2965dOk7uN1uDB25724+6ke2EsMwEAQBtbVn8Nhjv5x04EDl6T179ux45513P7BYkkFRVPx58XU8JJkWSxK2b//8y8WLn5sxf/6CNw8dOnJOrVYbr15tgN/vv29QAPHFdf36dXi9XpSXr127fv2Gk7t27Vw9b968BSqVEjQdK5EoRm814e1fRoQQKJUKiKIEp9OZu337jtOpqWmWLVs2f1RZeeDPCoWi5+uv/w1RFBEI+CAIUZhMJtA0hZycPJjNZjY7e8Rz77+/upymadXSpUt+VVl5YKder0d3d/egtsSsp+fGvQCyLEOhYJGfX4hr1xqh1xtQVla27OWXf/dXjUajaW9v666tra26fPlyXVNTY4cgCJLDkZU0cuTPnGPHjnvU6Rw1EgA+/3zHpx9//NGLjY2NkZKSEvT09MLlaoVGo/n/AEaMyIEgRKBSqXHjRi+MRiOKi0fPXLJk6bM2m22yRqMx3t4XoVBI6Ovrq9u9e9eus2fPbr56tUHQajmo1Sro9Xr09PSirc11D8AdJ6K7LQajgNVqRVdXF2pqqg/l5ua2qdWqR5zOUc6xY8elMwzDNDc39584caIxHA6frKqqqvF6PUhNTQUhsWn4X0b91P8H/gthGyI1+/EU3AAAAABJRU5ErkJggg==' @@ -219,9 +220,9 @@ export default function (f7) { javascriptGenerator.forBlock['oh_httprequest'] = function (block, generator) { const requestType = block.getFieldValue('requestType') - let url = javascriptGenerator.valueToCode(block, 'url', javascriptGenerator.ORDER_ATOMIC) + let url = valueToCode(block, 'url', javascriptGenerator.ORDER_ATOMIC) - const query = javascriptGenerator.valueToCode(block, 'query', javascriptGenerator.ORDER_ATOMIC) + const query = valueToCode(block, 'query', javascriptGenerator.ORDER_ATOMIC) if (query) { const queryEncodeFunction = encodeParams(query) url = `${url} + '?' + ${queryEncodeFunction}(${query})` @@ -229,7 +230,7 @@ export default function (f7) { const contentType = block.getFieldValue('contentType') - let payload = javascriptGenerator.valueToCode(block, 'payload', javascriptGenerator.ORDER_ATOMIC) + let payload = valueToCode(block, 'payload', javascriptGenerator.ORDER_ATOMIC) if (payload) { if (contentType === 'application/x-www-form-urlencoded') { const payloadEncodeFunction = encodeParams(payload) @@ -240,8 +241,8 @@ export default function (f7) { } } - const headers = javascriptGenerator.valueToCode(block, 'requestHeader', javascriptGenerator.ORDER_ATOMIC) - const timeout = javascriptGenerator.valueToCode(block, 'timeoutInput', javascriptGenerator.ORDER_ATOMIC) || 3000 + const headers = valueToCode(block, 'requestHeader', javascriptGenerator.ORDER_ATOMIC) + const timeout = valueToCode(block, 'timeoutInput', javascriptGenerator.ORDER_ATOMIC) || 3000 let code = '' if (payload) { diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-items.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-items.js index e533eb1aeb..de5061ee11 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-items.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-items.js @@ -3,10 +3,10 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' import { FieldItemModelPicker } from './fields/item-field.js' -import { blockGetCheckedInputType } from './utils.js' +import { blockGetCheckedInputType, valueToCode } from './utils.js' import api from '@/js/openhab/api' @@ -79,7 +79,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_groupmembers'] = function (block) { - const groupName = javascriptGenerator.valueToCode(block, 'groupName', javascriptGenerator.ORDER_ATOMIC) + const groupName = valueToCode(block, 'groupName', javascriptGenerator.ORDER_ATOMIC) return [`items.getItem(${groupName}).members`, 0] } @@ -99,7 +99,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_taggeditems'] = function (block) { - let tagNames = javascriptGenerator.valueToCode(block, 'tagName', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + let tagNames = valueToCode(block, 'tagName', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') const inputType = blockGetCheckedInputType(block, 'tagName') let tags = '' if (inputType === '') { @@ -134,7 +134,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_getitem'] = function (block) { - const itemName = javascriptGenerator.valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) + const itemName = valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) return [`items.getItem(${itemName})`, 0] } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-list.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-list.js index ddf0c59a1c..8faa13e44d 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-list.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-list.js @@ -2,8 +2,9 @@ * Adds new blocks to the list section * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7) { /* @@ -17,7 +18,7 @@ export default function (f7) { .setCheck('Array') this.appendValueInput('list2') .appendField('to') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck('Array') this.setInputsInline(true) this.setOutput(true, 'Array') @@ -28,8 +29,8 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_list_concatenate'] = function (block) { - const list1 = javascriptGenerator.valueToCode(block, 'list1', javascriptGenerator.ORDER_ATOMIC) - const list2 = javascriptGenerator.valueToCode(block, 'list2', javascriptGenerator.ORDER_ATOMIC) + const list1 = valueToCode(block, 'list1', javascriptGenerator.ORDER_ATOMIC) + const list2 = valueToCode(block, 'list2', javascriptGenerator.ORDER_ATOMIC) const code = list1 + '.concat(' + list2 + ')' return [code, 0] } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logging.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logging.js index b6bf080b37..bc02f68cb5 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logging.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logging.js @@ -3,8 +3,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7) { Blockly.Blocks['oh_print'] = { @@ -20,7 +21,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_print'] = function (block) { - const message = javascriptGenerator.valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) + const message = valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) return `console.log(${message});\n` } @@ -38,7 +39,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_log'] = function (block) { - const message = javascriptGenerator.valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) + const message = valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) const severity = block.getFieldValue('severity') return `console.${severity}(${message});\n` } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logic.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logic.js index bced436d64..ba1be5aa45 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logic.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-logic.js @@ -2,8 +2,9 @@ * Adds new blocks to the logic section */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7) { /* @@ -131,7 +132,7 @@ export default function (f7) { if (i > 1) { code += ' ' + operator + ' ' } - let input = javascriptGenerator.valueToCode(block, 'OPER' + i, javascriptGenerator.ORDER_ATOMIC) || 'false' + let input = valueToCode(block, 'OPER' + i, javascriptGenerator.ORDER_ATOMIC) || 'false' code += '(' + input + ')' } return [code, javascriptGenerator.ORDER_ATOMIC] diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-math.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-math.js index 2f1cec7479..d98f86de0d 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-math.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-math.js @@ -2,9 +2,9 @@ * Adds new bitwise operator blocks to the math section */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from './utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { blockGetCheckedInputType, valueToCode } from './utils.js' export default function (f7) { Blockly.Blocks['oh_toNumber'] = { @@ -21,7 +21,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_toNumber'] = function (block) { - const value = javascriptGenerator.valueToCode(block, 'valueAsText', javascriptGenerator.ORDER_FUNCTION_CALL) + const value = valueToCode(block, 'valueAsText', javascriptGenerator.ORDER_FUNCTION_CALL) return [`parseFloat(${value})`, 0] } @@ -39,7 +39,7 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_bit_not'] = function (block) { - const value = javascriptGenerator.valueToCode(block, 'value', javascriptGenerator.ORDER_BITWISE_NOT) + const value = valueToCode(block, 'value', javascriptGenerator.ORDER_BITWISE_NOT) return [`~${value}`, 0] } @@ -75,8 +75,8 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_bitwise'] = function (block) { - const first = javascriptGenerator.valueToCode(block, 'first', javascriptGenerator.ORDER_BITWISE_SHIFT) - const second = javascriptGenerator.valueToCode(block, 'second', javascriptGenerator.ORDER_NONE) + const first = valueToCode(block, 'first', javascriptGenerator.ORDER_BITWISE_SHIFT) + const second = valueToCode(block, 'second', javascriptGenerator.ORDER_NONE) const operand = block.getFieldValue('operand') let parentheses = 0 @@ -148,7 +148,7 @@ export default function (f7) { javascriptGenerator.forBlock['math_round'] = function (block) { const inputType = blockGetCheckedInputType(block, 'NUM') - const math_number_input = javascriptGenerator.valueToCode(block, 'NUM', javascriptGenerator.ORDER_FUNCTION_CALL) + const math_number_input = valueToCode(block, 'NUM', javascriptGenerator.ORDER_FUNCTION_CALL) let math_number = math_number_input if (inputType === 'oh_quantity') { math_number = math_number_input + '.float' diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-metadata.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-metadata.js index 2a016c8687..2c3d1f9434 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-metadata.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-metadata.js @@ -3,9 +3,9 @@ * Note that the blocks are only support for GraalVM together with the JSScripting library */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { addGetItemMetaConfigValue } from './utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { addGetItemMetaConfigValue, valueToCode } from './utils.js' export default function (f7) { /* @@ -29,8 +29,8 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_get_meta_value'] = function (block) { - const theItem = javascriptGenerator.valueToCode(block, 'theItem', javascriptGenerator.ORDER_ATOMIC) - const namespace = javascriptGenerator.valueToCode(block, 'namespace', javascriptGenerator.ORDER_ATOMIC) + const theItem = valueToCode(block, 'theItem', javascriptGenerator.ORDER_ATOMIC) + const namespace = valueToCode(block, 'namespace', javascriptGenerator.ORDER_ATOMIC) return [`(items.metadata.getMetadata(${theItem}, ${namespace}) !== null) ? (items.metadata.getMetadata(${theItem}, ${namespace}).value) : 'undefined'`, javascriptGenerator.ORDER_CONDITIONAL] } @@ -59,8 +59,8 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_get_meta_config'] = function (block) { - const configKey = javascriptGenerator.valueToCode(block, 'configKey', javascriptGenerator.ORDER_ATOMIC) - const theItem = javascriptGenerator.valueToCode(block, 'theItem', javascriptGenerator.ORDER_ATOMIC) + const configKey = valueToCode(block, 'configKey', javascriptGenerator.ORDER_ATOMIC) + const theItem = valueToCode(block, 'theItem', javascriptGenerator.ORDER_ATOMIC) const namespace = javascriptGenerator.valueToCode(block, 'namespace', javascriptGenerator.ORDER_ATOMIC) addGetItemMetaConfigValue() return [`getItemMetaConfigValue(${theItem}, ${namespace}, ${configKey})`, javascriptGenerator.ORDER_CONDITIONAL] diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js index a30a914814..ce2321cd9b 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js @@ -3,9 +3,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from './utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { blockGetCheckedInputType, valueToCode } from './utils.js' export default function defineOHBlocks_Notifications (f7) { Blockly.Blocks['oh_sendNotification'] = { @@ -24,8 +24,8 @@ export default function defineOHBlocks_Notifications (f7) { } javascriptGenerator.forBlock['oh_sendNotification'] = function (block) { - const email = javascriptGenerator.valueToCode(block, 'email', javascriptGenerator.ORDER_ATOMIC) - const message = javascriptGenerator.valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) + const email = valueToCode(block, 'email', javascriptGenerator.ORDER_ATOMIC) + const message = valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) return `actions.notificationBuilder(${message}).addUserId(${email}).send();\n` } @@ -49,8 +49,8 @@ export default function defineOHBlocks_Notifications (f7) { } javascriptGenerator.forBlock['oh_sendBroadcastNotification'] = function (block) { - const message = javascriptGenerator.valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) - const icon = javascriptGenerator.valueToCode(block, 'icon', javascriptGenerator.ORDER_ATOMIC) + const message = valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) + const icon = valueToCode(block, 'icon', javascriptGenerator.ORDER_ATOMIC) const severity = block.getFieldValue('severity') return `actions.notificationBuilder(${message}).withIcon(${icon}).withTag('${severity}').send();\n` } @@ -75,8 +75,8 @@ export default function defineOHBlocks_Notifications (f7) { } javascriptGenerator.forBlock['oh_sendLogNotification'] = function (block) { - const message = javascriptGenerator.valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) - const icon = javascriptGenerator.valueToCode(block, 'icon', javascriptGenerator.ORDER_ATOMIC) + const message = valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) + const icon = valueToCode(block, 'icon', javascriptGenerator.ORDER_ATOMIC) const severity = block.getFieldValue('severity') return `actions.notificationBuilder(${message}).logOnly().withIcon(${icon}).withTag('${severity}').send();\n` } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-persistence.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-persistence.js index 44ca2dc10f..44a70f7e67 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-persistence.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-persistence.js @@ -2,9 +2,9 @@ * These blocks support the persistence module which stores the data in the database and allows to retrieve historical and statistical data * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from './utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { blockGetCheckedInputType, valueToCode } from './utils.js' export default function defineOHBlocks_Persistence (f7, persistenceServices) { /* @@ -38,7 +38,7 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { this.methodName = this.getFieldValue('methodName') this.appendValueInput('itemName') .appendField('of item') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck(['String', 'oh_item', 'oh_itemtype']) this.appendValueInput('persistenceName') .appendField('from') @@ -127,7 +127,7 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { this.appendDummyInput('returnTypeInput') .appendField('as') .appendField(new Blockly.FieldDropdown(this.returnTypeNames()), 'returnTypeName') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) this.moveInputBefore('returnTypeInput', 'itemName') } @@ -149,7 +149,7 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { if (!this.getInput('skipPrevious')) { this.appendValueInput('skipPrevious') .appendField('skip same ') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck(['Boolean']) this.getInput('skipPrevious').setShadowDom( Blockly.utils.xml.textToDom(` @@ -295,19 +295,19 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { * Code part */ javascriptGenerator.forBlock['oh_get_persistvalue'] = function (block) { - const itemName = javascriptGenerator.valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) + const itemName = valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) const inputType = blockGetCheckedInputType(block, 'itemName') const methodName = block.getFieldValue('methodName') const returnTypeName = block.getFieldValue('returnTypeName') - const persistenceName = javascriptGenerator.valueToCode(block, 'persistenceName', javascriptGenerator.ORDER_NONE) + const persistenceName = valueToCode(block, 'persistenceName', javascriptGenerator.ORDER_NONE) const itemCode = generateItemCode(itemName, inputType) let code = '' - const dayInfoSince = javascriptGenerator.valueToCode(block, 'dayInfoSince', javascriptGenerator.ORDER_NONE) - const dayInfoUntil = javascriptGenerator.valueToCode(block, 'dayInfoUntil', javascriptGenerator.ORDER_NONE) + const dayInfoSince = valueToCode(block, 'dayInfoSince', javascriptGenerator.ORDER_NONE) + const dayInfoUntil = valueToCode(block, 'dayInfoUntil', javascriptGenerator.ORDER_NONE) const dayInfo = dayInfoSince + ((dayInfoSince && dayInfoUntil) ? ', ' : '') + dayInfoUntil - let skipPrevious = javascriptGenerator.valueToCode(block, 'skipPrevious', javascriptGenerator.ORDER_NONE) + let skipPrevious = valueToCode(block, 'skipPrevious', javascriptGenerator.ORDER_NONE) skipPrevious = (skipPrevious === 'undefined') ? false : skipPrevious let riemannType = block.getFieldValue('riemannType') @@ -393,7 +393,7 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { Blockly.Blocks['oh_persist_changed'] = { init: function () { this.appendValueInput('itemName') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .appendField('the state of') .setCheck(['String', 'oh_item', 'oh_itemtype']) const persistenceNameInput = this.appendValueInput('persistenceName') @@ -407,7 +407,7 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { ['has changed since', 'changedSince'], ['will have changed until', 'changedUntil'], ['changes between', 'changedBetween'], ['has been updated since', 'updatedSince'], ['will have been updated until', 'updatedUntil'], ['is updated between', 'updatedBetween'] ], this.handleTypeSelection.bind(this)), 'methodName') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck(['ZonedDateTime']) this.methodName = this.getFieldValue('methodName') @@ -465,12 +465,12 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { * Code part */ javascriptGenerator.forBlock['oh_persist_changed'] = function (block) { - const itemName = javascriptGenerator.valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) + const itemName = valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC) const inputType = blockGetCheckedInputType(block, 'itemName') const methodName = block.getFieldValue('methodName') - const dayInfo1 = javascriptGenerator.valueToCode(block, 'dayInfo', javascriptGenerator.ORDER_NONE) - const dayInfo2 = methodName.endsWith('Between') ? javascriptGenerator.valueToCode(block, 'dayInfo2', javascriptGenerator.ORDER_NONE) : undefined + const dayInfo1 = valueToCode(block, 'dayInfo', javascriptGenerator.ORDER_NONE) + const dayInfo2 = methodName.endsWith('Between') ? valueToCode(block, 'dayInfo2', javascriptGenerator.ORDER_NONE) : undefined const dayInfo = dayInfo2 ? `${dayInfo1}, ${dayInfo2}` : dayInfo1 const persistenceName = javascriptGenerator.valueToCode(block, 'persistenceName', javascriptGenerator.ORDER_NONE) const persistenceExtension = (persistenceName === '\'default\'') ? '' : `, ${persistenceName}` @@ -553,7 +553,7 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { `)) this.appendValueInput('itemName') .appendField('for item') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck(['String', 'oh_item', 'oh_itemtype']) const persistenceNameInput = this.appendValueInput('persistenceName') .appendField('to') @@ -702,7 +702,7 @@ export default function defineOHBlocks_Persistence (f7, persistenceServices) { this.methodName = this.getFieldValue('methodName') this.appendValueInput('itemName') .appendField('of item') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck(['String', 'oh_item', 'oh_itemtype']) this.appendValueInput('persistenceName') .appendField('from') diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-scripts.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-scripts.js index 333db13b80..085dbab37c 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-scripts.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-scripts.js @@ -5,9 +5,10 @@ * Additionally there is a block that allows transformations based on the Map-File functionality, regular-expressions and applying JSON-paths * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from '@/assets/definitions/blockly/utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { blockGetCheckedInputType, valueToCode } from '@/assets/definitions/blockly/utils.js' +import { registerFieldMultilineInput, FieldMultilineInput } from '@blockly/field-multilineinput' export default function defineOHBlocks_Scripts (f7, transformationServices) { /* @@ -33,7 +34,7 @@ export default function defineOHBlocks_Scripts (f7, transformationServices) { * Code part */ javascriptGenerator.forBlock['oh_callscriptfile'] = function (block) { - const scriptfile = javascriptGenerator.valueToCode(block, 'scriptfile', javascriptGenerator.ORDER_ATOMIC) + const scriptfile = valueToCode(block, 'scriptfile', javascriptGenerator.ORDER_ATOMIC) return `actions.ScriptExecution.callScript(${scriptfile});\n` } @@ -65,8 +66,8 @@ export default function defineOHBlocks_Scripts (f7, transformationServices) { * Code part */ javascriptGenerator.forBlock['oh_runrule'] = function (block) { - const ruleUID = javascriptGenerator.valueToCode(block, 'ruleUID', javascriptGenerator.ORDER_ATOMIC) - const scriptParameters = javascriptGenerator.valueToCode(block, 'parameters', javascriptGenerator.ORDER_ATOMIC) + const ruleUID = valueToCode(block, 'ruleUID', javascriptGenerator.ORDER_ATOMIC) + const scriptParameters = valueToCode(block, 'parameters', javascriptGenerator.ORDER_ATOMIC) return `rules.runRule(${ruleUID}, ${scriptParameters});\n` } @@ -81,7 +82,7 @@ export default function defineOHBlocks_Scripts (f7, transformationServices) { Blockly.Blocks['oh_transformation'] = { init: function () { this.appendValueInput('value') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .appendField('transform') this.appendValueInput('function') .appendField('apply') @@ -129,8 +130,8 @@ export default function defineOHBlocks_Scripts (f7, transformationServices) { */ javascriptGenerator.forBlock['oh_transformation'] = function (block) { const transformationType = block.getFieldValue('type') - const transformationFunction = javascriptGenerator.valueToCode(block, 'function', javascriptGenerator.ORDER_ATOMIC) - const transformationValue = javascriptGenerator.valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC) + const transformationFunction = valueToCode(block, 'function', javascriptGenerator.ORDER_ATOMIC) + const transformationValue = valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC) return [`actions.Transformation.transform('${transformationType}', ${transformationFunction}, ${transformationValue})`, 0] } @@ -309,7 +310,7 @@ export default function defineOHBlocks_Scripts (f7, transformationServices) { * Code part */ javascriptGenerator.forBlock['oh_context_attribute'] = function (block) { - const key = javascriptGenerator.valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) + const key = valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) let code = `ctx[${key}]` return [code, 0] } @@ -318,13 +319,14 @@ export default function defineOHBlocks_Scripts (f7, transformationServices) { * Allows inlining arbitrary code * Blockly part */ + registerFieldMultilineInput() Blockly.Blocks['oh_script_inline'] = { init: function () { this.appendDummyInput() .appendField('inline script (advanced)') const code = 'for (var i = 0; i < 10; i++) {\n console.log(i.toString());\n}' this.appendDummyInput() - .appendField(new Blockly.FieldMultilineInput(code), 'inlineScript') + .appendField(new FieldMultilineInput(code), 'inlineScript') this.setInputsInline(false) this.setPreviousStatement(true, null) this.setNextStatement(true, null) @@ -362,8 +364,8 @@ export default function defineOHBlocks_Scripts (f7, transformationServices) { } javascriptGenerator.forBlock['oh_rule_enable'] = function (block) { - const ruleUID = javascriptGenerator.valueToCode(block, 'ruleUID', javascriptGenerator.ORDER_ATOMIC) - const enableValue = javascriptGenerator.valueToCode(block, 'enable', javascriptGenerator.ORDER_ATOMIC) + const ruleUID = valueToCode(block, 'ruleUID', javascriptGenerator.ORDER_ATOMIC) + const enableValue = valueToCode(block, 'enable', javascriptGenerator.ORDER_ATOMIC) const enableType = blockGetCheckedInputType(block, 'enable') let enable = (enableType === 'Boolean') ? enableValue : (enableValue === '\'true\'' || enableValue === '\'enabled\'') return `rules.setEnabled(${ruleUID}, ${enable});\n` diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-text.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-text.js index cb1f54b51f..d83a0f0e48 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-text.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-text.js @@ -3,8 +3,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function (f7) { /* @@ -37,11 +38,11 @@ export default function (f7) { .setCheck('String') this.appendValueInput('replacement') .appendField('with') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck('String') this.appendValueInput('origin') .appendField('in') - .setAlign(Blockly.ALIGN_RIGHT) + .setAlign(Blockly.inputs.Align.RIGHT) .setCheck('String') this.setInputsInline(true) this.setOutput(true, 'String') @@ -52,9 +53,9 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_text_replace'] = function (block) { - const pattern = javascriptGenerator.valueToCode(block, 'pattern', javascriptGenerator.ORDER_ATOMIC) - const replacement = javascriptGenerator.valueToCode(block, 'replacement', javascriptGenerator.ORDER_ATOMIC) - const originText = javascriptGenerator.valueToCode(block, 'origin', javascriptGenerator.ORDER_ATOMIC) + const pattern = valueToCode(block, 'pattern', javascriptGenerator.ORDER_ATOMIC) + const replacement = valueToCode(block, 'replacement', javascriptGenerator.ORDER_ATOMIC) + const originText = valueToCode(block, 'origin', javascriptGenerator.ORDER_ATOMIC) const code = originText + '.replaceAll(' + pattern + ',' + replacement + ')' return [code, 0] } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-things.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-things.js index 81ef4d78c0..c452a3aaea 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-things.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-things.js @@ -3,10 +3,10 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' import { FieldThingPicker } from './fields/thing-field.js' -import { blockGetCheckedInputType } from './utils.js' +import { blockGetCheckedInputType, valueToCode } from './utils.js' export default function defineOHBlocks (f7) { Blockly.Blocks['oh_thing'] = { @@ -42,7 +42,7 @@ export default function defineOHBlocks (f7) { } javascriptGenerator.forBlock['oh_getthing'] = function (block) { - const thingUid = javascriptGenerator.valueToCode(block, 'thingUid', javascriptGenerator.ORDER_ATOMIC) + const thingUid = valueToCode(block, 'thingUid', javascriptGenerator.ORDER_ATOMIC) return [`things.getThing(${thingUid})`, 0] } @@ -60,7 +60,7 @@ export default function defineOHBlocks (f7) { } javascriptGenerator.forBlock['oh_getthing_state'] = function (block) { - const thingUid = javascriptGenerator.valueToCode(block, 'thingUid', javascriptGenerator.ORDER_ATOMIC) + const thingUid = valueToCode(block, 'thingUid', javascriptGenerator.ORDER_ATOMIC) const inputType = blockGetCheckedInputType(block, 'thingUid') const code = (inputType === 'oh_thingtype') ? `${thingUid}.status` : `things.getThing(${thingUid}).status` return [code, 0] @@ -97,7 +97,7 @@ export default function defineOHBlocks (f7) { } javascriptGenerator.forBlock['oh_getthing'] = function (block) { - const thingUid = javascriptGenerator.valueToCode(block, 'thingUid', javascriptGenerator.ORDER_ATOMIC) + const thingUid = valueToCode(block, 'thingUid', javascriptGenerator.ORDER_ATOMIC) return [`things.getThing(${thingUid})`, 0] } @@ -172,7 +172,7 @@ export default function defineOHBlocks (f7) { * Code part */ javascriptGenerator.forBlock['oh_getthing_attribute'] = function (block) { - const thing = javascriptGenerator.valueToCode(block, 'thing', javascriptGenerator.ORDER_ATOMIC) + const thing = valueToCode(block, 'thing', javascriptGenerator.ORDER_ATOMIC) const inputType = blockGetCheckedInputType(block, 'thing') const attributeName = block.getFieldValue('attributeName') const code = (inputType === 'oh_thing') ? `things.getThing(${thing}).${attributeName}` : `${thing}.${attributeName}` diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-timers.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-timers.js index d7c99c42a2..8580ad0fa9 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-timers.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-timers.js @@ -3,8 +3,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { statementToCode, valueToCode } from '@/assets/definitions/blockly/utils.js' export default function defineOHBlocks_Timers (f7) { /* @@ -80,10 +81,10 @@ export default function defineOHBlocks_Timers (f7) { */ javascriptGenerator.forBlock['oh_timer'] = function (block) { const delayUnits = block.getFieldValue('delayUnits') - const delay = javascriptGenerator.valueToCode(block, 'delay', javascriptGenerator.ORDER_ATOMIC) - const timerName = javascriptGenerator.valueToCode(block, 'timerName', javascriptGenerator.ORDER_ATOMIC) - const timerCode = javascriptGenerator.statementToCode(block, 'timerCode') - const context = javascriptGenerator.valueToCode(block, 'context', javascriptGenerator.ORDER_ATOMIC) + const delay = valueToCode(block, 'delay', javascriptGenerator.ORDER_ATOMIC) + const timerName = valueToCode(block, 'timerName', javascriptGenerator.ORDER_ATOMIC) + const timerCode = statementToCode(block, 'timerCode') + const context = valueToCode(block, 'context', javascriptGenerator.ORDER_ATOMIC) const cacheType = getCacheType(this) let code = `if (cache.${cacheType}.exists(${timerName}) === false || cache.${cacheType}.get(${timerName}).hasTerminated()) {\n` @@ -158,9 +159,9 @@ export default function defineOHBlocks_Timers (f7) { */ javascriptGenerator.forBlock['oh_timer_ext'] = function (block) { const delayUnits = block.getFieldValue('delayUnits') - const delay = javascriptGenerator.valueToCode(block, 'delay', javascriptGenerator.ORDER_ATOMIC) + const delay = valueToCode(block, 'delay', javascriptGenerator.ORDER_ATOMIC) const timerName = javascriptGenerator.valueToCode(block, 'timerName', javascriptGenerator.ORDER_ATOMIC) - const timerCode = javascriptGenerator.statementToCode(block, 'timerCode') + const timerCode = statementToCode(block, 'timerCode') const retrigger = block.getFieldValue('retrigger') const context = javascriptGenerator.valueToCode(block, 'context', javascriptGenerator.ORDER_ATOMIC) const cacheType = getCacheType(this) diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-uom.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-uom.js index 4f800b7889..45c1b13ce7 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-uom.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-uom.js @@ -3,9 +3,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { blockGetCheckedInputType } from './utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { blockGetCheckedInputType, valueToCode } from './utils.js' export default function (f7) { Blockly.Blocks['oh_quantity_ext'] = { @@ -25,9 +25,9 @@ export default function (f7) { } javascriptGenerator.forBlock['oh_quantity_ext'] = function (block) { - let value = javascriptGenerator.valueToCode(block, 'value', javascriptGenerator.ORDER_NONE) + let value = valueToCode(block, 'value', javascriptGenerator.ORDER_NONE) - const unit = javascriptGenerator.valueToCode(block, 'unit', javascriptGenerator.ORDER_NONE) + const unit = valueToCode(block, 'unit', javascriptGenerator.ORDER_NONE) const inputType = blockGetCheckedInputType(block, 'value') let code @@ -94,7 +94,7 @@ export default function (f7) { const first = generateQuantityCode(block, 'first') const second = (blockGetCheckedInputType(block, 'second') !== 'Number') ? generateQuantityCode(block, 'second') - : javascriptGenerator.valueToCode(block, 'second', javascriptGenerator.ORDER_NONE) + : valueToCode(block, 'second', javascriptGenerator.ORDER_NONE) return [`${first}.${operand}(${second})`, javascriptGenerator.ORDER_NONE] } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-valuestorage.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-valuestorage.js index a144c55c14..95ec661113 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-valuestorage.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-valuestorage.js @@ -4,8 +4,9 @@ * supports jsscripting */ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { valueToCode } from '@/assets/definitions/blockly/utils.js' export default function defineOHBlocks_Variables (f7) { Blockly.Blocks['oh_store_value'] = { @@ -31,8 +32,8 @@ export default function defineOHBlocks_Variables (f7) { } javascriptGenerator.forBlock['oh_store_value'] = function (block) { - const key = javascriptGenerator.valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) - const value = javascriptGenerator.valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC) + const key = valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) + const value = valueToCode(block, 'value', javascriptGenerator.ORDER_ATOMIC) const cacheType = block.getFieldValue('cacheType') return `cache${cacheType}.put(${key}, ${value});\n` } @@ -55,7 +56,7 @@ export default function defineOHBlocks_Variables (f7) { } javascriptGenerator.forBlock['oh_get_value'] = function (block) { - const key = javascriptGenerator.valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) + const key = valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) const cacheType = block.getFieldValue('cacheType') return [`cache${cacheType}.get(${key})`, javascriptGenerator.ORDER_NONE] } @@ -78,7 +79,7 @@ export default function defineOHBlocks_Variables (f7) { } javascriptGenerator.forBlock['oh_check_undefined_value'] = function (block) { - const key = javascriptGenerator.valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) + const key = valueToCode(block, 'key', javascriptGenerator.ORDER_ATOMIC) const cacheType = block.getFieldValue('cacheType') return [`cache${cacheType}.exists(${key}) === false`, javascriptGenerator.ORDER_NONE] } diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/audiosink-field.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/audiosink-field.js index e8495abac0..32cc6cb057 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/audiosink-field.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/audiosink-field.js @@ -4,7 +4,7 @@ * * See more background info on openHAB multimedia here: https://www.openhab.org/docs/configuration/multimedia.html */ -import Blockly from 'blockly' +import * as Blockly from 'blockly' // import AudiosinkPickerPopup from '@/components/audio/audiosink-picker-popup.vue' export class FieldAudiosinkPicker extends Blockly.FieldTextInput { diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/date-field.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/date-field.js index 021243023c..b6800dd566 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/date-field.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/date-field.js @@ -2,7 +2,7 @@ * Field allowing to pick a date from a calendar */ -import Blockly from 'blockly' +import * as Blockly from 'blockly' import dayjs from 'dayjs' export class FieldDatePicker extends Blockly.FieldTextInput { diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/item-field.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/item-field.js index ddcb994286..1cbabdf4a6 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/item-field.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/item-field.js @@ -2,7 +2,7 @@ * Field allowing to pick the name of an item from the model */ -import Blockly from 'blockly' +import * as Blockly from 'blockly' import ModelPickerPopup from '@/components/model/model-picker-popup.vue' export class FieldItemModelPicker extends Blockly.FieldTextInput { diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/thing-field.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/thing-field.js index a498181aad..b22bed11f3 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/thing-field.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/fields/thing-field.js @@ -2,7 +2,7 @@ * Field allowing to pick the name of a thing from the model */ -import Blockly from 'blockly' +import * as Blockly from 'blockly' import ThingPicker from '@/components/config/controls/thing-picker.vue' export class FieldThingPicker extends Blockly.FieldTextInput { diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/index.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/index.js index 6923fe65f8..332760927a 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/index.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/index.js @@ -22,8 +22,6 @@ import defineLogicBlocks from './blocks-logic.js' import { defineLibraries } from './libraries.js' -import Blockly from 'blockly' - export default function (f7, libraryDefinitions, data) { defineDictionaryBlocks(f7) defineDateOffsetsBlocks(f7) diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/libraries.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/libraries.js index 0d5dfa076c..3a6e02083a 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/libraries.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/libraries.js @@ -1,6 +1,6 @@ -import Blockly from 'blockly' -import { javascriptGenerator } from 'blockly/javascript.js' -import { addOSGiService } from './utils.js' +import * as Blockly from 'blockly' +import { javascriptGenerator } from 'blockly/javascript' +import { addOSGiService, statementToCode, valueToCode } from './utils.js' const generateCodeForBlock = (block) => { const blockTypeId = block.openhab.blockTypeId @@ -57,7 +57,7 @@ const generateCodeForBlock = (block) => { return code.replace(placeholder, context.fields[placeholderName]) case 'input': const order = placeholderOption ? javascriptGenerator.forBlock['ORDER_' + placeholderOption.replace('ORDER_', '')] : javascriptGenerator.ORDER_NONE - context.inputs[placeholderName] = javascriptGenerator.valueToCode(block, placeholderName, order) + context.inputs[placeholderName] = valueToCode(block, placeholderName, order) return code.replace(placeholder, context.inputs[placeholderName]) case 'utility': if (!context.utilities[placeholderName]) { @@ -66,13 +66,13 @@ const generateCodeForBlock = (block) => { return code.replace(placeholder, context.utilities[placeholderName]) case 'temp_name': if (!context.uniqueIdentifiers[placeholderName]) { - const realm = placeholderOption ? Blockly.Variables[placeholderOption] : Blockly.Variables.NAME_TYPE + const realm = placeholderOption ? Blockly.Names[placeholderOption] : Blockly.Names.NameType context.uniqueIdentifiers[placeholderName] = javascriptGenerator.variableDB_.getDistinctName(placeholderName, realm) } return code.replace(placeholder, context.uniqueIdentifiers[placeholderName]) case 'statements': if (!context.statements[placeholderName]) { - context.statements[placeholderName] = javascriptGenerator.statementToCode(block, placeholderName) + context.statements[placeholderName] = statementToCode(block, placeholderName) } return code.replace(placeholder, context.statements[placeholderName].replace(/^ {2}/, '').trim()) default: diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/utils.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/utils.js index c170b8113a..ed60e61b8a 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/utils.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/utils.js @@ -1,4 +1,4 @@ -import { javascriptGenerator } from 'blockly/javascript.js' +import { javascriptGenerator } from 'blockly/javascript' /* * Function allowing to call classes within the OSGi container @@ -101,3 +101,54 @@ export function blockGetCheckedInputType (block, inputName) { } return '' } + +/** + * Generate code representing the specified value input. + * + * Provides Blockly v10 behaviour for Blockly v11+: Don't throw a ReferenceError if specified input does not exist. + * + * @param {import('blockly/core/block.d.ts').Block} block The block containing the input. + * @param {string} name The name of the input. + * @param {number} outerOrder The maximum binding strength (minimum order value) of any + * operators adjacent to "block". + * @returns {string} Generated code or '' if no blocks are connected or the specified input does not exist. + */ +export function valueToCode (block, name, outerOrder) { + let code = '' + try { + code = javascriptGenerator.valueToCode(block, name, outerOrder) + } catch (e) { + if (e instanceof ReferenceError) { + // Ignore to restore Blockly v10 behavior + } else { + throw e + } + } + return code +} + +/** + * Generate a code string representing the blocks attached to the named + * statement input. Indent the code. + * This is mainly used in generators. When trying to generate code to evaluate + * look at using workspaceToCode or blockToCode. + * + * Provides Blockly v10 behaviour for Blockly v11+: Don't throw a ReferenceError if specified input does not exist. + * + * @param {import('blockly/core/block.d.ts').Block} block The block containing the input. + * @param {string} name The name of the input. + * @returns {string} Generated code or '' if no blocks are connected or the specified input does not exist. + */ +export function statementToCode (block, name) { + let code = '' + try { + code = javascriptGenerator.statementToCode(block, name) + } catch (e) { + if (e instanceof ReferenceError) { + // Ignore to restore Blockly v10 behavior + } else { + throw e + } + } + return code +} diff --git a/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue b/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue index 753955a83d..686f038296 100644 --- a/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue +++ b/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue @@ -1193,20 +1193,27 @@ textarea.blocklyHtmlTextAreaInput background #ffffff color #000000 + +.blocklyComment .blocklyCommentPreview.blocklyText + fill black + +.blocklyComment .blocklyText + color black