70 lines
2.6 KiB
Markdown
70 lines
2.6 KiB
Markdown
/*
|
|

|
|
|
|
Converts selected plain text elements to sticky notes with transparent background and transparent stroke color. Essentially converts text element into a wrappable format.
|
|
|
|
```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;
|
|
}
|
|
let settings = ea.getScriptSettings();
|
|
//set default values on first run
|
|
if(!settings["Border color"]) {
|
|
settings = {
|
|
"Border color" : {
|
|
value: "#000000",
|
|
description: "Any legal HTML color (#000000, rgb, color-name, etc.). Set to 'transparent' for transparent color."
|
|
},
|
|
"Background color" : {
|
|
value: "transparent",
|
|
description: "Background color of the sticky note. Set to 'transparent' for transparent color."
|
|
},
|
|
"Background fill style" : {
|
|
value: "solid",
|
|
description: "Fill style of the sticky note",
|
|
valueset: ["hachure","cross-hatch","solid"]
|
|
}
|
|
};
|
|
await ea.setScriptSettings(settings);
|
|
}
|
|
|
|
if(!settings["Max sticky note width"]) {
|
|
settings["Max sticky note width"] = {
|
|
value: "600",
|
|
description: "Maximum width of new sticky note. If text is longer, it will be wrapped",
|
|
valueset: ["400","600","800","1000","1200","1400","2000"]
|
|
}
|
|
await ea.setScriptSettings(settings);
|
|
}
|
|
const maxWidth = parseInt(settings["Max sticky note width"].value);
|
|
const strokeColor = settings["Border color"].value;
|
|
const backgroundColor = settings["Background color"].value;
|
|
const fillStyle = settings["Background fill style"].value;
|
|
|
|
const elements = ea
|
|
.getViewSelectedElements()
|
|
.filter((el)=>(el.type==="text")&&(el.containerId===null));
|
|
if(elements.length===0) {
|
|
new Notice("Please select a text element");
|
|
return;
|
|
}
|
|
ea.style.strokeColor = strokeColor;
|
|
ea.style.backgroundColor = backgroundColor;
|
|
ea.style.fillStyle = fillStyle;
|
|
const padding = 6;
|
|
const boxes = [];
|
|
ea.copyViewElementsToEAforEditing(elements);
|
|
ea.getElements().forEach((el)=>{
|
|
const width = el.width+2*padding;
|
|
const widthOK = width<=maxWidth;
|
|
const id = ea.addRect(el.x-padding,el.y-padding,widthOK?width:maxWidth,el.height+2*padding);
|
|
boxes.push(id);
|
|
ea.getElement(id).boundElements=[{type:"text",id:el.id}];
|
|
el.containerId = id;
|
|
});
|
|
await ea.addElementsToView(false,true);
|
|
const containers = ea.getViewElements().filter(el=>boxes.includes(el.id));
|
|
ea.getExcalidrawAPI().updateContainerSize(containers);
|
|
ea.selectElementsInView(containers); |