Skip to content

Instantly share code, notes, and snippets.

@niiamon

niiamon/app.js Secret

Created February 25, 2014 08:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niiamon/9500a4d208ed3ca569c2 to your computer and use it in GitHub Desktop.
Save niiamon/9500a4d208ed3ca569c2 to your computer and use it in GitHub Desktop.
app.js
angular.module('lukaduka-pos', ['ionic', 'LocalStorageModule'])
/**
* The Projects factory handles saving and loading projects
* from local storage, and also lets us save and load the
* last active project index.
*/
.factory('Projects', function(localStorageService) {
return {
all: function() {
var projectString = localStorageService.get('projects');
if(projectString) {
return angular.fromJson(projectString);
}
return [];
},
save: function(projects) {
localStorageService.add('projects', angular.toJson(projects));
},
newProject: function(projectTitle) {
// Add a new project
return {
title: projectTitle,
tasks: []
};
},
getLastActiveIndex: function() {
var lastActiveProject = localStorageService.get('lastActiveProject');
return parseInt(lastActiveProject) || 0;
},
setLastActiveIndex: function(index) {
localStorageService.add('lastActiveProject', index);
}
}
})
.controller('LukadukaCtrl', function($scope, $timeout, $ionicModal, Projects) {
// A utility function for creating a new project
// with the given projectTitle
var createProject = function(projectTitle) {
var newProject = Projects.newProject(projectTitle);
$scope.projects.push(newProject);
Projects.save($scope.projects);
$scope.selectProject(newProject, $scope.projects.length-1);
}
// Load or initialize projects
$scope.projects = Projects.all();
// Grab the last active, or the first project
$scope.activeProject = $scope.projects[Projects.getLastActiveIndex()];
// Called to create a new project
$scope.newProject = function() {
var projectTitle = prompt('Project name');
if(projectTitle) {
createProject(projectTitle);
}
};
// Called to select the given project
$scope.selectProject = function(project, index) {
$scope.activeProject = project;
Projects.setLastActiveIndex(index);
$scope.sideMenuController.close();
};
// Create our modal
$ionicModal.fromTemplateUrl('new-task.html', function(modal) {
$scope.taskModal = modal;
}, {
scope: $scope
});
$scope.createTask = function(task) {
if(!$scope.activeProject || !task) {
return;
}
$scope.activeProject.tasks.push({
title: task.title
});
$scope.taskModal.hide();
// Inefficient, but save all the projects
Projects.save($scope.projects);
task.title = "";
};
$scope.newTask = function() {
$scope.taskModal.show();
};
$scope.closeNewTask = function() {
$scope.taskModal.hide();
}
$scope.toggleProjects = function() {
$scope.sideMenuController.toggleLeft();
};
// Try to create the first project, make sure to defer
// this by using $timeout so everything is initialized
// properly
$timeout(function() {
if($scope.projects.length == 0) {
while(true) {
var projectTitle = prompt('Your first project title:');
if(projectTitle) {
createProject(projectTitle);
break;
}
}
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment