all files / classlist-multiple-values/ index.js

100% Statements 14/14
100% Branches 6/6
100% Functions 8/8
100% Lines 14/14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52                                                                             
'use strict';
 
/**
 * @param  {String[]|String} values
 *
 * @return {String[]}
 */
function resolveValues ( values ) {
 
	if ( Array.isArray(values) ) {
		return values;
	}
 
	return values.split(' ')
		.map(( value ) => {
			return value.trim();
		})
		.filter(( value ) => {
			return value !== '';
		});
 
}
 
/**
 * @param  {Object|DOMTokenList} classList
 *
 * @return {Object}
 */
module.exports = ( classList ) => {
 
	if (
		typeof classList.add === 'undefined' &&
		typeof classList.remove === 'undefined'
	) {
		throw new Error('`add` and `remove` methods are undefined');
	}
 
	return {
		add: ( values ) => {
			resolveValues(values).forEach(( value ) => {
				classList.add(value);
			});
		},
		remove: ( values ) => {
			resolveValues(values).forEach(( value ) => {
				classList.remove(value);
			});
		}
	};
 
};