Group tasks ui picked (#7996)

* Added initial group tasks ui

* Changed group compnent directory

* Added group task checklist support

* Added checklist support to ui

* Fixed delete tags route

* Added checklist routes to support new group tasks

* Added assign user tag input

* Added new group members autocomplete directive

* Linked assign ui to api

* Added styles

* Limited tag use

* Fixed line endings

* Updated to new file structure

* Fixed failing task tests

* Updatd with new checklist logic and fixed columns

* Added purchased info to group and prevented non purchased group from seeing new group tasks

* Updated add task function

* Added userid check back to tag routes

* Marked tag tests as pending

* Added comments to pending tests

* Added back routes accidently deleted

* Added locale strings

* Other clarity fixes

* Moved common task function to task service

* Removed files from manifest

* Fixed naming collision and remove logic

* Removed group get tasks until live

* Fixed test to check update task. Removed extra removeTask call. Synced updated checklists. Added purchased to noset

* Fixed delete group task
This commit is contained in:
Keith Holliday
2016-10-03 13:12:20 -07:00
committed by Matteo Pagliazzi
parent 6a82206f81
commit 285041cdee
30 changed files with 1325 additions and 370 deletions

View File

@@ -29,6 +29,33 @@ angular.module('habitrpg')
list.focus = true;
};
function removeTask (task) {
if (!confirm(window.env.t('sureDelete', {taskType: window.env.t(task.type), taskText: task.text}))) {
return false;
};
task._edit = undefined;
return true;
}
function saveTask (task, stayOpen, isSaveAndClose) {
if (task._edit) {
angular.copy(task._edit, task);
}
task._edit = undefined;
if (task.checklist) {
task.checklist = _.filter(task.checklist, function (i) {
return !!i.text
});
}
if (!stayOpen) task._editing = false;
if (isSaveAndClose) {
$("#task-" + task._id).parent().children('.popover').removeClass('in');
}
}
function getUserTasks (getCompletedTodos) {
var url = '/api/v3/tasks/user';
@@ -64,6 +91,21 @@ angular.module('habitrpg')
});
};
function getGroupTasks (groupId) {
return $http({
method: 'GET',
url: '/api/v3/tasks/group/' + groupId,
});
};
function createGroupTasks (groupId, taskDetails) {
return $http({
method: 'POST',
url: '/api/v3/tasks/group/' + groupId,
data: taskDetails,
});
};
function getTask (taskId) {
return $http({
method: 'GET',
@@ -175,6 +217,20 @@ angular.module('habitrpg')
});
};
function assignTask (taskId, userId) {
return $http({
method: 'POST',
url: '/api/v3/tasks/' + taskId + '/assign/' + userId,
});
};
function unAssignTask (taskId, userId) {
return $http({
method: 'POST',
url: '/api/v3/tasks/' + taskId + '/unassign/' + userId,
});
};
function editTask(task, user) {
task._editing = true;
task._tags = !user.preferences.tagsCollapsed;
@@ -211,14 +267,79 @@ angular.module('habitrpg')
return cleansedTask;
}
/*
------------------------
Checklists
------------------------
*/
function focusChecklist(task, index) {
window.setTimeout(function(){
$('#task-'+task._id+' .checklist-form input[type="text"]')[index].focus();
});
}
function addChecklist(task) {
task._edit.checklist = [{completed:false, text:""}];
focusChecklist(task._edit,0);
}
function addChecklistItemToUI(task, $event, $index) {
if (task._edit.checklist[$index].text) {
if ($index === task._edit.checklist.length - 1) {
task._edit.checklist.push({ completed: false, text: '' });
}
focusChecklist(task._edit, $index + 1);
} else {
// TODO Provide UI feedback that this item is still blank
}
}
function removeChecklistItemFromUI(task, $event, $index, force) {
// Remove item if clicked on trash icon
if (force) {
task._edit.checklist.splice($index, 1);
} else if (!task._edit.checklist[$index].text) {
// User deleted all the text and is now wishing to delete the item
// saveTask will prune the empty item
// Move focus if the list is still non-empty
if ($index > 0)
focusChecklist(task._edit, $index-1);
// Don't allow the backspace key to navigate back now that the field is gone
$event.preventDefault();
}
}
function swapChecklistItems(task, oldIndex, newIndex) {
var toSwap = task._edit.checklist.splice(oldIndex, 1)[0];
task._edit.checklist.splice(newIndex, 0, toSwap);
}
function navigateChecklist(task,$index,$event) {
focusChecklist(task, $event.keyCode == '40' ? $index+1 : $index-1);
}
function checklistCompletion(checklist) {
return _.reduce(checklist,function(m,i){return m+(i.completed ? 1 : 0);},0)
}
function collapseChecklist(task) {
task.collapseChecklist = !task.collapseChecklist;
saveTask(task, true);
}
return {
addTasks: addTasks,
toggleBulk: toggleBulk,
getUserTasks: getUserTasks,
removeTask: removeTask,
saveTask: saveTask,
loadedCompletedTodos: false,
createUserTasks: createUserTasks,
getChallengeTasks: getChallengeTasks,
createChallengeTasks: createChallengeTasks,
getGroupTasks: getGroupTasks,
createGroupTasks: createGroupTasks,
getTask: getTask,
updateTask: updateTask,
deleteTask: deleteTask,
@@ -235,6 +356,16 @@ angular.module('habitrpg')
clearCompletedTodos: clearCompletedTodos,
editTask: editTask,
cancelTaskEdit: cancelTaskEdit,
cloneTask: cloneTask
cloneTask: cloneTask,
assignTask: assignTask,
unAssignTask: unAssignTask,
addChecklist: addChecklist,
addChecklistItemToUI: addChecklistItemToUI,
removeChecklistItemFromUI: removeChecklistItemFromUI,
swapChecklistItems: swapChecklistItems,
navigateChecklist: navigateChecklist,
checklistCompletion: checklistCompletion,
collapseChecklist: collapseChecklist,
};
}]);