diff --git a/src/content/mytinytodo.js b/src/content/mytinytodo.js index 417ed06..38a7cdc 100644 --- a/src/content/mytinytodo.js +++ b/src/content/mytinytodo.js @@ -1022,7 +1022,7 @@ function publishCurList() function loadTasks(opts) { if(!curList) return false; - setSort(curList.sort, 1); + updateSortUI(curList.sort); opts = opts || {}; if(opts.clearTasklist) { $('#tasklist').html(''); @@ -1035,7 +1035,8 @@ function loadTasks(opts) sort: curList.sort, search: filter.search, tag: _mtt.filter.getTags(true), - setCompl: opts.setCompl + setCompl: opts.setCompl, + saveSort: opts.saveSort }, function(json){ taskList.length = 0; taskOrder.length = 0; @@ -1327,9 +1328,19 @@ function setTaskPrio(id, prio) }; function setSort(v, init) +{ + if (v < 0 || (v > 4 && v < 101) || v > 104) { + return; + } + curList.sort = v; + loadTasks({saveSort:1}); +}; + + +function updateSortUI(v) { $('#listmenucontainer .sort-item').removeClass('mtt-item-checked').children('.mtt-sort-direction').text(''); - if(v == 0) $('#sortByHand').addClass('mtt-item-checked'); + if (v == 0) $('#sortByHand').addClass('mtt-item-checked'); else if(v==1 || v==101) $('#sortByPrio').addClass('mtt-item-checked').children('.mtt-sort-direction').text(v==1 ? '↑' : '↓'); else if(v==2 || v==102) $('#sortByDueDate').addClass('mtt-item-checked').children('.mtt-sort-direction').text(v==2 ? '↑' : '↓'); else if(v==3 || v==103) $('#sortByDateCreated').addClass('mtt-item-checked').children('.mtt-sort-direction').text(v==3 ? '↓' : '↑'); @@ -1337,14 +1348,8 @@ function setSort(v, init) else return; curList.sort = v; - if(v == 0 && !flag.readOnly) $("#tasklist").sortable('enable'); + if (v == 0 && !flag.readOnly) $("#tasklist").sortable('enable'); else $("#tasklist").sortable('disable'); - - if(!init) - { - changeTaskOrder(); - if(!flag.readOnly) _mtt.db.request('setSort', {list:curList.id, sort:curList.sort}); - } }; diff --git a/src/content/mytinytodo_api.js b/src/content/mytinytodo_api.js index ee92cd9..1a7a888 100644 --- a/src/content/mytinytodo_api.js +++ b/src/content/mytinytodo_api.js @@ -37,6 +37,7 @@ MytinytodoAjaxApi.prototype = if (params.search && params.search != '') q += '&s=' + encodeURIComponent(params.search); if (params.tag && params.tag != '') q += '&t=' + encodeURIComponent(params.tag); if (params.setCompl && params.setCompl != 0) q += '&setCompl=1'; + if (params.saveSort && params.saveSort != 0) q += '&saveSort=1'; $.getJSON(mtt.apiUrl + 'tasks?list='+params.list+'&compl='+params.compl+'&sort='+params.sort+q, callback); }, diff --git a/src/includes/api/ListsController.php b/src/includes/api/ListsController.php index 84900e0..6a17ab7 100644 --- a/src/includes/api/ListsController.php +++ b/src/includes/api/ListsController.php @@ -206,8 +206,14 @@ class ListsController extends ApiController { private function sortList(int $listId) { - $db = DBConnection::instance(); $sort = (int)($this->req->jsonBody['sort'] ?? 0); + self::setListSortingById($listId, $sort); + return ['total'=>1]; + } + + static function setListSortingById(int $listId, int $sort) + { + $db = DBConnection::instance(); if ($sort < 0 || $sort > 104) $sort = 0; elseif ($sort < 101 && $sort > 4) $sort = 0; if ($listId == -1) { @@ -218,7 +224,6 @@ class ListsController extends ApiController { else { $db->ex("UPDATE {$db->prefix}lists SET sorting=$sort,d_edited=? WHERE id=$listId", array(time())); } - return ['total'=>1]; } private function publishList(int $listId) diff --git a/src/includes/api/TasksController.php b/src/includes/api/TasksController.php index 1494a3f..1cb9cad 100644 --- a/src/includes/api/TasksController.php +++ b/src/includes/api/TasksController.php @@ -102,6 +102,9 @@ class TasksController extends ApiController { $bitwise = (_get('compl') == 0) ? 'taskview & ~1' : 'taskview | 1'; $db->dq("UPDATE {$db->prefix}lists SET taskview=$bitwise WHERE id=$listId"); } + if (_get('saveSort') == 1 && haveWriteAccess($listId)) { + ListsController::setListSortingById($listId, $sort); + } return $t; }