: Can I include / reference external scripts and libraries within my Adobe Illustrator .jsx script? We're writing a bunch of .jsx scripts, and in each one I have to mock out some functions so
We're writing a bunch of .jsx scripts, and in each one I have to mock out some functions so I can use things like Array.map() and String.trim(), but I don't want to have to include that code at the top of every script.
Is there a way to "include" / reference other scripts or libraries inside of a .jsx script file?
More posts by @Si6392903
3 Comments
Sorted by latest first Latest Oldest Best
There was an answer here earlier today that seems to have disappeared, but it's what we're using now and it's working well. It's using the $ helper available in Illustrator, and the $.evalFile() method. Pass it a path and it will evaluate the file and return the result.
I created a little helper that I can include (minified, of course) at the top of my .jsx scripts so I can do Libraries.include("my-other-script") that will include, in my case, a file that's in my adobe_scripts root folder, in a directory called lib.
// indexOf polyfill from gist.github.com/atk/1034425 [].indexOf||(Array.prototype.indexOf=function(a,b,c){for(c=this.length,b=(c+~~b)%c;b<c&&(!(b in this)||this[b]!==a);b++);return b^c?b:-1;});
var Libraries = (function (libPath) {
return {
include: function (path) {
if (!path.match(/.jsx$/i)) {
path = path + ".jsx";
}
return $.evalFile(libPath + path);
}
};
})($.fileName.split("/").splice(0, $.fileName.split("/").indexOf("adobe_scripts") + 1).join("/") + "/lib/");
Minified version that I include:
/**
* Libraries.include(path) -- path must be relative to adobe_scripts/lib/
* See: gist.github.com/jasonrhodes/5286526 */
[].indexOf||(Array.prototype.indexOf=function(a,b,c){for(c=this.length,b=(c+~~b)%c;b<c&&(!(b in this)||this[b]!==a);b++);return b^c?b:-1;});var Libraries=function(a){return{include:function(b){return b.match(/.jsx$/i)||(b+=".jsx"),$.evalFile(a+b)}}}($.fileName.split("/").splice(0,$.fileName.split("/").indexOf("adobe_scripts")+1).join("/")+"/lib/");
See gist here: gist.github.com/jasonrhodes/5286526
Not sure if this will work for Illustrator, but in Photoshop I've had success using this method in a configurator panel:
#include "coreFunctions.jsx";
saveImage("jpg", "", "web", "", "");
The above code is the contents of a file called "jpeg@72.jsx", which calls the function "saveImage" (a user created function), declared in the coreFunctions.jsx file.
According to this thread in the Adobe Illustrator Scripting Community, it is possible.
Apparently the code you need is similar to this:
#target illustrator
var scriptToLoad = new File("S:/NEW SCRIPTS/JAVASCRIPTS IN USE NOW/02) Make/01b) Shape P - 16 UP.jsx");
var win = new Window('palette', 'Copy Objects');
var btnSelect = win.add('button', undefined, 'Copy');
btnSelect.onClick = function(){
scriptToLoad.open("r");
var bt = new BridgeTalk;
bt.target = "illustrator";
var script = scriptToLoad.read();
scriptToLoad.close();
bt.body = script;
bt.send();
}// end function
win.center();
win.show();
Note: this is just what I found searching, not something I've personally tried.
Terms of Use Create Support ticket Your support tickets Stock Market News! © vmapp.org2024 All Rights reserved.