70 lines
2.3 KiB
Markdown
70 lines
2.3 KiB
Markdown
/*
|
|

|
|
Select a single text element, or a text element in a container. The container must have a transparent background.
|
|
The script will add an aura to the text by adding 4 copies of the text each with the inverted stroke color of the original text element and with a very small X and Y offset. The resulting 4 + 1 (original) text elements or containers will be grouped.
|
|
|
|
If you copy a color string on the clipboard before running the script, the script will use that color instead of the inverted color.
|
|
|
|
```js*/
|
|
els = ea.getViewSelectedElements();
|
|
const isText = (els.length === 1) && els[0].type === "text";
|
|
const isContainer = (els.length === 2) &&
|
|
((els[0].type === "text" && els[1].id === els[0].containerId && els[1].backgroundColor.toLowerCase() === "transparent") ||
|
|
(els[1].type === "text" && els[0].id === els[1].containerId && els[0].backgroundColor.toLowerCase() === "transparent"));
|
|
|
|
if (!(isText || isContainer)) {
|
|
new Notice ("Select a single text element, or a container with a text element and with transparent background color",10000);
|
|
return;
|
|
}
|
|
|
|
let strokeColor = ea
|
|
.getCM(els.filter(el=>el.type === "text")[0].strokeColor)
|
|
.invert({alpha: false})
|
|
.stringHEX({alpha: false});
|
|
clipboardText = await navigator.clipboard.readText();
|
|
if(clipboardText) {
|
|
const cm1 = ea.getCM(clipboardText);
|
|
if(cm1.format !== "invalid") {
|
|
strokeColor = cm1.stringHEX();
|
|
} else {
|
|
const cm2 = ea.getCM("#"+clipboardText);
|
|
if(cm2.format !== "invalid") {
|
|
strokeColor = cm2.stringHEX();
|
|
}
|
|
}
|
|
}
|
|
|
|
const offset = els.filter(el=>el.type === "text")[0].fontSize/24;
|
|
|
|
let ids = [];
|
|
|
|
const addClone = (offsetX, offsetY) => {
|
|
els.forEach(el=>{
|
|
const clone = ea.cloneElement(el);
|
|
ids.push(clone.id);
|
|
clone.x += offsetX;
|
|
clone.y += offsetY;
|
|
if(offsetX!==0 || offsetY!==0) {
|
|
switch (clone.type) {
|
|
case "text":
|
|
clone.strokeColor = strokeColor;
|
|
break;
|
|
default:
|
|
clone.strokeColor = "transparent";
|
|
break;
|
|
}
|
|
}
|
|
ea.elementsDict[clone.id] = clone;
|
|
})
|
|
}
|
|
|
|
addClone(-offset,0);
|
|
addClone(offset,0);
|
|
addClone(0,offset);
|
|
addClone(0,-offset);
|
|
addClone(0,0);
|
|
ea.copyViewElementsToEAforEditing(els);
|
|
els.forEach(el=>ea.elementsDict[el.id].isDeleted = true);
|
|
|
|
ea.addToGroup(ids);
|
|
ea.addElementsToView(false, true, true); |