summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/preact/src/app/model.js
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/preact/src/app/model.js')
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/preact/src/app/model.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/preact/src/app/model.js b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/preact/src/app/model.js
new file mode 100644
index 0000000000..2c8aae1d51
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/preact/src/app/model.js
@@ -0,0 +1,54 @@
+import { uuid, store } from './util';
+
+export default class TodoModel {
+ constructor(key, sub) {
+ this.key = key;
+ this.todos = store(key) || [];
+ this.onChanges = [sub];
+ }
+
+ inform() {
+ store(this.key, this.todos);
+ this.onChanges.forEach( cb => cb() );
+ }
+
+ addTodo(title) {
+ this.todos = this.todos.concat({
+ id: uuid(),
+ title,
+ completed: false
+ });
+ this.inform();
+ }
+
+ toggleAll(completed) {
+ this.todos = this.todos.map(
+ todo => ({ ...todo, completed })
+ );
+ this.inform();
+ }
+
+ toggle(todoToToggle) {
+ this.todos = this.todos.map( todo => (
+ todo !== todoToToggle ? todo : ({ ...todo, completed: !todo.completed })
+ ) );
+ this.inform();
+ }
+
+ destroy(todo) {
+ this.todos = this.todos.filter( t => t !== todo );
+ this.inform();
+ }
+
+ save(todoToSave, title) {
+ this.todos = this.todos.map( todo => (
+ todo !== todoToSave ? todo : ({ ...todo, title })
+ ));
+ this.inform();
+ }
+
+ clearCompleted() {
+ this.todos = this.todos.filter( todo => !todo.completed );
+ this.inform();
+ }
+}