Branch 'roundcubemail-plugins-kolab-3.1' - 5 commits - plugins/libcalendaring plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Tue Oct 8 18:06:48 CEST 2013


 plugins/libcalendaring/libcalendaring.js |    2 
 plugins/tasklist/tasklist.js             |   65 +++++++++++++++++++++++++++----
 2 files changed, 58 insertions(+), 9 deletions(-)

New commits:
commit d32d8a18d92193eb9ad66496c730db952ae3ca6f
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Fri Oct 4 09:41:37 2013 +0200

    Don't reset selection filter when searching (#1372)

diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index c0de6eb..7d91e07 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -1565,7 +1565,7 @@ function rcube_tasklist_ui(settings)
             search_request = id;
             search_query = q;
 
-            list_tasks('all');
+            list_tasks();
         }
         else  // empty search input equals reset
             this.reset_search();


commit 79f605befd3b0268fb0f1039df7c473dbbc00fae
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Fri Oct 4 09:37:32 2013 +0200

    Make URLs in task titles clickable (#2289)

diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js
index 93e605a..73d1c1e 100644
--- a/plugins/libcalendaring/libcalendaring.js
+++ b/plugins/libcalendaring/libcalendaring.js
@@ -281,7 +281,7 @@ function rcube_libcalendaring(settings)
         var mailto_pattern = new RegExp('([^\\s\\n\\(\\);]+@'+utf_domain+')', 'ig');
 
         return html
-            .replace(link_pattern, '<a href="$1$2" target="_blank">$1$2</a>')
+            .replace(link_pattern, '<a href="$1$2" class="extlink" target="_blank">$1$2</a>')
             .replace(mailto_pattern, '<a href="mailto:$1">$1</a>')
             .replace(/(mailto:)([^"]+)"/g, '$1$2" onclick="rcmail.command(\'compose\', \'$2\');return false"')
             .replace(/\n/g, "<br/>");
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index b7f130e..c0de6eb 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -295,7 +295,10 @@ function rcube_tasklist_ui(settings)
                     }
                     e.bubble = false;
                     break;
-                
+
+                case 'extlink':
+                    return true;
+
                 default:
                     if (e.target.nodeName != 'INPUT')
                         task_show_dialog(id);
@@ -640,7 +643,7 @@ function rcube_tasklist_ui(settings)
             '<div class="progressbar"><div class="progressvalue" style="width:' + (rec.complete * 100) + '%"></div></div>' +
             '<input type="checkbox" name="completed[]" value="1" class="complete" ' + (rec.complete == 1.0 ? 'checked="checked" ' : '') + '/>' + 
             '<span class="flagged"></span>' +
-            '<span class="title">' + Q(rec.title) + '</span>' +
+            '<span class="title">' + text2html(Q(rec.title)) + '</span>' +
             '<span class="tags">' + tags_html + '</span>' +
             '<span class="date">' + Q(rec.date || rcmail.gettext('nodate','tasklist')) + '</span>' +
             '<a href="#" class="actions">V</a>'
@@ -906,7 +909,7 @@ function rcube_tasklist_ui(settings)
 
         // fill dialog data
         $('#task-parent-title').html(Q(rec.parent_title || '')+' »').css('display', rec.parent_title ? 'block' : 'none');
-        $('#task-title').html(Q(rec.title || ''));
+        $('#task-title').html(text2html(Q(rec.title || '')));
         $('#task-description').html(text2html(rec.description || '', 300, 6))[(rec.description ? 'show' : 'hide')]();
         $('#task-date')[(rec.date ? 'show' : 'hide')]().children('.task-text').html(Q(rec.date || rcmail.gettext('nodate','tasklist')));
         $('#task-time').html(Q(rec.time || ''));


commit b7d259b2495527267927a033b899009cde199e2a
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Oct 3 20:51:58 2013 +0200

    Fix parent-child links when re-arrangning tasks

diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 92c45a0..b7f130e 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -560,7 +560,7 @@ function rcube_tasklist_ui(settings)
             oldid = rec.tempid || id,
             oldrec = listdata[oldid],
             oldindex = $.inArray(oldid, listindex),
-            oldparent = oldrec && (oldrec._old_parent_id || oldrec.parent_id),
+            oldparent = oldrec ? (oldrec._old_parent_id || oldrec.parent_id) : null,
             list = me.tasklists[rec.list];
 
         if (oldindex >= 0)
@@ -575,14 +575,23 @@ function rcube_tasklist_ui(settings)
             var oldchilds = listdata[oldparent].children,
                 i = $.inArray(oldid, oldchilds);
             if (i >= 0) {
-                oldchilds = oldchilds.slice(0,i).concat(oldchilds.slice(i+1));
+                listdata[oldparent].children = 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)
+        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);
 
+        // restore pointers to my children
+        if (!listdata[id].children) {
+            listdata[id].children = [];
+            for (var pid in listdata) {
+                if (listdata[pid].parent_id == id)
+                    listdata[id].children.push(pid);
+            }
+        }
+
         if (list.active)
             render_task(rec, oldid);
         else


commit 86b300b4e3f6774a4c0934d3fb1eea2c7dbf956e
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Oct 3 19:17:52 2013 +0200

    Fix child-lists when moving tasks to new parents; fix cache usage in filter matching (#2290)

diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 8f47b8e..92c45a0 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;
     }
 


commit 01f5cf7dc556a498215c146f2adef933997fd1ec
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Oct 3 17:13:22 2013 +0200

    Consider task hierarchy when matching current filter and tags selection (#2290):
    - Show children of matching tasks
    - Show ancestors if a child task matches

diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 56dd1c6..8f47b8e 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -467,13 +467,14 @@ function rcube_tasklist_ui(settings)
         // clear display
         var id, rec,
             count = 0,
+            cache = {},
             msgbox = $('#listmessagebox').hide(),
             list = $(rcmail.gui_objects.resultlist).html('');
 
         for (var i=0; i < listindex.length; i++) {
             id = listindex[i];
             rec = listdata[id];
-            if (match_filter(rec)) {
+            if (match_filter(rec, cache)) {
                 render_task(rec);
                 count++;
             }
@@ -1333,9 +1334,14 @@ function rcube_tasklist_ui(settings)
     /**
      * Check if the given task matches the current filtermask and tag selection
      */
-    function match_filter(rec)
+    function match_filter(rec, cache, recursive)
     {
-        var match = !filtermask || (filtermask & rec.mask) > 0;
+        // return cached result
+        if (typeof cache[rec.id] != 'undefined') {
+            return cache[rec.id];
+        }
+
+        var match = !filtermask || (filtermask & rec.mask) > 0
 
         if (match && tagsfilter.length) {
             match = rec.tags && rec.tags.length;
@@ -1345,6 +1351,23 @@ function rcube_tasklist_ui(settings)
             }
         }
 
+        // check if a child task matches the tags
+        if (!match && (recursive||0) < 2 && rec.children && rec.children.length) {
+            for (var j=0; !match && j < rec.children.length; j++) {
+                match = match_filter(listdata[rec.children[j]], cache, 1);
+            }
+        }
+
+        // walk up the task tree and check if a parent task matches
+        var parent_id;
+        if (!match && !recursive && (parent_id = rec.parent_id)) {
+            while (!match && parent_id && listdata[parent_id]) {
+                match = match_filter(listdata[parent_id], cache, 2);
+                parent_id = listdata[parent_id].parent_id;
+            }
+        }
+
+        cache[rec.id] = match;
         return match;
     }
 




More information about the commits mailing list