/** * postal - Pub/Sub library providing wildcard subscriptions, complex message handling, etc. Works server and client-side. * Author: Jim Cowart (http://freshbrewedcode.com/jimcowart) * Version: v0.8.11 * Url: http://github.com/postaljs/postal.js * License(s): MIT, GPL */ (function(n,t){"object"==typeof module&&module.exports?module.exports=t(require("underscore"),this):"function"==typeof define&&define.amd?define(["underscore"],function(i){return t(i,n)}):n.postal=t(n._,n)})(this,function(n,t){var i,e=t.postal,r=function(n){var t=n.owner[n.prop];if("function"!=typeof t)throw new Error("Strategies can only target methods.");var i=[],e=n.context||n.owner,r=function(){var n=0,r=function c(){var r,o=Array.prototype.slice.call(arguments,0),s=n;n+=1,se;)(i=n[e++])&&a(i,t)}),0===--u&&h(),t},reset:function(){this.subscriptions&&(n.each(this.subscriptions,function(t){n.each(t,function(n){for(;n.length;)n.pop().unsubscribe()})}),this.subscriptions={})},subscribe:function(n){var t,i=this.subscriptions[n.channel];return i||(i=this.subscriptions[n.channel]={}),t=this.subscriptions[n.channel][n.topic],t||(t=this.subscriptions[n.channel][n.topic]=[]),t.push(n),n},subscriptions:{},wireTaps:[],unsubscribe:function(n){if(u)return void p.push(n);if(this.subscriptions[n.channel]&&this.subscriptions[n.channel][n.topic])for(var t=this.subscriptions[n.channel][n.topic].length,i=0;t>i;){if(this.subscriptions[n.channel][n.topic][i]===n){this.subscriptions[n.channel][n.topic].splice(i,1);break}i+=1}}};if(i={configuration:{bus:l,resolver:s,DEFAULT_CHANNEL:"/",SYSTEM_CHANNEL:"postal"},ChannelDefinition:c,SubscriptionDefinition:o,channel:function(n){return new c(n)},subscribe:function(n){var t=new o(n.channel||i.configuration.DEFAULT_CHANNEL,n.topic,n.callback);return i.configuration.bus.publish({channel:i.configuration.SYSTEM_CHANNEL,topic:"subscription.created",data:{event:"subscription.created",channel:t.channel,topic:t.topic}}),i.configuration.bus.subscribe(t)},publish:function(n){return n.channel=n.channel||i.configuration.DEFAULT_CHANNEL,i.configuration.bus.publish(n)},unsubscribe:function(n){i.configuration.bus.unsubscribe(n),i.configuration.bus.publish({channel:i.configuration.SYSTEM_CHANNEL,topic:"subscription.removed",data:{event:"subscription.removed",channel:n.channel,topic:n.topic}})},addWireTap:function(n){return this.configuration.bus.addWireTap(n)},linkChannels:function(t,e){var r=[];return t=n.isArray(t)?t:[t],e=n.isArray(e)?e:[e],n.each(t,function(t){var c=t.topic||"#";n.each(e,function(e){var o=e.channel||i.configuration.DEFAULT_CHANNEL;r.push(i.subscribe({channel:t.channel||i.configuration.DEFAULT_CHANNEL,topic:c,callback:function(t,r){var c=n.clone(r);c.topic=n.isFunction(e.topic)?e.topic(r.topic):e.topic||r.topic,c.channel=o,c.data=t,i.publish(c)}}))})}),r},noConflict:function(){if("undefined"==typeof window)throw new Error("noConflict can only be used in browser clients which aren't using AMD modules");return t.postal=e,this},utils:{getSubscribersFor:function(){var n=arguments[0],t=arguments[1];return 1===arguments.length&&(n=arguments[0].channel||i.configuration.DEFAULT_CHANNEL,t=arguments[0].topic),i.configuration.bus.subscriptions[n]&&Object.prototype.hasOwnProperty.call(i.configuration.bus.subscriptions[n],t)?i.configuration.bus.subscriptions[n][t]:[]},reset:function(){i.configuration.bus.reset(),i.configuration.resolver.reset()}}},l.subscriptions[i.configuration.SYSTEM_CHANNEL]={},t&&Object.prototype.hasOwnProperty.call(t,"__postalReady__")&&n.isArray(t.__postalReady__))for(;t.__postalReady__.length;)t.__postalReady__.shift().onReady(i);return i});