plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Wed Jul 11 20:35:51 CEST 2012


 plugins/tasklist/skins/larry/tasklist.css            |   15 +++++++++-
 plugins/tasklist/skins/larry/templates/mainview.html |    5 ++-
 plugins/tasklist/tasklist.js                         |   28 ++++++++++++++++++-
 plugins/tasklist/tasklist.php                        |    6 ++--
 plugins/tasklist/tasklist_ui.php                     |    9 ++++++
 5 files changed, 57 insertions(+), 6 deletions(-)

New commits:
commit a0999aae17eb3da54a4963786850e8f32555aea1
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Jul 11 20:34:29 2012 +0200

    Build a tag cloud from task categories

diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css
index 8c642fa..699a0e8 100644
--- a/plugins/tasklist/skins/larry/tasklist.css
+++ b/plugins/tasklist/skins/larry/tasklist.css
@@ -34,7 +34,7 @@
 	width: 15px;
 }
 
-#selectorbox {
+#tagsbox {
 	position: absolute;
 	top: 42px;
 	left: 0;
@@ -42,6 +42,19 @@
 	height: 242px;
 }
 
+#tagslist {
+	padding: 0;
+	margin: 6px 8px;
+	list-style: none;
+}
+
+#tagslist li {
+	display: inline-block;
+	color: #004458;
+	padding: 0.2em 1em 0.2em 0;
+	cursor: pointer;
+}
+
 #tasklistsbox {
 	position: absolute;
 	top: 300px;
diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html
index 927ee4b..f7b896e 100644
--- a/plugins/tasklist/skins/larry/templates/mainview.html
+++ b/plugins/tasklist/skins/larry/templates/mainview.html
@@ -14,9 +14,10 @@
 			<roundcube:container name="toolbar" id="taskstoolbar" />
 		</div>
 
-		<div id="selectorbox" class="uibox listbox">
+		<div id="tagsbox" class="uibox listbox">
+			<h2 class="boxtitle"><roundcube:label name="tasklist.tags" id="taglist" /></h2>
 			<div class="scroller">
-				<h2 class="boxtitle"><roundcube:label name="tasklist.tags" /></h2>
+				<roundcube:object name="plugin.tagslist" id="tagslist" />
 			</div>
 		</div>
 
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 2ef58b2..20255ee 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -54,6 +54,7 @@ function rcube_tasklist(settings)
     var ui_loading;
     var taskcounts = {};
     var listdata = {};
+    var tags = [];
     var draghelper;
     var completeness_slider;
     var search_request;
@@ -140,7 +141,18 @@ function rcube_tasklist(settings)
             this.reset();
             return false;
         });
-        
+
+        // click-handler on tags list
+        $(rcmail.gui_objects.tagslist).click(function(e){
+            if (e.target.nodeName != 'LI')
+                return;
+
+            var item = $(e.target),
+                tag = item.data('value');
+
+            alert(tag);
+        });
+
         // click-handler on task list items (delegate)
         $(rcmail.gui_objects.resultlist).click(function(e){
             var item = $(e.target);
@@ -316,6 +328,20 @@ function rcube_tasklist(settings)
             listdata[response.data[i].id] = response.data[i];
         }
 
+        // find new tags
+        var newtags = [];
+        for (var i=0; i < response.tags.length; i++) {
+            if (tags.indexOf(response.tags[i]) < 0)
+                newtags.push(response.tags[i]);
+        }
+        tags = tags.concat(newtags);
+
+        // append new tags to tag cloud
+        var taglist = $(rcmail.gui_objects.tagslist);
+        $.each(newtags, function(i, tag){
+            $('<li>').attr('rel', tag).data('value', tag).html(Q(tag)).appendTo(taglist);
+        });
+
         render_tasklist();
         rcmail.set_busy(false, 'loading', ui_loading);
     }
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index fd43b44..0ed4765 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -372,12 +372,14 @@ class tasklist extends rcube_plugin
 
         }
 
-        $data = $this->task_tree = $this->task_titles = array();
+        $data = $tags = $this->task_tree = $this->task_titles = array();
         foreach ($this->driver->list_tasks($filter, $lists) as $rec) {
             if ($rec['parent_id']) {
                 $this->task_tree[$rec['id']] = $rec['parent_id'];
             }
             $this->encode_task($rec);
+            if (!empty($rec['categories']))
+                $tags = array_merge($tags, (array)$rec['categories']);
 
             // apply filter; don't trust the driver on this :-)
             if ((!$f && $rec['complete'] < 1.0) || ($rec['mask'] & $f))
@@ -387,7 +389,7 @@ class tasklist extends rcube_plugin
         // sort tasks according to their hierarchy level and due date
         usort($data, array($this, 'task_sort_cmp'));
 
-        $this->rc->output->command('plugin.data_ready', array('filter' => $f, 'lists' => $lists, 'data' => $data));
+        $this->rc->output->command('plugin.data_ready', array('filter' => $f, 'lists' => $lists, 'data' => $data, 'tags' => array_unique($tags)));
     }
 
     /**
diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php
index b623295..c3ec70b 100644
--- a/plugins/tasklist/tasklist_ui.php
+++ b/plugins/tasklist/tasklist_ui.php
@@ -68,6 +68,7 @@ class tasklist_ui
         $this->plugin->register_handler('plugin.quickaddform', array($this, 'quickadd_form'));
         $this->plugin->register_handler('plugin.tasklist_editform', array($this, 'tasklist_editform'));
         $this->plugin->register_handler('plugin.tasks', array($this, 'tasks_resultview'));
+        $this->plugin->register_handler('plugin.tagslist', array($this, 'tagslist'));
 
         $this->plugin->include_script('tasklist.js');
 
@@ -206,5 +207,13 @@ class tasklist_ui
         return html::tag('ul', $attrib, '');
     }
 
+    function tagslist($attrib)
+    {
+        $attrib += array('id' => 'rcmtagslist');
+        unset($attrib['name']);
+
+        $this->rc->output->add_gui_object('tagslist', $attrib['id']);
+        return html::tag('ul', $attrib, '');
+    }
 
 }





More information about the commits mailing list