diff options
author | Tom Willemse | 2013-06-20 22:51:56 +0200 |
---|---|---|
committer | Tom Willemse | 2013-06-20 22:51:56 +0200 |
commit | 5885f98eabadcac17130183e1df7fe76f2025473 (patch) | |
tree | a7754187d6cf35476ef890e571ca2ff9481c0b57 | |
parent | e529f38b59cdf6fa7155de754ec9857f2b5e2dc6 (diff) | |
download | scrumelo-5885f98eabadcac17130183e1df7fe76f2025473.tar.gz scrumelo-5885f98eabadcac17130183e1df7fe76f2025473.zip |
Add changing order of stories
-rw-r--r-- | js/main.js | 35 | ||||
-rw-r--r-- | scrumelo.el | 23 |
2 files changed, 54 insertions, 4 deletions
@@ -34,6 +34,10 @@ var StoryRow = React.createClass({ return ( <tr> <td> + <i class="icon-arrow-up" onClick={this.moveUp}></i> + <i class="icon-arrow-down" onClick={this.moveDown}></i> + </td> + <td> <span onClick={this.changeState}> <StateIcon state={this.state.state} /> {state} @@ -78,6 +82,30 @@ var StoryRow = React.createClass({ this.setState({state: eval(data).state}); }.bind(this) }); + }), + moveUp: React.autoBind(function(event) { + $.ajax({ + url: "/stories/up/", + type: "POST", + data: {'id': this.props.story.id}, + dataType: 'json', + mimeType: 'textPlain', + success: function (data) { + this.props.onMoved(1); + }.bind(this) + }); + }), + moveDown: React.autoBind(function(event) { + $.ajax({ + url: "/stories/down/", + type: "POST", + data: {'id': this.props.story.id}, + dataType: 'json', + mimeType: 'textPlain', + success: function (data) { + this.props.onMoved(-1); + }.bind(this) + }); }) }); @@ -101,10 +129,13 @@ var StoryTable = React.createClass({ this.props.pollInterval ); }, + handleMoved: React.autoBind(function(direction) { + this.loadStoriesFromServer(); + }), render: function() { var storyNodes = this.state.data.map(function (story) { - return <StoryRow story={story} />; - }); + return <StoryRow story={story} onMoved={this.handleMoved} />; + }.bind(this)); return ( <table class="table table-striped"> {storyNodes} diff --git a/scrumelo.el b/scrumelo.el index a3ba2d3..9cb83b0 100644 --- a/scrumelo.el +++ b/scrumelo.el @@ -120,13 +120,30 @@ (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) + (save-buffer) (scrumelo--send-json - httpcon (list (cons :state (org-entry-get (point) "TODO")))))))))) + httpcon + (list (cons :state (org-entry-get (point) "TODO")))))))))) + +(defun scrumelo-move-story (dir) + "Create a function to move a story in direction DIR." + (let ((func (intern (concat "org-move-subtree-" dir)))) + (lambda (httpcon) + (elnode-method httpcon + (POST + (with-scrumelo-http-params (id) httpcon + (with-scrumelo-buffer + (let ((entry (cdr (org-id-find id)))) + (goto-char entry) + (funcall func) + (save-buffer) + (scrumelo--send-json + httpcon + (list (cons :status "OK"))))))))))) (defun scrumelo--send-json (httpcon obj) "Respond to HTTPCON with OBJ converted to a json structure." @@ -175,6 +192,8 @@ ("^/stories/$" . scrumelo-main-json) ("^/stories/new/$" . scrumelo-new-story) ("^/stories/state/$" . scrumelo-change-state) + ("^/stories/up/$" . ,(scrumelo-move-story "up")) + ("^/stories/down/$" . ,(scrumelo-move-story "down")) ("^/stories/\\([a-z0-9:-]+\\)/$" . scrumelo-story-json)))) (elnode-start 'scrumelo-handler :port 8028 :host "0.0.0.0") |