const Util = (() => { /** * ------------------------------------------------------------------------ * Private TransitionEnd Helpers * ------------------------------------------------------------------------ */ let transitionEnd = false let transitionEndSelector = '' const TransitionEndEvent = { WebkitTransition: 'webkitTransitionEnd', MozTransition: 'transitionend', OTransition: 'oTransitionEnd otransitionend', transition: 'transitionend' } function transitionEndTest() { if (window.QUnit) { return false } let el = document.createElement('bmd') for (let name in TransitionEndEvent) { if (el.style[name] !== undefined) { return TransitionEndEvent[name] // { end: TransitionEndEvent[name] } } } return false } function setTransitionEndSupport() { transitionEnd = transitionEndTest() // generate a concatenated transition end event selector for (let name in TransitionEndEvent) { transitionEndSelector += ` ${TransitionEndEvent[name]}` } } /** * -------------------------------------------------------------------------- * Public Util Api * -------------------------------------------------------------------------- */ let Util = { transitionEndSupported() { return transitionEnd }, transitionEndSelector() { return transitionEndSelector }, isChar(event) { if (typeof event.which === 'undefined') { return true } else if (typeof event.which === 'number' && event.which > 0) { return ( !event.ctrlKey && !event.metaKey && !event.altKey && event.which !== 8 // backspace && event.which !== 9 // tab && event.which !== 13 // enter && event.which !== 16 // shift && event.which !== 17 // ctrl && event.which !== 20 // caps lock && event.which !== 27 // escape ) } return false }, assert($element, invalidTest, message) { if (invalidTest) { if (!$element === undefined) { $element.css('border', '1px solid red') } console.error(message, $element) // eslint-disable-line no-console throw message } }, describe($element) { if ($element === undefined) { return 'undefined' } else if ($element.length === 0) { return '(no matching elements)' } return `${$element[0].outerHTML.split('>')[0]}>` } } setTransitionEndSupport() return Util })(jQuery) export default Util