I've been looking for documentation on how to "convert a JSX to JXA". Not finding much. This JXA was written by a associate. I've learned to edit it for parsing a JSON. I don't know though, how to convert my Adobe Illustrator JSX scripts to JXA. They use Adobe's flavor of Javascript called "ExtendScript". I usually use Adobe's antiquated "ExtendScript Toolkit" for actual editing then paste to KM or run the script from disk using AppleScript.
(function(myJSONstring) {
'use strict';
//parse the string into a useable object
var myJSONobject = JSON.parse(myJSONstring);
//define our variables that we are going to use
var kme = Application('Keyboard Maestro Engine');
var currentLineId = kme.getvariable("lineId");
var myLayouts = myJSONobject.layouts;
kme.setvariable('creativeWorkId', {
to: myJSONobject.creativeWorkId
});
kme.setvariable('vectorFileName', {
to: myJSONobject.vectorFileName
});
kme.setvariable('totalLayouts', {
to: myJSONobject.layouts.length
});
for (var n = 0; n < myLayouts.length; n++) {
if (myLayouts[n].lineId == currentLineId) {
//set KM variables for simple values
kme.setvariable('Order_1', {
to: myLayouts[n].orderId
});
kme.setvariable('filePrefix', {
to: myLayouts[n].filePrefix
});
kme.setvariable('frontFileName', {
to: myLayouts[n].frontFileName
});
kme.setvariable('backFileName', {
to: myLayouts[n].backFileName
});
kme.setvariable('tertiaryFileName', {
to: myLayouts[n].tertiaryFileName
});
kme.setvariable('pdfFileName', {
to: myLayouts[n].pdfFileName
});
//first check to see if there is an assignedRing
if (myLayouts[n].assignedRing) {
//if there is a ring, set the ring variables
kme.setvariable('ringCircumference', {
to: myLayouts[n].assignedRing.circumference
});
kme.setvariable('ringWidth', {
to: myLayouts[n].assignedRing.width
});
} //end if ring
//loop through all the options in the first layout
for (var i = 0; i < myLayouts[n].options.length; i++) {
//variables for the description and value
var desc = myLayouts[n].options[i].description;
var myVal = myLayouts[n].options[i].value;
if (desc.indexOf('Back Engraving') != -1) {
kme.setvariable('backEngraving', {
to: myVal
});
} else if (desc.indexOf('Front Engraving') != -1) {
kme.setvariable('frontEngraving', {
to: myVal
});
} else if (desc.indexOf('Inside Engraving') != -1) {
kme.setvariable('backEngraving', {
to: myVal
});
} else if (desc.indexOf('Front Inscription') != -1) {
kme.setvariable('frontInscription', {
to: myVal
});
} else if (desc.indexOf('Back Inscription') != -1) {
kme.setvariable('backInscription', {
to: myVal
});
} else if (desc.indexOf('Back First Initial') != -1) {
kme.setvariable('backFirstInitial', {
to: myVal
});
} else if (desc.indexOf('Back Middle Initial') != -1) {
kme.setvariable('backMiddleInitial', {
to: myVal
});
} else if (desc.indexOf('Back Last Initial') != -1) {
kme.setvariable('backLastInitial', {
to: myVal
});
} else if (desc.indexOf('Front First Initial') != -1) {
kme.setvariable('frontFirstInitial', {
to: myVal
});
} else if (desc.indexOf('Front Middle Initial') != -1) {
kme.setvariable('frontMiddleInitial', {
to: myVal
});
} else if (desc.indexOf('Front Last Initial') != -1) {
kme.setvariable('frontLastInitial', {
to: myVal
});
} else if (desc.indexOf('name') != -1) {
kme.setvariable('name', {
to: myVal
});
} else if (desc.indexOf('Last Name') != -1) {
kme.setvariable('lastName', {
to: myVal
});
} else if (desc.indexOf('First Name') != -1) {
kme.setvariable('firstName', {
to: myVal
});
} else if (desc.indexOf('Date of Death') != -1) {
kme.setvariable('dateOfDeath', {
to: myVal
});
} else if (desc.indexOf('Date of Birth') != -1) {
kme.setvariable('dateOfBirth', {
to: myVal
});
} else if (desc.indexOf('Dates') != -1) {
kme.setvariable('dates', {
to: myVal
});
} else if (desc.indexOf('Name') != -1) {
kme.setvariable('Name', {
to: myVal
});
} else if (desc.indexOf('Inscription') != -1) {
kme.setvariable('insideInscription', {
to: myVal
});
}
} //end options loop
} //end line id check
} //end layouts loop
})(Application('Keyboard Maestro Engine')
.getvariable('capturedJSON'));
This is a sample "ExtendScript JSX" for Adobe Illustrator run from KM. I'd like to convert it to JXA so I could do things like paste directly from a KM Named Clipboard without first loading it in KM. Is it just a matter of adding the "var kme = Application('Keyboard Maestro Engine');" and run it through the JXA Action? Guess I"ll try that. Edit: Nope, that didn't work.
var aDoc = app.activeDocument;
var sel = aDoc.selection;
var ilayer = aDoc.layers['FINGERPRINT'];
aDoc.activeLayer = ilayer;
//Paste Fingerprint
app.paste();
app.executeMenuCommand("sendBackward");
var AlignObj = aDoc.pageItems.getByName('FingerprintAlign');
//Scale Down Print Function
function sclDnProp(item, maxSize) {
var W = item.width,
H = item.height,
MW = maxSize.W,
MH = maxSize.H,
factor = W / H > MW / MH ? MW / W * 100 : MH / H * 100;
if (W > MW || H > MH) {
item.resize(factor, factor);
}
};
sclDnProp(app.selection[0], {W: %Variable%FP_Width%*%Variable%DND_mm%, H: %Variable%FP_Width%*%DND_mm%});
var sel = aDoc.selection;
//Align Fingerprint Function
function alignToObj()
{
var keyCenter = getCenterPoint(AlignObj);
var curItem,curCenter;
const ALIGNMENT_PREFERENCE_VERTICAL = true;
const ALIGNMENT_PREFERENCE_HORIZONTAL = true;
//~ for (var x = 0, len = sel.length - 1; x < len; x++)
for (var x = 0, len = sel.length; x < len; x++)
{
curItem = sel[x];
if(ALIGNMENT_PREFERENCE_HORIZONTAL)
{
//align the object horizontally
curItem.left = keyCenter.h - curItem.width/2;
}
if(ALIGNMENT_PREFERENCE_VERTICAL)
{
//align the object vertically
curItem.top = keyCenter.v + curItem.height/2;
}
}
function getCenterPoint(item)
{
return {"h":item.left + item.width/2, "v":item.top - item.height/2};
}
}
alignToObj();