Skip to content

Commit

Permalink
firebase-angular: refactor controller
Browse files Browse the repository at this point in the history
  • Loading branch information
passy committed Aug 4, 2013
1 parent 20100b5 commit 8c48866
Showing 1 changed file with 68 additions and 65 deletions.
133 changes: 68 additions & 65 deletions labs/architecture-examples/firebase-angular/js/controllers/todoCtrl.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*global todomvc, angular */
/*global todomvc, angular, Firebase */
'use strict';

/**
Expand All @@ -7,79 +7,82 @@
* - exposes the model to the template and provides event handlers
*/
todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, angularFire) {
var url = 'https://todomvc-angular.firebaseio.com/';

$scope.newTodo = '';
$scope.editedTodo = null;
this.onDataLoaded = function onDataLoaded($scope, $location, url) {
$scope.$watch('todos', function () {
var total = 0;
var remaining = 0;
angular.forEach($scope.todos, function (todo) {
total++;
if (todo.completed === false) {
remaining++;
}
});
$scope.remainingCount = remaining;
$scope.completedCount = total - remaining;
$scope.allChecked = !$scope.remainingCount;
}, true);

if ($location.path() === '') {
$location.path('/');
}
$scope.location = $location;
$scope.addTodo = function () {
var newTodo = $scope.newTodo.trim();
if (!newTodo.length) {
return;
}
$scope.todos[new Firebase(url).push().name()] = {
title: newTodo,
completed: false
};
$scope.newTodo = '';
};

angularFire(url, $scope, 'todos', {}).then(function() {
onDataLoaded($scope, $location, url);
});
});
$scope.editTodo = function (id) {
$scope.editedTodo = $scope.todos[id];
$scope.originalTodo = angular.extend({}, $scope.editedTodo);
};

function onDataLoaded($scope, $location, url) {
$scope.$watch('todos', function () {
var total = 0;
var remaining = 0;
angular.forEach($scope.todos, function(todo) {
total++;
if (todo.completed === false) remaining++;
});
$scope.remainingCount = remaining;
$scope.completedCount = total - remaining;
$scope.allChecked = !$scope.remainingCount;
}, true);
$scope.doneEditing = function (id) {
$scope.editedTodo = null;
var title = $scope.todos[id].title.trim();
if (!title) {
$scope.removeTodo(id);
}
};

$scope.addTodo = function () {
var newTodo = $scope.newTodo.trim();
if (!newTodo.length) {
return;
}
$scope.todos[new Firebase(url).push().name()] = {
title: newTodo,
completed: false
$scope.revertEditing = function (id) {
$scope.todos[id] = $scope.originalTodo;
$scope.doneEditing(id);
};
$scope.newTodo = '';
};

$scope.editTodo = function (id) {
$scope.editedTodo = $scope.todos[id];
$scope.originalTodo = angular.extend({}, $scope.editedTodo);
};
$scope.removeTodo = function (id) {
delete $scope.todos[id];
};

$scope.doneEditing = function (id) {
$scope.editedTodo = null;
var title = $scope.todos[id].title.trim();
if (!title) {
$scope.removeTodo(id);
}
};
$scope.clearCompletedTodos = function () {
var notCompleted = {};
angular.forEach($scope.todos, function (todo, id) {
if (!todo.completed) {
notCompleted[id] = todo;
}
});
$scope.todos = notCompleted;
};

$scope.revertEditing = function (id) {
$scope.todos[id] = $scope.originalTodo;
$scope.doneEditing(id);
$scope.markAll = function (completed) {
angular.forEach($scope.todos, function (todo) {
todo.completed = completed;
});
};
};

$scope.removeTodo = function (id) {
delete $scope.todos[id];
};
var url = 'https://todomvc-angular.firebaseio.com/';
$scope.newTodo = '';
$scope.editedTodo = null;

$scope.clearCompletedTodos = function () {
var notCompleted = {};
angular.forEach($scope.todos, function (todo, id) {
if (!todo.completed) notCompleted[id] = todo;
});
$scope.todos = notCompleted;
};
if ($location.path() === '') {
$location.path('/');
}
$scope.location = $location;

$scope.markAll = function (completed) {
angular.forEach($scope.todos, function (todo) {
todo.completed = completed;
});
};
}
angularFire(url, $scope, 'todos', {}).then(function () {
this.onDataLoaded($scope, $location, url);
}.bind(this));
});

0 comments on commit 8c48866

Please sign in to comment.