// sycamore, v0.5.0 | (c) 2015 Bob Yexley // Description: A mixin with functionality to wrap jQuery $.ajax calls, and simplify the definition and consumption of $.ajax request options // Generated: 2015-07-10 @ 9:58:55 // https://github.com/ryexley/sycamore // License: http://www.opensource.org/licenses/mit-license !function(a,b){"function"==typeof define&&define.amd?define(["jquery","underscore"],b):"object"==typeof exports?module.exports=b(require("jquery"),require("underscore")):a.Requester=b(a.$,a._)}(this,function(a,b){var c={defaults:{templateSettings:{evaluate:/<%([\s\S]+?)%>/g,interpolate:/{([\s\S]+?)}/g,escape:/<%-([\s\S]+?)%>/g}},_memoryCache:{},requestDefaults:{preserveUrlTokensInPayload:{get:!1,put:!0,post:!0,"delete":!1}},mapRequestData:function(a){var c={};return b.each(a,function(a,b){this._executeOptions[b]?c[b]=this._executeOptions[b](a,this):c[b]=a},this),c},_executeOptions:{headers:function(a,b){return b[a]?b[a]:a},data:function(a,b){return b[a]?b[a]:a},done:function(a,b){return b[a]},fail:function(a,b){return b[a]}},_isLocalStorageSupported:function(){var a="supported";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(b){return!1}},_cacheData:function(a,b){if("local"===a.store&&this._isLocalStorageSupported()){var c=JSON.parse(localStorage.getItem("requestDataCache"))||{};c[a.key]=b,localStorage.setItem("requestDataCache",JSON.stringify(c))}else this._memoryCache[a.key]=b;a.expires=this.dates.addMinutes(+new Date,a.expiresAfter)},_getCachedData:function(a){if("local"===a.store&&this._isLocalStorageSupported()){var b=JSON.parse(localStorage.getItem("requestDataCache"));return b[a.key]}return this._memoryCache[a.key]},_processHeaders:function(a){var c={};return b.isEmpty(a)||b.each(a,function(a,d){b.isFunction(a)?c[d]=a():c[d]=a}),c},execute:function(c,d){var e,f=this;if(c.cache){var g=!0;if(c.cache.expires&&this.dates.compare(+new Date,c.cache.expires)<0&&(g=!1),!g){var h=f._getCachedData(c.cache);if(h){var i=a.Deferred();return i.resolve(h),i.promise()}}}if(c=this.mapRequestData(c),c.processedHeaders=f._processHeaders(c.headers||{}),e=b.isFunction(c.data)?c.data.call(c.context||f):c.data,e=void 0!==d?b.extend({},e,d):e,c.url.indexOf("{")&&c.url.indexOf("}")&&!b.isEmpty(e)){var j=[],k=b.clone(e);if(b.each(k,function(a,b){"string"==typeof a&&(k[b]=encodeURIComponent(a))}),c.type=c.type||"get",!this.requestDefaults.preserveUrlTokensInPayload[c.type.toLowerCase()]){var l=c.url.match(/{(.*?)}/g);b.each(l,function(a){a=a.replace("{","").replace("}",""),a in e||(k[a]=""),j.push(a)})}c.url=this._template(c.url,k),b.each(j,function(a){delete e[a]})}return c.delayFor?f._executeDelayed(c,e):f._execute(c,e)},buildRequest:function(a,b){return a.buildRequest?a.buildRequest.call(this,a,b):this._buildRequest(a,b)},_buildRequest:function(b,c){var d=b.type&&b.type.toLowerCase(),e="put"===d||"post"===d||"patch"===d,f=!b.contentType||b.contentType.indexOf("json")>-1,g="string"==typeof c;c&&!g&&e&&f&&(c=JSON.stringify(c||{}));var h={url:b.url,type:b.type||"get",headers:b.processedHeaders||{},data:c,dataType:b.dataType||"json",contentType:b.contentType||"application/json; charset=utf-8",context:b.context||this};return"get"===h.type.toLowerCase()&&b.nocache&&(h.cache=!b.nocache),a.ajax(h)},_execute:function(a,b){var c=this,d=this.buildRequest(a,b);return d.done(function(b){a.cache&&c._cacheData(a.cache,b)}),c._handleConfiguredCallbacks(a,d),d},_executeDelayed:function(b,c){var d,e=this,f=a.Deferred();return setTimeout(function(){d=e.buildRequest(b,c).done(function(){f.resolve.apply(d,arguments)}).fail(function(){f.reject.apply(d,arguments)}),d.done(function(a){b.cache&&e._cacheData(b.cache,a)}),e._handleConfiguredCallbacks(b,d)},b.delayFor),f.promise()},_handleConfiguredCallbacks:function(a,b){var c=this;a.done&&b.done(a.done.bind(a.context||c)),a.fail&&b.fail(a.fail.bind(a.context||c)),a.always&&b.always(a.always.bind(a.context||c))},_template:function(a,c){var d=b.defaults({},this.defaults.templateSettings),e=/(.)^/,f={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},g=/\\|'|\r|\n|\u2028|\u2029/g,h=function(a){return"\\"+f[a]},i=new RegExp([(d.escape||e).source,(d.interpolate||e).source,(d.evaluate||e).source].join("|")+"|$","g"),j=0,k="__p+='";a.replace(i,function(b,c,d,e,f){return k+=a.slice(j,f).replace(g,h),j=f+b.length,c?k+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'":d?k+="'+\n((__t=("+d+"))==null?'':__t)+\n'":e&&(k+="';\n"+e+"\n__p+='"),b}),k+="';\n",d.variable||(k="with(obj||{}){\n"+k+"}\n"),k="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+k+"return __p;\n";var l;try{l=new Function(d.variable||"obj","_",k)}catch(m){throw m.source=k,m}var n=function(a){return l.call(this,a,b)},o=d.variable||"obj";return n.source="function("+o+"){\n"+k+"}",n(c)},fetch:function(a){return this.execute(a)},dates:{convert:function(a){var b=a.constructor===Date?a:a.constructor===Array?new Date(a[0],a[1],a[2]):a.constructor===Number?new Date(a):a.constructor===String?new Date(a):"object"==typeof a?new Date(a.year,a.month,a.date):NaN;return b},compare:function(a,b){var c=isFinite(a=this.convert(a).valueOf())&&isFinite(b=this.convert(b).valueOf())?(a>b)-(b>a):!1;return c},inRange:function(a,b,c){var d=isFinite(a=this.convert(a).valueOf())&&isFinite(b=this.convert(b).valueOf())&&isFinite(c=this.convert(c).valueOf())?a>=b&&c>=a:NaN;return d},addMinutes:function(a,b){if(isFinite(a=this.convert(a).valueOf())){var c=this.convert(a);return this.convert(c.setMinutes(c.getMinutes()+b))}return!1}}};return c});