From e529f38b59cdf6fa7155de754ec9857f2b5e2dc6 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Thu, 20 Jun 2013 21:04:44 +0200 Subject: Add changing of state By clicking on a story's state you change that story's state to the next possible state. --- js/main.js | 25 ++++++++++++++++++++----- scrumelo.el | 14 ++++++++++++++ 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 ( - - {state} + + + {state} + - + 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") -- cgit v1.2.3-54-g00ecf