Quantcast
Channel: Adobe Community : Popular Discussions - InDesign Scripting
Viewing all articles
Browse latest Browse all 15932

[JS CS6] modifying Peter's RunScript script

$
0
0

Hi,

 

With Peter K. permission. I want to modify his script Runscript.jsx to fit my needs, which are, to be able to "see" all scripts within subfolders of the main script folder and show applescripts AND javascripts.

 

First, I'm just starting out in JS and scripting for me as only been in Applescript so far, so bare with me and thanks for your patience.

 

I've changed some parts of the scripts with bits of code Peter was gracious enough to send me, but all I get is the list of either applescripts, or js, depending  on the file extension I choose in the var scripts. I also get a full path name instead of just the name and when I choose a script to execute, it says it can't find it. In AS, I would say it doesn't resolve to the file in question and just has the path, not the actual file.

 

Anyway, any help would be appriciated. Here's the script so far in it's entirety. Sorry if it's too long.

 

// DESCRIPTION: Launch a script by typing its name or picking it from a recent-history list

// Peter Kahrel 2006-2011 -- www.kahrel.plus.com

 

 

#target indesign;

 

 

try {app.doScript (get_script ())}

    catch (e) {alert (e.message + "\r(line " + e.line + ")")};

 

 

function get_script ()

    {      

    var script_dir = find_script_dir();

    var fstring = script_dir + "/runscript-last.txt";

    var history = get_history (fstring);

    if (history.length > 0)

        {

        if (history[0].indexOf("true") > -1 || history[0].indexOf("false") > -1)

            {

            var temp = history[0].split("£");

            var filter_check_history = eval(temp[0]);

            try {keep_filter_history = eval(temp[1]);} catch(_){keep_filter_history = false;}

            try {filter = temp[2];} catch(_){filter = "";}

            history.shift();

            }

        }

 

 

    var scripts = get_scripts (script_dir, [], ".applescript"); //changed to the fonction that gets every file in subfolders, can't get it to work on ALL files though

    //var scripts = get_scripts (script_dir);

    if (history.length === 0)

        var droplist = scripts;

    else

        var droplist = history.concat ("------------------------------------------------------------------" ).concat (scripts);

    var ListLength = droplist.length;

 

 

    var w = new Window ("dialog", "Script launcher", undefined, {closeButton: false});

        var filter, i;

        var main = w.add ("group");

            main.orientation = "column";

            var entry = main.add ("edittext", undefined, droplist[0]);

            entry.minimumSize.width = 300;

            var list = main.add ("listbox", undefined, droplist);

                list.preferredSize = [300, 280];

                list.selection = 0;

               

            var options = main.add ("group");

                options.alignment = "left";

                var filter_check = options.add ("checkbox", undefined, "\u00A0Filter list\u00A0");

                    try {filter_check.value = filter_check_history;} catch(_){filter_check.value = false;}

                var keep_filter = options.add ("checkbox", undefined, "\u00A0Apply filter on next run\u00A0");

                    try {keep_filter.value = keep_filter_history;} catch(_){keep_filter.value = false;}

 

 

        var buttons = w.add ("group");

            buttons.alignment = "right";

            ok_button = buttons.add ("button", undefined, "OK", {name: "OK"});

            buttons.add ("button", undefined, "Cancel", {name: "cancel"});

           

        entry.onChanging = FilterList;

       

        function FilterList ()

            {

            filter = entry.text;

            if (filter_check.value)

                {

                filter = entry.text;

                list.removeAll();

                for (i = 0; i < droplist.length; i++)

                    {

                    if (droplist[i].toLowerCase().indexOf (filter.toLowerCase()) > -1 || droplist[i].slice (0,3) === "---")

                        {

                        list.add ("item", droplist[i]);

                        }

                    }

                list.items[0].text.slice(0,3)==="---" ? list.selection = 1 : list.selection = 0;

                }

            else

                {

                i = 0;

                // Look for the first match

                while (i < ListLength && list.items[i].text.toLowerCase().indexOf (filter.toLowerCase()) < 0) {++i;}

                if (list.items[i].text.toLowerCase().indexOf (filter.toLowerCase()) > -1)

                    {

                    // select it

                    list.selection = i;

                    // then centre it in the listbox

                    if (i < ListLength-7) {list.revealItem(i+7);}

                    else {list.revealItem(ListLength-1);}

                    }

                }

            } // entry.onChanging

 

 

 

 

        list.addEventListener("click", function (event)

            {

            if (event.detail == 2 /*if double-click*/)

              w.close (1);

            }

        );

 

 

 

 

        w.onShow = function ()

            {

            w.layout.layout();

            entry.active = true;

            if (filter !== "" && filter_check.value)

                {

                entry.text = filter;

                FilterList();

                }

            }

       

        if (w.show () == 2)

            {

            w.close ();

            exit ();

            }

        else

            {

            var script = list.selection.text;

            if (!keep_filter.value) filter = "";

            store_history (fstring, script, history, filter_check.value, keep_filter.value, filter);

            return File (script_dir + "/" + script);

            }

    } // function drop_typeahead

 

 

 

 

//function get_scripts (script_dir)

   // {

    //var array = [];

    //var f = Folder (script_dir).getFiles ("*.js*");

    //for (var i = 0; i < f.length; i++)

     //   array.push (f[i].name);

    //return array

   // }

 

 

 

 

function get_history (fstring)

    {

    var f = File (fstring);

    var h = [];

    if (f.exists)

        {

        f.open ("r");

        var temp = f.read ();

        f.close();

        var h = temp.split ("\n");

        }

    return h

    }

 

 

 

 

function store_history (fstring, new_item, history, filter_check, keep_filter, filter)

    {

    history = insert_item (new_item, history);

    var f = File (fstring);

    f.open ("w");

    f.write (filter_check+"£"+keep_filter+"£"+filter + "\n" + history);

    f.close ();

    }

 

 

// Update the history list

 

 

function insert_item (new_item, history)

    {

    // Add \n at beginning and end

    var s = "\n" + history.join ("\n") + "\n";

    // Delete the script's name from the history list (if it's there)

    s = s.replace ("\n"+new_item+"\n", "\n");

    // Add the script's name at the beginning

    s = new_item+s;

    // If there are more than 15 items, chop off the last one

    if (s.match (/\n/g).length > 15)

        s = s.replace (/\n[^\n]+\n$/, "\n");

    // Delete trailing returns

    s = s.replace (/[\n]+$/, "");

    return s

    }

 

 

 

 

function find_script_dir()

    {

    try {return File (app.activeScript).path}

    catch(e) {return File (e.fileName).path}

    }

 

 

function get_scripts (dir, array, mask){ //changed name of fonction to match script

          var f = Folder(dir).getFiles('*.*');

          for (var i = 0; i < f.length; i++){

                    if (f[i] instanceof Folder){

                              get_scripts (f[i], array, mask); //changed name of fonction to match script

            //find_files (f[i], array, mask);

                    } else if (f[i].name.substr(-mask.length).toUpperCase() == mask.toUpperCase()){

                              array.push (f[i]);

                    }

          }

          return array;

}


Viewing all articles
Browse latest Browse all 15932

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>