Commit e21ab81b authored by Pascal Hartig's avatar Pascal Hartig

Angular-Perf: Add revert on escape (#789)

parent ca448df0
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
<button class="destroy" ng-click="removeTodo(todo)"></button> <button class="destroy" ng-click="removeTodo(todo)"></button>
</div> </div>
<form ng-submit="doneEditing(todo)"> <form ng-submit="doneEditing(todo)">
<input class="edit" ng-trim="false" ng-model="todo.title" ng-blur="doneEditing(todo)" todo-focus="todo == editedTodo"> <input class="edit" ng-trim="false" ng-model="todo.title" ng-blur="doneEditing(todo)" todo-escape="revertEditing(todo)" todo-focus="todo == editedTodo">
</form> </form>
</li> </li>
</ul> </ul>
...@@ -65,5 +65,6 @@ ...@@ -65,5 +65,6 @@
<script src="js/controllers/todoCtrl.js"></script> <script src="js/controllers/todoCtrl.js"></script>
<script src="js/services/todoStorage.js"></script> <script src="js/services/todoStorage.js"></script>
<script src="js/directives/todoFocus.js"></script> <script src="js/directives/todoFocus.js"></script>
<script src="js/directives/todoEscape.js"></script>
</body> </body>
</html> </html>
/*global todomvc */ /*global todomvc, angular */
'use strict'; 'use strict';
/** /**
...@@ -45,6 +45,8 @@ todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage, ...@@ -45,6 +45,8 @@ todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage,
$scope.editTodo = function (todo) { $scope.editTodo = function (todo) {
$scope.editedTodo = todo; $scope.editedTodo = todo;
// Clone the original todo to restore it on demand.
$scope.originalTodo = angular.extend({}, todo);
}; };
$scope.doneEditing = function (todo) { $scope.doneEditing = function (todo) {
...@@ -58,6 +60,11 @@ todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage, ...@@ -58,6 +60,11 @@ todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage,
todoStorage.put(todos); todoStorage.put(todos);
}; };
$scope.revertEditing = function (todo) {
todos[todos.indexOf(todo)] = $scope.originalTodo;
$scope.doneEditing($scope.originalTodo);
};
$scope.removeTodo = function (todo) { $scope.removeTodo = function (todo) {
$scope.remainingCount -= todo.completed ? 0 : 1; $scope.remainingCount -= todo.completed ? 0 : 1;
todos.splice(todos.indexOf(todo), 1); todos.splice(todos.indexOf(todo), 1);
......
/*global todomvc */
'use strict';
/**
* Directive that executes an expression when the element it is applied to gets
* an `escape` keydown event.
*/
todomvc.directive('todoEscape', function () {
var ESCAPE_KEY = 27;
return function (scope, elem, attrs) {
elem.bind('keydown', function (event) {
if (event.keyCode === ESCAPE_KEY) {
scope.$apply(attrs.todoEscape);
}
});
};
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment