• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Exploring OnOpen eventhandling.

Advocate ,
Apr 08, 2014 Apr 08, 2014

Copy link to clipboard

Copied

A discussion in another topic has me looking into event-driven scripts. I started simple with this:

#target indesign

#targetengine 'dave'

(function(){

          var myEventListener = app.eventListeners.add("afterOpen", testFunction, false);

          function testFunction() {

                    $.writeln("Count of open documents: " + app.documents.length);

          }

}())

I saved this in the InDesign CC/Scripts/startup scripts folder under the name OpenHandler.jsx and restarted InDesign. Then I created a new empty document and in the ESTK JavaScript Console, I see:

Count of open documents: 1

So, so far so good. But my suspicion is that at this point in the document opening process, there is not yet a window to work with. Easy enough to check ...

#target indesign

#targetengine 'dave'

(function(){

          var myEventListener = app.eventListeners.add("afterOpen", testFunction, false);

          function testFunction() {

                    $.writeln("Count of open documents: " + app.documents.length);

                    $.writeln("Count of windows: " + app.windows.length);

          }

}())

And I'm wrong, there is a window:

Count of open documents: 1

Count of windows: 1

And I got this same result with and without the Application Frame active (relevant only on Mac).

So, the question is, can I force the window to be a particular size? I'll reply to that in the comments.

TOPICS
Scripting

Views

653

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Apr 08, 2014 Apr 08, 2014

Copy link to clipboard

Copied

What do you know, this works:

#target indesign

#targetengine 'dave'

(function(){

          var myEventListener = app.eventListeners.add("afterOpen", testFunction, false);

          function testFunction() {

                    app.layoutWindows[0].bounds = [50, 32, 1143, 944];

          }

}())

Dave

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Apr 10, 2014 Apr 10, 2014

Copy link to clipboard

Copied

Hello Dave,

This. Is. Awesome!

Really, i was using your script for this every day a couple of times, i keybinded it and was quite happy. Then at work with not much work at hand I revisited an eventhandling-thingy (applying metadata before saving), getting to know the different eventhandlers, and tried to clip your window-resizing-script together with afterOpen – but i'm not a (JS-)programmer, fiddled around, got frustrated.

It was time to ask the comm: Bumping your 2009-thread (never thought you would help me out there) with the idea that i had to bind this on opening documents – and bam! – you nailed it!

It got my bounds out of the .txt of your (old) script, and now my workflow purrs like a kitten…meaning its so pleasing not to keypress for every new open doc.

Chapeu!

…and when you decide to merge your fresh eventhandling-skills together with the file-reading-bounds-checking-script, let me know. But as it is, its perfect, because I only hab one bound-setting for my windows.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guest
Apr 10, 2014 Apr 10, 2014

Copy link to clipboard

Copied

LATEST

This probably falls under the heading of if-ain't broke-who-cares, but I learned the hard way that the afterOpen event can fire twice. If the user double-clicks on a document when InDesign isn't running, the application launches, which triggers an afterOpen event. Then the document opens, which triggers another. So my afterOpen handlers look like this:

function doThisWhenDocOpens(myEvent) {

     if (myEvent.target.constructor.name == "LayoutWindow") {

          // do your thing here

     }

}

It's kind of educational to use $.writeln() to print the target.constructor.name to the ESTK console, for this an other event listeners.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines