themouette/fossil-core

View on GitHub
fossil-core.min.js

Summary

Maintainability
A
0 mins
Test Coverage
/*! fossil-core 2013-11-17 */
var Fossil=function(){var a=function(a){return a.Deferred}(jquery),b=function(a){function b(b){return function(){var c=a.rest(arguments),d=a.first(arguments);return a.isArray(d)?a.map(d,function(a){return b.apply(this,[a].concat(c))},this):b.apply(this,arguments)}}function c(b){return function(c){var d;return"string"!=typeof c?(d=a.rest(arguments,1),a.map(c,function(a,c){return b.apply(this,[c,a].concat(d))},this)):(d=a.rest(arguments,2),b.apply(this,arguments))}}var d={invalid_src:"Invalid source object."};return{scalarOrArray:b,keyValueOrObject:c,copyOption:b(function(a,b,c){c&&"undefined"!=typeof c[a]&&(b[a]=c[a])}),getProperty:b(function(b,c,d){var e=b.split("."),f=a.reduce(e,function(a,b){return a&&b in a?a[b]:void 0},c);return"undefined"!=typeof f?f:d}),setProperty:c(function(b,c,e){var f=b.split("."),g=f.pop(),h=a.reduce(f,function(a,b){if(!a instanceof Object)throw new Error(d.invalid_src);return b in a?a[b]:(a[b]={},a[b])},e);g&&(h[g]=c)})}}(underscore),c=function(a,b){function c(a){return-1!==g.indexOf(a)}function d(b,d){a.each(d,function(a,d){b[d]||c(d)||(b[d]=a)})}function e(b,d){a.each(d,function(a,d){c(d)||a!==b[d]||delete b[d]})}function f(){var b=this,c=arguments;a.each(this.mixins,function(a){"function"==typeof a.initialize&&a.initialize.apply(b,c)})}var g=["initialize"];return f.prototype.mixins=[],a.extend(f,{mix:b.scalarOrArray(function(a){var b=this.prototype.mixins||[];return-1===b.indexOf(a)&&(b.push(a),d(this.prototype,a)),this}),unmix:b.scalarOrArray(function(a){var b=this.prototype.mixins,c=b.indexOf(a);return-1===b.indexOf(a)?this:(b.splice(c,1),e(this.prototype,a),this)}),extend:function(b,c){var d,e=this;d=b&&a.has(b,"constructor")?b.constructor:function(){return e.apply(this,arguments)},a.extend(d,e,c);var f=function(){this.constructor=d};return f.prototype=e.prototype,d.prototype=new f,b&&a.extend(d.prototype,b),d.prototype.mixins=a.clone(d.prototype.mixins||[]),d.__super__=e.prototype,d}}),f}(underscore,b),d=function(a,b){function c(a){return new RegExp("^"+a+"!(.*)$","i")}function d(b,c,d,e){var f=b._events&&b._events[d]?a.first(b._events[d]):null;return f?f.callback.apply(f.context||b,e):null}function e(b,c,d,e){return b._events?a.map(b._events[d],function(a){return a.callback.apply(a.context||b,e)},b):[]}var f=["_listenerId","createPubSub"].concat(a.keys(b.Events)),g=a.extend({},b.Events,{eventModifiers:null,initialize:function(b){this.eventModifiers=[];var c=a.extend({},a.result(this,"events"),a.result(b||{},"events")),d=this;this.initializeEventModifiers(b),this.events=c,a.each(c,function(b,c){a.isFunction(b)||(b=d[b]),d.listenTo(d,c,a.bind(b,d))})},initializeEventModifiers:function(){this.addEventModifier("one",d,["trigger"]),this.addEventModifier("map",e,["trigger"])},createPubSub:function(b,c){var d={},e=this;if(a.each(f,function(b){d[b]=a.isFunction(e[b])?a.bind(e[b],e):e[b]}),!b)return d;var g=a.extend({},a.result(b,c),a.result(b.options||{},c));return a.each(g,function(c,d){a.isFunction(c)||(c=b[c]),e.listenTo(e,d,a.bind(c,b))}),d},forward:function(a,b){return this.on(a,h(this,b)),this},addEventModifier:function(a,b,d){return d||(d="all"),a instanceof RegExp||(a=c(a)),this.eventModifiers.push({matcher:a,action:b,methods:d}),this},removeEventModifier:function(b){return b instanceof RegExp||(b=c(b)),this.eventModifiers=a.reduce(this.eventModifiers,function(a,c){return c.matcher.toString()!==b.toString()&&a.push(c),a},[]),this}});a.each(["on","off","once","trigger","listenTo","listenToOnce","stopListening"],function(c){g[c]=function(d){var e,f=a.rest(arguments),g=a.any(this.eventModifiers,function(a){return"all"!==a.methods&&-1===a.methods.indexOf(c)?!1:a.matcher.test(d)?(d=d.match(a.matcher)[1],e=a.action(this,c,d,f),!0):!1},this);return g?e:(b.Events[c].apply(this,arguments),this)}});var h=function(b,c){return function(){var d=a.toArray(arguments);b.trigger.apply(b,[c].concat(d))}};return g}(underscore,backbone),e=function(a,b,c,d){function e(b,c,d,f){a.result(b,"link")&&b.doExpose(d,c),a.result(b,"expose")&&b.doExpose(d,c),b.use(d,f),b.useDeep&&(a.each(d.modules,function(a){e(b,c,a,d)},b),d.on("on:child:connect",a.bind(b.onChildConnectListener,b,c)),d.on("on:child:disconnect",a.bind(b.onChildDisconnectListener,b,c)))}function f(b,c,d,e){a.result(b,"link")&&b.undoLink(d,c),a.result(b,"expose")&&b.undoExpose(d,c),b.useDeep&&(a.each(d.modules,function(a){f(b,c,a,d)},b),d.off("on:child:connect",null,b),d.off("on:child:disconnect",null,b)),b.dispose(d,e)}var g=c.extend({expose:null,link:null,useDeep:null,use:function(){},dispose:function(){},constructor:function(a){c.apply(this,arguments),b.copyOption(["link","expose","useDeep"],this,a),this.on("do:use:module",this.doUseModuleListener,this),this.on("do:dispose:module",this.doDisposeModuleListener,this),"function"==typeof this.initialize&&this.initialize.apply(this,arguments)},doUseModuleListener:function(a,b){e(this,b,a)},doDisposeModuleListener:function(a,b){f(this,b,a)},onChildConnectListener:function(a,b,c,d){e(this,a,b,d)},onChildDisconnectListener:function(a,b,c,d){f(this,a,b,d)},doLink:function(a,b){a[b]=this},undoLink:function(a,b){a[b]=null},doExpose:function(b){var c=this;a.each(this.exposedMethods,function(d){b[d]=a.bind(c[d],c)})},undoExpose:function(b){a.each(this.exposedMethods,function(a){b[a]=null})}});return g.mix(d),g}(underscore,b,c,d),f=function(a){var b=a.extend({constructor:function(){this.store=[],a.apply(this,arguments)},replay:function(a){_.each(this.store,function(b){var c=b[0],d=b[1];switch(c){case"on":case"off":case"once":if(d&&this===d[2]){a[c].apply(a,d.slice(0,2).concat([a]).concat(d.slice(3)));break}case"stopListening":case"listenToOnce":case"listenTo":if(d&&this===d[1]){a[c].apply(a,d.slice(0,1).concat([a]).concat(d.slice(2)));break}default:a[c].apply(a,d)}},this)}});return _.each(["on","off","once","listenTo","listenToOnce","stopListening","trigger"],function(a){b.prototype[a]=function(){var b=_.toArray(arguments);return this.store.push([a,b]),this}}),b}(c),g=function(a,b,c){var d=c.extend({factories:null,views:null,constructor:function(){this.factories=a.clone(this.factories||{}),this.views=a.clone(this.views||{}),c.apply(this,arguments),this.initialize.apply(this,arguments)},initialize:function(){},get:function(b){var c,d;return this.views[b]?this.views[b]:(d=this.factories[b],c="function"==typeof d?d.apply(d,a.rest(arguments,1)):d,c&&c.recycle&&(this.views[b]=c),c)},set:b.keyValueOrObject(function(a,b){return this.views[a]&&this.views[a].remove(),this.factories[a]=b,this}),has:function(a){return this.views[a]||this.factories[a]},clean:function(){return a.each(this.views,function(a,b){this.remove(b)},this),this.factories=[],this},remove:function(a){this.views[a]&&this.views[a].remove(!0)}});return d}(underscore,b,c),h=function(){var a={run:!1,start:function(){return this.run?!1:(this._firstStarted||(this._firstStart(),this._firstStarted=!0),this._doStart(),this.thenWith(this,null,this._startError),void 0)},standby:function(){return this.run?(this._doStandby(),void 0):!1},stop:function(){return this._firstStarted?(this.standby(),this.thenWith(this,this._doStop,this._stopError),void 0):!1},_startError:function(a){throw a},_stopError:function(a){throw a},_firstStart:function(){this.trigger("start:first",this)},_doStart:function(){this.trigger("start",this),this.run=!0},_doStandby:function(){this.trigger("standby",this),this.run=!1},_doStop:function(){this._firstStarted=!1,this.trigger("stop",this)}};return a}(),i=function(a,b){function c(){this.deferred=new b,this.promises=[],this.uuid=e++,this.timeouts=[],this.results=[]}var d={timeout:"async process timed out",rejected:"some asynchronous process failed",missing_method:function(b){a.template("Promise has no `<%= method %>` method.",{method:b})}},e=0,f={waitFor:function(b,d){return this.isWaiting()||(this.async=new c,this.async.onStop=a.bind(function(){this.async=null},this)),this.async.enqueue(b,d),this},then:function(a,b,c){return this.isWaiting()?(this.async.then(a,b,c),this):(a&&a(),c&&c(),this)},thenWith:function(b,c,d,e){return this.then(c?a.bind(c,b):c,d?a.bind(d,b):d,e?a.bind(e,b):e)},abort:function(){return this.isWaiting()&&this.async.abort(),this},isWaiting:function(){return!!this.async&&!!this.async.deferred&&"pending"===this.async.deferred.state()}};return a.extend(c.prototype,{enqueue:function(a,b){a=this.ensurePromise(a),b=this.ensureOptions(b),a.deferrableUuid=this.uuid,this.promises.push(a),this.results.push(null),b.timeout&&this.addTimeout(a,b.timeout),b.failFast?this.addFailFast(a):this.addFailSilently(a)},then:function(a,b,c){a&&this.deferred.done(a),b&&this.deferred.fail(b),c&&this.deferred.always(c)},ensureOptions:function(b){return a.extend({failFast:!0,timeout:!1},b||{})},ensurePromise:function(a){if(a&&(a.then||a.done))return a;var c=new b;return setTimeout(function(){c.resolve(a)},0),c},addTimeout:function(a,b){if(!a.always)throw new Error(d.missing_method("always"));var c=setTimeout(function(){a.reject(d.timeout)},b);a.always(function(){c&&clearTimeout(c)}),this.timeouts.push(c)},addFailSilently:function(b){if(!b.always)throw new Error(d.missing_method("always"));b.always(a.bind(this.onAlways,this,b))},addFailFast:function(b){if(!b.done)throw new Error(d.missing_method("done"));if(b.done(a.bind(this.onDone,this,b)),!b.fail)throw new Error(d.missing_method("fail"));b.fail(a.bind(this.onFail,this,b))},onDone:function(b){this.isValidPromise(b)&&this.processAsyncReturn(b,a.rest(arguments,1))},onFail:function(a,b){this.isValidPromise(a)&&this.reject(b)},onAlways:function(b){this.isValidPromise(b)&&this.processAsyncReturn(b,a.rest(arguments,1))},reject:function(a){this.deferred.reject(a),this.deferred.reject.apply(this.deferred,[a].concat(this.promises)),this.stop()},processAsyncReturn:function(b,c){var e=a.every(this.promises,function(a){return"pending"!==a.state()});if(a.any(this.promises,function(d,e){return d===b?(this.results.splice(e,1,c.length<=2?c[0]:a.rest(c,1)),!0):void 0},this),!e)return this;var f=a.any(this.promises,function(a){return"resolved"!==a.state()});return f?this.reject(d.rejected):(this.deferred.resolve.apply(this.deferred,this.results),this.stop(),void 0)},isValidPromise:function(a){return this.uuid===a.deferrableUuid},abort:function(b){return a.each(this.promises,function(b){b.abort&&a.isFunction(b.abort)&&b.abort()}),this.reject(b||d.aborted)},stop:function(){this.uuid=null,a.each(this.timeouts,function(a){a&&clearTimeout(a)}),this.onStop()}}),f}(underscore,a),j=function(a,b,c,d){var e=["get","set","has","save"],f=d.extend({model:null,constructor:function(f){c.copyOption(["defaults","model"],this,f),d.apply(this),this.model||(this.model=new b.Model(this.defaults||{}));var g=this,h=this.model;a.each(e,function(b){g[b]=a.bind(h[b],h)})},use:function(a){this.listenTo(a,"do:set:session",this.set),this.listenTo(a,"do:get:session",this.get),this.listenTo(a,"do:save:session",this.save),this.listenTo(a,"do:has:session",this.has)},dispose:function(a){this.stopListening(a,"do:store:session",this.set),this.stopListening(a,"do:get:session",this.get),this.stopListening(a,"do:save:session",this.save),this.stopListening(a,"do:has:session",this.has)}});return f}(underscore,backbone,b,e),k=function(a,b,c,d){var e=b.extend({selector:"body",canvas:null,useDeep:!0,initialize:function(b){c.copyOption(["selector","canvas"],this,b),this.canvas||(this.canvas=new d({template:a(this.selector).html(),manageRendering:!1}))},use:function(a,b){var d=b&&b.canvas||this.canvas,e=a.containerRegion||b&&b.region;c.copyOption(["region"],a,a.options),b||(a.run?this.renderAndAppendService(a):a.on("start",this.renderAndAppendService,this)),a.canvas?a.run?this.renderAndAppendCanvas(e,a,d):a.on("start",_.bind(this.renderAndAppendCanvas,this,e,a,d),this):a.canvas=d,a.on("do:view:attach",this.attachView,this)},dispose:function(a,b){b?this.disposeRegion(a,b):this.disposeRoot(a)},renderAndAppendService:function(a){this.canvas.setElement(this.selector),a.render(this.canvas)},renderAndAppendCanvas:function(a,b,c){b.render(b.canvas),c.registerView(b.canvas,a)},attachView:function(a,b){var c=a.canvas||this.canvas;c.registerView(b,a.region)},useRegion:function(a,b){var c=b&&b.canvas||this.canvas;a.canvas||b&&b.attach(c),a.on("do:view:attach",function(a,c){var d=a.canvas||b&&b.canvas||this.canvas;d.registerView(c,a.region)},this)},disposeRoot:function(a){a.off("start:first",null,this)},disposeRegion:function(a){a.off("do:view:attach",null,this)}});return e}(jquery,e,b,views_regionManager),l=function(a,b,c,d){function e(){var b=a.toArray(arguments);return b=a.reduce(b,function(a,b){return b&&a.push(f(b,!a.length)),a},[]),b.join("/")}function f(a,b){return b?a.match(h)[1]:a.match(i)[1]}var g=d.extend({prefix:"",router:null,history:null,useDeep:!0,initialize:function(d){c.copyOption(["router","prefix","history"],this,d),a.bindAll(this,"startHistory","stopHistory","navigate","route"),this.router||(this.router=new b.Router)},use:function(a,b){b||(this.listenTo(a,"start:first",this.startHistory),this.listenTo(a,"stop",this.stopHistory)),this.listenTo(a,"do:route:navigate",this.navigate),this.listenTo(a,"do:route:register",this.route),this.setModuleUrl(a,b).registerModuleRoutes(a)},dispose:function(a,b){this.unregisterModuleRoutes(a),a.url=null,this.stopListening(a,"do:route:navigate",this.navigate),this.stopListening(a,"do:route:register",this.route),b||(this.stopListening(a,"start:first",this.startHistory),this.stopListening(a,"stop",this.stopHistory))},setModuleUrl:function(a,b){var d=b?b.url:this.prefix;return c.copyOption(["urlRoot"],a,a.options),a.url=e(d,a.urlRoot),this},registerModuleRoutes:function(b){var c=b.routes;return c?(a.each(c,function(a,c){b.route(c,a)}),this):this},unregisterModuleRoutes:function(a){var b=a.routes;return b?(console.error("Up to now there is no way to unregister routes"),this):this},startHistory:function(a){return a.thenWith(this,function(){b.History.started||b.history.start(this.history)}),this},stopHistory:function(){return b.History.started&&b.history.stop(),this},navigate:function(b,c){var d=a.rest(arguments,2);return c=e(b.url,c),this.router.navigate.apply(this.router,[c].concat(d)),this},route:function(b,c,d,f){var g;return c=e(b.url,c),"function"!=typeof d&&f||(f=d,d=""),g=f,f=function(){var c,d,e=arguments;"string"==typeof g&&"function"==typeof b[g]?(d=b[g],g=d):"string"==typeof g&&"function"!=typeof g&&(c=g,g=a.bind(b.trigger,b,c)),b.run||b.start(),b.then(function(){g.apply(b,e)})},this.router.route.call(this.router,c,d,f),this}}),h=new RegExp("^(.*[^/]+)/*$"),i=new RegExp("^/*([^/]*.*[^/]+)/*$");return g}(underscore,backbone,b,e),m=function(a,b){var c=b.extend({useDeep:!0,initialize:function(){a.bindAll(this,"handle")},use:function(a){a.addEventModifier("app",this.handle,["on","off","once","trigger"])},dispose:function(a){a.removeEventModifier("app")},handle:function(a,b,c,d){return this[b].apply(this,[c].concat(d))}});return c}(underscore,e),n=function(a,b,c){var d=c.extend({engine:null,useDeep:!0,constructor:function(d){b.copyOption(["engine"],this,d),c.apply(this,arguments),a.bindAll(this,"doViewRender","helper"),this.engine&&this.engine.start()},use:function(a){b.copyOption(["helpers"],a,a.options),a.helpers||(a.helpers={}),this.helper({},a),this.listenTo(a,"do:view:render",this.doViewRender),this.listenTo(a,"do:register:helper",this.helper)},dispose:function(a){this.stopListening(a,"do:view:render",this.doViewRender),this.stopListening(a,"do:register:helper",this.helper),a.helper=null},helper:b.keyValueOrObject(function(a,b,c){return c||(c=this),c.helpers||(c.helpers={}),c.helpers[a]=b,this}),doViewRender:function(a,b){var c=this.getHelpers(a,b),d=this.getExtraData(a,b);this.engine.render(b,c,d)},getHelpers:function(b,c){return a.extend({},this.helpers,b.helpers,c.helpers||{})},getExtraData:function(a,b){return{view:b,module:a}}});return d}(underscore,b,e),o=function(a,b,c,d,e,f,g){var h={precompile:function(a){return"string"==typeof a?c.compile(a):a},renderHtml:function(a,b){return this.template(a,b)}},i=d.extend({_firstStart:function(){a.defaults(b.View.prototype,h),g._firstStart.apply(this,arguments)},_doStop:function(){this.engine;a.each(h,function(a,c){b.View.prototype[c]===a&&(b.View.prototype[c]=null)})},render:function(a,b,c){var d={helpers:b,data:c};return a.render(d)}});return i.mix([e,f,g]),i}(underscore,backbone,handlebars,c,d,i,h),p=function(a,b,c,d,e,f){var g={precompile:function(b){return"string"==typeof b?a.template(b):b},renderHtml:function(b,c){return this.template(a.defaults(b,c))}},h=c.extend({_firstStart:function(){a.defaults(b.View.prototype,g),f._firstStart.apply(this,arguments)},_doStop:function(){this.engine;a.each(g,function(a,c){b.View.prototype[c]===a&&(b.View.prototype[c]=null)})},render:function(b,c,d){var e,f;return e={helpers:c,data:d},a.each(c||{},function(b,d){c[d]=function(){return b.apply(this,a.toArray(arguments).concat([e]))}}),f=a.extend({},c||{},d||{}),b.render(f)}});return h.mix([d,e,f]),h}(underscore,backbone,c,d,i,h),q=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var r={utils:b,Mixin:c,mixins:{Observable:h,Startable:i,Deferrable:j},Module:d,Service:e,services:{Session:k,Canvas:l,Routing:m,Events:n,Template:o},engines:{Underscore:p,Handlebars:q},ViewStore:g,ObservableBuffer:f};return r}(a,b,c,{},e,f,g,d,h,i,j,k,l,m,n,o,p);return q}();