Comparing version
70
m8.js
@@ -15,4 +15,7 @@ ;!function( root, Name, PACKAGE ) { | ||
Module = ENV != 'commonjs' ? null : require( 'module' ), | ||
force = [false, NaN, null, true, UNDEF].reduce( function( res, val ) { res[String( val )] = val; return res; }, obj() ), | ||
htmcol = 'htmlcollection', htmdoc = 'htmldocument', id_count = 999, id_prefix = 'anon', | ||
force = [false, NaN, null, true, UNDEF].reduce( function( res, val ) { | ||
res[String( val )] = val; return res; | ||
}, obj() ), | ||
htmcol = 'htmlcollection', htmdoc = 'htmldocument', | ||
id_count = 999, id_prefix = 'anon', | ||
// this is a Map of all the different combinations of permissions for assigning property descriptors using Object.defineProperty | ||
@@ -45,8 +48,7 @@ modes = function() { | ||
}(), | ||
randy = Math.random, re_global = /global|window/i, | ||
re_guid = /[xy]/g, re_lib = new RegExp( '^\\u005E?' + Name ), | ||
re_name = /[\s\(]*function([^\(]+).*/, re_vendor = /^[Ww]ebkit|[Mm]oz|O|[Mm]s|[Kk]html(.*)$/, | ||
slice = Array.prototype.slice, tpl_guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx', | ||
types = { '[object Object]' : 'object' }, | ||
xcache = { | ||
ntype_cache = { '[object Object]' : 'object' }, randy = Math.random, re_global = /global|window/i, | ||
re_guid = /[xy]/g, re_lib = new RegExp( '^\\u005E?' + Name ), | ||
re_name = /[\s\(]*function([^\(]+).*/, re_vendor = /^[Ww]ebkit|[Mm]oz|O|[Mm]s|[Kk]html(.*)$/, | ||
slice = Array.prototype.slice, tpl_guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx', | ||
xcache = { | ||
'Array' : [], 'Boolean' : [], 'Date' : [], 'Function' : [], | ||
@@ -103,3 +105,3 @@ 'Number' : [], 'Object' : [], 'RegExp' : [], 'String' : [] | ||
ntype = nativeType( desc ); | ||
mode = ntype != 'object' && defined ? Object.getOwnPropertyDescriptor( item, name ) : null; | ||
mode = ntype != 'object' && defined ? description( item, name ) : null; | ||
!mode || ( mode = ntype == 'function' ? modes.cw : modes.cew ); | ||
@@ -131,2 +133,5 @@ } | ||
} | ||
function description( item, property ) { | ||
return Object.getOwnPropertyDescriptor( item, property ); | ||
} | ||
@@ -238,3 +243,6 @@ function empty( item ) { return !exists( item ) || ( !len( item ) && iter( item ) ) || false; } | ||
if ( !!~property.indexOf( '.' ) ) { | ||
if ( test( item, property ) ) | ||
return true; | ||
if ( typeof item != 'string' && !!~property.indexOf( '.' ) ) { | ||
property = property.split( '.' ); | ||
@@ -252,3 +260,3 @@ | ||
return test( item, property ); | ||
return false; | ||
} | ||
@@ -283,14 +291,20 @@ | ||
function nativeType( item ) { | ||
var ntype = tostr( item ); | ||
if ( ntype in types ) return types[ntype]; // check the cached types first | ||
return ( types[ntype] = ntype.split( ' ' )[1].split( ']' )[0].replace( re_vendor, '$1' ).toLowerCase() ); | ||
var native_type = tostr( item ); | ||
if ( native_type in ntype_cache ) return ntype_cache[native_type]; // check the ntype_cache first | ||
return ( ntype_cache[native_type] = native_type.split( ' ' )[1].split( ']' )[0].replace( re_vendor, '$1' ).toLowerCase() ); | ||
} | ||
function type( item ) { | ||
return item === null || item === UNDEF | ||
? false | ||
: got( item, __type__ ) | ||
? item[__type__] | ||
: Object.getPrototypeOf( item ) === null | ||
? 'nullobject' | ||
: UNDEF; | ||
if ( item === null || item === UNDEF ) | ||
return false; | ||
var t = got( item, __type__ ) | ||
? item[__type__] : Object.getPrototypeOf( item ) === null | ||
? 'nullobject' : UNDEF; | ||
return t !== 'object' | ||
? t | ||
: ( property_exists( has, item, 'configurable', 'enumerable', 'writable' ) && has( item, 'value' ) | ||
|| property_exists( has, item, 'get', 'set' ) ) | ||
? 'descriptor' | ||
: t; | ||
} | ||
@@ -472,10 +486,10 @@ | ||
// properties | ||
ENV : ENV, global : { value : root }, modes : { value : modes }, | ||
ENV : ENV, global : { value : root }, modes : { value : modes }, | ||
// methods | ||
bless : bless, coerce : coerce, copy : copy, def : def, defs : defs, | ||
describe : describe, empty : empty, exists : exists, expose : expose, | ||
got : property_exists.bind( null, got ), guid : guid, has : property_exists.bind( null, has ), | ||
id : id, iter : iter, len : len, merge : merge, nativeType : nativeType, | ||
noop : noop, obj : obj, range : range, remove : remove, tostr : tostr, | ||
type : type, update : update, valof : valof, x : x | ||
bless : bless, coerce : coerce, copy : copy, def : def, defs : defs, | ||
describe : describe, description : description, empty : empty, exists : exists, expose : expose, | ||
got : property_exists.bind( null, got ), guid : guid, has : property_exists.bind( null, has ), | ||
id : id, iter : iter, len : len, merge : merge, nativeType : nativeType, | ||
noop : noop, ntype : nativeType, obj : obj, range : range, remove : remove, | ||
tostr : tostr, type : type, update : update, valof : valof, x : x | ||
}, 'w' ); | ||
@@ -482,0 +496,0 @@ |
@@ -1,1 +0,1 @@ | ||
!function(e,t,n){"use strict";function N(e){return e}function C(e,t){switch(st(e)){case"array":break;case"string":e=e.split(".");break;default:return k(t)}y.test(e[0])&&(t=N,e.shift());if(!e.length)return k(t);e[0].indexOf("^")||(t||e[0]=="^"?e.shift():e[0]=e[0].substring(1)),t=k(t);var n;while(n=e.shift())t=t[n]||(t[n]=Q());return t}function k(t){return s=="commonjs"?t?z(t)?t.exports:t:module.exports:t||e}function L(e){var t=Number(e),n;return isNaN(t)?(n=String(e))in f?f[n]:e:t}function A(e,t,n){n=n===!0,t||(t=e,e=Q());for(var r in t)!q(t,r)||n&&q(e,r)||(e[r]=t[r]);return e}function O(e,n,r){var i=E.call(arguments,3),s=j(e,n),o,u,a,f;switch(st(i[0])){case"string":u=d[i.shift()];break;case"object":u=i.shift();break;default:a=st(r),u=a!="object"&&s?Object.getOwnPropertyDescriptor(e,n):null,!u||(u=a=="function"?d.cw:d.cew)}return f=i.shift()===!0,o=i.shift()===!0,s&&!f?o&&new Error(t+".def cannot overwrite existing property: "+n+", in item type: "+ot(e)+"."):(a!="object"&&u&&(r=_(r,u)),(r.get||r.set)&&delete r.writable,Object.defineProperty(e,n,r)),N}function M(e,t,n,r,i){n||(n="cw");for(var s in t)!q(t,s)||O(e,s,t[s],n,r,i);return N}function _(e,t){return A(st(e)=="object"?e:{value:e},st(t)=="object"?t:d[String(t).toLowerCase()]||d.cew,!0)}function D(e){return!P(e)||!X(e)&&W(e)||!1}function P(e){return!(e===null||e===u||typeof e=="number"&&isNaN(e))}function H(t,n,i){typeof n!="string"&&t[r]&&(i=n,n=t[r]);if(s=="commonjs"&&z(i))i.exports=t;else{i||(i=e);var o=i[n],u=_({value:t},"ew");o&&W(o)?O(t=o,"__",u):O(i,n,u)}return i=Q(),i[r]=n,i[__type__]="library",M(t,i,"w",!0),t}function B(e){return e.name||e.displayName||(String(e).match(b)||["",""])[1].trim()}function j(e,t){return String(t)in Object(e)}function F(){return S.replace(g,I)}function I(e){var t=v()*16|0;return(e=="x"?t:t&3|8).toString(16)}function q(e,t){return o.hasOwnProperty.call(Object(e),String(t))}function R(e,t){return e?j(e,"id")&&!D(e.id)?e.id:e.id=U(t):U(t)}function U(e){return(e||p)+"-"+ ++h}function z(e){if(a===null)return!1;try{return e instanceof a}catch(t){return!1}}function W(e){return j(e,"length")||st(e)=="object"}function X(e){return("length"in(e=Object(e))?e:Object.keys(e)).length}function V(e,t){var n;if(!t)switch(n=st(e)){case"array":case"object":t=e,e=new(t.constructor||Object);break;default:return e}else n=st(t);switch(n){case"object":return Object.keys(t).reduce(J,{source:t,target:e}).target;case"array":return e.length=t.length,t.reduce($,e);default:return t}}function $(e,t,n){return e[n]=st(e[n])===st(t)?V(e[n],t):V(t),e}function J(e,t){return e.target[t]=st(e.target[t])===st(e.source[t])?V(e.target[t],e.source[t]):V(e.source[t]),e}function K(){}function Q(e){var t=Object.create(null);return typeof e=="object"?A(t,e):t}function G(e,t,n){var r;n=String(n);if(arguments.length>3){n=E.call(arguments,2);while(r=n.shift())if(G(e,t,r))return!0;return!1}if(!~n.indexOf("."))return e(t,n);n=n.split(".");while(r=n.shift()){if(!G(e,t,r))return!1;t=t[r]}return!0}function Y(e,t){var n=[e];while(++e<=t)n.push(e);return n}function Z(e,t){t=Array.isArray(t)?t:E.call(arguments,1);var n=Array.isArray(e)?et:tt;return t.forEach(n,e),e}function et(e){var t=this.indexOf(e);t=~t?t:!isNaN(e)&&e in this?e:t,t<0||this.splice(t,1)}function tt(e){delete this[e]}function nt(e){return o.toString.call(e)}function rt(e){return o.valueOf.call(e)}function it(e){return e==c?c:e==l||e=="nodelist"?l:!e.indexOf("htm")&&e.lastIndexOf("element")+7===e.length?"htmlelement":!1}function st(e){var t=nt(e);return t in x?x[t]:x[t]=t.split(" ")[1].split("]")[0].replace(w,"$1").toLowerCase()}function ot(e){return e===null||e===u?!1:j(e,__type__)?e[__type__]:Object.getPrototypeOf(e)===null?"nullobject":u}function ut(e,t){if(!t)return V(e);switch(st(t)){case"object":return Object.keys(t).reduce(ft,{source:t,target:e}).target;case"array":return t.reduce(at,e);default:return e}}function at(e,t,n){return e[n]=j(e,n)?st(e[n])==st(t)?ut(e[n],t):e[n]:V(t),e}function ft(e,t){return e.target[t]=j(e.target,t)?st(e.target[t])==st(e.source[t])?ut(e.target[t],e.source[t]):e.target[t]:V(e.source[t]),e}function lt(){return E.call(arguments).forEach(ht),N}function ct(e){e(this,N)}function ht(e){j(e,i)||O(e,i,0,"w");var t=T[e[r]||B(e)];if(!t)return;t.slice(e[i]).forEach(ct,e),e[i]=t.length}typeof global=="undefined"?e:e=global;var r="__name__",__type__="__type__",i="__xid__",s=typeof module!="undefined"&&"exports"in module&&typeof require=="function"?"commonjs":typeof navigator!="undefined"?"browser":"other",o=Object.prototype,u,a=s!="commonjs"?null:require("module"),f=[!1,NaN,null,!0,u].reduce(function(e,t){return e[String(t)]=t,e},Q()),l="htmlcollection",c="htmldocument",h=999,p="anon",d=function(){var e={ce:"ec",cw:"wc",ew:"we",cew:"cwe ecw ewc wce wec".split(" ")},t="configurable enumerable writable".split(" "),n={c:[!0,!1,!1],ce:[!0,!0,!1],cew:[!0,!0,!0],cw:[!0,!1,!0],e:[!1,!0,!1],ew:[!1,!0,!0],r:[!1,!1,!1],w:[!1,!1,!0]},r=Object.keys(n).reduce(function(r,i){function s(e){r[e]=r[i]}var o=e[i];return r[i]=t.reduce(function(e,t,r){return e[t]=n[i][r],e},Q()),!o||(Array.isArray(o)?o.forEach(s):s(o)),r},Q());return delete r[u],r}(),v=Math.random,m=/global|window/i,g=/[xy]/g,y=new RegExp("^\\u005E?"+t),b=/[\s\(]*function([^\(]+).*/,w=/^[Ww]ebkit|[Mm]oz|O|[Mm]s|[Kk]html(.*)$/,E=Array.prototype.slice,S="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",x={"[object Object]":"object"},T={Array:[],Boolean:[],Date:[],Function:[],Number:[],Object:[],RegExp:[],String:[]};O(lt,"cache",function(e,t){return typeof e=="string"||(e=e[r]||B(e)),T[e]||(T[e]=[]),T[e].push(t),N},"w"),lt.cache("Array",function(e){O(e,"coerce",function(e,t,n){return j(e,"length")?(t=ot(t)=="number"?t>0?t:0:0,n=ot(n)=="number"?n>t?n:n<=0?e.length+n:t+n:e.length,E.call(e,t,n)):[e]},"w"),O(e.prototype,"find",function(e,t){var n=-1,r=this.length>>>0;t||(t=this);while(++n<r)if(!!e.call(t,this[n],n,this))return this[n];return null},"w")}),lt.cache("Boolean",function(e){O(e,"coerce",function(e){switch(ot(e)){case"boolean":return e;case"nan":case!1:return!1;case"number":case"string":return e in f?!!f[e]:Number(e)!==0}return!0},"w")}),lt.cache("Function",function(e){function t(e){return!e||e in o}function n(){return this.toString()}function i(){return this}var s="__xname__",o={Anonymous:!0,anonymous:!0},u={mimic:function(e,t){var r=e.valueOf();return M(this,{displayName:t||B(r),toString:n.bind(r),valueOf:i.bind(r)},"c",!0),this}};u[r]={get:function(){if(!this[s]){var e=this.valueOf(),n=e!==this?t(e[r])?null:e[r]:null,i=n||B(this);!t(i)||t(this.displayName)||(i=this.displayName),O(this,s,i||"anonymous","w")}return this[s]}},M(e.prototype,u,"w"),O(e,"anon_list",{value:o},"w")}),lt.cache("Object",function(e){O(e.prototype,__type__,A({get:function(){var e,t=this,n=t.constructor,i=st(t),s=it(i)||(m.test(i)?"global":!1);return s?s:i=="number"?isNaN(t)?"nan":"number":i=="object"&&typeof n=="function"&&n[__type__]!="function"?(e=String(n[r]).toLowerCase(),!e||e=="anonymous"?n[__type__]||i:e):i}},d.r)),M(e,{key:function(t,n){return e.keys(e(t)).find(function(e){return t[e]===n})},reduce:function(t,n,r){return e.keys(e(t)).reduce(function(e,r,i){return e=n.call(t,e,t[r],r,t,i),e},r)},value:function(t,n){if(isNaN(n)){if(j(t,n))return t[n];if(!!~n.indexOf(".")){var r;n=n.split(".");while(r=n.shift())if((t=e.value(t,r))===u)break;return t}}return D(t)?u:P(t[n])?t[n]:typeof t.get=="function"?t.get(n):typeof t.getAttribute=="function"?t.getAttribute(n):u},values:function(t){return e.keys(Object(t)).map(function(e){return t[e]})}},"w")}),W(n)||(n=s=="commonjs"?module:e),M(N=H(N,t,n),{ENV:s,global:{value:e},modes:{value:d},bless:C,coerce:L,copy:A,def:O,defs:M,describe:_,empty:D,exists:P,expose:H,got:G.bind(null,j),guid:F,has:G.bind(null,q),id:R,iter:W,len:X,merge:V,nativeType:st,noop:K,obj:Q,range:Y,remove:Z,tostr:nt,type:ot,update:ut,valof:rt,x:lt},"w"),lt(Object,Array,Boolean,Function)}(this,"m8") | ||
!function(e,t,n){"use strict";function N(e){return e}function C(e,t){switch(ot(e)){case"array":break;case"string":e=e.split(".");break;default:return k(t)}b.test(e[0])&&(t=N,e.shift());if(!e.length)return k(t);e[0].indexOf("^")||(t||e[0]=="^"?e.shift():e[0]=e[0].substring(1)),t=k(t);var n;while(n=e.shift())t=t[n]||(t[n]=G());return t}function k(t){return s=="commonjs"?t?W(t)?t.exports:t:module.exports:t||e}function L(e){var t=Number(e),n;return isNaN(t)?(n=String(e))in f?f[n]:e:t}function A(e,t,n){n=n===!0,t||(t=e,e=G());for(var r in t)!R(t,r)||n&&R(e,r)||(e[r]=t[r]);return e}function O(e,n,r){var i=S.call(arguments,3),s=F(e,n),o,u,a,f;switch(ot(i[0])){case"string":u=d[i.shift()];break;case"object":u=i.shift();break;default:a=ot(r),u=a!="object"&&s?D(e,n):null,!u||(u=a=="function"?d.cw:d.cew)}return f=i.shift()===!0,o=i.shift()===!0,s&&!f?o&&new Error(t+".def cannot overwrite existing property: "+n+", in item type: "+ut(e)+"."):(a!="object"&&u&&(r=_(r,u)),(r.get||r.set)&&delete r.writable,Object.defineProperty(e,n,r)),N}function M(e,t,n,r,i){n||(n="cw");for(var s in t)!R(t,s)||O(e,s,t[s],n,r,i);return N}function _(e,t){return A(ot(e)=="object"?e:{value:e},ot(t)=="object"?t:d[String(t).toLowerCase()]||d.cew,!0)}function D(e,t){return Object.getOwnPropertyDescriptor(e,t)}function P(e){return!H(e)||!V(e)&&X(e)||!1}function H(e){return!(e===null||e===u||typeof e=="number"&&isNaN(e))}function B(t,n,i){typeof n!="string"&&t[r]&&(i=n,n=t[r]);if(s=="commonjs"&&W(i))i.exports=t;else{i||(i=e);var o=i[n],u=_({value:t},"ew");o&&X(o)?O(t=o,"__",u):O(i,n,u)}return i=G(),i[r]=n,i[__type__]="library",M(t,i,"w",!0),t}function j(e){return e.name||e.displayName||(String(e).match(w)||["",""])[1].trim()}function F(e,t){return String(t)in Object(e)}function I(){return x.replace(y,q)}function q(e){var t=m()*16|0;return(e=="x"?t:t&3|8).toString(16)}function R(e,t){return o.hasOwnProperty.call(Object(e),String(t))}function U(e,t){return e?F(e,"id")&&!P(e.id)?e.id:e.id=z(t):z(t)}function z(e){return(e||p)+"-"+ ++h}function W(e){if(a===null)return!1;try{return e instanceof a}catch(t){return!1}}function X(e){return F(e,"length")||ot(e)=="object"}function V(e){return("length"in(e=Object(e))?e:Object.keys(e)).length}function $(e,t){var n;if(!t)switch(n=ot(e)){case"array":case"object":t=e,e=new(t.constructor||Object);break;default:return e}else n=ot(t);switch(n){case"object":return Object.keys(t).reduce(K,{source:t,target:e}).target;case"array":return e.length=t.length,t.reduce(J,e);default:return t}}function J(e,t,n){return e[n]=ot(e[n])===ot(t)?$(e[n],t):$(t),e}function K(e,t){return e.target[t]=ot(e.target[t])===ot(e.source[t])?$(e.target[t],e.source[t]):$(e.source[t]),e}function Q(){}function G(e){var t=Object.create(null);return typeof e=="object"?A(t,e):t}function Y(e,t,n){var r;n=String(n);if(arguments.length>3){n=S.call(arguments,2);while(r=n.shift())if(Y(e,t,r))return!0;return!1}if(e(t,n))return!0;if(typeof t=="string"||!~n.indexOf("."))return!1;n=n.split(".");while(r=n.shift()){if(!Y(e,t,r))return!1;t=t[r]}return!0}function Z(e,t){var n=[e];while(++e<=t)n.push(e);return n}function et(e,t){t=Array.isArray(t)?t:S.call(arguments,1);var n=Array.isArray(e)?tt:nt;return t.forEach(n,e),e}function tt(e){var t=this.indexOf(e);t=~t?t:!isNaN(e)&&e in this?e:t,t<0||this.splice(t,1)}function nt(e){delete this[e]}function rt(e){return o.toString.call(e)}function it(e){return o.valueOf.call(e)}function st(e){return e==c?c:e==l||e=="nodelist"?l:!e.indexOf("htm")&&e.lastIndexOf("element")+7===e.length?"htmlelement":!1}function ot(e){var t=rt(e);return t in v?v[t]:v[t]=t.split(" ")[1].split("]")[0].replace(E,"$1").toLowerCase()}function ut(e){if(e===null||e===u)return!1;var t=F(e,__type__)?e[__type__]:Object.getPrototypeOf(e)===null?"nullobject":u;return t!=="object"?t:Y(R,e,"configurable","enumerable","writable")&&R(e,"value")||Y(R,e,"get","set")?"descriptor":t}function at(e,t){if(!t)return $(e);switch(ot(t)){case"object":return Object.keys(t).reduce(lt,{source:t,target:e}).target;case"array":return t.reduce(ft,e);default:return e}}function ft(e,t,n){return e[n]=F(e,n)?ot(e[n])==ot(t)?at(e[n],t):e[n]:$(t),e}function lt(e,t){return e.target[t]=F(e.target,t)?ot(e.target[t])==ot(e.source[t])?at(e.target[t],e.source[t]):e.target[t]:$(e.source[t]),e}function ct(){return S.call(arguments).forEach(pt),N}function ht(e){e(this,N)}function pt(e){F(e,i)||O(e,i,0,"w");var t=T[e[r]||j(e)];if(!t)return;t.slice(e[i]).forEach(ht,e),e[i]=t.length}typeof global=="undefined"?e:e=global;var r="__name__",__type__="__type__",i="__xid__",s=typeof module!="undefined"&&"exports"in module&&typeof require=="function"?"commonjs":typeof navigator!="undefined"?"browser":"other",o=Object.prototype,u,a=s!="commonjs"?null:require("module"),f=[!1,NaN,null,!0,u].reduce(function(e,t){return e[String(t)]=t,e},G()),l="htmlcollection",c="htmldocument",h=999,p="anon",d=function(){var e={ce:"ec",cw:"wc",ew:"we",cew:"cwe ecw ewc wce wec".split(" ")},t="configurable enumerable writable".split(" "),n={c:[!0,!1,!1],ce:[!0,!0,!1],cew:[!0,!0,!0],cw:[!0,!1,!0],e:[!1,!0,!1],ew:[!1,!0,!0],r:[!1,!1,!1],w:[!1,!1,!0]},r=Object.keys(n).reduce(function(r,i){function s(e){r[e]=r[i]}var o=e[i];return r[i]=t.reduce(function(e,t,r){return e[t]=n[i][r],e},G()),!o||(Array.isArray(o)?o.forEach(s):s(o)),r},G());return delete r[u],r}(),v={"[object Object]":"object"},m=Math.random,g=/global|window/i,y=/[xy]/g,b=new RegExp("^\\u005E?"+t),w=/[\s\(]*function([^\(]+).*/,E=/^[Ww]ebkit|[Mm]oz|O|[Mm]s|[Kk]html(.*)$/,S=Array.prototype.slice,x="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",T={Array:[],Boolean:[],Date:[],Function:[],Number:[],Object:[],RegExp:[],String:[]};O(ct,"cache",function(e,t){return typeof e=="string"||(e=e[r]||j(e)),T[e]||(T[e]=[]),T[e].push(t),N},"w"),ct.cache("Array",function(e){O(e,"coerce",function(e,t,n){return F(e,"length")?(t=ut(t)=="number"?t>0?t:0:0,n=ut(n)=="number"?n>t?n:n<=0?e.length+n:t+n:e.length,S.call(e,t,n)):[e]},"w"),O(e.prototype,"find",function(e,t){var n=-1,r=this.length>>>0;t||(t=this);while(++n<r)if(!!e.call(t,this[n],n,this))return this[n];return null},"w")}),ct.cache("Boolean",function(e){O(e,"coerce",function(e){switch(ut(e)){case"boolean":return e;case"nan":case!1:return!1;case"number":case"string":return e in f?!!f[e]:Number(e)!==0}return!0},"w")}),ct.cache("Function",function(e){function t(e){return!e||e in o}function n(){return this.toString()}function i(){return this}var s="__xname__",o={Anonymous:!0,anonymous:!0},u={mimic:function(e,t){var r=e.valueOf();return M(this,{displayName:t||j(r),toString:n.bind(r),valueOf:i.bind(r)},"c",!0),this}};u[r]={get:function(){if(!this[s]){var e=this.valueOf(),n=e!==this?t(e[r])?null:e[r]:null,i=n||j(this);!t(i)||t(this.displayName)||(i=this.displayName),O(this,s,i||"anonymous","w")}return this[s]}},M(e.prototype,u,"w"),O(e,"anon_list",{value:o},"w")}),ct.cache("Object",function(e){O(e.prototype,__type__,A({get:function(){var e,t=this,n=t.constructor,i=ot(t),s=st(i)||(g.test(i)?"global":!1);return s?s:i=="number"?isNaN(t)?"nan":"number":i=="object"&&typeof n=="function"&&n[__type__]!="function"?(e=String(n[r]).toLowerCase(),!e||e=="anonymous"?n[__type__]||i:e):i}},d.r)),M(e,{key:function(t,n){return e.keys(e(t)).find(function(e){return t[e]===n})},reduce:function(t,n,r){return e.keys(e(t)).reduce(function(e,r,i){return e=n.call(t,e,t[r],r,t,i),e},r)},value:function(t,n){if(isNaN(n)){if(F(t,n))return t[n];if(!!~n.indexOf(".")){var r;n=n.split(".");while(r=n.shift())if((t=e.value(t,r))===u)break;return t}}return P(t)?u:H(t[n])?t[n]:typeof t.get=="function"?t.get(n):typeof t.getAttribute=="function"?t.getAttribute(n):u},values:function(t){return e.keys(Object(t)).map(function(e){return t[e]})}},"w")}),X(n)||(n=s=="commonjs"?module:e),M(N=B(N,t,n),{ENV:s,global:{value:e},modes:{value:d},bless:C,coerce:L,copy:A,def:O,defs:M,describe:_,description:D,empty:P,exists:H,expose:B,got:Y.bind(null,F),guid:I,has:Y.bind(null,R),id:U,iter:X,len:V,merge:$,nativeType:ot,noop:Q,ntype:ot,obj:G,range:Z,remove:et,tostr:rt,type:ut,update:at,valof:it,x:ct},"w"),ct(Object,Array,Boolean,Function)}(this,"m8") |
@@ -14,3 +14,3 @@ { | ||
"engines" : { | ||
"node" : ">= 0.4.x" | ||
"node" : ">= 0.8.x" | ||
}, | ||
@@ -31,3 +31,3 @@ "keywords" : ["api", "framework", "functional", "javascript", "library", "programming", "utility"], | ||
}, | ||
"version" : "0.3.0" | ||
"version" : "0.3.1" | ||
} |
@@ -304,2 +304,5 @@ # m8.js [](http://travis-ci.org/constantology/m8) | ||
### m8.description( item:Object, property:String ):Object | ||
Shortened version for [Object.getOwnPropertyDescriptor](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor). | ||
### m8.empty( value:Mixed ):Boolean | ||
@@ -495,3 +498,3 @@ Returns `true` if the passed `value` does not exist (see `exist` below), is an empty Array, Object, String or any other enumerable type. | ||
### m8.nativeType( item:Mixed ):String | ||
### m8.nativeType( item:Mixed ):String (alias: m8.ntype) | ||
Returns the native `type` of the passed item. For normalised types use `m8.type`. | ||
@@ -519,2 +522,6 @@ | ||
m8.type( { enumerable : true, get : function() {} } ); // returns => "object" | ||
m8.type( m8.description( window, 'document' ) ); // returns => "object" | ||
m8.nativeType( {} ); // returns => "object" | ||
@@ -588,36 +595,40 @@ | ||
m8.type( null ); // returns => false | ||
m8.type( null ); // returns => false | ||
m8.type( undefined ); // returns => false | ||
m8.type( undefined ); // returns => false | ||
m8.type( [] ); // returns => "array" | ||
m8.type( [] ); // returns => "array" | ||
m8.type( true ); // returns => "boolean" | ||
m8.type( true ); // returns => "boolean" | ||
m8.type( new Date() ); // returns => "date" | ||
m8.type( new Date() ); // returns => "date" | ||
m8.type( function() {} ); // returns => "function" | ||
m8.type( { enumerable : true, get : function() {} } ); // returns => "descriptor" | ||
m8.type( 0 ); // returns => "number" | ||
m8.type( m8.description( window, 'document' ) ); // returns => "descriptor" | ||
m8.type( NaN ); // returns => "nan" | ||
m8.type( function() {} ); // returns => "function" | ||
m8.type( {} ); // returns => "object" | ||
m8.type( 0 ); // returns => "number" | ||
m8.type( Object.create( null ) ); // returns => "nullobject" | ||
m8.type( NaN ); // returns => "nan" | ||
m8.type( /.*/ ); // returns => "regexp" | ||
m8.type( Object.create( null ) ); // returns => "nullobject" | ||
m8.type( '' ); // returns => "string" | ||
m8.type( {} ); // returns => "object" | ||
m8.type( document.createElement( 'div' ) ); // returns => "htmlelement" | ||
m8.type( /.*/ ); // returns => "regexp" | ||
m8.type( document.querySelectorAll( 'div' ) ); // returns => "htmlcollection" | ||
m8.type( '' ); // returns => "string" | ||
m8.type( document.getElementsByTagName( 'div' ) ); // returns => "htmlcollection" | ||
m8.type( document.createElement( 'div' ) ); // returns => "htmlelement" | ||
m8.type( global ); // returns => "global" | ||
m8.type( document.querySelectorAll( 'div' ) ); // returns => "htmlcollection" | ||
m8.type( window ); // returns => "global" | ||
m8.type( document.getElementsByTagName( 'div' ) ); // returns => "htmlcollection" | ||
m8.type( global ); // returns => "global" | ||
m8.type( window ); // returns => "global" | ||
``` | ||
@@ -873,2 +884,7 @@ | ||
## File size | ||
- m8.js ≅ 6kb (gzipped) | ||
- m8.min.js ≅ 3.3kb (minzipped) | ||
## License | ||
@@ -875,0 +891,0 @@ |
@@ -5,12 +5,12 @@ iter( PACKAGE ) || ( PACKAGE = ENV == 'commonjs' ? module : root ); | ||
// properties | ||
ENV : ENV, global : { value : root }, modes : { value : modes }, | ||
ENV : ENV, global : { value : root }, modes : { value : modes }, | ||
// methods | ||
bless : bless, coerce : coerce, copy : copy, def : def, defs : defs, | ||
describe : describe, empty : empty, exists : exists, expose : expose, | ||
got : property_exists.bind( null, got ), guid : guid, has : property_exists.bind( null, has ), | ||
id : id, iter : iter, len : len, merge : merge, nativeType : nativeType, | ||
noop : noop, obj : obj, range : range, remove : remove, tostr : tostr, | ||
type : type, update : update, valof : valof, x : x | ||
bless : bless, coerce : coerce, copy : copy, def : def, defs : defs, | ||
describe : describe, description : description, empty : empty, exists : exists, expose : expose, | ||
got : property_exists.bind( null, got ), guid : guid, has : property_exists.bind( null, has ), | ||
id : id, iter : iter, len : len, merge : merge, nativeType : nativeType, | ||
noop : noop, ntype : nativeType, obj : obj, range : range, remove : remove, | ||
tostr : tostr, type : type, update : update, valof : valof, x : x | ||
}, 'w' ); | ||
x( Object, Array, Boolean, Function ); |
@@ -47,3 +47,3 @@ function __lib__( val ) { return val; } | ||
ntype = nativeType( desc ); | ||
mode = ntype != 'object' && defined ? Object.getOwnPropertyDescriptor( item, name ) : null; | ||
mode = ntype != 'object' && defined ? description( item, name ) : null; | ||
!mode || ( mode = ntype == 'function' ? modes.cw : modes.cew ); | ||
@@ -75,2 +75,5 @@ } | ||
} | ||
function description( item, property ) { | ||
return Object.getOwnPropertyDescriptor( item, property ); | ||
} | ||
@@ -182,3 +185,6 @@ function empty( item ) { return !exists( item ) || ( !len( item ) && iter( item ) ) || false; } | ||
if ( !!~property.indexOf( '.' ) ) { | ||
if ( test( item, property ) ) | ||
return true; | ||
if ( typeof item != 'string' && !!~property.indexOf( '.' ) ) { | ||
property = property.split( '.' ); | ||
@@ -196,3 +202,3 @@ | ||
return test( item, property ); | ||
return false; | ||
} | ||
@@ -227,14 +233,20 @@ | ||
function nativeType( item ) { | ||
var ntype = tostr( item ); | ||
if ( ntype in types ) return types[ntype]; // check the cached types first | ||
return ( types[ntype] = ntype.split( ' ' )[1].split( ']' )[0].replace( re_vendor, '$1' ).toLowerCase() ); | ||
var native_type = tostr( item ); | ||
if ( native_type in ntype_cache ) return ntype_cache[native_type]; // check the ntype_cache first | ||
return ( ntype_cache[native_type] = native_type.split( ' ' )[1].split( ']' )[0].replace( re_vendor, '$1' ).toLowerCase() ); | ||
} | ||
function type( item ) { | ||
return item === null || item === UNDEF | ||
? false | ||
: got( item, __type__ ) | ||
? item[__type__] | ||
: Object.getPrototypeOf( item ) === null | ||
? 'nullobject' | ||
: UNDEF; | ||
if ( item === null || item === UNDEF ) | ||
return false; | ||
var t = got( item, __type__ ) | ||
? item[__type__] : Object.getPrototypeOf( item ) === null | ||
? 'nullobject' : UNDEF; | ||
return t !== 'object' | ||
? t | ||
: ( property_exists( has, item, 'configurable', 'enumerable', 'writable' ) && has( item, 'value' ) | ||
|| property_exists( has, item, 'get', 'set' ) ) | ||
? 'descriptor' | ||
: t; | ||
} | ||
@@ -241,0 +253,0 @@ |
@@ -11,4 +11,7 @@ // if ENV === commonjs we want root to be global | ||
Module = ENV != 'commonjs' ? null : require( 'module' ), | ||
force = [false, NaN, null, true, UNDEF].reduce( function( res, val ) { res[String( val )] = val; return res; }, obj() ), | ||
htmcol = 'htmlcollection', htmdoc = 'htmldocument', id_count = 999, id_prefix = 'anon', | ||
force = [false, NaN, null, true, UNDEF].reduce( function( res, val ) { | ||
res[String( val )] = val; return res; | ||
}, obj() ), | ||
htmcol = 'htmlcollection', htmdoc = 'htmldocument', | ||
id_count = 999, id_prefix = 'anon', | ||
// this is a Map of all the different combinations of permissions for assigning property descriptors using Object.defineProperty | ||
@@ -41,10 +44,9 @@ modes = function() { | ||
}(), | ||
randy = Math.random, re_global = /global|window/i, | ||
re_guid = /[xy]/g, re_lib = new RegExp( '^\\u005E?' + Name ), | ||
re_name = /[\s\(]*function([^\(]+).*/, re_vendor = /^[Ww]ebkit|[Mm]oz|O|[Mm]s|[Kk]html(.*)$/, | ||
slice = Array.prototype.slice, tpl_guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx', | ||
types = { '[object Object]' : 'object' }, | ||
xcache = { | ||
ntype_cache = { '[object Object]' : 'object' }, randy = Math.random, re_global = /global|window/i, | ||
re_guid = /[xy]/g, re_lib = new RegExp( '^\\u005E?' + Name ), | ||
re_name = /[\s\(]*function([^\(]+).*/, re_vendor = /^[Ww]ebkit|[Mm]oz|O|[Mm]s|[Kk]html(.*)$/, | ||
slice = Array.prototype.slice, tpl_guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx', | ||
xcache = { | ||
'Array' : [], 'Boolean' : [], 'Date' : [], 'Function' : [], | ||
'Number' : [], 'Object' : [], 'RegExp' : [], 'String' : [] | ||
}; |
@@ -224,13 +224,17 @@ typeof m8 !== 'undefined' || ( m8 = require( '../m8' ) ); | ||
expect( m8.nativeType( null ) ).to.equal( 'null' ); | ||
expect( m8.nativeType( undefined ) ).to.equal( 'undefined' ); | ||
expect( m8.ntype( undefined ) ).to.equal( 'undefined' ); | ||
expect( m8.nativeType( [] ) ).to.equal( 'array' ); | ||
expect( m8.nativeType( true ) ).to.equal( 'boolean' ); | ||
expect( m8.ntype( true ) ).to.equal( 'boolean' ); | ||
expect( m8.nativeType( new Date() ) ).to.equal( 'date' ); | ||
expect( m8.nativeType( function() {} ) ).to.equal( 'function' ); | ||
expect( m8.ntype( function() {} ) ).to.equal( 'function' ); | ||
expect( m8.nativeType( 0 ) ).to.equal( 'number' ); | ||
expect( m8.nativeType( NaN ) ).to.equal( 'number' ); | ||
expect( m8.ntype( NaN ) ).to.equal( 'number' ); | ||
expect( m8.nativeType( { get : function() {} } ) ).to.equal( 'object' ); | ||
expect( m8.ntype( { set : function() {} } ) ).to.equal( 'object' ); | ||
expect( m8.nativeType( m8.describe( 'foo', 'ce' ) ) ).to.equal( 'object' ); | ||
expect( m8.ntype( m8.description( Array.prototype, 'join' ) ) ).to.equal( 'object' ); | ||
expect( m8.nativeType( {} ) ).to.equal( 'object' ); | ||
expect( m8.nativeType( Object.create( null ) ) ).to.equal( 'object' ); | ||
expect( m8.ntype( Object.create( null ) ) ).to.equal( 'object' ); | ||
expect( m8.nativeType( /.*/ ) ).to.equal( 'regexp' ); | ||
expect( m8.nativeType( '' ) ).to.equal( 'string' ); | ||
expect( m8.ntype( '' ) ).to.equal( 'string' ); | ||
@@ -284,2 +288,6 @@ done(); | ||
expect( m8.type( new Date() ) ).to.equal( 'date' ); | ||
expect( m8.type( { get : function() {} } ) ).to.equal( 'descriptor' ); | ||
expect( m8.type( { set : function() {} } ) ).to.equal( 'descriptor' ); | ||
expect( m8.type( m8.describe( 'foo', 'ce' ) ) ).to.equal( 'descriptor' ); | ||
expect( m8.type( m8.description( Array.prototype, 'join' ) ) ).to.equal( 'descriptor' ); | ||
expect( m8.type( function() {} ) ).to.equal( 'function' ); | ||
@@ -286,0 +294,0 @@ expect( m8.type( 0 ) ).to.equal( 'number' ); |
99310
2.59%1165
2.64%896
1.82%