UNPKG

dhxmvp

Version:

A complete boilerplate for building online, offline and syncable MVP Single Page Applications using DHTMLX.

1 lines 3.73 kB
!function(n){"use strict"}(window.$dhx=window.$dhx||{}),function(n){"use strict"}($dhx.ui=$dhx.ui||{}),$dhx.ui.Mediator=function(n){var e=$dhx.MQ,t=function(){var e=function(n){var e=n.channel||"questions",t=n.data||function(){},i=n.error||function(){},o=+n.limit||5e3,s=0,r=100,u=[],c={channel:e,count:r,callback:function(n){var e=n[0];return s=n[1],c.start=s,PUBNUB.each(e.reverse(),function(n){u.push(n)}),u.length>=o?t(u):e.length<r?t(u):(r=100,void l())},error:function(n){t(u),i(u)}},l=function(){pubnub.history(c)};l()},t=function(n){var e=24,t=0,i=n.channel||"questions",o=n.data||function(){},s=n.error||function(){},r=new Date;r.setUTCHours(0),r.setUTCMinutes(0),r.setUTCSeconds(0),r.setUTCMilliseconds(0);var u=r.getTime(),c=[];PUBNUB.each(new Array(e).join(",").split(","),function(n,r){var l=u-36e5*r;pubnub.history({limit:1,channel:i,start:1e4*l,error:function(){t++,s()},callback:function(n){if(++t==e)return o(c);var i=+(((n[0][0]||{}).ticker||{}).avg||{}).value,s=new Date(l).getUTCHours(),r=[s,i];i&&c.push(r),c.sort(function(n,e){return n[0]>e[0]&&-1||1})}})})},i={publish:function(e,t){if("undefined"==typeof e.collection)throw"Mediator alerts: Your message does not specify a collection.";return n.pubnub.publish({channel:e.collection,message:e,callback:t||function(n){console.log(n)}})},history:{hourly:t,full:e}};return i}(),i={_settingListenerUp:!1,_listeners:[],listening:[],_make_listener:function(n,t,s,r){var u,c,l=this;if(u=n.split(":")[1],c=n.split(":")[0],o.live){if(i.listening.contains(c))return;var a={age:$dhx.ui.session.age(),full:$dhx.ui.session.name(),country:$dhx.ui.session.country(),appstate:"foreground",latlong:"51.5072° N, 0.1275° W"};pubnub.subscribe({channel:c,state:a,message:function(n,t,i){console.info("Mediator received message sent by "+(n.client_id==$dhx.ui.session.client_id()?"this":"other")+" client from PubNub #"+i+". Forwarding to pusub now."),e.publish(n.event,n)},connect:function(n){i.listening.push(n),l._settingListenerUp=!1,console.info("Listening to #"+n+" collection channel on PubNub."),s&&s(r)},disconnect:function(){console.log("Disconnected")},reconnect:function(){console.log("Reconnected")},error:function(){console.log("Network Error")},presence:function(n){n.data&&dhtmlx.message(n.data.full+" is online.")}})}else console.warn("Mediator is performing offline operations."),l._settingListenerUp=!1,s&&s(r);return r},_add_listener:function(n){for(var e,t=this,i=0;i<t._listeners.length;i++)if(e=t._listeners[i],e.fn==n.fn&&e.pattern==n.pattern)return;e={pattern:n.pattern,fn:n.fn,onConnect:n.onConnect},t._listeners.push(e)},waitForListener:function(n,e,t){t=+t||1e3,self._settingListenerUp?setTimeout(function(){waitForConnection(n,e,t)},t):e(n)}},o={PubNub:t,live:!0,compose_message:function(n,e,t,i,o){var s;return s={client_id:$dhx.ui.session.client_id(),method:t||null,model:i||null,options:o||null,event:n||null,collection:e,uuid:$dhx.guid()}},notify:function(n,i){var s;if("undefined"==typeof n)throw"Mediator alerts: Can not notify without a event";if("undefined"==typeof i)throw"Mediator alerts: Can not notify without message params";s=this.compose_message(n,i.collection,i.method,i.model,i.options),o.live?t.publish(s,function(){console.info("Message published to PubNub #"+s.collection,s)}):(console.info("Message published to pubsub #"+n,s),e.publish(n,s))},listen:function(n,t,o){var s,r,u;s=n.split(":")[1],r=n.split(":")[0],console.warn("Setting up listener to listen to #"+r+" on PubNub"),u=e.subscribe(s,t),i._settingListenerUp=!0;var c={pattern:n,fn:t,onConnect:o};return i._add_listener(c),i.waitForListener(c,function(n){i._make_listener(n.pattern,n.fn,n.onConnect,u)}),u},unlisten:function(n){e.unsubscribe(n)}};return o}(window);