Commit 6d878e6e authored by Sergiu Gordienco's avatar Sergiu Gordienco
Browse files

Add Public Code of Application Prototype and Builder

parent cae7d6c1
var isBrowser=new Function("try {return this===window;}catch(e){ return false;}"),isNode=new Function("var isBrowser = false; try { isBrowser = this===window;}catch(e){ isBrowser = false;}; try {return !isBrowser && ( this ===global );}catch(e){console.error(e); return false;}");(function(){if(typeof window!=="undefined"){return window}else if(typeof global!=="undefined"){return global}else if(typeof APP_BUILDER_GLOBAL==="undefined"){throw new Error("Define APP_BUILDER_GLOBAL as global reference")}else{return APP_BUILDER_GLOBAL}})().ApplicationPrototype=function(e){function n(i,l,e){function o(e,r,n){var o=""+e,t={listenedBefore:!0,listenedOn:!0,listenedAfter:!0,allowInteruption:!0};return"string"==typeof n&&"all"!==n&&"default"!==n&&(t={listenedBefore:!1,listenedOn:!1,listenedAfter:!1,allowInteruption:!1},-1!==n.indexOf("light")&&(t.listenedOn=!0,t.allowInteruption=!0),-1!==n.indexOf("af")&&(t.listenedAfter=!0),-1!==n.indexOf("on")&&(t.listenedOn=!0),-1!==n.indexOf("st")&&(t.allowInteruption=!0),-1===n.indexOf("before")&&-1===n.indexOf("bf")||(t.listenedBefore=!0)),n&&"object"==typeof n&&function(e,n){var r;for(r in e)r in n&&typeof n[r]==typeof e[r]&&(e[r]=n[r])}(t,n),l[o]=function(){if(t.listenedBefore&&!1===i.emit("before"+o.replace(/^./,function(e){return e.toUpperCase()}),arguments,!1,!t.allowInteruption))return!1;if(t.listenedOn&&!1==!i.emit("on"+o.replace(/^./,function(e){return e.toUpperCase()}),arguments,!1,!t.allowInteruption))return!1;var e=(r||i[o]).apply(l,arguments);if(t.listenedAfter){var n=arguments;setTimeout(function(){if(!1==!i.emit("after"+o.replace(/^./,function(e){return e.toUpperCase()}),n,!1,!t.allowInteruption))return!1},1)}return e},l}var n,a={};for(n in i.on=function(e,n,r){if(e.match(/\s*\,\s*/))e.split(/\s*\,\s*/).forEach(function(e){(e=e.replace(/^\s+/,"").replace(/\s+$/,""))&&i.on(e,n,r)});else if(e=e.replace(/^\s+/,"").replace(/\s+$/,""))return"function"==typeof n&&(e in a||(a[e]={}),(r=r||"s"+(new Date).valueOf().toString(36)+"-"+Math.floor(1e7*Math.random()).toString(36))in a[e]&&delete a[e][r],a[e][r]=n,r)},i.once=function(e,n,r){var o;return o=i.on(e,function(){i.off(e,o),n.apply(this,arguments)},n)},i.off=function(e,n){if(e.match(/\s*\,\s*/))e.split(/\s*\,\s*/).forEach(function(e){(e=e.replace(/^\s+/,"").replace(/\s+$/,""))&&i.off(e,handler,n)});else if(e=e.replace(/^\s+/,"").replace(/\s+$/,"")){if(n){if(e in a&&n in a[e])return delete a[e][n],!0}else if(e in a){var r=!1;for(n in a[e])delete a[e][n],r=!0;return r}return!1}},i.emit=function(e,n,r,o){var t;if(e in a)for(t in a[e])try{if(!1===a[e][t].apply(r?l:i,n||[])&&!o)return!1}catch(e){console.error("Error detected: ",e)}},i.bind=function(e,n,r){return"function"==typeof e&&(r=n,e=(n=e).name),o(e,n,r)},i)-1===e.indexOf(n)&&o(n)}var r={},o=[],t={};if(r.crudEvents=function(){return n.apply(r,arguments)},"function"==typeof e){if(!1===e({},{},r,t,o))return r;n(r,t,o)}else n(r,t,o);return t};var isBrowser=new Function("try {return this===window;}catch(e){ return false;}"),isNode=new Function("var isBrowser = false; try { isBrowser = this===window;}catch(e){ isBrowser = false;}; try {return !isBrowser && ( this ===global );}catch(e){console.error(e); return false;}"),ApplicationBuilder=function(callback){var m_urlload=function(e,n){var r=new XMLHttpRequest;r.responseType="text",r.addEventListener("load",function(){n(e,r.responseText||r.response)}),r.open("GET",e,!0),r.send()},config,module_path="./constructors",vars,cacheSuffix=null,params={callback_ready:!1};callback&&"object"==typeof callback&&("function"==typeof callback.onready&&(params.callback_ready=callback.onready),callback="function"==typeof callback.onconstruct&&callback.onconstruct),isNode()&&(ApplicationPrototype=require("./ApplicationPrototype.js"));var Application=new ApplicationPrototype(function(e,n,r,o,t){vars=n,(config=e).cache_enabled=!1,config.debug_enabled=!1,"function"==typeof callback&&callback.apply(r,[n,e])}),er;if(Application.bind("isNode",function(){return isNode()},""),Application.bind("isBrowser",function(){return isBrowser()},""),Application.bind("Promise",function(e){function n(e){u&&(u=!1,l=e,a.forEach(function(e){c(e,l)}))}function r(e){u&&(u=!1,i=e,o.forEach(function(e){c(e,i)}))}var i=void 0,l=void 0,a=[],o=[],u=!0,c=function(e,n){try{e(n)}catch(e){console.error(e)}},s={then:function(t,e){return s.catch(e||function(e){console.error(e)}),Application.Promise(function(r,o){function e(e){var n;try{n=t(e),r(n)}catch(e){console.warn("Unchecked error in Promise"),console.error(e),o(e)}}s.catch(o),"function"==typeof t&&(u?a.push(e):void 0===i&&c(e,l))})},catch:function(e){return"function"==typeof e&&(u?o.push(e):void 0!==i&&c(e,i)),s},resolve:n,reject:r};try{"function"==typeof e&&e(n,r)}catch(i){console.warn("Promise Exception on constructor exeution: ",e),console.error(i),r(i)}return s}),Application.isBrowser()&&(window.Promise||(window.Promise=Application.Promise)),Application.Promise.reject=function(r){return new Application.Promise(function(e,n){n(r)})},Application.Promise.resolve=function(r){return new Application.Promise(function(e,n){e(r)})},Application.Promise.race=function(e){var n,r=new Application.Promise,o=!1;for(n=0;n<e.length;n++)e[n].then(function(e){o||(o=!0,r.resolve(e))},function(e){o||r.reject(e)});return r},Application.Promise.all=function(n){var r=new Application.Promise,o=[];for(i=0;i<n.length;i++)n[i].then(function(e){o.push(e),o.length===n.length&&r.resolve(o)},function(e){r.reject(e)});return r},Application.bind("cacheEnabled",function(e){return"boolean"==typeof e&&(config.cache_enabled=e),"string"==typeof e&&(cacheSuffix=e||null),config.cache_enabled}),Application.bind("debugEnabled",function(e){return"boolean"==typeof e&&(config.debug_enabled=e),config.debug_enabled}),Application.bind("modulePath",function(e){return e&&"string"==typeof module_path&&(module_path=e),module_path}),function(){var i={};Application.bind("moduleRegister",function(r,e){return"string"==typeof r&&Array.isArray(e)&&e.forEach(function(e){var n=Application.moduleResolve(e,r);i[n.name]=n,i["#"+e]=n}),i});Application.bind("moduleResolve",function(e,n){if(void 0===n&&(n=module_path),"#"+e in i)return i["#"+e];var r,o={store:{},$requestQuery:e,module_path:n,name:e,url:n+"/"+e.replace(/[\#\?].*$/,"")+".js",path:"",__dirname:""};if(e.match(/^(http|https|ws)\:\/\//))o.url=e;else if(e.match(/^\//)&&(o.url=e,!o.url.match(/((\.js)(\?.*|\#.*|))$/))){var t=o.url.match(/^(.*?)([\?|#].*|)$/);t?o.url=t[1]+".js"+t[2]:o.url+=".js"}return(r=e.match(/(\#[\?]{0,1}module\=|\?module\=|\&module\=)([a-z0-9A-Z][a-z0-9\_\.\-A-Z]*)/))&&r[2]&&(o.name=r[2]),o.name in i?i[o.name]:(o.path=o.url.replace(/(\.js|)(\?.*|\#.*|)$/,""),o.__dirname=o.path.replace(/\/[^\/]+$/,""),o)})}(),function(){var fs=!1;isNode()&&(fs=require("fs"));var module_cache={},module_requests={},require_cache={};Application.bind("require",function(module_name,callback){if("string"==typeof module_name){var moduleMeta=Application.moduleResolve(module_name,void 0),__dirname=moduleMeta.__dirname,$request,requireDownload;if(moduleMeta.name in require_cache)return callback&&callback(require_cache[moduleMeta.name].exports||null,void 0),require_cache[moduleMeta.name].$request;moduleMeta.path in module_requests?$request=module_requests[moduleMeta.path]:(requireDownload=!0,$request=new Application.Promise,module_requests[moduleMeta.path]=$request);var module={cache:function(){return module_cache[moduleMeta.path]=module_cache[moduleMeta.path]||{},module_cache[moduleMeta.path]},require:function(e,n){function r(e,n){return n.match(/^(http|https|ws)\:\/\//)&&(e.match(/((\.js)(\?.*|\#.*|))$/)||(e+=".js")),-1!==e.indexOf("::")?(e=e.split(/\s*\:\:\s*/))[0]+" :: "+n+"/"+e[1]:n+"/"+e}return"string"==typeof e?Application.require(r(e,moduleMeta.path),n):Array.isArray(e)?Application.require(e.map(function(e){return r(e,moduleMeta.path)}),n):void 0},resourceUrl:function(e){return moduleMeta.path+"/"+e},meta:moduleMeta,$request:$request};sb=void 0,Object.defineProperty(module,"exports",{get:function(){return sb||null},set:function(e){void 0===sb?(sb=e,(require_cache[moduleMeta.name]=module).$request.resolve(module.exports),callback&&callback(module.exports||null,void 0)):sb=e},enumerable:!0,configurable:!0});var global=Application;module.atime=(new Date).valueOf(),module.Application=function(){return Application||global||null};var module_url=moduleMeta.url+(Application.cacheEnabled()?"":(-1===moduleMeta.url.indexOf("?")?"?":"&")+"t="+(cacheSuffix||module.atime)),module_header=Application.debugEnabled()?"/**\n * Platform: ApplicationBuilder/ApplicationPrototype by Sergiu Gordienco Vasile\n * Module Name: "+module.meta.name+"\n * Module Url: "+module.meta.url+"\n */\n\n":"";return requireDownload?isNode()?fs.readFile(require("path").normalize((ub=module_url,ub.match(/^[a-z][a-z\d]*\:/)?ub:ub.replace(/\?.*/,""))),"utf8",function(err,module_text){err=void 0;try{eval(module_header+module_text)}catch(err){console.warn("Application Loading Module",module_url),console.error(err),module.$request.reject(err)}}):m_urlload(module_url,function(module_url,module_text){var err;try{eval(module_header+module_text)}catch(err){console.warn("Application Loading Module",module_url),console.error(err),module.$request.reject(err)}}):module.$request.then(function(e){callback&&callback(e||null,void 0)}).catch(function(e){console.warn("Application Loading Module",module_url),console.error(e)}),module.$request}if(Array.isArray(module_name)){var modules={},module_count=0,module_length=module_name.length,module_errors=[],$request=Application.Promise();return module_name.forEach(function(r){var e,o=!1;e=r.match(/^([a-zA-Z0-9\_\-\."]+)(\s*\:\:\s*)(.*?)$/),Array.isArray(e)&&"//"!==e[3].substr(0,2)&&(o=e[1],r=e[3]),Application.require(r,function(e,n){module_count+=1,modules[r]=e,o&&o!==r&&(modules[o]=e),n&&($request.reject(n),module_errors.push({module_name:r,error:n})),module_count===module_length&&(module_errors.length||$request.resolve(modules),callback&&callback(modules,module_errors))})}),$request}var ub,sb})}(),"function"==typeof params.callback_ready)try{params.callback_ready.apply(Application,[vars,config])}catch(er){console.warn("Application callbackReady error",er)}return Application};
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment