diff --git a/README.md b/README.md
index fb1ddd0..3c38f60 100644
--- a/README.md
+++ b/README.md
@@ -17,9 +17,9 @@ $ npm install vue-event-manager
```
### CDN
-Available on [jsdelivr](https://cdn.jsdelivr.net/npm/vue-event-manager@2.0.1) or [unpkg](https://unpkg.com/vue-event-manager@2.0.1).
+Available on [jsdelivr](https://cdn.jsdelivr.net/npm/vue-event-manager@2.1.0) or [unpkg](https://unpkg.com/vue-event-manager@2.1.0).
```html
-
+
```
## Example
diff --git a/dist/vue-event-manager.common.js b/dist/vue-event-manager.common.js
index 7aeb955..3cf7438 100644
--- a/dist/vue-event-manager.common.js
+++ b/dist/vue-event-manager.common.js
@@ -1,5 +1,5 @@
/*!
- * vue-event-manager v2.0.1
+ * vue-event-manager v2.1.0
* https://github.com/pagekit/vue-event-manager
* Released under the MIT License.
*/
@@ -10,20 +10,22 @@
* Utility functions.
*/
+var assign = Object.assign || _assign;
+
var isArray = Array.isArray;
-function isObject(obj) {
- return obj !== null && typeof obj === 'object';
+function isObject(val) {
+ return val !== null && typeof val === 'object';
}
-function isUndefined(obj) {
- return typeof obj === 'undefined';
+function isUndefined(val) {
+ return typeof val === 'undefined';
}
function forEach(collection, callback) {
- Object.keys(collection || {}).forEach(function (key) {
- callback.call(null, collection[key], key);
- });
+ Object.keys(collection || {}).forEach(
+ function (key) { return callback.call(null, collection[key], key); }
+ );
}
function array(array) {
@@ -31,16 +33,33 @@ function array(array) {
if (!array.findIndex) {
- array.findIndex = findIndex;
+ array.findIndex = _findIndex;
}
return array;
}
+/**
+ * Object.assign() polyfill.
+ */
+function _assign(target) {
+ var sources = [], len = arguments.length - 1;
+ while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];
+
+
+ sources.forEach(function (source) {
+ Object.keys(source || {}).forEach(
+ function (key) { return target[key] = source[key]; }
+ );
+ });
+
+ return target;
+}
+
/**
* Array.findIndex() polyfill.
*/
-function findIndex(predicate) {
+function _findIndex(predicate) {
if (this == null) {
throw new TypeError('"this" is null or not defined');
@@ -75,6 +94,7 @@ function findIndex(predicate) {
*/
var EventManager = function EventManager() {
+ this.log = null;
this.listeners = {};
};
@@ -116,12 +136,13 @@ EventManager.prototype.off = function off (event, callback) {
};
EventManager.prototype.trigger = function trigger (event, params, asynch) {
+ if ( params === void 0 ) params = [];
if ( asynch === void 0 ) asynch = false;
- var $event = new Event(event, params);
+ var _event = new Event(event, params);
var reject = function (result) { return Promise.reject(result); };
- var resolve = function (result) { return !isUndefined(result) ? result : $event.result; };
+ var resolve = function (result) { return !isUndefined(result) ? result : _event.result; };
var reducer = function (result, ref) {
var callback = ref.callback;
@@ -129,40 +150,44 @@ EventManager.prototype.trigger = function trigger (event, params, asynch) {
var next = function (result) {
if (!isUndefined(result)) {
- $event.result = result;
+ _event.result = result;
}
if (result === false) {
- $event.stopPropagation();
+ _event.stopPropagation();
}
- if ($event.isPropagationStopped()) {
- return $event.result;
+ if (_event.isPropagationStopped()) {
+ return _event.result;
}
- return callback.apply(callback, [$event].concat($event.params));
+ return callback.apply(callback, [_event].concat(_event.params));
};
return asynch ? result.then(next, reject) : next(result);
};
- var listeners = (this.listeners[event] || []).concat();
+ var listeners = (this.listeners[_event.name] || []).concat();
var result = listeners.reduce(reducer, asynch ? Promise.resolve() : undefined);
+ if (this.log) {
+ this.log.call(this, _event);
+ }
+
return asynch ? result.then(resolve, reject) : resolve(result);
};
-var Event = function Event(name, params) {
- if ( params === void 0 ) params = [];
+var Event = function Event(event, params) {
+ if (!isObject(event)) {
+ event = {name: event};
+ }
if (!isArray(params)) {
params = [params];
}
- this.name = name;
- this.params = params;
- this.result = undefined;
+ assign(this, event, {params: params, result: undefined});
};
Event.prototype.stopPropagation = function stopPropagation () {
@@ -179,18 +204,64 @@ Event.prototype.isPropagationStopped = function isPropagationStopped () {
var Events = new EventManager();
-Events.install = function (Vue) {
+Events.install = function (Vue, options) {
+ if ( options === void 0 ) options = {};
+
if (this.installed) {
return;
}
- Vue.events = this;
- Vue.prototype.$events = this;
- Vue.prototype.$trigger = this.trigger.bind(this);
- Vue.mixin(Number(Vue.version[0]) < 2 ? {init: initEvents} : {beforeCreate: initEvents});
+ // add global instance/methods
+ Vue.prototype.$events = Vue.events = assign(Events, options);
+ Vue.prototype.$trigger = function (event, params, asynch) {
+ if ( params === void 0 ) params = [];
+ if ( asynch === void 0 ) asynch = false;
+
+
+ if (!isObject(event)) {
+ event = {name: event, origin: this};
+ }
+
+ return Events.trigger(event, params, asynch);
+ };
+
+ // add merge strategy for "events"
+ Vue.config.optionMergeStrategies.events = mergeEvents;
+
+ // add mixin to parse "events" from component options
+ Vue.mixin({beforeCreate: initEvents});
};
+function mergeEvents(parentVal, childVal) {
+
+ if (!childVal) {
+ return parentVal;
+ }
+
+ if (!parentVal) {
+ return childVal;
+ }
+
+ var events = assign({}, parentVal);
+
+ for (var event in childVal) {
+
+ var parent = events[event];
+ var child = childVal[event];
+
+ if (parent && !isArray(parent)) {
+ parent = [parent];
+ }
+
+ events[event] = parent
+ ? parent.concat(child)
+ : isArray(child) ? child : [child];
+ }
+
+ return events;
+}
+
function initEvents() {
var this$1 = this;
diff --git a/dist/vue-event-manager.esm.js b/dist/vue-event-manager.esm.js
index 011b64a..da4ac92 100644
--- a/dist/vue-event-manager.esm.js
+++ b/dist/vue-event-manager.esm.js
@@ -1,5 +1,5 @@
/*!
- * vue-event-manager v2.0.1
+ * vue-event-manager v2.1.0
* https://github.com/pagekit/vue-event-manager
* Released under the MIT License.
*/
@@ -8,20 +8,22 @@
* Utility functions.
*/
+var assign = Object.assign || _assign;
+
var isArray = Array.isArray;
-function isObject(obj) {
- return obj !== null && typeof obj === 'object';
+function isObject(val) {
+ return val !== null && typeof val === 'object';
}
-function isUndefined(obj) {
- return typeof obj === 'undefined';
+function isUndefined(val) {
+ return typeof val === 'undefined';
}
function forEach(collection, callback) {
- Object.keys(collection || {}).forEach(function (key) {
- callback.call(null, collection[key], key);
- });
+ Object.keys(collection || {}).forEach(
+ function (key) { return callback.call(null, collection[key], key); }
+ );
}
function array(array) {
@@ -29,16 +31,33 @@ function array(array) {
if (!array.findIndex) {
- array.findIndex = findIndex;
+ array.findIndex = _findIndex;
}
return array;
}
+/**
+ * Object.assign() polyfill.
+ */
+function _assign(target) {
+ var sources = [], len = arguments.length - 1;
+ while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];
+
+
+ sources.forEach(function (source) {
+ Object.keys(source || {}).forEach(
+ function (key) { return target[key] = source[key]; }
+ );
+ });
+
+ return target;
+}
+
/**
* Array.findIndex() polyfill.
*/
-function findIndex(predicate) {
+function _findIndex(predicate) {
if (this == null) {
throw new TypeError('"this" is null or not defined');
@@ -73,6 +92,7 @@ function findIndex(predicate) {
*/
var EventManager = function EventManager() {
+ this.log = null;
this.listeners = {};
};
@@ -114,12 +134,13 @@ EventManager.prototype.off = function off (event, callback) {
};
EventManager.prototype.trigger = function trigger (event, params, asynch) {
+ if ( params === void 0 ) params = [];
if ( asynch === void 0 ) asynch = false;
- var $event = new Event(event, params);
+ var _event = new Event(event, params);
var reject = function (result) { return Promise.reject(result); };
- var resolve = function (result) { return !isUndefined(result) ? result : $event.result; };
+ var resolve = function (result) { return !isUndefined(result) ? result : _event.result; };
var reducer = function (result, ref) {
var callback = ref.callback;
@@ -127,40 +148,44 @@ EventManager.prototype.trigger = function trigger (event, params, asynch) {
var next = function (result) {
if (!isUndefined(result)) {
- $event.result = result;
+ _event.result = result;
}
if (result === false) {
- $event.stopPropagation();
+ _event.stopPropagation();
}
- if ($event.isPropagationStopped()) {
- return $event.result;
+ if (_event.isPropagationStopped()) {
+ return _event.result;
}
- return callback.apply(callback, [$event].concat($event.params));
+ return callback.apply(callback, [_event].concat(_event.params));
};
return asynch ? result.then(next, reject) : next(result);
};
- var listeners = (this.listeners[event] || []).concat();
+ var listeners = (this.listeners[_event.name] || []).concat();
var result = listeners.reduce(reducer, asynch ? Promise.resolve() : undefined);
+ if (this.log) {
+ this.log.call(this, _event);
+ }
+
return asynch ? result.then(resolve, reject) : resolve(result);
};
-var Event = function Event(name, params) {
- if ( params === void 0 ) params = [];
+var Event = function Event(event, params) {
+ if (!isObject(event)) {
+ event = {name: event};
+ }
if (!isArray(params)) {
params = [params];
}
- this.name = name;
- this.params = params;
- this.result = undefined;
+ assign(this, event, {params: params, result: undefined});
};
Event.prototype.stopPropagation = function stopPropagation () {
@@ -177,18 +202,64 @@ Event.prototype.isPropagationStopped = function isPropagationStopped () {
var Events = new EventManager();
-Events.install = function (Vue) {
+Events.install = function (Vue, options) {
+ if ( options === void 0 ) options = {};
+
if (this.installed) {
return;
}
- Vue.events = this;
- Vue.prototype.$events = this;
- Vue.prototype.$trigger = this.trigger.bind(this);
- Vue.mixin(Number(Vue.version[0]) < 2 ? {init: initEvents} : {beforeCreate: initEvents});
+ // add global instance/methods
+ Vue.prototype.$events = Vue.events = assign(Events, options);
+ Vue.prototype.$trigger = function (event, params, asynch) {
+ if ( params === void 0 ) params = [];
+ if ( asynch === void 0 ) asynch = false;
+
+
+ if (!isObject(event)) {
+ event = {name: event, origin: this};
+ }
+
+ return Events.trigger(event, params, asynch);
+ };
+
+ // add merge strategy for "events"
+ Vue.config.optionMergeStrategies.events = mergeEvents;
+
+ // add mixin to parse "events" from component options
+ Vue.mixin({beforeCreate: initEvents});
};
+function mergeEvents(parentVal, childVal) {
+
+ if (!childVal) {
+ return parentVal;
+ }
+
+ if (!parentVal) {
+ return childVal;
+ }
+
+ var events = assign({}, parentVal);
+
+ for (var event in childVal) {
+
+ var parent = events[event];
+ var child = childVal[event];
+
+ if (parent && !isArray(parent)) {
+ parent = [parent];
+ }
+
+ events[event] = parent
+ ? parent.concat(child)
+ : isArray(child) ? child : [child];
+ }
+
+ return events;
+}
+
function initEvents() {
var this$1 = this;
diff --git a/dist/vue-event-manager.js b/dist/vue-event-manager.js
index bbcd46a..ac73735 100644
--- a/dist/vue-event-manager.js
+++ b/dist/vue-event-manager.js
@@ -1,5 +1,5 @@
/*!
- * vue-event-manager v2.0.1
+ * vue-event-manager v2.1.0
* https://github.com/pagekit/vue-event-manager
* Released under the MIT License.
*/
@@ -14,20 +14,22 @@
* Utility functions.
*/
+ var assign = Object.assign || _assign;
+
var isArray = Array.isArray;
- function isObject(obj) {
- return obj !== null && typeof obj === 'object';
+ function isObject(val) {
+ return val !== null && typeof val === 'object';
}
- function isUndefined(obj) {
- return typeof obj === 'undefined';
+ function isUndefined(val) {
+ return typeof val === 'undefined';
}
function forEach(collection, callback) {
- Object.keys(collection || {}).forEach(function (key) {
- callback.call(null, collection[key], key);
- });
+ Object.keys(collection || {}).forEach(
+ function (key) { return callback.call(null, collection[key], key); }
+ );
}
function array(array) {
@@ -35,16 +37,33 @@
if (!array.findIndex) {
- array.findIndex = findIndex;
+ array.findIndex = _findIndex;
}
return array;
}
+ /**
+ * Object.assign() polyfill.
+ */
+ function _assign(target) {
+ var sources = [], len = arguments.length - 1;
+ while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];
+
+
+ sources.forEach(function (source) {
+ Object.keys(source || {}).forEach(
+ function (key) { return target[key] = source[key]; }
+ );
+ });
+
+ return target;
+ }
+
/**
* Array.findIndex() polyfill.
*/
- function findIndex(predicate) {
+ function _findIndex(predicate) {
if (this == null) {
throw new TypeError('"this" is null or not defined');
@@ -79,6 +98,7 @@
*/
var EventManager = function EventManager() {
+ this.log = null;
this.listeners = {};
};
@@ -120,12 +140,13 @@
};
EventManager.prototype.trigger = function trigger (event, params, asynch) {
+ if ( params === void 0 ) params = [];
if ( asynch === void 0 ) asynch = false;
- var $event = new Event(event, params);
+ var _event = new Event(event, params);
var reject = function (result) { return Promise.reject(result); };
- var resolve = function (result) { return !isUndefined(result) ? result : $event.result; };
+ var resolve = function (result) { return !isUndefined(result) ? result : _event.result; };
var reducer = function (result, ref) {
var callback = ref.callback;
@@ -133,40 +154,44 @@
var next = function (result) {
if (!isUndefined(result)) {
- $event.result = result;
+ _event.result = result;
}
if (result === false) {
- $event.stopPropagation();
+ _event.stopPropagation();
}
- if ($event.isPropagationStopped()) {
- return $event.result;
+ if (_event.isPropagationStopped()) {
+ return _event.result;
}
- return callback.apply(callback, [$event].concat($event.params));
+ return callback.apply(callback, [_event].concat(_event.params));
};
return asynch ? result.then(next, reject) : next(result);
};
- var listeners = (this.listeners[event] || []).concat();
+ var listeners = (this.listeners[_event.name] || []).concat();
var result = listeners.reduce(reducer, asynch ? Promise.resolve() : undefined);
+ if (this.log) {
+ this.log.call(this, _event);
+ }
+
return asynch ? result.then(resolve, reject) : resolve(result);
};
- var Event = function Event(name, params) {
- if ( params === void 0 ) params = [];
+ var Event = function Event(event, params) {
+ if (!isObject(event)) {
+ event = {name: event};
+ }
if (!isArray(params)) {
params = [params];
}
- this.name = name;
- this.params = params;
- this.result = undefined;
+ assign(this, event, {params: params, result: undefined});
};
Event.prototype.stopPropagation = function stopPropagation () {
@@ -183,18 +208,64 @@
var Events = new EventManager();
- Events.install = function (Vue) {
+ Events.install = function (Vue, options) {
+ if ( options === void 0 ) options = {};
+
if (this.installed) {
return;
}
- Vue.events = this;
- Vue.prototype.$events = this;
- Vue.prototype.$trigger = this.trigger.bind(this);
- Vue.mixin(Number(Vue.version[0]) < 2 ? {init: initEvents} : {beforeCreate: initEvents});
+ // add global instance/methods
+ Vue.prototype.$events = Vue.events = assign(Events, options);
+ Vue.prototype.$trigger = function (event, params, asynch) {
+ if ( params === void 0 ) params = [];
+ if ( asynch === void 0 ) asynch = false;
+
+
+ if (!isObject(event)) {
+ event = {name: event, origin: this};
+ }
+
+ return Events.trigger(event, params, asynch);
+ };
+
+ // add merge strategy for "events"
+ Vue.config.optionMergeStrategies.events = mergeEvents;
+
+ // add mixin to parse "events" from component options
+ Vue.mixin({beforeCreate: initEvents});
};
+ function mergeEvents(parentVal, childVal) {
+
+ if (!childVal) {
+ return parentVal;
+ }
+
+ if (!parentVal) {
+ return childVal;
+ }
+
+ var events = assign({}, parentVal);
+
+ for (var event in childVal) {
+
+ var parent = events[event];
+ var child = childVal[event];
+
+ if (parent && !isArray(parent)) {
+ parent = [parent];
+ }
+
+ events[event] = parent
+ ? parent.concat(child)
+ : isArray(child) ? child : [child];
+ }
+
+ return events;
+ }
+
function initEvents() {
var this$1 = this;
diff --git a/dist/vue-event-manager.min.js b/dist/vue-event-manager.min.js
index 3b41719..e749b89 100644
--- a/dist/vue-event-manager.min.js
+++ b/dist/vue-event-manager.min.js
@@ -1,7 +1,7 @@
/*!
- * vue-event-manager v2.0.1
+ * vue-event-manager v2.1.0
* https://github.com/pagekit/vue-event-manager
* Released under the MIT License.
*/
-!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):t.VueEventManager=n()}(this,function(){"use strict";var e=Array.isArray;function u(t){return void 0===t}function n(n,e){Object.keys(n||{}).forEach(function(t){e.call(null,n[t],t)})}function f(t){if(null==this)throw new TypeError('"this" is null or not defined');if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var n=Object(this),e=n.length>>>0,r=arguments[1],i=0;i>>0,e=arguments[1],i=0;i