ef3b7ddb |
(in-package :fwoar.rss-reader)
|
aa626761 |
(defmethod spinneret:html ((object plump:node))
(plump:serialize object spinneret:*html*))
|
ef3b7ddb |
(defclass rss-reader-route ()
|
6131cd63 |
((%feed-list :initarg :feed-list :reader feed-list)))
|
46f06681 |
(defun nav (route)
(spinneret:with-html
(loop for feed in (feed-list route)
for idx from 0
collect (:a :data-ic-get-from (format nil "/f/~a" (string-downcase (feed-key feed)))
:class (if (string= (feed-key feed)
(feed-key (feed route)))
"active" "")
(feed-key feed)))))
|
ef3b7ddb |
(defmethod araneus:view :around ((route rss-reader-route) model)
"basic html and javascript for our app, as well as an invocation of
the hook that pulls in CSS"
|
6131cd63 |
(etypecase model
|
720f9410 |
(fwoar.intercooler:full-request
|
31d2d52b |
(spinneret:with-html-string
(:doctype)
(:html
(:head
|
6131cd63 |
(:script :src "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js")
|
31d2d52b |
(:script :src
|
46f06681 |
"https://cdnjs.cloudflare.com/ajax/libs/intercooler-js/1.2.3/intercooler.min.js"
|
31d2d52b |
:defer "defer")
|
6131cd63 |
(:script :defer "defer"
(:raw (fwoar.rss-reader.ui:intercooler-debugger)))
|
31d2d52b |
(:meta :name "intercoolerjs:use-data-prefix"
:content "true"/)
(:style
|
20ae3d55 |
(:raw (apply 'lass:compile-and-write
(araneus:styles route)))))
|
31d2d52b |
(:body
(call-next-method)))))
|
720f9410 |
(fwoar.intercooler:partial-request
|
31d2d52b |
(spinneret:with-html-string
(call-next-method)))))
|
ef3b7ddb |
(defmethod araneus:styles append ((route rss-reader-route))
"CSS Reset"
'((*
:margin 0
:padding 0
:font-family "\"Lato\", sans"
|
720f9410 |
:box-sizing border-box)
|
ef3b7ddb |
((:or pre code)
:font-family "\"Source Code Pro\", monospace")
(body
:font-size 12pt)
((:or h1 h2 h3 h4 h5 h6)
:font-size 1.6rem)
((:or ul ol)
|
46f06681 |
:padding-left 2rem)
(.active
:background "#888")))
|
ef3b7ddb |
|
6131cd63 |
(defmacro with-layout ((render-type layout) &body content)
`(let ((content (lambda ()
(spinneret:with-html
(:main
,@content)))))
(ecase ,render-type
(:full (spinneret:with-html
(,layout content)))
(:partial (funcall content)))))
|
720f9410 |
(defclass+ feed-page ((rss-reader-route (feed-list))
fwoar.intercooler:intercooler-route
fwoar.default-layout:default-layout)
|
aa626761 |
((%feed :initarg :feed :reader feed)))
(defmethod araneus:controller ((route feed-page) params &key)
|
720f9410 |
(resolve-feed-reference (feed route)))
|
aa626761 |
|
720f9410 |
(defmethod araneus:view ((route feed-page) (model fwoar.intercooler:intercooler-request))
|
6131cd63 |
(spinneret:with-html
|
46f06681 |
(spinneret:html
|
720f9410 |
(alimenta:render (fwoar.intercooler:request model)
|
20ae3d55 |
(feed route)))))
|
aa626761 |
|
720f9410 |
(defmethod araneus:view ((route feed-page) (model fwoar.intercooler:full-request))
|
6131cd63 |
(spinneret:with-html
(:h1 "Hello, World!")
(:div.main
(:nav
:data-ic-push-url "true"
|
46f06681 |
:data-ic-target "#content"
:data-ic-switch-class "active"
(nav route))
|
6131cd63 |
(:main#content
|
46f06681 |
:data-ic-target "#content"
|
720f9410 |
(alimenta:render (fwoar.intercooler:request model)
|
aa626761 |
(feed route))))))
|
ef3b7ddb |
|
46f06681 |
(defclass+ feed-item-page ((rss-reader-route (feed-list))
fwoar.intercooler:intercooler-route
fwoar.default-layout:default-layout)
((%feed :initarg :feed :reader feed)
(%item :initarg :item :reader item)))
(defmethod araneus:controller ((route feed-item-page) params &key)
(find (item route)
(resolve-feed-reference (feed route))
:key (alexandria:compose 'id->slug 'alimenta:id)
:test 'string-equal))
(defmethod araneus:view ((route feed-item-page) (model fwoar.intercooler:intercooler-request))
(spinneret:with-html
(:raw
(alimenta:content (fwoar.intercooler:request model)))))
(defmethod araneus:view ((route feed-item-page) (model fwoar.intercooler:full-request))
(spinneret:with-html
(:h1 "Hello, World!")
(:div.main
(:nav
:data-ic-push-url "true"
:data-ic-target "#content"
#+(or)(:data-ic-replace-target "true")
:data-ic-switch-class "active"
(nav route))
(:main#content
:data-ic-target "#content"
(:raw
(alimenta:content (fwoar.intercooler:request model)))))))
|
ef3b7ddb |
(defmethod fwoar.default-layout:border-color ((layout rss-reader-route))
"#BDE0F3")
|
aa626761 |
(defmethod fwoar.default-layout:background-color ((layout rss-reader-route))
"#3f3f3f")
(defmethod fwoar.default-layout:text-color ((layout rss-reader-route))
"#DCDCCC")
(defmethod fwoar.default-layout:link-color ((layout rss-reader-route))
"#F5F5D6")
|