[blockly] Add multi-select plugin (#2419)

Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
pull/2430/head
Jimmy Tanagra 2024-02-27 19:04:44 +10:00 committed by Florian Hotze
parent d99d3bfc86
commit 50c43afc3b
3 changed files with 56 additions and 3 deletions

View File

@ -18,6 +18,7 @@
"@jsep-plugin/object": "^1.2.1",
"@jsep-plugin/regex": "^1.0.3",
"@jsep-plugin/template": "^1.0.2",
"@mit-app-inventor/blockly-plugin-workspace-multiselect": "^0.1.11",
"blockly": "^10.4.2",
"cronstrue": "^1.100.0",
"crypto-browserify": "^3.12.0",
@ -2767,6 +2768,20 @@
"integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
"dev": true
},
"node_modules/@mit-app-inventor/blockly-plugin-workspace-multiselect": {
"version": "0.1.11",
"resolved": "https://registry.npmjs.org/@mit-app-inventor/blockly-plugin-workspace-multiselect/-/blockly-plugin-workspace-multiselect-0.1.11.tgz",
"integrity": "sha512-SEuyHi43qY7hOfSBzBFzeK8lUWtqnMtfxAe4xSrdelYRSZBoBX6ihFSkexLb8x3OtOubSTfe6cKHOV/0hKiz8A==",
"dependencies": {
"dragselect": "^2.7.4"
},
"engines": {
"node": ">=8.17.0"
},
"peerDependencies": {
"blockly": "^10.2.0"
}
},
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@ -8437,6 +8452,11 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"dev": true
},
"node_modules/dragselect": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/dragselect/-/dragselect-2.7.4.tgz",
"integrity": "sha512-j0qFl4xvsyImlSTn9erDCCT4SSPUMssgKAYuKqhsPr8WPphLghHfjDd4WR2jLjL91fTQQlbbIJ/7T2qwD2hghQ=="
},
"node_modules/duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@ -24259,6 +24279,14 @@
"integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
"dev": true
},
"@mit-app-inventor/blockly-plugin-workspace-multiselect": {
"version": "0.1.11",
"resolved": "https://registry.npmjs.org/@mit-app-inventor/blockly-plugin-workspace-multiselect/-/blockly-plugin-workspace-multiselect-0.1.11.tgz",
"integrity": "sha512-SEuyHi43qY7hOfSBzBFzeK8lUWtqnMtfxAe4xSrdelYRSZBoBX6ihFSkexLb8x3OtOubSTfe6cKHOV/0hKiz8A==",
"requires": {
"dragselect": "^2.7.4"
}
},
"@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@ -28728,6 +28756,11 @@
}
}
},
"dragselect": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/dragselect/-/dragselect-2.7.4.tgz",
"integrity": "sha512-j0qFl4xvsyImlSTn9erDCCT4SSPUMssgKAYuKqhsPr8WPphLghHfjDd4WR2jLjL91fTQQlbbIJ/7T2qwD2hghQ=="
},
"duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",

View File

@ -67,6 +67,7 @@
"@blockly/shadow-block-converter": "^5.0.0",
"@blockly/theme-dark": "^6.0.5",
"@blockly/zoom-to-fit": "^5.0.11",
"@mit-app-inventor/blockly-plugin-workspace-multiselect": "^0.1.11",
"@jsep-plugin/arrow": "^1.0.5",
"@jsep-plugin/object": "^1.2.1",
"@jsep-plugin/regex": "^1.0.3",
@ -186,4 +187,4 @@
"webpack-stats-plugin": "^1.1.3",
"workbox-webpack-plugin": "^7.0.0"
}
}
}

View File

@ -1091,6 +1091,7 @@ import { javascriptGenerator } from 'blockly/javascript.js'
import DarkTheme from '@blockly/theme-dark'
import { ZoomToFitControl } from '@blockly/zoom-to-fit'
import { shadowBlockConversionChangeListener } from '@blockly/shadow-block-converter'
import { Multiselect, MultiselectBlockDragger } from '@mit-app-inventor/blockly-plugin-workspace-multiselect'
import Vue from 'vue'
@ -1198,8 +1199,11 @@ export default {
}, this.isGraalJs)
this.addLibraryToToolbox(libraryDefinitions || [])
this.workspace = Blockly.inject(this.$refs.blocklyEditor, {
const options = {
toolbox: this.$refs.toolbox,
plugins: {
'blockDragger': MultiselectBlockDragger
},
horizontalLayout: !this.$device.desktop,
theme: this.$f7.data.themeOptions.dark === 'dark' ? DarkTheme : undefined,
zoom: {
@ -1217,8 +1221,20 @@ export default {
},
trashcan: false,
showLabels: false,
// Multi-select-options
multiselectCopyPaste: {
crossTab: true,
menu: true
},
multiselectIcon: {
hideIcon: true // hide it because it doesn't work in v0.1.11
},
multiFieldUpdate: true,
renderer: this.getCurrentRenderer()
})
}
this.workspace = Blockly.inject(this.$refs.blocklyEditor, options)
this.workspace.addChangeListener(shadowBlockConversionChangeListener)
const workspaceSearch = new WorkspaceSearch(this.workspace)
workspaceSearch.init()
@ -1229,6 +1245,9 @@ export default {
const zoomToFit = new ZoomToFitControl(this.workspace)
zoomToFit.init()
const multiselectPlugin = new Multiselect(this.workspace)
multiselectPlugin.init(options)
this.registerLibraryCallbacks(libraryDefinitions)
const xml = Blockly.utils.xml.textToDom(this.blocks)
Blockly.Xml.domToWorkspace(xml, this.workspace)