PHP Classes

File: src/js/PublishSubscribe.min.js

Recommend this page to a friend!
  Classes of Nikos M.   PHP Publish Subscribe   src/js/PublishSubscribe.min.js   Download  
File: src/js/PublishSubscribe.min.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Publish Subscribe
Register and call handlers of events by name
Author: By
Last change: v.2.0.0
Date: 2 months ago
Size: 10,805 bytes
 

Contents

Class file image Download
/** * PublishSubscribe * A flexible publish-subscribe pattern implementation for PHP, JavaScript, Python * * @version: 2.0.0 * https://github.com/foo123/PublishSubscribe * **/ !function(s,t,n){"use strict";"undefined"!=typeof Components&&"object"==typeof Components.classes&&"object"==typeof Components.classesByID&&Components.utils&&"function"==typeof Components.utils.import?(s.$deps=s.$deps||{})&&(s.EXPORTED_SYMBOLS=[t],s[t]=s.$deps[t]=n.call(s)):"object"==typeof module&&module.exports?(module.$deps=module.$deps||{})&&(module.exports=module.$deps[t]=n.call(s)):"function"==typeof define&&define.amd&&"function"==typeof require&&"function"==typeof require.specified&&require.specified(t)?define(t,["module"],function(t){return n.moduleUri=t.uri,n.call(s)}):t in s||(s[t]=n.call(s)||1)&&"function"==typeof define&&define.amd&&define(function(){return s[t]})}("undefined"!=typeof self?self:this,"PublishSubscribe",function(o){"use strict";var t="prototype",v=Object[t].hasOwnProperty,O="/",y="#",g=Object.keys,a=Date.now||function(){return(new Date).getTime()};function l(t){if(t)for(var s in t)v.call(t,s)&&(this[s]=t[s])}function j(t,s,n,o,e){var i=this;i.target=t,i.topic=s?[].concat(s):[],i.originalTopic=n?[].concat(n):[],i.tags=o?[].concat(o):[],i.namespaces=e?[].concat(e):[],i.data=null,i.timestamp=a(),i._propagates=!0,i._stopped=!1,i._aborted=!1}function p(t){return 0<t.length}function x(t,s){var n,o,e=(s=String(s)).indexOf(t[2]),i=s.indexOf(t[1]);return-1<e?(o=s.slice(e).split(t[2]).filter(p).sort(),s=s.slice(0,e)):o=[],-1<i?(n=s.slice(i).split(t[1]).filter(p).sort(),s=s.slice(0,i)):n=[],[s=s.split(t[0]).filter(p),n,o]}function r(t,s,n){for(var o,e=0;e<n;++e)o="ns_"+s[e],v.call(t,o)&&(--t[o],t[o]<=0)&&delete t[o]}function w(t,s,n){for(var o,e=0;e<n;++e)if(o="ns_"+s[e],!v.call(t,o)||t[o]<=0)return;return 1}function u(t,s,n,o,e,i){var a=!!n&&"tp_"+n,p=!!o&&"tg_"+o;if(a&&v.call(t.topics,a)){if(p&&v.call(t.topics[a].tags,p)){if(t.topics[a].tags[p].list.length&&(i<=0||w(t.topics[a].tags[p].namespaces,e,i)))return void s.push([n,o,0<i,t.topics[a].tags[p]])}else if(t.topics[a].notags.list.length&&(i<=0||w(t.topics[a].notags.namespaces,e,i)))return void s.push([n,null,0<i,t.topics[a].notags])}else if(p&&v.call(t.notopics.tags,p)){if(t.notopics.tags[p].list.length&&(i<=0||w(t.notopics.tags[p].namespaces,e,i)))return void s.push([null,o,0<i,t.notopics.tags[p]])}else if(t.notopics.notags.list.length&&0<i&&w(t.notopics.notags.namespaces,e,i))return void s.push([null,null,!0,t.notopics.notags])}function S(t,s,n){var o,e,t=function(t,s){for(var n,o,e,i,a=[],p=[],t=(s=x(t,s))[2],l=s[1],r=(s=s[0]).length;r;)a.push(s.join(O)),s.pop(),--r;if(1<(r=l.length)){for(n=(1<<r)-1;1<=n;--n){for(i=[],o=0,e=1;o<r;e=1<<++o)n!==e&&n&e&&i.push(l[o]);i.length&&p.push(i.join(y))}p=p.concat(l)}else r&&p.push(l[0]);return[a.length?a[0]:"",a,p,t]}(t,n),i=t[1],a=t[2],p=t[3],n=t[0],l=[],r=a.length,c=p.length,f=i.length;if(f)for(;f;){if(o=i[0],v.call(s.topics,"tp_"+o))if(0<r)for(e=0;e<r;++e)u(s,l,o,a[e],p,c);else u(s,l,o,null,p,c);i.shift(),--f}if(0<r)for(e=0;e<r;++e)u(s,l,null,a[e],p,c);return u(s,l,null,null,p,c),[n,l,p]}function T(t){var s,n,o,e;if(t&&v.call(t,"list")&&((o=t.list)&&(n=o.length)))if(0<t.oneOffs)for(s=n-1;0<=s;--s)(e=o[s])[1]&&0<e[4]&&(o.splice(s,1),t.oneOffs=0<t.oneOffs?t.oneOffs-1:0);else t.oneOffs=0}function i(t,s,n,o,e,i,a){var p;n&&(p=null,0<(s=S(s,n,o))[1].length)&&((p=new j(t)).data=e,p.pipeline((n=p,t=(o=s)[0],e=s[2],o=s[1],n.state=new l({t:0,s:0,start_topic:!0,subscribers:null,topics:o,namespaces:e,hasNamespace:!1,abort:i,finish:a}),n.originalTopic=t?t.split(O):[],s=function(t){if(t.state){var s,n,o,e,i,a,p=t.state;if(p.t<p.topics.length){if(p.start_topic){if(T(p.subscribers),t.aborted()||!t.propagates())return t.aborted()&&"function"==typeof p.abort&&(i=p.abort,p.abort=null,i(t),"function"==typeof p.finish)&&(a=p.finish,p.finish=null,a(t)),!1;s=p.topics[p.t][0],n=p.topics[p.t][1],t.topic=s?s.split(O):[],t.tags=n?n.split(y):[],p.hasNamespace=p.topics[p.t][2],p.subscribers=p.topics[p.t][3],p.s=0,p.start_topic=!1}if(p.s<p.subscribers.list.length){if(t.aborted()||t.stopped())return T(p.subscribers),t.aborted()&&"function"==typeof p.abort&&(i=p.abort,p.abort=null,i(t),"function"==typeof p.finish)&&(a=p.finish,p.finish=null,a(t)),!1;for(e=!1;p.s<p.subscribers.list.length&&!e;)(o=p.subscribers.list[p.s])[1]&&o[4]||!(!p.hasNamespace||o[2]&&w(o[2],p.namespaces,p.namespaces.length))||(e=!0),p.s+=1;p.s>=p.subscribers.list.length&&(p.t+=1,p.start_topic=!0),e&&(t.namespaces=p.hasNamespace?o[3].slice(0):[],o[4]=1,o[0](t))}else p.t+=1,p.start_topic=!0}t.state&&p.t>=p.topics.length&&(T(p.subscribers),"function"==typeof p.finish&&(a=p.finish,p.finish=null,a(t)),t)&&(t.state=null,t.dispose())}})),s(p))}function e(t,s,n,o,e,i){if(s&&"function"==typeof o){var a,p,l,r,c,t=(n=x(t,n))[1].join(y),f=t.length,u=n[2],g=u.length;if(n=n[0].join(O),e=!0===e,i=!0===i,l={},g)for(c=0;c<g;++c)l["ns_"+u[c]]=1;if(r=u.slice(0),a=null,n.length?(v.call(s.topics,n="tp_"+n)||(s.topics[n]={notags:{namespaces:{},list:[],oneOffs:0},tags:{}}),a=f?(v.call(s.topics[n].tags,p="tg_"+t)||(s.topics[n].tags[p]={namespaces:{},list:[],oneOffs:0}),s.topics[n].tags[p]):s.topics[n].notags):f?(v.call(s.notopics.tags,p="tg_"+t)||(s.notopics.tags[p]={namespaces:{},list:[],oneOffs:0}),a=s.notopics.tags[p]):g&&(a=s.notopics.notags),null!=a&&(n=g?[o,e,l,r,0]:[o,e,!1,[],0],i?a.list.unshift(n):a.list.push(n),e&&++a.oneOffs,g))for(var h,d=a.namespaces,_=u,b=g,m=0;m<b;++m)h="ns_"+_[m],v.call(d,h)?++d[h]:d[h]=1}}function h(t,s,n,o,e){var i,a=t.list.length;if(s){if(null!=n&&0<a)for(;0<=--a;)n===t.list[a][0]&&(e&&t.list[a][2]&&w(t.list[a][2],o,e)?(i=g(t.list[a][2]),r(t.namespaces,i,i.length),t.list[a][1]&&(t.oneOffs=0<t.oneOffs?t.oneOffs-1:0),t.list.splice(a,1)):e||(t.list[a][2]&&(i=g(t.list[a][2]),r(t.namespaces,i,i.length)),t.list[a][1]&&(t.oneOffs=0<t.oneOffs?t.oneOffs-1:0),t.list.splice(a,1)))}else if(!s&&0<e&&0<a)for(;0<=--a;)t.list[a][2]&&w(t.list[a][2],o,e)&&(i=g(t.list[a][2]),r(t.namespaces,i,i.length),t.list[a][1]&&(t.oneOffs=0<t.oneOffs?t.oneOffs-1:0),t.list.splice(a,1));else!s&&0<a&&(t.list=[],t.oneOffs=0,t.namespaces={})}function s(){if(!(this instanceof s))return new s;this.initPubSub()}return j[t]={constructor:j,target:null,topic:null,originalTopic:null,tags:null,namespaces:null,data:null,state:null,timestamp:0,is_pipelined:!(l[t]={constructor:l,dispose:function(t){if(t)for(var s=0;s<t.length;++s)this[t[s]]=null;return this}}),_next:null,_propagates:!0,_stopped:!1,_aborted:!1,dispose:function(){var t=this;return t.target=null,t.topic=null,t.originalTopic=null,t.tags=null,t.namespaces=null,t.data instanceof l&&t.data.dispose(),t.data=null,t.state instanceof l&&t.state.dispose(),t.state=null,t.timestamp=null,t.is_pipelined=!1,t._propagates=!0,t._stopped=!0,t._aborted=!1,t._next=null,t},next:function(){return"function"==typeof this._next&&this._next(this),this},pipeline:function(t){return"function"==typeof(t=arguments.length?t:null)?(this._next=t,this.is_pipelined=!0):(this._next=null,this.is_pipelined=!1),this},propagate:function(t){return this._propagates=!!(t=arguments.length?t:!0),this},stop:function(t){return this._stopped=!!(t=arguments.length?t:!0),this},abort:function(t){return this._aborted=!!(t=arguments.length?t:!0),this},aborted:function(){return this._aborted},propagates:function(){return this._propagates},stopped:function(){return this._stopped}},s.VERSION="2.0.0",s.Event=j,s.Data=function(t){return new l(t)},s[t]={constructor:s,opts:null,_pubsub:null,option:function(t,s){var n=arguments.length;return 1==n?v.call(this.opts,t)?this.opts[t]:o:(1<n&&(this.opts[t]=s),this)},initPubSub:function(){var t=this;return t.opts={},t.option("topic_separator","/"),t.option("tag_separator","#"),t.option("namespace_separator","@"),t._pubsub={notopics:{notags:{namespaces:{},list:[],oneOffs:0},tags:{}},topics:{}},t},disposePubSub:function(){return this.opts=null,this._pubsub=null,this},emit:function(t,s){var n=this,o=(arguments.length<2&&(s={}),n),e=[n.option("topic_separator"),n.option("tag_separator"),n.option("namespace_separator")],i=n._pubsub;if(i){var a,p,l,r,c,f,u,g,h,d=S(e,i,t),e=d[0],_=d[2],b=_.length,m=(d=d[1]).length,v=null;for(0<m&&((v=new j(o)).data=s,v.originalTopic=e?e.split(O):[]),a=0;a<m;++a){for(u=d[a][0],g=d[a][1],v.topic=u?u.split(O):[],v.tags=g?g.split(y):[],h=d[a][2],r=[],l=(c=d[a][3]).list.length,p=0;p<l;++p)(f=c.list[p])[1]&&f[4]||!(!h||f[2]&&w(f[2],_,b))||r.push(f);for(l=r.length,p=0;p<l&&(f=r[p],v.namespaces=h?f[3].slice(0):[],!(f[4]=1)!==f[0](v)&&!v.stopped()&&!v.aborted());++p);if(T(c),v.aborted()||!v.propagates())break}v&&v.dispose()}return n},pipeline:function(t,s,n,o){var e=this;return arguments.length<2&&(s={}),i(e,[e.option("topic_separator"),e.option("tag_separator"),e.option("namespace_separator")],e._pubsub,t,s,n||null,o||null),e},on:function(t,s){var n=this;return"function"==typeof s&&e([n.option("topic_separator"),n.option("tag_separator"),n.option("namespace_separator")],n._pubsub,t,s),n},one:function(t,s){var n=this;return"function"==typeof s&&e([n.option("topic_separator"),n.option("tag_separator"),n.option("namespace_separator")],n._pubsub,t,s,!0),n},on1:function(t,s){var n=this;return"function"==typeof s&&e([n.option("topic_separator"),n.option("tag_separator"),n.option("namespace_separator")],n._pubsub,t,s,!1,!0),n},one1:function(t,s){var n=this;return"function"==typeof s&&e([n.option("topic_separator"),n.option("tag_separator"),n.option("namespace_separator")],n._pubsub,t,s,!0,!0),n},off:function(t,s){var n=this,o=[n.option("topic_separator"),n.option("tag_separator"),n.option("namespace_separator")],e=n._pubsub,i=s||null;if(e){var a,p,l,r,o=(t=x(o,t))[1].join(y),c=t[2],s=o.length,f=c.length,t=!!(l=(t=t[0].join(O)).length)&&"tp_"+t,u=!!s&&"tg_"+o;if((r="function"==typeof i)||(i=null),l&&v.call(e.topics,t))s&&v.call(e.topics[t].tags,u)?(h(e.topics[t].tags[u],r,i,c,f),e.topics[t].tags[u].list.length||delete e.topics[t].tags[u]):s||h(e.topics[t].notags,r,i,c,f),e.topics[t].notags.list.length||g(e.topics[t].tags).length||delete e.topics[t];else if(!l&&(s||f))if(s)for(a in v.call(e.notopics.tags,u)&&(h(e.notopics.tags[u],r,i,c,f),e.notopics.tags[u].list.length||delete e.notopics.tags[u]),e.topics)v.call(e.topics,a)&&v.call(e.topics[a].tags,u)&&(h(e.topics[a].tags[u],r,i,c,f),e.topics[a].tags[u].list.length||delete e.topics[a].tags[u]);else{for(p in h(e.notopics.notags,r,i,c,f),e.notopics.tags)v.call(e.notopics.tags,p)&&(h(e.notopics.tags[p],r,i,c,f),e.notopics.tags[p].list.length||delete e.notopics.tags[p]);for(a in e.topics)if(v.call(e.topics,a))for(p in h(e.topics[a].notags,r,i,c,f),e.topics[a].tags)v.call(e.topics[a].tags,p)&&(h(e.topics[a].tags[p],r,i,c,f),e.topics[a].tags[p].list.length||delete e.topics[a].tags[p])}}return n}},s});