mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
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:
committed by
Matteo Pagliazzi
parent
6a82206f81
commit
285041cdee
@@ -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,
|
||||
};
|
||||
}]);
|
||||
|
||||
Reference in New Issue
Block a user