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