Copy link to clipboard
Copied
Hi all,
Could anyone please have a look on the below script and help me to get a version without the fancy dialog window? I tried to do it myself, but no luck 😞 I intent to merge it with another script, so basically, I just need the code to move 'All' items into 'Layer name from the artboard name' and 'clear empty layers & sub layers'. That's it! Any help would be greatly appreciated.
/*
Program version: Adobe Illustrator CS5+
Name: artboardItemsMoveToNewLayer.jsx;
Author: Alexander Ladygin, email: i@ladygin.pro
Copyright (c) 2018
www.ladyginpro.ru
*/
Object.prototype.removeItemsWithArray = function (items) {var obj = [];for (var i = 0; i < this.length; i++) {if (!check(this[i])) {obj.push(this[i]);}}function check(e) {for (var j = 0; j < items.length; j++) {if (e === items[j]) {return true;}}return false;}return obj;};
Object.prototype.emptyLayers = function () {var arr = [];function check(layers) {var obj = [];for (var i = 0; i < layers.length; i++) {if (!layers[i].layers.length && !layers[i].pageItems.length) { obj.push(layers[i]); continue;} var subLayers = layers[i].subLayers(),emptySubLayers = layers[i].emptySubLayers(),count = subLayers.removeItemsWithArray(emptySubLayers).length;if (!count && !layers[i].pageItems.length) {obj = obj.concat(layers[i]);}}return obj;}var doc = this;for (var i = 0; i < doc.length; i++) {arr = arr.concat(check(doc[i].layers));}return arr;};
Object.prototype.subLayers = function (level) {var arr = [], count = 0;if (level !== undefined) {level = level - 1;}function subLayers(layer) {var obj = [], sub = layer.layers;for (var j = 0; j < sub.length; j++) {obj = obj.concat(sub[j]);if ((level === undefined) || (sub[j].layers.length > 0 && count < level)) {obj = obj.concat(subLayers(sub[j], count++));count--;}}return obj;}var obj = this;for (var j = 0; j < obj.length; j++) {arr = arr.concat(subLayers(obj[j]));}return arr;};
Object.prototype.emptySubLayers = function (level) {var arr = [], obj = this;function process(sub) {var sub_arr = [];sub = sub.subLayers(level).reverse();for (var i = 0; i < sub.length; i++) {if (sub[i].pageItems.length > 0) {var parents = sub[i].pageItems[0].getAllParents();parents.pop();sub_arr = sub_arr.concat(parents);}}return sub.removeItemsWithArray(sub_arr).reverse();}for (var i = 0; i < obj.length; i++) {arr = arr.concat(process(obj[i]));}return arr;};
Array.prototype.remove = function(){var i = this.length; if (i > 0) while (i--) this[i].remove();}
var scriptName = 'AIMTNL',
copyright = ' \u00A9 www.ladyginpro.ru',
settingFile = {
name: scriptName + '__setting.json',
folder: Folder.myDocuments + '/LA_AI_Scripts/'
};
if (app.documents.length) {
function getCustomNumbers ($str, items, returnItems) {
var __num = $str.replace(/ /g, '').replace(/[^-0-9^,]/gim,'').split(','),
$maxItems = items.length,
l = __num.length,
arr = [];
function getNumbersBetweenMinMax (min, max) {
var numbers = [];
for (var n = min; n <= max; n++) {
if (n < $maxItems) {
numbers.push(returnItems ? items[n] : n);
}
}
return numbers;
}
for (var j = 0; j < l; j++) {
if (__num[j].indexOf('-') > -1) {
var values = __num[j].split('-'),
min = parseInt(values[0]),
max = parseInt(values[1]);
if (!isNaN(min) && !isNaN(max)) arr = arr.concat(getNumbersBetweenMinMax(min - 1, max - 1));
}
else {
var __val = parseInt(__num[j]);
if (!isNaN(__val) && __val <= $maxItems) {
arr.push(returnItems ? items[__val - 1] : __val - 1);
}
}
}
return arr;
}
function __artboardItemsMoveToNewLayer (__artNumbers) {
var arts = activeDocument.artboards,
l = __artNumbers.length;
selection = null;
function __move (items, __index) {
var layer = activeDocument.layers.add(),
j = items.length;
if (layerNameCheckbox.value) layer.name = arts[__index].name;
if (j > 0) while (j--) {
items[j].moveToBeginning(layer);
}
}
for (var i = 0; i < l; i++) {
activeDocument.artboards.setActiveArtboardIndex(__artNumbers[i]);
activeDocument.selectObjectsOnActiveArtboard();
__move(selection, __artNumbers[i]);
selection = null;
}
}
var selectionBak = selection;
var win = new Window('dialog', 'Artboards items move to new layer \u00A9 www.ladyginpro.ru', undefined);
win.orientation = 'column';
win.alignChildren = ['fill', 'fill'];
var panel = win.add('panel', undefined, 'Artboards:');
panel.orientation = 'column';
panel.alignChildren = ['fill', 'fill'];
panel.margins = 20;
var groupRadio = panel.add('group');
groupRadio.orientation = 'row';
var allArtboardsRadio = groupRadio.add('radiobutton', undefined, 'All'),
customArtboardsRadio = groupRadio.add('radiobutton', undefined, 'Custom');
allArtboardsRadio.value = true;
allArtboardsRadio.onClick = function () { customArts.enabled = false; };
customArtboardsRadio.onClick = function () { customArts.enabled = true; };
var customArts = panel.add('edittext', undefined, activeDocument.artboards.getActiveArtboardIndex() + 1);
customArts.enabled = false;
var panelCheckbox = win.add('panel');
panelCheckbox.orientation = 'column';
panelCheckbox.alignChildren = ['fill', 'fill'];
panelCheckbox.margins = 10;
var removeEmptyLayersCheckbox = panelCheckbox.add('checkbox', undefined, 'Clear empty layers & sub layers'),
layerNameCheckbox = panelCheckbox.add('checkbox', undefined, 'Layer name from the artboard name');
var winButtons = win.add('group');
winButtons.orientation = 'row';
winButtons.alignChildren = ['fill', 'fill'];
var cancel = winButtons.add('button', undefined, 'Cancel');
cancel.helpTip = 'Press Esc to Close';
cancel.onClick = function () { win.close(); }
var ok = winButtons.add('button', undefined, 'OK');
ok.helpTip = 'Press Enter to Run';
ok.onClick = startAction;
ok.active = true;
function startAction() {
var __arts = [];
__arts = getCustomNumbers((customArtboardsRadio.value ? customArts.text : ('1-' + activeDocument.artboards.length)), activeDocument.artboards);
__artboardItemsMoveToNewLayer(__arts);
if (removeEmptyLayersCheckbox.value) [activeDocument].emptyLayers().remove();
// selection = selectionBak;
win.close();
}
selection = null;
function saveSettings() {
var $file = new File(settingFile.folder + settingFile.name),
data = [
allArtboardsRadio.value,
customArtboardsRadio.value,
removeEmptyLayersCheckbox.value,
layerNameCheckbox.value
].toString() + '\n' + customArts.text;
$file.open('w');
$file.write(data);
$file.close();
}
function loadSettings() {
var $file = File(settingFile.folder + settingFile.name);
if ($file.exists) {
try {
$file.open('r');
var data = $file.read().split('\n'),
$main = data[0].split(','),
$arts = data[1];
allArtboardsRadio.value = ($main[0] === 'true');
customArtboardsRadio.value = ($main[1] === 'true');
removeEmptyLayersCheckbox.value = ($main[2] === 'true');
layerNameCheckbox.value = ($main[3] === 'true');
customArts.text = $arts;
customArts.enabled = customArtboardsRadio.value;
} catch (e) {}
$file.close();
}
}
function checkSettingFolder() {
var $folder = new Folder(settingFile.folder);
if (!$folder.exists) $folder.create();
}
win.onClose = function () {
saveSettings();
return true;
}
checkSettingFolder();
loadSettings();
win.center();
win.show();
}
else {
throw new Error('Create document!');
}
/*
Program version: Adobe Illustrator CS5+
Name: artboardItemsMoveToNewLayer.jsx;
Author: Alexander Ladygin, email: i@ladygin.pro
Copyright (c) 2018
www.ladyginpro.ru
19-June-2024 Silent version (without UI)
https://community.adobe.com/t5/illustrator-discussions/help-to-get-a-script-without-dialog-window/td-p/14689770
*/
Object.prototype.removeItemsWithArray = function (items) {
var obj = [];
for (var i = 0; i < this.length; i++) {
if (!check(this[i])) {
obj.pus...
Copy link to clipboard
Copied
/*
Program version: Adobe Illustrator CS5+
Name: artboardItemsMoveToNewLayer.jsx;
Author: Alexander Ladygin, email: i@ladygin.pro
Copyright (c) 2018
www.ladyginpro.ru
19-June-2024 Silent version (without UI)
https://community.adobe.com/t5/illustrator-discussions/help-to-get-a-script-without-dialog-window/td-p/14689770
*/
Object.prototype.removeItemsWithArray = function (items) {
var obj = [];
for (var i = 0; i < this.length; i++) {
if (!check(this[i])) {
obj.push(this[i]);
}
}
function check(e) {
for (var j = 0; j < items.length; j++) {
if (e === items[j]) {
return true;
}
}
return false;
}
return obj;
};
Object.prototype.emptyLayers = function () {
var arr = [];
function check(layers) {
var obj = [];
for (var i = 0; i < layers.length; i++) {
if (!layers[i].layers.length && !layers[i].pageItems.length) {
obj.push(layers[i]);
continue;
}
var subLayers = layers[i].subLayers();
var emptySubLayers = layers[i].emptySubLayers();
var count = subLayers.removeItemsWithArray(emptySubLayers).length;
if (!count && !layers[i].pageItems.length) {
obj = obj.concat(layers[i]);
}
}
return obj;
}
var doc = this;
for (var i = 0; i < doc.length; i++) {
arr = arr.concat(check(doc[i].layers));
}
return arr;
};
Object.prototype.subLayers = function (level) {
var arr = [];
var count = 0;
if (level !== undefined) {
level = level - 1;
}
function subLayers(layer) {
var obj = [];
var sub = layer.layers;
for (var j = 0; j < sub.length; j++) {
obj = obj.concat(sub[j]);
if ((level === undefined) || (sub[j].layers.length > 0 && count < level)) {
obj = obj.concat(subLayers(sub[j], count++));
count--;
}
}
return obj;
}
var obj = this;
for (var j = 0; j < obj.length; j++) {
arr = arr.concat(subLayers(obj[j]));
}
return arr;
};
Object.prototype.emptySubLayers = function (level) {
var arr = [];
var obj = this;
function process(sub) {
var sub_arr = [];
sub = sub.subLayers(level).reverse();
for (var i = 0; i < sub.length; i++) {
if (sub[i].pageItems.length > 0) {
var parents = sub[i].pageItems[0].getAllParents();
parents.pop();
sub_arr = sub_arr.concat(parents);
}
}
return sub.removeItemsWithArray(sub_arr).reverse();
}
for (var i = 0; i < obj.length; i++) {
arr = arr.concat(process(obj[i]));
}
return arr;
};
Array.prototype.remove = function () {
var i = this.length;
if (i > 0)
while (i--) this[i].remove();
}
function __artboardItemsMoveToNewLayer() {
var arts = activeDocument.artboards;
var l = arts.length;
selection = null;
function __move(items, __index) {
var layer = activeDocument.layers.add();
var j = items.length;
layer.name = arts[__index].name;
if (j > 0)
while (j--) {
items[j].moveToBeginning(layer);
}
}
for (var i = 0; i < l; i++) {
activeDocument.artboards.setActiveArtboardIndex(i);
activeDocument.selectObjectsOnActiveArtboard();
__move(selection, i);
selection = null;
}
}
function main() {
if (!app.documents.length) {
return;
}
__artboardItemsMoveToNewLayer();
[activeDocument].emptyLayers().remove();
selection = null;
}
main();
Copy link to clipboard
Copied
That's exactly what I need 🙂 Thanks so much @Sergey Osokin !
Get ready! An upgraded Adobe Community experience is coming in January.
Learn more