define([], function () { function parentWithAttribute(elem, name, value) { while ((value ? elem.getAttribute(name) != value : !elem.getAttribute(name))) { elem = elem.parentNode; if (!elem || !elem.getAttribute) { return null; } } return elem; } function parentWithTag(elem, tagNames) { // accept both string and array passed in if (!Array.isArray(tagNames)) { tagNames = [tagNames]; } while (tagNames.indexOf(elem.tagName || '') == -1) { elem = elem.parentNode; if (!elem) { return null; } } return elem; } function parentWithClass(elem, className) { while (!elem.classList || !elem.classList.contains(className)) { elem = elem.parentNode; if (!elem) { return null; } } return elem; } return { parentWithAttribute: parentWithAttribute, parentWithClass: parentWithClass, parentWithTag: parentWithTag }; });