MINI Sh3ll
/*
---
name: "JavaScript 1.8.5"
description: "JavaScript 1.8.5 Compatiblity."
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: js185
...
*/
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
if (!Function.prototype.bind) {
Function.prototype.bind = function(context /*, arg1, arg2... */) {
if (typeof this !== "function") throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
var args = slice.call(arguments, 1),
toBind = this,
Nop = function () {},
Bound = function () {
var isInstance;
// Opera & Safari bug fixed. I must fix it in right way
// TypeError: Second argument to 'instanceof' does not implement [[HasInstance]]
try {
isInstance = this instanceof Nop;
} catch (ignored) {
// console.log( 'bind error', Nop.prototype );
isInstance = false;
}
return toBind.apply(
isInstance ? this : ( context || {} ),
args.concat( slice.call(arguments) )
);
};
Nop.prototype = toBind.prototype;
Bound.prototype = new Nop();
return Bound;
};
}
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) (function (has) {
Object.keys = function(obj) {
if (obj !== Object(obj)) throw new TypeError('Object.keys called on non-object');
var keys = [], i;
for (i in obj) if (has.call(obj, i)) keys.push(i);
return keys;
};
})({}.hasOwnProperty);
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
if (!Array.isArray) {
Array.isArray = function(o) {
return o && toString.call(o) === '[object Array]';
};
}
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create
if (!Object.create) {
Object.create = function (o) {
if (arguments.length > 1) {
throw new Error('Object.create implementation only accepts the first parameter.');
}
function F() {}
F.prototype = o;
return new F();
};
}
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
}
}
if (!String.prototype.trimLeft) {
String.prototype.trimLeft = function () {
return this.replace(/^\s+/, '');
}
}
if (!String.prototype.trimRight) {
String.prototype.trimRight = function () {
return this.replace(/\s+$/g, '');
}
}
OHA YOOOO