Skip to main content
Inspiring
July 13, 2014
Answered

Change script function

  • July 13, 2014
  • 1 reply
  • 590 views

Can you change the function of script “find-change-by-list“?

I want to change in all my opening files.

main();

function main(){

var myObject;

//Make certain that user interaction (display of dialogs, etc.) is turned on.

app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

if(app.documents.length > 0){

  if(app.selection.length > 0){

   switch(app.selection[0].constructor.name){

    case "InsertionPoint":

    case "Character":

    case "Word":

    case "TextStyleRange":

    case "Line":

    case "Paragraph":

    case "TextColumn":

    case "Text":

    case "Cell":

    case "Column":

    case "Row":

    case "Table":

     myDisplayDialog();

     break;

    default:

     //Something was selected, but it wasn't a text object, so search the document.

     myFindChangeByList(app.documents.item(0));

   }

  }

  else{

   //Nothing was selected, so simply search the document.

   myFindChangeByList(app.documents.item(0));

  }

}

else{

  alert("No documents are open. Please open a document and try again.");

}

}

function myDisplayDialog(){

var myObject;

var myDialog = app.dialogs.add({name:"FindChangeByList"});

with(myDialog.dialogColumns.add()){

  with(dialogRows.add()){

   with(dialogColumns.add()){

    staticTexts.add({staticLabel:"Search Range:"});

   }

   var myRangeButtons = radiobuttonGroups.add();

   with(myRangeButtons){

    radiobuttonControls.add({staticLabel:"Document", checkedState:true});

    radiobuttonControls.add({staticLabel:"Selected Story"});

    if(app.selection[0].contents != ""){

     radiobuttonControls.add({staticLabel:"Selection", checkedState:true});

    }

   } 

  }

}

var myResult = myDialog.show();

if(myResult == true){

  switch(myRangeButtons.selectedButton){

   case 0:

    myObject = app.documents.item(0);

    break;

   case 1:

    myObject = app.selection[0].parentStory;

    break;

   case 2:

    myObject = app.selection[0];

    break;

  }

  myDialog.destroy();

  myFindChangeByList(myObject);

}

else{

  myDialog.destroy();

}

}

function myFindChangeByList(myObject){

var myScriptFileName, myFindChangeFile, myFindChangeFileName, myScriptFile, myResult;

var myFindChangeArray, myFindPreferences, myChangePreferences, myFindLimit, myStory;

var myStartCharacter, myEndCharacter;

var myFindChangeFile = myFindFile("/FindChangeSupport/testing001.txt")

if(myFindChangeFile != null){

  myFindChangeFile = File(myFindChangeFile);

  var myResult = myFindChangeFile.open("r", undefined, undefined);

  if(myResult == true){

   //Loop through the find/change operations.

   do{

    myLine = myFindChangeFile.readln();

    //Ignore comment lines and blank lines.

    if((myLine.substring(0,4)=="text")||(myLine.substring(0,4)=="grep")||(myLine.substring(0,5)=="glyph")){

     myFindChangeArray = myLine.split("\t");

     //The first field in the line is the findType string.

     myFindType = myFindChangeArray[0];

     //The second field in the line is the FindPreferences string.

     myFindPreferences = myFindChangeArray[1];

     //The second field in the line is the ChangePreferences string.

     myChangePreferences = myFindChangeArray[2];

     //The fourth field is the range--used only by text find/change.

     myFindChangeOptions = myFindChangeArray[3];

     switch(myFindType){

      case "text":

       myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

       break;

      case "grep":

       myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

       break;

      case "glyph":

       myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

       break;

     }

    }

   } while(myFindChangeFile.eof == false);

   myFindChangeFile.close();

  }

}

}

function myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

//Reset the find/change preferences before each search.

app.changeTextPreferences = NothingEnum.nothing;

app.findTextPreferences = NothingEnum.nothing;

var myString = "app.findTextPreferences.properties = "+ myFindPreferences + ";";

myString += "app.changeTextPreferences.properties = " + myChangePreferences + ";";

myString += "app.findChangeTextOptions.properties = " + myFindChangeOptions + ";";

app.doScript(myString, ScriptLanguage.javascript);

myFoundItems = myObject.changeText();

//Reset the find/change preferences after each search.

app.changeTextPreferences = NothingEnum.nothing;

app.findTextPreferences = NothingEnum.nothing;

}

function myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

//Reset the find/change grep preferences before each search.

app.changeGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences = NothingEnum.nothing;

var myString = "app.findGrepPreferences.properties = "+ myFindPreferences + ";";

myString += "app.changeGrepPreferences.properties = " + myChangePreferences + ";";

myString += "app.findChangeGrepOptions.properties = " + myFindChangeOptions + ";";

