Add an AngularJS test to DoYouEvenBench
[WebKit-https.git] / PerformanceTests / DoYouEvenBench / todomvc / architecture-examples / angularjs / js / controllers / todoCtrl.js
1 /*global todomvc, angular */
2 'use strict';
3
4 /**
5  * The main controller for the app. The controller:
6  * - retrieves and persists the model via the todoStorage service
7  * - exposes the model to the template and provides event handlers
8  */
9 todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage, filterFilter) {
10     var todos = $scope.todos = todoStorage.get();
11
12     $scope.newTodo = '';
13     $scope.editedTodo = null;
14
15     $scope.$watch('todos', function (newValue, oldValue) {
16     $scope.remainingCount = filterFilter(todos, { completed: false }).length;
17     $scope.completedCount = todos.length - $scope.remainingCount;
18     $scope.allChecked = !$scope.remainingCount;
19     if (newValue !== oldValue) { // This prevents unneeded calls to the local storage
20     todoStorage.put(todos);
21     }
22     }, true);
23
24     if ($location.path() === '') {
25     $location.path('/');
26     }
27
28     $scope.location = $location;
29
30     $scope.$watch('location.path()', function (path) {
31     $scope.statusFilter = (path === '/active') ?
32     { completed: false } : (path === '/completed') ?
33     { completed: true } : null;
34     });
35
36     $scope.addTodo = function () {
37     var newTodo = $scope.newTodo.trim();
38     if (!newTodo.length) {
39     return;
40     }
41
42     todos.push({
43     title: newTodo,
44     completed: false
45     });
46
47     $scope.newTodo = '';
48     };
49
50     $scope.editTodo = function (todo) {
51     $scope.editedTodo = todo;
52     // Clone the original todo to restore it on demand.
53     $scope.originalTodo = angular.extend({}, todo);
54     };
55
56     $scope.doneEditing = function (todo) {
57     $scope.editedTodo = null;
58     todo.title = todo.title.trim();
59
60     if (!todo.title) {
61     $scope.removeTodo(todo);
62     }
63     };
64
65     $scope.revertEditing = function (todo) {
66     todos[todos.indexOf(todo)] = $scope.originalTodo;
67     $scope.doneEditing($scope.originalTodo);
68     };
69
70     $scope.removeTodo = function (todo) {
71     todos.splice(todos.indexOf(todo), 1);
72     };
73
74     $scope.clearCompletedTodos = function () {
75     $scope.todos = todos = todos.filter(function (val) {
76     return !val.completed;
77     });
78     };
79
80     $scope.markAll = function (completed) {
81     todos.forEach(function (todo) {
82     todo.completed = completed;
83     });
84     };
85 });