diff options
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/js/services')
-rw-r--r-- | third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/js/services/todoStorage.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/js/services/todoStorage.js b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/js/services/todoStorage.js new file mode 100644 index 0000000000..b68e59628d --- /dev/null +++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/js/services/todoStorage.js @@ -0,0 +1,96 @@ +/*global angular */ + +/** + * Services that persists and retrieves todos from memory or a backend API + * if available. + * + * They both follow the same API, returning promises for all changes to the + * model. + */ +angular.module('todomvc') + .factory('todoStorage', function ($http, $injector) { + 'use strict'; + return Promise.resolve().then(function() { + return $injector.get('localCache'); + }); + }) + + .factory('localCache', function ($q) { + 'use strict'; + + var STORAGE_ID = 'todos-angularjs'; + + var store = { + todos: [], + cache: [], + + _getFromLocalCache: function () { + // return JSON.parse(this.cache[STORAGE_ID] || '[]'); + return []; + }, + + _saveToLocalCache: function (todos) { + // this.cache[STORAGE_ID] = JSON.stringify(todos); + return; + }, + + clearCompleted: function () { + var deferred = $q.defer(); + + var incompleteTodos = store.todos.filter(function (todo) { + return !todo.completed; + }); + + angular.copy(incompleteTodos, store.todos); + + store._saveToLocalCache(store.todos); + deferred.resolve(store.todos); + + return deferred.promise; + }, + + delete: function (todo) { + var deferred = $q.defer(); + + store.todos.splice(store.todos.indexOf(todo), 1); + + store._saveToLocalCache(store.todos); + deferred.resolve(store.todos); + + return deferred.promise; + }, + + get: function () { + var deferred = $q.defer(); + + angular.copy(store._getFromLocalCache(), store.todos); + deferred.resolve(store.todos); + + return deferred.promise; + }, + + insert: function (todo) { + var deferred = $q.defer(); + + store.todos.push(todo); + + store._saveToLocalCache(store.todos); + deferred.resolve(store.todos); + + return deferred.promise; + }, + + put: function (todo, index) { + var deferred = $q.defer(); + + store.todos[index] = todo; + + store._saveToLocalCache(store.todos); + deferred.resolve(store.todos); + + return deferred.promise; + } + }; + + return store; + }); |