Blame view

天文台pc/tianwentai-ui/node_modules/classnames/dedupe.js 2.78 KB
bc518174   王天杨   提交两个项目文件
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  /*!
  	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;
  	}
  }());