app.doScript(myString, ScriptLanguage.javascript);

var myFoundItems = myObject.changeGrep();

//Reset the find/change grep preferences after each search.

app.changeGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences = NothingEnum.nothing;

}

function myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

//Reset the find/change glyph preferences before each search.

app.changeGlyphPreferences = NothingEnum.nothing;

app.findGlyphPreferences = NothingEnum.nothing;

var myString = "app.findGlyphPreferences.properties = "+ myFindPreferences + ";";

myString += "app.changeGlyphPreferences.properties = " + myChangePreferences + ";";

myString += "app.findChangeGlyphOptions.properties = " + myFindChangeOptions + ";";

app.doScript(myString, ScriptLanguage.javascript);

var myFoundItems = myObject.changeGlyph();

//Reset the find/change glyph preferences after each search.

app.changeGlyphPreferences = NothingEnum.nothing;

app.findGlyphPreferences = NothingEnum.nothing;

}

function myFindFile(myFilePath){

var myScriptFile = myGetScriptPath();

var myScriptFile = File(myScriptFile);

var myScriptFolder = myScriptFile.path;

myFilePath = myScriptFolder + myFilePath;

if(File(myFilePath).exists == false){

  //Display a dialog.

  myFilePath = File.openDialog("Choose the file containing your find/change list");

}

return myFilePath;

}

function myGetScriptPath(){

try{

  myFile = app.activeScript;

}

catch(myError){

  myFile = myError.fileName;

}

return myFile;

}

This topic has been closed for replies.
Correct answer Jump_Over

Hi,

to go across all file a dialog should be called.

For now only way is to select some text or place a cursor inside any text.

You can run it this way or paste myDisplayDialog()

into the lines as screen shows:

Jarek

1 reply

Jump_Over
Brainiac
July 13, 2014

Hi,

Notice the last part of a function myDisplayDialog() ==> where it is being decided which parameter became a target of script.

We can modify this part. Lets change mObject constructor as an array. Main procedure can be called as many times as long is this array. So:

//.............

if(myResult == true){

  var cObj;

  switch(myRangeButtons.selectedButton){

  case 0:

  myObject = app.documents.everyItem().getElements();     //     array

  break;

  case 1:

  myObject = [app.selection[0].parentStory];     //     array

  break;

  case 2:

  myObject = [ app.selection[0] ];     //     array

  break;

  }

  myDialog.destroy();

  while (cObj = myObject.shift() )     // cutting an array

       myFindChangeByList(cObj);

} else {

  myDialog.destroy();

  }

//.............

to be more accurate you could modify this line as well:

//....................

radiobuttonControls.add({staticLabel:"Opened documents", checkedState:true});

//....................

Jarek

JohnwhiteAuthor
Inspiring
July 13, 2014

Hi, Jarek

I change the script like this:

main();

function main(){

var myObject;

//Make certain that user interaction (display of dialogs, etc.) is turned on.

app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

if(app.documents.length > 0){

  if(app.selection.length > 0){

   switch(app.selection[0].constructor.name){

    case "InsertionPoint":

    case "Character":

    case "Word":

    case "TextStyleRange":

    case "Line":

    case "Paragraph":

    case "TextColumn":

    case "Text":

    case "Cell":

    case "Column":

    case "Row":

    case "Table":

     myDisplayDialog();

     break;

    default:

     //Something was selected, but it wasn't a text object, so search the document.

     myFindChangeByList(app.documents.item(0));

   }

  }

  else{

   //Nothing was selected, so simply search the document.

   myFindChangeByList(app.documents.item(0));

  }

}

else{

  alert("No documents are open. Please open a document and try again.");

}

}

function myDisplayDialog(){

var myObject;

var myDialog = app.dialogs.add({name:"FindChangeByList"});

with(myDialog.dialogColumns.add()){

  with(dialogRows.add()){

   with(dialogColumns.add()){

    staticTexts.add({staticLabel:"Search Range:"});

   }

   var myRangeButtons = radiobuttonGroups.add();

   with(myRangeButtons){

    radiobuttonControls.add({staticLabel:"Opened documents", checkedState:true});

    radiobuttonControls.add({staticLabel:"Selected Story"});

    if(app.selection[0].contents != ""){

     radiobuttonControls.add({staticLabel:"Selection", checkedState:true});

    }

   }  

  }

}

var myResult = myDialog.show();

if(myResult == true){ 

  var cObj; 

  switch(myRangeButtons.selectedButton){ 

  case 0: 

  myObject = app.documents.everyItem().getElements();     //     array 

  break; 

  case 1: 

  myObject = [app.selection[0].parentStory];     //     array 

  break; 

  case 2: 

  myObject = [ app.selection[0] ];     //     array 

  break; 

  } 

  myDialog.destroy(); 

  while (cObj = myObject.shift() )     // cutting an array 

       myFindChangeByList(cObj); 

} else { 

  myDialog.destroy(); 

  } 

}

