From d259b5d88f042e99419e53b272ac1acf29dd0b6f Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 3 Oct 2013 19:17:52 +0200 Subject: [PATCH] Fix child-lists when moving tasks to new parents; fix cache usage in filter matching (#2290) --- plugins/tasklist/tasklist.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js index 9ad67d07..01c54b82 100644 --- a/plugins/tasklist/tasklist.js +++ b/plugins/tasklist/tasklist.js @@ -558,7 +558,9 @@ function rcube_tasklist_ui(settings) var id = rec.id, oldid = rec.tempid || id, + oldrec = listdata[oldid], oldindex = $.inArray(oldid, listindex), + oldparent = oldrec && (oldrec._old_parent_id || oldrec.parent_id), list = me.tasklists[rec.list]; if (oldindex >= 0) @@ -568,6 +570,15 @@ function rcube_tasklist_ui(settings) listdata[id] = rec; + // remove child-pointer from old parent + if (oldparent && listdata[oldparent] && oldparent != rec.parent_id) { + var oldchilds = listdata[oldparent].children, + i = $.inArray(oldid, oldchilds); + if (i >= 0) { + oldchilds = oldchilds.slice(0,i).concat(oldchilds.slice(i+1)); + } + } + // register a forward-pointer to child tasks if (rec.parent_id && listdata[rec.parent_id] && listdata[rec.parent_id].children && $.inArray(id, listdata[rec.parent_id].children) >= 0) listdata[rec.parent_id].children.push(id); @@ -853,6 +864,7 @@ function rcube_tasklist_ui(settings) if (rec && parent.length) { // submit changes to server + rec._old_parent_id = rec.parent_id; rec.parent_id = drop_id || 0; save_task(rec, 'edit'); @@ -1337,7 +1349,7 @@ function rcube_tasklist_ui(settings) function match_filter(rec, cache, recursive) { // return cached result - if (typeof cache[rec.id] != 'undefined') { + if (typeof cache[rec.id] != 'undefined' && recursive != 2) { return cache[rec.id]; } @@ -1367,7 +1379,9 @@ function rcube_tasklist_ui(settings) } } - cache[rec.id] = match; + if (recursive != 1) { + cache[rec.id] = match; + } return match; }