import Vue from 'vue'; const isServer = Vue.prototype.$isServer; /* istanbul ignore next */ export const on = (function () { if (!isServer && document.addEventListener) { return function (element: any, event: any, handler: any) { if (element && event && handler) { element.addEventListener(event, handler, false); } }; } else { return function (element: any, event: any, handler: any) { if (element && event && handler) { element.attachEvent('on' + event, handler); } }; } })(); /* istanbul ignore next */ export const off = (function () { if (!isServer && document.removeEventListener) { return function (element: any, event: any, handler: any) { if (element && event) { element.removeEventListener(event, handler, false); } }; } else { return function (element: any, event: any, handler: any) { if (element && event) { element.detachEvent('on' + event, handler); } }; } })(); /* istanbul ignore next */ export function hasClass(el: Element | HTMLElement, cls: string) { if (!el || !cls) return false; if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.'); if (el.classList) { return el.classList.contains(cls); } else { return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1; } } /* istanbul ignore next */ export function addClass(el: Element | HTMLElement, cls: string) { if (!el) return; let curClass = el.className; const classes = (cls || '').split(' '); for (let i = 0, j = classes.length; i < j; i++) { const clsName = classes[i]; if (!clsName) continue; if (el.classList) { el.classList.add(clsName); } else { if (!hasClass(el, clsName)) { curClass += ' ' + clsName; } } } if (!el.classList) { el.className = curClass; } } /* istanbul ignore next */ export function removeClass(el: Element | HTMLElement, cls: string) { if (!el || !cls) return; const classes = cls.split(' '); let curClass = ' ' + el.className + ' '; for (let i = 0, j = classes.length; i < j; i++) { const clsName = classes[i]; if (!clsName) continue; if (el.classList) { el.classList.remove(clsName); } else { if (hasClass(el, clsName)) { curClass = curClass.replace(' ' + clsName + ' ', ' '); } } } if (!el.classList) { el.className = trim(curClass); } } /* istanbul ignore next */ const trim = function (str: string) { return (str || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ''); };