function myFindChangeByList(myObject){

var myScriptFileName, myFindChangeFile, myFindChangeFileName, myScriptFile, myResult;

var myFindChangeArray, myFindPreferences, myChangePreferences, myFindLimit, myStory;

var myStartCharacter, myEndCharacter;

var myFindChangeFile = myFindFile("/FindChangeSupport/testing001.txt")

if(myFindChangeFile != null){

  myFindChangeFile = File(myFindChangeFile);

  var myResult = myFindChangeFile.open("r", undefined, undefined);

  if(myResult == true){

   //Loop through the find/change operations.

   do{

    myLine = myFindChangeFile.readln();

    //Ignore comment lines and blank lines.

    if((myLine.substring(0,4)=="text")||(myLine.substring(0,4)=="grep")||(myLine.substring(0,5)=="glyph")){

     myFindChangeArray = myLine.split("\t");

     //The first field in the line is the findType string.

     myFindType = myFindChangeArray[0];

     //The second field in the line is the FindPreferences string.

     myFindPreferences = myFindChangeArray[1];

     //The second field in the line is the ChangePreferences string.

     myChangePreferences = myFindChangeArray[2];

     //The fourth field is the range--used only by text find/change.

     myFindChangeOptions = myFindChangeArray[3];

     switch(myFindType){

      case "text":

       myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

       break;

      case "grep":

       myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

       break;

      case "glyph":

       myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions);

       break;

     }

    }

   } while(myFindChangeFile.eof == false);

   myFindChangeFile.close();

  }

}

}

function myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

//Reset the find/change preferences before each search.

app.changeTextPreferences = NothingEnum.nothing;

app.findTextPreferences = NothingEnum.nothing;

var myString = "app.findTextPreferences.properties = "+ myFindPreferences + ";";

myString += "app.changeTextPreferences.properties = " + myChangePreferences + ";";

myString += "app.findChangeTextOptions.properties = " + myFindChangeOptions + ";";

app.doScript(myString, ScriptLanguage.javascript);

myFoundItems = myObject.changeText();

//Reset the find/change preferences after each search.

app.changeTextPreferences = NothingEnum.nothing;

app.findTextPreferences = NothingEnum.nothing;

}

function myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

//Reset the find/change grep preferences before each search.

app.changeGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences = NothingEnum.nothing;

var myString = "app.findGrepPreferences.properties = "+ myFindPreferences + ";";

myString += "app.changeGrepPreferences.properties = " + myChangePreferences + ";";

myString += "app.findChangeGrepOptions.properties = " + myFindChangeOptions + ";";

app.doScript(myString, ScriptLanguage.javascript);

var myFoundItems = myObject.changeGrep();

//Reset the find/change grep preferences after each search.

app.changeGrepPreferences = NothingEnum.nothing;

app.findGrepPreferences = NothingEnum.nothing;

}

function myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){

//Reset the find/change glyph preferences before each search.

app.changeGlyphPreferences = NothingEnum.nothing;

app.findGlyphPreferences = NothingEnum.nothing;

var myString = "app.findGlyphPreferences.properties = "+ myFindPreferences + ";";

myString += "app.changeGlyphPreferences.properties = " + myChangePreferences + ";";

myString += "app.findChangeGlyphOptions.properties = " + myFindChangeOptions + ";";

app.doScript(myString, ScriptLanguage.javascript);

var myFoundItems = myObject.changeGlyph();

//Reset the find/change glyph preferences after each search.

app.changeGlyphPreferences = NothingEnum.nothing;

app.findGlyphPreferences = NothingEnum.nothing;

}

function myFindFile(myFilePath){

var myScriptFile = myGetScriptPath();

var myScriptFile = File(myScriptFile);

var myScriptFolder = myScriptFile.path;

myFilePath = myScriptFolder + myFilePath;

if(File(myFilePath).exists == false){

  //Display a dialog.

  myFilePath = File.openDialog("Choose the file containing your find/change list");

}

return myFilePath;

}

function myGetScriptPath(){

try{

  myFile = app.activeScript;

}

catch(myError){

  myFile = myError.fileName;

}

return myFile;

}

but only work on one file, not the all of my opening files

JohnwhiteAuthor
Inspiring
July 13, 2014

Hi,

to go across all file a dialog should be called.

For now only way is to select some text or place a cursor inside any text.

You can run it this way or paste myDisplayDialog()

into the lines as screen shows:

Jarek


thanks Jarek