nope/resources/w2ui/kickstart.min.js
2020-09-01 17:48:26 +02:00

3 lines
6.9 KiB
JavaScript

/* kickstart 0.2.x (nightly) (c) http://w2ui.com/kickstart, vitmalina@gmail.com */
var kickStart=function(){var app={_conf:{name:"unnamed",baseURL:"",cache:!1,modules:{},verbose:!0},define:define,require:require,register:register};return window.app||(window.app=app),app;function define(n,t){function a(e){for(var r in e)Array.isArray(e[r].assets)?(app._conf.modules.hasOwnProperty(r)&&app._conf.verbose&&console.log("ERROR: module "+r+" is already registered."),app._conf.modules[r]=$.extend({assets:{}},e[r],{ready:!1,files:{}})):a(e[r])}"string"==typeof n?$.ajax({url:app._conf.baseURL+n,dataType:"text",cache:app._conf.cache,success:function(e,r,o){if("success"==r){try{n=JSON.parse(e)}catch(e){return void(app._conf.verbose&&console.log('ERROR: not valid JSON file "'+n+'".\n'+e))}a(n),"function"==typeof t&&t()}else app._conf.verbose&&console.log('ERROR: error while loading module definition from "'+n+'".')},error:function(e,r,o){app._conf.verbose&&console.log('ERROR: error while loading module definition from "'+n+'".')}}):(a(n),"function"==typeof t&&t())}function register(e,r){if(app.hasOwnProperty(e))return app._conf.verbose&&console.log("ERROR: Namespace "+e+" is already registered"),!1;if(!app._conf.modules.hasOwnProperty(e))return app._conf.verbose&&console.log("ERROR: Namespace "+e+" is not defined, first define it with kickStart.define"),!1;var o=app._conf.modules[e];app[e]=r(o.files,o),app._conf.modules[e].ready=!0}function require(names,callBack){$.isArray(names)||(names=[names]);var modCount=names.length,failed=!1,promise={ready:function(e){return promise._ready=e,promise},fail:function(e){return promise._fail=e,promise},done:function(e){return promise._done=e,promise},always:function(e){return promise._always=e,promise}};return setTimeout(function(){for(var n in names){var name=names[n];void 0!==app[name]?(modCount--,isFinished()):void 0===app._conf.modules[name]?app._conf.verbose&&console.log("ERROR: module "+name+" is not defined."):function(name){getFiles(app._conf.modules[name].assets.concat([app._conf.modules[name].start]),function(files){var start=files[app._conf.modules[name].start];delete files[app._conf.modules[name].start],app._conf.modules[name].files=files,app._conf.modules[name].ready=!0,eval(start),"function"==typeof promise._ready&&promise._ready(app._conf.modules[name]),modCount--,isFinished()})}(name)}},1),promise;function isFinished(){0==modCount&&(!0!==failed&&("function"==typeof promise._done&&promise._done(app._conf.modules[name]),"function"==typeof callBack&&callBack()),"function"==typeof promise._always&&promise._always())}}function getFiles(t,e){var a={},r=t.length;for(var i in t)!function(){var n=t[i],e=$('script[path="'+n+'"]');0<e.length?(a[n]=e.html(),s()):$.ajax({url:app._conf.baseURL+n,dataType:"text",cache:app._conf.cache,success:function(e,r,o){"success"==r?(a[n]=o.responseText,s()):app._conf.verbose&&console.log("ERROR: error while getting a file "+n+".")},error:function(e,r,o){"error"==r?app._conf.verbose&&console.log("ERROR: failed to load "+t[i]+"."):(app._conf.verbose&&console.log('ERROR: file "'+t[i]+'" is loaded, but with a parsing error(s) in line '+o.line+": "+o.message),a[n]=xhr.responseText,s())}})}();function s(){--r<=0&&e(a)}}}();kickStart.define({route:{assets:[]}}),kickStart.register("route",function(){var y=kickStart,_={},R={};window.addEventListener?window.addEventListener("hashchange",w,!1):window.attachEvent("onhashchange",w);var e={init:function(e){""===o()?r(e):w()},add:function(e,r){if("object"==typeof e){for(var o in e){var n=String("/"+o).replace(/\/{2,}/g,"/");_[n]=e[o]}return y.route}if(e=String("/"+e).replace(/\/{2,}/g,"/"),"function"==typeof y.route.trigger){var t=y.route.trigger({phase:"before",type:"add",target:"self",route:e,handler:r});if(!0===t.isCancelled)return!1}_[e]=r,"function"==typeof y.route.trigger&&y.route.trigger($.extend(t,{phase:"after"}));return y.route},remove:function(e){if(e=String("/"+e).replace(/\/{2,}/g,"/"),"function"==typeof y.route.trigger){var r=y.route.trigger({phase:"before",type:"remove",target:"self",route:e,handler:handler});if(!0===r.isCancelled)return!1}delete _[e],delete R[e],"function"==typeof y.route.trigger&&y.route.trigger($.extend(r,{phase:"after"}));return y.route},go:r,set:function(e){return e=String("/"+e).replace(/\/{2,}/g,"/"),window.history.replaceState({},document.title,"#"+e),y.route},get:o,info:function(){var e=[],r=!1,o=window.location.hash.substr(1).replace(/\/{2,}/g,"/");""==o&&(o="/");for(var n in R){var t={},a=R[n].path.exec(o);if(null!=a){!0,r||-1!==n.indexOf("*")||(r=!0);var i=1;for(var s in R[n].keys)t[R[n].keys[s].name]=a[i],i++;e.push({name:n,path:o,params:t})}}return e},process:w,list:function(){b();var e={};for(var r in _){var o=R[r].keys,n=[];for(var t in o)n.push(o[t].name);e[r]=n}return e},onAdd:null,onRemove:null,onRoute:null};return"undefined"!=typeof w2utils&&$.extend(e,w2utils.event,{handlers:[]}),e;function r(e){return e=String("/"+e).replace(/\/{2,}/g,"/"),window.history.replaceState({},document.title,"#"+e),w(),y.route}function o(){return window.location.hash.substr(1).replace(/\/{2,}/g,"/")}function w(){b();var r=window.location.hash.substr(1).replace(/\/{2,}/g,"/");""==r&&(r="/");var e=!1,o=!1,n=!1;for(var t in R){var a={},i=R[t].path.exec(r);if(null!=i){e=!0,o||-1!==t.indexOf("*")||(o=!0);var s=1;for(var f in R[t].keys)a[R[t].keys[f].name]=i[s],s++;if("function"==typeof y.route.trigger)if(!0===(h=y.route.trigger({phase:"before",type:"route",target:"self",route:t,params:a})).isCancelled)return!1;_[t]({name:t,path:r,params:a},a);"function"==typeof y.route.trigger&&y.route.trigger($.extend(h,{phase:"after"}));var u=window.location.hash.substr(1).replace(/\/{2,}/g,"/");if(r!==u)return}}var c=0,p=y._conf.modules,l=[];for(var d in p){var g=p[d],m=g.route;function v(e){if(g.routeRE=g.routeRE||{},null==g.routeRE[e]&&(g.routeRE[e]=b(e)),!g.ready&&e&&g.routeRE[e].path.exec(r)&&-1==l.indexOf(d))return y._conf.verbose&&console.log('ROUTER: Auto Load Module "'+d+'"'),n=!0,c++,l.push(d),void y.require(d).done(function(){c--,y._conf.modules[d]&&0===c&&w()})}null!=m&&("string"==typeof m&&(m=[m]),Array.isArray(m)&&m.forEach(function(e){v(e)}))}if(n||o||!y._conf.verbose||console.log('ROUTER: Exact route for "'+r+'" not found'),!e){var h;if("function"==typeof y.route.trigger)if(!0===(h=y.route.trigger({phase:"before",type:"error",target:"self",hash:r})).isCancelled)return!1;!n&&y._conf.verbose&&console.log('ROUTER: Wild card route for "'+r+'" not found'),"function"==typeof y.route.trigger&&y.route.trigger($.extend(h,{phase:"after"}))}}function b(e){if(null!=e)return r(e);for(var e in _)R[e]||(R[e]=r(e));function r(e){var i=[],r=e.replace(/\/\(/g,"(?:/").replace(/\+/g,"__plus__").replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?/g,function(e,r,o,n,t,a){return i.push({name:n,optional:!!a}),r=r||"",(a?"":r)+"(?:"+(a?r:"")+(o||"")+(t||(o?"([^/.]+?)":"([^/]+?)"))+")"+(a||"")}).replace(/([\/.])/g,"\\$1").replace(/__plus__/g,"(.+)").replace(/\*/g,"(.*)");return{path:new RegExp("^"+r+"$","i"),keys:i}}}});