davestewart
6/29/2015 - 1:33 PM

Reorder Illustrator layers by name

Reorder Illustrator layers by name

#target "Illustrator"
 

function trace()
{
	$.writeln(arguments[0] || '');
	return '';
}


function inspect(obj)
{
	if(!obj)return
	for(var name in obj)
	{
		$.writeln(name + ' > ' + obj[name]);
	}
}

function collect(collection, prop)
{
	var arr = [];
	for(var i = 0; i < collection.length; i++)
	{
		arr.push(prop ? collection[i][prop] : collection[i]);
	}
	return arr;
}

function orderItems()
{
	var layer	= app.activeDocument.layers[0];
	
	var groups	= layer.groupItems;
	var paths	= layer.pathItems;
	var names	= [];
	
	names		= names.concat(collect(groups, 'name'));
	names		= names.concat(collect(paths, 'name'));
	names.sort();

	for(var i = 0; i < names.length; i++)
	{
		var name = names[i];
		var item;
		try
		{
			item = items.getByName(name);
		}
		catch(err)
		{
			item = paths.getByName(name);
		}
		
		item.zOrder(ZOrderMethod.SENDTOBACK);
	}
	return true;
}

function orderItems(layer)
{
	trace(layer instanceof GroupItem)
	layer		= layer || app.activeDocument.activeLayer;
	var items	= layer.pageItems;
	var names	= collect(items, 'name').sort();
	for(var i = 0; i < names.length; i++)
	{
		item = items.getByName(names[i]);
		item.zOrder(ZOrderMethod.SENDTOBACK);
	}
	return true;
}

// reorder
orderItems(app.activeDocument.layers[0].groupItems[0])

// debug
trace(app.activeDocument.layers[0].pageItems.length)