You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.7 KiB
80 lines
2.7 KiB
(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) |
|
}); |