summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2013-05-17 01:29:26 +0200
committerGravatar Tom Willemse2013-05-17 01:29:26 +0200
commit81d569edc2af8c7b2f6750b968b093be90f3effa (patch)
treea34e9abe7eb2e3e551ab72023ce6b0d7123f76d3
parent506c9713e9c836609ba9c41a86355e296268f81e (diff)
downloadeliss-81d569edc2af8c7b2f6750b968b093be90f3effa.tar.gz
eliss-81d569edc2af8c7b2f6750b968b093be90f3effa.zip
Add comments to issues
-rw-r--r--eliss.el79
1 files changed, 68 insertions, 11 deletions
diff --git a/eliss.el b/eliss.el
index 12e517c..06edd12 100644
--- a/eliss.el
+++ b/eliss.el
@@ -103,14 +103,16 @@
(issue (match-string 2 (elnode-http-mapping httpcon)))
(filename (concat eliss-data-directory "/" project ".org"))
(buffer (find-file-noselect filename))
- (entry (cdr (org-id-find issue))))
+ (entry (cdr (org-id-find issue)))
+ title)
(elnode-http-start httpcon 200 '("Content-Type" . "text/html"))
(with-current-buffer buffer
(goto-char entry)
+ (set 'title (nth 4 (org-heading-components)))
(elnode-http-return
httpcon (eliss-page
project
- `(h1 ,(nth 4 (org-heading-components)))
+ `(h1 ,title)
`(div (@ (class "row"))
(div (@ (class "span6"))
(dl (@ (class "dl-horizontal"))
@@ -125,14 +127,41 @@
`(pre ,(buffer-substring-no-properties
(org-end-of-meta-data-and-drawers)
(org-entry-end-position)))
- `(div ,@(progn
- (org-goto-first-child)
- (org-map-entries (lambda ()
- `(div (h2 ,(nth 4 (org-heading-components)))
- (pre ,(buffer-substring-no-properties
- (org-end-of-meta-data-and-drawers)
- (org-entry-end-position)))))
- nil 'tree))))))))
+ `(div ,@(org-map-entries (lambda ()
+ `(div (h2 ,(nth 4 (org-heading-components)))
+ (pre ,(buffer-substring-no-properties
+ (org-end-of-meta-data-and-drawers)
+ (org-entry-end-position)))))
+ "/+COMMENT" 'tree))
+ `(form (@ (action ,(concat "/" project "/" issue
+ "/comment/"))
+ (method "POST")
+ (class "form-horizontal"))
+ (fieldset
+ (legend "New comment")
+ (div (@ (class "row"))
+ (div (@ (class "span5"))
+ ,(eliss-control-group
+ "subject" "Subject" nil
+ (concat "RE: " title))
+ ,(eliss-control-group "name" "Name"
+ "John Doe")
+ ,(eliss-control-group
+ "email" "Email" "john@example.com")
+ (input (@ (type "hidden")
+ (name "i-m-human")
+ (value "t")))
+ (input (@ (type "hidden")
+ (name "i-r-bot")))
+ (input (@ (type "submit")
+ (value "Comment")
+ (class "pull-right"))))
+ (div (@ (class "span7"))
+ (label (@ (for "content")) "Comment:")
+ (textarea (@ (name "content")
+ (id "content")
+ (class "span7")
+ (rows "15")) ""))))))))))
(defun eliss-new-issue (httpcon)
(elnode-method httpcon
@@ -162,12 +191,40 @@
(save-buffer)))
(elnode-send-redirect httpcon (concat "/" project "/"))))))
+(defun eliss-new-comment (httpcon)
+ (elnode-method httpcon
+ (POST
+ (let* ((project (match-string 1 (elnode-http-mapping httpcon)))
+ (issue (match-string 2 (elnode-http-mapping httpcon)))
+ (entry (cdr (org-id-find issue)))
+ (filename (concat eliss-data-directory "/" project ".org"))
+ (buffer (find-file-noselect filename))
+ (subject (elnode-http-param httpcon "subject"))
+ (name (elnode-http-param httpcon "name"))
+ (email (elnode-http-param httpcon "email"))
+ (i-m-human (elnode-http-param httpcon "i-m-human"))
+ (i-r-bot (elnode-http-param httpcon "i-r-bot"))
+ (content (elnode-http-param httpcon "content")))
+ (when (and (equal i-m-human "t") (equal i-r-bot ""))
+ (with-current-buffer buffer
+ (goto-char entry)
+ (org-end-of-subtree)
+ (org-insert-heading-after-current)
+ (insert subject)
+ (org-set-property "TODO" "COMMENT")
+ (let ((text-start (point)))
+ (insert "\n\n" content)
+ (fill-region text-start (point)))
+ (save-buffer)))
+ (elnode-send-redirect httpcon (concat "/" project "/" issue "/"))))))
+
(defun eliss-handler (httpcon)
(elnode-dispatcher
httpcon
'(("^/$" . eliss-project-list)
("^/\\([-a-zA-Z0-9]+\\)/$" . eliss-project-page)
+ ("^/\\([-a-zA-Z0-9]+\\)/new/$" . eliss-new-issue)
("^/\\([-a-zA-Z0-9]+\\)/\\([-a-z0-9:]+\\)/$" . eliss-issue-page)
- ("^/\\([-a-zA-Z0-9]+\\)/new/$" . eliss-new-issue))))
+ ("^/\\([-a-zA-Z0-9]+\\)/\\([-a-z0-9:]+\\)/comment/$" . eliss-new-comment))))
(elnode-start 'eliss-handler :port 8028 :host "localhost")