You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					116 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					116 lines
				
				2.8 KiB
			| 
											3 years ago
										 | /*! | ||
|  | 	Copyright (c) 2018 Jed Watson. | ||
|  | 	Licensed under the MIT License (MIT), see | ||
|  | 	http://jedwatson.github.io/classnames
 | ||
|  | */ | ||
|  | /* global define */ | ||
|  | 
 | ||
|  | (function () { | ||
|  | 	'use strict'; | ||
|  | 
 | ||
|  | 	var classNames = (function () { | ||
|  | 		// don't inherit from Object so we can skip hasOwnProperty check later
 | ||
|  | 		// http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232
 | ||
|  | 		function StorageObject() {} | ||
|  | 		StorageObject.prototype = Object.create(null); | ||
|  | 
 | ||
|  | 		function _parseArray (resultSet, array) { | ||
|  | 			var length = array.length; | ||
|  | 
 | ||
|  | 			for (var i = 0; i < length; ++i) { | ||
|  | 				_parse(resultSet, array[i]); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		var hasOwn = {}.hasOwnProperty; | ||
|  | 
 | ||
|  | 		function _parseNumber (resultSet, num) { | ||
|  | 			resultSet[num] = true; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		function _parseObject (resultSet, object) { | ||
|  | 			if (object.toString !== Object.prototype.toString && !object.toString.toString().includes('[native code]')) { | ||
|  | 				resultSet[object.toString()] = true; | ||
|  | 				return; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			for (var k in object) { | ||
|  | 				if (hasOwn.call(object, k)) { | ||
|  | 					// set value to false instead of deleting it to avoid changing object structure
 | ||
|  | 					// https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#de-referencing-misconceptions
 | ||
|  | 					resultSet[k] = !!object[k]; | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		var SPACE = /\s+/; | ||
|  | 		function _parseString (resultSet, str) { | ||
|  | 			var array = str.split(SPACE); | ||
|  | 			var length = array.length; | ||
|  | 
 | ||
|  | 			for (var i = 0; i < length; ++i) { | ||
|  | 				resultSet[array[i]] = true; | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		function _parse (resultSet, arg) { | ||
|  | 			if (!arg) return; | ||
|  | 			var argType = typeof arg; | ||
|  | 
 | ||
|  | 			// 'foo bar'
 | ||
|  | 			if (argType === 'string') { | ||
|  | 				_parseString(resultSet, arg); | ||
|  | 
 | ||
|  | 			// ['foo', 'bar', ...]
 | ||
|  | 			} else if (Array.isArray(arg)) { | ||
|  | 				_parseArray(resultSet, arg); | ||
|  | 
 | ||
|  | 			// { 'foo': true, ... }
 | ||
|  | 			} else if (argType === 'object') { | ||
|  | 				_parseObject(resultSet, arg); | ||
|  | 
 | ||
|  | 			// '130'
 | ||
|  | 			} else if (argType === 'number') { | ||
|  | 				_parseNumber(resultSet, arg); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		function _classNames () { | ||
|  | 			// don't leak arguments
 | ||
|  | 			// https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
 | ||
|  | 			var len = arguments.length; | ||
|  | 			var args = Array(len); | ||
|  | 			for (var i = 0; i < len; i++) { | ||
|  | 				args[i] = arguments[i]; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			var classSet = new StorageObject(); | ||
|  | 			_parseArray(classSet, args); | ||
|  | 
 | ||
|  | 			var list = []; | ||
|  | 
 | ||
|  | 			for (var k in classSet) { | ||
|  | 				if (classSet[k]) { | ||
|  | 					list.push(k) | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | 			return list.join(' '); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return _classNames; | ||
|  | 	})(); | ||
|  | 
 | ||
|  | 	if (typeof module !== 'undefined' && module.exports) { | ||
|  | 		classNames.default = classNames; | ||
|  | 		module.exports = classNames; | ||
|  | 	} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { | ||
|  | 		// register as 'classnames', consistent with npm package name
 | ||
|  | 		define('classnames', [], function () { | ||
|  | 			return classNames; | ||
|  | 		}); | ||
|  | 	} else { | ||
|  | 		window.classNames = classNames; | ||
|  | 	} | ||
|  | }()); |