Inspiring
August 12, 2022
Answered
Sort sublayers numerically in ai
- August 12, 2022
- 4 replies
- 1116 views
Fixed
var isLowerFirst = false; // Set it to false if you want to place the layers with the first uppercase letter above
var isReverse = false; // Set it to false if you want to sort names in reverse order
// Convert ILST collection into standard Array so we can use Array methods
function get(type, parent) {
if (arguments.length == 1 || !parent) parent = app.activeDocument;
var result = [];
if (!parent[type]) return result;
for (var i = 0; i < parent[type].length; i++) result.push(parent[type][i]);
return result;
}
// Polyfill for Array.forEach
Array.prototype.forEach = function (callback) {
for (var i = 0; i < this.length; i++) callback(this[i], i, this);
};
// Check string
function isEmpty(s) {
return s.replace(/\s/g, '').length == 0;
}
// Get pageItem name
function getName(e) {
if (e.typename === "TextFrame" && isEmpty(e.name) && !isEmpty(e.contents)) {
return e.contents;
} else if (e.typename === "SymbolItem" && isEmpty(e.name)) {
return e.symbol.name;
} else {
return e.name;
}
}
function sortLayerItems(parent, isReverse) {
if (arguments.length == 1 || !isReverse) isReverse = false;
function isUpperCase(text) {
return /[A-Z]/.test(text.charAt(0))
}
function isLowerCase(text) {
return /[a-z]/.test(text.charAt(0))
}
function hasMixedCase(a, b) {
if (a.charAt(0).toLowerCase() !== b.charAt(0).toLowerCase()) return false;
return isUpperCase(a) && isLowerCase(b) ? true : isLowerCase(a) && isUpperCase(b);
}
function handleMixedCase(a, b) {
var result = a === b ? 0 : isUpperCase(a) ? 1 : -1;
return isLowerFirst ? result : result * -1;
}
get("pageItems", parent)
.sort(function (a, b) {
var aName = getName(a);
var bName = getName(b);
if (!isNaN(aName) && !isNaN(bName)) {
return 1 * aName - 1 * bName;
} else {
return hasMixedCase(aName, bName) ?
handleMixedCase(aName, bName) :
aName.toLowerCase().localeCompare(bName.toLowerCase())
}
})
.forEach(function (e) {
e.zOrder(isReverse ? ZOrderMethod.BRINGTOFRONT : ZOrderMethod.SENDTOBACK);
});
}
sortLayerItems(activeDocument.activeLayer, isReverse);Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.