|
/* |
|
* Sample plugin code for Adobe XD. |
|
* |
|
* Visit http://adobexdplatform.com/ for API docs and more sample code. |
|
*/ |
|
|
|
// |
|
// NOTE we've added two new parameters (v & hPadding) |
|
//////////////////////////////////////////////////////////// |
|
|
|
var {Rectangle, Color} = require("scenegraph"); |
|
|
|
function createRectangle(selection, hPadding, vPadding) { |
|
var textNode = selection.items[0]; |
|
var bounds = textNode.boundsInParent; |
|
console.log(bounds); |
|
|
|
var shape = new Rectangle(); |
|
shape.width = bounds.width + 2 * hPadding |
|
shape.height = bounds.height + 2 * vPadding; |
|
shape.stroke = new Color("blue"); |
|
|
|
selection.insertionParent.addChild(shape); |
|
shape.placeInParentCoordinates( |
|
{x: 0, y: 0}, |
|
{x: bounds.x - hPadding, y: bounds.y - vPadding} |
|
); |
|
} |
|
|
|
let dialog; |
|
|
|
function createDialog() { |
|
dialog = document.createElement("dialog"); |
|
|
|
dialog.innerHTML = ` |
|
<style> |
|
form { |
|
width: 400px; |
|
} |
|
.row { |
|
display: flex; |
|
align-items: center; |
|
} |
|
</style> |
|
<form method="dialog"> |
|
<h1>Create Button Frame</h1> |
|
<hr /> |
|
<div class="row"> |
|
<label class="row"> |
|
<span>V:</span> |
|
<input type="text" uxp-quiet="true" id="txtV" placeholder="V padding" /> |
|
</label> |
|
<label class="row"> |
|
<span>H:</span> |
|
<input type="text" uxp-quiet="true" id="txtH" placeholder="H padding" /> |
|
</label> |
|
</div> |
|
<footer> |
|
<button id="cancel" type="reset" uxp-variant="secondary">Cancel</button> |
|
<button id="ok" type="submit" uxp-variant="cta">Apply</button> |
|
</footer> |
|
</form>`; |
|
|
|
// make sure the cancel button works :-) |
|
dialog.querySelector("#cancel").addEventListener("click", () => { |
|
dialog.close("reasonCanceled"); |
|
}) |
|
|
|
document.appendChild(dialog); |
|
} |
|
|
|
async function showDialog() { |
|
if (!dialog) { |
|
createDialog(); |
|
} |
|
|
|
const response = await dialog.showModal(); |
|
|
|
if (response !== 'reasonCanceled') { |
|
// user wants to create the rectangle! |
|
const { selection } = require("scenegraph"); |
|
|
|
// You can extract the values the user entered from the DOM |
|
// using querySelector and friends |
|
// NOTE: we should, of course, do validation here |
|
// but that's out of scope for now. |
|
const hPadding = Number(dialog.querySelector("#txtH").value); |
|
const vPadding = Number(dialog.querySelector("#txtV").value); |
|
|
|
createRectangle(selection, hPadding, vPadding); |
|
} |
|
|
|
} |
|
|
|
module.exports = { |
|
commands: { |
|
myPluginCommand: showDialog |
|
} |
|
}; |