MINI Sh3ll
/*
---
name: "CoreExtended"
description: "Extended core of AtomJS - extend, implements, clone, typeOf"
license:
- "[GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)"
- "[MIT License](http://opensource.org/licenses/mit-license.php)"
inspiration:
- "[JQuery](http://jquery.com)"
- "[MooTools](http://mootools.net)"
provides: CoreExtended
requires:
- js185
- Core
...
*/
new function () {
function innerExtend (proto) {
return function (elem, from) {
if (from == null) {
from = elem;
elem = atom;
}
var ext = proto ? elem.prototype : elem,
accessors = atom.accessors && atom.accessors.inherit;
for (var i in from) if (i != 'constructor') {
if ( accessors && accessors(from, ext, i) ) continue;
ext[i] = clone(from[i]);
}
return elem;
};
}
function typeOf (item) {
if (item == null) return 'null';
var string = toString.call(item);
for (var i in typeOf.types) if (i == string) return typeOf.types[i];
if (item.nodeName){
if (item.nodeType == 1) return 'element';
if (item.nodeType == 3) return /\S/.test(item.nodeValue) ? 'textnode' : 'whitespace';
}
var type = typeof item;
if (item && type == 'object') {
if (atom.Class && item instanceof atom.Class) return 'class';
if (coreIsArrayLike(item)) return 'arguments';
}
return type;
}
typeOf.types = {};
['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Class'].forEach(function(name) {
typeOf.types['[object ' + name + ']'] = name.toLowerCase();
});
function clone (object) {
var type = typeOf(object);
return type in clone.types ? clone.types[type](object) : object;
}
clone.types = {
'array': function (array) {
var i = array.length, c = new Array(i);
while (i--) c[i] = clone(array[i]);
return c;
},
'class':function (object) {
return typeof object.clone == 'function' ?
object.clone() : object;
},
'object': function (object) {
if (typeof object.clone == 'function') return object.clone();
var c = {}, accessors = atom.accessors && atom.accessors.inherit;
for (var key in object) {
if (accessors && accessors(object, c, key)) continue;
c[key] = clone(object[key]);
}
return c;
}
};
atom.core.extend = innerExtend(false);
atom.core.implement = innerExtend(true);
atom.core.typeOf = typeOf;
atom.core.clone = clone;
atom.extend = atom.core.extend;
atom.implement = atom.core.implement;
atom.typeOf = atom.core.typeOf;
atom.clone = atom.core.clone;
};
OHA YOOOO