checklists: handle backspacing an empty CL item

This commit is contained in:
Tyler Renelle 2013-12-30 13:19:42 -07:00
parent ebc7cf6bcb
commit 1110338b9b
4 changed files with 21 additions and 18 deletions

View file

@ -21,7 +21,6 @@
"angular-sanitize": "~1.2.1", "angular-sanitize": "~1.2.1",
"angular-resource": "~1.2.1", "angular-resource": "~1.2.1",
"angular-ui": "~0.4.0", "angular-ui": "~0.4.0",
"angular-ui-utils": "~0.0.4",
"angular-bootstrap": "~0.5.0", "angular-bootstrap": "~0.5.0",
"angular-ui-router": "ca3b4777a603df8f86cfd653c8f6c38b2ae05d89", "angular-ui-router": "ca3b4777a603df8f86cfd653c8f6c38b2ae05d89",
"angular-loading-bar": "~0.0.5", "angular-loading-bar": "~0.0.5",
@ -38,13 +37,14 @@
"js-emoji": "git://github.com/snicker/js-emoji#master", "js-emoji": "git://github.com/snicker/js-emoji#master",
"gemoji": "git://github.com/github/gemoji", "gemoji": "git://github.com/github/gemoji",
"sticky": "*", "sticky": "*",
"bootstrap-tour": "~0.8.0" "bootstrap-tour": "~0.8.0",
"angular-ui-utils": "~0.1.0"
}, },
"resolutions": { "resolutions": {
"jquery": "~2.0.3", "jquery": "~2.0.3",
"bootstrap": "v2.3.2", "bootstrap": "v2.3.2",
"angular": "~1.2.1", "angular": "~1.2.1",
"bootstrap-tour": "~0.8.0" "angular-ui-utils": "~0.1.0"
}, },
"devDependencies": { "devDependencies": {
"angular-mocks": "~1.2.1" "angular-mocks": "~1.2.1"

View file

@ -82,29 +82,32 @@ habitrpg.controller("TasksCtrl", ['$scope', '$rootScope', '$location', 'User','N
Checklists Checklists
------------------------ ------------------------
*/ */
var ws = window.setTimeout; function focusChecklist(task,index) {
window.setTimeout(function(){
$('#task-'+task.id+' .checklist-form .inline-edit')[index].focus();
});
}
$scope.addChecklist = function(task) { $scope.addChecklist = function(task) {
task.checklist = [{completed:false,text:""}]; task.checklist = [{completed:false,text:""}];
ws(function(){ focusChecklist(task,0);
$('#task-'+task.id+' .checklist-form .inline-edit')[0].focus();
});
} }
$scope.addChecklistItem = function(task,$event,$index) { $scope.addChecklistItem = function(task,$event,$index) {
if ($index == task.checklist.length-1){ if ($index == task.checklist.length-1){
User.user.ops.updateTask({params:{id:task.id},body:task}); // don't preen the new empty item User.user.ops.updateTask({params:{id:task.id},body:task}); // don't preen the new empty item
task.checklist.push({completed:false,text:''}); task.checklist.push({completed:false,text:''});
ws(function(){ focusChecklist(task,task.checklist.length-1);
var list = $('#task-'+task.id+' .checklist-form .inline-edit');
list[list.length-1].focus();
},0);
} else { } else {
$scope.saveTask(task,true); $scope.saveTask(task,true);
$('#task-'+task.id+' .checklist-form .inline-edit')[$index+1].focus(); focusChecklist(task,$index+1);
} }
} }
$scope.removeChecklistItem = function(task,$index){ $scope.removeChecklistItem = function(task,$index,force){
task.checklist.splice($index,1); var backspaced = !force && !task.checklist[$index].text
$scope.saveTask(task,true); if (force || backspaced) {
task.checklist.splice($index,1);
$scope.saveTask(task,true);
if (backspaced) focusChecklist(task,$index-1);
}
} }
$scope.checklistCompletion = function(checklist){ $scope.checklistCompletion = function(checklist){
return _.reduce(checklist,function(m,i){return m+(i.completed ? 1 : 0);},0) return _.reduce(checklist,function(m,i){return m+(i.completed ? 1 : 0);},0)

View file

@ -11,7 +11,7 @@
"bower_components/angular-ui-router/release/angular-ui-router.js", "bower_components/angular-ui-router/release/angular-ui-router.js",
"bower_components/angular-resource/angular-resource.min.js", "bower_components/angular-resource/angular-resource.min.js",
"bower_components/angular-ui/build/angular-ui.js", "bower_components/angular-ui/build/angular-ui.js",
"bower_components/angular-ui-utils/modules/keypress/keypress.js", "bower_components/angular-ui-utils/ui-utils.min.js",
"bower_components/angular-loading-bar/build/loading-bar.js", "bower_components/angular-loading-bar/build/loading-bar.js",
"bower_components/Angular-At-Directive/src/at.js", "bower_components/Angular-At-Directive/src/at.js",
"bower_components/Angular-At-Directive/src/caret.js", "bower_components/Angular-At-Directive/src/caret.js",

View file

@ -114,10 +114,10 @@ li(bindonce='list', bo-id='"task-"+task.id', ng-repeat='task in obj[list.type+"s
legend.option-title Checklist legend.option-title Checklist
ul.unstyled ul.unstyled
li(ng-repeat='item in task.checklist') li(ng-repeat='item in task.checklist')
a.pull-right.checklist-icons(ng-click='removeChecklistItem(task,$index)') a.pull-right.checklist-icons(ng-click='removeChecklistItem(task,$index,true)')
i.icon-trash(tooltip='Delete') i.icon-trash(tooltip='Delete')
input(type='checkbox',ng-model='item.completed',ng-change='saveTask(task,true)') input(type='checkbox',ng-model='item.completed',ng-change='saveTask(task,true)')
input.inline-edit(type='text',ng-model='item.text',ui-keypress="{'13':'addChecklistItem(task,$event,$index)'}")//-,ng-blur='saveTask(task,true)') input.inline-edit(type='text',ng-model='item.text',ui-keyup="{13:'addChecklistItem(task,$event,$index)','8 49':'removeChecklistItem(task,$index)'}")//-,ng-blur='saveTask(task,true)')
form(ng-submit='saveTask(task)') form(ng-submit='saveTask(task)')