aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2013-06-20 21:04:44 +0200
committerGravatar Tom Willemse2013-06-20 21:04:44 +0200
commite529f38b59cdf6fa7155de754ec9857f2b5e2dc6 (patch)
tree27bb5c61e6dc94c737db1f17bcae08dbd8910187
parent53dfb99f6b4fee7c93c4c4747159a17c62e530db (diff)
downloadscrumelo-e529f38b59cdf6fa7155de754ec9857f2b5e2dc6.tar.gz
scrumelo-e529f38b59cdf6fa7155de754ec9857f2b5e2dc6.zip
Add changing of state
By clicking on a story's state you change that story's state to the next possible state.
-rw-r--r--js/main.js25
-rw-r--r--scrumelo.el14
2 files changed, 34 insertions, 5 deletions
diff --git a/js/main.js b/js/main.js
index a600ccf..4b84401 100644
--- a/js/main.js
+++ b/js/main.js
@@ -25,7 +25,7 @@ var StoryRow = React.createClass({
render: function() {
// A little ugly to get a space, but I don't know of any other
// way.
- var state = " " + this.props.story.state;
+ var state = " " + this.state.state;
var sdata = null;
if (this.state.content)
@@ -34,11 +34,13 @@ var StoryRow = React.createClass({
return (
<tr>
<td>
- <StateIcon state={this.props.story.state} />
- {state}
+ <span onClick={this.changeState}>
+ <StateIcon state={this.state.state} />
+ {state}
+ </span>
</td>
<td>
- <a id={this.props.story.id} onClick={this.handleClick}>
+ <a onClick={this.handleClick}>
As a {this.props.story.role}, I
{this.props.story.necessity} to
{this.props.story.title}
@@ -50,7 +52,8 @@ var StoryRow = React.createClass({
);
},
getInitialState: function() {
- return {content: null};
+ return {state: this.props.story.state,
+ content: null};
},
handleClick: React.autoBind(function(event) {
if (!!this.state.content) {
@@ -63,6 +66,18 @@ var StoryRow = React.createClass({
function (data, textStatus, jqXHR) {
self.setState({content: data});
}, 'json');
+ }),
+ changeState: React.autoBind(function(event) {
+ $.ajax({
+ url: "/stories/state/",
+ type: "POST",
+ data: {'id': this.props.story.id},
+ dataType: 'json',
+ mimeType: 'textPlain',
+ success: function(data) {
+ this.setState({state: eval(data).state});
+ }.bind(this)
+ });
})
});
diff --git a/scrumelo.el b/scrumelo.el
index 54c15bd..a3ba2d3 100644
--- a/scrumelo.el
+++ b/scrumelo.el
@@ -115,6 +115,19 @@
(save-buffer)))
(elnode-send-redirect httpcon "/"))))
+(defun scrumelo-change-state (httpcon)
+ "Parse data from HTTPCON and change the given task's state."
+ (elnode-method httpcon
+ (POST
+ (with-scrumelo-http-params (id) httpcon
+ (message "HI: %s" id)
+ (with-scrumelo-buffer
+ (let ((entry (cdr (org-id-find id))))
+ (goto-char entry)
+ (org-todo)
+ (scrumelo--send-json
+ httpcon (list (cons :state (org-entry-get (point) "TODO"))))))))))
+
(defun scrumelo--send-json (httpcon obj)
"Respond to HTTPCON with OBJ converted to a json structure."
(elnode-http-start httpcon 200 '("Content-Type" . "text/json"))
@@ -161,6 +174,7 @@
(concat scrumelo--base-dir "js/main.js")))
("^/stories/$" . scrumelo-main-json)
("^/stories/new/$" . scrumelo-new-story)
+ ("^/stories/state/$" . scrumelo-change-state)
("^/stories/\\([a-z0-9:-]+\\)/$" . scrumelo-story-json))))
(elnode-start 'scrumelo-handler :port 8028 :host "0.0.0.0")