UNPKG

spallinsonjs

Version:

A Web App Framework

1 lines 31.4 kB
var _A_={Container:null,Content:null,Controllers:{},Services:{},Singletons:{},_R_:{},_I_:{},Setup:{init:function(){_A_.Setup.createAppContainer(),_A_.Setup.createAppContentContainer(),_A_.Setup.verifyCssTransitionSupport(),_A_.Setup.setDefaultSettingsValues(),_A_.Splash.init(function(){_A_.Setup.performInitialRouting()})},createAppContainer:function(){_A_.Container=document.createElement("SPAllinsonJS-App"),document.body.appendChild(_A_.Container)},createAppContentContainer:function(){_A_.Content=document.createElement("SPAllinsonJS-Content"),_A_.Content.setAttribute("id","_A_Content"),_A_.Content.className="_A_Content",_A_.Container.appendChild(_A_.Content)},verifyCssTransitionSupport:function(){_A_.Utils.isCssFeatureSupported("transition")||(_A_.Router.cssTransitionSupport=!1,_A_.Settings.splash&&(_A_.Settings.splash.doesFadeOut=!1))},setDefaultSettingsValues:function(){if(void 0===_A_.Settings.appRoot&&(_A_.Settings.appRoot="./"),void 0===_A_.Settings.splash&&(_A_.Settings.splash={enabled:!1}),void 0===_A_.Settings.fadeSpeedMills)_A_.Settings.fadeSpeedMills=500;else if(500!=_A_.Settings.fadeSpeedMills){var e=_A_.Settings.fadeSpeedMills/1e3,t=document.styleSheets[document.styleSheets.length-1];t.insertRule("._A_Fade_In { visibility: visible; opacity: 1; transition: visibility 0.0s, opacity "+e+"s; }",0),t.insertRule("._A_Fade_Out { visibility: hidden; opacity: 0; transition: visibility 0.0s "+e+"s, opacity "+e+"s; }",0)}void 0===_A_.Settings.historyEnabled&&(_A_.Settings.historyEnabled=!0),void 0===_A_.Settings.scriptManagementEnabled&&(_A_.Settings.scriptManagementEnabled=!1),void 0===_A_.Settings.routeRules&&(_A_.Settings.routeRules=[]),void 0===_A_.Settings.services&&(_A_.Settings.services={}),void 0===_A_.Settings.singletons&&(_A_.Settings.singletons={})},performInitialRouting:function(){var e;if(window.location.hash)e=window.location.hash;else{if(!_A_.Settings.initialRoute)return;e="#/"+_A_.Settings.initialRoute}_A_.Router.doReplaceHistoryItem=!0,_A_.Router.routeToHash(e,function(){_A_.Setup.cleanup()})},cleanup:function(){delete _A_.Preloader,delete _A_.Splash,delete _A_.Setup}}};_A_.Splash={callback:null,view:null,startPreloadTimestamp:null,init:function(e){_A_.Splash.callback=e,_A_.Settings.splash&&_A_.Settings.splash.enabled?_A_.Splash.create(function(){_A_.Splash.load(function(){_A_.Preloader.ServicesSingletons.preload(function(){_A_.Preloader.Components.preload(function(){_A_.Splash.applyShowForAtLeast(function(){_A_.Splash.dismiss(function(){_A_.Splash.callback()})})})})})}):_A_.Preloader.ServicesSingletons.preload(function(){_A_.Splash.callback()})},create:function(e){_A_.Splash.view=document.createElement("SPAllinsonJS-Splash"),_A_.Splash.view.className="_A_Splash",_A_.Container.appendChild(_A_.Splash.view),e()},load:function(e){_A_.Ajax.get(_A_.Settings.appRoot+_A_.Settings.splash.view,null,null,function(t){if(_A_.Settings.splash.imageSuffixForDevicePixelRatio){var n=String(window.devicePixelRatio),r=_A_.Settings.splash.imageSuffixForDevicePixelRatio[n];null!=r&&(t=t.replace(/.png/g,r+".png"),t=t.replace(/.jpg/g,r+".jpg"),t=t.replace(/.jpeg/g,r+".jpeg"),t=t.replace(/.gif/g,r+".gif"),t=t.replace(/.bmp/g,r+".bmp"))}return t.indexOf("_A_.Splash.loaded()")==-1?(_A_.Splash.view.innerHTML=t,_A_.Splash.startPreloadTimestamp=new Date,void e()):(t=t.replace("_A_.Splash.loaded()","_A_.Splash.loaded("+e+")"),void(_A_.Splash.view.innerHTML=t))},function(t){_A_.Splash.startPreloadTimestamp=new Date,e()},null)},loaded:function(e){_A_.Splash.startPreloadTimestamp=new Date,e()},applyShowForAtLeast:function(e){if(!_A_.Settings.splash.showForAtLeastMills)return void e();var t=(new Date).getTime()-_A_.Splash.startPreloadTimestamp.getTime(),n=_A_.Settings.splash.showForAtLeastMills-t;n<0&&(n=0),setTimeout(function(){e()},n)},dismiss:function(e){_A_.Settings.splash.doesFadeOut?(_A_.Splash.view.classList.add("_A_Fade_Out"),setTimeout(function(){_A_.Splash.remove(e)},_A_.Settings.fadeSpeedMills)):_A_.Splash.remove(e)},remove:function(e){_A_.Container.removeChild(_A_.Splash.view),e()}},_A_.Preloader={ServicesSingletons:{preloadedCount:0,preload:function(e){for(var t=[],n=Object.keys(_A_.Settings.services),r=Object.keys(_A_.Settings.singletons),o=0;o<n.length;o++)t.push(_A_.Settings.services[n[o]]);for(var o=0;o<r.length;o++)t.push(_A_.Settings.singletons[r[o]]);if(0==t.length)return void e();for(var o=0;o<t.length;o++)_A_.Preloader.ServicesSingletons.worker(t[o],t.length,r,e)},worker:function(e,t,n,r){_A_.MemoryManagement.Script.load(e,function(){_A_.Preloader.ServicesSingletons.preloadedCount+=1,_A_.Preloader.ServicesSingletons.preloadedCount==t&&(_A_.Preloader.ServicesSingletons.createSingletonInstances(n),r())},function(){_A_.Preloader.ServicesSingletons.preloadedCount+=1,_A_.Preloader.ServicesSingletons.preloadedCount==t&&(_A_.Preloader.ServicesSingletons.createSingletonInstances(n),r())})},createSingletonInstances:function(e){if(e)for(var t=0;t<e.length;t++)window[e[t]]=new _A_.Singletons[e[t]]}},Components:{componentsToPreload:[],preloadedCount:0,preload:function(e){for(var t=[],n=Object.keys(_A_.Settings.components),r=0;r<n.length;r++)_A_.Settings.components[n[r]].preload&&t.push(n[r]);if(0==t.length)return void e();for(var r=0;r<t.length;r++)_A_.Preloader.Components.worker(t[r],r,t.length,e)},worker:function(e,t,n,r){_A_.Preloader.Components.componentsToPreload[t]=document.createElement("SPAllinsonJS-Preloader"),_A_.Preloader.Components.componentsToPreload[t].className="_A_Preloader",_A_.Splash.view.appendChild(_A_.Preloader.Components.componentsToPreload[t]);var o=function(){_A_.Settings.components[e].controller?_A_.MemoryManagement.Script.loadController(e,function(){_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==n&&r()},function(){_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==n&&r()}):(_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==n&&r())},a=_A_.Settings.components[e].bundledView;if(a){var i=_A_.Ajax.decodedViewCache[a.key];if(i)return _A_.Preloader.Components.componentsToPreload[t].innerHTML=decodedView,void o();var _=a.json;_A_.Ajax.get(_,null,null,function(e){var n=JSON.parse(e),r=n[a.key],i=_A_.Utils.decodeHTML(r);_A_.Ajax.decodedViewCache[a.key]=i,_A_.Preloader.Components.componentsToPreload[t].innerHTML=i,o()},function(e){_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==n&&r()},"cache")}else{var s=_A_.Settings.components[e].view;"function"==typeof s&&(s=s()),_A_.Ajax.get(_A_.Settings.appRoot+s,null,null,function(e){_A_.Preloader.Components.componentsToPreload[t].innerHTML=e,o()},function(e){_A_.Preloader.Components.preloadedCount+=1,_A_.Preloader.Components.preloadedCount==n&&r()},"cache")}}}},_A_.Window={handleResize:function(){_A_.Content.style.width="100%",_A_.Content.style.height="100%"},handleHashChange:function(){_A_.Router.isHashChangeWarm||_A_.Settings.historyEnabled&&(_A_.Router.doReplaceHistoryItem=!0,_A_.Router.routeToHash(window.location.hash)),_A_.Router.isHashChangeWarm=!1},handlePopState:function(e){if(e.state&&_A_.Settings.historyEnabled){var t=e.state.replace("#/","");_A_.Go(t,function(){setTimeout(function(){_A_.Note.fire("_A_HISTORY_TRAVERSED",e.state)},0)})}}},window.addEventListener("load",_A_.Setup.init,!1),window.addEventListener("resize",_A_.Window.handleResize,!1),window.addEventListener("hashchange",_A_.Window.handleHashChange,!1),window.addEventListener("popstate",function(e){_A_.Window.handlePopState(e)},!1),_A_.Router={count:0,cssTransitionSupport:!0,currentHash:null,currentRoute:null,currentQueryString:null,doReplaceHistoryItem:!0,isHashChangeWarm:!1,isRouting:!1,callbackArray:[],workerArray:[],lazyFadeArray:[],forceReloadDict:{},goHelper:function(e,t){var n=e.split("?"),r=_A_.Utils.stripTrailingSlash(n[0]),o=n[1];if("./"==r.substr(0,2)){var a=window.location.hash.replace("#/","").split("?")[0];a=_A_.Utils.stripTrailingSlash(a),r=a+r.substr(1)}else if("../"==r.substr(0,3)){var a=window.location.hash.replace("#/","").split("?")[0];a=_A_.Utils.stripTrailingSlash(a);var i=a.split("/");a="";for(var _=0;_<i.length-1;_++)a+="/"+i[_];r=a+r.substr(2)}r=_A_.Utils.stripLeadingSlash(r);var i=r.split("/");if(_A_.Router.validateRoutesOrFallback(i)&&_A_.Router.performRouteRulesValidation(i,t)){var a="#/"+r+(o?"?"+o:"");_A_.Settings.historyEnabled&&(_A_.Router.isHashChangeWarm=!0,window.location.hash=a,window.location.hash!=_A_.Router.currentHash&&(_A_.Router.doReplaceHistoryItem=!0)),_A_.Router.routeToHash(a,t)}},routeToHash:function(e,t){var n=e.replace("#/",""),r=n.split("?"),o=_A_.Utils.stripTrailingSlash(r[0]),a=r[1],i=o.split("/");if(_A_.Router.handleForceReload(i),_A_.Router.validateRoutesOrFallback(i)&&_A_.Router.performRouteRulesValidation(i,t)){for(var _=[],s=0;s<i.length;s++)_.push.apply(_,_A_.Settings.routes[i[s]]);_A_.Router.currentHash="#/"+o+(a?"?"+a:""),_A_.Router.currentRoute=o,_A_.Router.currentQueryString=a?a:null,_A_.Router.routeTo(_,null,t)}},routeTo:function(e,t,n){if(n&&_A_.Router.callbackArray.push(n),!e||0==e.length){if(1!=t)var r=e?"EmptyArray":"NullArray";_A_.Router.resetVariables(),_A_.Router.isHashChangeWarm=!1;for(var o=0;o<_A_.Router.callbackArray.length;o++)_A_.Router.callbackArray[o]({error:r});return void(_A_.Router.callbackArray=[])}if(_A_.Router.isRouting)for(var a=e.length,o=0;o<a;o++)_A_.Router.workerArray.push(e[o]);else{if(_A_.Router.isRouting=!0,0==_A_.Router.workerArray.length&&(_A_.Router.workerArray=e.slice(0)),!_A_.Router.workerArray[_A_.Router.count])return _A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,t);var i,_;if(_A_.Router.workerArray[_A_.Router.count][0].constructor===Array?(i=_A_.Router.workerArray[_A_.Router.count][0][0],_=_A_.Router.workerArray[_A_.Router.count][0][1]):(i=_A_.Router.workerArray[_A_.Router.count][0],_=null),!i)return _A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,t);var s=_A_.Settings.components[i];if(!s)return _A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,t);var l=_A_.Router.workerArray[_A_.Router.count][1];if(!l)return _A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,t);"app"!=l&&""!=l||(l="_A_Content");var c=_A_.Router.workerArray[_A_.Router.count][2],u=!1;if(_A_._R_[l])if(_A_.Router.forceReloadDict[l]&&_A_.Router.forceReloadDict[l]==i)u=!0;else if(_A_._R_[l].componentName==i)return _A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,t);var p=document.getElementById(l);if(!p)return _A_.MemoryManagement.deregisterComponent(l),_A_.Router.end(_A_.Router.workerArray,t);var A=function(e,t){_A_.MemoryManagement.deregisterComponent(e),u&&(t.innerHTML="",_A_.MemoryManagement.garbageCollection())},d=function(n){if(null!=c&&_A_.Router.cssTransitionSupport)"fade"==c&&(p.classList.remove("_A_Fade_In"),p.classList.add("_A_Fade_Out"),setTimeout(function(){var r=function(){_A_.MemoryManagement.registerComponent(l,i,_,function(r){if(r){var o=_A_.Inject.init(n,r,e);n=o[0],_A_.Router.workerArray=o[1]}p.innerHTML=n,_A_.Router.lazyFadeArray.push(p),_A_.Utils.setPageTitle(_A_.Settings.components[i].pageTitle),r&&r.viewDidAppear&&"function"==typeof r.viewDidAppear&&r.viewDidAppear(),_A_.Router.end(_A_.Router.workerArray,t)})};A(l,p),_A_.Settings.components[i].controller?_A_.Router.loadControllerScript(i,r):r()},_A_.Settings.fadeSpeedMills));else{var r=function(){_A_.MemoryManagement.registerComponent(l,i,_,function(r){if(r){var o=_A_.Inject.init(n,r,e);n=o[0],_A_.Router.workerArray=o[1]}p.innerHTML=n,_A_.Utils.setPageTitle(_A_.Settings.components[i].pageTitle),r&&r.viewDidAppear&&"function"==typeof r.viewDidAppear&&r.viewDidAppear(),_A_.Router.end(_A_.Router.workerArray,t)})};A(l,p),_A_.Settings.components[i].controller?_A_.Router.loadControllerScript(i,r):r()}},m=s.bundledView;if(m){var f=_A_.Ajax.decodedViewCache[m.key];if(f)return void d(f);var g=m.json;_A_.Ajax.get(g,null,null,function(e){var t=JSON.parse(e),n=t[m.key],r=_A_.Utils.decodeHTML(n);_A_.Ajax.decodedViewCache[m.key]=r,d(r)},function(e){},"cache")}else{var v=s.view;if(!v)return _A_.Router.count==_A_.Router.workerArray.length-1&&(_A_.Router.doReplaceHistoryItem=!0),_A_.Router.end(_A_.Router.workerArray,t);"function"==typeof v&&(v=v());var g=_A_.Settings.appRoot+v;_A_.Ajax.get(g,null,null,function(e){d(e)},function(e){},"cache")}}},end:function(e,t){if(_A_.Router.count<e.length-1)_A_.Router.count+=1,_A_.Router.isRouting=!1,_A_.Router.routeTo(e,t);else{if(!t){for(var n=0;n<e.length;n++){var r=String(e[n][1]);"R_"!=r.substring(0,2)&&"C_"!=r.substring(0,2)||(e.splice(n,1),n--)}if(e.length>0)if(_A_.Settings.historyEnabled){var o=_A_.Router.currentHash?_A_.Settings.appRoot+_A_.Router.currentHash:_A_.Settings.appRoot;_A_.Router.doReplaceHistoryItem?window.history.replaceState(_A_.Router.currentHash,document.title,o):window.history.pushState(_A_.Router.currentHash,document.title,o)}else window.history.replaceState(_A_.Router.currentHash,document.title,_A_.Settings.appRoot)}_A_.Router.fadeInComponents(function(){_A_.MemoryManagement.garbageCollection(),_A_.Router.resetVariables(),_A_.Router.isHashChangeWarm=!1,setTimeout(function(){for(var e=0;e<_A_.Router.callbackArray.length;e++)_A_.Router.callbackArray[e]({});_A_.Router.callbackArray=[],_A_.Note.fire("_A_ROUTING_COMPLETED")},0)})}},handleForceReload:function(e){for(var t=0;t<e.length;t++)if(e[t].indexOf("!")!=-1){e[t]=e[t].replace("!","");for(var n=_A_.Settings.routes[e[t]],r=0;r<n.length;r++){var o=n[r][1],a=n[r][0];_A_.Router.forceReloadDict[o]=a}}},validateRoutesOrFallback:function(e){for(var t=0;t<e.length;t++){var n=e[t].replace("!","");if(!_A_.Settings.routes[n]){if(_A_.Settings.fallbackRoute){for(var r=_A_.Settings.fallbackRoute.split("/"),o=0;o<r.length;o++){var a=_A_.Settings.routes[r[o]];if(!a)return!1}_A_.Go(_A_.Settings.fallbackRoute)}return!1}}return!0},performRouteRulesValidation:function(e,t){if(_A_.Settings.routeRules.length>0)for(var n=0;n<e.length;n++)for(var r=0;r<_A_.Settings.routeRules.length;r++)for(var o=0;o<_A_.Settings.routeRules[r].routes.length;o++)if(_A_.Settings.routeRules[r].routes[o]==e[n]){var a;try{a=_A_.Settings.routeRules[r].condition()}catch(i){continue}if(!a){_A_.Router.doReplaceHistoryItem=!0;var _="#/"+_A_.Settings.routeRules[r].fallback;return _A_.Router.routeToHash(_,t),!1}}return!0},loadControllerScript:function(e,t){_A_.MemoryManagement.Script.loadController(e,function(){t()},function(){t()})},fadeInComponents:function(e){return 0==_A_.Router.lazyFadeArray.length?void e():void _A_.Router.fadeInComponent(e,0)},fadeInComponent:function(e,t){var n=_A_.Router.lazyFadeArray[t];n.classList.remove("_A_Fade_Out"),n.classList.add("_A_Fade_In"),setTimeout(function(){if(t<_A_.Router.lazyFadeArray.length-1){var n=t+1;_A_.Router.fadeInComponent(e,n)}else e()},_A_.Settings.fadeSpeedMills)},resetVariables:function(){_A_.Router.isRouting=!1,_A_.Router.count=0,_A_.Router.doReplaceHistoryItem=!1,_A_.Router.workerArray=[],_A_.Router.lazyFadeArray=[],_A_.Router.forceReloadDict={};for(var e=Object.keys(_A_.RepaintHelper),t=0;t<e.length;t++)_A_.RepaintHelper[e[t]].isRepainting=!1}},_A_.Utils={isCssFeatureSupported:function(e){var t=document.createElement("div");if(void 0!==t.style[e])return!0;for(var n="Webkit Moz ms O".split(" "),r=e.charAt(0).toUpperCase()+e.substr(1),o=0;o<n.length;o++)if(void 0!==t.style[n[o]+r])return!0;return!1},setPageTitle:function(e){e&&(document.title=e)},stripLeadingSlash:function(e){return"/"==e.substr(0,1)?e.substr(1):e},stripTrailingSlash:function(e){return"/"==e.substr(e.length-1,1)?e.substr(0,e.length-1):e},anchorLink:function(e){if(e){var t=document.getElementById(e);t&&t.scrollIntoView()}},decodeHTML:function(e){return e=e.replace(/&amp;/g,"&"),e=e.replace(/&lt;/g,"<"),e=e.replace(/&gt;/g,">"),e=e.replace(/&#39;/g,"'"),e=e.replace(/&quot;/g,'"'),e=e.replace(/&#58;/g,":")}},_A_.Ajax={cache:{},decodedViewCache:{},get:function(e,t,n,r,o,a){_A_.Ajax.request("GET",e,t,n,r,o,a)},post:function(e,t,n,r,o,a){_A_.Ajax.request("POST",e,t,n,r,o,a)},put:function(e,t,n,r,o,a){_A_.Ajax.request("PUT",e,t,n,r,o,a)},"delete":function(e,t,n,r,o,a){_A_.Ajax.request("DELETE",e,t,n,r,o,a)},patch:function(e,t,n,r,o,a){_A_.Ajax.request("PATCH",e,t,n,r,o,a)},request:function(e,t,n,r,o,a,i){if(e&&t&&o&&a&&("cache"==i||"update-cache"==i||"clear-cache"==i||null==i)){var _=0;if(i)if(_A_.Ajax.cache[t]){for(var s=!1,l=0;l<_A_.Ajax.cache[t].length;l++){var c=_A_.Ajax.cache[t][l],u=c[0],p=c[1],A=c[2];if(e==u&&JSON.stringify(n)==JSON.stringify(p)&&JSON.stringify(r)==JSON.stringify(A)){if("cache"==i){try{o(c[3])}catch(d){}return null}if("update-cache"==i){_=l,s=!0;break}if("clear-cache"==i){_A_.Ajax.cache[t].splice(l,1),s=!0;break}}}s||"cache"!=i&&"update-cache"!=i||(_=_A_.Ajax.cache[t].length,_A_.Ajax.cache[t].push([]))}else"cache"!=i&&"update-cache"!=i||(_A_.Ajax.cache[t]=[[]]);var m=t;!i||"update-cache"!=i&&"clear-cache"!=i||(m+="?"+(new Date).getTime());var f=new XMLHttpRequest;if(f.open(e,m),f.onreadystatechange=function(){if(4==f.readyState&&f.status>0&&f.status<400){var s;s=void 0===f.response?f.responseText:f.response,"cache"!=i&&"update-cache"!=i||(_A_.Ajax.cache[t][_]=[e,n,r,s]);try{o(s)}catch(l){}}else if(4==f.readyState&&f.status>=400&&f.status<500){var s;s=void 0===f.response?f.responseText:f.response;try{a({status:f.status,statusText:f.statusText,response:s})}catch(l){}}else if(4==f.readyState&&0==f.status)try{a({status:500,statusText:"",response:""})}catch(l){}},null!=n)for(var l=0;l<n.length;l++)f.setRequestHeader(n[l].key,n[l].value);return f.send(r),f}}},_A_.MemoryManagement={Script:{load:function(e,t,n){if(e){for(var r=document.getElementsByTagName("head")[0].getElementsByTagName("script"),o=0;o<r.length;o++){var a=r[o];if(a.getAttribute("src")==e){if(t)try{t()}catch(i){}return}}var _=document.createElement("script");_.type="text/javascript",_.readyState?_.onreadystatechange=function(){if("loaded"==_.readyState||"complete"==_.readyState)if(_.onreadystatechange=null,this.status>=200&&this.status<400){if(t)try{t()}catch(e){}}else if(n)try{n()}catch(e){}}:(_.onload=function(){if(t)try{t()}catch(e){}},_.onerror=function(e){if(n)try{n()}catch(e){}}),_.src=e,document.getElementsByTagName("head")[0].appendChild(_)}else if(n)try{n()}catch(i){}},unload:function(e){if(e)for(var t=document.getElementsByTagName("head")[0].getElementsByTagName("script"),n=0;n<t.length;n++){var r=t[n];if(r.getAttribute("src")==e){document.getElementsByTagName("head")[0].removeChild(r);break}}},loadController:function(e,t,n){if(!e)return void n();if(!_A_.Settings.components[e])return void n();var r=_A_.Settings.components[e].controller;_A_.MemoryManagement.Script.load(r,t,n)},unloadController:function(e){if(e&&_A_.Settings.components[e]){var t=_A_.Settings.components[e].controller;_A_.MemoryManagement.Script.unload(t)}}},registerComponent:function(divId,componentName,componentData,callback){_A_._R_[divId]||(_A_._R_[divId]={});var controllerDefinition=_A_.Settings.components[componentName].controller,controllerImport=_A_.Controllers[componentName];if(controllerDefinition||controllerImport){_A_._I_[componentName]||(_A_._I_[componentName]={});var componentIndex=1,instancesDict=_A_._I_[componentName],noKeys=Object.keys(instancesDict).length,lastInstance=instancesDict[Object.keys(instancesDict)[noKeys-1]];if(lastInstance){var tempArray=lastInstance.me.split("'");componentIndex=parseInt(tempArray[3])+1}var tempMe="_A_._I_['"+componentName+"']['"+componentIndex+"']";_A_._R_[divId].componentName=componentName,_A_._R_[divId].componentIndex=componentIndex,_A_.RepaintHelper[tempMe]={},_A_.RepaintHelper[tempMe].divId=divId;var tempServiceInstanceArray=[],tempServicesArray=_A_.Settings.components[componentName].services;if(tempServicesArray)for(var i=0;i<tempServicesArray.length;i++){var tempInstance;try{tempInstance=new _A_.Services[tempServicesArray[i]],tempServiceInstanceArray.push(tempInstance)}catch(e){}}for(var tempString="new _A_.Controllers['"+componentName+"'](",i=0;i<tempServiceInstanceArray.length;i++)tempString+="tempServiceInstanceArray["+i+"]",i!=tempServiceInstanceArray.length-1&&(tempString+=",");tempString+=");";var instance=eval(tempString);_A_._I_[componentName][componentIndex.toString()]=instance,instance.me=tempMe,instance.model=componentData?componentData:{},instance.init&&"function"==typeof instance.init&&instance.init(),callback(instance)}else _A_._R_[divId].componentName=componentName,callback(null)},deregisterComponent:function(e){if(_A_._R_[e]){var t=_A_._R_[e].componentName,n=_A_.Settings.components[t].controller,r=_A_.Controllers[t];if(!n&&!r)return void delete _A_._R_[e];var o=_A_._R_[e].componentIndex,a="_A_._I_["+t+"]["+o+"]";delete _A_.RepaintHelper[a],delete _A_._R_[e];var i=_A_._I_[t][o],_=function(){if(delete _A_._I_[t][o],0==Object.keys(_A_._I_[t])&&delete _A_._I_[t],_A_.Settings.scriptManagementEnabled){var e=_A_.Settings.components[t].controller;for(var n in _A_._R_){if(t==_A_._R_[n].componentName)return;var r=_A_.Settings.components[_A_._R_[n].componentName].controller;if(e&&r&&e==r)return}_A_.MemoryManagement.Script.unloadController(t)}};i.dealloc&&"function"==typeof i.dealloc?i.dealloc(_):_()}},garbageCollection:function(){for(var e in _A_._R_){var t=document.getElementById(e);t||_A_.MemoryManagement.deregisterComponent(e)}}},_A_.Inject={init:function(e,t,n){if(null!=_A_.Locale.localizations&&(e=_A_.Locale.apply(e)),t){var r=_A_.Inject.component(e,t);e=r[0];for(var o=0;o<r[1].length;o++)n.splice(n.length+o,0,r[1][o]);var a=_A_.Inject.repeat(e,t);e=a[0];for(var o=0;o<a[1].length;o++)n.splice(n.length+o,0,a[1][o]);e=_A_.Inject.bind(e,t)}return e=_A_.Inject.eval(e,t),t&&(e=e.replace(/_C_/g,t.me)),[e,n]},component:function(response,instance){var arrayOfRoutesToReturn=[],injectionArray=response.match(/\[C:(.*?)\]/g);if(!injectionArray)return[response,arrayOfRoutesToReturn];for(var i=0;i<injectionArray.length;i++){var htmlString="",tempValue=injectionArray[i].replace(/ /g,"").replace("[C:","").replace("]",""),tempArray=tempValue.split(","),tempComponentName=tempArray[0],tempComponentData=tempArray[1];if(tempComponentName)if(_A_.Settings.components[tempComponentName]){var meComponentCount=instance._A_Component_Count,componentCount=meComponentCount?meComponentCount:1,tempId="C_"+componentCount+"_."+instance.me;if(tempComponentData){var tempData;try{tempData=eval(instance.me+"."+tempComponentData)}catch(e){}if(void 0===tempData){response=response.replace(injectionArray[i],htmlString);continue}arrayOfRoutesToReturn.push([[tempComponentName.toString(),tempData],tempId.toString()])}else arrayOfRoutesToReturn.push([tempComponentName.toString(),tempId.toString()]);htmlString+='<component id="'+tempId+'"></component>',componentCount+=1,instance._A_Component_Count=componentCount,response=response.replace(injectionArray[i],htmlString)}else response=response.replace(injectionArray[i],htmlString);else response=response.replace(injectionArray[i],htmlString)}return[response,arrayOfRoutesToReturn]},repeat:function(response,instance){var arrayOfRoutesToReturn=[],injectionArray=response.match(/\[R:(.*?)\]/g);if(!injectionArray)return[response,arrayOfRoutesToReturn];for(var i=0;i<injectionArray.length;i++){var tempValue=injectionArray[i].replace(/ /g,"").replace("[R:","").replace("]",""),tempArray=tempValue.split(","),tempComponentName=tempArray[0],tempComponentData=tempArray[1];if(tempComponentName)if(tempComponentData)if(_A_.Settings.components[tempComponentName]){var tempDataArray;try{tempDataArray=eval(instance.me+"."+tempComponentData)}catch(e){}if(void 0!==tempDataArray)if(tempDataArray){for(var meDivCount=instance._A_Repeat_Count,divCount=meDivCount?meDivCount:1,htmlString="",ii=0;ii<tempDataArray.length;ii++){var tempId="R_"+divCount+"_."+instance.me;htmlString+='<repeat id="'+tempId+'"></repeat>',arrayOfRoutesToReturn.push([[tempComponentName.toString(),tempDataArray[ii]],tempId.toString()]),divCount+=1}instance._A_Repeat_Count=divCount,response=response.replace(injectionArray[i],htmlString)}else response=response.replace(injectionArray[i],"");else response=response.replace(injectionArray[i],"")}else response=response.replace(injectionArray[i],"");else response=response.replace(injectionArray[i],"");else response=response.replace(injectionArray[i],"")}return[response,arrayOfRoutesToReturn]},bind:function(response,instance){var bindingArray=response.match(/\[B:(.*?)\]/g);if(!bindingArray)return response;instance._A_Bind_Array||(instance._A_Bind_Array=[]);for(var divCount=0,workerArray=[],i=0;i<bindingArray.length;i++){var propertyAddress=bindingArray[i].replace(/ /g,"").replace("[B:","").replace("]","");if(propertyAddress){var tempValue;try{tempValue=eval(instance.me+"."+propertyAddress)}catch(e){}if(void 0!==tempValue){var tempId="B_"+divCount+"_."+instance.me;response=null==tempValue?response.replace(bindingArray[i],'<bind id="'+tempId+'"></bind>'):response.replace(bindingArray[i],'<bind id="'+tempId+'">'+tempValue+"</bind>"),instance._A_Bind_Array.push(propertyAddress),divCount+=1}else response=response.replace(bindingArray[i],"")}else response=response.replace(bindingArray[i],"")}return response},eval:function(response,instance){var evalArray=response.match(/\[E:(.*?)\]/g);if(!evalArray)return response;for(var i=0;i<evalArray.length;i++){var toBeEvaluated=evalArray[i].replace("[E:","").replace("]","");if(toBeEvaluated){var usingController=toBeEvaluated.match(/\_C_/g);if(!usingController||instance.me){usingController&&(toBeEvaluated=toBeEvaluated.replace(/_C_/g,instance.me));var tempData;try{tempData=eval(toBeEvaluated)}catch(e){}response=void 0!==tempData?response.replace(evalArray[i],tempData):response.replace(evalArray[i],"")}else response=response.replace(evalArray[i],"")}else response=response.replace(evalArray[i],"")}return response}},_A_.Note={notes:{},register:function(e,t,n){e&&t&&t.me&&n&&(_A_.Note.notes[e]||(_A_.Note.notes[e]={}),_A_.Note.notes[e][t.me]=n)},deregister:function(e,t){e&&t&&t.me&&_A_.Note.notes[e]&&(_A_.Note.notes[e][t.me]&&delete _A_.Note.notes[e][t.me],0==Object.keys(_A_.Note.notes[e])&&delete _A_.Note.notes[e])},deregisterFromAll:function(e){if(e&&e.me)for(var t=Object.keys(_A_.Note.notes),n=0;n<t.length;n++)_A_.Note.notes[t[n]][e.me]&&(delete _A_.Note.notes[t[n]][e.me],0==Object.keys(_A_.Note.notes[t[n]])&&delete _A_.Note.notes[t[n]])},fire:function(e,t){if(e){var n=_A_.Note.notes[e];if(n)for(var r=Object.keys(n),o=0;o<r.length;o++){var a=n[r[o]];if(t)try{a(t)}catch(i){}else try{a()}catch(i){}}}}},_A_.Locale={defaultLanguage:null,localizations:null,getLang:function(){return void 0===navigator.languages?navigator.language:navigator.languages[0]},apply:function(e){var t=e.match(/\[L:(.*?)\]/g);if(!t)return e;for(var n=0;n<t.length;n++){var r=t[n].replace(/ /g,"").replace("[L:","").replace("]","");if(r){var o=_A_.Locale.get(r);e=o?e.replace(t[n],o):e.replace(t[n],"")}else e=e.replace(t[n],"")}return e},get:function(e){if(!e)return null;if(!_A_.Locale.localizations)return null;var t,n=_A_.Locale.getLang();if(t=_A_.Locale.localizations[n]){var r=t[e];if(r)return r}var o=n.split("-");if(t=_A_.Locale.localizations[o[0]]){var r=t[e];if(r)return r}if(_A_.Locale.defaultLanguage&&(t=_A_.Locale.localizations[_A_.Locale.defaultLanguage])){var r=t[e];if(r)return r}return null}},_A_.Go=function(e,t){return e?""==e?void(t&&t({error:"EmptyRoute"})):void _A_.Router.goHelper(e,t):void(t&&t({error:"NullRoute"}))},_A_.Get=function(e){if(!e)return null;if(e.constructor===Array){if(0==e.length)return null;for(var t=[],n=0;n<e.length;n++){var r=_A_.GetHelper(e[n]);r&&t.push(r)}return 0==t.length?null:t}var o=_A_.GetHelper(e);return o?o:null},_A_.GetHelper=function(e){if(!e)return null;var t=_A_._R_[e];if(!t)return null;var n=t.componentName;if(!n)return null;var r=t.componentIndex;if(!r)return null;var t=_A_._I_[n][r.toString()];return t?t:null},_A_.Component=function(e,t,n,r,o){if(!e)return null;if(!_A_.Settings.components[e])return null;if(!t)return null;var a=document.getElementById(t);if(!a)return null;if(!r)return null;if(!r.me)return null;var i=r._A_Component_Count,_=i?i:1,s="",l=[],c="C_"+_+"_."+r.me;return s+='<component id="'+c+'"></component>',n?l.push([[e,n],c.toString()]):l.push([e,c.toString()]),_+=1,r._A_Component_Count=_,a.innerHTML=s,_A_.Router.routeTo(l,null,function(){if(o){var e=_A_.Get(c);try{o(e)}catch(t){}}}),c},_A_.Repeat=function(e,t,n,r,o){if(!e)return null;if(!_A_.Settings.components[e])return null;if(!t)return null;var a=document.getElementById(t);if(!a)return null;if(!n)return null;if(0==n.length,!r)return null;if(!r.me)return null;for(var i=r["_A_Repeat_Count_"+t],_=i?i:1,s="",l=[],c=[],u=0;u<n.length;u++){var p="R_"+_+"_."+t;l.push(p),s+='<repeat id="'+p+'"></repeat>',c.push([[e,n[u]],p.toString()]),_+=1}return r["_A_Repeat_Count_"+t]=_,a.innerHTML=s,_A_.Router.routeTo(c,null,function(){if(o){var e=_A_.Get(l);try{o(e)}catch(t){}}}),l},_A_.Append=function(e,t,n,r,o){if(!e)return null;if(!_A_.Settings.components[e])return null;if(!t)return null;var a=document.getElementById(t);if(!a)return null;if(!n)return null;if(0==n.length)return null;if(!r)return null;if(!r.me)return null;for(var i=r["_A_Repeat_Count_"+t],_=i?i:1,s="",l=[],c=[],u=0;u<n.length;u++){var p="R_"+_+"_."+t;c.push(p),s+='<repeat id="'+p+'"></repeat>',l.push([[e,n[u]],p.toString()]),_+=1}r["_A_Repeat_Count_"+t]=_;var A=document.createElement("div");for(A.innerHTML=s;A.firstChild;)a.appendChild(A.firstChild);return _A_.Router.routeTo(l,null,function(){if(o){var e=_A_.Get(c);try{o(e)}catch(t){}}}),c},_A_.Rebind=function(instance){if(instance&&instance.me){var instanceArray=instance._A_Bind_Array;if(instanceArray&&0!=instanceArray.length)for(var i=0;i<instanceArray.length;i++){var tempDiv=document.getElementById("B_"+i+"_."+instance.me);if(tempDiv){var tempData=eval(instance.me+"."+[instanceArray[i]]);if(!tempData)return;tempDiv.innerHTML=tempData}}}},_A_.Repaint=function(e,t){if(e&&e.me){var n=_A_.RepaintHelper[e.me].divId;if(void 0!==n&&!_A_.RepaintHelper[e.me].isRepainting){_A_.RepaintHelper[e.me].isRepainting=!0;var r=document.getElementById(n),o=_A_._R_[n].componentName,a=function(n){var o=!0;_A_.Router.isRouting&&(o=!1);var a=_A_.Inject.init(n,e,[]);if(n=a[0],0!=a[1].length){_A_.Router.workerArray||(_A_.Router.workerArray=[]);for(var i=0;i<a[1].length;i++)_A_.Router.workerArray.push(a[1][i])}if(r.innerHTML="",_A_.MemoryManagement.garbageCollection(),r.innerHTML=n,e.viewDidAppear&&"function"==typeof e.viewDidAppear&&e.viewDidAppear(),_A_.RepaintHelper[e.me].isRepainting=!1,_A_.Router.workerArray)_A_.Router.routeTo(_A_.Router.workerArray,o,t);else if(t)try{t()}catch(_){}},i=_A_.Settings.components[o].bundledView;if(i){var _=_A_.Ajax.decodedViewCache[i.key];if(_)return void a(_);var s=i.json;_A_.Ajax.get(s,null,null,function(e){var t=JSON.parse(e),n=t[i.key],r=_A_.Utils.decodeHTML(n);_A_.Ajax.decodedViewCache[i.key]=r,a(r)},function(e){},"cache")}else{var l=_A_.Settings.components[o].view;"function"==typeof l&&(l=l());var s=_A_.Settings.appRoot+l;_A_.Ajax.get(s,null,null,function(e){a(e)},function(e){},"cache")}}}},_A_.RepaintHelper={};