Signal-Desktop/patches/backbone+1.4.0.patch

757 lines
89 KiB
Diff

diff --git a/node_modules/backbone/backbone-min.js b/node_modules/backbone/backbone-min.js
deleted file mode 100644
index c8c33e0..0000000
--- a/node_modules/backbone/backbone-min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(t){var e=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global;if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,n,r){e.Backbone=t(e,r,i,n)})}else if(typeof exports!=="undefined"){var i=require("underscore"),n;try{n=require("jquery")}catch(r){}t(e,exports,i,n)}else{e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}})(function(t,e,i,n){var r=t.Backbone;var s=Array.prototype.slice;e.VERSION="1.4.0";e.$=n;e.noConflict=function(){t.Backbone=r;return this};e.emulateHTTP=false;e.emulateJSON=false;var a=e.Events={};var o=/\s+/;var h;var u=function(t,e,n,r,s){var a=0,h;if(n&&typeof n==="object"){if(r!==void 0&&"context"in s&&s.context===void 0)s.context=r;for(h=i.keys(n);a<h.length;a++){e=u(t,e,h[a],n[h[a]],s)}}else if(n&&o.test(n)){for(h=n.split(o);a<h.length;a++){e=t(e,h[a],r,s)}}else{e=t(e,n,r,s)}return e};a.on=function(t,e,i){this._events=u(l,this._events||{},t,e,{context:i,ctx:this,listening:h});if(h){var n=this._listeners||(this._listeners={});n[h.id]=h;h.interop=false}return this};a.listenTo=function(t,e,n){if(!t)return this;var r=t._listenId||(t._listenId=i.uniqueId("l"));var s=this._listeningTo||(this._listeningTo={});var a=h=s[r];if(!a){this._listenId||(this._listenId=i.uniqueId("l"));a=h=s[r]=new g(this,t)}var o=c(t,e,n,this);h=void 0;if(o)throw o;if(a.interop)a.on(e,n);return this};var l=function(t,e,i,n){if(i){var r=t[e]||(t[e]=[]);var s=n.context,a=n.ctx,o=n.listening;if(o)o.count++;r.push({callback:i,context:s,ctx:s||a,listening:o})}return t};var c=function(t,e,i,n){try{t.on(e,i,n)}catch(r){return r}};a.off=function(t,e,i){if(!this._events)return this;this._events=u(f,this._events,t,e,{context:i,listeners:this._listeners});return this};a.stopListening=function(t,e,n){var r=this._listeningTo;if(!r)return this;var s=t?[t._listenId]:i.keys(r);for(var a=0;a<s.length;a++){var o=r[s[a]];if(!o)break;o.obj.off(e,n,this);if(o.interop)o.off(e,n)}if(i.isEmpty(r))this._listeningTo=void 0;return this};var f=function(t,e,n,r){if(!t)return;var s=r.context,a=r.listeners;var o=0,h;if(!e&&!s&&!n){for(h=i.keys(a);o<h.length;o++){a[h[o]].cleanup()}return}h=e?[e]:i.keys(t);for(;o<h.length;o++){e=h[o];var u=t[e];if(!u)break;var l=[];for(var c=0;c<u.length;c++){var f=u[c];if(n&&n!==f.callback&&n!==f.callback._callback||s&&s!==f.context){l.push(f)}else{var d=f.listening;if(d)d.off(e,n)}}if(l.length){t[e]=l}else{delete t[e]}}return t};a.once=function(t,e,i){var n=u(d,{},t,e,this.off.bind(this));if(typeof t==="string"&&i==null)e=void 0;return this.on(n,e,i)};a.listenToOnce=function(t,e,i){var n=u(d,{},e,i,this.stopListening.bind(this,t));return this.listenTo(t,n)};var d=function(t,e,n,r){if(n){var s=t[e]=i.once(function(){r(e,s);n.apply(this,arguments)});s._callback=n}return t};a.trigger=function(t){if(!this._events)return this;var e=Math.max(0,arguments.length-1);var i=Array(e);for(var n=0;n<e;n++)i[n]=arguments[n+1];u(v,this._events,t,void 0,i);return this};var v=function(t,e,i,n){if(t){var r=t[e];var s=t.all;if(r&&s)s=s.slice();if(r)p(r,n);if(s)p(s,[e].concat(n))}return t};var p=function(t,e){var i,n=-1,r=t.length,s=e[0],a=e[1],o=e[2];switch(e.length){case 0:while(++n<r)(i=t[n]).callback.call(i.ctx);return;case 1:while(++n<r)(i=t[n]).callback.call(i.ctx,s);return;case 2:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a);return;case 3:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a,o);return;default:while(++n<r)(i=t[n]).callback.apply(i.ctx,e);return}};var g=function(t,e){this.id=t._listenId;this.listener=t;this.obj=e;this.interop=true;this.count=0;this._events=void 0};g.prototype.on=a.on;g.prototype.off=function(t,e){var i;if(this.interop){this._events=u(f,this._events,t,e,{context:void 0,listeners:void 0});i=!this._events}else{this.count--;i=this.count===0}if(i)this.cleanup()};g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId];if(!this.interop)delete this.obj._listeners[this.id]};a.bind=a.on;a.unbind=a.off;i.extend(e,a);var m=e.Model=function(t,e){var n=t||{};e||(e={});this.preinitialize.apply(this,arguments);this.cid=i.uniqueId(this.cidPrefix);this.attributes={};if(e.collection)this.collection=e.collection;if(e.parse)n=this.parse(n,e)||{};var r=i.result(this,"defaults");n=i.defaults(i.extend({},r,n),r);this.set(n,e);this.changed={};this.initialize.apply(this,arguments)};i.extend(m.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return i.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return i.escape(this.get(t))},has:function(t){return this.get(t)!=null},matches:function(t){return!!i.iteratee(t,this)(this.attributes)},set:function(t,e,n){if(t==null)return this;var r;if(typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n||(n={});if(!this._validate(r,n))return false;var s=n.unset;var a=n.silent;var o=[];var h=this._changing;this._changing=true;if(!h){this._previousAttributes=i.clone(this.attributes);this.changed={}}var u=this.attributes;var l=this.changed;var c=this._previousAttributes;for(var f in r){e=r[f];if(!i.isEqual(u[f],e))o.push(f);if(!i.isEqual(c[f],e)){l[f]=e}else{delete l[f]}s?delete u[f]:u[f]=e}if(this.idAttribute in r)this.id=this.get(this.idAttribute);if(!a){if(o.length)this._pending=n;for(var d=0;d<o.length;d++){this.trigger("change:"+o[d],this,u[o[d]],n)}}if(h)return this;if(!a){while(this._pending){n=this._pending;this._pending=false;this.trigger("change",this,n)}}this._pending=false;this._changing=false;return this},unset:function(t,e){return this.set(t,void 0,i.extend({},e,{unset:true}))},clear:function(t){var e={};for(var n in this.attributes)e[n]=void 0;return this.set(e,i.extend({},t,{unset:true}))},hasChanged:function(t){if(t==null)return!i.isEmpty(this.changed);return i.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?i.clone(this.changed):false;var e=this._changing?this._previousAttributes:this.attributes;var n={};var r;for(var s in t){var a=t[s];if(i.isEqual(e[s],a))continue;n[s]=a;r=true}return r?n:false},previous:function(t){if(t==null||!this._previousAttributes)return null;return this._previousAttributes[t]},previousAttributes:function(){return i.clone(this._previousAttributes)},fetch:function(t){t=i.extend({parse:true},t);var e=this;var n=t.success;t.success=function(i){var r=t.parse?e.parse(i,t):i;if(!e.set(r,t))return false;if(n)n.call(t.context,e,i,t);e.trigger("sync",e,i,t)};G(this,t);return this.sync("read",this,t)},save:function(t,e,n){var r;if(t==null||typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n=i.extend({validate:true,parse:true},n);var s=n.wait;if(r&&!s){if(!this.set(r,n))return false}else if(!this._validate(r,n)){return false}var a=this;var o=n.success;var h=this.attributes;n.success=function(t){a.attributes=h;var e=n.parse?a.parse(t,n):t;if(s)e=i.extend({},r,e);if(e&&!a.set(e,n))return false;if(o)o.call(n.context,a,t,n);a.trigger("sync",a,t,n)};G(this,n);if(r&&s)this.attributes=i.extend({},h,r);var u=this.isNew()?"create":n.patch?"patch":"update";if(u==="patch"&&!n.attrs)n.attrs=r;var l=this.sync(u,this,n);this.attributes=h;return l},destroy:function(t){t=t?i.clone(t):{};var e=this;var n=t.success;var r=t.wait;var s=function(){e.stopListening();e.trigger("destroy",e,e.collection,t)};t.success=function(i){if(r)s();if(n)n.call(t.context,e,i,t);if(!e.isNew())e.trigger("sync",e,i,t)};var a=false;if(this.isNew()){i.defer(t.success)}else{G(this,t);a=this.sync("delete",this,t)}if(!r)s();return a},url:function(){var t=i.result(this,"urlRoot")||i.result(this.collection,"url")||V();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},i.extend({},t,{validate:true}))},_validate:function(t,e){if(!e.validate||!this.validate)return true;t=i.extend({},this.attributes,t);var n=this.validationError=this.validate(t,e)||null;if(!n)return true;this.trigger("invalid",this,n,i.extend(e,{validationError:n}));return false}});var _=e.Collection=function(t,e){e||(e={});this.preinitialize.apply(this,arguments);if(e.model)this.model=e.model;if(e.comparator!==void 0)this.comparator=e.comparator;this._reset();this.initialize.apply(this,arguments);if(t)this.reset(t,i.extend({silent:true},e))};var y={add:true,remove:true,merge:true};var b={add:true,remove:false};var x=function(t,e,i){i=Math.min(Math.max(i,0),t.length);var n=Array(t.length-i);var r=e.length;var s;for(s=0;s<n.length;s++)n[s]=t[s+i];for(s=0;s<r;s++)t[s+i]=e[s];for(s=0;s<n.length;s++)t[s+r+i]=n[s]};i.extend(_.prototype,a,{model:m,preinitialize:function(){},initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return e.sync.apply(this,arguments)},add:function(t,e){return this.set(t,i.extend({merge:false},e,b))},remove:function(t,e){e=i.extend({},e);var n=!i.isArray(t);t=n?[t]:t.slice();var r=this._removeModels(t,e);if(!e.silent&&r.length){e.changes={added:[],merged:[],removed:r};this.trigger("update",this,e)}return n?r[0]:r},set:function(t,e){if(t==null)return;e=i.extend({},y,e);if(e.parse&&!this._isModel(t)){t=this.parse(t,e)||[]}var n=!i.isArray(t);t=n?[t]:t.slice();var r=e.at;if(r!=null)r=+r;if(r>this.length)r=this.length;if(r<0)r+=this.length+1;var s=[];var a=[];var o=[];var h=[];var u={};var l=e.add;var c=e.merge;var f=e.remove;var d=false;var v=this.comparator&&r==null&&e.sort!==false;var p=i.isString(this.comparator)?this.comparator:null;var g,m;for(m=0;m<t.length;m++){g=t[m];var _=this.get(g);if(_){if(c&&g!==_){var b=this._isModel(g)?g.attributes:g;if(e.parse)b=_.parse(b,e);_.set(b,e);o.push(_);if(v&&!d)d=_.hasChanged(p)}if(!u[_.cid]){u[_.cid]=true;s.push(_)}t[m]=_}else if(l){g=t[m]=this._prepareModel(g,e);if(g){a.push(g);this._addReference(g,e);u[g.cid]=true;s.push(g)}}}if(f){for(m=0;m<this.length;m++){g=this.models[m];if(!u[g.cid])h.push(g)}if(h.length)this._removeModels(h,e)}var w=false;var E=!v&&l&&f;if(s.length&&E){w=this.length!==s.length||i.some(this.models,function(t,e){return t!==s[e]});this.models.length=0;x(this.models,s,0);this.length=this.models.length}else if(a.length){if(v)d=true;x(this.models,a,r==null?this.length:r);this.length=this.models.length}if(d)this.sort({silent:true});if(!e.silent){for(m=0;m<a.length;m++){if(r!=null)e.index=r+m;g=a[m];g.trigger("add",g,this,e)}if(d||w)this.trigger("sort",this,e);if(a.length||h.length||o.length){e.changes={added:a,removed:h,merged:o};this.trigger("update",this,e)}}return n?t[0]:t},reset:function(t,e){e=e?i.clone(e):{};for(var n=0;n<this.models.length;n++){this._removeReference(this.models[n],e)}e.previousModels=this.models;this._reset();t=this.add(t,i.extend({silent:true},e));if(!e.silent)this.trigger("reset",this,e);return t},push:function(t,e){return this.add(t,i.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,i.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(t==null)return void 0;return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t)]||t.cid&&this._byId[t.cid]},has:function(t){return this.get(t)!=null},at:function(t){if(t<0)t+=this.length;return this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,true)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var n=e.length;if(i.isFunction(e))e=e.bind(this);if(n===1||i.isString(e)){this.models=this.sortBy(e)}else{this.models.sort(e)}if(!t.silent)this.trigger("sort",this,t);return this},pluck:function(t){return this.map(t+"")},fetch:function(t){t=i.extend({parse:true},t);var e=t.success;var n=this;t.success=function(i){var r=t.reset?"reset":"set";n[r](i,t);if(e)e.call(t.context,n,i,t);n.trigger("sync",n,i,t)};G(this,t);return this.sync("read",this,t)},create:function(t,e){e=e?i.clone(e):{};var n=e.wait;t=this._prepareModel(t,e);if(!t)return false;if(!n)this.add(t,e);var r=this;var s=e.success;e.success=function(t,e,i){if(n)r.add(t,i);if(s)s.call(i.context,t,e,i)};t.save(null,e);return t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t){return t[this.model.prototype.idAttribute||"id"]},values:function(){return new E(this,k)},keys:function(){return new E(this,I)},entries:function(){return new E(this,S)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(t,e){if(this._isModel(t)){if(!t.collection)t.collection=this;return t}e=e?i.clone(e):{};e.collection=this;var n=new this.model(t,e);if(!n.validationError)return n;this.trigger("invalid",this,n.validationError,e);return false},_removeModels:function(t,e){var i=[];for(var n=0;n<t.length;n++){var r=this.get(t[n]);if(!r)continue;var s=this.indexOf(r);this.models.splice(s,1);this.length--;delete this._byId[r.cid];var a=this.modelId(r.attributes);if(a!=null)delete this._byId[a];if(!e.silent){e.index=s;r.trigger("remove",r,this,e)}i.push(r);this._removeReference(r,e)}return i},_isModel:function(t){return t instanceof m},_addReference:function(t,e){this._byId[t.cid]=t;var i=this.modelId(t.attributes);if(i!=null)this._byId[i]=t;t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var i=this.modelId(t.attributes);if(i!=null)delete this._byId[i];if(this===t.collection)delete t.collection;t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,n){if(e){if((t==="add"||t==="remove")&&i!==this)return;if(t==="destroy")this.remove(e,n);if(t==="change"){var r=this.modelId(e.previousAttributes());var s=this.modelId(e.attributes);if(r!==s){if(r!=null)delete this._byId[r];if(s!=null)this._byId[s]=e}}}this.trigger.apply(this,arguments)}});var w=typeof Symbol==="function"&&Symbol.iterator;if(w){_.prototype[w]=_.prototype.values}var E=function(t,e){this._collection=t;this._kind=e;this._index=0};var k=1;var I=2;var S=3;if(w){E.prototype[w]=function(){return this}}E.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var t=this._collection.at(this._index);this._index++;var e;if(this._kind===k){e=t}else{var i=this._collection.modelId(t.attributes);if(this._kind===I){e=i}else{e=[i,t]}}return{value:e,done:false}}this._collection=void 0}return{value:void 0,done:true}};var T=e.View=function(t){this.cid=i.uniqueId("view");this.preinitialize.apply(this,arguments);i.extend(this,i.pick(t,H));this._ensureElement();this.initialize.apply(this,arguments)};var P=/^(\S+)\s*(.*)$/;var H=["model","collection","el","id","attributes","className","tagName","events"];i.extend(T.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){this._removeElement();this.stopListening();return this},_removeElement:function(){this.$el.remove()},setElement:function(t){this.undelegateEvents();this._setElement(t);this.delegateEvents();return this},_setElement:function(t){this.$el=t instanceof e.$?t:e.$(t);this.el=this.$el[0]},delegateEvents:function(t){t||(t=i.result(this,"events"));if(!t)return this;this.undelegateEvents();for(var e in t){var n=t[e];if(!i.isFunction(n))n=this[n];if(!n)continue;var r=e.match(P);this.delegate(r[1],r[2],n.bind(this))}return this},delegate:function(t,e,i){this.$el.on(t+".delegateEvents"+this.cid,e,i);return this},undelegateEvents:function(){if(this.$el)this.$el.off(".delegateEvents"+this.cid);return this},undelegate:function(t,e,i){this.$el.off(t+".delegateEvents"+this.cid,e,i);return this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(!this.el){var t=i.extend({},i.result(this,"attributes"));if(this.id)t.id=i.result(this,"id");if(this.className)t["class"]=i.result(this,"className");this.setElement(this._createElement(i.result(this,"tagName")));this._setAttributes(t)}else{this.setElement(i.result(this,"el"))}},_setAttributes:function(t){this.$el.attr(t)}});var $=function(t,e,i,n){switch(e){case 1:return function(){return t[i](this[n])};case 2:return function(e){return t[i](this[n],e)};case 3:return function(e,r){return t[i](this[n],C(e,this),r)};case 4:return function(e,r,s){return t[i](this[n],C(e,this),r,s)};default:return function(){var e=s.call(arguments);e.unshift(this[n]);return t[i].apply(t,e)}}};var A=function(t,e,n,r){i.each(n,function(i,n){if(e[n])t.prototype[n]=$(e,i,n,r)})};var C=function(t,e){if(i.isFunction(t))return t;if(i.isObject(t)&&!e._isModel(t))return R(t);if(i.isString(t))return function(e){return e.get(t)};return t};var R=function(t){var e=i.matches(t);return function(t){return e(t.attributes)}};var M={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};var N={keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1};i.each([[_,M,"models"],[m,N,"attributes"]],function(t){var e=t[0],n=t[1],r=t[2];e.mixin=function(t){var n=i.reduce(i.functions(t),function(t,e){t[e]=0;return t},{});A(e,t,n,r)};A(e,i,n,r)});e.sync=function(t,n,r){var s=j[t];i.defaults(r||(r={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:s,dataType:"json"};if(!r.url){a.url=i.result(n,"url")||V()}if(r.data==null&&n&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(r.attrs||n.toJSON(r))}if(r.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(r.emulateHTTP&&(s==="PUT"||s==="DELETE"||s==="PATCH")){a.type="POST";if(r.emulateJSON)a.data._method=s;var o=r.beforeSend;r.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",s);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!r.emulateJSON){a.processData=false}var h=r.error;r.error=function(t,e,i){r.textStatus=e;r.errorThrown=i;if(h)h.call(r.context,t,e,i)};var u=r.xhr=e.ajax(i.extend(a,r));n.trigger("request",n,u,r);return u};var j={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var O=e.Router=function(t){t||(t={});this.preinitialize.apply(this,arguments);if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var U=/\((.*?)\)/g;var z=/(\(\?)?:\w+/g;var q=/\*\w+/g;var F=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend(O.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(t,n,r){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(n)){r=n;n=""}if(!r)r=this[n];var s=this;e.history.route(t,function(i){var a=s._extractParameters(t,i);if(s.execute(r,a,n)!==false){s.trigger.apply(s,["route:"+n].concat(a));s.trigger("route",n,a);e.history.trigger("route",s,n,a)}});return this},execute:function(t,e,i){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(F,"\\$&").replace(U,"(?:$1)?").replace(z,function(t,e){return e?t:"([^/?]+)"}).replace(q,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return i.map(n,function(t,e){if(e===n.length-1)return t||null;return t?decodeURIComponent(t):null})}});var B=e.History=function(){this.handlers=[];this.checkUrl=this.checkUrl.bind(this);if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var J=/^[#\/]|\s+$/g;var L=/^\/+|\/+$/g;var W=/#.*$/;B.started=false;i.extend(B.prototype,a,{interval:50,atRoot:function(){var t=this.location.pathname.replace(/[^\/]$/,"$&/");return t===this.root&&!this.getSearch()},matchRoot:function(){var t=this.decodeFragment(this.location.pathname);var e=t.slice(0,this.root.length-1)+"/";return e===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return t.charAt(0)==="/"?t.slice(1):t},getFragment:function(t){if(t==null){if(this._usePushState||!this._wantsHashChange){t=this.getPath()}else{t=this.getHash()}}return t.replace(J,"")},start:function(t){if(B.started)throw new Error("Backbone.history has already been started");B.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._hasHashChange="onhashchange"in window&&(document.documentMode===void 0||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(L,"/");if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";this.location.replace(e+"#"+this.getPath());return true}else if(this._hasPushState&&this.atRoot()){this.navigate(this.getHash(),{replace:true})}}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 n=document.body;var r=n.insertBefore(this.iframe,n.firstChild).contentWindow;r.document.open();r.document.close();r.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState){s("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){s("hashchange",this.checkUrl,false)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}if(!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};if(this._usePushState){t("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){t("hashchange",this.checkUrl,false)}if(this.iframe){document.body.removeChild(this.iframe);this.iframe=null}if(this._checkUrlInterval)clearInterval(this._checkUrlInterval);B.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getHash(this.iframe.contentWindow)}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()},loadUrl:function(t){if(!this.matchRoot())return false;t=this.fragment=this.getFragment(t);return i.some(this.handlers,function(e){if(e.route.test(t)){e.callback(t);return true}})},navigate:function(t,e){if(!B.started)return false;if(!e||e===true)e={trigger:!!e};t=this.getFragment(t||"");var i=this.root;if(t===""||t.charAt(0)==="?"){i=i.slice(0,-1)||"/"}var n=i+t;t=t.replace(W,"");var r=this.decodeFragment(t);if(this.fragment===r)return;this.fragment=r;if(this._usePushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,n)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;if(!e.replace){s.document.open();s.document.close()}this._updateHash(s.location,t,e.replace)}}else{return this.location.assign(n)}if(e.trigger)return this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var n=t.href.replace(/(javascript:|#).*$/,"");t.replace(n+"#"+e)}else{t.hash="#"+e}}});e.history=new B;var D=function(t,e){var n=this;var r;if(t&&i.has(t,"constructor")){r=t.constructor}else{r=function(){return n.apply(this,arguments)}}i.extend(r,n,e);r.prototype=i.create(n.prototype,t);r.prototype.constructor=r;r.__super__=n.prototype;return r};m.extend=_.extend=O.extend=T.extend=B.extend=D;var V=function(){throw new Error('A "url" property or function must be specified')};var G=function(t,e){var i=e.error;e.error=function(n){if(i)i.call(e.context,t,n,e);t.trigger("error",t,n,e)}};return e});
-//# sourceMappingURL=backbone-min.map
\ No newline at end of file
diff --git a/node_modules/backbone/backbone-min.map b/node_modules/backbone/backbone-min.map
deleted file mode 100644
index a45f7c1..0000000
--- a/node_modules/backbone/backbone-min.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"backbone-min.js","sources":["backbone.js"],"names":["factory","root","self","global","define","amd","_","$","exports","Backbone","require","e","jQuery","Zepto","ender","previousBackbone","slice","Array","prototype","VERSION","noConflict","this","emulateHTTP","emulateJSON","Events","eventSplitter","_listening","eventsApi","iteratee","events","name","callback","opts","i","names","context","keys","length","test","split","on","_events","onApi","ctx","listening","listeners","_listeners","id","interop","listenTo","obj","_listenId","uniqueId","listeningTo","_listeningTo","Listening","error","tryCatchOn","options","handlers","count","push","off","offApi","stopListening","ids","isEmpty","cleanup","remaining","j","handler","_callback","once","onceMap","bind","listenToOnce","map","offer","apply","arguments","trigger","Math","max","args","triggerApi","objEvents","allEvents","all","triggerEvents","concat","ev","l","a1","a2","a3","call","listener","unbind","extend","Model","attributes","attrs","preinitialize","cid","cidPrefix","collection","parse","defaults","result","set","changed","initialize","validationError","idAttribute","toJSON","clone","sync","get","attr","escape","has","matches","key","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","_pending","clear","hasChanged","changedAttributes","diff","old","previous","previousAttributes","fetch","model","success","resp","serverAttrs","wrapError","save","validate","wait","method","isNew","patch","xhr","destroy","defer","url","base","urlError","replace","encodeURIComponent","constructor","isValid","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","array","insert","at","min","tail","singular","isArray","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sort","sortable","sortAttr","isString","existing","_prepareModel","_addReference","orderChanged","some","m","index","_removeReference","previousModels","pop","unshift","shift","_byId","modelId","where","first","findWhere","Error","isFunction","sortBy","pluck","create","callbackOpts","values","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","indexOf","_onModelEvent","event","prevId","$$iterator","Symbol","iterator","kind","_collection","_kind","_index","next","value","done","View","pick","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","find","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","match","delegate","eventName","undelegate","_createElement","document","createElement","className","_setAttributes","addMethod","attribute","cb","defaultVal","addUnderscoreMethods","Class","methods","each","instance","isObject","modelMatcher","matcher","collectionMethods","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","filter","select","reject","every","any","include","includes","contains","invoke","toArray","size","head","take","initial","rest","drop","last","without","difference","shuffle","lastIndexOf","chain","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","modelMethods","pairs","invert","omit","config","Base","mixin","mappings","functions","memo","type","methodMap","params","dataType","data","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","checkUrl","window","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","path","pathname","getSearch","matchRoot","decodeFragment","rootPath","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","start","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","hash","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","decodedFragment","title","_updateHash","assign","protoProps","staticProps","parent","child","__super__"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/backbone/backbone.js b/node_modules/backbone/backbone.js
index 3e09d0d..96ca66b 100644
--- a/node_modules/backbone/backbone.js
+++ b/node_modules/backbone/backbone.js
@@ -12,24 +12,8 @@
var root = typeof self == 'object' && self.self === self && self ||
typeof global == 'object' && global.global === global && global;
- // Set up Backbone appropriately for the environment. Start with AMD.
- if (typeof define === 'function' && define.amd) {
- define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
- // Export global even in AMD case in case this script is loaded with
- // others that may still expect a global Backbone.
- root.Backbone = factory(root, exports, _, $);
- });
-
- // Next for Node.js or CommonJS. jQuery may not be needed as a module.
- } else if (typeof exports !== 'undefined') {
- var _ = require('underscore'), $;
- try { $ = require('jquery'); } catch (e) {}
- factory(root, exports, _, $);
-
- // Finally, as a browser global.
- } else {
- root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);
- }
+ var _ = require('lodash'), $;
+ factory(root, exports, _, $);
})(function(root, Backbone, _, $) {
@@ -46,10 +30,6 @@
// Current version of the library. Keep in sync with `package.json`.
Backbone.VERSION = '1.4.0';
- // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns
- // the `$` variable.
- Backbone.$ = $;
-
// Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable
// to its previous owner. Returns a reference to this Backbone object.
Backbone.noConflict = function() {
@@ -1279,174 +1259,6 @@
return {value: void 0, done: true};
};
- // Backbone.View
- // -------------
-
- // Backbone Views are almost more convention than they are actual code. A View
- // is simply a JavaScript object that represents a logical chunk of UI in the
- // DOM. This might be a single item, an entire list, a sidebar or panel, or
- // even the surrounding frame which wraps your whole app. Defining a chunk of
- // UI as a **View** allows you to define your DOM events declaratively, without
- // having to worry about render order ... and makes it easy for the view to
- // react to specific changes in the state of your models.
-
- // Creating a Backbone.View creates its initial element outside of the DOM,
- // if an existing element is not provided...
- var View = Backbone.View = function(options) {
- this.cid = _.uniqueId('view');
- this.preinitialize.apply(this, arguments);
- _.extend(this, _.pick(options, viewOptions));
- this._ensureElement();
- this.initialize.apply(this, arguments);
- };
-
- // Cached regex to split keys for `delegate`.
- var delegateEventSplitter = /^(\S+)\s*(.*)$/;
-
- // List of view options to be set as properties.
- var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];
-
- // Set up all inheritable **Backbone.View** properties and methods.
- _.extend(View.prototype, Events, {
-
- // The default `tagName` of a View's element is `"div"`.
- tagName: 'div',
-
- // jQuery delegate for element lookup, scoped to DOM elements within the
- // current view. This should be preferred to global lookups where possible.
- $: function(selector) {
- return this.$el.find(selector);
- },
-
- // preinitialize is an empty function by default. You can override it with a function
- // or object. preinitialize will run before any instantiation logic is run in the View
- preinitialize: function(){},
-
- // Initialize is an empty function by default. Override it with your own
- // initialization logic.
- initialize: function(){},
-
- // **render** is the core function that your view should override, in order
- // to populate its element (`this.el`), with the appropriate HTML. The
- // convention is for **render** to always return `this`.
- render: function() {
- return this;
- },
-
- // Remove this view by taking the element out of the DOM, and removing any
- // applicable Backbone.Events listeners.
- remove: function() {
- this._removeElement();
- this.stopListening();
- return this;
- },
-
- // Remove this view's element from the document and all event listeners
- // attached to it. Exposed for subclasses using an alternative DOM
- // manipulation API.
- _removeElement: function() {
- this.$el.remove();
- },
-
- // Change the view's element (`this.el` property) and re-delegate the
- // view's events on the new element.
- setElement: function(element) {
- this.undelegateEvents();
- this._setElement(element);
- this.delegateEvents();
- return this;
- },
-
- // Creates the `this.el` and `this.$el` references for this view using the
- // given `el`. `el` can be a CSS selector or an HTML string, a jQuery
- // context or an element. Subclasses can override this to utilize an
- // alternative DOM manipulation API and are only required to set the
- // `this.el` property.
- _setElement: function(el) {
- this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);
- this.el = this.$el[0];
- },
-
- // Set callbacks, where `this.events` is a hash of
- //
- // *{"event selector": "callback"}*
- //
- // {
- // 'mousedown .title': 'edit',
- // 'click .button': 'save',
- // 'click .open': function(e) { ... }
- // }
- //
- // pairs. Callbacks will be bound to the view, with `this` set properly.
- // Uses event delegation for efficiency.
- // Omitting the selector binds the event to `this.el`.
- delegateEvents: function(events) {
- events || (events = _.result(this, 'events'));
- if (!events) return this;
- this.undelegateEvents();
- for (var key in events) {
- var method = events[key];
- if (!_.isFunction(method)) method = this[method];
- if (!method) continue;
- var match = key.match(delegateEventSplitter);
- this.delegate(match[1], match[2], method.bind(this));
- }
- return this;
- },
-
- // Add a single event listener to the view's element (or a child element
- // using `selector`). This only works for delegate-able events: not `focus`,
- // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.
- delegate: function(eventName, selector, listener) {
- this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);
- return this;
- },
-
- // Clears all callbacks previously bound to the view by `delegateEvents`.
- // You usually don't need to use this, but may wish to if you have multiple
- // Backbone views attached to the same DOM element.
- undelegateEvents: function() {
- if (this.$el) this.$el.off('.delegateEvents' + this.cid);
- return this;
- },
-
- // A finer-grained `undelegateEvents` for removing a single delegated event.
- // `selector` and `listener` are both optional.
- undelegate: function(eventName, selector, listener) {
- this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);
- return this;
- },
-
- // Produces a DOM element to be assigned to your view. Exposed for
- // subclasses using an alternative DOM manipulation API.
- _createElement: function(tagName) {
- return document.createElement(tagName);
- },
-
- // Ensure that the View has a DOM element to render into.
- // If `this.el` is a string, pass it through `$()`, take the first
- // matching element, and re-assign it to `el`. Otherwise, create
- // an element from the `id`, `className` and `tagName` properties.
- _ensureElement: function() {
- if (!this.el) {
- var attrs = _.extend({}, _.result(this, 'attributes'));
- if (this.id) attrs.id = _.result(this, 'id');
- if (this.className) attrs['class'] = _.result(this, 'className');
- this.setElement(this._createElement(_.result(this, 'tagName')));
- this._setAttributes(attrs);
- } else {
- this.setElement(_.result(this, 'el'));
- }
- },
-
- // Set attributes from a hash on this view's element. Exposed for
- // subclasses using an alternative DOM manipulation API.
- _setAttributes: function(attributes) {
- this.$el.attr(attributes);
- }
-
- });
-
// Proxy Backbone class methods to Underscore functions, wrapping the model's
// `attributes` object or collection's `models` array behind the scenes.
//
@@ -1535,512 +1347,6 @@
addUnderscoreMethods(Base, _, methods, attribute);
});
- // Backbone.sync
- // -------------
-
- // Override this function to change the manner in which Backbone persists
- // models to the server. You will be passed the type of request, and the
- // model in question. By default, makes a RESTful Ajax request
- // to the model's `url()`. Some possible customizations could be:
- //
- // * Use `setTimeout` to batch rapid-fire updates into a single request.
- // * Send up the models as XML instead of JSON.
- // * Persist models via WebSockets instead of Ajax.
- //
- // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests
- // as `POST`, with a `_method` parameter containing the true HTTP method,
- // as well as all requests with the body as `application/x-www-form-urlencoded`
- // instead of `application/json` with the model in a param named `model`.
- // Useful when interfacing with server-side languages like **PHP** that make
- // it difficult to read the body of `PUT` requests.
- Backbone.sync = function(method, model, options) {
- var type = methodMap[method];
-
- // Default options, unless specified.
- _.defaults(options || (options = {}), {
- emulateHTTP: Backbone.emulateHTTP,
- emulateJSON: Backbone.emulateJSON
- });
-
- // Default JSON-request options.
- var params = {type: type, dataType: 'json'};
-
- // Ensure that we have a URL.
- if (!options.url) {
- params.url = _.result(model, 'url') || urlError();
- }
-
- // Ensure that we have the appropriate request data.
- if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
- params.contentType = 'application/json';
- params.data = JSON.stringify(options.attrs || model.toJSON(options));
- }
-
- // For older servers, emulate JSON by encoding the request into an HTML-form.
- if (options.emulateJSON) {
- params.contentType = 'application/x-www-form-urlencoded';
- params.data = params.data ? {model: params.data} : {};
- }
-
- // For older servers, emulate HTTP by mimicking the HTTP method with `_method`
- // And an `X-HTTP-Method-Override` header.
- if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {
- params.type = 'POST';
- if (options.emulateJSON) params.data._method = type;
- var beforeSend = options.beforeSend;
- options.beforeSend = function(xhr) {
- xhr.setRequestHeader('X-HTTP-Method-Override', type);
- if (beforeSend) return beforeSend.apply(this, arguments);
- };
- }
-
- // Don't process data on a non-GET request.
- if (params.type !== 'GET' && !options.emulateJSON) {
- params.processData = false;
- }
-
- // Pass along `textStatus` and `errorThrown` from jQuery.
- var error = options.error;
- options.error = function(xhr, textStatus, errorThrown) {
- options.textStatus = textStatus;
- options.errorThrown = errorThrown;
- if (error) error.call(options.context, xhr, textStatus, errorThrown);
- };
-
- // Make the request, allowing the user to override any Ajax options.
- var xhr = options.xhr = Backbone.ajax(_.extend(params, options));
- model.trigger('request', model, xhr, options);
- return xhr;
- };
-
- // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
- var methodMap = {
- create: 'POST',
- update: 'PUT',
- patch: 'PATCH',
- delete: 'DELETE',
- read: 'GET'
- };
-
- // Set the default implementation of `Backbone.ajax` to proxy through to `$`.
- // Override this if you'd like to use a different library.
- Backbone.ajax = function() {
- return Backbone.$.ajax.apply(Backbone.$, arguments);
- };
-
- // Backbone.Router
- // ---------------
-
- // Routers map faux-URLs to actions, and fire events when routes are
- // matched. Creating a new one sets its `routes` hash, if not set statically.
- var Router = Backbone.Router = function(options) {
- options || (options = {});
- this.preinitialize.apply(this, arguments);
- if (options.routes) this.routes = options.routes;
- this._bindRoutes();
- this.initialize.apply(this, arguments);
- };
-
- // Cached regular expressions for matching named param parts and splatted
- // parts of route strings.
- var optionalParam = /\((.*?)\)/g;
- var namedParam = /(\(\?)?:\w+/g;
- var splatParam = /\*\w+/g;
- var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g;
-
- // Set up all inheritable **Backbone.Router** properties and methods.
- _.extend(Router.prototype, Events, {
-
- // preinitialize is an empty function by default. You can override it with a function
- // or object. preinitialize will run before any instantiation logic is run in the Router.
- preinitialize: function(){},
-
- // Initialize is an empty function by default. Override it with your own
- // initialization logic.
- initialize: function(){},
-
- // Manually bind a single named route to a callback. For example:
- //
- // this.route('search/:query/p:num', 'search', function(query, num) {
- // ...
- // });
- //
- route: function(route, name, callback) {
- if (!_.isRegExp(route)) route = this._routeToRegExp(route);
- if (_.isFunction(name)) {
- callback = name;
- name = '';
- }
- if (!callback) callback = this[name];
- var router = this;
- Backbone.history.route(route, function(fragment) {
- var args = router._extractParameters(route, fragment);
- if (router.execute(callback, args, name) !== false) {
- router.trigger.apply(router, ['route:' + name].concat(args));
- router.trigger('route', name, args);
- Backbone.history.trigger('route', router, name, args);
- }
- });
- return this;
- },
-
- // Execute a route handler with the provided parameters. This is an
- // excellent place to do pre-route setup or post-route cleanup.
- execute: function(callback, args, name) {
- if (callback) callback.apply(this, args);
- },
-
- // Simple proxy to `Backbone.history` to save a fragment into the history.
- navigate: function(fragment, options) {
- Backbone.history.navigate(fragment, options);
- return this;
- },
-
- // Bind all defined routes to `Backbone.history`. We have to reverse the
- // order of the routes here to support behavior where the most general
- // routes can be defined at the bottom of the route map.
- _bindRoutes: function() {
- if (!this.routes) return;
- this.routes = _.result(this, 'routes');
- var route, routes = _.keys(this.routes);
- while ((route = routes.pop()) != null) {
- this.route(route, this.routes[route]);
- }
- },
-
- // Convert a route string into a regular expression, suitable for matching
- // against the current location hash.
- _routeToRegExp: function(route) {
- route = route.replace(escapeRegExp, '\\$&')
- .replace(optionalParam, '(?:$1)?')
- .replace(namedParam, function(match, optional) {
- return optional ? match : '([^/?]+)';
- })
- .replace(splatParam, '([^?]*?)');
- return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$');
- },
-
- // Given a route, and a URL fragment that it matches, return the array of
- // extracted decoded parameters. Empty or unmatched parameters will be
- // treated as `null` to normalize cross-browser behavior.
- _extractParameters: function(route, fragment) {
- var params = route.exec(fragment).slice(1);
- return _.map(params, function(param, i) {
- // Don't decode the search params.
- if (i === params.length - 1) return param || null;
- return param ? decodeURIComponent(param) : null;
- });
- }
-
- });
-
- // Backbone.History
- // ----------------
-
- // Handles cross-browser history management, based on either
- // [pushState](http://diveintohtml5.info/history.html) and real URLs, or
- // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)
- // and URL fragments. If the browser supports neither (old IE, natch),
- // falls back to polling.
- var History = Backbone.History = function() {
- this.handlers = [];
- this.checkUrl = this.checkUrl.bind(this);
-
- // Ensure that `History` can be used outside of the browser.
- if (typeof window !== 'undefined') {
- this.location = window.location;
- this.history = window.history;
- }
- };
-
- // Cached regex for stripping a leading hash/slash and trailing space.
- var routeStripper = /^[#\/]|\s+$/g;
-
- // Cached regex for stripping leading and trailing slashes.
- var rootStripper = /^\/+|\/+$/g;
-
- // Cached regex for stripping urls of hash.
- var pathStripper = /#.*$/;
-
- // Has the history handling already been started?
- History.started = false;
-
- // Set up all inheritable **Backbone.History** properties and methods.
- _.extend(History.prototype, Events, {
-
- // The default interval to poll for hash changes, if necessary, is
- // twenty times a second.
- interval: 50,
-
- // Are we at the app root?
- atRoot: function() {
- var path = this.location.pathname.replace(/[^\/]$/, '$&/');
- return path === this.root && !this.getSearch();
- },
-
- // Does the pathname match the root?
- matchRoot: function() {
- var path = this.decodeFragment(this.location.pathname);
- var rootPath = path.slice(0, this.root.length - 1) + '/';
- return rootPath === this.root;
- },
-
- // Unicode characters in `location.pathname` are percent encoded so they're
- // decoded for comparison. `%25` should not be decoded since it may be part
- // of an encoded parameter.
- decodeFragment: function(fragment) {
- return decodeURI(fragment.replace(/%25/g, '%2525'));
- },
-
- // In IE6, the hash fragment and search params are incorrect if the
- // fragment contains `?`.
- getSearch: function() {
- var match = this.location.href.replace(/#.*/, '').match(/\?.+/);
- return match ? match[0] : '';
- },
-
- // Gets the true hash value. Cannot use location.hash directly due to bug
- // in Firefox where location.hash will always be decoded.
- getHash: function(window) {
- var match = (window || this).location.href.match(/#(.*)$/);
- return match ? match[1] : '';
- },
-
- // Get the pathname and search params, without the root.
- getPath: function() {
- var path = this.decodeFragment(
- this.location.pathname + this.getSearch()
- ).slice(this.root.length - 1);
- return path.charAt(0) === '/' ? path.slice(1) : path;
- },
-
- // Get the cross-browser normalized URL fragment from the path or hash.
- getFragment: function(fragment) {
- if (fragment == null) {
- if (this._usePushState || !this._wantsHashChange) {
- fragment = this.getPath();
- } else {
- fragment = this.getHash();
- }
- }
- return fragment.replace(routeStripper, '');
- },
-
- // Start the hash change handling, returning `true` if the current URL matches
- // an existing route, and `false` otherwise.
- start: function(options) {
- if (History.started) throw new Error('Backbone.history has already been started');
- History.started = true;
-
- // Figure out the initial configuration. Do we need an iframe?
- // Is pushState desired ... is it available?
- this.options = _.extend({root: '/'}, this.options, options);
- this.root = this.options.root;
- this._wantsHashChange = this.options.hashChange !== false;
- this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || 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();
-
- // Normalize root to always include a leading and trailing slash.
- this.root = ('/' + this.root + '/').replace(rootStripper, '/');
-
- // Transition from hashChange to pushState or vice versa if both are
- // requested.
- if (this._wantsHashChange && this._wantsPushState) {
-
- // If we've started off with a route from a `pushState`-enabled
- // browser, but we're currently in a browser that doesn't support it...
- if (!this._hasPushState && !this.atRoot()) {
- var rootPath = this.root.slice(0, -1) || '/';
- this.location.replace(rootPath + '#' + this.getPath());
- // Return immediately as browser will do redirect to new url
- return true;
-
- // Or if we've started out with a hash-based route, but we're currently
- // in a browser where it could be `pushState`-based instead...
- } else if (this._hasPushState && this.atRoot()) {
- this.navigate(this.getHash(), {replace: true});
- }
-
- }
-
- // Proxy an iframe to handle location events if the browser doesn't
- // support the `hashchange` event, HTML5 history, or the user wants
- // `hashChange` but not `pushState`.
- 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 body = document.body;
- // Using `appendChild` will throw on IE < 9 if the document is not ready.
- var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;
- iWindow.document.open();
- iWindow.document.close();
- iWindow.location.hash = '#' + this.fragment;
- }
-
- // Add a cross-platform `addEventListener` shim for older browsers.
- var addEventListener = window.addEventListener || function(eventName, listener) {
- return attachEvent('on' + eventName, listener);
- };
-
- // Depending on whether we're using pushState or hashes, and whether
- // 'onhashchange' is supported, determine how we check the URL state.
- if (this._usePushState) {
- addEventListener('popstate', this.checkUrl, false);
- } else if (this._useHashChange && !this.iframe) {
- addEventListener('hashchange', this.checkUrl, false);
- } else if (this._wantsHashChange) {
- this._checkUrlInterval = setInterval(this.checkUrl, this.interval);
- }
-
- if (!this.options.silent) return this.loadUrl();
- },
-
- // Disable Backbone.history, perhaps temporarily. Not useful in a real app,
- // but possibly useful for unit testing Routers.
- stop: function() {
- // Add a cross-platform `removeEventListener` shim for older browsers.
- var removeEventListener = window.removeEventListener || function(eventName, listener) {
- return detachEvent('on' + eventName, listener);
- };
-
- // Remove window listeners.
- if (this._usePushState) {
- removeEventListener('popstate', this.checkUrl, false);
- } else if (this._useHashChange && !this.iframe) {
- removeEventListener('hashchange', this.checkUrl, false);
- }
-
- // Clean up the iframe if necessary.
- if (this.iframe) {
- document.body.removeChild(this.iframe);
- this.iframe = null;
- }
-
- // Some environments will throw when clearing an undefined interval.
- if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);
- History.started = false;
- },
-
- // Add a route to be tested when the fragment changes. Routes added later
- // may override previous routes.
- route: function(route, callback) {
- this.handlers.unshift({route: route, callback: callback});
- },
-
- // Checks the current URL to see if it has changed, and if it has,
- // calls `loadUrl`, normalizing across the hidden iframe.
- checkUrl: function(e) {
- var current = this.getFragment();
-
- // If the user pressed the back button, the iframe's hash will have
- // changed and we should use that for comparison.
- if (current === this.fragment && this.iframe) {
- current = this.getHash(this.iframe.contentWindow);
- }
-
- if (current === this.fragment) return false;
- if (this.iframe) this.navigate(current);
- this.loadUrl();
- },
-
- // Attempt to load the current URL fragment. If a route succeeds with a
- // match, returns `true`. If no defined routes matches the fragment,
- // returns `false`.
- loadUrl: function(fragment) {
- // If the root doesn't match, no routes can match either.
- if (!this.matchRoot()) return false;
- fragment = this.fragment = this.getFragment(fragment);
- return _.some(this.handlers, function(handler) {
- if (handler.route.test(fragment)) {
- handler.callback(fragment);
- return true;
- }
- });
- },
-
- // Save a fragment into the hash history, or replace the URL state if the
- // 'replace' option is passed. You are responsible for properly URL-encoding
- // the fragment in advance.
- //
- // The options object can contain `trigger: true` if you wish to have the
- // route callback be fired (not usually desirable), or `replace: true`, if
- // you wish to modify the current URL without adding an entry to the history.
- navigate: function(fragment, options) {
- if (!History.started) return false;
- if (!options || options === true) options = {trigger: !!options};
-
- // Normalize the fragment.
- fragment = this.getFragment(fragment || '');
-
- // Don't include a trailing slash on the root.
- var rootPath = this.root;
- if (fragment === '' || fragment.charAt(0) === '?') {
- rootPath = rootPath.slice(0, -1) || '/';
- }
- var url = rootPath + fragment;
-
- // Strip the fragment of the query and hash for matching.
- fragment = fragment.replace(pathStripper, '');
-
- // Decode for matching.
- var decodedFragment = this.decodeFragment(fragment);
-
- if (this.fragment === decodedFragment) return;
- this.fragment = decodedFragment;
-
- // If pushState is available, we use it to set the fragment as a real URL.
- if (this._usePushState) {
- this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);
-
- // If hash changes haven't been explicitly disabled, update the hash
- // fragment to store history.
- } else if (this._wantsHashChange) {
- this._updateHash(this.location, fragment, options.replace);
- if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {
- var iWindow = this.iframe.contentWindow;
-
- // Opening and closing the iframe tricks IE7 and earlier to push a
- // history entry on hash-tag change. When replace is true, we don't
- // want this.
- if (!options.replace) {
- iWindow.document.open();
- iWindow.document.close();
- }
-
- this._updateHash(iWindow.location, fragment, options.replace);
- }
-
- // If you've told us that you explicitly don't want fallback hashchange-
- // based history, then `navigate` becomes a page refresh.
- } else {
- return this.location.assign(url);
- }
- if (options.trigger) return this.loadUrl(fragment);
- },
-
- // Update the hash location, either replacing the current entry, or adding
- // a new one to the browser history.
- _updateHash: function(location, fragment, replace) {
- if (replace) {
- var href = location.href.replace(/(javascript:|#).*$/, '');
- location.replace(href + '#' + fragment);
- } else {
- // Some browsers require that `hash` contains a leading #.
- location.hash = '#' + fragment;
- }
- }
-
- });
-
- // Create the default Backbone.history.
- Backbone.history = new History;
-
// Helpers
// -------
@@ -2076,7 +1382,7 @@
};
// Set up inheritance for the model, collection, router, view and history.
- Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;
+ Model.extend = Collection.extend = extend;
// Throw an error when a URL is needed, and none is supplied.
var urlError = function() {