diff --git a/js/main.js b/js/main.js index 4b84401..27643f4 100644 --- a/js/main.js +++ b/js/main.js @@ -33,6 +33,10 @@ var StoryRow = React.createClass({ return ( + + + + @@ -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 ; - }); + return ; + }.bind(this)); return ( {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")