-
Notifications
You must be signed in to change notification settings - Fork 0
/
backbone.js
1 lines (1 loc) · 23.4 KB
/
backbone.js
1
!function(b){var a="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(c,d,e){a.Backbone=b(a,e,c,d)});else if("undefined"!=typeof exports){var c,d=require("underscore");try{c=require("jquery")}catch(e){}b(a,exports,d,c)}else a.Backbone=b(a,{},a._,a.jQuery||a.Zepto||a.ender||a.$)}(function(k,b,c,l){var m,n=k.Backbone,o=Array.prototype.slice;b.VERSION="1.4.0",b.$=l,b.noConflict=function(){return k.Backbone=n,this},b.emulateHTTP=!1,b.emulateJSON=!1;var a=b.Events={},p=/\s+/,q=function(h,b,a,g,f){var d,e=0;if(a&&"object"==typeof a)for(void 0!==g&&("context"in f)&& void 0===f.context&&(f.context=g),d=c.keys(a);e<d.length;e++)b=q(h,b,d[e],a[d[e]],f);else if(a&&p.test(a))for(d=a.split(p);e<d.length;e++)b=h(b,d[e],g,f);else b=h(b,a,g,f);return b};a.on=function(a,b,c){return this._events=q(r,this._events||{},a,b,{context:c,ctx:this,listening:m}),m&&((this._listeners||(this._listeners={}))[m.id]=m,m.interop=!1),this},a.listenTo=function(a,d,e){if(!a)return this;var f=a._listenId||(a._listenId=c.uniqueId("l")),h=this._listeningTo||(this._listeningTo={}),b=m=h[f];b||(this._listenId||(this._listenId=c.uniqueId("l")),b=m=h[f]=new g(this,a));var i=s(a,d,e,this);if(m=void 0,i)throw i;return b.interop&&b.on(d,e),this};var r=function(a,d,e,b){if(e){var g=a[d]||(a[d]=[]),f=b.context,h=b.ctx,c=b.listening;c&&c.count++,g.push({callback:e,context:f,ctx:f||h,listening:c})}return a},s=function(a,b,c,d){try{a.on(b,c,d)}catch(e){return e}};a.off=function(a,b,c){return this._events&&(this._events=q(t,this._events,a,b,{context:c,listeners:this._listeners})),this},a.stopListening=function(e,f,g){var a=this._listeningTo;if(!a)return this;for(var h=e?[e._listenId]:c.keys(a),d=0;d<h.length;d++){var b=a[h[d]];if(!b)break;b.obj.off(f,g,this),b.interop&&b.off(f,g)}return c.isEmpty(a)&&(this._listeningTo=void 0),this};var t=function(b,a,f,l){if(b){var d,h=l.context,m=l.listeners,e=0;if(!a&&!h&&!f){for(d=c.keys(m);e<d.length;e++)m[d[e]].cleanup();return}for(d=a?[a]:c.keys(b);e<d.length;e++){var i=b[a=d[e]];if(!i)break;for(var j=[],k=0;k<i.length;k++){var g=i[k];if(f&&f!==g.callback&&f!==g.callback._callback||h&&h!==g.context)j.push(g);else{var n=g.listening;n&&n.off(a,f)}}j.length?b[a]=j:delete b[a]}return b}};a.once=function(b,a,c){var d=q(u,{},b,a,this.off.bind(this));return"string"==typeof b&&null==c&&(a=void 0),this.on(d,a,c)},a.listenToOnce=function(a,b,c){var d=q(u,{},b,c,this.stopListening.bind(this,a));return this.listenTo(a,d)};var u=function(a,d,b,f){if(b){var e=a[d]=c.once(function(){f(d,e),b.apply(this,arguments)});e._callback=b}return a};a.trigger=function(d){if(!this._events)return this;for(var b=Math.max(0,arguments.length-1),c=Array(b),a=0;a<b;a++)c[a]=arguments[a+1];return q(v,this._events,d,void 0,c),this};var v=function(b,d,f,e){if(b){var c=b[d],a=b.all;c&&a&&(a=a.slice()),c&&w(c,e),a&&w(a,[d].concat(e))}return b},w=function(c,d){var a,b=-1,e=c.length,f=d[0],g=d[1],h=d[2];switch(d.length){case 0:for(;++b<e;)(a=c[b]).callback.call(a.ctx);return;case 1:for(;++b<e;)(a=c[b]).callback.call(a.ctx,f);return;case 2:for(;++b<e;)(a=c[b]).callback.call(a.ctx,f,g);return;case 3:for(;++b<e;)(a=c[b]).callback.call(a.ctx,f,g,h);return;default:for(;++b<e;)(a=c[b]).callback.apply(a.ctx,d);return}},g=function(a,b){this.id=a._listenId,this.listener=a,this.obj=b,this.interop=!0,this.count=0,this._events=void 0};g.prototype.on=a.on,g.prototype.off=function(b,c){var a;this.interop?(this._events=q(t,this._events,b,c,{context:void 0,listeners:void 0}),a=!this._events):(this.count--,a=0===this.count),a&&this.cleanup()},g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId],this.interop||delete this.obj._listeners[this.id]},a.bind=a.on,a.unbind=a.off,c.extend(b,a);var d=b.Model=function(e,a){var b=e||{};a||(a={}),this.preinitialize.apply(this,arguments),this.cid=c.uniqueId(this.cidPrefix),this.attributes={},a.collection&&(this.collection=a.collection),a.parse&&(b=this.parse(b,a)||{});var d=c.result(this,"defaults");b=c.defaults(c.extend({},d,b),d),this.set(b,a),this.changed={},this.initialize.apply(this,arguments)};c.extend(d.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(a){return c.clone(this.attributes)},sync:function(){return b.sync.apply(this,arguments)},get:function(a){return this.attributes[a]},escape:function(a){return c.escape(this.get(a))},has:function(a){return null!=this.get(a)},matches:function(a){return!!c.iteratee(a,this)(this.attributes)},set:function(f,d,a){if(null==f)return this;if("object"==typeof f?(i=f,a=d):(i={})[f]=d,a||(a={}),!this._validate(i,a))return!1;var i,m=a.unset,j=a.silent,e=[],k=this._changing;this._changing=!0,k||(this._previousAttributes=c.clone(this.attributes),this.changed={});var g=this.attributes,l=this.changed,n=this._previousAttributes;for(var b in i)d=i[b],c.isEqual(g[b],d)||e.push(b),c.isEqual(n[b],d)?delete l[b]:l[b]=d,m?delete g[b]:g[b]=d;if(this.idAttribute in i&&(this.id=this.get(this.idAttribute)),!j){e.length&&(this._pending=a);for(var h=0;h<e.length;h++)this.trigger("change:"+e[h],this,g[e[h]],a)}if(k)return this;if(!j)for(;this._pending;)a=this._pending,this._pending=!1,this.trigger("change",this,a);return this._pending=!1,this._changing=!1,this},unset:function(a,b){return this.set(a,void 0,c.extend({},b,{unset:!0}))},clear:function(b){var a={};for(var d in this.attributes)a[d]=void 0;return this.set(a,c.extend({},b,{unset:!0}))},hasChanged:function(a){return null==a?!c.isEmpty(this.changed):c.has(this.changed,a)},changedAttributes:function(a){if(!a)return!!this.hasChanged()&&c.clone(this.changed);var d,g=this._changing?this._previousAttributes:this.attributes,e={};for(var b in a){var f=a[b];c.isEqual(g[b],f)||(e[b]=f,d=!0)}return!!d&&e},previous:function(a){return null!=a&&this._previousAttributes?this._previousAttributes[a]:null},previousAttributes:function(){return c.clone(this._previousAttributes)},fetch:function(a){a=c.extend({parse:!0},a);var b=this,d=a.success;return a.success=function(c){var e=a.parse?b.parse(c,a):c;if(!b.set(e,a))return!1;d&&d.call(a.context,b,c,a),b.trigger("sync",b,c,a)},R(this,a),this.sync("read",this,a)},save:function(d,e,a){null==d||"object"==typeof d?(b=d,a=e):(b={})[d]=e;var b,f=(a=c.extend({validate:!0,parse:!0},a)).wait;if(b&&!f){if(!this.set(b,a))return!1}else if(!this._validate(b,a))return!1;var j=this,k=a.success,g=this.attributes;a.success=function(d){j.attributes=g;var e=a.parse?j.parse(d,a):d;if(f&&(e=c.extend({},b,e)),e&&!j.set(e,a))return!1;k&&k.call(a.context,j,d,a),j.trigger("sync",j,d,a)},R(this,a),b&&f&&(this.attributes=c.extend({},g,b));var h=this.isNew()?"create":a.patch?"patch":"update";"patch"!==h||a.attrs||(a.attrs=b);var i=this.sync(h,this,a);return this.attributes=g,i},destroy:function(a){a=a?c.clone(a):{};var f=this,g=a.success,d=a.wait,e=function(){f.stopListening(),f.trigger("destroy",f,f.collection,a)};a.success=function(b){d&&e(),g&&g.call(a.context,f,b,a),f.isNew()||f.trigger("sync",f,b,a)};var b=!1;return this.isNew()?c.defer(a.success):(R(this,a),b=this.sync("delete",this,a)),d||e(),b},url:function(){var a=c.result(this,"urlRoot")||c.result(this.collection,"url")||Q();if(this.isNew())return a;var b=this.get(this.idAttribute);return a.replace(/[^\/]$/,"$&/")+encodeURIComponent(b)},parse:function(a,b){return a},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(a){return this._validate({},c.extend({},a,{validate:!0}))},_validate:function(a,b){if(!b.validate||!this.validate)return!0;a=c.extend({},this.attributes,a);var d=this.validationError=this.validate(a,b)||null;return!d||(this.trigger("invalid",this,d,c.extend(b,{validationError:d})),!1)}});var _=b.Collection=function(b,a){a||(a={}),this.preinitialize.apply(this,arguments),a.model&&(this.model=a.model),void 0!==a.comparator&&(this.comparator=a.comparator),this._reset(),this.initialize.apply(this,arguments),b&&this.reset(b,c.extend({silent:!0},a))},x={add:!0,remove:!0,merge:!0},y={add:!0,remove:!1},z=function(c,e,b){b=Math.min(Math.max(b,0),c.length);var a,d=Array(c.length-b),f=e.length;for(a=0;a<d.length;a++)d[a]=c[a+b];for(a=0;a<f;a++)c[a+b]=e[a];for(a=0;a<d.length;a++)c[a+f+b]=d[a]};c.extend(_.prototype,a,{model:d,preinitialize:function(){},initialize:function(){},toJSON:function(a){return this.map(function(b){return b.toJSON(a)})},sync:function(){return b.sync.apply(this,arguments)},add:function(a,b){return this.set(a,c.extend({merge:!1},b,y))},remove:function(b,a){a=c.extend({},a);var e=!c.isArray(b);b=e?[b]:b.slice();var d=this._removeModels(b,a);return!a.silent&&d.length&&(a.changes={added:[],merged:[],removed:d},this.trigger("update",this,a)),e?d[0]:d},set:function(e,a){if(null!=e){(a=c.extend({},x,a)).parse&&!this._isModel(e)&&(e=this.parse(e,a)||[]);var b,d,o=!c.isArray(e);e=o?[e]:e.slice();var f=a.at;null!=f&&(f=+f),f>this.length&&(f=this.length),f<0&&(f+=this.length+1);var h=[],g=[],l=[],i=[],k={},p=a.add,s=a.merge,q=a.remove,j=!1,m=this.comparator&&null==f&& !1!==a.sort,t=c.isString(this.comparator)?this.comparator:null;for(d=0;d<e.length;d++){b=e[d];var _=this.get(b);if(_){if(s&&b!==_){var n=this._isModel(b)?b.attributes:b;a.parse&&(n=_.parse(n,a)),_.set(n,a),l.push(_),m&&!j&&(j=_.hasChanged(t))}k[_.cid]||(k[_.cid]=!0,h.push(_)),e[d]=_}else p&&(b=e[d]=this._prepareModel(b,a))&&(g.push(b),this._addReference(b,a),k[b.cid]=!0,h.push(b))}if(q){for(d=0;d<this.length;d++)k[(b=this.models[d]).cid]||i.push(b);i.length&&this._removeModels(i,a)}var r=!1,u=!m&&p&&q;if(h.length&&u?(r=this.length!==h.length||c.some(this.models,function(a,b){return a!==h[b]}),this.models.length=0,z(this.models,h,0),this.length=this.models.length):g.length&&(m&&(j=!0),z(this.models,g,null==f?this.length:f),this.length=this.models.length),j&&this.sort({silent:!0}),!a.silent){for(d=0;d<g.length;d++)null!=f&&(a.index=f+d),(b=g[d]).trigger("add",b,this,a);(j||r)&&this.trigger("sort",this,a),(g.length||i.length||l.length)&&(a.changes={added:g,removed:i,merged:l},this.trigger("update",this,a))}return o?e[0]:e}},reset:function(b,a){a=a?c.clone(a):{};for(var d=0;d<this.models.length;d++)this._removeReference(this.models[d],a);return a.previousModels=this.models,this._reset(),b=this.add(b,c.extend({silent:!0},a)),a.silent||this.trigger("reset",this,a),b},push:function(a,b){return this.add(a,c.extend({at:this.length},b))},pop:function(a){var b=this.at(this.length-1);return this.remove(b,a)},unshift:function(a,b){return this.add(a,c.extend({at:0},b))},shift:function(a){var b=this.at(0);return this.remove(b,a)},slice:function(){return o.apply(this.models,arguments)},get:function(a){if(null!=a)return this._byId[a]||this._byId[this.modelId(this._isModel(a)?a.attributes:a)]||a.cid&&this._byId[a.cid]},has:function(a){return null!=this.get(a)},at:function(a){return a<0&&(a+=this.length),this.models[a]},where:function(a,b){return this[b?"find":"filter"](a)},findWhere:function(a){return this.where(a,!0)},sort:function(b){var a=this.comparator;if(!a)throw new Error("Cannot sort a set without a comparator");b||(b={});var d=a.length;return c.isFunction(a)&&(a=a.bind(this)),1===d||c.isString(a)?this.models=this.sortBy(a):this.models.sort(a),b.silent||this.trigger("sort",this,b),this},pluck:function(a){return this.map(a+"")},fetch:function(a){var b=(a=c.extend({parse:!0},a)).success,d=this;return a.success=function(c){d[a.reset?"reset":"set"](c,a),b&&b.call(a.context,d,c,a),d.trigger("sync",d,c,a)},R(this,a),this.sync("read",this,a)},create:function(b,a){var d=(a=a?c.clone(a):{}).wait;if(!(b=this._prepareModel(b,a)))return!1;d||this.add(b,a);var e=this,f=a.success;return a.success=function(b,c,a){d&&e.add(b,a),f&&f.call(a.context,b,c,a)},b.save(null,a),b},parse:function(a,b){return a},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(a){return a[this.model.prototype.idAttribute||"id"]},values:function(){return new h(this,A)},keys:function(){return new h(this,B)},entries:function(){return new h(this,C)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(a,b){if(this._isModel(a))return a.collection||(a.collection=this),a;(b=b?c.clone(b):{}).collection=this;var d=new this.model(a,b);return d.validationError?(this.trigger("invalid",this,d.validationError,b),!1):d},_removeModels:function(d,b){for(var e=[],c=0;c<d.length;c++){var a=this.get(d[c]);if(a){var f=this.indexOf(a);this.models.splice(f,1),this.length--,delete this._byId[a.cid];var g=this.modelId(a.attributes);null!=g&&delete this._byId[g],b.silent||(b.index=f,a.trigger("remove",a,this,b)),e.push(a),this._removeReference(a,b)}}return e},_isModel:function(a){return a instanceof d},_addReference:function(a,c){this._byId[a.cid]=a;var b=this.modelId(a.attributes);null!=b&&(this._byId[b]=a),a.on("all",this._onModelEvent,this)},_removeReference:function(a,c){delete this._byId[a.cid];var b=this.modelId(a.attributes);null!=b&&delete this._byId[b],this===a.collection&&delete a.collection,a.off("all",this._onModelEvent,this)},_onModelEvent:function(b,a,e,f){if(a){if(("add"===b||"remove"===b)&&e!==this)return;if("destroy"===b&&this.remove(a,f),"change"===b){var c=this.modelId(a.previousAttributes()),d=this.modelId(a.attributes);c!==d&&(null!=c&&delete this._byId[c],null!=d&&(this._byId[d]=a))}}this.trigger.apply(this,arguments)}});var e="function"==typeof Symbol&&Symbol.iterator;e&&(_.prototype[e]=_.prototype.values);var h=function(a,b){this._collection=a,this._kind=b,this._index=0},A=1,B=2,C=3;e&&(h.prototype[e]=function(){return this}),h.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var a,b=this._collection.at(this._index);if(this._index++,this._kind===A)a=b;else{var c=this._collection.modelId(b.attributes);a=this._kind===B?c:[c,b]}return{value:a,done:!1}}this._collection=void 0}return{value:void 0,done:!0}};var i=b.View=function(a){this.cid=c.uniqueId("view"),this.preinitialize.apply(this,arguments),c.extend(this,c.pick(a,E)),this._ensureElement(),this.initialize.apply(this,arguments)},D=/^(\S+)\s*(.*)$/,E=["model","collection","el","id","attributes","className","tagName","events"];c.extend(i.prototype,a,{tagName:"div",$:function(a){return this.$el.find(a)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(a){return this.undelegateEvents(),this._setElement(a),this.delegateEvents(),this},_setElement:function(a){this.$el=a instanceof b.$?a:b.$(a),this.el=this.$el[0]},delegateEvents:function(a){if(a||(a=c.result(this,"events")),!a)return this;for(var d in this.undelegateEvents(),a){var b=a[d];if(c.isFunction(b)||(b=this[b]),b){var e=d.match(D);this.delegate(e[1],e[2],b.bind(this))}}return this},delegate:function(a,b,c){return this.$el.on(a+".delegateEvents"+this.cid,b,c),this},undelegateEvents:function(){return this.$el&&this.$el.off(".delegateEvents"+this.cid),this},undelegate:function(a,b,c){return this.$el.off(a+".delegateEvents"+this.cid,b,c),this},_createElement:function(a){return document.createElement(a)},_ensureElement:function(){if(this.el)this.setElement(c.result(this,"el"));else{var a=c.extend({},c.result(this,"attributes"));this.id&&(a.id=c.result(this,"id")),this.className&&(a.class=c.result(this,"className")),this.setElement(this._createElement(c.result(this,"tagName"))),this._setAttributes(a)}},_setAttributes:function(a){this.$el.attr(a)}});var $=function(b,a,c,d){switch(a){case 1:return function(){return b[c](this[d])};case 2:return function(a){return b[c](this[d],a)};case 3:return function(a,e){return b[c](this[d],G(a,this),e)};case 4:return function(a,e,f){return b[c](this[d],G(a,this),e,f)};default:return function(){var a=o.call(arguments);return a.unshift(this[d]),b[c].apply(b,a)}}},F=function(b,d,a,e){c.each(a,function(c,a){d[a]&&(b.prototype[a]=$(d,c,a,e))})},G=function(a,b){return c.isFunction(a)?a:c.isObject(a)&&!b._isModel(a)?H(a):c.isString(a)?function(b){return b.get(a)}:a},H=function(a){var b=c.matches(a);return function(a){return b(a.attributes)}};c.each([[_,{forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3},"models"],[d,{keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1},"attributes"]],function(a){var b=a[0],d=a[1],e=a[2];b.mixin=function(a){var d=c.reduce(c.functions(a),function(a,b){return a[b]=0,a},{});F(b,a,d,e)},F(b,c,d,e)}),b.sync=function(g,e,a){var f=I[g];c.defaults(a||(a={}),{emulateHTTP:b.emulateHTTP,emulateJSON:b.emulateJSON});var d={type:f,dataType:"json"};if(a.url||(d.url=c.result(e,"url")||Q()),null==a.data&&e&&("create"===g||"update"===g||"patch"===g)&&(d.contentType="application/json",d.data=JSON.stringify(a.attrs||e.toJSON(a))),a.emulateJSON&&(d.contentType="application/x-www-form-urlencoded",d.data=d.data?{model:d.data}:{}),a.emulateHTTP&&("PUT"===f||"DELETE"===f||"PATCH"===f)){d.type="POST",a.emulateJSON&&(d.data._method=f);var i=a.beforeSend;a.beforeSend=function(a){if(a.setRequestHeader("X-HTTP-Method-Override",f),i)return i.apply(this,arguments)}}"GET"===d.type||a.emulateJSON||(d.processData=!1);var j=a.error;a.error=function(d,b,c){a.textStatus=b,a.errorThrown=c,j&&j.call(a.context,d,b,c)};var h=a.xhr=b.ajax(c.extend(d,a));return e.trigger("request",e,h,a),h};var I={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};b.ajax=function(){return b.$.ajax.apply(b.$,arguments)};var j=b.Router=function(a){a||(a={}),this.preinitialize.apply(this,arguments),a.routes&&(this.routes=a.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},J=/\((.*?)\)/g,K=/(\(\?)?:\w+/g,L=/\*\w+/g,M=/[\-{}\[\]+?.,\\\^$|#\s]/g;c.extend(j.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(a,d,e){c.isRegExp(a)||(a=this._routeToRegExp(a)),c.isFunction(d)&&(e=d,d=""),e||(e=this[d]);var f=this;return b.history.route(a,function(g){var c=f._extractParameters(a,g);!1!==f.execute(e,c,d)&&(f.trigger.apply(f,["route:"+d].concat(c)),f.trigger("route",d,c),b.history.trigger("route",f,d,c))}),this},execute:function(a,b,c){a&&a.apply(this,b)},navigate:function(a,c){return b.history.navigate(a,c),this},_bindRoutes:function(){if(this.routes){this.routes=c.result(this,"routes");for(var a,b=c.keys(this.routes);null!=(a=b.pop());)this.route(a,this.routes[a])}},_routeToRegExp:function(a){return a=a.replace(M,"\\$&").replace(J,"(?:$1)?").replace(K,function(a,b){return b?a:"([^/?]+)"}).replace(L,"([^?]*?)"),new RegExp("^"+a+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(a,b){var d=a.exec(b).slice(1);return c.map(d,function(a,b){return b===d.length-1?a||null:a?decodeURIComponent(a):null})}});var f=b.History=function(){this.handlers=[],this.checkUrl=this.checkUrl.bind(this),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},N=/^[#\/]|\s+$/g,O=/^\/+|\/+$/g,P=/#.*$/;f.started=!1,c.extend(f.prototype,a,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root&&!this.getSearch()},matchRoot:function(){return this.decodeFragment(this.location.pathname).slice(0,this.root.length-1)+"/"===this.root},decodeFragment:function(a){return decodeURI(a.replace(/%25/g,"%2525"))},getSearch:function(){var a=this.location.href.replace(/#.*/,"").match(/\?.+/);return a?a[0]:""},getHash:function(b){var a=(b||this).location.href.match(/#(.*)$/);return a?a[1]:""},getPath:function(){var a=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return"/"===a.charAt(0)?a.slice(1):a},getFragment:function(a){return null==a&&(a=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),a.replace(N,"")},start:function(e){if(f.started)throw new Error("Backbone.history has already been started");if(f.started=!0,this.options=c.extend({root:"/"},this.options,e),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange="onhashchange"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.history&&this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(O,"/"),this._wantsHashChange&&this._wantsPushState){if(this._hasPushState||this.atRoot())this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0});else{var g=this.root.slice(0,-1)||"/";return this.location.replace(g+"#"+this.getPath()),!0}}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var b=document.body,a=b.insertBefore(this.iframe,b.firstChild).contentWindow;a.document.open(),a.document.close(),a.location.hash="#"+this.fragment}var d=window.addEventListener||function(a,b){return attachEvent("on"+a,b)};if(this._usePushState?d("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?d("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var a=window.removeEventListener||function(a,b){return detachEvent("on"+a,b)};this._usePushState?a("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&a("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),f.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(b){var a=this.getFragment();if(a===this.fragment&&this.iframe&&(a=this.getHash(this.iframe.contentWindow)),a===this.fragment)return!1;this.iframe&&this.navigate(a),this.loadUrl()},loadUrl:function(a){return!!this.matchRoot()&&(a=this.fragment=this.getFragment(a),c.some(this.handlers,function(b){if(b.route.test(a))return b.callback(a),!0}))},navigate:function(a,b){if(!f.started)return!1;b&& !0!==b||(b={trigger:!!b}),a=this.getFragment(a||"");var c=this.root;(""===a||"?"===a.charAt(0))&&(c=c.slice(0,-1)||"/");var e=c+a;a=a.replace(P,"");var g=this.decodeFragment(a);if(this.fragment!==g){if(this.fragment=g,this._usePushState)this.history[b.replace?"replaceState":"pushState"]({},document.title,e);else if(!this._wantsHashChange)return this.location.assign(e);else if(this._updateHash(this.location,a,b.replace),this.iframe&&a!==this.getHash(this.iframe.contentWindow)){var d=this.iframe.contentWindow;b.replace||(d.document.open(),d.document.close()),this._updateHash(d.location,a,b.replace)}if(b.trigger)return this.loadUrl(a)}},_updateHash:function(a,b,c){if(c){var d=a.href.replace(/(javascript:|#).*$/,"");a.replace(d+"#"+b)}else a.hash="#"+b}}),b.history=new f,d.extend=_.extend=j.extend=i.extend=f.extend=function(b,e){var a,d=this;return a=b&&c.has(b,"constructor")?b.constructor:function(){return d.apply(this,arguments)},c.extend(a,d,e),a.prototype=c.create(d.prototype,b),a.prototype.constructor=a,a.__super__=d.prototype,a};var Q=function(){throw new Error('A "url" property or function must be specified')},R=function(b,a){var c=a.error;a.error=function(d){c&&c.call(a.context,b,d,a),b.trigger("error",b,d,a)}};return b})