controller: Load expensive lists via JavaScript
authorRicardo Wurmus <rekado@elephly.net>
Fri, 1 Feb 2019 11:45:34 +0000 (12:45 +0100)
committerRicardo Wurmus <rekado@elephly.net>
Fri, 1 Feb 2019 17:37:42 +0000 (18:37 +0100)
* mumi/web/controller.scm (controller): Add routes for rendering
snippets.
* mumi/web/view/html.scm (list-of-bugs): Export; add severity class.
(priority-bugs): New procedure.
(index): Add sections for priority bugs.
* assets/js/mumi.js: New file.
* assets/css/screen.css: Color serious and important bugs.

assets/css/screen.css
assets/img/spin.gif [new file with mode: 0644]
assets/js/mumi.js [new file with mode: 0644]
mumi/web/controller.scm
mumi/web/view/html.scm

index 73dceae538d8497e86cea6625601d605740e1d2e..012d359011065336b57f43155902134db08fbfaa 100644 (file)
@@ -93,6 +93,14 @@ tr td:nth-child(3){
     min-width: 8rem;
 }
 
+tr.serious td:nth-child(1) {
+    background-color: #ff5a2a;
+    color: #fff;
+}
+tr.important td:nth-child(1) {
+    background-color: #feaaaa;
+}
+
 #header {
     background: #333333;
     border-color: #1A1A1A1A;
diff --git a/assets/img/spin.gif b/assets/img/spin.gif
new file mode 100644 (file)
index 0000000..00bce1a
Binary files /dev/null and b/assets/img/spin.gif differ
diff --git a/assets/js/mumi.js b/assets/js/mumi.js
new file mode 100644 (file)
index 0000000..317bdcf
--- /dev/null
@@ -0,0 +1,19 @@
+// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3.0-or-later
+(function () {
+    var loadSnippet = function (targetId, URL) {
+        var req = new XMLHttpRequest();
+        req.onload = function (e) {
+            var target = document.getElementById(targetId);
+            target.innerHTML = req.responseText;
+        };
+        req.onerror = function (e) {
+            var target = document.getElementById(targetId);
+            target.innerHTML = "Never mind...";
+        };
+        req.open('GET', URL, true);
+        req.send();
+    };
+    loadSnippet ('snippet-recent',    '/snippet/recent');
+    loadSnippet ('snippet-priority',  '/snippet/priority');
+})();
+// @license-end
index ad6c63af6dfb787f7c8c10d4e2ee3e0333765723..910c4e713cddc1eaab1d76661ae61178581c732e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mumi -- Mediocre, uh, mail interface
-;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This program is free software: you can redistribute it and/or
 ;;; modify it under the terms of the GNU Affero General Public License
                       (map string->number path)))
     ((GET "issue" not-an-id)
      (apply render-html (unknown not-an-id)))
+    ((GET "snippet" "recent")
+     (apply render-html (list #:sxml (list-of-bugs (recent-bugs 10)))))
+    ((GET "snippet" "priority")
+     (apply render-html (priority-bugs)))
     ((GET "help")
      (apply render-html (help)))
     ((GET path ...)
index ee660c61fffc172f82965e60281012604b3584a9..8cb811fdc5e8a704ef8c39b083f65b14f7ab4df9 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mumi -- Mediocre, uh, mail interface
-;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This program is free software: you can redistribute it and/or
@@ -29,7 +29,9 @@
             unknown
             error-page
             issue-page
-            list-of-matching-bugs))
+            list-of-matching-bugs
+            list-of-bugs
+            priority-bugs))
 
 (define (status-tag bug)
   "Return a colored tag indicating the BUG status."
            ", and "
            (a (@ (href "help#search"))
               "many more!"))))
-      ;; TODO: do this via JS?
-      ,@(let ((bugs (recent-bugs 5)))
-          (if (null? bugs)
-              '()
-              `((h2 "Recent activity")
-                ,(list-of-bugs bugs))))))))
+      (h2 "Recent activity")
+      (div (@ (id "snippet-recent"))
+           (img (@ (src "/img/spin.gif"))))
+      (h2 "Priority bugs")
+      (div (@ (id "snippet-priority"))
+           (img (@ (src "/img/spin.gif"))))
+      (script
+       (@ (type "text/javascript")
+          (src "/js/mumi.js")))))))
 
 (define (help)
   (layout
@@ -416,7 +421,7 @@ supported.  To comment on this conversation "
               (tbody
                ,@(map (lambda (bug)
                         (let ((id (number->string (bug-num bug))))
-                          `(tr
+                          `(tr (@ (class ,(bug-severity bug)))
                             (td ,(or id "-"))
                             (td ,(if id
                                      `(a (@ (href ,(string-append "/issue/" id)))
@@ -426,6 +431,15 @@ supported.  To comment on this conversation "
                             (td ,(status-tag bug)))))
                       bugs)))))
 
+(define (priority-bugs)
+  (list #:sxml
+        (list-of-bugs
+         (sort
+          (append
+           (bugs-by-severity "serious" "open")
+           (bugs-by-severity "important" "open"))
+          (lambda (a b) (< (bug-num a) (bug-num b)))))))
+
 (define (list-of-matching-bugs query bugs)
   (layout
    #:body