Ability to reorder and edit tasks

pull/1/head
yflory 7 years ago
parent 70e014cdfc
commit 54a91f1153

@ -45,7 +45,8 @@
"bootstrap-tokenfield": "^0.12.1", "bootstrap-tokenfield": "^0.12.1",
"localforage": "^1.5.2", "localforage": "^1.5.2",
"html2canvas": "^0.4.1", "html2canvas": "^0.4.1",
"croppie": "^2.5.0" "croppie": "^2.5.0",
"sortablejs": "#^1.6.0"
}, },
"resolutions": { "resolutions": {
"bootstrap": "v4.0.0-alpha.6" "bootstrap": "v4.0.0-alpha.6"

@ -88,6 +88,13 @@
color: #777; color: #777;
} }
.cp-app-todo-task-input {
margin: @spacing;
flex: 1;
min-width: 0;
font-weight: bold;
display: none;
}
.cp-app-todo-task-text { .cp-app-todo-task-text {
margin: @spacing; margin: @spacing;
flex: 1; flex: 1;

@ -9,6 +9,7 @@ define([
'/common/common-hash.js', '/common/common-hash.js',
'/todo/todo.js', '/todo/todo.js',
'/customize/messages.js', '/customize/messages.js',
'/bower_components/sortablejs/Sortable.min.js',
'css!/bower_components/bootstrap/dist/css/bootstrap.min.css', 'css!/bower_components/bootstrap/dist/css/bootstrap.min.css',
'less!/bower_components/components-font-awesome/css/font-awesome.min.css', 'less!/bower_components/components-font-awesome/css/font-awesome.min.css',
@ -23,7 +24,8 @@ define([
UI, UI,
Hash, Hash,
Todo, Todo,
Messages Messages,
Sortable
) )
{ {
var APP = window.APP = {}; var APP = window.APP = {};
@ -47,6 +49,17 @@ define([
var onReady = function () { var onReady = function () {
var todo = Todo.init(APP.lm.proxy); var todo = Todo.init(APP.lm.proxy);
Sortable.create($list[0], {
store: {
get: function (sortable) {
return todo.getOrder();
},
set: function (sortable) {
todo.reorder(sortable.toArray());
}
}
});
var deleteTask = function(id) { var deleteTask = function(id) {
todo.remove(id); todo.remove(id);
@ -106,6 +119,7 @@ define([
$taskDiv.appendTo($list); $taskDiv.appendTo($list);
} }
$taskDiv.data('id', el); $taskDiv.data('id', el);
$taskDiv.attr('data-id', el);
makeCheckbox(el, function (/*state*/) { makeCheckbox(el, function (/*state*/) {
APP.display(); APP.display();
@ -121,9 +135,25 @@ define([
$taskDiv.addClass('cp-app-todo-task-complete'); $taskDiv.addClass('cp-app-todo-task-complete');
} }
$('<span>', { 'class': 'cp-app-todo-task-text' }) var $input = $('<input>', {
type: 'text',
'class': 'cp-app-todo-task-input'
}).val(entry.task).keydown(function (e) {
if (e.which === 13) {
todo.val(el, 'task', $input.val().trim());
$input.hide();
$span.text($input.val().trim());
$span.show();
}
}).appendTo($taskDiv);
var $span = $('<span>', { 'class': 'cp-app-todo-task-text' })
.text(entry.task) .text(entry.task)
.appendTo($taskDiv); .appendTo($taskDiv)
.click(function () {
$input.show();
$span.hide();
});
/*$('<span>', { 'class': 'cp-app-todo-task-date' }) /*$('<span>', { 'class': 'cp-app-todo-task-date' })
.text(new Date(entry.ctime).toLocaleString()) .text(new Date(entry.ctime).toLocaleString())
.appendTo($taskDiv);*/ .appendTo($taskDiv);*/

@ -77,6 +77,17 @@ define([
if (proxy.data[id]) { delete proxy.data[id]; } if (proxy.data[id]) { delete proxy.data[id]; }
}; };
/* change the order in the proxy (with a check to make sure that nothing is missing */
var reorder = function (proxy, order) {
var existingOrder = proxy.order.slice().sort();
var newOrder = order.slice().sort();
if (JSON.stringify(existingOrder) === JSON.stringify(newOrder)) {
proxy.order = order.slice();
} else {
console.error("Can't reorder the tasks. Some tasks are missing or added");
}
};
Todo.init = function (proxy) { Todo.init = function (proxy) {
var api = {}; var api = {};
initialize(proxy); initialize(proxy);
@ -90,6 +101,12 @@ define([
api.remove = function (id) { api.remove = function (id) {
return remove(proxy, id); return remove(proxy, id);
}; };
api.getOrder = function () {
return proxy.order.slice();
};
api.reorder = function (order) {
return reorder(proxy, order);
};
return api; return api;
}; };

Loading…
Cancel
Save