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;
 | |
| }());
 |