55 lines
1.7 KiB
Markdown
55 lines
1.7 KiB
Markdown
/*
|
|

|
|
|
|
This script will add an encapsulating box around the currently selected elements in Excalidraw.
|
|
|
|
See documentation for more details:
|
|
https://zsviczian.github.io/obsidian-excalidraw-plugin/ExcalidrawScriptsEngine.html
|
|
|
|
```javascript
|
|
*/
|
|
if(!ea.verifyMinimumPluginVersion || !ea.verifyMinimumPluginVersion("1.5.21")) {
|
|
new Notice("This script requires a newer version of Excalidraw. Please install the latest version.");
|
|
return;
|
|
}
|
|
settings = ea.getScriptSettings();
|
|
//set default values on first run
|
|
if(!settings["Default padding"]) {
|
|
settings = {
|
|
"Prompt for padding?": true,
|
|
"Default padding" : {
|
|
value: 10,
|
|
description: "Padding between the bounding box of the selected elements, and the box the script creates"
|
|
}
|
|
};
|
|
ea.setScriptSettings(settings);
|
|
}
|
|
|
|
let padding = settings["Default padding"].value;
|
|
|
|
if(settings["Prompt for padding?"]) {
|
|
padding = parseInt (await utils.inputPrompt("padding?","number",padding.toString()));
|
|
}
|
|
|
|
if(isNaN(padding)) {
|
|
new Notice("The padding value provided is not a number");
|
|
return;
|
|
}
|
|
elements = ea.getViewSelectedElements();
|
|
const box = ea.getBoundingBox(elements);
|
|
color = ea
|
|
.getExcalidrawAPI()
|
|
.getAppState()
|
|
.currentItemStrokeColor;
|
|
//uncomment for random color:
|
|
//color = '#'+(Math.random()*0xFFFFFF<<0).toString(16).padStart(6,"0");
|
|
ea.style.strokeColor = color;
|
|
id = ea.addRect(
|
|
box.topX - padding,
|
|
box.topY - padding,
|
|
box.width + 2*padding,
|
|
box.height + 2*padding
|
|
);
|
|
ea.copyViewElementsToEAforEditing(elements);
|
|
ea.addToGroup([id].concat(elements.map((el)=>el.id)));
|
|
ea.addElementsToView(false,false); |