UNPKG

vuikit

Version:

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

79 lines (74 loc) 2.66 kB
/** * Vuikit 0.8.10 * (c) 2018 Miljan Aleksic * @license MIT **/ /* Substantial part of the code is adapted from UIkit, Copyright (c) 2013-2018 YOOtheme GmbH, getuikit.com */ import { filterAttr } from './attr'; import { includes, isString, isUndefined, toNodes } from './lang'; function addClass (element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; apply(element, args, 'add'); } function removeClass (element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; apply(element, args, 'remove'); } function removeClasses (element, cls) { filterAttr(element, 'class', new RegExp(("(^|\\s)" + cls + "(?!\\S)"), 'g'), ''); } function replaceClass (element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; args[0] && removeClass(element, args[0]); args[1] && addClass(element, args[1]); } function hasClass (element, cls) { return toNodes(element).some(function (element) { return element.classList.contains(cls); }) } function toggleClass (element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; if (!args.length) { return } args = getArgs(args); var force = !isString(args[args.length - 1]) ? args.pop() : []; args = args.filter(Boolean); toNodes(element).forEach(function (ref) { var classList = ref.classList; for (var i = 0; i < args.length; i++) { supports.Force ? classList.toggle.apply(classList, [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(function (ref) { var classList = ref.classList; supports.Multiple ? classList[fn].apply(classList, args) : args.forEach(function (cls) { return classList[fn](cls); }); }); } function getArgs (args) { return args.reduce(function (args, arg) { return args.concat.call(args, isString(arg) && includes(arg, ' ') ? arg.trim().split(' ') : arg); } , []) } var supports = {}; (function () { if (typeof document !== 'undefined' && document.createElement('_').classList) { var list = document.createElement('_').classList; list.add('a', 'b'); list.toggle('c', false); supports.Multiple = list.contains('b'); supports.Force = !list.contains('c'); list = null; } })(); export { addClass, removeClass, removeClasses, replaceClass, hasClass, toggleClass };