Copy link to clipboard
Copied
Hello, I can't figure out, how to get the index of the active Page in a document. I can't use "activePage.name", as the name can not show the actual number of the current page. In the forums I found the following function to get javascripts indexOf() function.
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this == null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n != 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t
return k;
}
}
return -1;
}
}
With this I wrote then the following code:
var myDocument = app.activeDocument;
var myPages = myDocument.pages;
var number = myPages.indexOf(myDocument.layoutWindows[0].activePage);
It sadly doesn't work. When I alert "myPages" I can see, that I get the pages object. Can I know somehow get just the array with the values of this?
Thank you in advance!! Appreciate any help!
app.activeWindow[0].activePage.documentOffset
Of course, documentOffset, not index. Thanks for noticing that.
Copy link to clipboard
Copied
You are confusing arrays and collections Document.pages is a collection. If you want to resolve that into an array, you need myCollection.getElements(). In your case that would be myDocument.pages.getElements();
I usually use a convenience function to get items as an array when I want to work with arrays:
It also returns a copy of the array if an array is provided:
AsArray = function (collection){
if(collection instanceof Array){return collection.slice()}
return collection.everyItem().getElements().slice();
}
(The slice on the collection is to improve performance in older versions of InDesign...)
Copy link to clipboard
Copied
Hey, thanks for the help, I think Peters solution is a bit quicker here
Copy link to clipboard
Copied
Anyway, in answer to the OP's question : )
This returns the active page's index:
app.windows[0].activePage.index
Peter
Copy link to clipboard
Copied
Is it definitely the index that you want? That returns the index of the page within the containing object, which is the Spread, so it's usually just 0 or 1.
If you actually want the number of the page within the document (disregarding section pagination options) you want documentOffset. So, you could use
app.activeWindow[0].activePage.documentOffset.
If you have a 10 page document with two roman-numeral pages and then numbered pages restarting at 1 (i, ii, 1, 2, 3, 4, 5, 6, 7, 8), that will give you a value of 1 for the first page and 10 for the last (as opposed to .name which gives 'i' for the first and '8' for the last).
Copy link to clipboard
Copied
app.activeWindow[0].activePage.documentOffset
Of course, documentOffset, not index. Thanks for noticing that.
Copy link to clipboard
Copied
Hey, thank you really much!!! Don't know how I could not find this solution .
Copy link to clipboard
Copied
And without the "[0]", it finally works correctly, like this:
app.activeWindow.activePage.documentOffset
To get the "nth" page in the document, I use, hence:
var myPage = Number(app.activeWindow.activePage.documentOffset) + 1;
Copy link to clipboard
Copied
Ah, yes, I mixed up app.activeWindow and app.windows[0].
Copy link to clipboard
Copied
Correct, but the first page starts at 0, not 1:
alert (app.activeDocument.pages[0].documentOffset);
Copy link to clipboard
Copied
That's true. It's actually quite handy for what I am doing, as I am using the active Page value in an array for xml elements. So for example site[activePage] is doing the right effect for me, as before I had to do 'index = activePage - 1;' . For most other purposes, you would of course have to use app.activeDocument.pages[0].documentOffset +1
Find more inspiration, events, and resources on the new Adobe Community
Explore Now