| 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 (typeof element.matches === 'function' && | 
|             element.matches(selector)) { | 
|           return element; | 
|         } | 
|         element = element.parentNode; | 
|     } | 
| } | 
|   | 
| module.exports = closest; |