Mobile app version of vmapp.org
Login or Join
Si6392903

: 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

@Si6392903

Posted in: #AdobeIllustrator #IllustratorScripting

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?

10.03% popularity Vote Up Vote Down


Login to follow query

More posts by @Si6392903

3 Comments

Sorted by latest first Latest Oldest Best

 

@Rivera951

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

10% popularity Vote Up Vote Down


 

@Connie430

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.

10% popularity Vote Up Vote Down


 

@Turnbaugh909

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.

10% popularity Vote Up Vote Down


Back to top | Use Dark Theme