vuikit
Version:
A responsive Vue UI library for web site interfaces based on UIkit
79 lines (74 loc) • 2.66 kB
JavaScript
/**
* 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 };