espresso-transit
Version:
A utility library for messaging between iframes and their container.
2 lines • 1.39 kB
JavaScript
/*! Espresso Transit v0.9.2 | Espresso Logic | http://espressologic.com */
!function(){var a={flag:"transit",appends:{},uniques:{},pings:{},on:function(b,c){var d=function(d){a.isTransitMessage(d)&&a.isEvent(b,d)&&(c(d,d.data.message,d.source),a.afterOn(b,c))};window.addEventListener("message",d,!1)},ping:function(b,c){var d,e,f,g;c&&(b.selector="parent"),d=b.selector+"."+b.broadcast,b.handle&&(d=b.handle),e=d+"_"+a.flag+"Reply",b.replyName&&(e=b.replyName),g=$.extend({},b.data),b.data||(g={}),a.pings[d]&&(f=!0),a.pings[d]=b,g.replyTo=e,c?a.broadcast(a.pings[d].broadcast,g,c):a.broadcast(a.pings[d].broadcast,g,a.pings[d].selector),f||a.on(e,a.pings[d].onReply)},reply:function(b,c,d){a.on(b,function(b,e){var f=c(b,e);a.broadcast(e.replyTo,f,d)},!0)},broadcast:function(b,c,d){if("string"==typeof d){var e=$(d);e[0]&&(d=e[0].contentWindow)}d||(d=window.parent);var f={};f[a.flag]=!0,f.name=b,f.message=c,f=a.extend(f,a.getAppends()),f.message||0==c||console.log("broadcast data empty",c),d.postMessage(f,"*"),a.afterBroadcast(b,c,d)},afterBroadcast:function(){},afterOn:function(){},isTransitMessage:function(b){return b.data&&b.data[a.flag]},isEvent:function(a,b){return b.data.name===a},addAppend:function(b,c){a.appends[b]=c},getAppends:function(){return a.appends},extend:function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}};return window.transit=a,a}();