Move all header modifications to the controller.
authorRicardo Wurmus <rekado@elephly.net>
Sun, 5 Apr 2020 20:59:00 +0000 (22:59 +0200)
committerRicardo Wurmus <rekado@elephly.net>
Sun, 5 Apr 2020 21:06:25 +0000 (23:06 +0200)
mumi/web/controller.scm
mumi/web/render.scm
mumi/web/view/html.scm

index 56b8eaf7e7a62db1318fc01a8fe03194ad08a4f8..4849a9e84a79c8a1e83ccb17aeb59776547dc7a6 100644 (file)
@@ -20,6 +20,7 @@
   #:use-module (ice-9 pretty-print)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
+  #:use-module ((debbugs bug) #:select (bug-archived bug-done))
   #:use-module (web request)
   #:use-module (web uri)
   #:use-module (webutils sessions)
 (define (controller request body)
   (match-lambda
     (('GET)
-     (apply render-html (index)))
+     (render-html (index)
+                  #:extra-headers
+                  '((cache-control . ((max-age . 60))))))
     (('GET "easy")
-     (apply render-html (list-of-matching-bugs "tag:easy" (easy-bugs))))
+     (render-html (list-of-matching-bugs "tag:easy" (easy-bugs))))
     (('GET "search")
      (let ((query (-> request
                       request-uri
         ;; Search for matching messages and return list of bug reports
         ;; that belong to them.
         (else
-         (apply render-html
-                (list-of-matching-bugs query
-                                       (match (process-query query)
-                                         ((#:terms terms
-                                           #:sets s)
-                                          (search-bugs (string-join terms)
-                                                       #:sets s)))))))))
+         (render-html
+          (list-of-matching-bugs query
+                                 (match (process-query query)
+                                   ((#:terms terms
+                                     #:sets s)
+                                    (search-bugs (string-join terms)
+                                                 #:sets s)))))))))
     ((or ('GET "issue" (? string->number id))
          ('GET (? string->number id)))
-     (let ((message (match (uri-query (request-uri request))
+     (let ((bug (fetch-bug id))
+           (message (match (uri-query (request-uri request))
                       ("comment-ok"
                        '(info . "Your comment has been submitted!"))
                       ("comment-error"
                        '(error . "There was an error submitting your comment!"))
                       (_ #f))))
-       (apply render-html (or (and=> (fetch-bug id)
-                                     (lambda (bug) (issue-page bug message)))
-                              (unknown id)))))
+       (if bug
+           (let ((headers
+                   (cond
+                    ((bug-archived bug)
+                     ;; Tell browser to cache this for 12 hours.
+                     '((cache-control . ((max-age . 43200)))))
+                    ((bug-done bug)
+                     ;; Tell browser to cache this for 1 hour.
+                     '((cache-control . ((max-age . 3600)))))
+                    (else '()))))
+             (render-html (issue-page bug message)
+                          #:extra-headers headers))
+           (render-html (unknown id)))))
     (('GET "issue" (? string->number id)
           "attachment" (? string->number msg-num)
           (? string->number path) ...)
                       (string->number msg-num)
                       (map string->number path)))
     (('GET "issue" not-an-id)
-     (apply render-html (unknown not-an-id)))
+     (render-html (unknown not-an-id)))
     (('GET "help")
-     (apply render-html (help)))
+     (render-html (help)
+                  ;; Cache for 24 hours.
+                  #:extra-headers
+                  '((cache-control . ((max-age . 86400))))))
     (('GET path ...)
      (render-static-asset request))))
index 7f997313b76744bc7a8b9303768565f109fcfc90..0b4b70561d6a2a9002d60e9c03934ef9b0a61281 100644 (file)
@@ -96,7 +96,7 @@
               failure))
         failure)))
 
-(define* (render-html #:key sxml (extra-headers '()))
+(define* (render-html sxml #:key (extra-headers '()))
   (list (append extra-headers
                 '((content-type . (text/html))))
         (lambda (port)
index cbc907dde4d78aee11f88e0efb65bbaa3ea467b1..9771deebdaacfe071eadc02b057076c8a4a7bd98 100644 (file)
 (define* (layout #:key
                  (head '())
                  (body '())
-                 (title "Guix issue tracker")
-                 (extra-headers '()))
-  `(#:sxml ((doctype "html")
-            (html
-             (head
-              (title ,title)
-              (meta (@ (http-equiv "Content-Type") (content "text/html; charset=UTF-8")))
-              (meta (@ (http-equiv "Content-Language") (content "en")))
-              (meta (@ (name "author") (content "Ricardo Wurmus")))
-              (meta (@ (name "viewport")
-                       (content "width=device-width, initial-scale=1")))
-              (link
-               (@ (rel "stylesheet")
-                  (media "screen")
-                  (type "text/css")
-                  (href "/css/reset.css")))
-              (link
-               (@ (rel "stylesheet")
-                  (media "screen")
-                  (type "text/css")
-                  (href "/css/bootstrap.css")))
-              ,@head
-              (link
-               (@ (rel "stylesheet")
-                  (media "screen")
-                  (type "text/css")
-                  (href "/css/screen.css")))
-              (link
-               (@ (rel "stylesheet")
-                  (media "screen")
-                  (type "text/css")
-                  (href "/css/code.css"))))
-             (body ,@body
-                   (footer (@ (class "text-center"))
-                    (p "Copyright © 2016—2020 by the GNU Guix community."
-                       (br)
-                       "Now with even more " (span (@ (class "lambda")) "λ") "! ")
-                    (p "This is free software.  Download the "
-                       (a (@ (href "https://git.elephly.net/software/mumi.git"))
-                          "source code here") ".")))
-             (script
-              (@ (type "text/javascript")
-                 (src "/js/sort-table.js")))))
-    #:extra-headers ,extra-headers))
+                 (title "Guix issue tracker"))
+  `((doctype "html")
+    (html
+     (head
+      (title ,title)
+      (meta (@ (http-equiv "Content-Type") (content "text/html; charset=UTF-8")))
+      (meta (@ (http-equiv "Content-Language") (content "en")))
+      (meta (@ (name "author") (content "Ricardo Wurmus")))
+      (meta (@ (name "viewport")
+               (content "width=device-width, initial-scale=1")))
+      (link
+       (@ (rel "stylesheet")
+          (media "screen")
+          (type "text/css")
+          (href "/css/reset.css")))
+      (link
+       (@ (rel "stylesheet")
+          (media "screen")
+          (type "text/css")
+          (href "/css/bootstrap.css")))
+      ,@head
+      (link
+       (@ (rel "stylesheet")
+          (media "screen")
+          (type "text/css")
+          (href "/css/screen.css")))
+      (link
+       (@ (rel "stylesheet")
+          (media "screen")
+          (type "text/css")
+          (href "/css/code.css"))))
+     (body ,@body
+           (footer (@ (class "text-center"))
+                   (p "Copyright © 2016—2020 by the GNU Guix community."
+                      (br)
+                      "Now with even more " (span (@ (class "lambda")) "λ") "! ")
+                   (p "This is free software.  Download the "
+                      (a (@ (href "https://git.elephly.net/software/mumi.git"))
+                         "source code here") ".")))
+     (script
+      (@ (type "text/javascript")
+         (src "/js/sort-table.js"))))))
 
 (define* (search-form #:key (standalone? #f) (text ""))
   `(form (@ (id "search")
 
 (define (index)
   (layout
-   #:extra-headers
-   '((cache-control . ((max-age . 60))))
    #:body
    `(,(header #:search-bar? #f)
      (main
 
 (define (help)
   (layout
-   #:extra-headers
-   ;; Cache for 24 hours.
-   '((cache-control . ((max-age . 86400))))
    #:body
    `(,(header #:search-bar? #f)
      (div
@@ -354,15 +347,6 @@ some examples.")
             '())))
   (layout
    #:title (bug-subject* bug)
-   #:extra-headers
-   (cond
-    ((bug-archived bug)
-     ;; Tell browser to cache this for 12 hours.
-     '((cache-control . ((max-age . 43200)))))
-    ((bug-done bug)
-     ;; Tell browser to cache this for 1 hour.
-     '((cache-control . ((max-age . 3600)))))
-    (else '()))
    #:body
    `(,(header)
      (div