diff options
author | Tom Willemse | 2013-07-24 20:42:13 +0200 |
---|---|---|
committer | Tom Willemse | 2013-07-24 20:43:29 +0200 |
commit | 4b9563abd45dafced0521deedb53ea2f872f5639 (patch) | |
tree | ca55a17d14b9c1f0583d7573392db0d556b90164 | |
parent | c67240467588bed6dd182416cff1618d8e169c1b (diff) | |
download | scrumli-4b9563abd45dafced0521deedb53ea2f872f5639.tar.gz scrumli-4b9563abd45dafced0521deedb53ea2f872f5639.zip |
Show assigned gravatar in story and task lists
-rw-r--r-- | pg-datastore.lisp | 9 | ||||
-rw-r--r-- | static/js/main.js | 27 |
2 files changed, 33 insertions, 3 deletions
diff --git a/pg-datastore.lisp b/pg-datastore.lisp index 317eca5..39e2646 100644 --- a/pg-datastore.lisp +++ b/pg-datastore.lisp @@ -57,16 +57,19 @@ (defmethod datastore-get-all-stories ((datastore pg-datastore)) (with-connection (connection-spec datastore) - (query (:order-by (:select :* :from 'story) 'priority) :alists))) + (query (:order-by (:select :* (:as (:md5 'assignee) 'md5) + :from 'story) 'priority) :alists))) (defmethod datastore-get-story ((datastore pg-datastore) id) (with-connection (connection-spec datastore) - (append (query (:select :* :from 'story :where (:= 'id id)) :alist) + (append (query (:select :* (:as (:md5 'assignee) 'md5) :from 'story + :where (:= 'id id)) :alist) `((tasks . ,(datastore-get-tasks-for-story datastore id)))))) (defmethod datastore-get-tasks-for-story ((datastore pg-datastore) id) (with-connection (connection-spec datastore) - (query (:order-by (:select :* :from 'task :where (:= 'story-id id)) + (query (:order-by (:select :* (:as (:md5 'assignee) 'md5) :from 'task + :where (:= 'story-id id)) 'priority) :alists))) diff --git a/static/js/main.js b/static/js/main.js index 444f06a..68ea997 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -24,6 +24,25 @@ var StateIcon = React.createClass({ } }); +var AssigneeIcon = React.createClass({ + render: function() { + var icon; + + if (this.props.assignee) + icon = <img src={"https://secure.gravatar.com/avatar/" + + this.props.md5 + '?s=24'} + title={this.props.assignee} + alt={this.props.assignee} />; + else + icon = (<span title="Unknown" class="icon-stack"> + <i class="icon-sign-blank icon-stack-base"></i> + <i class="icon-question icon-light"></i> + </span>); + + return icon; + } +}); + var StoryTaskRow = React.createClass({ changeState: React.autoBind(function(event) { $.post("/tasks/state", {'id': this.props.task.id}) @@ -58,6 +77,10 @@ var StoryTaskRow = React.createClass({ <i class="icon-arrow-down clickable" onClick={this.moveDown}></i> </td> + <td class="span1"> + <AssigneeIcon assignee={this.props.task.assignee} + md5={this.props.task.md5} /> + </td> <td class="span2"> <span onClick={this.changeState} class="clickable"> <StateIcon state={this.state.state} /> {" "} @@ -182,6 +205,10 @@ var StoryRow = React.createClass({ <i class="icon-arrow-down clickable" onClick={this.moveDown}></i> </td> + <td class="span1"> + <AssigneeIcon assignee={this.props.story.assignee} + md5={this.props.story.md5} /> + </td> <td class="span2"> <span onClick={this.changeState} class="clickable"> <StateIcon state={this.state.state} /> {" "} |