Created
March 10, 2023 20:59
-
-
Save mitchellknight/e474aed44bee7c502d8749b33012018b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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