106 lines
3.1 KiB
JavaScript
106 lines
3.1 KiB
JavaScript
/*jslint onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true */
|
|
(function () {
|
|
"use strict";
|
|
|
|
var global = Function('return this')()
|
|
, classes = "Boolean Number String Function Array Date RegExp Object".split(" ")
|
|
, i
|
|
, name
|
|
, class2type = {}
|
|
;
|
|
|
|
for (i in classes) {
|
|
if (classes.hasOwnProperty(i)) {
|
|
name = classes[i];
|
|
class2type["[object " + name + "]"] = name.toLowerCase();
|
|
}
|
|
}
|
|
|
|
function typeOf(obj) {
|
|
return (null === obj || undefined === obj) ? String(obj) : class2type[Object.prototype.toString.call(obj)] || "object";
|
|
}
|
|
|
|
function isEmpty(o) {
|
|
var i, v;
|
|
if (typeOf(o) === 'object') {
|
|
for (i in o) { // fails jslint
|
|
v = o[i];
|
|
if (v !== undefined && typeOf(v) !== 'function') {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
if (!String.prototype.entityify) {
|
|
String.prototype.entityify = function () {
|
|
return this.replace(/&/g, "&").replace(/</g,
|
|
"<").replace(/>/g, ">");
|
|
};
|
|
}
|
|
|
|
if (!String.prototype.quote) {
|
|
String.prototype.quote = function () {
|
|
var c, i, l = this.length, o = '"';
|
|
for (i = 0; i < l; i += 1) {
|
|
c = this.charAt(i);
|
|
if (c >= ' ') {
|
|
if (c === '\\' || c === '"') {
|
|
o += '\\';
|
|
}
|
|
o += c;
|
|
} else {
|
|
switch (c) {
|
|
case '\b':
|
|
o += '\\b';
|
|
break;
|
|
case '\f':
|
|
o += '\\f';
|
|
break;
|
|
case '\n':
|
|
o += '\\n';
|
|
break;
|
|
case '\r':
|
|
o += '\\r';
|
|
break;
|
|
case '\t':
|
|
o += '\\t';
|
|
break;
|
|
default:
|
|
c = c.charCodeAt();
|
|
o += '\\u00' + Math.floor(c / 16).toString(16) +
|
|
(c % 16).toString(16);
|
|
}
|
|
}
|
|
}
|
|
return o + '"';
|
|
};
|
|
}
|
|
|
|
if (!String.prototype.supplant) {
|
|
String.prototype.supplant = function (o) {
|
|
return this.replace(/{([^{}]*)}/g,
|
|
function (a, b) {
|
|
var r = o[b];
|
|
return typeof r === 'string' || typeof r === 'number' ? r : a;
|
|
}
|
|
);
|
|
};
|
|
}
|
|
|
|
if (!String.prototype.trim) {
|
|
String.prototype.trim = function () {
|
|
return this.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, "$1");
|
|
};
|
|
}
|
|
|
|
// CommonJS / npm / Ender.JS
|
|
module.exports = {
|
|
typeOf: typeOf,
|
|
isEmpty: isEmpty
|
|
};
|
|
global.typeOf = global.typeOf || typeOf;
|
|
global.isEmpty = global.isEmpty || isEmpty;
|
|
}());
|