Copy link to clipboard
Copied
Hi all,
I'm trying to override all masterpage items from my script ...
function OverrideMasterItems(CurrentPage) {
document.pages[CurrentPage].appliedMaster.pageItems.everyItem().override(document.pages[CurrentPage]);
}
but I get "Invalid object for this request".
Any hints?
--
molsted
Like I said before: You're probably trying to override an object which is already overridden...
This should work. (Although there's probably more efficient ways to do this...)
function OverrideMasterItems() {
var allItems = myDocument.pages[CurrentPage].appliedMaster.pageItems.everyItem().getElements();
for(var i=0;i<allItems.length;i++){
try{allItems.override(myDocument.pages[CurrentPage])}
catch(e){}
}
}
Harbs
Copy link to clipboard
Copied
Presumably, CurrentPage is a number equal to the documentOffset of the page of interest.
But what is "document" -- you're not passing that into your function. Is it a global set to the activeDocument?
Once I defined that, your script worked for me (although I did have to delete a space in "pageItems".
Dave
Copy link to clipboard
Copied
Hi Dave,
here's the script in its whole
#target indesign;
var myDocument = app.activeDocument;
var TotalPages = (myDocument.pages.count());
for(var CurrentPage=0; CurrentPage < TotalPages; CurrentPage++) {
OverrideMasterItems();
}function OverrideMasterItems() {
myDocument.pages[CurrentPage].appliedMaster.pageItems.everyItem().override(myDocument.pages[CurrentPage]);
}
--
molsted
Copy link to clipboard
Copied
Like I said before: You're probably trying to override an object which is already overridden...
This should work. (Although there's probably more efficient ways to do this...)
function OverrideMasterItems() {
var allItems = myDocument.pages[CurrentPage].appliedMaster.pageItems.everyItem().getElements();
for(var i=0;i<allItems.length;i++){
try{allItems.override(myDocument.pages[CurrentPage])}
catch(e){}
}
}
Harbs
Copy link to clipboard
Copied
Thanks a bunch, Harbs, that did the trick.
--
molsted
Copy link to clipboard
Copied
Hi Harbs, can this be apply to just one layer? lets say i only want to detach certain text frames on an specific layer, can that be done?
Copy link to clipboard
Copied
#target indesign;
var myDocument = app.activeDocument;
var TotalPages = (myDocument.pages.count());
for(var CurrentPage=0; CurrentPage < TotalPages; CurrentPage++) {
OverrideMasterItems();
}
function OverrideMasterItems() {
var theLayer = myDocument.layers.item("Layer 1");
var allItems = myDocument.pages[CurrentPage].appliedMaster.pageItems.everyItem().getElements();
for(var i=0;i<allItems.length;i++){
try{
if (allItems.itemLayer == theLayer) {
allItems.override(myDocument.pages[CurrentPage]);
}
}
catch(e){}
}
}
Copy link to clipboard
Copied
Are you overriding an already overridden object?
Harbs
Copy link to clipboard
Copied
for(var i=myPage.appliedMaster.pageItems.length-1;i>=0; i--)
{
if(myPage.appliedMaster.pageItems.parentPage.side==myNewPage.side)
myPage.appliedMaster.pageItems.override(myPage);
}
Please try this. It worked for me.
Shivani
Copy link to clipboard
Copied
For 2023 I noticed there was a Menu shortcut in pages, and that there was a way to execute these via script. Please note that "Parent" was formerly "Master" tested and this works as expected. I personally wasn't able to get the loops to work.
app.menuActions.itemByName("$ID/Override All Parent Page Items").invoke();
Copy link to clipboard
Copied
Hi @wckdtall , here the script to loop document to override all parent pages items (tested in 2023) :
//Override All Document
OverrideDoc();
function OverrideDoc() {
var mA = app.menuActions.itemByName("$ID/Override All Parent Page Items");
var doc = app.documents[0];
var allDocSpreads = doc.spreads.everyItem().getElements(); //Here is Pages Range
var allDocSpreadsLength = allDocSpreads.length;
for( var n=0; n<allDocSpreadsLength; n++ ) //Loop inSide Pages Range
{
doc.layoutWindows[0].activeSpread = allDocSpreads[n]; //you can delete this, just to show process
if( mA.isValid && mA.enabled ){ mA.invoke() };
};
}
note that you can use any of these and will get the same results :
var mA = app.menuActions.itemByName("$ID/Override All Master Page Items");
or
var mA = app.menuActions.itemByName("$ID/Override All Parent Page Items");