plugins/tasklist
Thomas Brüderli
bruederli at kolabsys.com
Wed Sep 19 18:45:57 CEST 2012
plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php | 1
plugins/tasklist/skins/larry/sprites.png |binary
plugins/tasklist/skins/larry/tasklist.css | 49 ++++++++++++++-
plugins/tasklist/tasklist.js | 35 +++++++++-
plugins/tasklist/tasklist_ui.php | 2
5 files changed, 81 insertions(+), 6 deletions(-)
New commits:
commit b68a35755b66bdf6dec4654fb06a33452dc89ebd
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Wed Sep 19 18:46:12 2012 +0200
Display readonly/shared icons for task lists; added toggles to collapse/expand subtasks (although state is not yet saved)
diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 010be7b..a3a20ab 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -107,6 +107,7 @@ class tasklist_kolab_driver extends tasklist_driver
'editable' => !$readonly,
'active' => $folder->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION),
'parentfolder' => $path_imap,
+ 'class_name' => $folder->get_namespace(),
);
$this->lists[$tasklist['id']] = $tasklist;
$this->folders[$tasklist['id']] = $folder;
diff --git a/plugins/tasklist/skins/larry/sprites.png b/plugins/tasklist/skins/larry/sprites.png
index 9430fe4..8d82f77 100644
Binary files a/plugins/tasklist/skins/larry/sprites.png and b/plugins/tasklist/skins/larry/sprites.png differ
diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css
index abeceb4..7f38a1c 100644
--- a/plugins/tasklist/skins/larry/tasklist.css
+++ b/plugins/tasklist/skins/larry/tasklist.css
@@ -199,15 +199,46 @@ body.attachmentwin #topnav .topright {
}
#tasklists li span.listname {
+ display: block;
cursor: default;
padding-bottom: 2px;
+ padding-right: 30px;
+ margin-right: 20px;
color: #004458;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ background: url(sprites.png) right 20px no-repeat;
}
#tasklists li span.handle {
display: none;
}
+#tasklists li.selected span.listname {
+ font-weight: bold;
+}
+
+#tasklists li.readonly span.listname {
+ background-position: right -142px;
+}
+
+#tasklists li.other span.listname {
+ background-position: right -160px;
+}
+
+#tasklists li.other.readonly span.listname {
+ background-position: right -178px;
+}
+
+#tasklists li.shared span.listname {
+ background-position: right -196px;
+}
+
+#tasklists li.shared.readonly span.listname {
+ background-position: right -214px;
+}
+
#tasklists li input {
position: absolute;
top: 5px;
@@ -317,8 +348,9 @@ body.attachmentwin #topnav .topright {
}
.taskitem {
+ position: relative;
display: block;
- margin-bottom: 5px;
+ margin-bottom: 3px;
}
.taskitem.dragging {
@@ -326,13 +358,26 @@ body.attachmentwin #topnav .topright {
}
.taskitem .childtasks {
+ position: relative;
padding: 0;
- margin: 0.5em 0 0 2em;
+ margin: 3px 0 0 20px;
list-style: none;
}
+.taskitem .childtoggle {
+ display: none;
+ position: absolute;
+ top: 4px;
+ left: -5px;
+ padding: 2px;
+ font-size: 10px;
+ color: #727272;
+ cursor: pointer;
+}
+
.taskhead {
position: relative;
+ margin-left: 14px;
padding: 4px 5px 3px 5px;
border: 1px solid #fff;
border-radius: 5px;
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 10302c3..3b92905 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -205,8 +205,13 @@ function rcube_tasklist_ui(settings)
// click-handler on task list items (delegate)
$(rcmail.gui_objects.resultlist).click(function(e){
var item = $(e.target);
+ var className = e.target.className;
- if (!item.hasClass('taskhead'))
+ if (item.hasClass('childtoggle')) {
+ item = item.parent().find('.taskhead');
+ className = 'childtoggle';
+ }
+ else if (!item.hasClass('taskhead'))
item = item.closest('div.taskhead');
// ignore
@@ -217,7 +222,13 @@ function rcube_tasklist_ui(settings)
li = item.parent(),
rec = listdata[id];
- switch (e.target.className) {
+ switch (className) {
+ case 'childtoggle':
+ rec.collapsed = !rec.collapsed;
+ li.children('.childtasks:first').toggle();
+ $(e.target).toggleClass('collapsed').html(rec.collapsed ? '▶' : '▼');
+ break;
+
case 'complete':
rec.complete = e.target.checked ? 1 : 0;
li.toggleClass('complete');
@@ -450,11 +461,27 @@ function rcube_tasklist_ui(settings)
}
}
+ fix_tree_toggles();
+
if (!count)
msgbox.html(rcmail.gettext('notasksfound','tasklist')).show();
}
/**
+ * Show/hide child toggle buttons on all
+ */
+ function fix_tree_toggles()
+ {
+ $('.taskitem', rcmail.gui_objects.resultlist).each(function(i,elem){
+ var li = $(elem),
+ rec = listdata[li.attr('rel')],
+ childs = rec && rec.children && rec.children.length ? $('.childtasks li', li) : [];
+
+ $('.childtoggle', li)[(childs.length ? 'show' : 'hide')]();
+ })
+ }
+
+ /**
*
*/
function append_tags(taglist)
@@ -528,6 +555,7 @@ function rcube_tasklist_ui(settings)
$('li[rel="'+id+'"]', rcmail.gui_objects.resultlist).remove();
append_tags(rec.tags || []);
+ fix_tree_toggles();
}
/**
@@ -601,8 +629,9 @@ function rcube_tasklist_ui(settings)
li = $('<li>')
.attr('rel', rec.id)
.addClass('taskitem')
+ .append((rec.collapsed ? '<span class="childtoggle collapsed">▶' : '<span class="childtoggle expanded">▼') + '</span>')
.append(div)
- .append('<ul class="childtasks"></ul>');
+ .append('<ul class="childtasks" style="' + (rec.collapsed ? 'display:none' : '') + '"></ul>');
if (!parent || !parent.length)
li.appendTo(rcmail.gui_objects.resultlist);
diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php
index f0b0cbd..cd91c76 100644
--- a/plugins/tasklist/tasklist_ui.php
+++ b/plugins/tasklist/tasklist_ui.php
@@ -105,7 +105,7 @@ class tasklist_ui
$html_id = html_identifier($id);
$class = 'tasks-' . asciiwords($id, true);
- if ($prop['readonly'])
+ if (!$prop['editable'])
$class .= ' readonly';
if ($prop['class_name'])
$class .= ' '.$prop['class_name'];
More information about the commits
mailing list