postal.js/lib/amd/postal.min.js

1 line
No EOL
6.2 KiB
JavaScript

define(["underscore"],function(a,b){var c="/",d=50,e=0,f="postal",g=function(){},h=function(){var b;return function(c){var d=!1;return a.isString(c)?(d=c===b,b=c):(d=a.isEqual(c,b),b=a.clone(c)),!d}},i=function(a,b){this.channel=a||c,this._topic=b||""};i.prototype={subscribe:function(){var a=arguments.length;if(a===1)return new j(this.channel,this._topic,arguments[0]);if(a===2)return new j(this.channel,arguments[0],arguments[1])},publish:function(a){var b={channel:this.channel,topic:this._topic,data:a||{}};return a.topic&&a.data&&(b=a,b.channel=b.channel||this.channel),b.timeStamp=new Date,p.configuration.bus.publish(b),b},topic:function(a){return a===this._topic?this:new i(this.channel,a)}};var j=function(a,b,c){this.channel=a,this.topic=b,this.callback=c,this.priority=d,this.constraints=new Array(0),this.maxCalls=e,this.onHandled=g,this.context=null,p.configuration.bus.publish({channel:f,topic:"subscription.created",timeStamp:new Date,data:{event:"subscription.created",channel:a,topic:b}}),p.configuration.bus.subscribe(this)};j.prototype={unsubscribe:function(){p.configuration.bus.unsubscribe(this),p.configuration.bus.publish({channel:f,topic:"subscription.removed",timeStamp:new Date,data:{event:"subscription.removed",channel:this.channel,topic:this.topic}})},defer:function(){var a=this.callback;return this.callback=function(b){setTimeout(a,0,b)},this},disposeAfter:function(b){if(a.isNaN(b)||b<=0)throw"The value provided to disposeAfter (maxCalls) must be a number greater than zero.";var c=this.onHandled,d=a.after(b,a.bind(function(){this.unsubscribe(this)},this));return this.onHandled=function(){c.apply(this.context,arguments),d()},this},ignoreDuplicates:function(){return this.withConstraint(new h),this},withConstraint:function(b){if(!a.isFunction(b))throw"Predicate constraint must be a function";return this.constraints.push(b),this},withConstraints:function(b){var c=this;return a.isArray(b)&&a.each(b,function(a){c.withConstraint(a)}),c},withContext:function(a){return this.context=a,this},withDebounce:function(b){if(a.isNaN(b))throw"Milliseconds must be a number";var c=this.callback;return this.callback=a.debounce(c,b),this},withDelay:function(b){if(a.isNaN(b))throw"Milliseconds must be a number";var c=this.callback;return this.callback=function(a){setTimeout(function(){c(a)},b)},this},withPriority:function(b){if(a.isNaN(b))throw"Priority must be a number";return this.priority=b,this},withThrottle:function(b){if(a.isNaN(b))throw"Milliseconds must be a number";var c=this.callback;return this.callback=a.throttle(c,b),this},subscribe:function(a){return this.callback=a,this}};var k={cache:{},compare:function(a,b){if(this.cache[b]&&this.cache[b][a])return!0;var c=new RegExp("^"+a.replace(/\./g,"\\.").replace(/\*/g,".*").replace(/#/g,"[A-Z,a-z,0-9]*")+"$"),d=c.test(b);return d&&(this.cache[b]||(this.cache[b]={}),this.cache[b][a]=!0),d},reset:function(){this.cache={}}},l={addWireTap:function(a){var b=this;return b.wireTaps.push(a),function(){var c=b.wireTaps.indexOf(a);c!==-1&&b.wireTaps.splice(c,1)}},publish:function(b){a.each(this.wireTaps,function(a){a(b.data,b)}),a.each(this.subscriptions[b.channel],function(c){a.each(c,function(c){p.configuration.resolver.compare(c.topic,b.topic)&&a.all(c.constraints,function(a){return a(b.data,b)})&&typeof c.callback=="function"&&(c.callback.apply(c.context,[b.data,b]),c.onHandled())})})},reset:function(){this.subscriptions&&(a.each(this.subscriptions,function(b){a.each(b,function(a){while(a.length)a.pop().unsubscribe()})}),this.subscriptions={})},subscribe:function(a){var b,c,d,e=this.subscriptions[a.channel],f;e||(e=this.subscriptions[a.channel]={}),f=this.subscriptions[a.channel][a.topic],f||(f=this.subscriptions[a.channel][a.topic]=new Array(0)),b=f.length-1;for(;b>=0;b--)if(f[b].priority<=a.priority){f.splice(b+1,0,a),c=!0;break}return c||f.unshift(a),a},subscriptions:{},wireTaps:new Array(0),unsubscribe:function(a){if(this.subscriptions[a.channel][a.topic]){var b=this.subscriptions[a.channel][a.topic].length,c=0;for(;c<b;c++)if(this.subscriptions[a.channel][a.topic][c]===a){this.subscriptions[a.channel][a.topic].splice(c,1);break}}}},m={1:function(a){if(!a)throw new Error("publishing from the 'global' postal.publish call requires a valid envelope.");return a.channel=a.channel||c,a.timeStamp=new Date,p.configuration.bus.publish(a),a},2:function(a,b){var d={channel:c,topic:a,timeStamp:new Date,data:b};return p.configuration.bus.publish(d),d},3:function(a,b,c){var d={channel:a,topic:b,timeStamp:new Date,data:c};return p.configuration.bus.publish(d),d}},n={1:function(a){var b=a,d,e={};return Object.prototype.toString.call(b)==="[object String]"?(b=c,d=a):(b=a.channel||c,d=a.topic,e=a.options||e),new p.channelTypes[e.type||"local"](b,d)},2:function(a,b){var d=a,e=b,f={};return Object.prototype.toString.call(b)==="[object Object]"&&(d=c,e=a,f=b),new p.channelTypes[f.type||"local"](d,e)},3:function(a,b,c){return new p.channelTypes[c.type||"local"](a,b)}},o={};l.subscriptions[f]={};var p={configuration:{bus:l,resolver:k,DEFAULT_CHANNEL:c,DEFAULT_PRIORITY:d,DEFAULT_DISPOSEAFTER:e,SYSTEM_CHANNEL:f},channelTypes:{local:i},channel:function(){var a=arguments.length;if(n[a])return n[a].apply(this,arguments)},subscribe:function(a){var b=a.callback,d=a.topic,e=a.channel||c;return new j(e,d,b)},publish:function(){var a=arguments.length;if(m[a])return m[a].apply(this,arguments)},addWireTap:function(a){return this.configuration.bus.addWireTap(a)},linkChannels:function(b,d){var e=[];return a.isArray(b)||(b=[b]),a.isArray(d)||(d=[d]),a.each(b,function(b){var f=b.topic||"*";a.each(d,function(d){var f=d.channel||c;e.push(p.subscribe({channel:b.channel||c,topic:b.topic||"*",callback:function(b,c){var e=c;e.topic=a.isFunction(d.topic)?d.topic(c.topic):d.topic||c.topic,e.channel=f,e.data=b,p.publish(e)}}))})}),e},utils:{getSubscribersFor:function(){var a=arguments[0],b=arguments[1],c=[];return arguments.length===1&&(Object.prototype.toString.call(a)==="[object String]"?(a=p.configuration.DEFAULT_CHANNEL,b=arguments[0]):(a=arguments[0].channel||p.configuration.DEFAULT_CHANNEL,b=arguments[0].topic)),p.configuration.bus.subscriptions[a]&&p.configuration.bus.subscriptions[a].hasOwnProperty(b)&&(c=p.configuration.bus.subscriptions[a][b]),c},reset:function(){p.configuration.bus.reset(),p.configuration.resolver.reset()}}};return p})