Files
galaxy/static/scripts/packed/libs/backbone/backbone.js
T

1 line
19 KiB
JavaScript

(function(){var u=this;var B=u.Backbone;var g=[];var D=g.push;var n=g.slice;var t=g.splice;var z;if(typeof exports!=="undefined"){z=exports}else{z=u.Backbone={}}z.VERSION="1.0.0";var L=u._;if(!L&&(typeof require!=="undefined")){L=require("underscore")}z.$=u.jQuery||u.Zepto||u.ender||u.$;z.noConflict=function(){u.Backbone=B;return this};z.emulateHTTP=false;z.emulateJSON=false;var J=z.Events={on:function(M,P,O){if(!x(this,"on",M,[P,O])||!P){return this}this._events||(this._events={});var N=this._events[M]||(this._events[M]=[]);N.push({callback:P,context:O,ctx:O||this});return this},once:function(N,Q,O){if(!x(this,"once",N,[Q,O])||!Q){return this}var M=this;var P=L.once(function(){M.off(N,P);Q.apply(this,arguments)});P._callback=Q;return this.on(N,P,O)},off:function(M,V,N){var T,U,W,S,R,O,Q,P;if(!this._events||!x(this,"off",M,[V,N])){return this}if(!M&&!V&&!N){this._events={};return this}S=M?[M]:L.keys(this._events);for(R=0,O=S.length;R<O;R++){M=S[R];if(W=this._events[M]){this._events[M]=T=[];if(V||N){for(Q=0,P=W.length;Q<P;Q++){U=W[Q];if((V&&V!==U.callback&&V!==U.callback._callback)||(N&&N!==U.context)){T.push(U)}}}if(!T.length){delete this._events[M]}}}return this},trigger:function(O){if(!this._events){return this}var N=n.call(arguments,1);if(!x(this,"trigger",O,N)){return this}var P=this._events[O];var M=this._events.all;if(P){b(P,N)}if(M){b(M,arguments)}return this},stopListening:function(P,M,R){var N=this._listeners;if(!N){return this}var O=!M&&!R;if(typeof M==="object"){R=this}if(P){(N={})[P._listenerId]=P}for(var Q in N){N[Q].off(M,R,this);if(O){delete this._listeners[Q]}}return this}};var w=/\s+/;var x=function(T,R,N,Q){if(!N){return true}if(typeof N==="object"){for(var P in N){T[R].apply(T,[P,N[P]].concat(Q))}return false}if(w.test(N)){var S=N.split(w);for(var O=0,M=S.length;O<M;O++){T[R].apply(T,[S[O]].concat(Q))}return false}return true};var b=function(R,P){var S,Q=-1,O=R.length,N=P[0],M=P[1],T=P[2];switch(P.length){case 0:while(++Q<O){(S=R[Q]).callback.call(S.ctx)}return;case 1:while(++Q<O){(S=R[Q]).callback.call(S.ctx,N)}return;case 2:while(++Q<O){(S=R[Q]).callback.call(S.ctx,N,M)}return;case 3:while(++Q<O){(S=R[Q]).callback.call(S.ctx,N,M,T)}return;default:while(++Q<O){(S=R[Q]).callback.apply(S.ctx,P)}}};var C={listenTo:"on",listenToOnce:"once"};L.each(C,function(M,N){J[N]=function(Q,O,S){var P=this._listeners||(this._listeners={});var R=Q._listenerId||(Q._listenerId=L.uniqueId("l"));P[R]=Q;if(typeof O==="object"){S=this}Q[M](O,S,this);return this}});J.bind=J.on;J.unbind=J.off;L.extend(z,J);var E=z.Model=function(M,O){var P;var N=M||{};O||(O={});this.cid=L.uniqueId("c");this.attributes={};L.extend(this,L.pick(O,F));if(O.parse){N=this.parse(N,O)||{}}if(P=L.result(this,"defaults")){N=L.defaults({},N,P)}this.set(N,O);this.changed={};this.initialize.apply(this,arguments)};var F=["url","urlRoot","collection"];L.extend(E.prototype,J,{changed:null,validationError:null,idAttribute:"id",initialize:function(){},toJSON:function(M){return L.clone(this.attributes)},sync:function(){return z.sync.apply(this,arguments)},get:function(M){return this.attributes[M]},escape:function(M){return L.escape(this.get(M))},has:function(M){return this.get(M)!=null},set:function(U,M,Y){var S,V,W,T,R,X,O,Q;if(U==null){return this}if(typeof U==="object"){V=U;Y=M}else{(V={})[U]=M}Y||(Y={});if(!this._validate(V,Y)){return false}W=Y.unset;R=Y.silent;T=[];X=this._changing;this._changing=true;if(!X){this._previousAttributes=L.clone(this.attributes);this.changed={}}Q=this.attributes,O=this._previousAttributes;if(this.idAttribute in V){this.id=V[this.idAttribute]}for(S in V){M=V[S];if(!L.isEqual(Q[S],M)){T.push(S)}if(!L.isEqual(O[S],M)){this.changed[S]=M}else{delete this.changed[S]}W?delete Q[S]:Q[S]=M}if(!R){if(T.length){this._pending=true}for(var P=0,N=T.length;P<N;P++){this.trigger("change:"+T[P],this,Q[T[P]],Y)}}if(X){return this}if(!R){while(this._pending){this._pending=false;this.trigger("change",this,Y)}}this._pending=false;this._changing=false;return this},unset:function(M,N){return this.set(M,void 0,L.extend({},N,{unset:true}))},clear:function(N){var M={};for(var O in this.attributes){M[O]=void 0}return this.set(M,L.extend({},N,{unset:true}))},hasChanged:function(M){if(M==null){return !L.isEmpty(this.changed)}return L.has(this.changed,M)},changedAttributes:function(O){if(!O){return this.hasChanged()?L.clone(this.changed):false}var Q,P=false;var N=this._changing?this._previousAttributes:this.attributes;for(var M in O){if(L.isEqual(N[M],(Q=O[M]))){continue}(P||(P={}))[M]=Q}return P},previous:function(M){if(M==null||!this._previousAttributes){return null}return this._previousAttributes[M]},previousAttributes:function(){return L.clone(this._previousAttributes)},fetch:function(N){N=N?L.clone(N):{};if(N.parse===void 0){N.parse=true}var M=this;var O=N.success;N.success=function(P){if(!M.set(M.parse(P,N),N)){return false}if(O){O(M,P,N)}M.trigger("sync",M,P,N)};H(this,N);return this.sync("read",this,N)},save:function(Q,N,U){var R,M,T,O=this.attributes;if(Q==null||typeof Q==="object"){R=Q;U=N}else{(R={})[Q]=N}if(R&&(!U||!U.wait)&&!this.set(R,U)){return false}U=L.extend({validate:true},U);if(!this._validate(R,U)){return false}if(R&&U.wait){this.attributes=L.extend({},O,R)}if(U.parse===void 0){U.parse=true}var P=this;var S=U.success;U.success=function(W){P.attributes=O;var V=P.parse(W,U);if(U.wait){V=L.extend(R||{},V)}if(L.isObject(V)&&!P.set(V,U)){return false}if(S){S(P,W,U)}P.trigger("sync",P,W,U)};H(this,U);M=this.isNew()?"create":(U.patch?"patch":"update");if(M==="patch"){U.attrs=R}T=this.sync(M,this,U);if(R&&U.wait){this.attributes=O}return T},destroy:function(N){N=N?L.clone(N):{};var M=this;var Q=N.success;var O=function(){M.trigger("destroy",M,M.collection,N)};N.success=function(R){if(N.wait||M.isNew()){O()}if(Q){Q(M,R,N)}if(!M.isNew()){M.trigger("sync",M,R,N)}};if(this.isNew()){N.success();return false}H(this,N);var P=this.sync("delete",this,N);if(!N.wait){O()}return P},url:function(){var M=L.result(this,"urlRoot")||L.result(this.collection,"url")||r();if(this.isNew()){return M}return M+(M.charAt(M.length-1)==="/"?"":"/")+encodeURIComponent(this.id)},parse:function(N,M){return N},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return this.id==null},isValid:function(M){return this._validate({},L.extend(M||{},{validate:true}))},_validate:function(O,N){if(!N.validate||!this.validate){return true}O=L.extend({},this.attributes,O);var M=this.validationError=this.validate(O,N)||null;if(!M){return true}this.trigger("invalid",this,M,L.extend(N||{},{validationError:M}));return false}});var a=["keys","values","pairs","invert","pick","omit"];L.each(a,function(M){E.prototype[M]=function(){var N=n.call(arguments);N.unshift(this.attributes);return L[M].apply(L,N)}});var c=z.Collection=function(N,M){M||(M={});if(M.url){this.url=M.url}if(M.model){this.model=M.model}if(M.comparator!==void 0){this.comparator=M.comparator}this._reset();this.initialize.apply(this,arguments);if(N){this.reset(N,L.extend({silent:true},M))}};var o={add:true,remove:true,merge:true};var K={add:true,merge:false,remove:false};L.extend(c.prototype,J,{model:E,initialize:function(){},toJSON:function(M){return this.map(function(N){return N.toJSON(M)})},sync:function(){return z.sync.apply(this,arguments)},add:function(N,M){return this.set(N,L.defaults(M||{},K))},remove:function(R,P){R=L.isArray(R)?R.slice():[R];P||(P={});var Q,M,O,N;for(Q=0,M=R.length;Q<M;Q++){N=this.get(R[Q]);if(!N){continue}delete this._byId[N.id];delete this._byId[N.cid];O=this.indexOf(N);this.models.splice(O,1);this.length--;if(!P.silent){P.index=O;N.trigger("remove",N,this,P)}this._removeReference(N)}return this},set:function(N,Z){Z=L.defaults(Z||{},o);if(Z.parse){N=this.parse(N,Z)}if(!L.isArray(N)){N=N?[N]:[]}var U,Q,W,X,O,V;var P=Z.at;var T=this.comparator&&(P==null)&&Z.sort!==false;var R=L.isString(this.comparator)?this.comparator:null;var Y=[],M=[],S={};for(U=0,Q=N.length;U<Q;U++){if(!(W=this._prepareModel(N[U],Z))){continue}if(O=this.get(W)){if(Z.remove){S[O.cid]=true}if(Z.merge){O.set(W.attributes,Z);if(T&&!V&&O.hasChanged(R)){V=true}}}else{if(Z.add){Y.push(W);W.on("all",this._onModelEvent,this);this._byId[W.cid]=W;if(W.id!=null){this._byId[W.id]=W}}}}if(Z.remove){for(U=0,Q=this.length;U<Q;++U){if(!S[(W=this.models[U]).cid]){M.push(W)}}if(M.length){this.remove(M,Z)}}if(Y.length){if(T){V=true}this.length+=Y.length;if(P!=null){t.apply(this.models,[P,0].concat(Y))}else{D.apply(this.models,Y)}}if(V){this.sort({silent:true})}if(Z.silent){return this}for(U=0,Q=Y.length;U<Q;U++){(W=Y[U]).trigger("add",W,this,Z)}if(V){this.trigger("sort",this,Z)}return this},reset:function(P,N){N||(N={});for(var O=0,M=this.models.length;O<M;O++){this._removeReference(this.models[O])}N.previousModels=this.models;this._reset();this.add(P,L.extend({silent:true},N));if(!N.silent){this.trigger("reset",this,N)}return this},push:function(N,M){N=this._prepareModel(N,M);this.add(N,L.extend({at:this.length},M));return N},pop:function(N){var M=this.at(this.length-1);this.remove(M,N);return M},unshift:function(N,M){N=this._prepareModel(N,M);this.add(N,L.extend({at:0},M));return N},shift:function(N){var M=this.at(0);this.remove(M,N);return M},slice:function(N,M){return this.models.slice(N,M)},get:function(M){if(M==null){return void 0}return this._byId[M.id!=null?M.id:M.cid||M]},at:function(M){return this.models[M]},where:function(M,N){if(L.isEmpty(M)){return N?void 0:[]}return this[N?"find":"filter"](function(O){for(var P in M){if(M[P]!==O.get(P)){return false}}return true})},findWhere:function(M){return this.where(M,true)},sort:function(M){if(!this.comparator){throw new Error("Cannot sort a set without a comparator")}M||(M={});if(L.isString(this.comparator)||this.comparator.length===1){this.models=this.sortBy(this.comparator,this)}else{this.models.sort(L.bind(this.comparator,this))}if(!M.silent){this.trigger("sort",this,M)}return this},sortedIndex:function(M,P,N){P||(P=this.comparator);var O=L.isFunction(P)?P:function(Q){return Q.get(P)};return L.sortedIndex(this.models,M,O,N)},pluck:function(M){return L.invoke(this.models,"get",M)},fetch:function(M){M=M?L.clone(M):{};if(M.parse===void 0){M.parse=true}var O=M.success;var N=this;M.success=function(P){var Q=M.reset?"reset":"set";N[Q](P,M);if(O){O(N,P,M)}N.trigger("sync",N,P,M)};H(this,M);return this.sync("read",this,M)},create:function(N,M){M=M?L.clone(M):{};if(!(N=this._prepareModel(N,M))){return false}if(!M.wait){this.add(N,M)}var P=this;var O=M.success;M.success=function(Q){if(M.wait){P.add(N,M)}if(O){O(N,Q,M)}};N.save(null,M);return N},parse:function(N,M){return N},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(O,N){if(O instanceof E){if(!O.collection){O.collection=this}return O}N||(N={});N.collection=this;var M=new this.model(O,N);if(!M._validate(O,N)){this.trigger("invalid",this,O,N);return false}return M},_removeReference:function(M){if(this===M.collection){delete M.collection}M.off("all",this._onModelEvent,this)},_onModelEvent:function(O,N,P,M){if((O==="add"||O==="remove")&&P!==this){return}if(O==="destroy"){this.remove(N,M)}if(N&&O==="change:"+N.idAttribute){delete this._byId[N.previous(N.idAttribute)];if(N.id!=null){this._byId[N.id]=N}}this.trigger.apply(this,arguments)}});var y=["forEach","each","map","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","toArray","size","first","head","take","initial","rest","tail","drop","last","without","indexOf","shuffle","lastIndexOf","isEmpty","chain"];L.each(y,function(M){c.prototype[M]=function(){var N=n.call(arguments);N.unshift(this.models);return L[M].apply(L,N)}});var k=["groupBy","countBy","sortBy"];L.each(k,function(M){c.prototype[M]=function(P,N){var O=L.isFunction(P)?P:function(Q){return Q.get(P)};return L[M](this.models,O,N)}});var G=z.View=function(M){this.cid=L.uniqueId("view");this._configure(M||{});this._ensureElement();this.initialize.apply(this,arguments);this.delegateEvents()};var v=/^(\S+)\s*(.*)$/;var e=["model","collection","el","id","attributes","className","tagName","events"];L.extend(G.prototype,J,{tagName:"div",$:function(M){return this.$el.find(M)},initialize:function(){},render:function(){return this},remove:function(){this.$el.remove();this.stopListening();return this},setElement:function(M,N){if(this.$el){this.undelegateEvents()}this.$el=M instanceof z.$?M:z.$(M);this.el=this.$el[0];if(N!==false){this.delegateEvents()}return this},delegateEvents:function(Q){if(!(Q||(Q=L.result(this,"events")))){return this}this.undelegateEvents();for(var P in Q){var R=Q[P];if(!L.isFunction(R)){R=this[Q[P]]}if(!R){continue}var O=P.match(v);var N=O[1],M=O[2];R=L.bind(R,this);N+=".delegateEvents"+this.cid;if(M===""){this.$el.on(N,R)}else{this.$el.on(N,M,R)}}return this},undelegateEvents:function(){this.$el.off(".delegateEvents"+this.cid);return this},_configure:function(M){if(this.options){M=L.extend({},L.result(this,"options"),M)}L.extend(this,L.pick(M,e));this.options=M},_ensureElement:function(){if(!this.el){var M=L.extend({},L.result(this,"attributes"));if(this.id){M.id=L.result(this,"id")}if(this.className){M["class"]=L.result(this,"className")}var N=z.$("<"+L.result(this,"tagName")+">").attr(M);this.setElement(N,false)}else{this.setElement(L.result(this,"el"),false)}}});z.sync=function(S,N,M){var P=j[S];L.defaults(M||(M={}),{emulateHTTP:z.emulateHTTP,emulateJSON:z.emulateJSON});var R={type:P,dataType:"json"};if(!M.url){R.url=L.result(N,"url")||r()}if(M.data==null&&N&&(S==="create"||S==="update"||S==="patch")){R.contentType="application/json";R.data=JSON.stringify(M.attrs||N.toJSON(M))}if(M.emulateJSON){R.contentType="application/x-www-form-urlencoded";R.data=R.data?{model:R.data}:{}}if(M.emulateHTTP&&(P==="PUT"||P==="DELETE"||P==="PATCH")){R.type="POST";if(M.emulateJSON){R.data._method=P}var O=M.beforeSend;M.beforeSend=function(T){T.setRequestHeader("X-HTTP-Method-Override",P);if(O){return O.apply(this,arguments)}}}if(R.type!=="GET"&&!M.emulateJSON){R.processData=false}if(R.type==="PATCH"&&window.ActiveXObject&&!(window.external&&window.external.msActiveXFilteringEnabled)){R.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var Q=M.xhr=z.ajax(L.extend(R,M));N.trigger("request",N,Q,M);return Q};var j={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};z.ajax=function(){return z.$.ajax.apply(z.$,arguments)};var p=z.Router=function(M){M||(M={});if(M.routes){this.routes=M.routes}this._bindRoutes();this.initialize.apply(this,arguments)};var q=/\((.*?)\)/g;var s=/(\(\?)?:\w+/g;var d=/\*\w+/g;var h=/[\-{}\[\]+?.,\\\^$|#\s]/g;L.extend(p.prototype,J,{initialize:function(){},route:function(N,O,P){if(!L.isRegExp(N)){N=this._routeToRegExp(N)}if(L.isFunction(O)){P=O;O=""}if(!P){P=this[O]}var M=this;z.history.route(N,function(R){var Q=M._extractParameters(N,R);P&&P.apply(M,Q);M.trigger.apply(M,["route:"+O].concat(Q));M.trigger("route",O,Q);z.history.trigger("route",M,O,Q)});return this},navigate:function(N,M){z.history.navigate(N,M);return this},_bindRoutes:function(){if(!this.routes){return}this.routes=L.result(this,"routes");var N,M=L.keys(this.routes);while((N=M.pop())!=null){this.route(N,this.routes[N])}},_routeToRegExp:function(M){M=M.replace(h,"\\$&").replace(q,"(?:$1)?").replace(s,function(O,N){return N?O:"([^/]+)"}).replace(d,"(.*?)");return new RegExp("^"+M+"$")},_extractParameters:function(M,N){var O=M.exec(N).slice(1);return L.map(O,function(P){return P?decodeURIComponent(P):null})}});var i=z.History=function(){this.handlers=[];L.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var A=/^[#\/]|\s+$/g;var f=/^\/+|\/+$/g;var I=/msie [\w.]+/;var m=/\/$/;i.started=false;L.extend(i.prototype,J,{interval:50,getHash:function(N){var M=(N||this).location.href.match(/#(.*)$/);return M?M[1]:""},getFragment:function(O,N){if(O==null){if(this._hasPushState||!this._wantsHashChange||N){O=this.location.pathname;var M=this.root.replace(m,"");if(!O.indexOf(M)){O=O.substr(M.length)}}else{O=this.getHash()}}return O.replace(A,"")},start:function(O){if(i.started){throw new Error("Backbone.history has already been started")}i.started=true;this.options=L.extend({},{root:"/"},this.options,O);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var N=this.getFragment();var M=document.documentMode;var Q=(I.exec(navigator.userAgent.toLowerCase())&&(!M||M<=7));this.root=("/"+this.root+"/").replace(f,"/");if(Q&&this._wantsHashChange){this.iframe=z.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow;this.navigate(N)}if(this._hasPushState){z.$(window).on("popstate",this.checkUrl)}else{if(this._wantsHashChange&&("onhashchange" in window)&&!Q){z.$(window).on("hashchange",this.checkUrl)}else{if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}}}this.fragment=N;var R=this.location;var P=R.pathname.replace(/[^\/]$/,"$&/")===this.root;if(this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!P){this.fragment=this.getFragment(null,true);this.location.replace(this.root+this.location.search+"#"+this.fragment);return true}else{if(this._wantsPushState&&this._hasPushState&&P&&R.hash){this.fragment=this.getHash().replace(A,"");this.history.replaceState({},document.title,this.root+this.fragment+R.search)}}if(!this.options.silent){return this.loadUrl()}},stop:function(){z.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl);clearInterval(this._checkUrlInterval);i.started=false},route:function(M,N){this.handlers.unshift({route:M,callback:N})},checkUrl:function(N){var M=this.getFragment();if(M===this.fragment&&this.iframe){M=this.getFragment(this.getHash(this.iframe))}if(M===this.fragment){return false}if(this.iframe){this.navigate(M)}this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(O){var N=this.fragment=this.getFragment(O);var M=L.any(this.handlers,function(P){if(P.route.test(N)){P.callback(N);return true}});return M},navigate:function(O,N){if(!i.started){return false}if(!N||N===true){N={trigger:N}}O=this.getFragment(O||"");if(this.fragment===O){return}this.fragment=O;var M=this.root+O;if(this._hasPushState){this.history[N.replace?"replaceState":"pushState"]({},document.title,M)}else{if(this._wantsHashChange){this._updateHash(this.location,O,N.replace);if(this.iframe&&(O!==this.getFragment(this.getHash(this.iframe)))){if(!N.replace){this.iframe.document.open().close()}this._updateHash(this.iframe.location,O,N.replace)}}else{return this.location.assign(M)}}if(N.trigger){this.loadUrl(O)}},_updateHash:function(M,O,P){if(P){var N=M.href.replace(/(javascript:|#).*$/,"");M.replace(N+"#"+O)}else{M.hash="#"+O}}});z.history=new i;var l=function(M,O){var N=this;var Q;if(M&&L.has(M,"constructor")){Q=M.constructor}else{Q=function(){return N.apply(this,arguments)}}L.extend(Q,N,O);var P=function(){this.constructor=Q};P.prototype=N.prototype;Q.prototype=new P;if(M){L.extend(Q.prototype,M)}Q.__super__=N.prototype;return Q};E.extend=c.extend=p.extend=G.extend=i.extend=l;var r=function(){throw new Error('A "url" property or function must be specified')};var H=function(O,N){var M=N.error;N.error=function(P){if(M){M(O,P,N)}O.trigger("error",O,P,N)}}}).call(this);