-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEnhancedPostMessage.min.js
More file actions
16 lines (16 loc) · 3.41 KB
/
Copy pathEnhancedPostMessage.min.js
File metadata and controls
16 lines (16 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*!
* EnhancedPostMessage
*
* A better postMessage. Allow named events, triggers and callback listeners
*
* @version 0.5.0
* @author Adam Heim - https://github.com/truckingsim
* @link https://github.com/truckingsim/EnhancedPostMessage
* @copyright 2015 Adam Heim
* @license Released under the MIT license.
*
* Contributors:
*
* Last build: 2015-03-18 11:23:14 AM EDT
*/
!function(a){var b=!1,c={_defaults:{stringify:!1},_options:{},_events:{},_listeners:{},_sources:{},initialize:function(c){var e=this;c&&this.loadOptionsFromObject(c),b?c&&(c.sources&&(this._options.sources=d({},this._options.sources||(this._options.sources={}),c.sources)),c.events&&(this._options.events=d({},this._options.events||(this._options.events={}),c.events)),c.listeners&&(this._options.listeners=d({},this._options.listeners||(this._options.listeners={}),c.listeners)),c.stringify&&(this._options.stringify=c.stringify)):(this._options=d({},this._defaults,c),a.addEventListener("message",function(a){e._handleEventListener(a)}),b=!0)},loadOptionsFromObject:function(a){if(a.sources&&e(a.sources).length)for(var b in a.sources)a.sources.hasOwnProperty(b)&&this._addSource(b,a.sources[b]);if(a.events&&e(a.events).length)for(var c in a.events)a.events.hasOwnProperty(c)&&this._addEvent(c,a.events[c]);if(a.listeners&&e(a.listeners).length)for(var d in a.listeners)a.listeners.hasOwnProperty(d)&&this._addListener(d,a.listeners[d])},triggerEvent:function(b,c,d){var e,f;if("parent"===c?e=a.parent:(e=this._sources[c],"contentWindow"in e&&(e=e.contentWindow)),!e)return this.log("No source by that name",!0),!1;if(f=this._events[b],f&&f!==!0)if("function"==typeof f)d=f(d);else{if(f===!1)return this.log("Event value cannot be false",!0),!1;d=f}var g={eventName:b,data:d};e.postMessage(this._options.stringify?JSON.stringify(g):g,"*")},_addEvent:function(a,b){this._events[a]=b},_addListener:function(a,b){this._listeners[a]=b},_addSource:function(a,b){this._sources[a]=b},_setOptions:function(){},_setOption:function(a,b){this._options[a]=b},_handleEventListener:function(a){var b=a.data;this._options.stringify&&"string"==typeof a.data&&(b=JSON.parse(a.data)),this._listeners[b.eventName]&&this._listeners[b.eventName](b.data)}};c.log=function(b,c){b=b instanceof Array?b:[b],a.console&&this._options.debug&&(c?console.error:console.log).apply(console,b)};var d=function(a){for(var b,c,d=1,e=arguments.length;e>d;d++){b=arguments[d];for(c in b)Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c])}return a},e=function(a){if(Object.keys)return Object.keys(a);var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},f=function(a){return arguments.length>1?("trigger"===arguments[0]&&arguments.length>=3&&c.triggerEvent(arguments[1],arguments[2],arguments[3]),"addSource"===arguments[0]&&arguments.length>=3&&c._addSource(arguments[1],arguments[2]),"addEvent"===arguments[0]&&arguments.length>=3&&c._addEvent(arguments[1],arguments[2]),"addListener"===arguments[0]&&arguments.length>=3&&c._addListener(arguments[1],arguments[2])):1==arguments.length&&c.initialize(a),f};f.trigger=function(){return arguments.length>=2?c.triggerEvent(arguments[0],arguments[1],arguments[2]):c.log("Invalid trigger, need both an event name and a source name",!0),f},f.addSource=function(a,b){return c.initialize(),c._addSource(a,b),f},f.addEvent=function(a,b){return c.initialize(),c._addEvent(a,b),f},f.addListener=function(a,b){return c.initialize(),c._addListener(a,b),f},a.EnhancedPostMessage=f}(window);