Commit 81897ce5 authored by dmitriz's avatar dmitriz

angularjs-perf: Wrap into anonymous functions

parent a960f9a4
/*global angular */ /*global angular */
/*jshint unused:false */ /*jshint unused:false */
'use strict'; (function () {
'use strict';
/** /**
* The main TodoMVC app module that pulls all dependency modules declared in same named files * The main TodoMVC app module that pulls all dependency modules declared in same named files
* *
* @type {angular.Module} * @type {angular.Module}
*/ */
angular.module('todomvc', ['todoCtrl', 'todoEscape', 'todoStorage']); angular.module('todomvc', ['todoCtrl', 'todoEscape', 'todoStorage']);
})();
/*global angular */ /*global angular */
'use strict'; (function () {
'use strict';
angular.module('todoCtrl', []) angular.module('todoCtrl', [])
/** /**
* The main controller for the app. The controller: * The main controller for the app. The controller:
* - retrieves and persists the model via the todoStorage service * - retrieves and persists the model via the todoStorage service
* - exposes the model to the template and provides event handlers * - exposes the model to the template and provides event handlers
*/ */
.controller('TodoCtrl', function TodoCtrl($scope, $location, $filter, todoStorage) { .controller('TodoCtrl', function TodoCtrl($scope, $location, $filter, todoStorage) {
var todos = $scope.todos = todoStorage.get(); var todos = $scope.todos = todoStorage.get();
$scope.newTodo = '';
$scope.remainingCount = $filter('filter')(todos, {completed: false}).length;
$scope.editedTodo = null;
if ($location.path() === '') {
$location.path('/');
}
$scope.location = $location;
$scope.$watch('location.path()', function (path) {
$scope.statusFilter = { '/active': {completed: false}, '/completed': {completed: true} }[path];
});
$scope.$watch('remainingCount == 0', function (val) {
$scope.allChecked = val;
});
$scope.addTodo = function () {
var newTodo = $scope.newTodo.trim();
if (newTodo.length === 0) {
return;
}
todos.push({
title: newTodo,
completed: false
});
todoStorage.put(todos);
$scope.newTodo = ''; $scope.newTodo = '';
$scope.remainingCount++; $scope.remainingCount = $filter('filter')(todos, {completed: false}).length;
};
$scope.editTodo = function (todo) {
$scope.editedTodo = todo;
// Clone the original todo to restore it on demand.
$scope.originalTodo = angular.extend({}, todo);
};
$scope.doneEditing = function (todo) {
$scope.editedTodo = null; $scope.editedTodo = null;
todo.title = todo.title.trim();
if (!todo.title) { if ($location.path() === '') {
$scope.removeTodo(todo); $location.path('/');
} }
todoStorage.put(todos); $scope.location = $location;
};
$scope.revertEditing = function (todo) {
todos[todos.indexOf(todo)] = $scope.originalTodo;
$scope.doneEditing($scope.originalTodo);
};
$scope.removeTodo = function (todo) { $scope.$watch('location.path()', function (path) {
$scope.remainingCount -= todo.completed ? 0 : 1; $scope.statusFilter = { '/active': {completed: false}, '/completed': {completed: true} }[path];
todos.splice(todos.indexOf(todo), 1);
todoStorage.put(todos);
};
$scope.todoCompleted = function (todo) {
$scope.remainingCount += todo.completed ? -1 : 1;
todoStorage.put(todos);
};
$scope.clearCompletedTodos = function () {
$scope.todos = todos = todos.filter(function (val) {
return !val.completed;
}); });
todoStorage.put(todos);
};
$scope.markAll = function (completed) { $scope.$watch('remainingCount == 0', function (val) {
todos.forEach(function (todo) { $scope.allChecked = val;
todo.completed = completed;
}); });
$scope.remainingCount = completed ? 0 : todos.length;
todoStorage.put(todos); $scope.addTodo = function () {
}; var newTodo = $scope.newTodo.trim();
}); if (newTodo.length === 0) {
return;
}
todos.push({
title: newTodo,
completed: false
});
todoStorage.put(todos);
$scope.newTodo = '';
$scope.remainingCount++;
};
$scope.editTodo = function (todo) {
$scope.editedTodo = todo;
// Clone the original todo to restore it on demand.
$scope.originalTodo = angular.extend({}, todo);
};
$scope.doneEditing = function (todo) {
$scope.editedTodo = null;
todo.title = todo.title.trim();
if (!todo.title) {
$scope.removeTodo(todo);
}
todoStorage.put(todos);
};
$scope.revertEditing = function (todo) {
todos[todos.indexOf(todo)] = $scope.originalTodo;
$scope.doneEditing($scope.originalTodo);
};
$scope.removeTodo = function (todo) {
$scope.remainingCount -= todo.completed ? 0 : 1;
todos.splice(todos.indexOf(todo), 1);
todoStorage.put(todos);
};
$scope.todoCompleted = function (todo) {
$scope.remainingCount += todo.completed ? -1 : 1;
todoStorage.put(todos);
};
$scope.clearCompletedTodos = function () {
$scope.todos = todos = todos.filter(function (val) {
return !val.completed;
});
todoStorage.put(todos);
};
$scope.markAll = function (completed) {
todos.forEach(function (todo) {
todo.completed = completed;
});
$scope.remainingCount = completed ? 0 : todos.length;
todoStorage.put(todos);
};
});
})();
/*global angular */ /*global angular */
'use strict'; (function () {
'use strict';
angular.module('todoEscape', []) angular.module('todoEscape', [])
/** /**
* Directive that executes an expression when the element it is applied to gets * Directive that executes an expression when the element it is applied to gets
* an `escape` keydown event. * an `escape` keydown event.
*/ */
.directive('todoEscape', function () { .directive('todoEscape', function () {
var ESCAPE_KEY = 27; var ESCAPE_KEY = 27;
return function (scope, elem, attrs) { return function (scope, elem, attrs) {
elem.bind('keydown', function (event) { elem.bind('keydown', function (event) {
if (event.keyCode === ESCAPE_KEY) { if (event.keyCode === ESCAPE_KEY) {
scope.$apply(attrs.todoEscape); scope.$apply(attrs.todoEscape);
} }
}); });
scope.$on('$destroy', function () { scope.$on('$destroy', function () {
elem.unbind('keydown'); elem.unbind('keydown');
}); });
}; };
}); });
})();
/*global angular */ /*global angular */
'use strict'; (function () {
'use strict';
angular.module('todoFocus', []) angular.module('todoFocus', [])
/** /**
* Directive that places focus on the element it is applied to when the expression it binds to evaluates to true * Directive that places focus on the element it is applied to when the expression it binds to evaluates to true
*/ */
.directive('todoFocus', function ($timeout) { .directive('todoFocus', function ($timeout) {
return function (scope, elem, attrs) { return function (scope, elem, attrs) {
scope.$watch(attrs.todoFocus, function (newVal) { scope.$watch(attrs.todoFocus, function (newVal) {
if (newVal) { if (newVal) {
$timeout(function () { $timeout(function () {
elem[0].focus(); elem[0].focus();
}, 0, false); }, 0, false);
} }
}); });
}; };
}); });
})();
/*global angular */ /*global angular */
'use strict'; (function () {
'use strict';
angular.module('todoStorage', []) angular.module('todoStorage', [])
/** /**
* Services that persists and retrieves TODOs from localStorage * Services that persists and retrieves TODOs from localStorage
*/ */
.factory('todoStorage', function () { .factory('todoStorage', function () {
var STORAGE_ID = 'todos-angularjs-perf'; var STORAGE_ID = 'todos-angularjs-perf';
return { return {
get: function () { get: function () {
return JSON.parse(localStorage.getItem(STORAGE_ID) || '[]'); return JSON.parse(localStorage.getItem(STORAGE_ID) || '[]');
}, },
put: function (todos) { put: function (todos) {
localStorage.setItem(STORAGE_ID, JSON.stringify(todos)); localStorage.setItem(STORAGE_ID, JSON.stringify(todos));
} }
}; };
}); });
})();
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