Skip to content

Instantly share code, notes, and snippets.

@nelix
Created February 3, 2015 12:31
Show Gist options
  • Save nelix/349d07d349cde7203a05 to your computer and use it in GitHub Desktop.
Save nelix/349d07d349cde7203a05 to your computer and use it in GitHub Desktop.
var EventListener = require('react/lib/EventListener');
var SyntheticMouseEvent = require('react/lib/SyntheticMouseEvent');
var documentListener;
var handlers = [];
const mouseEvent = 'mousemove';
function handle(nativeEvent) {
var event = SyntheticMouseEvent.getPooled({}, mouseEvent, nativeEvent);
try {
dispatchEvent(event, handlers);
} finally {
if (!event.isPersistent()) {
event.constructor.release(event);
}
}
}
function dispatchEvent(event, handlers) {
for (var i = (handlers.length - 1); i >= 0; i--) {
if (event.isPropagationStopped()) {
break;
}
var returnValue = handlers[i](event);
if (returnValue === false) {
event.stopPropagation();
event.preventDefault();
}
}
}
module.exports = {
enable() {
if (!documentListener) {
documentListener = EventListener.listen(document, mouseEvent, handle);
}
return module.exports;
},
disable() {
if (documentListener) {
documentListener.remove();
documentListener = null;
}
},
on(cb) {
handlers.push(cb);
},
off(cb) {
var index = handlers.indexOf(cb);
handlers.splice(index, 1);
},
clear() {
handlers = [];
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment