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