UNPKG

click-outside

Version:
81 lines (61 loc) 1.77 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _map = require('babel-runtime/core-js/map'); var _map2 = _interopRequireDefault(_map); exports.default = clickOutside; var _componentEvent = require('component-event'); var _componentEvent2 = _interopRequireDefault(_componentEvent); var _nodeContains = require('node-contains'); var _nodeContains2 = _interopRequireDefault(_nodeContains); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Hash of elements and callback functions. */ /** * Module dependencies. */ var callbacks = new _map2.default(); /** * A "click outside" of a given DOM event implementation. * * Based off of this StackOverflow answer: * http://stackoverflow.com/a/14188699/376773 * * @param {Element} el - DOM element to watch for outside clicks * @param {Function} fn - callback function to invoke when user clicks outside of `el` * @return {Function} a function to stop watching for "click outside" events for `el` * @api public */ function clickOutside(el, fn) { callbacks.set(el, fn); return function unbind() { callbacks.delete(el); }; } clickOutside.globalClick = globalClick; clickOutside.install = install; /** * Global "click" event handler. * * @param {Event} e * @api private */ function globalClick(e) { callbacks.forEach(function (fn, el) { if (!(0, _nodeContains2.default)(el, e.target)) { // click outside fn.call(el, e); } }); } function install(doc) { if (!doc) doc = document; _componentEvent2.default.bind(doc, 'click', globalClick); } if ('undefined' !== typeof document) { install(document); } module.exports = exports['default']; //# sourceMappingURL=index.js.map