(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o ref1; i = 0 <= ref1 ? ++j : --j) { cacheKey = localStorage.key(i); if (!this._cacheKeyHasPrefix(cacheKey, key)) { continue; } skipKey = false; for (k = 0, len = exceptFor.length; k < len; k++) { exception = exceptFor[k]; if (!(this._cacheKeyHasPrefix(cacheKey, exception))) { continue; } skipKey = true; break; } if (skipKey) { continue; } cacheKeys.push(cacheKey); } results = []; for (l = 0, len1 = cacheKeys.length; l < len1; l++) { cacheKey = cacheKeys[l]; results.push(localStorage.removeItem(cacheKey)); } return results; } else { results1 = []; for (m = 0, len2 = where.length; m < len2; m++) { cacheKey = where[m]; results1.push(localStorage.removeItem(this._buildKey(cacheKey))); } return results1; } }; Cache.prototype._buildKey = function(key) { return "" + this.localStoragePrefix + key; }; Cache.prototype._cacheKeyHasPrefix = function(cacheKey, prefix) { var index, nextChar; if (prefix == null) { return cacheKey.indexOf(this.localStoragePrefix) === 0; } prefix = this._buildKey(prefix); index = cacheKey.indexOf(prefix); nextChar = cacheKey[prefix.length]; return index === 0 && ((nextChar == null) || (nextChar === '?' || nextChar === '/')); }; return Cache; })(); module.exports = function(providerParams) { return new Cache(providerParams); }; },{}],3:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; module.exports = function(providerParams) { var Cache, CachedResourceManager, buildCachedResourceClass; buildCachedResourceClass = require('./build_cached_resource_class'); Cache = require('./cache')(providerParams); return CachedResourceManager = (function() { function CachedResourceManager($resource, $timeout, $q) { this.byKey = {}; this.build = angular.bind(this, buildCachedResourceClass, $resource, $timeout, $q, providerParams); } CachedResourceManager.prototype.keys = function() { return Object.keys(this.byKey); }; CachedResourceManager.prototype.add = function() { var CachedResource, args; args = Array.prototype.slice.call(arguments); CachedResource = this.build(args); this.byKey[CachedResource.$key] = CachedResource; CachedResource.$writes.flush(); return CachedResource; }; CachedResourceManager.prototype.flushQueues = function() { var CachedResource, key, ref, results; ref = this.byKey; results = []; for (key in ref) { CachedResource = ref[key]; results.push(CachedResource.$writes.flush()); } return results; }; CachedResourceManager.prototype.clearCache = function(arg) { var CachedResource, clearPendingWrites, exceptFor, key, ref, ref1, results; ref = arg != null ? arg : {}, exceptFor = ref.exceptFor, clearPendingWrites = ref.clearPendingWrites; if (exceptFor == null) { exceptFor = []; } ref1 = this.byKey; results = []; for (key in ref1) { CachedResource = ref1[key]; if (indexOf.call(exceptFor, key) < 0) { results.push(CachedResource.$clearCache({ clearPendingWrites: clearPendingWrites })); } } return results; }; CachedResourceManager.prototype.clearUndefined = function() { return Cache.clear({ exceptFor: this.keys() }); }; return CachedResourceManager; })(); }; },{"./build_cached_resource_class":1,"./cache":2}],4:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var $cachedResourceFactory, $cachedResourceProvider, app, debugMode, localStoragePrefix, resourceManagerListener, slice = [].slice; resourceManagerListener = null; debugMode = false; localStoragePrefix = null; app = angular.module('ngCachedResource', ['ngResource']); if (typeof module !== "undefined" && module !== null) { module.exports = app; } app.provider('$cachedResource', $cachedResourceProvider = (function() { function $cachedResourceProvider() { this.$get = $cachedResourceFactory; localStoragePrefix = 'cachedResource://'; } $cachedResourceProvider.prototype.setDebugMode = function(newSetting) { if (newSetting == null) { newSetting = true; } return debugMode = newSetting; }; $cachedResourceProvider.prototype.setLocalStoragePrefix = function(prefix) { return localStoragePrefix = prefix; }; return $cachedResourceProvider; })()); $cachedResourceFactory = [ '$resource', '$timeout', '$q', '$log', function($resource, $timeout, $q, $log) { var $cachedResource, CachedResourceManager, bindLogFunction, fn, i, len, providerParams, ref, resourceManager; bindLogFunction = function(logFunction) { return function() { var message; message = 1 <= arguments.length ? slice.call(arguments, 0) : []; message.unshift('ngCachedResource'); return $log[logFunction].apply($log, message); }; }; providerParams = { localStoragePrefix: localStoragePrefix, $log: { debug: debugMode ? bindLogFunction('debug') : (function() {}), error: bindLogFunction('error') } }; CachedResourceManager = require('./cached_resource_manager')(providerParams); resourceManager = new CachedResourceManager($resource, $timeout, $q); if (resourceManagerListener) { document.removeEventListener('online', resourceManagerListener); } resourceManagerListener = function(event) { return resourceManager.flushQueues(); }; document.addEventListener('online', resourceManagerListener); $cachedResource = function() { return resourceManager.add.apply(resourceManager, arguments); }; ref = ['clearCache', 'clearUndefined']; for (i = 0, len = ref.length; i < len; i++) { fn = ref[i]; $cachedResource[fn] = angular.bind(resourceManager, resourceManager[fn]); } return $cachedResource; } ]; },{"./cached_resource_manager":3}],5:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var modifyObjectInPlace; module.exports = modifyObjectInPlace = function(oldObject, newObject, cachedObject) { var i, j, key, len, len1, localChange, localChanges, ref, ref1; ref = Object.keys(oldObject); for (i = 0, len = ref.length; i < len; i++) { key = ref[i]; if (!(key[0] !== '$')) { continue; } localChange = cachedObject && (cachedObject[key] == null); if (!((newObject[key] != null) || localChange)) { delete oldObject[key]; } } ref1 = Object.keys(newObject); for (j = 0, len1 = ref1.length; j < len1; j++) { key = ref1[j]; if (key[0] !== '$') { if (angular.isObject(oldObject[key]) && angular.isObject(newObject[key])) { modifyObjectInPlace(oldObject[key], newObject[key], cachedObject != null ? cachedObject[key] : void 0); } else { localChanges = cachedObject && !angular.equals(oldObject[key], cachedObject[key]); if (!(angular.equals(oldObject[key], newObject[key]) || localChanges)) { oldObject[key] = newObject[key]; } } } } if (newObject.length != null) { return oldObject.length = newObject.length; } }; },{}],6:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var processReadArgs; module.exports = processReadArgs = function($q, args) { var deferred, error, params, success; args = Array.prototype.slice.call(args); params = angular.isObject(args[0]) ? args.shift() : {}; success = args[0], error = args[1]; deferred = $q.defer(); if (angular.isFunction(success)) { deferred.promise.then(success); } if (angular.isFunction(error)) { deferred.promise["catch"](error); } return { params: params, deferred: deferred }; }; },{}],7:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var modifyObjectInPlace, processReadArgs, readArrayCache, slice = [].slice; processReadArgs = require('./process_read_args'); modifyObjectInPlace = require('./modify_object_in_place'); module.exports = readArrayCache = function($q, providerParams, name, CachedResource, actionConfig) { var ResourceCacheArrayEntry, ResourceCacheEntry, first; ResourceCacheEntry = require('./resource_cache_entry')(providerParams); ResourceCacheArrayEntry = require('./resource_cache_array_entry')(providerParams); first = function(array, params) { var found, i, item, itemParams, len; found = null; for (i = 0, len = array.length; i < len; i++) { item = array[i]; itemParams = item.$params(); if (Object.keys(params).every(function(key) { return itemParams[key] === params[key]; })) { found = item; break; } } return found; }; return function() { var arrayInstance, cacheArrayEntry, cacheDeferred, cacheInstanceEntry, cacheInstanceParams, httpDeferred, i, len, params, readHttp, ref, ref1; ref = processReadArgs($q, arguments), params = ref.params, cacheDeferred = ref.deferred; httpDeferred = $q.defer(); arrayInstance = new Array(); arrayInstance.$promise = cacheDeferred.promise; arrayInstance.$httpPromise = httpDeferred.promise; cacheArrayEntry = new ResourceCacheArrayEntry(CachedResource.$key, params).load(); arrayInstance.$push = function(resourceInstance) { arrayInstance.push(resourceInstance); return cacheArrayEntry.addInstances([resourceInstance], false, { append: true }); }; arrayInstance.$httpPromise.then(function(instances) { return cacheArrayEntry.addInstances(instances, false); }); readHttp = function() { var resource; resource = CachedResource.$resource[name](params); resource.$promise.then(function(response) { var newArrayInstance; newArrayInstance = new Array(); response.map(function(resourceInstance) { var existingInstance; resourceInstance = new CachedResource(resourceInstance); existingInstance = first(arrayInstance, resourceInstance.$params()); if (existingInstance) { modifyObjectInPlace(existingInstance, resourceInstance); return newArrayInstance.push(existingInstance); } else { return newArrayInstance.push(resourceInstance); } }); arrayInstance.splice.apply(arrayInstance, [0, arrayInstance.length].concat(slice.call(newArrayInstance))); if (!cacheArrayEntry.value) { cacheDeferred.resolve(arrayInstance); } return httpDeferred.resolve(arrayInstance); }); return resource.$promise["catch"](function(error) { if (!cacheArrayEntry.value) { cacheDeferred.reject(error); } return httpDeferred.reject(error); }); }; if (!actionConfig.cacheOnly) { CachedResource.$writes.flush(readHttp); } if (cacheArrayEntry.value) { ref1 = cacheArrayEntry.value; for (i = 0, len = ref1.length; i < len; i++) { cacheInstanceParams = ref1[i]; cacheInstanceEntry = new ResourceCacheEntry(CachedResource.$key, cacheInstanceParams).load(); arrayInstance.push(new CachedResource(cacheInstanceEntry.value)); } cacheDeferred.resolve(arrayInstance); } else if (actionConfig.cacheOnly) { cacheDeferred.reject(new Error("Cache value does not exist for params", params)); } return arrayInstance; }; }; },{"./modify_object_in_place":5,"./process_read_args":6,"./resource_cache_array_entry":9,"./resource_cache_entry":10}],8:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var modifyObjectInPlace, processReadArgs, readCache; processReadArgs = require('./process_read_args'); modifyObjectInPlace = require('./modify_object_in_place'); module.exports = readCache = function($q, providerParams, name, CachedResource, actionConfig) { var ResourceCacheEntry; ResourceCacheEntry = require('./resource_cache_entry')(providerParams); return function() { var cacheDeferred, cacheEntry, httpDeferred, instance, params, readHttp, ref; ref = processReadArgs($q, arguments), params = ref.params, cacheDeferred = ref.deferred; httpDeferred = $q.defer(); instance = new CachedResource({ $promise: cacheDeferred.promise, $httpPromise: httpDeferred.promise }); cacheEntry = new ResourceCacheEntry(CachedResource.$key, params).load(); readHttp = function() { var resource; resource = CachedResource.$resource[name].call(CachedResource.$resource, params); resource.$promise.then(function(httpResponse) { modifyObjectInPlace(instance, httpResponse); if (!cacheEntry.value) { cacheDeferred.resolve(instance); } httpDeferred.resolve(instance); if (cacheEntry.dirty) { providerParams.$log.error("unexpectedly setting a clean entry (load) over a dirty entry (pending write)"); } return cacheEntry.set(httpResponse, false); }); return resource.$promise["catch"](function(error) { if (!cacheEntry.value) { cacheDeferred.reject(error); } return httpDeferred.reject(error); }); }; if (cacheEntry.dirty) { CachedResource.$writes.processResource(params, readHttp); } else if (!actionConfig.cacheOnly) { readHttp(); } if (cacheEntry.value) { angular.extend(instance, cacheEntry.value); cacheDeferred.resolve(instance); } else if (actionConfig.cacheOnly) { cacheDeferred.reject(new Error("Cache value does not exist for params", params)); } return instance; }; }; },{"./modify_object_in_place":5,"./process_read_args":6,"./resource_cache_entry":10}],9:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; module.exports = function(providerParams) { var $log, ResourceCacheArrayEntry, ResourceCacheEntry; $log = providerParams.$log; ResourceCacheEntry = require('./resource_cache_entry')(providerParams); return ResourceCacheArrayEntry = (function(superClass) { extend(ResourceCacheArrayEntry, superClass); function ResourceCacheArrayEntry() { return ResourceCacheArrayEntry.__super__.constructor.apply(this, arguments); } ResourceCacheArrayEntry.prototype.defaultValue = []; ResourceCacheArrayEntry.prototype.cacheKeyPrefix = function() { return this.key + "/array"; }; ResourceCacheArrayEntry.prototype.addInstances = function(instances, dirty, options) { var cacheArrayReferences, cacheInstanceEntry, cacheInstanceParams, i, instance, len; if (options == null) { options = { append: false }; } cacheArrayReferences = options.append ? this.value : []; if (cacheArrayReferences == null) { cacheArrayReferences = []; } for (i = 0, len = instances.length; i < len; i++) { instance = instances[i]; cacheInstanceParams = instance.$params(); if (Object.keys(cacheInstanceParams).length === 0) { $log.error("'" + this.key + "' instance doesn't have any boundParams. Please, make sure you specified them in your resource's initialization, f.e. `{id: \"@id\"}`, or it won't be cached."); } else { cacheArrayReferences.push(cacheInstanceParams); cacheInstanceEntry = new ResourceCacheEntry(this.key, cacheInstanceParams).load(); if (!(options.append && (cacheInstanceEntry.value != null))) { cacheInstanceEntry.set(instance, dirty); } } } return this.set(cacheArrayReferences, dirty); }; return ResourceCacheArrayEntry; })(ResourceCacheEntry); }; },{"./resource_cache_entry":10}],10:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 module.exports = function(providerParams) { var $log, Cache, ResourceCacheEntry; $log = providerParams.$log; Cache = require('./cache')(providerParams); return ResourceCacheEntry = (function() { ResourceCacheEntry.prototype.defaultValue = {}; ResourceCacheEntry.prototype.cacheKeyPrefix = function() { return this.key; }; ResourceCacheEntry.prototype.fullCacheKey = function() { return this.cacheKeyPrefix() + this.cacheKeyParams; }; function ResourceCacheEntry(key, params) { var param, paramKeys; this.key = key; paramKeys = angular.isObject(params) ? Object.keys(params).sort() : []; if (paramKeys.length) { this.cacheKeyParams = '?' + ((function() { var i, len, results; results = []; for (i = 0, len = paramKeys.length; i < len; i++) { param = paramKeys[i]; results.push(param + "=" + params[param]); } return results; })()).join('&'); } else { this.cacheKeyParams = ''; } } ResourceCacheEntry.prototype.load = function() { var ref; ref = Cache.getItem(this.fullCacheKey(), this.defaultValue), this.value = ref.value, this.dirty = ref.dirty; return this; }; ResourceCacheEntry.prototype.set = function(value, dirty) { this.value = value; this.dirty = dirty; return this._update(); }; ResourceCacheEntry.prototype._update = function() { return Cache.setItem(this.fullCacheKey(), { value: this.value, dirty: this.dirty }); }; return ResourceCacheEntry; })(); }; },{"./cache":2}],11:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var CACHE_RETRY_TIMEOUT; CACHE_RETRY_TIMEOUT = 60000; module.exports = function(providerParams, $q) { var $log, Cache, ResourceCacheEntry, ResourceWriteQueue, flushQueueDeferreds, resetDeferred, resolveDeferred; $log = providerParams.$log; ResourceCacheEntry = require('./resource_cache_entry')(providerParams); Cache = require('./cache')(providerParams); flushQueueDeferreds = {}; resetDeferred = function(queue) { var deferred; deferred = $q.defer(); flushQueueDeferreds[queue.key] = deferred; queue.promise = deferred.promise; return deferred; }; resolveDeferred = function(queue) { return flushQueueDeferreds[queue.key].resolve(); }; return ResourceWriteQueue = (function() { ResourceWriteQueue.prototype.logStatusOfRequest = function(status, action, params, data) { return $log.debug(action + " for " + this.key + " " + (angular.toJson(params)) + " " + status + " (queue length: " + this.queue.length + ")", data); }; function ResourceWriteQueue(CachedResource, $timeout) { var i, len, ref, write; this.CachedResource = CachedResource; this.$timeout = $timeout; this.key = this.CachedResource.$key + "/write"; this.queue = Cache.getItem(this.key, []); ref = this.queue; for (i = 0, len = ref.length; i < len; i++) { write = ref[i]; write.busy = false; } resetDeferred(this); if (this.queue.length === 0) { resolveDeferred(this); } } ResourceWriteQueue.prototype.enqueue = function(params, resourceData, action, deferred) { var ref, ref1, resourceParams, write; if (this.queue.length === 0) { resetDeferred(this); } resourceParams = angular.isArray(resourceData) ? resourceData.map(function(resource) { return resource.$params(); }) : resourceData.$params(); write = this.findWrite({ params: params, action: action }); if (write == null) { this.queue.push({ params: params, resourceParams: resourceParams, action: action, deferred: deferred }); this._update(); } else { if ((ref = write.deferred) != null) { ref.promise.then(function(response) { return deferred.resolve(response); }); } if ((ref1 = write.deferred) != null) { ref1.promise["catch"](function(error) { return deferred.reject(error); }); } } return this.logStatusOfRequest('enqueued', action, params, resourceData); }; ResourceWriteQueue.prototype.findWrite = function(arg) { var action, i, len, params, ref, write; action = arg.action, params = arg.params; ref = this.queue; for (i = 0, len = ref.length; i < len; i++) { write = ref[i]; if (action === write.action && angular.equals(params, write.params)) { return write; } } }; ResourceWriteQueue.prototype.removeWrite = function(arg) { var action, entry, i, len, newQueue, params, ref; action = arg.action, params = arg.params; newQueue = []; ref = this.queue; for (i = 0, len = ref.length; i < len; i++) { entry = ref[i]; if (!(action === entry.action && angular.equals(params, entry.params))) { newQueue.push(entry); } } this.queue = newQueue; if (this.queue.length === 0 && this.timeoutPromise) { this.$timeout.cancel(this.timeoutPromise); delete this.timeoutPromise; } this._update(); if (this.queue.length === 0) { return resolveDeferred(this); } }; ResourceWriteQueue.prototype.flush = function(done) { var i, len, ref, results, write; if (angular.isFunction(done)) { this.promise.then(done); } this._setFlushTimeout(); ref = this.queue; results = []; for (i = 0, len = ref.length; i < len; i++) { write = ref[i]; results.push(this._processWrite(write)); } return results; }; ResourceWriteQueue.prototype.processResource = function(params, done) { var i, len, notDone, ref, results, write; notDone = true; ref = this._writesForResource(params); results = []; for (i = 0, len = ref.length; i < len; i++) { write = ref[i]; results.push(this._processWrite(write, (function(_this) { return function() { if (notDone && _this._writesForResource(params).length === 0) { notDone = false; return done(); } }; })(this))); } return results; }; ResourceWriteQueue.prototype._writesForResource = function(params) { var i, len, ref, results, write; ref = this.queue; results = []; for (i = 0, len = ref.length; i < len; i++) { write = ref[i]; if (angular.equals(params, write.params)) { results.push(write); } } return results; }; ResourceWriteQueue.prototype._processWrite = function(write, done) { var cacheEntries, onFailure, onSuccess, writeData; if (write.busy) { return; } write.busy = true; if (angular.isArray(write.resourceParams)) { cacheEntries = write.resourceParams.map((function(_this) { return function(resourceParams) { return new ResourceCacheEntry(_this.CachedResource.$key, resourceParams).load(); }; })(this)); writeData = cacheEntries.map(function(cacheEntry) { return cacheEntry.value; }); } else { cacheEntries = [new ResourceCacheEntry(this.CachedResource.$key, write.resourceParams).load()]; writeData = cacheEntries[0].value; } onSuccess = (function(_this) { return function(value) { var ref; _this.removeWrite(write); if ((ref = write.deferred) != null) { ref.resolve(value); } _this.logStatusOfRequest('succeeded', write.action, write.resourceParams, writeData); if (angular.isFunction(done)) { return done(); } }; })(this); onFailure = (function(_this) { return function(error) { var ref; if (error && error.status >= 400 && error.status < 500) { _this.removeWrite(write); $log.error(write.action + " to " + _this.CachedResource.$key + " failed with error " + error.status, { method: error.config.method, url: error.config.url, writeData: writeData }); } else { write.busy = false; _this.logStatusOfRequest("failed with error " + (angular.toJson(error)) + "; still in queue", write.action, write.resourceParams, writeData); } return (ref = write.deferred) != null ? ref.reject(error) : void 0; }; })(this); this.CachedResource.$resource[write.action](write.params, writeData, onSuccess, onFailure).$promise.then((function(_this) { return function(savedResources) { var cacheEntry, i, len, resource, resourceInstance, results; savedResources = angular.isArray(savedResources) ? savedResources : [savedResources]; results = []; for (i = 0, len = savedResources.length; i < len; i++) { resource = savedResources[i]; resourceInstance = new _this.CachedResource(resource); cacheEntry = new ResourceCacheEntry(_this.CachedResource.$key, resourceInstance.$params()).load(); results.push(cacheEntry.set(resource, false)); } return results; }; })(this)); return this.logStatusOfRequest('processed', write.action, write.resourceParams, writeData); }; ResourceWriteQueue.prototype._setFlushTimeout = function() { if (this.queue.length > 0 && !this.timeoutPromise) { this.timeoutPromise = this.$timeout(angular.bind(this, this.flush), CACHE_RETRY_TIMEOUT); return this.timeoutPromise.then((function(_this) { return function() { delete _this.timeoutPromise; return _this._setFlushTimeout(); }; })(this)); } }; ResourceWriteQueue.prototype._update = function() { var savableQueue; savableQueue = this.queue.map(function(write) { return { params: write.params, resourceParams: write.resourceParams, action: write.action }; }); return Cache.setItem(this.key, savableQueue); }; return ResourceWriteQueue; })(); }; },{"./cache":2,"./resource_cache_entry":10}],12:[function(require,module,exports){ // Generated by CoffeeScript 1.10.0 var modifyObjectInPlace, writeCache; modifyObjectInPlace = require('./modify_object_in_place'); module.exports = writeCache = function($q, providerParams, action, CachedResource, actionConfig) { var ResourceCacheEntry; ResourceCacheEntry = require('./resource_cache_entry')(providerParams); return function() { var args, cacheEntry, data, deferred, error, i, instanceMethod, isArray, isDirty, len, param, params, queueDeferred, ref, resource, success, value, wrapInCachedResource; instanceMethod = this instanceof CachedResource; args = Array.prototype.slice.call(arguments); params = !instanceMethod && angular.isObject(args[1]) ? args.shift() : instanceMethod && angular.isObject(args[0]) ? args.shift() : {}; data = instanceMethod ? this : args.shift(); success = args[0], error = args[1]; isArray = angular.isArray(data); isDirty = !actionConfig.cacheOnly; wrapInCachedResource = function(object) { if (object instanceof CachedResource) { return object; } else { return new CachedResource(object); } }; if (isArray) { data = data.map(function(o) { return wrapInCachedResource(o); }); for (i = 0, len = data.length; i < len; i++) { resource = data[i]; cacheEntry = new ResourceCacheEntry(CachedResource.$key, resource.$params()).load(); if (!angular.equals(cacheEntry.data, resource)) { cacheEntry.set(resource, isDirty); } } } else { data = wrapInCachedResource(data); ref = data.$params(); for (param in ref) { value = ref[param]; params[param] = value; } cacheEntry = new ResourceCacheEntry(CachedResource.$key, data.$params()).load(); if (!angular.equals(cacheEntry.data, data)) { cacheEntry.set(data, isDirty); } } data.$resolved = false; deferred = $q.defer(); data.$promise = deferred.promise; if (angular.isFunction(success)) { deferred.promise.then(success); } if (angular.isFunction(error)) { deferred.promise["catch"](error); } if (actionConfig.cacheOnly) { data.$resolved = true; deferred.resolve(data); } else { queueDeferred = $q.defer(); queueDeferred.promise.then(function(httpResource) { cacheEntry.load(); modifyObjectInPlace(data, httpResource, cacheEntry.value); data.$resolved = true; return deferred.resolve(data); }); queueDeferred.promise["catch"](deferred.reject); CachedResource.$writes.enqueue(params, data, action, queueDeferred); CachedResource.$writes.flush(); } return data; }; }; },{"./modify_object_in_place":5,"./resource_cache_entry":10}]},{},[4]);