Skip to content

Commit

Permalink
Merge pull request #2 from AnakinYuen/feature/support-onevent
Browse files Browse the repository at this point in the history
Feature/support onevent
  • Loading branch information
AnakinYuen committed May 2, 2020
2 parents c06b44f + a9dffc6 commit 378f1c3
Show file tree
Hide file tree
Showing 7 changed files with 151 additions and 67 deletions.
13 changes: 6 additions & 7 deletions README.md
@@ -1,11 +1,10 @@
# EventTarget
# InlineEventTarget

[![Build Status](https://travis-ci.com/ungap/event-target.svg?branch=master)](https://travis-ci.com/ungap/event-target) [![Coverage Status](https://coveralls.io/repos/github/ungap/event-target/badge.svg?branch=master)](https://coveralls.io/github/ungap/event-target?branch=master) [![Greenkeeper badge](https://badges.greenkeeper.io/ungap/event-target.svg)](https://greenkeeper.io/) ![WebReflection status](https://offline.report/status/webreflection.svg)
[![Build Status](https://travis-ci.com/AnakinYuen/event-target.svg?branch=master)](https://travis-ci.com/ungap/event-target) [![Coverage Status](https://coveralls.io/repos/github/AnakinYuen/inline-event-target/badge.svg?branch=master)](https://coveralls.io/github/AnakinYuen/inline-event-target?branch=master) ![WebReflection status](https://offline.report/status/webreflection.svg)

A [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) polyfill.
A [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) polyfill with `onevent` supported.

* CDN, as global patch, via https://unpkg.com/@ungap/event-target
* ESM via `import EventTarget from '@ungap/event-target'`
* CJS via `const EventTarget = require('@ungap/event-target')`
* ESM via `import EventTarget from '@anakinyuen/inline-event-target'`
* CJS via `const EventTarget = require('@anakinyuen/inline-event-target')`

[Live test](https://ungap.github.io/event-target/test/)
[Live test](https://anakinyuen.github.io/inline-event-target/test/index.html)
60 changes: 43 additions & 17 deletions cjs/index.js
Expand Up @@ -7,35 +7,61 @@ try {
var create = Object.create;
var defineProperty = Object.defineProperty;
var proto = EventTarget.prototype;
function getListenerObj(secret, type) {
if (!secret[type]) {
secret[type] = {
inline: null,
list: [],
};
}
return secret[type];
}
define(proto, 'addEventListener', function (type, listener, options) {
for (var
secret = wm.get(this),
listeners = secret[type] || (secret[type] = []),
i = 0, length = listeners.length; i < length; i++
) {
var secret = wm.get(this);
var listeners = getListenerObj(secret, type).list;
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === listener)
return;
}
listeners.push({target: this, listener: listener, options: options});
});
define(proto, '_on', function (type, listener) {
var secret = wm.get(this);
var listenerObj = getListenerObj(secret, type);
var listeners = listenerObj.list;
var lastInline = listenerObj.inline;
listenerObj.inline = listener;
if (listener == null) {
this.removeEventListener(type, lastInline);
return;
}
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === lastInline) {
listeners[i].listener = listener;
return;
}
}
listeners.push({target: this, listener: listener});
});
define(proto, 'dispatchEvent', function (event) {
var secret = wm.get(this);
var listeners = secret[event.type];
if (listeners) {
define(event, 'target', this);
define(event, 'currentTarget', this);
listeners.slice(0).forEach(dispatch, event);
delete event.currentTarget;
delete event.target;
var listenerObj = secret[event.type];
if (listenerObj) {
var listeners = listenerObj.list;
if (listeners) {
define(event, 'target', this);
define(event, 'currentTarget', this);
listeners.slice(0).forEach(dispatch, event);
delete event.currentTarget;
delete event.target;
}
}
return true;
});
define(proto, 'removeEventListener', function (type, listener) {
for (var
secret = wm.get(this),
listeners = secret[type] || (secret[type] = []),
i = 0, length = listeners.length; i < length; i++
) {
var secret = wm.get(this);
var listeners = getListenerObj(secret, type).list;
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === listener) {
listeners.splice(i, 1);
return;
Expand Down
60 changes: 43 additions & 17 deletions esm/index.js
Expand Up @@ -7,35 +7,61 @@ try {
var create = Object.create;
var defineProperty = Object.defineProperty;
var proto = EventTarget.prototype;
function getListenerObj(secret, type) {
if (!secret[type]) {
secret[type] = {
inline: null,
list: [],
};
}
return secret[type];
}
define(proto, 'addEventListener', function (type, listener, options) {
for (var
secret = wm.get(this),
listeners = secret[type] || (secret[type] = []),
i = 0, length = listeners.length; i < length; i++
) {
var secret = wm.get(this);
var listeners = getListenerObj(secret, type).list;
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === listener)
return;
}
listeners.push({target: this, listener: listener, options: options});
});
define(proto, '_on', function (type, listener) {
var secret = wm.get(this);
var listenerObj = getListenerObj(secret, type);
var listeners = listenerObj.list;
var lastInline = listenerObj.inline;
listenerObj.inline = listener;
if (listener == null) {
this.removeEventListener(type, lastInline);
return;
}
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === lastInline) {
listeners[i].listener = listener;
return;
}
}
listeners.push({target: this, listener: listener});
});
define(proto, 'dispatchEvent', function (event) {
var secret = wm.get(this);
var listeners = secret[event.type];
if (listeners) {
define(event, 'target', this);
define(event, 'currentTarget', this);
listeners.slice(0).forEach(dispatch, event);
delete event.currentTarget;
delete event.target;
var listenerObj = secret[event.type];
if (listenerObj) {
var listeners = listenerObj.list;
if (listeners) {
define(event, 'target', this);
define(event, 'currentTarget', this);
listeners.slice(0).forEach(dispatch, event);
delete event.currentTarget;
delete event.target;
}
}
return true;
});
define(proto, 'removeEventListener', function (type, listener) {
for (var
secret = wm.get(this),
listeners = secret[type] || (secret[type] = []),
i = 0, length = listeners.length; i < length; i++
) {
var secret = wm.get(this);
var listeners = getListenerObj(secret, type).list;
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === listener) {
listeners.splice(i, 1);
return;
Expand Down
60 changes: 43 additions & 17 deletions index.js
Expand Up @@ -7,35 +7,61 @@ try {
var create = Object.create;
var defineProperty = Object.defineProperty;
var proto = EventTarget.prototype;
function getListenerObj(secret, type) {
if (!secret[type]) {
secret[type] = {
inline: null,
list: [],
};
}
return secret[type];
}
define(proto, 'addEventListener', function (type, listener, options) {
for (var
secret = wm.get(this),
listeners = secret[type] || (secret[type] = []),
i = 0, length = listeners.length; i < length; i++
) {
var secret = wm.get(this);
var listeners = getListenerObj(secret, type).list;
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === listener)
return;
}
listeners.push({target: this, listener: listener, options: options});
});
define(proto, '_on', function (type, listener) {
var secret = wm.get(this);
var listenerObj = getListenerObj(secret, type);
var listeners = listenerObj.list;
var lastInline = listenerObj.inline;
listenerObj.inline = listener;
if (listener == null) {
this.removeEventListener(type, lastInline);
return;
}
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === lastInline) {
listeners[i].listener = listener;
return;
}
}
listeners.push({target: this, listener: listener});
});
define(proto, 'dispatchEvent', function (event) {
var secret = wm.get(this);
var listeners = secret[event.type];
if (listeners) {
define(event, 'target', this);
define(event, 'currentTarget', this);
listeners.slice(0).forEach(dispatch, event);
delete event.currentTarget;
delete event.target;
var listenerObj = secret[event.type];
if (listenerObj) {
var listeners = listenerObj.list;
if (listeners) {
define(event, 'target', this);
define(event, 'currentTarget', this);
listeners.slice(0).forEach(dispatch, event);
delete event.currentTarget;
delete event.target;
}
}
return true;
});
define(proto, 'removeEventListener', function (type, listener) {
for (var
secret = wm.get(this),
listeners = secret[type] || (secret[type] = []),
i = 0, length = listeners.length; i < length; i++
) {
var secret = wm.get(this);
var listeners = getListenerObj(secret, type).list;
for (var i = 0, length = listeners.length; i < length; i++) {
if (listeners[i].listener === listener) {
listeners.splice(i, 1);
return;
Expand Down
2 changes: 1 addition & 1 deletion min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 9 additions & 8 deletions package.json
@@ -1,7 +1,7 @@
{
"name": "@ungap/event-target",
"version": "0.1.0",
"description": "An EventTarget polyfill",
"name": "@anakinyuen/inline-event-target",
"version": "0.2.0",
"description": "An EventTarget polyfill with onevent supported",
"main": "cjs/index.js",
"module": "esm/index.js",
"unpkg": "min.js",
Expand All @@ -17,9 +17,10 @@
"keywords": [
"EventTarget",
"polyfill",
"ungap"
"ungap",
"onevent"
],
"author": "Andrea Giammarchi",
"author": "Anakin Yuen",
"license": "ISC",
"devDependencies": {
"coveralls": "^3.0.2",
Expand All @@ -28,10 +29,10 @@
},
"repository": {
"type": "git",
"url": "git+https://github.com/ungap/event-target.git"
"url": "git+https://github.com/AnakinYuen/inline-event-target.git"
},
"bugs": {
"url": "https://github.com/ungap/event-target/issues"
"url": "https://github.com/AnakinYuen/inline-event-target/issues"
},
"homepage": "https://github.com/ungap/event-target#readme"
"homepage": "https://github.com/AnakinYuen/inline-event-target#readme"
}
6 changes: 6 additions & 0 deletions test/index.js
Expand Up @@ -30,4 +30,10 @@ function test() {
});
eventTarget.addEventListener('foo', () => console.log(2));
eventTarget.dispatchEvent(new Event('foo'));
eventTarget._on('foo', () => console.log(3));
eventTarget.dispatchEvent(new Event('foo'));
eventTarget._on('foo', () => console.log(4));
eventTarget.dispatchEvent(new Event('foo'));
eventTarget._on('foo', null);
eventTarget.dispatchEvent(new Event('foo'));
}

0 comments on commit 378f1c3

Please sign in to comment.