HiveBrain v1.2.0
Get Started
← Back to all entries
snippetjavascriptMinor

Create folder and export resolution ratios for artboard

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
createratiosartboardfolderexportforandresolution

Problem

After searching the internet, I was able to find a base JavaScript file in order to build upon for my project. Which is to create a Adobe Illustrator Script that will create the desired Folders and then export different resolution ratios for each artboard. This method is used in order to create Wallpapers of varying resolution ratios with a range of sizes.

I am looking for assistance with methods of cleaning the code which I have written, taking into consideration this is my first JavaScript project. I'm also looking for methods of slimming down the code by method of loops for the exporting for instance, due to not being able to figure out the correct logic with my various attempts.

```
//Closes Script if Program is not Open
if (app.documents.length > 0) {
main();
}
else alert('Cancelled by user');

function main() {
var document = app.activeDocument;
var afile = document.fullName;
var filename = afile.name.split('.')[0];

//Dialog to select Destination Folder
var folder = afile.parent.selectDlg("Export as CSS Layers (images only)...");

//Within Destination, check if folder exists, if not create the folder
if(folder !== null) {
var folder0 = Folder(folder + "/Wallpapers");
if(!folder0.exists) folder0.create();

var folder1 = Folder(folder + "/Wallpapers/5x4");
if(!folder1.exists) folder1.create();

var folder2 = Folder(folder + "/Wallpapers/4x3");
if(!folder2.exists) folder2.create();

var folder3 = Folder(folder + "/Wallpapers/3x2");
if(!folder3.exists) folder3.create();

var folder4 = Folder(folder + "/Wallpapers/8x5");
if(!folder4.exists) folder4.create();

var folder5 = Folder(folder + "/Wallpapers/5x3");
if(!folder5.exists) folder5.create();

var folder6 = Folder(folder + "/Wallpapers/16x9");
if(!folder6.exists) folder6.create();

var folder7 = Folder(folder + "/Wallpapers/17x9");
if(!folder7.exists) folder7.create();

var folder8 = Folder(folder + "/Wallpapers/21x9");
if(!folder8.exists

Solution

D.R.Y.

That is the main problem about your code: you are repeating yourself in many, many places.

For example, you are repeating yourself here:

var folder0 = Folder(folder + "/Wallpapers");
if(!folder0.exists) folder0.create();

var folder1 = Folder(folder + "/Wallpapers/5x4");
if(!folder1.exists) folder1.create();

var folder2 = Folder(folder + "/Wallpapers/4x3");
if(!folder2.exists) folder2.create();

var folder3 = Folder(folder + "/Wallpapers/3x2");
if(!folder3.exists) folder3.create();

var folder4 = Folder(folder + "/Wallpapers/8x5");
if(!folder4.exists) folder4.create();

var folder5 = Folder(folder + "/Wallpapers/5x3");
if(!folder5.exists) folder5.create();

var folder6 = Folder(folder + "/Wallpapers/16x9");
if(!folder6.exists) folder6.create();

var folder7 = Folder(folder + "/Wallpapers/17x9");
if(!folder7.exists) folder7.create();

var folder8 = Folder(folder + "/Wallpapers/21x9");
if(!folder8.exists) folder8.create();



Rule of thumb: if you start to name your variables the same exact thing but with a number at the end, then it's probably time to use an
array.

Now, that (above) isn't the reason why you are repeating yourself here.

The reason is is that all the code here is very similar. The only difference? The size/name of the wall paper. This part:

"/Wallpapers/NxN"


To make this simpler, lets use a loop to populate an array of all these folders that you are trying to make.

But first, to help us not repeat ourselves, let's create an array of all the wall paper sizes. Like this:

var sizes = ["", "/5x4", "/4x3", "/3x2", ...];


This will help us later because, rather than hard coding these into the code like you did, while we are looping we can just grab these values from the array.

Now, let's create the loop.

for(var i = 0, length = sizes.length; i < length; i++) {

}


The rest of the code, which is only the body of the loop, is now really simple to implement: the only change you are making to the code is the variable name. Since we are using a loop, this variable name now becomes i.

folders[i] = Folder(folder + "/Wallpapers" + sizes[i]);


See what is happening here? Using i and setting different indexes in the folder array is just like using folder0, folder1, etc.

Then, that small conditional you have at the end is just as easy to implement:

if(!folder[i].exists) folders[i].create();


Now, to bring it all together:

for(var i = 0, length = sizes.length; i < length; i++) {
    folders[i] = Folder(folder + "/Wallpapers" + sizes[i]);
    if(!folders[i].exists) folders[i].create();
}


You have a lot of code here, and you are repeating yourself in a lot of places just like you did in the example above.

I recommend you take this idea that I showed you above and apply it to rest of your code.

Code Snippets

var folder0 = Folder(folder + "/Wallpapers");
if(!folder0.exists) folder0.create();

var folder1 = Folder(folder + "/Wallpapers/5x4");
if(!folder1.exists) folder1.create();

var folder2 = Folder(folder + "/Wallpapers/4x3");
if(!folder2.exists) folder2.create();

var folder3 = Folder(folder + "/Wallpapers/3x2");
if(!folder3.exists) folder3.create();

var folder4 = Folder(folder + "/Wallpapers/8x5");
if(!folder4.exists) folder4.create();

var folder5 = Folder(folder + "/Wallpapers/5x3");
if(!folder5.exists) folder5.create();

var folder6 = Folder(folder + "/Wallpapers/16x9");
if(!folder6.exists) folder6.create();

var folder7 = Folder(folder + "/Wallpapers/17x9");
if(!folder7.exists) folder7.create();

var folder8 = Folder(folder + "/Wallpapers/21x9");
if(!folder8.exists) folder8.create();
"/Wallpapers/NxN"
var sizes = ["", "/5x4", "/4x3", "/3x2", ...];
for(var i = 0, length = sizes.length; i < length; i++) {

}
folders[i] = Folder(folder + "/Wallpapers" + sizes[i]);

Context

StackExchange Code Review Q#99274, answer score: 5

Revisions (0)

No revisions yet.