From f33d6816bff06d1586b8bf441f007c8131155923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= Date: Thu, 10 Nov 2016 01:27:58 +0500 Subject: [PATCH 1/5] =?UTF-8?q?=D0=9A=D0=B2=D0=B0=D1=88=D0=BD=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/emitter.js b/emitter.js index c17c92f..b51d321 100644 --- a/emitter.js +++ b/emitter.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализованы методы several и through */ -getEmitter.isStar = true; +getEmitter.isStar = false; module.exports = getEmitter; /** @@ -12,6 +12,8 @@ module.exports = getEmitter; * @returns {Object} */ function getEmitter() { + var students = []; + return { /** @@ -19,26 +21,64 @@ function getEmitter() { * @param {String} event * @param {Object} context * @param {Function} handler + * @returns {Object} */ on: function (event, context, handler) { - console.info(event, context, handler); + students.push({ event: event, + context: context, + handler: handler } + ); + + return this; }, /** * Отписаться от события * @param {String} event * @param {Object} context + * @returns {Object} */ off: function (event, context) { - console.info(event, context); + if (typeof (event) === 'string' && typeof (context) === 'object') { + students = students.filter(function (subscriber) { + + return subscriber.context !== context || subscriber.event !== event && + event.indexOf(event + '.') !== 0; + }); + } + + return this; }, /** * Уведомить о событии * @param {String} event + * @returns {Object} */ emit: function (event) { - console.info(event); + var emitEvent = []; + var splitEvent = event.split('.'); + var flag = 1; + + for (var i = 0; i < splitEvent.length; i++) { + var event_ = splitEvent[0]; + for (var j = 1; j < flag; j++) { + event_ += '.' + splitEvent[j]; + } + flag++; + emitEvent.push(event_); + } + emitEvent.reverse(); + + emitEvent.forEach(function (eventt) { + students.forEach(function (subscriber) { + if (subscriber.event === eventt) { + subscriber.handler.call(subscriber.context); + } + }); + }); + + return this; }, /** From e820e3c6b9ba2474057eeedfa1a2dba3574793a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= Date: Thu, 10 Nov 2016 01:38:23 +0500 Subject: [PATCH 2/5] =?UTF-8?q?=D0=9A=D0=B2=D0=B0=D1=88=D0=BD=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emitter.js b/emitter.js index b51d321..8678709 100644 --- a/emitter.js +++ b/emitter.js @@ -43,7 +43,7 @@ function getEmitter() { students = students.filter(function (subscriber) { return subscriber.context !== context || subscriber.event !== event && - event.indexOf(event + '.') !== 0; + !(event.indexOf(event + '.') === 0); }); } From b8a2cf9d0d79b5660b9567a0b528cf4066e46f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= Date: Thu, 10 Nov 2016 01:54:48 +0500 Subject: [PATCH 3/5] =?UTF-8?q?=D0=9A=D0=B2=D0=B0=D1=88=D0=BD=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/emitter.js b/emitter.js index 8678709..1597fb3 100644 --- a/emitter.js +++ b/emitter.js @@ -39,13 +39,11 @@ function getEmitter() { * @returns {Object} */ off: function (event, context) { - if (typeof (event) === 'string' && typeof (context) === 'object') { - students = students.filter(function (subscriber) { + students = students.filter(function (subscriber) { - return subscriber.context !== context || subscriber.event !== event && - !(event.indexOf(event + '.') === 0); - }); - } + return (subscriber.context !== context) || (subscriber.event !== event) && + !(event.indexOf(event + '.') === 0); + }); return this; }, From 02bea60a94e47c935302c2879a02f86ede3a5947 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= Date: Thu, 10 Nov 2016 02:08:07 +0500 Subject: [PATCH 4/5] =?UTF-8?q?=D0=9A=D0=B2=D0=B0=D1=88=D0=BD=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/emitter.js b/emitter.js index 1597fb3..82fe813 100644 --- a/emitter.js +++ b/emitter.js @@ -39,11 +39,21 @@ function getEmitter() { * @returns {Object} */ off: function (event, context) { - students = students.filter(function (subscriber) { + if (typeof (event) === 'string' && typeof (context) === 'object') { + students = students.filter(function (subscriber) { - return (subscriber.context !== context) || (subscriber.event !== event) && - !(event.indexOf(event + '.') === 0); - }); + if ((subscriber.context !== context) || (subscriber.event !== event)) { + + return true; + } + if (event.indexOf(event + '.') === 0) { + + return false; + } + + return false; + }); + } return this; }, From 38ff56b2c663901f2aea2c62a43e8e9e270bfa1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= Date: Thu, 10 Nov 2016 02:13:02 +0500 Subject: [PATCH 5/5] =?UTF-8?q?=D0=9A=D0=B2=D0=B0=D1=88=D0=BD=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=A3=D0=BB=D1=8C=D1=8F=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emitter.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/emitter.js b/emitter.js index 82fe813..0643bdd 100644 --- a/emitter.js +++ b/emitter.js @@ -42,16 +42,8 @@ function getEmitter() { if (typeof (event) === 'string' && typeof (context) === 'object') { students = students.filter(function (subscriber) { - if ((subscriber.context !== context) || (subscriber.event !== event)) { - - return true; - } - if (event.indexOf(event + '.') === 0) { - - return false; - } - - return false; + return (subscriber.context !== context || subscriber.event !== event) && + !(subscriber.event.indexOf(event + '.') === 0); }); }