sugar
Version:
A Javascript library for working with native objects.
94 lines (93 loc) • 46.6 kB
JavaScript
/*
* Sugar Library v1.0
*
* Freely distributable and licensed under the MIT-style license.
* Copyright (c) 2011 Andrew Plummer
* http://sugarjs.com/
*
* ---------------------------- */
(function(){function m(a,b,c,d){var e=b?a.prototype:a;ma(a,b,d);t(d,function(g,h){if(typeof c==="function")l(e,g,na(e[g],h,c));else if(c===true||!e[g])l(e,g,h);a.SugarMethods[g]={instance:b,method:h}})}function ma(a){if(!a.SugarMethods){a.SugarMethods={};l(a,"sugar",function(){var b=arguments,c=b.length===0,d=false;a===Object&&c&&oa();t(a.SugarMethods,function(e,g){if(c||v(b,e)){l(g.instance?a.prototype:a,e,g.method);d=true}});return d})}}function na(a,b,c){return function(){return a&&(c===true||
c.apply(this,arguments))?a.apply(this,arguments):b.apply(this,arguments)}}function l(a,b,c){if(V)Object.defineProperty(a,b,{value:c,configurable:true,enumerable:false,writable:true});else a[b]=c}function t(a,b){var c=0,d;for(d in a)if(a.hasOwnProperty(d)){b.call(a,d,a[d],c);c++}}function G(a,b){if(typeof a=="object"&&typeof b=="object"&&a!==null&&b!==null){for(var c in a)if(a.hasOwnProperty(c))if(!b.hasOwnProperty(c)||!G(a[c],b[c]))return false;return Object.keys(a).length===Object.keys(b).length}else return a===
b}function x(a,b,c,d){return a===b?true:Object.isRegExp(b)?b.test(a):Object.isFunction(b)?b.apply(c,[a].concat(d)):typeof b==="object"?G(b,a):false}function z(a,b,c,d){var e=a[0];if(a.length===0)return b;else if(!Object.isFunction(e)&&!Object.isString(e))throw new TypeError("First argument must be a function or a string");return Object.isFunction(e)?e.apply(c,[b].concat(d)):typeof b[e]=="function"?b[e].call(b):b[e]}function s(a,b){k(A(Array.prototype.slice.call(a)),b)}function W(a,b,c){var d=[],e=
a.length,g=b[b.length-1]!==false,h;s(b,function(f){if(typeof f==="boolean")return false;if(g){f%=e;if(f<0)f=e+f}h=c?a.charAt(f)||"":a[f];d.push(h)});return d.length<2?d[0]:d}function P(a,b){return Object.prototype.toString.call(a)==="[object "+b+"]"}function H(a,b,c){var d;d=Array.isArray(a)?[]:c?Object.extended():{};t(a,function(e,g){d[e]=b&&(Object.isObject(g)||Array.isArray(g))?H(g,b,c):g});return d}function X(a,b,c,d){var e=/^(.+?)(\[.*\])$/,g,h,f;if(d!==false&&(h=b.match(e))){f=h[1];b=h[2].replace(/^\[|\]$/g,
"").split("][");k(b,function(i){g=!i||i.match(/^\d+$/);if(!f&&Object.isArray(a))f=a.length;a[f]||(a[f]=g?[]:{});a=a[f];f=i});if(!f&&g)f=a.length.toString();X(a,f,c)}else a[b]=c.match(/^\d+$/)?parseInt(c):c==="true"?true:c==="false"?false:c}function B(a){var b=this;t(a,function(c,d){b[c]=d})}function oa(){Y.each(function(a){l(Object.prototype,"is"+a,function(){return Object["is"+a](this)})});Z.each(function(a){l(Object.prototype,a,B.prototype[a])});l(Object.prototype,"clone",function(a){return H(this,
a,true)})}function k(a,b,c,d,e){var g,h;I(b);h=isNaN(c)?0:parseInt(c>>0);for(g=d===true?a.length+h:a.length;h<g;){c=h%a.length;if(!(c in a)&&e===true)return pa(a,b,h,d);else if(b.call(a,a[c],c,a)===false)break;h++}}function v(a,b,c,d,e){var g,h;k(a,function(f,i,j){if(x(f,b,j,[i,j])){g=f;h=i;return false}},c,d);return e?h:g}function y(a){var b=[];a.each(function(c){v(b,c)===undefined&&b.push(c)});return b}function A(a){var b=[];k(a,function(c){if(Array.isArray(c))b=b.concat(A(c));else b.push(c)});
return b}function I(a){if(!a||!a.call)throw new TypeError("Callback is not callable");}function J(a){if(a.length===0)throw new TypeError("First argument must be defined");}function pa(a,b,c){var d=[],e;for(e in a)e in a&&e>>>0==e&&e!=4294967295&&e>=c&&d.push(e.toNumber());d.sort().each(function(g){return b.call(a,a[g],g,a)});return a}function K(a,b,c,d){var e=c==="max",g=c==="min",h=e?-Infinity:Infinity,f=[];t(a,function(i){i=a[i];var j=z(b,i,d);if(!(j===undefined||j===null))if(j===h)f.push(i);else if(e&&
j>h||g&&j<h){f=[i];h=j}});return f}function r(a,b,c){c=Math[c||"round"];var d=Math.pow(10,(b||0).abs());if(b<0)d=1/d;return c(a*d)/d}function $(a,b,c,d){var e=[];a=parseInt(a);for(var g=d>0;g&&a<=b||!g&&a>=b;){e.push(a);c&&c.call(this,a);a+=d}return e}function qa(a,b){function c(){return L(arguments)[d](-this)}var d="add"+a.capitalize()+"s",e=function(){return r(this*b)},g=function(){return L(arguments)[d](this)};l(Number.prototype,a,e);l(Number.prototype,a+"s",e);l(Number.prototype,a+"Before",c);
l(Number.prototype,a+"sBefore",c);l(Number.prototype,a+"Ago",c);l(Number.prototype,a+"sAgo",c);l(Number.prototype,a+"After",g);l(Number.prototype,a+"sAfter",g);l(Number.prototype,a+"FromNow",g);l(Number.prototype,a+"sFromNow",g)}function aa(a,b,c,d){var e=Array.prototype.slice.call(b).join("");e=e.replace(/all/,"").replace(/(\w)lphabet|umbers?|atakana|paces?|unctuation/g,"$1");return a.replace(c,function(g){return d[g]&&(!e||e.has(d[g].type))?d[g].to:g})}function w(a,b,c){ba[b]={type:a,to:c};ca[c]=
{type:a,to:b}}function M(a,b,c,d){var e=String(b);if(e!=b)e="";Object.isNumber(c)||(c=1);Object.isNumber(d)||(d=1);return e.repeat(c)+a+e.repeat(d)}function da(a){var b=Date.addFormat,c=a.code;if(!a.formatsAdded){b("("+a.months.join("|")+")",["month"],c);b("("+a.weekdays.join("|")+")",["weekday"],c);b("("+a.modifiers.filter(function(d){return d.name==="day"}).map("text").join("|")+")",["day"],c);k(a.formats,function(d){var e=[];d=d.replace(/\s+/g,"[-,. ]*");d=d.replace(/\{(.+?)\}/g,function(g,h){var f=
h.match(/\?$/),i=h.match(/(\d)(?:-(\d))?/),j=h.match(/^\d+$/),o=h.replace(/[^a-z]+$/,""),n,p;if(o==="time"){e=e.concat(Q);return f?ea:R}if(j)n=a.optionals[j[0]-1];else if(a[o])n=a[o];else if(a[o+"s"]){n=a[o+"s"];if(i){p=[];k(n,function(u,ra){var fa=ra%(a.units?8:n.length);if(fa>=i[1]&&fa<=(i[2]||i[1]))p.push(u)});n=p}n=n.compact().join("|")}if(j)return"(?:"+n+")?";else{e.push(o);return"("+n+")"+(f?"?":"")}});b(d,e,c)});a.formatsAdded=true}}function C(a,b,c){if(b&&(!Object.isString(a)||!a))a=Date.currentLocale;
a&&!S[a]&&sa(a,c);return S[a]}function sa(a,b){function c(g,h){g=g.split("+").map(function(f){return f.replace(/(.+):(.+)$/,function(i,j,o){return o.split("|").map(function(n){return j+n}).join("|")})}).join("|");return k(g.split("|"),h)}function d(g,h,f){var i=[];if(b[g]){k(b[g],function(j,o){c(j,function(n,p){i[p*f+o]=n.toLowerCase()})});if(h)i=i.concat(b[g].map(function(j){return j.slice(0,3).toLowerCase()}));return b[g]=i}}function e(g,h){var f="[0-90-9]"+(g?"{"+g+","+h+"}":"+");if(b.digits)f+=
"|["+b.digits+"]+";return f}b=b||ta(a);if(!b)throw Error("Invalid locale.");if(b.numbersAreDigits)b.digits=b.numbers.join("");d("months",true,12);d("weekdays",true,7);d("units",false,8);d("numbers",false,10);b.code=a;b.date=e(1,2);b.year=e(4,4);b.num=function(){var g=[e()].concat(b.articles);b.digits||(g=g.concat(b.numbers));return g.compact().join("|")}();(function(){var g=[];b.modifiersByName={};k(b.modifiers,function(h){c(h.text,function(f){b.modifiersByName[f]=h;g.push({name:h.name,text:f,value:h.value})})});
g.groupBy("name",function(h,f){f=f.map("text");if(h==="day")f=f.concat(b.weekdays);b[h]=f.join("|")});b.modifiers=g})();if(b.monthSuffix){b.month=e(1,2);b.months=(1).upto(12).map(function(g){return g+b.monthSuffix})}S[a]=new ga(b)}function ta(a){function b(e){return!!(d[0]&Math.pow(2,e-1))}if(a.slice(0,3)=="en-")a="en";if(!ha[a])return null;var c={modifiers:[]},d=ha[a].split(";");k(["months","weekdays","units","numbers","articles","optionals","formats"],function(e,g){c[e]=d[g+2]?d[g+2].split(","):
[]});c.outputFormat=d[9];k(["day","sign","shift","edge"],function(e,g){d[g+10]&&k(d[g+10].split(","),function(h,f){h&&c.modifiers.push({name:e,text:h,value:f-2})})});if(b(1)){c.numbersAreDigits=true;c.monthSuffix=d[1]}c.capitalizeUnit=a=="de";c.hasPlural=b(2);c.pastFormat=c.formats[0];c.futureFormat=c.formats[b(3)?1:0];return c}function ua(a){if(!a)a=Date.currentLocale;return a!="en"&&a!="en-US"}function ga(a){Object.merge(this,a)}function D(a){var b;if(typeof a[0]==="object")return a;else if(a.length==
1&&Object.isNumber(a[0]))return[a[0]];b={};k(ia,function(c,d){b[c.unit]=a[d]});return[b]}function va(a,b){var c={},d,e;k(b,function(g,h){d=a[h+1];if(d!==undefined){d=d.hankaku("n");if(g==="year")c.yearAsString=d;if(g==="millisecond")d*=Math.pow(10,3-d.length);e=parseFloat(d);c[g]=!isNaN(e)?e:d.toLowerCase()}});return c}function ja(a,b){var c=new Date,d=false,e,g,h,f,i,j,o;if(Object.isDate(a))c=a;else if(Object.isNumber(a))c=new Date(a);else if(Object.isObject(a)){c=(new Date).set(a,true);f=a}else if(Object.isString(a)){da(C(b,
true));g=ua(b);a=a.trim().replace(/\.+$/,"").replace(/^now$/,"");k(ka,function(n){var p;var u=n.reg;if(!a||!a.match)p=null;else{if((p=a.match(u))&&!RegExp.NPCGSupport&&!u.global)for(u=1;u<p.length;u++)if(p[u]==="")p[u]=undefined;p=p}if(p){h=n;f=va(p,h.to);e=C(h.locale,true);if(h.variant&&!Object.isString(f.month)&&(Object.isString(f.date)||g)){o=f.month;f.month=f.date;f.date=o}if(f.year&&f.yearAsString.length===2)f.year=r((new Date).getFullYear()/100)*100-r(f.year/100)*100+f.year;if(f.month){f.month=
e.getMonth(f.month);if(f.shift&&!f.unit)f.unit="year"}if(f.weekday&&f.date)delete f.weekday;else if(f.weekday){f.weekday=e.getWeekday(f.weekday);if(f.shift&&!f.unit)f.unit="week"}if(f.day&&(o=e.modifiersByName[f.day])){f.day=o.value;c.resetTime();d=true}else if(f.day&&(o=e.getWeekday(f.day))>-1){delete f.day;f.weekday=o}if(f.date&&!Object.isNumber(f.date))f.date=e.getNumericDate(f.date);if(f.meridian)if(f.meridian==="pm"&&f.hour<12)f.hour+=12;if(f.offset_hours||f.offset_minutes){f.utc=true;f.offset_minutes=
f.offset_minutes||0;f.offset_minutes+=f.offset_hours*60;if(f.offset_sign==="-")f.offset_minutes*=-1;f.minute-=f.offset_minutes}if(f.unit){d=true;j=e.getNumber(f.num);i=e.getEnglishUnit(f.unit);if(f.shift||f.edge){j*=(o=e.modifiersByName[f.shift])?o.value:0;if(i==="month"&&f.date!==undefined){c.set({day:f.date},true);delete f.date}if(i==="year"&&f.month!==undefined){c.set({month:f.month,day:f.date},true);delete f.month;delete f.date}}if(f.sign&&(o=e.modifiersByName[f.sign]))j*=o.value;if(f.weekday!==
undefined){c.set({weekday:f.weekday},true);delete f.weekday}f[i]=(f[i]||0)+j}if(f.year_sign==="-")f.year*=-1;return false}});if(h)if(d)c.advance(f);else f.utc?c.setUTC(f,true):c.set(f,true);else c=a?new Date(a):new Date;if(f&&f.edge){o=e.modifiersByName[f.edge];k(N.slice(4),function(n){if(f[n.unit]!==undefined){i=n.unit;return false}});if(i==="year")f.specificity="month";else if(i==="month"||i==="week")f.specificity="day";c[(o.value<0?"endOf":"beginningOf")+i.capitalize()]();o.value===-2&&c.resetTime()}}return{date:c,
set:f}}function T(a,b,c,d){var e,g=C(d,true),h=/^[A-Z]/,f,i;if(a.isValid())if(Date[b])b=Date[b];else{if(typeof b=="function"){e=la(a);b=b.apply(a,e.concat(g))}}else return"Invalid Date";if(!b&&!c)b=g.outputFormat;else if(!b&&c){e=e||la(a);if(e[1]===0){e[1]=1;e[0]=1}return g.relative(e[0],e[1],e[2])}k(wa,function(j){b=b.replace(RegExp("\\{("+j.token+")(\\d)?\\}",j.caps?"":"i"),function(o,n,p){p=p||1;i=n.length;f=j.format.call(null,a,"");if(j.pad&&n.length===2)f=f.pad(j.pad);if(j.weekdays){f=g.weekdays[f+
(p-1)*7];if(i===3)f=f.slice(0,3);if(h.test(n))f=f.capitalize()}if(j.months){f=g.months[f+(p-1)*12];if(i===3)f=f.slice(0,3);if(h.test(n))f=f.capitalize()}if(j.meridian){if(i===1)f=f.to(1);if(h.test(n))f=f.toUpperCase()}return f})});return b}function xa(a,b,c){var d=ja(b),e=0,g=b=0,h;if(c>0){b=g=c;h=true}if(!d.date.isValid())return false;if(d.set&&d.set.specificity){k(E,function(i){if(i.unit===d.set.specificity)e=i.multiplier(d.date,a-d.date)-1});if(d.set.edge||d.set.shift)d.date["beginningOf"+d.set.specificity.capitalize()]();
if(!h&&d.set.sign&&d.set.specificity!="millisecond"){b=50;g=-50}}c=a.getTime();h=d.date.getTime();var f=h+e;return c>=h-b&&c<=f+g}function O(a,b,c,d,e){if(Object.isNumber(b)&&e)b={milliseconds:b};else if(Object.isNumber(b)){a.setTime(b);return a}if(b.date)b.day=b.date;if(!e&&b.day===undefined&&b.weekday!==undefined){q(a,"set",d,"Weekday",b.weekday);b.day=q(a,"get",d,"Date");delete b.weekday}k(N,function(g){if(b[g.unit]!==undefined||b[g.unit+"s"]!==undefined){b.specificity=g.unit;return false}else if(c&&
g.unit!=="week"&&g.unit!=="year")q(a,"set",d,g.method,g.unit==="day"?1:0)});e&&b.month!==undefined&&ya(a,b,e);k(E,function(g){var h=g.unit;g=g.method;var f=b[h]!==undefined?b[h]:b[h+"s"];if(f!==undefined){if(e){if(h==="week"){f=(b.day||0)+f*7;g="Date"}f=f*e+q(a,"get","",g)}q(a,"set",d,g,f)}});return a}function q(a,b,c,d,e){return a[b+(c?"UTC":"")+d](e)}function la(a){var b;a=a.millisecondsFromNow();var c=a.abs(),d=c,e=0;k(N.from(1),function(g,h){b=r(c/g.multiplier(),1).floor();if(b>=1){d=b;e=h+1}});
return[d,e,a]}function ya(a,b,c){var d=a.getDate();if(!(d<29||b.specificity!="month"&&b.specificity!="year")){b=(new Date(a.getFullYear()+(b.year*c||0),a.getMonth()+b.month*c)).daysInMonth();b<d&&a.setDate(b)}}function L(a){var b;b=Object.isNumber(a[1])?D(a)[0]:a[0];return ja(b,a[1]).date}function U(a,b,c,d,e){if(!a.timers)a.timers=[];var g=setTimeout(function(){c.apply(d,e);a.timers.remove(g)},b);a.timers.push(g)}var V=Object.defineProperty&&Object.defineProperties;B.prototype.constructor=Object;
m(B,true,false,{clone:function(a){return H(this,a,true)}});var Y=["Array","Boolean","Date","Function","Number","String","RegExp"],Z=["keys","values","each","merge","isEmpty","equals","watch"];m(Object,false,false,{extended:function(a){return new B(a)},isObject:function(a){return a===null||a===undefined?false:P(a,"Object")&&a.constructor===Object},each:function(a,b){b&&t(a,function(c,d){b.call(a,c,d,a)});return a},merge:function(){var a=arguments[0];s(arguments,function(b){typeof b==="object"&&t(b,
function(c,d){a[c]=d})});return a},isEmpty:function(a){if(!a)return true;return G(a,{})},equals:function(a,b){return G(a,b)},values:function(a,b){var c=[];t(a,function(d,e){c.push(e);b&&b.call(a,e)});return c},clone:H,fromQueryString:function(a,b){var c=Object.extended();a=a&&a.toString?a.toString():"";a.replace(/^.*?\?/,"").unescapeURL().split("&").each(function(d){d=d.split("=");d.length===2&&X(c,d[0],d[1],b)});return c}});m(Object,false,function(){return arguments.length<2},{keys:function(a,b){if(a===
null||typeof a!="object")throw new TypeError("Object required");var c=[];t(a,function(d){c.push(d);b&&b.call(a,d)});return c}});m(Array,false,false,{create:function(){var a=[];s(arguments,function(b){if(b&&b.callee)b=Array.prototype.slice.call(b);a=a.concat(b)});return a},isArray:function(a){return P(a,"Array")}});m(Array,true,function(){var a=arguments;return a.length===0||Object.isFunction(a[0])},{every:function(a,b){var c=this.length,d=0;for(J(arguments);d<c;){if(d in this&&!x(this[d],a,b,[d,this]))return false;
d++}return true},some:function(a,b){var c=this.length,d=0;for(J(arguments);d<c;){if(d in this&&x(this[d],a,b,[d,this]))return true;d++}return false},map:function(a,b){var c=this.length,d=0,e=Array(c);for(J(arguments);d<c;){if(d in this)e[d]=z(arguments,this[d],b,[d,this]);d++}return e},filter:function(a,b){var c=this.length,d=0,e=[];for(J(arguments);d<c;){d in this&&x(this[d],a,b,[d,this])&&e.push(this[d]);d++}return e}});m(Array,true,false,{indexOf:function(a,b){var c=this.length,d=isNaN(b)?0:parseInt(b>>
0);if(Object.isString(this))return this.indexOf(a,b);if(d<0)d=Math.max(c+d,0);if(c==0||d>c)return-1;for(;d<c;){if(d in this&&this[d]===a)return d;d++}return-1},lastIndexOf:function(a,b){var c=this.length,d=isNaN(b)?c:parseInt(b>>0);if(Object.isString(this))return this.lastIndexOf(a,b);if(d<0)d=c+d;if(c==0||d<0)return-1;for(;d>=0;){if(d in this&&this[d]===a)return d;d--}return-1},forEach:function(a,b){var c=this.length,d=0;for(I(a);d<c;){d in this&&a.call(b,this[d],d,this);d++}},reduce:function(a,
b){var c=this.length,d=0,e=arguments.length>1&&b;I(a);if(c==0&&!e)throw new TypeError("Reduce called on empty array with no initial value");else if(e)e=e;else{e=this[d];d++}for(;d<c;){if(d in this)e=a.call(undefined,e,this[d],d,this);d++}return e},reduceRight:function(a,b){var c=this.length,d=c-1,e=arguments.length>1&&b;I(a);if(c==0&&!e)throw new TypeError("Reduce called on empty array with no initial value");else if(e)c=e;else{c=this[d];d--}for(;d>=0;){if(d in this)c=a.call(undefined,c,this[d],d,
this);d--}return c},each:function(a,b,c){k(this,a,b,c,true);return this},find:function(a,b,c){return v(this,a,b,c)},findAll:function(a,b,c){var d=[];k(this,function(e,g,h){x(e,a,h,[g,h])&&d.push(e)},b,c);return d},count:function(a){if(a===undefined)return this.length;return this.findAll(a).length},none:function(){return!this.any.apply(this,arguments)},remove:function(){var a,b=this;s(arguments,function(c){for(a=0;a<b.length;)if(x(b[a],c,b,[a,b]))b.splice(a,1);else a++});return b},removeAt:function(a,
b){if(a===undefined)return this;if(b===undefined)b=a;for(var c=0;c<=b-a;c++)this.splice(a,1);return this},add:function(a,b){if(!Object.isNumber(b)||isNaN(b))b=this.length;Array.prototype.splice.apply(this,[b,0].concat(a));return this},include:function(a,b){return this.clone().add(a,b)},exclude:function(){return Array.prototype.remove.apply(this.clone(),arguments)},clone:function(){return this.concat()},unique:function(){return y(this)},union:function(){var a=this;s(arguments,function(b){a=a.concat(b)});
return y(a)},intersect:function(){var a=[],b=arguments;this.each(function(c){s(b,function(d){Array.isArray(d)||(d=[d]);v(a,c)===undefined&&v(d,c)!==undefined&&a.push(c)})});return a},subtract:function(){var a=this.clone();s(arguments,function(b){Array.isArray(b)||(b=[b]);b.each(function(c){a.remove(c)})});return a},at:function(){return W(this,arguments)},first:function(a){if(a===undefined)return this[0];if(a<0)a=0;return this.slice(0,a)},last:function(a){if(a===undefined)return this[this.length-1];
return this.slice(this.length-a<0?0:this.length-a)},from:function(a){return this.slice(a)},to:function(a){if(a===undefined)a=this.length;return this.slice(0,a)},min:function(){return y(K(this,arguments,"min"))},max:function(){return y(K(this,arguments,"max"))},least:function(){var a=A(K(this.groupBy.apply(this,arguments),["length"],"min"));return a.length===this.length?[]:y(a)},most:function(){var a=A(K(this.groupBy.apply(this,arguments),["length"],"max"));return a.length===this.length?[]:y(a)},sum:function(a){a=
a?this.map(a):this;return a.length>0?a.reduce(function(b,c){return b+c}):0},average:function(a){a=a?this.map(a):this;return a.length>0?a.sum()/a.length:0},groupBy:function(a,b){var c=Object.extended(),d=arguments,e;k(this,function(g){e=z(d,g);c[e]||(c[e]=[]);c[e].push(g)});return c.each(b)},inGroups:function(a,b){var c=arguments.length>1,d=this,e=[],g=(this.length/a).ceil();(0).upto(a-1,function(h){h=h*g;var f=d.slice(h,h+g);c&&f.length<g&&(g-f.length).times(function(){f=f.add(b)});e.push(f)});return e},
inGroupsOf:function(a,b){if(this.length===0||a===0)return this;if(a===undefined)a=1;if(b===undefined)b=null;var c=[],d=null;this.each(function(e,g){if(g%a===0){d&&c.push(d);d=[]}if(e===undefined)e=b;d.push(e)});if(!this.length.isMultipleOf(a)){(a-this.length%a).times(function(){d.push(b)});this.length+=a-this.length%a}d.length>0&&c.push(d);return c},compact:function(a){var b=[];k(this,function(c){if(Array.isArray(c))b.push(c.compact());else if(a&&c)b.push(c);else if(!a&&c!==undefined&&c!==null&&(typeof c!=
"number"||!isNaN(c)))b.push(c)});return b},isEmpty:function(){return this.compact().length==0},flatten:function(){return A(this)},sortBy:function(a,b){var c=arguments;this.sort(function(d,e){var g=z(c,d),h=z(c,e),f=typeof g=="number";return f&&b?h-g:f&&!b?g-h:g===h?0:b?g<h?1:-1:g<h?-1:1});return this},randomize:function(){for(var a=this.concat(),b,c,d=a.length;d;b=parseInt(Math.random()*d),c=a[--d],a[d]=a[b],a[b]=c);return a}});m(Array,true,false,{all:Array.prototype.every,any:Array.prototype.some,
has:Array.prototype.some,insert:Array.prototype.add});m(Number,false,false,{random:function(a,b){var c;if(arguments.length==1){b=a;a=0}c=Math.min(a||0,b||1);return r(Math.random()*(Math.max(a||0,b||1)-c)+c)}});m(Number,true,false,{toNumber:function(){return parseFloat(this,10)},ceil:function(a){return r(this,a,"ceil")},floor:function(a){return r(this,a,"floor")},abs:function(){return Math.abs(this)},pow:function(a){if(a===undefined||a==null)a=1;return Math.pow(this,a)},round:function(a){return r(this,
a,"round")},chr:function(){return String.fromCharCode(this)},isOdd:function(){return!this.isMultipleOf(2)},isEven:function(){return this.isMultipleOf(2)},isMultipleOf:function(a){return this%a===0},upto:function(a,b,c){return $(this,a,b,c||1)},downto:function(a,b,c){return $(this,a,b,-(c||1))},times:function(a){if(a)for(var b=0;b<this;b++)a.call(this,b);return this.toNumber()},ordinalize:function(){var a;if(this>=11&&this<=13)a="th";else switch(this%10){case 1:a="st";break;case 2:a="nd";break;case 3:a=
"rd";break;default:a="th"}return this.toString()+a},pad:function(a,b,c){c=c||10;c=this.toNumber()===0?"":this.toString(c).replace(/^-/,"");c=M(c,"0",a-c.replace(/\.\d+$/,"").length,0);if(b||this<0)c=(this<0?"-":"+")+c;return c},format:function(a,b){a=a||",";b=b||".";var c=this.toString().split("."),d=c[0];c=c.length>1?b+c[1]:"";for(var e=/(\d+)(\d{3})/;e.test(d);)d=d.replace(e,"$1"+a+"$2");return d+c},hex:function(a){return this.pad(a||1,false,16)}});var F=function(){return"\t\n\r \u2028\u2029 "},
za=[{names:["Arabic"],source:"-ۿ"},{names:["Cyrillic"],source:"Ѐ-ӿ"},{names:["Devanagari"],source:"ऀ-ॿ"},{names:["Greek"],source:"Ͱ-Ͽ"},{names:["Hangul"],source:"가-ᄀ-ᇿ"},{names:["Han","Kanji"],source:"一-鿿豈-"},{names:["Hebrew"],source:"-"},{names:["Hiragana"],source:"-ゟ・-ー"},{names:["Kana"],source:"-ヿ。-゚"},{names:["Katakana"],source:"゠-ヿ。-゚"},{names:["Latin"],source:"