UNPKG

vuikit

Version:

A responsive Vue UI library for web site interfaces based on UIkit

82 lines (62 loc) 2.07 kB
/** * Copyright (c) 2013-2018 YOOtheme GmbH, getuikit.com */ /* eslint-disable no-useless-call */ import {filterAttr} from './attr' import {includes, isString, isUndefined, toNodes} from './lang' export function addClass (element, ...args) { apply(element, args, 'add') } export function removeClass (element, ...args) { apply(element, args, 'remove') } export function removeClasses (element, cls) { filterAttr(element, 'class', new RegExp(`(^|\\s)${cls}(?!\\S)`, 'g'), '') } export function replaceClass (element, ...args) { args[0] && removeClass(element, args[0]) args[1] && addClass(element, args[1]) } export function hasClass (element, cls) { return toNodes(element).some(element => element.classList.contains(cls)) } export function toggleClass (element, ...args) { if (!args.length) { return } args = getArgs(args) const force = !isString(args[args.length - 1]) ? args.pop() : [] // in iOS 9.3 force === undefined evaluates to false args = args.filter(Boolean) toNodes(element).forEach(({classList}) => { for (let i = 0; i < args.length; i++) { supports.Force ? classList.toggle(...[args[i]].concat(force)) : (classList[(!isUndefined(force) ? force : !classList.contains(args[i])) ? 'add' : 'remove'](args[i])) } }) } function apply (element, args, fn) { args = getArgs(args).filter(Boolean) args.length && toNodes(element).forEach(({classList}) => { supports.Multiple ? classList[fn].apply(classList, args) : args.forEach(cls => classList[fn](cls)) }) } function getArgs (args) { return args.reduce((args, arg) => args.concat.call(args, isString(arg) && includes(arg, ' ') ? arg.trim().split(' ') : arg) , []) } let supports = {}; // IE 11 (function () { if (typeof document !== 'undefined' && document.createElement('_').classList) { let list = document.createElement('_').classList list.add('a', 'b') list.toggle('c', false) supports.Multiple = list.contains('b') supports.Force = !list.contains('c') list = null } })()