From e8dfc22e6c5cfd78ca4a69eaf1c698690fc11721 Mon Sep 17 00:00:00 2001 From: I Kuleshova Date: Sat, 5 Nov 2016 16:22:34 +0500 Subject: [PATCH 1/6] Update emitter.js --- emitter.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/emitter.js b/emitter.js index c17c92f..0568156 100644 --- a/emitter.js +++ b/emitter.js @@ -4,15 +4,27 @@ * Сделано задание на звездочку * Реализованы методы several и through */ -getEmitter.isStar = true; +getEmitter.isStar = false; module.exports = getEmitter; + +function getAllEvents(event) { + var splitted = event.split('.'); + var events = [splitted[0]]; + for (var i = 1; i < splitted.length; i++) { + events.push([events[i-1], splitted[i]].join('.')); + } + + return events; +} + /** * Возвращает новый emitter * @returns {Object} */ function getEmitter() { return { + _events: [], /** * Подписаться на событие @@ -21,7 +33,15 @@ function getEmitter() { * @param {Function} handler */ on: function (event, context, handler) { - console.info(event, context, handler); + if (!this._events.hasOwnProperty(event)) { + this._events[event] = []; + } + this._events[event].push({ + context: context, + handler: handler.bind(context) + }); + + return this; }, /** @@ -30,7 +50,22 @@ function getEmitter() { * @param {Object} context */ off: function (event, context) { - console.info(event, context); + var eventsToOff = Object.keys(this._events).filter( + function (key) { + return key === event || + (key.length > event.length && + key.substr(0, event.length + 1) === event + '.') + } + ); + for (var i = 0; i < eventsToOff.length; i++) { + this._events[eventsToOff[i]] = this._events[eventsToOff[i]].filter( + function (item) { + return item.context !== context; + } + ) + } + + return this; }, /** @@ -38,7 +73,19 @@ function getEmitter() { * @param {String} event */ emit: function (event) { - console.info(event); + var events = getAllEvents(event).reverse(); + for (var i = 0; i < events.length; i++) { + var currEvent = events[i]; + if (!this._events[currEvent]) { + continue; + } + this._events[currEvent].forEach(function (item) { + item.handler(); + console.log(item.context); + }); + } + + return this; }, /** From 5ee0ab5e0504a2ed7a36c618b03b744583eee4f3 Mon Sep 17 00:00:00 2001 From: I Kuleshova Date: Sat, 5 Nov 2016 16:23:42 +0500 Subject: [PATCH 2/6] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 1 - 1 file changed, 1 deletion(-) diff --git a/emitter.js b/emitter.js index 0568156..1f56035 100644 --- a/emitter.js +++ b/emitter.js @@ -81,7 +81,6 @@ function getEmitter() { } this._events[currEvent].forEach(function (item) { item.handler(); - console.log(item.context); }); } From d013f92a6ca5a32fe8fb3a9f99ff4c204f692614 Mon Sep 17 00:00:00 2001 From: I Kuleshova Date: Sat, 5 Nov 2016 16:26:58 +0500 Subject: [PATCH 3/6] =?UTF-8?q?=D0=BB=D0=B8=D0=BD=D1=82=D0=B8=D0=BD=D0=B3.?= =?UTF-8?q?..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/emitter.js b/emitter.js index 1f56035..e1e21b7 100644 --- a/emitter.js +++ b/emitter.js @@ -12,7 +12,7 @@ function getAllEvents(event) { var splitted = event.split('.'); var events = [splitted[0]]; for (var i = 1; i < splitted.length; i++) { - events.push([events[i-1], splitted[i]].join('.')); + events.push([events[i - 1], splitted[i]].join('.')); } return events; @@ -31,6 +31,7 @@ function getEmitter() { * @param {String} event * @param {Object} context * @param {Function} handler + * @returns {Object} */ on: function (event, context, handler) { if (!this._events.hasOwnProperty(event)) { @@ -48,13 +49,14 @@ function getEmitter() { * Отписаться от события * @param {String} event * @param {Object} context + * @returns {Object} */ off: function (event, context) { var eventsToOff = Object.keys(this._events).filter( function (key) { return key === event || (key.length > event.length && - key.substr(0, event.length + 1) === event + '.') + key.substr(0, event.length + 1) === event + '.'); } ); for (var i = 0; i < eventsToOff.length; i++) { @@ -62,7 +64,7 @@ function getEmitter() { function (item) { return item.context !== context; } - ) + ); } return this; @@ -71,6 +73,7 @@ function getEmitter() { /** * Уведомить о событии * @param {String} event + * @returns {Object} */ emit: function (event) { var events = getAllEvents(event).reverse(); From c122b84a3731ac4a1571fa35a91588056c32ea47 Mon Sep 17 00:00:00 2001 From: I Kuleshova Date: Thu, 10 Nov 2016 14:05:09 +0500 Subject: [PATCH 4/6] Update emitter.js --- emitter.js | 55 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/emitter.js b/emitter.js index e1e21b7..4f90bf3 100644 --- a/emitter.js +++ b/emitter.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализованы методы several и through */ -getEmitter.isStar = false; +getEmitter.isStar = true; module.exports = getEmitter; @@ -18,6 +18,20 @@ function getAllEvents(event) { return events; } + +function initEvent() { + var args = [].slice.call(arguments, 0); + + return { + context: args[0], + handler: args[1], + count: args[2], + countExecuted: args[3], + delta: args[4] + }; +} + + /** * Возвращает новый emitter * @returns {Object} @@ -37,10 +51,8 @@ function getEmitter() { if (!this._events.hasOwnProperty(event)) { this._events[event] = []; } - this._events[event].push({ - context: context, - handler: handler.bind(context) - }); + this._events[event].push( + initEvent(context, handler.bind(context), -1, 1)); return this; }, @@ -78,12 +90,19 @@ function getEmitter() { emit: function (event) { var events = getAllEvents(event).reverse(); for (var i = 0; i < events.length; i++) { - var currEvent = events[i]; - if (!this._events[currEvent]) { + var currentEvent = events[i]; + if (!this._events[currentEvent]) { continue; } - this._events[currEvent].forEach(function (item) { - item.handler(); + this._events[currentEvent].forEach(function (item) { + if (item.count === 0) { + return; + } + if (item.countExecuted % item.delta === 0) { + item.handler(); + } + item.countExecuted++; + item.count--; }); } @@ -97,9 +116,16 @@ function getEmitter() { * @param {Object} context * @param {Function} handler * @param {Number} times – сколько раз получить уведомление + * @returns {Object} */ several: function (event, context, handler, times) { - console.info(event, context, handler, times); + if (!this._events.hasOwnProperty(event)) { + this._events[event] = []; + } + this._events[event].push( + initEvent(context, handler.bind(context), times, 1, 1)); + + return this; }, /** @@ -109,9 +135,16 @@ function getEmitter() { * @param {Object} context * @param {Function} handler * @param {Number} frequency – как часто уведомлять + * @returns {Object} */ through: function (event, context, handler, frequency) { - console.info(event, context, handler, frequency); + if (!this._events.hasOwnProperty(event)) { + this._events[event] = []; + } + this._events[event].push( + initEvent(context, handler.bind(context), -1, 1, frequency)); + + return this; } }; } From 85a477bafc186e9baafa4cd03d16a989dd80aeb6 Mon Sep 17 00:00:00 2001 From: I Kuleshova Date: Thu, 10 Nov 2016 14:11:58 +0500 Subject: [PATCH 5/6] Update emitter.js --- emitter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emitter.js b/emitter.js index 4f90bf3..5bd717e 100644 --- a/emitter.js +++ b/emitter.js @@ -52,7 +52,7 @@ function getEmitter() { this._events[event] = []; } this._events[event].push( - initEvent(context, handler.bind(context), -1, 1)); + initEvent(context, handler.bind(context), -1, 1, 1)); return this; }, From aa530b92f7f949c90046d602b0f0d78c9af35f21 Mon Sep 17 00:00:00 2001 From: I Kuleshova Date: Thu, 10 Nov 2016 14:50:48 +0500 Subject: [PATCH 6/6] =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D1=8B=D0=B4=D1=83?= =?UTF-8?q?=D1=89=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 55 +++++++++++------------------------------------------- 1 file changed, 11 insertions(+), 44 deletions(-) diff --git a/emitter.js b/emitter.js index 5bd717e..e1e21b7 100644 --- a/emitter.js +++ b/emitter.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализованы методы several и through */ -getEmitter.isStar = true; +getEmitter.isStar = false; module.exports = getEmitter; @@ -18,20 +18,6 @@ function getAllEvents(event) { return events; } - -function initEvent() { - var args = [].slice.call(arguments, 0); - - return { - context: args[0], - handler: args[1], - count: args[2], - countExecuted: args[3], - delta: args[4] - }; -} - - /** * Возвращает новый emitter * @returns {Object} @@ -51,8 +37,10 @@ function getEmitter() { if (!this._events.hasOwnProperty(event)) { this._events[event] = []; } - this._events[event].push( - initEvent(context, handler.bind(context), -1, 1, 1)); + this._events[event].push({ + context: context, + handler: handler.bind(context) + }); return this; }, @@ -90,19 +78,12 @@ function getEmitter() { emit: function (event) { var events = getAllEvents(event).reverse(); for (var i = 0; i < events.length; i++) { - var currentEvent = events[i]; - if (!this._events[currentEvent]) { + var currEvent = events[i]; + if (!this._events[currEvent]) { continue; } - this._events[currentEvent].forEach(function (item) { - if (item.count === 0) { - return; - } - if (item.countExecuted % item.delta === 0) { - item.handler(); - } - item.countExecuted++; - item.count--; + this._events[currEvent].forEach(function (item) { + item.handler(); }); } @@ -116,16 +97,9 @@ function getEmitter() { * @param {Object} context * @param {Function} handler * @param {Number} times – сколько раз получить уведомление - * @returns {Object} */ several: function (event, context, handler, times) { - if (!this._events.hasOwnProperty(event)) { - this._events[event] = []; - } - this._events[event].push( - initEvent(context, handler.bind(context), times, 1, 1)); - - return this; + console.info(event, context, handler, times); }, /** @@ -135,16 +109,9 @@ function getEmitter() { * @param {Object} context * @param {Function} handler * @param {Number} frequency – как часто уведомлять - * @returns {Object} */ through: function (event, context, handler, frequency) { - if (!this._events.hasOwnProperty(event)) { - this._events[event] = []; - } - this._events[event].push( - initEvent(context, handler.bind(context), -1, 1, frequency)); - - return this; + console.info(event, context, handler, frequency); } }; }