Try it and let me know if there are still issues that may land you in trouble.
#targetengine "session"
CreatePalette();
function CreatePalette() {
var myDialog = new Window('palette', 'Search-Replace by Queries');
if (app.extractLabel("KasQueryGetDialogLocation") != "") {
myDialog.location = app.extractLabel("KasQueryGetDialogLocation").split(",");
}
var myGroup = myDialog.add('group', undefined, '');
myGroup.orientation = 'row';
var myCreateQ = myGroup.add('button', undefined, 'Create Query', {name:'CreateQ'});
var mySaveQ = myGroup.add('button', undefined, 'Save Query', {name:'mySaveQ'});
var myRunQ = myGroup.add('button', undefined, 'Run Queries', {name:'myRunQ'});
var mySelectQ = myGroup.add('checkbox', undefined, 'Run on Selection', {name:'mySelectQ'});
mySelectQ.value = true
myDialog.show();
myCreateQ.onClick = function() {
app.changeTextPreferences = app.findTextPreferences = NothingEnum.nothing;
app.menuActions.item("Find/Change...").invoke();
}
mySaveQ.onClick = function() {
app.activeDocument.undo();
var myDescription = GetDescription();
var myQuery = {};
myQuery.findTextPreferences = app.findTextPreferences.properties;
myQuery.changeTextPreferences = app.changeTextPreferences.properties;
myQuery.findChangeTextOptions = app.findChangeTextOptions.properties;
myQuery.description = myDescription
var mySerSettings = myQuery.toSource();
var myFolderPath = Folder.decode(app.filePath.absoluteURI) + "/Scripts/Scripts Panel/Queries";
var myFolder = Folder(myFolderPath);
if (!myFolder.exists) myFolder.create();
//+++++++++++++++++++++++++++++++++++++++++++++
var myNum = [];
var aFile;
var num;
var myFiles = myFolder.getFiles("*.txt");
for (i = 0; i < myFiles.length; i++) {
aFile = myFiles.displayName;
num = parseInt(aFile.split("_")[0]);
myNum.push(num);
}
var myLastNumber = FindLastNumber(myNum);
var myNumber = myLastNumber+1;
if (isNaN (myNumber)) myNumber = 1;
var myPrefix = (myNumber < 10) ? ("0" + myNumber) : myNumber;
var myFileName = myPrefix + "_" + myDescription.substr(0, 30) + ".txt";
var myPath = myFolderPath + "/" + myFileName;
WriteToFile(mySerSettings, myPath);
if (File(myPath).exists) {
alert("Query has been created.");
}
else {
alert("Something went wrong.");
}
} // END mySaveQ.onClick
myRunQ.onClick = function() {
if(app.selection.length == 0 || app.selection[0].constructor.name != "TextFrame")
{
alert("A textframe selection is needed for the query to run")
exit()
}
var myDoc = app.activeDocument;
var myFolder = Folder (Folder.decode(app.filePath.absoluteURI) + "/Scripts/Scripts Panel/Queries");
var myFiles = myFolder.getFiles("*.txt");
for (i = 0; i < myFiles.length; i++) {
var myFile = myFiles;
var mySettings = eval(ReadFile(myFile));
if (mySettings.changeTextPreferences.appliedCharacterStyle != "") {
var myCharStyle = myDoc.characterStyles.itemByName(mySettings.changeTextPreferences.appliedCharacterStyle);
if (!IsValidReference(myCharStyle)) {
WriteError( "Error -- " + GetDate()
+ "\rQuery: " + myFile.displayName
+ "\rFile: " + myDoc.name
+ "\rCharacter Style \"" + mySettings.changeTextPreferences.appliedCharacterStyle
+ "\" doesn't exist\r------------------------------------------------\r" );
continue;
}
}
app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences.properties = mySettings.findTextPreferences;
app.changeTextPreferences.properties = mySettings.changeTextPreferences;
app.findChangeTextOptions.properties = mySettings.findChangeTextOptions;
try {
if(mySelectQ.value && app.selection[0])
app.selection[0].changeText();
else
myDoc.changeText();
}
catch(err) {
WriteError( "Error -- " + GetDate()
+ "\rFile: " +myFile.displayName + " -- " + err.message + "\r");
}
}
} // END myRunQ.onClick
myDialog.onClose = function() {
app.insertLabel("KasQueryGetDialogLocation", String(myDialog.location));
}
} // END CreatePalette
function WriteToFile(myText, myPath) {
myFile = new File(myPath);
myFile.open("w");
myFile.write(myText);
myFile.close();
}
function ReadFile(myFile) {
myFile.open("r");
var myText = myFile.read();
myFile.close();
return myText;
}
function GetDescription() {
var myDialog = new Window("dialog", "Enter Description");
var btnPanel = myDialog.add("panel", undefined, "Enter a short description of the search-replace operation");
var editText = btnPanel.add("edittext");
editText.preferredSize = [360, 40];
editText.active = true;
var myGroup = myDialog.add("group");
myGroup.orientation = "row";
var okBtn = myGroup.add("button", undefined, "OK");
var cancelBtn = myGroup.add("button", undefined, "Cancel");
var stText = btnPanel.add("statictext", undefined, "Don't use illegal characters: ? [ ] / \ = + < > : ; \" , * |");
var res = myDialog.show();
if (res == 1) {
if (editText.text == "") {
var myDescription = "unnamed";
}
else {
var myDescription = editText.text;
}
return myDescription;
}
else {
exit();
}
}
//--------------------------------------------------------------------------------------------------------------
function WriteError(myText) {
myFile = new File("~/Desktop/Error Report.txt");
if ( myFile.exists ) {
myFile.open("e");
myFile.seek(0, 2);
}
else {
myFile.open("w");
}
myFile.write(myText);
myFile.close();
}
//--------------------------------------------------------------------------------------------------------------
function IsValidReference(ref) {
try {
ref.name;
return true;
}
catch (myError) {
return false;
}
}
//--------------------------------------------------------------------------------------------------------------
function GetDate() {
var myDate = new Date();
if ((myDate.getYear() - 100) < 10) {
var myYear = "0" + new String((myDate.getYear() - 100));
} else {
var myYear = new String ((myDate.getYear() - 100));
}
var myDateString = (myDate.getMonth() + 1) + "/" + myDate.getDate() + "/" + myYear + " " + myDate.getHours() + ":" + myDate.getMinutes() + ":" + myDate.getSeconds();
return myDateString;
}
//--------------------------------------------------------------------------------------------------------------
function FindLastNumber(myArr) {
var myLastNumber = myArr[0];
for (i = 1; i < myArr.length; i++) {
if (myArr > myLastNumber) {
myLastNumber = myArr;
}
}
return myLastNumber;
}