Last active
December 11, 2015 00:19
-
-
Save davestewart/4516020 to your computer and use it in GitHub Desktop.
Publish Hooks class for xJSFL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Publish Hook class | |
* | |
* Features: | |
* | |
* - 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 | |
* | |
* See the blog post here: http://www.xjsfl.com/blog/publish-hooks-library-for-flash | |
* | |
* @param {String} name An optional name to give the publish hook | |
*/ | |
function PublishHooks(name) | |
{ | |
// class properties | |
this.name = name ? String(name).replace(/\W/g, '-') : this.name; | |
this.config = new Config('publish hooks'); | |
this.active = this.config.get(this.name + '.active'); | |
// callback ids | |
this.preId = 'onPublish:' + this.name; | |
this.postId = 'onPublished:' + this.name; | |
// set callbacks if not already set | |
if( ! xjsfl.events.get(this.preId) ) | |
{ | |
xjsfl.events.add(DocumentEvent.PUBLISH, this.onPublish, this.preId, this); | |
xjsfl.events.add(DocumentEvent.PUBLISHED, this.onPublished, this.postId, this); | |
} | |
} | |
PublishHooks.prototype = | |
{ | |
// -------------------------------------------------------------------------------- | |
// properties | |
active :true, | |
config :null, | |
name :'default', | |
preId :'', | |
postId :'', | |
// -------------------------------------------------------------------------------- | |
// methods | |
// handlers | |
onAccept:function (pre, post, active) | |
{ | |
this.config.remove(this.name); | |
this.config.set(this.name + '.active', active); | |
this.config.set(this.name + '.pre', pre); | |
this.config.set(this.name + '.post', post); | |
this.active = active; | |
trace('Publish hooks updated for "' +this.name+ '".'); | |
}, | |
onPublish:function () | |
{ | |
this.run('pre'); | |
}, | |
onPublished:function () | |
{ | |
this.run('post'); | |
}, | |
// private methods | |
run:function(type) | |
{ | |
if(this.active) | |
{ | |
var uri = this.config.get(this.name + '.' + type); | |
var file = new File(uri); | |
if(file.exists) | |
{ | |
trace('Running "' +this.name+ '" ' +type+ '-publish hook: "' + file.path + '"'); | |
file.run(); | |
} | |
} | |
}, | |
// public methods | |
/** | |
* Show the UI | |
*/ | |
edit:function() | |
{ | |
var that = this; | |
function onAccept() | |
{ | |
that.onAccept.apply(that, arguments); | |
} | |
XUL.create('file:Pre-publish hook,file:Post-publish hook,checkbox:Active,title:"' +this.name.toSentenceCase()+ '"Publish Hooks', onAccept, null, this.config.get(this.name)); | |
return this; | |
}, | |
/** | |
* Remove callbacks | |
*/ | |
remove:function() | |
{ | |
xjsfl.events.remove(DocumentEvent.PUBLISH, this.preId); | |
xjsfl.events.remove(DocumentEvent.PUBLISHED, this.postId); | |
} | |
} | |
xjsfl.classes.register('PublishHooks', PublishHooks); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment