|
63 | 63 | _isFunction = _isType('function'),
|
64 | 64 | _isString = _isType('string'),
|
65 | 65 | _isNumber = _isType('number'),
|
| 66 | + _isBoolean = _isType('boolean'), |
66 | 67 | _isArray = Array.isArray || _instanceOf(Array),
|
67 | 68 | _isDate = _instanceOf(Date),
|
68 | 69 | _isRegExp = _instanceOf(RegExp),
|
|
91 | 92 | };
|
92 | 93 | };
|
93 | 94 |
|
| 95 | +var arrayShift = Array.prototype.shift; |
| 96 | + |
| 97 | + function _merge () { |
| 98 | + var dest = arrayShift.call(arguments), |
| 99 | + src = arrayShift.call(arguments), |
| 100 | + key; |
| 101 | + |
| 102 | + while( src ) { |
| 103 | + |
| 104 | + if( typeof dest !== typeof src ) { |
| 105 | + dest = _isArray(src) ? [] : ( _isObject(src) ? {} : src ); |
| 106 | + } |
| 107 | + |
| 108 | + if( _isObject(src) ) { |
| 109 | + |
| 110 | + for( key in src ) { |
| 111 | + if( src[key] !== undefined ) { |
| 112 | + if( typeof dest[key] !== typeof src[key] ) { |
| 113 | + dest[key] = _merge(undefined, src[key]); |
| 114 | + } else if( _isArray(dest[key]) ) { |
| 115 | + [].push.apply(dest[key], src[key]); |
| 116 | + } else if( _isObject(dest[key]) ) { |
| 117 | + dest[key] = _merge(dest[key], src[key]); |
| 118 | + } else { |
| 119 | + dest[key] = src[key]; |
| 120 | + } |
| 121 | + } |
| 122 | + } |
| 123 | + } |
| 124 | + src = arrayShift.call(arguments); |
| 125 | + } |
| 126 | + |
| 127 | + return dest; |
| 128 | + } |
| 129 | + |
| 130 | + function _extend () { |
| 131 | + var dest = arrayShift.call(arguments), |
| 132 | + src = arrayShift.call(arguments), |
| 133 | + key; |
| 134 | + |
| 135 | + while( src ) { |
| 136 | + for( key in src) { |
| 137 | + dest[key] = src[key]; |
| 138 | + } |
| 139 | + src = arrayShift.call(arguments); |
| 140 | + } |
| 141 | + |
| 142 | + return dest; |
| 143 | + } |
| 144 | + |
94 | 145 | if( !Element.prototype.matchesSelector ) {
|
95 | 146 | Element.prototype.matchesSelector = (
|
96 | 147 | Element.prototype.webkitMatchesSelector ||
|
|
260 | 311 |
|
261 | 312 | jqlite.noop = noop;
|
262 | 313 |
|
| 314 | + jqlite.extend = function (deep) { |
| 315 | + var args = [].slice.call(arguments); |
| 316 | + if( _isBoolean(deep) ) { |
| 317 | + args.shift(); |
| 318 | + } else { |
| 319 | + deep = false; |
| 320 | + } |
| 321 | + if( deep ) { |
| 322 | + _merge.apply(null, args ); |
| 323 | + } else { |
| 324 | + _extend.apply(null, args ); |
| 325 | + } |
| 326 | + }; |
| 327 | + |
| 328 | + jqlite.isObject = _isObject; |
| 329 | + jqlite.isFunction = _isFunction; |
| 330 | + jqlite.isString = _isString; |
| 331 | + jqlite.isNumber = _isNumber; |
| 332 | + jqlite.isBoolean = _isBoolean; |
| 333 | + jqlite.isArray = _isArray; |
| 334 | + jqlite.isDate = _isDate; |
| 335 | + jqlite.isRegExp = _isRegExp; |
| 336 | + jqlite.isElement = _isElement; |
| 337 | + |
263 | 338 | // document ready
|
264 | 339 |
|
265 | 340 | var _onLoad = window.addEventListener ? function (listener) {
|
|
284 | 359 |
|
285 | 360 | ListDOM.prototype = [];
|
286 | 361 | ListDOM.prototype.ready = ready;
|
| 362 | + ListDOM.prototype.extend = function (deep) { |
| 363 | + var args = [].slice.call(arguments); |
| 364 | + if( _isBoolean(deep) ) { |
| 365 | + args.shift(); |
| 366 | + } else { |
| 367 | + deep = false; |
| 368 | + } |
| 369 | + if( deep ) { |
| 370 | + _merge.apply(null, [ListDOM.prototype].concat(args) ); |
| 371 | + } else { |
| 372 | + _extend.apply(null, [ListDOM.prototype].concat(args) ); |
| 373 | + } |
| 374 | + }; |
287 | 375 |
|
288 | 376 | jqlite.fn = ListDOM.prototype;
|
289 | 377 |
|
|
0 commit comments