diff --git a/README.md b/README.md index d332f96..764b4df 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,13 @@ $ yarn add handle-events - + ``` -In the above case, the library will be included as global object in -the browser under the name of [`jsu`](#examples), wherein, if that -namespace exists, it will be extended, otherwise a new `jsu` object -will be created. +In the above case, the library will be included as global object +in the browser under the name of [`jsu`](#api) (JavaScript-Utils), +wherein, if that namespace exists, it will be extended, otherwise +a new `jsu` object will be created. As this library is built as [UMD] _(Universal Module Definition)_, it can be included from module loaders such as [CommonJS], [ES2015 Imports] @@ -49,13 +49,13 @@ or [AMD RequireJS]. ### CommonJS ```javascript -var evt = require('handle-events'); +var jsu = require('handle-events'); ``` ### ES2015 Imports ```javascript -import evt from 'handle-events'; +import jsu from 'handle-events'; ``` ### AMD @@ -68,8 +68,8 @@ requirejs.config({ 'handle-events': '/handle-events.min' } }); -require(['handle-events'], function(evt) { - console.log(evt); +require(['handle-events'], function(jsu) { + console.log(jsu); }); ``` @@ -81,18 +81,18 @@ See an example with RequireJS here: http://jsfiddle.net/FdKTn/78/ ## API -- [addEventListener](#addeventlistenernode-eventns-listener-usecapture) -- [delegate](#delegatenode-selector-eventns-listener-usecapture) +- [addEventListener](#addeventlistenernode-eventns-listener-capture) +- [delegate](#delegatenode-selector-eventns-listener-capture) - [removeEventListener](#removeeventlistenernode-eventns-listener) - [getEventListeners](#geteventlistenersnode-eventns) - [handleEvents](#handleeventsnode) -### addEventListener(node, eventns, listener, useCapture) +### addEventListener(node, eventns, listener, capture) **Returns `void`** ```javascript -addEventListener(node: Element, eventns: String, listener: Function, useCapture: Boolean) : void +addEventListener(node: Element, eventns: String, listener: Function, capture: Boolean) : void ``` Attaches an event-handler to a DOM element. You can set a namespace to @@ -100,9 +100,9 @@ the event by appending a dot `.` to the event name. It receives the following arguments: - **node** `Element`: DOM Element to which the event handler is attached -- **eventns** `String`: name of the event.namespace to register -- **listener** `Function`: event handler -- **useCapture** `Function`: event capture (default false) +- **eventns** `String`: name of the event (with .namespace) to register +- **listener** `Function`: the function which receives the event notification +- **capture** `Boolean`: if the event is activated at the beginning _(default `false`)_ Each event handler attached is tracked by an internal store, which keeps track of the event type and the namespace linked to a DOM Element. You can access @@ -111,34 +111,74 @@ that store through the API [getEventListeners](#geteventlistenersnode-eventns). ```javascript var title = document.getElementById('title'); -// add a named event handler + namespace (recommended) +// add a named event handler with namespace (recommended) const onMouseOver = (e) => console.log(`triggered ${e.type}.tooltip`); jsu.addEventListener(title, 'mouseover.tooltip', onMouseOver); -// add an anonymous event handler +// add an anonymous event handler (without namespace) jsu.addEventListener(title, 'click', (e) => { console.log(`triggered ${e.type}`); }); ``` +Events can be activated at two occasions: At the beginning _("capture")_ by +setting `capture = true`, and at the end _("bubble")_ by default. +Events are executed in the order of how they're defined. + +Say, you define 4 event listeners: + +```javascript +jsu.addEventListener(document, "click", (e) => alert(1)); +jsu.addEventListener(document, "click", (e) => alert(2), true); +jsu.addEventListener(document, "click", (e) => alert(3), false); +jsu.addEventListener(document, "click", (e) => alert(4), true); +``` + +The alert boxes will pop up in this order: + +- `2`: defined first, using `capture = true` +- `4`: defined second, using `capture = true` +- `1`: first handler defined without setting `capture` +- `3`: second handler defined with `capture = false` + +For a better understanding of capture-events and event-bubbling, +read the following link: https://stackoverflow.com/a/10654134/2247494 +and also you can see a demo here: http://jsfiddle.net/sc5Xa/198/ + [☗ Back to API](#api) -### delegate(node, selector, eventns, listener, useCapture) +### delegate(node, selector, eventns, listener, capture) + +**Returns `void`** ```javascript -delegate(node: Element, selector: String, eventns: String, listener: function, useCapture: Boolean): voide +delegate(node: Element, eventns: String, selector: String, listener: Function, capture: Boolean) : void ``` -Attaches an event-handler to a Dom Element but delegates the event the selector. +Attaches a listener to a DOM `Element` but delegates the event-listener +to the DOM Elements beneath that matches with the `selector` provided. +It receives the following arguments: - **node** `Element`: DOM Element to which the event handler is attached -- **eventns** `String`: name of the event.namespace to register -- **selector** `String`: CSS Selector -- **listener** `Function`: event handler -- **useCapture** `Function`: event capture (default false) +- **eventns** `String`: name of the event (with .namespace) to register +- **selector** `String`: CSS selector for those elements that will propagate the event +- **listener** `Function`: the function which receives the event notification +- **capture** `Boolean`: if the event is activated at the beginning _(default `false`)_ -**Returns `void`** +Events can be activated at two occasions: At the beginning _("capture")_ by +setting `capture = true`, and at the end _("bubble")_ by default. +Events are executed in the order of how they're defined. + +```javascript +jsu.delegate(document, "click.test", "h3", (e) => alert(1)); +jsu.delegate(document, "click.test", "h3", (e) => alert(2), true); +jsu.delegate(document, "click.test", "h3", (e) => alert(3), false); +jsu.delegate(document, "click.test", "h3", (e) => alert(4), true); +``` +For a better understanding of capture-events and event-bubbling, +read the following link: https://stackoverflow.com/a/10654134/2247494 +and also you can see a demo here: http://jsfiddle.net/sc5Xa/198/ [☗ Back to API](#api) @@ -159,13 +199,13 @@ only a namespace that will match with all event types. It receives the following arguments: - **node** `Element`: DOM element where the event handler is removed. -- **eventns** `String`: _(optional)_ name of the event.namespace to remove. -- **listener** `Function`: _(optional)_ event handler. +- **eventns** `String`: _(optional)_ name of the event (with .namespace) to remove +- **listener** `Function`: _(optional)_ the function which receives the event notification Each event handler attached by -[addEventListener](#addeventlistenernode-eventns-listener) is tracked by an -internal store, which keeps track of the event type and the namespace linked -to a DOM Element. You can access that store through the API +[addEventListener](#addeventlistenernode-eventns-listener-capture) is tracked +by an internal store, which keeps track of the event type and the namespace +linked to a DOM Element. You can access that store through the API [getEventListeners](#geteventlistenersnode-eventns). ```javascript @@ -190,9 +230,9 @@ getEventListeners(node: Element) : Object ``` Gets all event-handlers from a DOM element. Each event handler attached by -[addEventListener](#addeventlistenernode-eventns-listener) is tracked by an -internal store, which keeps track of the event type and the namespace linked -to a DOM Element. +[addEventListener](#addeventlistenernode-eventns-listener-capture) is tracked +by an internal store, which keeps track of the event type and the namespace +linked to a DOM Element. It receives the following arguments: @@ -204,7 +244,7 @@ var title = document.getElementById('title'); jsu.getEventListeners(title); // get all event listeners jsu.getEventListeners(title, 'click'); // get all listeners by event -jsu.getEventListeners(title, '.tooltip'); // get all listeners by namespace +jsu.getEventListeners(title, '.tooltip'); // get all listeners by namespace jsu.getEventListeners(title, 'mouseover.tooltip'); // get listeners by event + namespace ``` @@ -243,7 +283,7 @@ handleEvents(node: Element) : Object ``` This _factory-method_ is a _facade_ that simplifies the tasks for -[attaching](#addeventlistenernode-eventns-listener) and +[attaching](#addeventlistenernode-eventns-listener-capture) and [removing](#removeeventlistenernode-eventns-listener) event listeners. It implements a _fluent interface_ that allows the chaining of methods (as jQuery does). It receives an argument that is the DOM `Element` to @@ -251,10 +291,10 @@ which you will attach or remove event-handlers. The methods exposed are: -- **on** `Function`: facade of [addEventListener](#addeventlistenernode-eventns-listener). - It only receives two arguments: `(eventns, listener)` -- **off** `Function`: facade of [removeEventListener](#removeeventlistenernode-eventns-listener). - It only receives two arguments: `(eventns, listener)` +- **on()** `Function`: facade of [addEventListener](#addeventlistenernode-eventns-listener-capture). + It receives the following arguments: `(eventns, listener, capture)` +- **off()** `Function`: facade of [removeEventListener](#removeeventlistenernode-eventns-listener). + It receives the following arguments: `(eventns, listener)` ```javascript const evtHandler = (e) => console.log(`triggered ${e.type}`); diff --git a/dist/handle-events.js b/dist/handle-events.js index 636a254..8a7d79e 100644 --- a/dist/handle-events.js +++ b/dist/handle-events.js @@ -1,4 +1,4 @@ -/*! handle-events@v1.0.0a. Jherax 2017. Visit https://github.com/jherax/handle-events */ +/*! handle-events@v1.1.0. Jherax 2017. Visit https://github.com/jherax/handle-events */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); @@ -110,7 +110,7 @@ var NODES = []; * @param {Element} node: DOM element * @param {String} eventns: name of the event/namespace to register * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ function addEventListener(node, eventns, listener) { var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; @@ -146,7 +146,6 @@ function addEventListener(node, eventns, listener) { * Removes an event-handler from a DOM element. * Events with namespace are allowed. * - * @private * @param {Element} node: DOM element * @param {String} eventns: (optional) name of the event/namespace to remove * @param {Function} listener: (optional) event handler @@ -230,13 +229,16 @@ function getEventListeners(node, eventns) { } /** + * Attaches a listener to a DOM `Element` but delegates the event-listener + * to the DOM Elements beneath that matches with the `selector` provided. + * * @param {Element} node: DOM element - * @param {String} selector: CSS Selector for the event * @param {String} eventns: name of the event/namespace to register + * @param {String} selector: CSS selector for those elements that will propagate the event * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ -function delegate(node, selector, eventns, listener, useCapture) { +function delegate(node, eventns, selector, listener, useCapture) { addEventListener(node, eventns, function (e) { if (e.target.matches(selector)) { listener(e); @@ -285,6 +287,10 @@ module.exports = exports['default']; "use strict"; +/** + * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches + */ + if (typeof Element !== 'undefined' && !Element.prototype.matches) { var proto = Element.prototype; @@ -319,7 +325,9 @@ function handleEvents(node) { return fluent; }; fluent.on = function (eventns, listener) { - (0, _events.addEventListener)(node, eventns, listener); + var useCapture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + (0, _events.addEventListener)(node, eventns, listener, useCapture); return fluent; }; return fluent; @@ -344,13 +352,13 @@ exports.detachEvent = detachEvent; * @param {Element} node: DOM element * @param {String} eventName: name of the event to register * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ function attachEvent(node, eventName, listener) { var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (node.addEventListener) { - node.addEventListener(eventName, listener, useCapture); + node.addEventListener(eventName, listener, !!useCapture); } else { node.attachEvent("on" + eventName, listener); } @@ -362,13 +370,13 @@ function attachEvent(node, eventName, listener) { * @param {Element} node: DOM element * @param {String} eventName: name of the event to register * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ function detachEvent(node, eventName, listener) { var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (node.removeEventListener) { - node.removeEventListener(eventName, listener, useCapture); + node.removeEventListener(eventName, listener, !!useCapture); } else { node.detachEvent("on" + eventName, listener); } diff --git a/dist/handle-events.min.js b/dist/handle-events.min.js index 76cf71e..3eb35c7 100644 --- a/dist/handle-events.min.js +++ b/dist/handle-events.min.js @@ -1,3 +1,3 @@ -/*! handle-events@v1.0.0a. Jherax 2017. Visit https://github.com/jherax/handle-events */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.jsu=t():Object.prototype.toString.call(e.jsu)==="[object Object]"?!function(m,f,p){for(p in f)m[p]=f[p]}(e.jsu,t()):e.jsu=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=1)}([function(e,t,n){"use strict";function r(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=(0,f.splitEventName)(t),a=s(o,2),i=a[0],u=a[1];if(!i)throw Error("Event name was not provided");var l=v.find(function(t){return t.node===e});void 0===l&&(l=Object.create(null),l.events=Object.create(null),l.node=e,v.push(l)),l.events[i]||(l.events[i]=[]);var d=Object.create(null);d.namespace=u,d.handler=n,d.useCapture=r,l.events[i].push(d),(0,c.attachEvent)(e,i,n,r)}function o(e,t,n){var r=(0,f.splitEventName)(t),o=s(r,2),a=o[0],i=o[1],u=v.find(function(t){return t.node===e});if(u){var l=function(r){var o=this.toString();return!(!n&&!t||(0,f.match)(a,o,i,r.namespace,n)||r.handler===n&&(!t||(0,f.match)(a,o,i,r.namespace)))||!!(0,c.detachEvent)(e,o,r.handler,r.useCapture)};(a?[a]:Object.keys(u.events)).forEach(function(e){u.events[e]=(u.events[e]||[]).filter(l,e)})}}function a(e){var t=this.eventName,n=this.eventType,r=this.namespace,o=this.listeners;(0,f.match)(t,n,r,e.namespace)&&(o[n]=o[n]||[],o[n].push(e))}function i(e,t){var n=(0,f.splitEventName)(t),r=s(n,2),o=r[0],i=r[1],u=v.find(function(t){return t.node===e}),c={namespace:i,eventName:o,listeners:{}};return u?t?((o?[o]:Object.keys(u.events)).forEach(function(e){c.eventType=e,(u.events[e]||[]).forEach(a,c)}),c.listeners):u.events:c.listeners}function u(e,t,n,o,a){r(e,n,function(e){e.target.matches(t)&&o(e)},a)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){var n=[],r=!0,o=!1,a=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.addEventListener=r,t.removeEventListener=o,t.getEventListeners=i,t.delegate=u;var c=n(4),f=n(5),v=[]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(2);var r=n(3),o=function(e){return e&&e.__esModule?e:{default:e}}(r),a=n(0),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(a);t.default={handleEvents:o.default,addEventListener:i.addEventListener,removeEventListener:i.removeEventListener,getEventListeners:i.getEventListeners,delegate:i.delegate},e.exports=t.default},function(e,t,n){"use strict";if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}},function(e,t,n){"use strict";function r(e){var t=Object.create(null);return t.off=function(n,r){return(0,o.removeEventListener)(e,n,r),t},t.on=function(n,r){return(0,o.addEventListener)(e,n,r),t},t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(0);e.exports=t.default},function(e,t,n){"use strict";function r(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.addEventListener?e.addEventListener(t,n,r):e.attachEvent("on"+t,n)}function o(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.removeEventListener?e.removeEventListener(t,n,r):e.detachEvent("on"+t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.attachEvent=r,t.detachEvent=o},function(e,t,n){"use strict";function r(e){var t=(e||"").indexOf(".");return[t>-1?e.substr(0,t):e,t>-1?e.substr(t+1):void 0]}function o(e,t,n,r,o){return!o&&(e===t&&!n||n===r&&!e||n===r&&e===t)}Object.defineProperty(t,"__esModule",{value:!0}),t.splitEventName=r,t.match=o}])}); +/*! handle-events@v1.1.0. Jherax 2017. Visit https://github.com/jherax/handle-events */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.jsu=t():Object.prototype.toString.call(e.jsu)==="[object Object]"?!function(m,f,p){for(p in f)m[p]=f[p]}(e.jsu,t()):e.jsu=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=1)}([function(e,t,n){"use strict";function r(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=(0,f.splitEventName)(t),a=s(o,2),i=a[0],u=a[1];if(!i)throw Error("Event name was not provided");var l=v.find(function(t){return t.node===e});void 0===l&&(l=Object.create(null),l.events=Object.create(null),l.node=e,v.push(l)),l.events[i]||(l.events[i]=[]);var d=Object.create(null);d.namespace=u,d.handler=n,d.useCapture=r,l.events[i].push(d),(0,c.attachEvent)(e,i,n,r)}function o(e,t,n){var r=(0,f.splitEventName)(t),o=s(r,2),a=o[0],i=o[1],u=v.find(function(t){return t.node===e});if(u){var l=function(r){var o=this.toString();return!(!n&&!t||(0,f.match)(a,o,i,r.namespace,n)||r.handler===n&&(!t||(0,f.match)(a,o,i,r.namespace)))||!!(0,c.detachEvent)(e,o,r.handler,r.useCapture)};(a?[a]:Object.keys(u.events)).forEach(function(e){u.events[e]=(u.events[e]||[]).filter(l,e)})}}function a(e){var t=this.eventName,n=this.eventType,r=this.namespace,o=this.listeners;(0,f.match)(t,n,r,e.namespace)&&(o[n]=o[n]||[],o[n].push(e))}function i(e,t){var n=(0,f.splitEventName)(t),r=s(n,2),o=r[0],i=r[1],u=v.find(function(t){return t.node===e}),c={namespace:i,eventName:o,listeners:{}};return u?t?((o?[o]:Object.keys(u.events)).forEach(function(e){c.eventType=e,(u.events[e]||[]).forEach(a,c)}),c.listeners):u.events:c.listeners}function u(e,t,n,o,a){r(e,t,function(e){e.target.matches(n)&&o(e)},a)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){var n=[],r=!0,o=!1,a=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.addEventListener=r,t.removeEventListener=o,t.getEventListeners=i,t.delegate=u;var c=n(4),f=n(5),v=[]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(2);var r=n(3),o=function(e){return e&&e.__esModule?e:{default:e}}(r),a=n(0),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(a);t.default={handleEvents:o.default,addEventListener:i.addEventListener,removeEventListener:i.removeEventListener,getEventListeners:i.getEventListeners,delegate:i.delegate},e.exports=t.default},function(e,t,n){"use strict";if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}},function(e,t,n){"use strict";function r(e){var t=Object.create(null);return t.off=function(n,r){return(0,o.removeEventListener)(e,n,r),t},t.on=function(n,r){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return(0,o.addEventListener)(e,n,r,a),t},t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(0);e.exports=t.default},function(e,t,n){"use strict";function r(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.addEventListener?e.addEventListener(t,n,!!r):e.attachEvent("on"+t,n)}function o(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.removeEventListener?e.removeEventListener(t,n,!!r):e.detachEvent("on"+t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.attachEvent=r,t.detachEvent=o},function(e,t,n){"use strict";function r(e){var t=(e||"").indexOf(".");return[t>-1?e.substr(0,t):e,t>-1?e.substr(t+1):void 0]}function o(e,t,n,r,o){return!o&&(e===t&&!n||n===r&&!e||n===r&&e===t)}Object.defineProperty(t,"__esModule",{value:!0}),t.splitEventName=r,t.match=o}])}); //# sourceMappingURL=handle-events.min.map \ No newline at end of file diff --git a/dist/handle-events.min.map b/dist/handle-events.min.map index db2a9a5..83b2d95 100644 --- a/dist/handle-events.min.map +++ b/dist/handle-events.min.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///handle-events.min.js","webpack:///webpack/bootstrap 95119d7e851c54ac29ac","webpack:///./src/events.js","webpack:///./src/main.js","webpack:///./src/prototypes.js","webpack:///./src/facade.js","webpack:///./src/adapter.js","webpack:///./src/utils.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","addEventListener","node","eventns","listener","useCapture","arguments","length","undefined","_splitEventName","_utils","splitEventName","_splitEventName2","_slicedToArray","event","namespace","Error","data","NODES","find","create","events","push","eventData","handler","_adapter","attachEvent","removeEventListener","_splitEventName3","_splitEventName4","removeHandlers","eventType","toString","match","detachEvent","keys","forEach","type","filter","getHandlers","eventName","listeners","getEventListeners","_splitEventName5","_splitEventName6","context","delegate","selector","e","target","matches","value","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","done","err","Array","isArray","TypeError","_facade","_facade2","obj","default","_events","evt","newObj","key","handleEvents","Element","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","fluent","off","on","indexOf","substr","eventNamespace"],"mappings":"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","file":"handle-events.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"jsu\"] = factory();\n\telse\n\t\troot[\"jsu\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"jsu\"] = factory();\n\telse\n\t\troot[\"jsu\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getEventListeners = getEventListeners;\nexports.delegate = delegate;\n\nvar _adapter = __webpack_require__(4);\n\nvar _utils = __webpack_require__(5);\n\n/**\n * @private\n */\nvar NODES = [];\n\n/**\n * Attaches an event-handler to a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: name of the event/namespace to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nfunction addEventListener(node, eventns, listener) {\n var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var _splitEventName = (0, _utils.splitEventName)(eventns),\n _splitEventName2 = _slicedToArray(_splitEventName, 2),\n event = _splitEventName2[0],\n namespace = _splitEventName2[1];\n\n if (!event) throw Error('Event name was not provided');\n // gets the events associated to a DOM node\n var data = NODES.find(function (d) {\n return d.node === node;\n });\n if (data === undefined) {\n data = Object.create(null); // no inherited properties\n data.events = Object.create(null);\n data.node = node;\n NODES.push(data);\n }\n // checks if the node has listeners associated to the event\n if (!data.events[event]) data.events[event] = [];\n var eventData = Object.create(null);\n eventData.namespace = namespace;\n eventData.handler = listener;\n eventData.useCapture = useCapture;\n // registers the event listener into the events\n data.events[event].push(eventData);\n (0, _adapter.attachEvent)(node, event, listener, useCapture);\n}\n\n/**\n * Removes an event-handler from a DOM element.\n * Events with namespace are allowed.\n *\n * @private\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace to remove\n * @param {Function} listener: (optional) event handler\n */\nfunction removeEventListener(node, eventns, listener) {\n var _splitEventName3 = (0, _utils.splitEventName)(eventns),\n _splitEventName4 = _slicedToArray(_splitEventName3, 2),\n event = _splitEventName4[0],\n namespace = _splitEventName4[1];\n // gets the events associated to a DOM node\n\n\n var data = NODES.find(function (d) {\n return d.node === node;\n });\n if (!data) return;\n var events = event ? [event] : Object.keys(data.events);\n var removeHandlers = function remove(eventData) {\n var eventType = this.toString();\n if (!listener && !eventns || (0, _utils.match)(event, eventType, namespace, eventData.namespace, listener) || eventData.handler === listener && (!eventns || (0, _utils.match)(event, eventType, namespace, eventData.namespace))) return !!(0, _adapter.detachEvent)(node, eventType, eventData.handler, eventData.useCapture);\n return true;\n };\n events.forEach(function (type) {\n // removes event-handlers by type, namespace or listener\n data.events[type] = (data.events[type] || []).filter(removeHandlers, type);\n });\n}\n\n/**\n * Gets the `eventData` objects matching the criteria\n *\n * @private\n * @param {Object} eventData: the event data associated to the event registered\n */\nfunction getHandlers(eventData) {\n var eventName = this.eventName,\n eventType = this.eventType,\n namespace = this.namespace,\n listeners = this.listeners;\n\n if ((0, _utils.match)(eventName, eventType, namespace, eventData.namespace)) {\n listeners[eventType] = listeners[eventType] || [];\n listeners[eventType].push(eventData);\n }\n}\n\n// TODO: create a method to get events from jQuery\n\n/**\n * Gets all event-handlers from a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace\n * @return {Object}\n */\nfunction getEventListeners(node, eventns) {\n var _splitEventName5 = (0, _utils.splitEventName)(eventns),\n _splitEventName6 = _slicedToArray(_splitEventName5, 2),\n event = _splitEventName6[0],\n namespace = _splitEventName6[1];\n // gets the events associated to a DOM node\n\n\n var data = NODES.find(function (d) {\n return d.node === node;\n });\n var context = {\n namespace: namespace,\n eventName: event,\n listeners: {}\n };\n if (!data) return context.listeners;\n if (!eventns) return data.events; // Object with all event types\n var events = event ? [event] : Object.keys(data.events);\n events.forEach(function (eventType) {\n context.eventType = eventType;\n (data.events[eventType] || []).forEach(getHandlers, context);\n });\n return context.listeners;\n}\n\n/**\n * @param {Element} node: DOM element\n * @param {String} selector: CSS Selector for the event\n * @param {String} eventns: name of the event/namespace to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nfunction delegate(node, selector, eventns, listener, useCapture) {\n addEventListener(node, eventns, function (e) {\n if (e.target.matches(selector)) {\n listener(e);\n }\n }, useCapture);\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n__webpack_require__(2);\n\nvar _facade = __webpack_require__(3);\n\nvar _facade2 = _interopRequireDefault(_facade);\n\nvar _events = __webpack_require__(0);\n\nvar evt = _interopRequireWildcard(_events);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n handleEvents: _facade2.default,\n addEventListener: evt.addEventListener,\n removeEventListener: evt.removeEventListener,\n getEventListeners: evt.getEventListeners,\n delegate: evt.delegate\n};\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = handleEvents;\n\nvar _events = __webpack_require__(0);\n\n/**\n * Factory function that implements a fluent interface\n * to handle events by allowing method chaining.\n *\n * @param {Element} node: DOM element\n * @return {Object}\n */\nfunction handleEvents(node) {\n var fluent = Object.create(null);\n fluent.off = function (eventns, listener) {\n (0, _events.removeEventListener)(node, eventns, listener);\n return fluent;\n };\n fluent.on = function (eventns, listener) {\n (0, _events.addEventListener)(node, eventns, listener);\n return fluent;\n };\n return fluent;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.attachEvent = attachEvent;\nexports.detachEvent = detachEvent;\n/**\n * Attaches an event-handler to a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nfunction attachEvent(node, eventName, listener) {\n var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (node.addEventListener) {\n node.addEventListener(eventName, listener, useCapture);\n } else {\n node.attachEvent(\"on\" + eventName, listener);\n }\n}\n\n/**\n * Removes an event-handler from a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nfunction detachEvent(node, eventName, listener) {\n var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (node.removeEventListener) {\n node.removeEventListener(eventName, listener, useCapture);\n } else {\n node.detachEvent(\"on\" + eventName, listener);\n }\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.splitEventName = splitEventName;\nexports.match = match;\n/**\n * Split the event name and the namespace\n *\n * @param {String} eventns: name of the event/namespace\n * @return {Array}\n */\nfunction splitEventName(eventns) {\n var i = (eventns || '').indexOf('.'),\n event = i > -1 ? eventns.substr(0, i) : eventns,\n namespace = i > -1 ? eventns.substr(i + 1) : undefined;\n return [event, namespace];\n}\n\n/**\n * Rules to match event handlers\n *\n * @param {String} eventName: event name passed to the invoker function\n * @param {String} eventType: event type in the `data.events` object\n * @param {String} namespace: namespace passed to the invoker function\n * @param {String} eventNamespace: namespace associated to the handler in `eventData` object\n * @param {Function} handler: envent listener passed to the invoker function\n * @return {Boolean}\n */\nfunction match(eventName, eventType, namespace, eventNamespace, handler) {\n return !handler && (eventName === eventType && !namespace || namespace === eventNamespace && !eventName || namespace === eventNamespace && eventName === eventType);\n}\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// handle-events.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 95119d7e851c54ac29ac","import {attachEvent, detachEvent} from './adapter';\nimport {splitEventName, match} from './utils';\n\n/**\n * @private\n */\nconst NODES = [];\n\n/**\n * Attaches an event-handler to a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: name of the event/namespace to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nexport function addEventListener(node, eventns, listener, useCapture = false) {\n const [event, namespace] = splitEventName(eventns);\n if (!event) throw Error('Event name was not provided');\n // gets the events associated to a DOM node\n let data = NODES.find(d => d.node === node);\n if (data === undefined) {\n data = Object.create(null); // no inherited properties\n data.events = Object.create(null);\n data.node = node;\n NODES.push(data);\n }\n // checks if the node has listeners associated to the event\n if (!data.events[event]) data.events[event] = [];\n const eventData = Object.create(null);\n eventData.namespace = namespace;\n eventData.handler = listener;\n eventData.useCapture = useCapture;\n // registers the event listener into the events\n data.events[event].push(eventData);\n attachEvent(node, event, listener, useCapture);\n}\n\n/**\n * Removes an event-handler from a DOM element.\n * Events with namespace are allowed.\n *\n * @private\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace to remove\n * @param {Function} listener: (optional) event handler\n */\nexport function removeEventListener(node, eventns, listener) {\n const [event, namespace] = splitEventName(eventns);\n // gets the events associated to a DOM node\n const data = NODES.find(d => d.node === node);\n if (!data) return;\n const events = event ? [event] : Object.keys(data.events);\n const removeHandlers = function remove(eventData) {\n const eventType = this.toString();\n if ((!listener && !eventns) ||\n match(event, eventType, namespace, eventData.namespace, listener) ||\n (eventData.handler === listener &&\n (!eventns || match(event, eventType, namespace, eventData.namespace))\n )) return !!detachEvent(node, eventType, eventData.handler, eventData.useCapture);\n return true;\n };\n events.forEach((type) => {\n // removes event-handlers by type, namespace or listener\n data.events[type] = (data.events[type] || []).filter(removeHandlers, type);\n });\n}\n\n/**\n * Gets the `eventData` objects matching the criteria\n *\n * @private\n * @param {Object} eventData: the event data associated to the event registered\n */\nfunction getHandlers(eventData) {\n const {eventName, eventType, namespace, listeners} = this;\n if (match(eventName, eventType, namespace, eventData.namespace)) {\n listeners[eventType] = listeners[eventType] || [];\n listeners[eventType].push(eventData);\n }\n}\n\n// TODO: create a method to get events from jQuery\n\n/**\n * Gets all event-handlers from a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace\n * @return {Object}\n */\nexport function getEventListeners(node, eventns) {\n const [event, namespace] = splitEventName(eventns);\n // gets the events associated to a DOM node\n const data = NODES.find(d => d.node === node);\n const context = {\n namespace,\n eventName: event,\n listeners: {},\n };\n if (!data) return context.listeners;\n if (!eventns) return data.events; // Object with all event types\n const events = event ? [event] : Object.keys(data.events);\n events.forEach((eventType) => {\n context.eventType = eventType;\n (data.events[eventType] || []).forEach(getHandlers, context);\n });\n return context.listeners;\n}\n\n/**\n * @param {Element} node: DOM element\n * @param {String} selector: CSS Selector for the event\n * @param {String} eventns: name of the event/namespace to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nexport function delegate(node, selector, eventns, listener, useCapture) {\n addEventListener(node, eventns, (e) => {\n if (e.target.matches(selector)) {\n listener(e);\n }\n }, useCapture);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/events.js","import './prototypes';\nimport handleEvents from './facade';\nimport * as evt from './events';\n\nexport default {\n handleEvents,\n addEventListener: evt.addEventListener,\n removeEventListener: evt.removeEventListener,\n getEventListeners: evt.getEventListeners,\n delegate: evt.delegate,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","if (typeof Element !== 'undefined' && !Element.prototype.matches) {\n const proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/prototypes.js","import {addEventListener, removeEventListener} from './events';\n\n/**\n * Factory function that implements a fluent interface\n * to handle events by allowing method chaining.\n *\n * @param {Element} node: DOM element\n * @return {Object}\n */\nexport default function handleEvents(node) {\n const fluent = Object.create(null);\n fluent.off = (eventns, listener) => {\n removeEventListener(node, eventns, listener);\n return fluent;\n };\n fluent.on = (eventns, listener) => {\n addEventListener(node, eventns, listener);\n return fluent;\n };\n return fluent;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/facade.js","/**\n * Attaches an event-handler to a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nexport function attachEvent(node, eventName, listener, useCapture = false) {\n if (node.addEventListener) {\n node.addEventListener(eventName, listener, useCapture);\n } else {\n node.attachEvent(`on${eventName}`, listener);\n }\n}\n\n/**\n * Removes an event-handler from a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: Event Capture\n */\nexport function detachEvent(node, eventName, listener, useCapture = false) {\n if (node.removeEventListener) {\n node.removeEventListener(eventName, listener, useCapture);\n } else {\n node.detachEvent(`on${eventName}`, listener);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/adapter.js","/**\n * Split the event name and the namespace\n *\n * @param {String} eventns: name of the event/namespace\n * @return {Array}\n */\nexport function splitEventName(eventns) {\n const i = (eventns || '').indexOf('.'),\n event = i > -1 ? eventns.substr(0, i) : eventns,\n namespace = i > -1 ? eventns.substr(i + 1) : undefined;\n return [event, namespace];\n}\n\n/**\n * Rules to match event handlers\n *\n * @param {String} eventName: event name passed to the invoker function\n * @param {String} eventType: event type in the `data.events` object\n * @param {String} namespace: namespace passed to the invoker function\n * @param {String} eventNamespace: namespace associated to the handler in `eventData` object\n * @param {Function} handler: envent listener passed to the invoker function\n * @return {Boolean}\n */\nexport function match(eventName, eventType, namespace, eventNamespace, handler) {\n return !handler && (\n (eventName === eventType && !namespace) ||\n (namespace === eventNamespace && !eventName) ||\n (namespace === eventNamespace && eventName === eventType)\n );\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///handle-events.min.js","webpack:///webpack/bootstrap 30f0b6a25c42c623274d","webpack:///./src/events.js","webpack:///./src/main.js","webpack:///./src/prototypes.js","webpack:///./src/facade.js","webpack:///./src/adapter.js","webpack:///./src/utils.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","addEventListener","node","eventns","listener","useCapture","arguments","length","undefined","_splitEventName","_utils","splitEventName","_splitEventName2","_slicedToArray","event","namespace","Error","data","NODES","find","create","events","push","eventData","handler","_adapter","attachEvent","removeEventListener","_splitEventName3","_splitEventName4","removeHandlers","eventType","toString","match","detachEvent","keys","forEach","type","filter","getHandlers","eventName","listeners","getEventListeners","_splitEventName5","_splitEventName6","context","delegate","selector","e","target","matches","value","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","done","err","Array","isArray","TypeError","_facade","_facade2","obj","default","_events","evt","newObj","key","handleEvents","Element","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","fluent","off","on","indexOf","substr","eventNamespace"],"mappings":"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","file":"handle-events.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"jsu\"] = factory();\n\telse\n\t\troot[\"jsu\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"jsu\"] = factory();\n\telse\n\t\troot[\"jsu\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getEventListeners = getEventListeners;\nexports.delegate = delegate;\n\nvar _adapter = __webpack_require__(4);\n\nvar _utils = __webpack_require__(5);\n\n/**\n * @private\n */\nvar NODES = [];\n\n/**\n * Attaches an event-handler to a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: name of the event/namespace to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nfunction addEventListener(node, eventns, listener) {\n var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var _splitEventName = (0, _utils.splitEventName)(eventns),\n _splitEventName2 = _slicedToArray(_splitEventName, 2),\n event = _splitEventName2[0],\n namespace = _splitEventName2[1];\n\n if (!event) throw Error('Event name was not provided');\n // gets the events associated to a DOM node\n var data = NODES.find(function (d) {\n return d.node === node;\n });\n if (data === undefined) {\n data = Object.create(null); // no inherited properties\n data.events = Object.create(null);\n data.node = node;\n NODES.push(data);\n }\n // checks if the node has listeners associated to the event\n if (!data.events[event]) data.events[event] = [];\n var eventData = Object.create(null);\n eventData.namespace = namespace;\n eventData.handler = listener;\n eventData.useCapture = useCapture;\n // registers the event listener into the events\n data.events[event].push(eventData);\n (0, _adapter.attachEvent)(node, event, listener, useCapture);\n}\n\n/**\n * Removes an event-handler from a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace to remove\n * @param {Function} listener: (optional) event handler\n */\nfunction removeEventListener(node, eventns, listener) {\n var _splitEventName3 = (0, _utils.splitEventName)(eventns),\n _splitEventName4 = _slicedToArray(_splitEventName3, 2),\n event = _splitEventName4[0],\n namespace = _splitEventName4[1];\n // gets the events associated to a DOM node\n\n\n var data = NODES.find(function (d) {\n return d.node === node;\n });\n if (!data) return;\n var events = event ? [event] : Object.keys(data.events);\n var removeHandlers = function remove(eventData) {\n var eventType = this.toString();\n if (!listener && !eventns || (0, _utils.match)(event, eventType, namespace, eventData.namespace, listener) || eventData.handler === listener && (!eventns || (0, _utils.match)(event, eventType, namespace, eventData.namespace))) return !!(0, _adapter.detachEvent)(node, eventType, eventData.handler, eventData.useCapture);\n return true;\n };\n events.forEach(function (type) {\n // removes event-handlers by type, namespace or listener\n data.events[type] = (data.events[type] || []).filter(removeHandlers, type);\n });\n}\n\n/**\n * Gets the `eventData` objects matching the criteria\n *\n * @private\n * @param {Object} eventData: the event data associated to the event registered\n */\nfunction getHandlers(eventData) {\n var eventName = this.eventName,\n eventType = this.eventType,\n namespace = this.namespace,\n listeners = this.listeners;\n\n if ((0, _utils.match)(eventName, eventType, namespace, eventData.namespace)) {\n listeners[eventType] = listeners[eventType] || [];\n listeners[eventType].push(eventData);\n }\n}\n\n// TODO: create a method to get events from jQuery\n\n/**\n * Gets all event-handlers from a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace\n * @return {Object}\n */\nfunction getEventListeners(node, eventns) {\n var _splitEventName5 = (0, _utils.splitEventName)(eventns),\n _splitEventName6 = _slicedToArray(_splitEventName5, 2),\n event = _splitEventName6[0],\n namespace = _splitEventName6[1];\n // gets the events associated to a DOM node\n\n\n var data = NODES.find(function (d) {\n return d.node === node;\n });\n var context = {\n namespace: namespace,\n eventName: event,\n listeners: {}\n };\n if (!data) return context.listeners;\n if (!eventns) return data.events; // Object with all event types\n var events = event ? [event] : Object.keys(data.events);\n events.forEach(function (eventType) {\n context.eventType = eventType;\n (data.events[eventType] || []).forEach(getHandlers, context);\n });\n return context.listeners;\n}\n\n/**\n * Attaches a listener to a DOM `Element` but delegates the event-listener\n * to the DOM Elements beneath that matches with the `selector` provided.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: name of the event/namespace to register\n * @param {String} selector: CSS selector for those elements that will propagate the event\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nfunction delegate(node, eventns, selector, listener, useCapture) {\n addEventListener(node, eventns, function (e) {\n if (e.target.matches(selector)) {\n listener(e);\n }\n }, useCapture);\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n__webpack_require__(2);\n\nvar _facade = __webpack_require__(3);\n\nvar _facade2 = _interopRequireDefault(_facade);\n\nvar _events = __webpack_require__(0);\n\nvar evt = _interopRequireWildcard(_events);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n handleEvents: _facade2.default,\n addEventListener: evt.addEventListener,\n removeEventListener: evt.removeEventListener,\n getEventListeners: evt.getEventListeners,\n delegate: evt.delegate\n};\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\n\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = handleEvents;\n\nvar _events = __webpack_require__(0);\n\n/**\n * Factory function that implements a fluent interface\n * to handle events by allowing method chaining.\n *\n * @param {Element} node: DOM element\n * @return {Object}\n */\nfunction handleEvents(node) {\n var fluent = Object.create(null);\n fluent.off = function (eventns, listener) {\n (0, _events.removeEventListener)(node, eventns, listener);\n return fluent;\n };\n fluent.on = function (eventns, listener) {\n var useCapture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n (0, _events.addEventListener)(node, eventns, listener, useCapture);\n return fluent;\n };\n return fluent;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.attachEvent = attachEvent;\nexports.detachEvent = detachEvent;\n/**\n * Attaches an event-handler to a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nfunction attachEvent(node, eventName, listener) {\n var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (node.addEventListener) {\n node.addEventListener(eventName, listener, !!useCapture);\n } else {\n node.attachEvent(\"on\" + eventName, listener);\n }\n}\n\n/**\n * Removes an event-handler from a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nfunction detachEvent(node, eventName, listener) {\n var useCapture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (node.removeEventListener) {\n node.removeEventListener(eventName, listener, !!useCapture);\n } else {\n node.detachEvent(\"on\" + eventName, listener);\n }\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.splitEventName = splitEventName;\nexports.match = match;\n/**\n * Split the event name and the namespace\n *\n * @param {String} eventns: name of the event/namespace\n * @return {Array}\n */\nfunction splitEventName(eventns) {\n var i = (eventns || '').indexOf('.'),\n event = i > -1 ? eventns.substr(0, i) : eventns,\n namespace = i > -1 ? eventns.substr(i + 1) : undefined;\n return [event, namespace];\n}\n\n/**\n * Rules to match event handlers\n *\n * @param {String} eventName: event name passed to the invoker function\n * @param {String} eventType: event type in the `data.events` object\n * @param {String} namespace: namespace passed to the invoker function\n * @param {String} eventNamespace: namespace associated to the handler in `eventData` object\n * @param {Function} handler: envent listener passed to the invoker function\n * @return {Boolean}\n */\nfunction match(eventName, eventType, namespace, eventNamespace, handler) {\n return !handler && (eventName === eventType && !namespace || namespace === eventNamespace && !eventName || namespace === eventNamespace && eventName === eventType);\n}\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// handle-events.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 30f0b6a25c42c623274d","import {attachEvent, detachEvent} from './adapter';\nimport {splitEventName, match} from './utils';\n\n/**\n * @private\n */\nconst NODES = [];\n\n/**\n * Attaches an event-handler to a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: name of the event/namespace to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nexport function addEventListener(node, eventns, listener, useCapture = false) {\n const [event, namespace] = splitEventName(eventns);\n if (!event) throw Error('Event name was not provided');\n // gets the events associated to a DOM node\n let data = NODES.find(d => d.node === node);\n if (data === undefined) {\n data = Object.create(null); // no inherited properties\n data.events = Object.create(null);\n data.node = node;\n NODES.push(data);\n }\n // checks if the node has listeners associated to the event\n if (!data.events[event]) data.events[event] = [];\n const eventData = Object.create(null);\n eventData.namespace = namespace;\n eventData.handler = listener;\n eventData.useCapture = useCapture;\n // registers the event listener into the events\n data.events[event].push(eventData);\n attachEvent(node, event, listener, useCapture);\n}\n\n/**\n * Removes an event-handler from a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace to remove\n * @param {Function} listener: (optional) event handler\n */\nexport function removeEventListener(node, eventns, listener) {\n const [event, namespace] = splitEventName(eventns);\n // gets the events associated to a DOM node\n const data = NODES.find(d => d.node === node);\n if (!data) return;\n const events = event ? [event] : Object.keys(data.events);\n const removeHandlers = function remove(eventData) {\n const eventType = this.toString();\n if ((!listener && !eventns) ||\n match(event, eventType, namespace, eventData.namespace, listener) ||\n (eventData.handler === listener &&\n (!eventns || match(event, eventType, namespace, eventData.namespace))\n )) return !!detachEvent(node, eventType, eventData.handler, eventData.useCapture);\n return true;\n };\n events.forEach((type) => {\n // removes event-handlers by type, namespace or listener\n data.events[type] = (data.events[type] || []).filter(removeHandlers, type);\n });\n}\n\n/**\n * Gets the `eventData` objects matching the criteria\n *\n * @private\n * @param {Object} eventData: the event data associated to the event registered\n */\nfunction getHandlers(eventData) {\n const {eventName, eventType, namespace, listeners} = this;\n if (match(eventName, eventType, namespace, eventData.namespace)) {\n listeners[eventType] = listeners[eventType] || [];\n listeners[eventType].push(eventData);\n }\n}\n\n// TODO: create a method to get events from jQuery\n\n/**\n * Gets all event-handlers from a DOM element.\n * Events with namespace are allowed.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: (optional) name of the event/namespace\n * @return {Object}\n */\nexport function getEventListeners(node, eventns) {\n const [event, namespace] = splitEventName(eventns);\n // gets the events associated to a DOM node\n const data = NODES.find(d => d.node === node);\n const context = {\n namespace,\n eventName: event,\n listeners: {},\n };\n if (!data) return context.listeners;\n if (!eventns) return data.events; // Object with all event types\n const events = event ? [event] : Object.keys(data.events);\n events.forEach((eventType) => {\n context.eventType = eventType;\n (data.events[eventType] || []).forEach(getHandlers, context);\n });\n return context.listeners;\n}\n\n/**\n * Attaches a listener to a DOM `Element` but delegates the event-listener\n * to the DOM Elements beneath that matches with the `selector` provided.\n *\n * @param {Element} node: DOM element\n * @param {String} eventns: name of the event/namespace to register\n * @param {String} selector: CSS selector for those elements that will propagate the event\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nexport function delegate(node, eventns, selector, listener, useCapture) {\n addEventListener(node, eventns, (e) => {\n if (e.target.matches(selector)) {\n listener(e);\n }\n }, useCapture);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/events.js","import './prototypes';\nimport handleEvents from './facade';\nimport * as evt from './events';\n\nexport default {\n handleEvents,\n addEventListener: evt.addEventListener,\n removeEventListener: evt.removeEventListener,\n getEventListeners: evt.getEventListeners,\n delegate: evt.delegate,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","/**\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\n\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n const proto = Element.prototype;\n\n proto.matches =\n proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/prototypes.js","import {addEventListener, removeEventListener} from './events';\n\n/**\n * Factory function that implements a fluent interface\n * to handle events by allowing method chaining.\n *\n * @param {Element} node: DOM element\n * @return {Object}\n */\nexport default function handleEvents(node) {\n const fluent = Object.create(null);\n fluent.off = (eventns, listener) => {\n removeEventListener(node, eventns, listener);\n return fluent;\n };\n fluent.on = (eventns, listener, useCapture = false) => {\n addEventListener(node, eventns, listener, useCapture);\n return fluent;\n };\n return fluent;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/facade.js","/**\n * Attaches an event-handler to a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nexport function attachEvent(node, eventName, listener, useCapture = false) {\n if (node.addEventListener) {\n node.addEventListener(eventName, listener, !!useCapture);\n } else {\n node.attachEvent(`on${eventName}`, listener);\n }\n}\n\n/**\n * Removes an event-handler from a DOM element.\n *\n * @param {Element} node: DOM element\n * @param {String} eventName: name of the event to register\n * @param {Function} listener: event handler\n * @param {Boolean} useCapture: event capture\n */\nexport function detachEvent(node, eventName, listener, useCapture = false) {\n if (node.removeEventListener) {\n node.removeEventListener(eventName, listener, !!useCapture);\n } else {\n node.detachEvent(`on${eventName}`, listener);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/adapter.js","/**\n * Split the event name and the namespace\n *\n * @param {String} eventns: name of the event/namespace\n * @return {Array}\n */\nexport function splitEventName(eventns) {\n const i = (eventns || '').indexOf('.'),\n event = i > -1 ? eventns.substr(0, i) : eventns,\n namespace = i > -1 ? eventns.substr(i + 1) : undefined;\n return [event, namespace];\n}\n\n/**\n * Rules to match event handlers\n *\n * @param {String} eventName: event name passed to the invoker function\n * @param {String} eventType: event type in the `data.events` object\n * @param {String} namespace: namespace passed to the invoker function\n * @param {String} eventNamespace: namespace associated to the handler in `eventData` object\n * @param {Function} handler: envent listener passed to the invoker function\n * @return {Boolean}\n */\nexport function match(eventName, eventType, namespace, eventNamespace, handler) {\n return !handler && (\n (eventName === eventType && !namespace) ||\n (namespace === eventNamespace && !eventName) ||\n (namespace === eventNamespace && eventName === eventType)\n );\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index a182a10..a5a6607 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "handle-events", - "version": "1.0.0a", + "version": "1.1.0", "description": "Manages events listeners in the browser", "author": "David Rivera ", "main": "dist/handle-events.js", @@ -12,7 +12,7 @@ "emitter", "browser", "listener", - "handler", + "delegation", "javascript" ], "repository": { diff --git a/src/adapter.js b/src/adapter.js index 72ead0f..f120ff8 100644 --- a/src/adapter.js +++ b/src/adapter.js @@ -4,11 +4,11 @@ * @param {Element} node: DOM element * @param {String} eventName: name of the event to register * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ export function attachEvent(node, eventName, listener, useCapture = false) { if (node.addEventListener) { - node.addEventListener(eventName, listener, useCapture); + node.addEventListener(eventName, listener, !!useCapture); } else { node.attachEvent(`on${eventName}`, listener); } @@ -20,11 +20,11 @@ export function attachEvent(node, eventName, listener, useCapture = false) { * @param {Element} node: DOM element * @param {String} eventName: name of the event to register * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ export function detachEvent(node, eventName, listener, useCapture = false) { if (node.removeEventListener) { - node.removeEventListener(eventName, listener, useCapture); + node.removeEventListener(eventName, listener, !!useCapture); } else { node.detachEvent(`on${eventName}`, listener); } diff --git a/src/events.js b/src/events.js index 1fbe712..bae728c 100644 --- a/src/events.js +++ b/src/events.js @@ -13,7 +13,7 @@ const NODES = []; * @param {Element} node: DOM element * @param {String} eventns: name of the event/namespace to register * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ export function addEventListener(node, eventns, listener, useCapture = false) { const [event, namespace] = splitEventName(eventns); @@ -41,7 +41,6 @@ export function addEventListener(node, eventns, listener, useCapture = false) { * Removes an event-handler from a DOM element. * Events with namespace are allowed. * - * @private * @param {Element} node: DOM element * @param {String} eventns: (optional) name of the event/namespace to remove * @param {Function} listener: (optional) event handler @@ -111,13 +110,16 @@ export function getEventListeners(node, eventns) { } /** + * Attaches a listener to a DOM `Element` but delegates the event-listener + * to the DOM Elements beneath that matches with the `selector` provided. + * * @param {Element} node: DOM element - * @param {String} selector: CSS Selector for the event * @param {String} eventns: name of the event/namespace to register + * @param {String} selector: CSS selector for those elements that will propagate the event * @param {Function} listener: event handler - * @param {Boolean} useCapture: Event Capture + * @param {Boolean} useCapture: event capture */ -export function delegate(node, selector, eventns, listener, useCapture) { +export function delegate(node, eventns, selector, listener, useCapture) { addEventListener(node, eventns, (e) => { if (e.target.matches(selector)) { listener(e); diff --git a/src/facade.js b/src/facade.js index f8244f9..21b0c38 100644 --- a/src/facade.js +++ b/src/facade.js @@ -13,8 +13,8 @@ export default function handleEvents(node) { removeEventListener(node, eventns, listener); return fluent; }; - fluent.on = (eventns, listener) => { - addEventListener(node, eventns, listener); + fluent.on = (eventns, listener, useCapture = false) => { + addEventListener(node, eventns, listener, useCapture); return fluent; }; return fluent; diff --git a/src/prototypes.js b/src/prototypes.js index c9c02fc..75d4506 100644 --- a/src/prototypes.js +++ b/src/prototypes.js @@ -1,7 +1,12 @@ +/** + * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches + */ + if (typeof Element !== 'undefined' && !Element.prototype.matches) { const proto = Element.prototype; - proto.matches = proto.matchesSelector || + proto.matches = + proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || diff --git a/yarn.lock b/yarn.lock index 8d0606d..d160686 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,10 +26,14 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.0.1: +acorn@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" +acorn@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" + ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" @@ -192,29 +196,37 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.24.1, babel-core@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.25.0" + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.25.0, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" babel-helpers "^6.24.1" babel-messages "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.25.0" - babel-traverse "^6.25.0" - babel-types "^6.25.0" - babylon "^6.17.2" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" slash "^1.0.0" - source-map "^0.5.0" + source-map "^0.5.6" babel-eslint@^7.2.3: version "7.2.3" @@ -225,17 +237,17 @@ babel-eslint@^7.2.3: babel-types "^6.23.0" babylon "^6.17.0" -babel-generator@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" +babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.25.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" detect-indent "^4.0.0" jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" + lodash "^4.17.4" + source-map "^0.5.6" trim-right "^1.0.1" babel-helper-bindify-decorators@^6.24.1: @@ -357,8 +369,8 @@ babel-helpers@^6.24.1: babel-template "^6.24.1" babel-loader@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.1.tgz#b87134c8b12e3e4c2a94e0546085bc680a2b8488" + version "7.1.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -691,17 +703,17 @@ babel-preset-stage-3@^6.24.1: babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: - babel-core "^6.24.1" - babel-runtime "^6.22.0" - core-js "^2.4.0" + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" home-or-tmp "^2.0.0" - lodash "^4.2.0" + lodash "^4.17.4" mkdirp "^0.5.1" - source-map-support "^0.4.2" + source-map-support "^0.4.15" babel-runtime@^6.18.0, babel-runtime@^6.22.0: version "6.23.0" @@ -710,7 +722,14 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.24.1, babel-template@^6.25.0: +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" dependencies: @@ -720,6 +739,16 @@ babel-template@^6.24.1, babel-template@^6.25.0: babylon "^6.17.2" lodash "^4.2.0" +babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" @@ -734,6 +763,20 @@ babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: invariant "^2.2.0" lodash "^4.2.0" +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" @@ -743,10 +786,23 @@ babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25 lodash "^4.2.0" to-fast-properties "^1.0.1" +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + babylon@^6.17.0, babylon@^6.17.2: version "6.17.4" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -889,9 +945,9 @@ camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" caseless@~0.12.0: version "0.12.0" @@ -922,6 +978,14 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +chalk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -949,10 +1013,10 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" clean-webpack-plugin@^0.1.16: - version "0.1.16" - resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.16.tgz#422a8e150bf3d5abfd3d14bfacb070e80fb2e23f" + version "0.1.17" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.17.tgz#71c57242e6d47204d46f809413176e7bed28ec49" dependencies: - rimraf "~2.5.1" + rimraf "^2.6.1" cli-cursor@^2.1.0: version "2.1.0" @@ -1038,7 +1102,7 @@ contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" -convert-source-map@^1.1.0: +convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1046,6 +1110,10 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1077,7 +1145,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^5.1.0: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -1122,12 +1190,18 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: +debug@^2.2.0, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" +debug@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1221,14 +1295,14 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" -enhanced-resolve@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz#950964ecc7f0332a42321b673b38dc8ff15535b3" +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" object-assign "^4.0.1" - tapable "^0.2.5" + tapable "^0.2.7" errno@^0.1.3: version "0.1.4" @@ -1308,8 +1382,10 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-airbnb-base@^11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.2.0.tgz#19a9dc4481a26f70904545ec040116876018f853" + version "11.3.2" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" + dependencies: + eslint-restricted-globals "^0.1.1" eslint-import-resolver-node@^0.3.1: version "0.3.1" @@ -1350,6 +1426,10 @@ eslint-plugin-import@^2.5.0: minimatch "^3.0.3" read-pkg-up "^2.0.0" +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + eslint-scope@^3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" @@ -1358,18 +1438,18 @@ eslint-scope@^3.7.1: estraverse "^4.1.1" eslint@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.3.0.tgz#fcd7c96376bbf34c85ee67ed0012a299642b108f" + version "4.9.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.9.0.tgz#76879d274068261b191fe0f2f56c74c2f4208e8b" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" - chalk "^1.1.3" + chalk "^2.1.0" concat-stream "^1.6.0" cross-spawn "^5.1.0" - debug "^2.6.8" + debug "^3.0.1" doctrine "^2.0.0" eslint-scope "^3.7.1" - espree "^3.4.3" + espree "^3.5.1" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" @@ -1381,7 +1461,7 @@ eslint@^4.3.0: imurmurhash "^0.1.4" inquirer "^3.0.6" is-resolvable "^1.0.0" - js-yaml "^3.8.4" + js-yaml "^3.9.1" json-stable-stringify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" @@ -1390,19 +1470,20 @@ eslint@^4.3.0: natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" - pluralize "^4.0.0" + pluralize "^7.0.0" progress "^2.0.0" require-uncached "^1.0.3" semver "^5.3.0" + strip-ansi "^4.0.0" strip-json-comments "~2.0.1" table "^4.0.1" text-table "~0.2.0" -espree@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" +espree@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" dependencies: - acorn "^5.0.1" + acorn "^5.1.1" acorn-jsx "^3.0.0" esprima@^4.0.0: @@ -1447,6 +1528,18 @@ evp_bytestokey@^1.0.0: dependencies: create-hash "^1.1.1" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -1629,6 +1722,10 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1659,7 +1756,7 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.0.0, globals@^9.17.0: +globals@^9.0.0, globals@^9.17.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -1695,10 +1792,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -1832,7 +1925,7 @@ interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -invariant@^2.2.0: +invariant@^2.2.0, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -1948,14 +2041,14 @@ is-resolvable@^1.0.0: dependencies: tryit "^1.0.1" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1974,13 +2067,13 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -js-tokens@^3.0.0: +js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.8.4: - version "3.9.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce" +js-yaml@^3.9.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -2069,16 +2162,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -2145,6 +2228,12 @@ make-dir@^1.0.0: dependencies: pify "^2.3.0" +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -2299,6 +2388,12 @@ normalize-path@^2.0.1: dependencies: remove-trailing-separator "^1.0.1" +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -2362,11 +2457,13 @@ os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" dependencies: + execa "^0.7.0" lcid "^1.0.0" + mem "^1.1.0" os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: version "1.0.2" @@ -2379,6 +2476,10 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -2432,7 +2533,7 @@ path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2440,18 +2541,14 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -2498,9 +2595,9 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pluralize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" prelude-ls@~1.1.2: version "1.1.2" @@ -2514,6 +2611,10 @@ private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -2586,13 +2687,6 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -2600,14 +2694,6 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -2645,6 +2731,10 @@ regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + regenerator-transform@0.9.11: version "0.9.11" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" @@ -2767,12 +2857,6 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: dependencies: glob "^7.0.5" -rimraf@~2.5.1: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" - dependencies: - glob "^7.0.5" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" @@ -2854,13 +2938,13 @@ source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" -source-map-support@^0.4.2: - version "0.4.15" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -2954,16 +3038,14 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -2972,18 +3054,18 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - supports-color@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.0.tgz#ad986dc7eb2315d009b4d77c8169c2231a684037" dependencies: has-flag "^2.0.0" +supports-color@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + table@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" @@ -2995,9 +3077,9 @@ table@^4.0.1: slice-ansi "0.0.4" string-width "^2.0.0" -tapable@^0.2.5, tapable@~0.2.5: - version "0.2.6" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" +tapable@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" tar-pack@^3.4.0: version "3.4.0" @@ -3044,7 +3126,7 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" -to-fast-properties@^1.0.1: +to-fast-properties@^1.0.1, to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -3167,15 +3249,15 @@ webpack-sources@^1.0.1: source-map "~0.5.3" webpack@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.3.0.tgz#ce2f9e076566aba91f74887133a883fd7da187bc" + version "3.7.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.7.1.tgz#6046b5c415ff7df7a0dc54c5b6b86098e8b952da" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" ajv "^5.1.5" ajv-keywords "^2.0.0" async "^2.1.2" - enhanced-resolve "^3.3.0" + enhanced-resolve "^3.4.0" escope "^3.6.0" interpret "^1.0.0" json-loader "^0.5.4" @@ -3186,16 +3268,16 @@ webpack@^3.3.0: mkdirp "~0.5.0" node-libs-browser "^2.0.0" source-map "^0.5.3" - supports-color "^3.1.0" - tapable "~0.2.5" + supports-color "^4.2.1" + tapable "^0.2.7" uglifyjs-webpack-plugin "^0.4.6" watchpack "^1.4.0" webpack-sources "^1.0.1" - yargs "^6.0.0" + yargs "^8.0.2" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" which@^1.2.9: version "1.2.14" @@ -3250,29 +3332,29 @@ yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" dependencies: - camelcase "^3.0.0" + camelcase "^4.1.0" -yargs@^6.0.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" dependencies: - camelcase "^3.0.0" + camelcase "^4.1.0" cliui "^3.2.0" decamelize "^1.1.1" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^4.2.0" + yargs-parser "^7.0.0" yargs@~3.10.0: version "3.10.0"