git.fiddlerwoaroof.com
Browse code

feature (frontend): fiddle with infrastructure for partial rendering

Ed Langley authored on 12/09/2019 17:24:44
Showing 3 changed files
... ...
@@ -16,6 +16,8 @@
16 16
                #:parenscript
17 17
                #:serapeum
18 18
                #:spinneret
19
+               #:spinneret/ps
20
+               #:spinneret/cl-markdown
19 21
                #:uiop)
20 22
   :components ((:file "package")
21 23
                (:file "utils" :depends-on ("package"))
... ...
@@ -1,11 +1,20 @@
1 1
 (in-package :fwoar.rss-reader.ui)
2 2
 
3
-(defun homepage ()
3
+(defun homepage (content)
4 4
   (spinneret:with-html
5 5
     (:h1 "Hello, World!")
6 6
     (:div.main
7 7
      (:nav
8
+      (:a :data-ic-get-from "/"
9
+          :data-ic-target "#content"
10
+          "home")
8 11
       (:a :data-ic-get-from "/other"
9 12
           :data-ic-target "#content"
10
-          "hi"))
11
-     (:main#content "home content"))))
13
+          "other")
14
+      (:a :data-ic-get-from "/third"
15
+          :data-ic-target "#content"
16
+          "third")
17
+      (:a :data-ic-get-from "/fourth"
18
+          :data-ic-target "#content"
19
+          "fourth"))
20
+     (:main#content content))))
... ...
@@ -7,22 +7,27 @@
7 7
   "basic html and javascript for our app, as well as an invocation of
8 8
 the hook that pulls in CSS"
9 9
 
10
-  (spinneret:with-html-string
11
-    (:doctype)
12
-    (:html
13
-     (:head
14
-      (:script :src "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"
15
-               :defer "defer")
16
-      (:script :src
17
-               "https://cdnjs.cloudflare.com/ajax/libs/intercooler-js/1.2.2/intercooler.min.js"
18
-               :defer "defer")
19
-      (:meta :name "intercoolerjs:use-data-prefix"
20
-             :content "true"/)
21
-      (:style
22
-       (apply 'lass:compile-and-write
23
-              (araneus:styles route))))
24
-     (:body
25
-      (call-next-method)))))
10
+  (ecase model
11
+    (:full
12
+     (spinneret:with-html-string
13
+       (:doctype)
14
+       (:html
15
+        (:head
16
+         (:script :src "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"
17
+                  :defer "defer")
18
+         (:script :src
19
+                  "https://cdnjs.cloudflare.com/ajax/libs/intercooler-js/1.2.2/intercooler.min.js"
20
+                  :defer "defer")
21
+         (:meta :name "intercoolerjs:use-data-prefix"
22
+                :content "true"/)
23
+         (:style
24
+          (apply 'lass:compile-and-write
25
+                 (araneus:styles route))))
26
+        (:body
27
+         (call-next-method)))))
28
+    (:partial
29
+     (spinneret:with-html-string
30
+       (call-next-method)))))
26 31
 
27 32
 (defmethod araneus:styles append ((route rss-reader-route))
28 33
   "CSS Reset"
... ...
@@ -48,10 +53,21 @@ the hook that pulls in CSS"
48 53
   "#BDE0F3")
49 54
 
50 55
 (defmethod araneus:controller ((route homepage) params &key)
51
-  (values))
56
+  (format t "~&~s~%" params)
57
+  (if (equal (serapeum:assocdr "ic-request" params
58
+                               :test 'equal)
59
+             "true")
60
+      :partial
61
+      :full))
52 62
 
53 63
 (defmethod araneus:view ((route homepage) model)
54
-  (fwoar.rss-reader.ui:homepage))
64
+  (let ((content "home content"))
65
+    (ecase model
66
+      (:full (fwoar.rss-reader.ui:homepage content))
67
+      (:partial (spinneret:with-html
68
+                  (:raw (with-output-to-string (s)
69
+                          (cl-markdown:markdown content
70
+                                                :stream s))))))))
55 71
 
56 72
 (araneus:define-controller other (_)
57 73
   (values))