A topic came up in the CS7 Beta pre-release channel yesterday about adding a new feature to Flash, Publishing Hooks. The idea was that 2 new file pickers would be added to the Publish Settings dialog:
- Execute before publish
- Execute after publish
This would allow the user to do some pre-publish cleanup, or some post-publish action, such a uploading a file.
The thing is, however, we can do this right now inside of Flash with Events!
It took me about 10 minutes to whip up some proof-of-concept code, another 5 to add an interface, then another 5 or so to ensure the UI saved and loaded settings, then about an hour or so to create a class out of this lot, add in some extra flexibility, some comments, and say "That'll do".
You can take a look at the source code as a gist on GitHub.
Here's the UI written in one line of code (including populating already-defined values) using xJSFL's XUL class:
Compare that to the amount of time it would take to request the feature, have it accepted, implement it in C++, along with any QA and the rest, plus the fact that once it's in, there's no flexibility - and I think you can see you have a pretty powerful argument for implementing some things in JSFL.
The final class does the following:
- Runs pre and post publish hooks (any file on your hard drive, even other JSFL scripts)
- Has a simple XUL UI to browse for files
- Can load and save different profiles, say one for games, one for web
- Stores setting in an XML config file (but could just as easily store those settings per document using document data)
- Can be set as Active or Inactive should you decide you need to disable it
It's instantiated as simply as possible, like so:
// instantiate a "games" profile var hooks = new PublishHooks('games'); // bring up the ui hooks.edit();
The config for all profiles is managed by the Config class, and stored in a single file in the xJSFL/user/config folder:
<config> <default> <active>false</active> <pre>file:///F|/Users/Dave%20Stewart/Desktop/test.swf</pre> <post>file:///F|/Users/Dave%20Stewart/Desktop/somefile.exe</post> </default> <games> <active>true</active> <pre>file:///E|/Projects/xJSFL/user/jsfl/hooks/pre.jsfl</pre> <post>file:///E|PProjects/xJSFL/user/jsfl/hooks/post.jsfl</post> </games> </config>
And here's a quick screenshot of a basic JSFL script being run right after publishing:
The file contains both the class (save to your xJSFL/user/jsfl/libraries folder to run at startup) and a script to pop up the editing UI, which you can run as a Command from the Flash Commands folder or as a Snippet from the xJSFL Snippets folder.