// // backbone.trackit - 0.1.0 // The MIT License // Copyright (c) 2013 The New York Times, CMS Group, Matthew DeLambo // !function(){var a=[],b=function(b){_.isEmpty(b._unsavedChanges)?a=_.filter(a,function(a){return b.cid!=a.cid}):_.findWhere(a,{cid:b.cid})||a.push(b)},c=function(b){var c,d=_.rest(arguments),e=function(a,b){return _.isBoolean(b)?b:(_.isString(b)?a[b]:b).apply(a,d)};return _.each(a,function(a){!c&&e(a,a._unsavedConfig[b])&&(c=a._unsavedConfig.prompt)}),c};Backbone.History.prototype.navigate=_.wrap(Backbone.History.prototype.navigate,function(a,b,d){var e=c("unloadRouterPrompt",b,d);e?confirm(e+" \n\nAre you sure you want to leave this page?")&&a.call(this,b,d):a.call(this,b,d)}),window.onbeforeunload=function(a){return c("unloadWindowPrompt",a)},_.extend(Backbone.Model.prototype,{unsaved:{},_trackingChanges:!1,_originalAttrs:{},_unsavedChanges:{},startTracking:function(){return this._unsavedConfig=_.extend({},{prompt:"You have unsaved changes!",unloadRouterPrompt:!1,unloadWindowPrompt:!1},this.unsaved||{}),this._trackingChanges=!0,this._resetTracking(),this._triggerUnsavedChanges(),this},stopTracking:function(){return this._trackingChanges=!1,this._originalAttrs={},this._unsavedChanges={},this._triggerUnsavedChanges(),this},restartTracking:function(){return this._resetTracking(),this._triggerUnsavedChanges(),this},resetAttributes:function(){return this._trackingChanges?(this.attributes=this._originalAttrs,this._resetTracking(),this._triggerUnsavedChanges(),this):void 0},unsavedAttributes:function(a){if(!a)return _.isEmpty(this._unsavedChanges)?!1:_.clone(this._unsavedChanges);var b,c=!1,d=this._unsavedChanges;for(var e in a)_.isEqual(d[e],b=a[e])||((c||(c={}))[e]=b);return c},_resetTracking:function(){this._originalAttrs=_.clone(this.attributes),this._unsavedChanges={}},_triggerUnsavedChanges:function(){this.trigger("unsavedChanges",!_.isEmpty(this._unsavedChanges),_.clone(this._unsavedChanges)),this.unsaved&&b(this)}}),Backbone.Model.prototype.set=_.wrap(Backbone.Model.prototype.set,function(a,b,c,d){var e,f;return null==b?this:("object"==typeof b?(e=b,d=c):(e={})[b]=c,d||(d={}),f=a.call(this,e,d),this._trackingChanges&&!d.silent&&(_.each(e,_.bind(function(a,b){_.isEqual(this._originalAttrs[b],a)?delete this._unsavedChanges[b]:this._unsavedChanges[b]=a},this)),this._triggerUnsavedChanges()),f)}),Backbone.sync=_.wrap(Backbone.sync,function(a,b,c,d){return d||(d={}),"update"==b&&(d.success=_.wrap(d.success,_.bind(function(a,b,d,e){var f;return a&&(f=a.call(this,b,d,e)),c._trackingChanges&&(c._resetTracking(),c._triggerUnsavedChanges()),f},this))),a(b,c,d)})}();