| (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.delegate = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ |
| var DOCUMENT_NODE_TYPE = 9; |
| |
| /** |
| * A polyfill for Element.matches() |
| */ |
| if (typeof Element !== 'undefined' && !Element.prototype.matches) { |
| var proto = Element.prototype; |
| |
| proto.matches = proto.matchesSelector || |
| proto.mozMatchesSelector || |
| proto.msMatchesSelector || |
| proto.oMatchesSelector || |
| proto.webkitMatchesSelector; |
| } |
| |
| /** |
| * Finds the closest parent that matches a selector. |
| * |
| * @param {Element} element |
| * @param {String} selector |
| * @return {Function} |
| */ |
| function closest (element, selector) { |
| while (element && element.nodeType !== DOCUMENT_NODE_TYPE) { |
| if (element.matches(selector)) return element; |
| element = element.parentNode; |
| } |
| } |
| |
| module.exports = closest; |
| |
| },{}],2:[function(require,module,exports){ |
| var closest = require('./closest'); |
| |
| /** |
| * Delegates event to a selector. |
| * |
| * @param {Element} element |
| * @param {String} selector |
| * @param {String} type |
| * @param {Function} callback |
| * @param {Boolean} useCapture |
| * @return {Object} |
| */ |
| function delegate(element, selector, type, callback, useCapture) { |
| var listenerFn = listener.apply(this, arguments); |
| |
| element.addEventListener(type, listenerFn, useCapture); |
| |
| return { |
| destroy: function() { |
| element.removeEventListener(type, listenerFn, useCapture); |
| } |
| } |
| } |
| |
| /** |
| * Finds closest match and invokes callback. |
| * |
| * @param {Element} element |
| * @param {String} selector |
| * @param {String} type |
| * @param {Function} callback |
| * @return {Function} |
| */ |
| function listener(element, selector, type, callback) { |
| return function(e) { |
| e.delegateTarget = closest(e.target, selector); |
| |
| if (e.delegateTarget) { |
| callback.call(element, e); |
| } |
| } |
| } |
| |
| module.exports = delegate; |
| |
| },{"./closest":1}]},{},[2])(2) |
| }); |