Show More
Commit Description:
add model solution
Commit Description:
add model solution
References:
File last commit:
Show/Diff file:
Action:
node_modules/event-emitter/unify.js
| 50 lines
| 1.3 KiB
| application/javascript
| JavascriptLexer
|
r789 | 'use strict'; | |||
var forEach = require('es5-ext/object/for-each') | ||||
, validValue = require('es5-ext/object/valid-object') | ||||
, push = Array.prototype.apply, defineProperty = Object.defineProperty | ||||
, create = Object.create, hasOwnProperty = Object.prototype.hasOwnProperty | ||||
, d = { configurable: true, enumerable: false, writable: true }; | ||||
module.exports = function (e1, e2) { | ||||
var data; | ||||
(validValue(e1) && validValue(e2)); | ||||
if (!hasOwnProperty.call(e1, '__ee__')) { | ||||
if (!hasOwnProperty.call(e2, '__ee__')) { | ||||
d.value = create(null); | ||||
defineProperty(e1, '__ee__', d); | ||||
defineProperty(e2, '__ee__', d); | ||||
d.value = null; | ||||
return; | ||||
} | ||||
d.value = e2.__ee__; | ||||
defineProperty(e1, '__ee__', d); | ||||
d.value = null; | ||||
return; | ||||
} | ||||
data = d.value = e1.__ee__; | ||||
if (!hasOwnProperty.call(e2, '__ee__')) { | ||||
defineProperty(e2, '__ee__', d); | ||||
d.value = null; | ||||
return; | ||||
} | ||||
if (data === e2.__ee__) return; | ||||
forEach(e2.__ee__, function (listener, name) { | ||||
if (!data[name]) { | ||||
data[name] = listener; | ||||
return; | ||||
} | ||||
if (typeof data[name] === 'object') { | ||||
if (typeof listener === 'object') push.apply(data[name], listener); | ||||
else data[name].push(listener); | ||||
} else if (typeof listener === 'object') { | ||||
listener.unshift(data[name]); | ||||
data[name] = listener; | ||||
} else { | ||||
data[name] = [data[name], listener]; | ||||
} | ||||
}); | ||||
defineProperty(e2, '__ee__', d); | ||||
d.value = null; | ||||
}; | ||||