Browse code
feature (frontend): fiddle with infrastructure for partial rendering
Ed Langley authored on 12/09/2019 17:24:44
Showing 3 changed files
Showing 3 changed files
... | ... |
@@ -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)) |