This repository has been archived by the owner on Dec 12, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jfork-2.0.min.js
2 lines (2 loc) · 11.3 KB
/
jfork-2.0.min.js
1
2
/*! jfork v2.0 | (c) 2011, 2013 Adam Jeffries | https://github.com/JeffriesCo/JFork/blob/master/LICENSE */
(function(z,A){if(!Object.defineProperty){throw new Error("jfork is not supported");return}var B=function(){return B.Class.apply(null,Array.prototype.slice.call(arguments))};var C=z.jfork;z.jfork=B;B.noConflict=function(){z.jfork=C;return B};B.onError=function(a){throw new Error(a);};var D={};B.is=function(o){for(var t in D){if(t!="Variant"&&D[t](o)){return t}}return null};B.addTypeCheck=function(a,b){a=a.charAt(0).toUpperCase()+a.slice(1);D[a]=b;B.is[a]=b};B.hasTypeCheck=function(a){if(a in D){return true}return false};B.addTypeCheck("Number",function(o){return((o||o==0)&&!isNaN(o)&&o.constructor==Number)?true:false});B.addTypeCheck("Function",function(o){return(o instanceof Function)?true:false});B.addTypeCheck("NodeList",function(o){return(o&&D["Number"](o.length)&&D["Function"](o.item))?true:false});B.addTypeCheck("Date",function(o){return(o instanceof Date)?true:false});B.addTypeCheck("Element",function(o){return o&&((HTMLElement&&o instanceof HTMLElement)||"undefined"!==typeof o.childNodes||o.nodeType)?true:false});B.addTypeCheck("Array",function(o){return(o&&o.constructor==Array)?true:false});B.addTypeCheck("Object",function(o){return(o&&typeof o=="object"&&!D["Array"](o)&&!D["Element"](o)&&!D["Date"](o)&&!D["NodeList"](o)&&!D["RegExp"](o))?true:false});B.addTypeCheck("String",function(o){return(typeof o=='string')?true:false});B.addTypeCheck("Boolean",function(o){return(typeof o=="boolean")?true:false});B.addTypeCheck("RegExp",function(o){return(o&&o instanceof RegExp)?true:false});B.addTypeCheck("Integer",function(o){return(D["Number"](o)&&((o+"").indexOf(".")==-1))?true:false});B.addTypeCheck("Variant",function(o){return true});var E=function(a,b){return function(){return a.apply(b,Array.prototype.slice.call(arguments))}};var F=function(b,c,d,e){var f=b[c];var g=function(){return d.call(b,f)};var h=function(a){f=e.call(b,a);return f};Object.defineProperty(b,c,{get:g,set:h,configurable:true})};var G=function(o,a){if(!o){return}else if(o.constructor==Array){for(var i=0,len=o.length;i<len;i++){var b=a(i,o[i],o);if(b!==A){return b}}}else{for(var i in o){var b=a(i,o[i],o);if(b!==A){return b}}}return};B.Class=function(n,o){var p={privateStatic:null,publicStatic:null,signature:{constructors:[],variables:{},methods:{}},staticMapping:{variables:{},methods:{}},storage:{},instances:[],extend:o||null};var q=function(a,b,c){var d=E(a.value,b);G(c,function(i,v){v[a.variations[0].name]=d})};var r=function(b,c,d){var e=function(){return c[b.name]};var f=function(a){c[b.name]=a};if(b.type){f=function(a){if(b.isTypeArray){if(!B.is.Array(a)){B.onError(b.name+": is the wrong type. Expected a "+b.type+"[]")}for(var i=0;i<a.length;i++){if(!B.is[b.type](a[i])){B.onError(b.name+": is the wrong type. Expected a "+b.type+"[]")}}}else{if(!B.is[b.type](a)){B.onError(b.name+": is the wrong type. Expected a "+b.type)}}c[b.name]=a}}G(d,function(i,v){F(v,b.name,e,f)})};var s=function(a,b){if(b.params==null){return true}else if(b.isParamObject){if(a.length!=1){return false}else if(!B.is.Object(a[0])){return false}else{for(var i=0;i<b.params.length;i++){if(b.params[i].name in a[0]){if(b.params[i].type){if(b.params[i].isArray){if(B.is.Array(a[0][b.params[i].name])){for(var j=0;j<a[0][b.params[i].name].length;j++){if(!B.is[b.params[i].type](a[0][b.params[i].name][j])){return false}}}else{return false}}else if(!B.is[b.params[i].type](a[0][b.params[i].name])){return false}}}else{return false}}}}else{if(a.length!=b.params.length){return false}else{for(var i=0;i<a.length;i++){if(b.params[i].type){if(b.params[i].isArray){if(B.is.Array(a[i])){for(var j=0;j<a[i].length;j++){if(!B.is[b.params[i].type](a[i][j])){return false}}}else{return false}}else if(!B.is[b.params[i].type](a[i])){return false}}}}}return true};var t=function(d){if(d.length==1){var e=d[0].value;if(d[0].params){e=function(){var a=Array.prototype.slice.call(arguments);if(!s(a,d[0])){B.onError(d[0].name+": parameters passed do not match method signature")}return d[0].value.apply(this,a)}}if(d[0].isVoid){return function(){var a=e.apply(this,Array.prototype.slice.call(arguments));if(a!==A){B.onError(d[0].name+": is defined as void and cannot return a value.")}}}else if(d[0].type){return function(){var a=e.apply(this,Array.prototype.slice.call(arguments));if(d[0].isTypeArray){if(!B.is.Array(a)){B.onError(d[0].name+": must return type "+d[0].type+"[]")}for(var i=0;i<a.length;i++){if(!B.is[d[0].type](a[i])){B.onError(d[0].name+": must return type "+d[0].type+"[]")}}}else if(!B.is[d[0].type](a)){B.onError(d[0].name+": must return type "+d[0].type)}return a}}else{return e}}else{return function(){var a=Array.prototype.slice.call(arguments);var b=G(d,function(i,v){if(s(a,v)){return i}});if(!b===A){B.onError(d[b].name+": parameters passed do not match method signature")}var c=d[b].value.apply(this,a);if(d[b].isVoid){if(c!==A){B.onError(d[b].name+": is defined as void and cannot return a value.")}}else if(d[b].type){if(d[b].isTypeArray){if(!B.is.Array(c)){B.onError(d[b].name+": must return type "+d[b].type+"[]")}for(var i=0;i<c.length;i++){if(!B.is[d[b].type](c[i])){B.onError(d[b].name+": must return type "+d[b].type+"[]")}}}else if(!B.is[d[b].type](c)){B.onError(d[b].name+": must return type "+d[b].type)}}return c}}};var u=function(c,d){var e=c.split("(");var f=e[0].split(" ");var g={name:f[f.length-1],type:null,isTypeArray:false,isParamObject:false,params:null,isPrivate:(c.indexOf("private ")>-1)?true:false,isStatic:(c.indexOf("static ")>-1)?true:false,isVoid:(c.indexOf("void ")>-1)?true:false,value:d};if(f.length>1){var h=f[f.length-2];var j=false;if(h.indexOf("[]")>-1){j=true;h=h.replace("[]","")}if(B.hasTypeCheck(h)){g.isTypeArray=j;g.type=h;if(g.isVoid){B.onError(g.name+": cannot be both void and return a data type")}}}if(e.length==2){g.params=[];var k=e[1].split(")")[0];g.isParamObject=k.indexOf("{")>-1?true:false;k=k.replace("{","").replace("}","");var l=k.split(",");if(l.length>1||(l.length==1&&l[0]!="")){G(l,function(i,v){v=v.replace(/^\s+|\s+$/g,'');var a=v.split(" ");var b={name:a[a.length-1],type:"Variant",isArray:false};if(a.length==2){if(a[0].indexOf("[]")>-1){b.isArray=true;a[0]=a[0].replace("[]","")}if(B.hasTypeCheck(a[0])){b.type=a[0]}}g.params.push(b)});var m={};G(g.params,function(i,v){if(m[v.name]){B.onError(g.name+": cannot have two parameters with the same name ("+v.name+")")}m[v.name]=true})}}return g};var w=function(a,b){if(!a.params||!b.params){return true}else if(a.params.length==b.params.length&&a.isParamObject==b.isParamObject){for(var i=0;i<a.params.length;i++){if(a.params[i].type!=b.params[i].type&&a.params[i].type!=null&&a.params[i].type!="Variant"&&b.params[i].type!=null&&b.params[i].type!="Variant"){return false}}return true}else if(a.isArgsObject&&b.params.length==1&&(b.params[0].type==null||b.params[0].type=="Variant"||b.params[0].type=="Object")){return true}else if(b.isArgsObject&&a.params.length==1&&(a.params[0].type==null||a.params[0].type=="Variant"||a.params[0].type=="Object")){return true}return false};var x=function(){if(this instanceof x){return}var h=Array.prototype.slice.call(arguments);var j={publicDynamic:new p.publicStatic(),privateDynamic:E(x),dynamicMapping:{variables:{},methods:{}},storage:{}};p.instances.push(j);var k={};j.publicDynamic.define=function(a,b){if(B.is.Object(a)){G(a,function(i,v){j.publicDynamic.define(i,v)});return j.publicDynamic}var c=u(a,b);if(!B.is.Function(c.value)){j.storage[c.name]=c.value;var d=[j.privateDynamic];if(!c.isPrivate){d.push(j.publicDynamic)}r(c,j.storage,d)}else if(c.name=="construct"){}else{var e=[];if(p.signature.methods[c.name]){e=e.concat(p.signature.methods[c.name].variations)}if(k[c.name]){e=e.concat(k[c.name])}else{k[c.name]=[]}if(e.length>1){var f=G(e,function(i,v){if(w(c,v)){return true}});if(f){B.onError(c.name+": Cannot create two methods with the same signatures.")}}k[c.name].push(c);var g=t(e.concat([c]));var d=[j.privateDynamic];if(!c.isPrivate){d.push(j.publicDynamic)}q({value:g,variations:k[c.name]},j.privateDynamic,d)}return j.publicDynamic};if(p.extend){j.publicDynamic._super=j.privateDynamic._super=p.extend.publicStatic.apply(null,h);var l=function(c){if(!c){return}else if(c.extend){l(c.extend)}G(c.signature.methods,function(i,v){if(!p.signature.methods[i]){var a=[j.privateDynamic];if(!v.isPrivate){a.push(j.publicDynamic)}var b=c.staticMapping.methods[i];if(!v.isStatic){b=c.instances[c.instances.length-1].dynamicMapping.methods[i]}q(v,b,a)}});G(c.signature.variables,function(i,v){if(!p.signature.variables[i]){var a=[j.privateDynamic];if(!v.isPrivate){a.push(j.publicDynamic)}var b=c.staticMapping.variables[i];if(!v.isStatic){b=c.instances[c.instances.length-1].dynamicMapping.variables[i]}r(v,b,a)}})};l(p.extend)}G(p.signature.methods,function(i,v){var a=[j.privateDynamic];if(!v.variations[0].isPrivate){a.push(j.publicDynamic)}var b=p.staticMapping.methods[i];if(!v.variations[0].isStatic){j.dynamicMapping.methods[i]=j.privateDynamic;b=j.dynamicMapping.methods[i]}q(v,b,a)});G(p.signature.variables,function(i,v){var a=[j.privateDynamic];if(!v.isPrivate){a.push(j.publicDynamic)}var b=p.staticMapping.variables[i];if(!v.isStatic){j.dynamicMapping.variables[i]=j.storage;j.storage[i]=v.value;b=j.dynamicMapping.variables[i]}r(v,b,a)});var m=G(p.signature.constructors,function(i,v){if(s(h,v)){v.value.apply(j.privateDynamic,h);return true}});if(!m&&(p.signature.constructors.length>0||(p.signature.constructors.length==0&&h.length>0))){B.onError("No constructor found matching these parameters.")}return j.publicDynamic};p.publicStatic=x;p.privateStatic=E(x);p.publicStatic.prototype=o?new o.publicStatic():{};p.publicStatic.prototype.constructor=p.publicStatic;p.publicStatic.define=function(a,b){if(B.is.Object(a)){G(a,function(i,v){p.publicStatic.define(i,v)});return p.publicStatic}var c=u(a,b);if(!B.is.Function(c.value)){p.signature.variables[c.name]=c;if(c.isStatic){p.storage[c.name]=c.value;p.staticMapping.variables[c.name]=p.storage;var d=[p.privateStatic];if(!c.isPrivate){d.push(p.publicStatic)}r(c,p.storage,d)}}else if(c.name=="construct"){var e=G(p.signature.constructors,function(i,v){if(w(c,v)){return true}});if(e){B.onError("Cannot create two constructors with the same parameters.")}p.signature.constructors.push(c)}else{if(!p.signature.methods[c.name]){p.signature.methods[c.name]={value:function(){},variations:[]}}else{var e=G(p.signature.methods[c.name].variations,function(i,v){if(w(c,v)){return true}});if(e){B.onError(c.name+": Cannot create two methods with the same signatures.")}}p.signature.methods[c.name].variations.push(c);p.signature.methods[c.name].value=t(p.signature.methods[c.name].variations);if(c.isStatic){p.staticMapping.methods[c.name]=p.privateStatic;var d=[p.privateStatic];if(!c.isPrivate){d.push(p.publicStatic)}q(p.signature.methods[c.name],p.privateStatic,d)}}return p.publicStatic};p.publicStatic.extend=function(a){return B.Class(a,p)};p.publicStatic.define(n);var y=function(b){if(!b){return}else if(b.extend){y(b.extend)}G(b.signature.methods,function(i,v){if(v.variations[0].isStatic&&!p.signature.methods[i]){p.staticMapping.methods[i]=b.staticMapping.methods[i];var a=[p.privateStatic];if(!v.isPrivate){a.push(p.publicStatic)}q(v,p.staticMapping.methods[i],a)}});G(b.signature.variables,function(i,v){if(v.isStatic&&!p.signature.variables[i]){p.staticMapping.variables[i]=b.staticMapping.variables[i];var a=[p.privateStatic];if(!v.isPrivate){a.push(p.publicStatic)}r(v,p.staticMapping.variables[i],a)}})};y(p.extend);return p.publicStatic}})(window);