Skip to content

Instantly share code, notes, and snippets.

@mitchellknight
Created March 10, 2023 20:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mitchellknight/e474aed44bee7c502d8749b33012018b to your computer and use it in GitHub Desktop.
Save mitchellknight/e474aed44bee7c502d8749b33012018b to your computer and use it in GitHub Desktop.
/**
* StorySplitter 3.0.0 by FourAces/The Final Touch
*
* Splits the selected Story to separate Text Frames, while maintaining
* their contents.
**/
var myScriptVer = "3.0";
if ( app.documents.length != 0 ) {
var mySelection = app.activeDocument.selection;
if ( mySelection.length != 0 ) {
myObjectType = mySelection[ 0 ].constructor.name;
if ( myObjectType == "TextFrame" ) {
//The Interface Dialog
var myDialog = app.dialogs.add( { name: "Story Splitter v" + myScriptVer } );
with( myDialog ) {
with( dialogColumns.add() ) {
with( dialogRows.add() ) {
with( borderPanels.add() ) {
var mySplitOptions = radiobuttonGroups.add();
with( mySplitOptions ) {
radiobuttonControls.add( { staticLabel: "Split All Frames", checkedState: true } );
radiobuttonControls.add( { staticLabel: "Split Before Selected Frame" } );
radiobuttonControls.add( { staticLabel: "Split After Selected Frame" } );
}
}
}
with( dialogRows.add() ) {
staticTexts.add( { staticLabel: "© The Final Touch" } );
}
}
}
var myResult = myDialog.show( { name: "SplitOptions" } );
if ( myResult == true ) {
var myStory = mySelection[ 0 ].parentStory;
if ( app.version.split( "." )[ 0 ] >= 5 ) {
var myTextFrames = myStory.textContainers;
} else {
var myTextFrames = myStory.textFrames;
}
var myStoryFramesCount = myTextFrames.length;
if ( myStoryFramesCount > 1 ) {
for ( f = 0; f < myStoryFramesCount; f++ ) {
if ( mySelection[ 0 ] == myStory.textFrames[ f ] ) {
var myTextFrame = f;
}
}
switch ( mySplitOptions.selectedButton ) {
case 0:
mySplitAll();
break;
case 1:
mySplitBefore();
break;
case 2:
mySplitAfter();
break;
}
} else {
alert( "Are You Kidding Me?!\nThe Story you selected has only ONE text frame." );
}
}
} else {
alert( "Wrong Selection\nYou selected the wrong type of object. Please select a Text Frame." );
}
} else {
alert( "No Selection Made.\nPlease select a Story to split." );
}
} else {
alert( "No Active Document Found.\nPlease open an InDesign document and select a Story to split." );
}
function mySplitAll() {
for ( i = 0; i < myStoryFramesCount; i++ ) {
myTextFrames[ i ].duplicate();
}
for ( i = 0; i < myStoryFramesCount; i++ ) {
if ( app.version.split( "." )[ 0 ] >= 5 ) {
myTextFrames[ i ].remove();
} else {
myTextFrames[ 0 ].remove();
}
}
}
function mySplitBefore() {
if ( mySelection[ 0 ].previousTextFrame == null ) {
alert( "Unable Break Thread.\nThe selected Text Frame is the FIRST text frame of the thread." );
} else {
var myBfBreakFrame = mySelection[ 0 ].previousTextFrame;
var myAfBreakFrame = mySelection[ 0 ];
var myBreakStory = myBfBreakFrame.parentStory;
mySelection[ 0 ].previousTextFrame = null;
if ( myBfBreakFrame.overflows == true ) {
var myOversetText = myBreakStory.texts.itemByRange( myBfBreakFrame.insertionPoints[ -1 ], myBreakStory.insertionPoints[ -1 ] );
myOversetText.select();
app.cut();
app.select( myAfBreakFrame.insertionPoints[ 0 ] );
app.paste();
}
}
}
function mySplitAfter() {
if ( mySelection[ 0 ].nextTextFrame == null ) {
alert( "Unable Break Thread.\nThe selected Text Frame is the LAST text frame of the thread." );
} else {
var myBfBreakFrame = mySelection[ 0 ];
var myAfBreakFrame = mySelection[ 0 ].nextTextFrame;
var myBreakStory = myBfBreakFrame.parentStory;
mySelection[ 0 ].nextTextFrame = null;
if ( myBfBreakFrame.overflows == true ) {
var myOversetText = myBreakStory.texts.itemByRange( myBfBreakFrame.insertionPoints[ -1 ], myBreakStory.insertionPoints[ -1 ] );
myOversetText.select();
app.cut();
app.select( myAfBreakFrame.insertionPoints[ 0 ] );
app.paste();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment