3 (defparameter *title-1-font* "serif 22"
4 "Font for the level 1 title.")
6 (defparameter *title-2-font* "serif 19"
7 "Font for the level 2 title.")
9 (defparameter *title-3-font* "serif 16"
10 "Font for the level 3 title.")
12 (defparameter *verbatim-font* "monospace 12"
13 "Font for the verbatim element.")
15 (defparameter *item-font* "serif 12"
18 (defparameter *link-font* "serif 12"
19 "Font for the links.")
21 (defparameter *paragraph-font* "serif 12"
22 "Font for the normal text")
24 (defparameter *window-content* nil)
26 (defparameter *current-url* nil)
28 (defgeneric render (obj frame)
29 (:documentation "Render OBJ in the nodgui FRAME"))
31 (defmethod render ((l list) f)
35 (defmethod render ((title gemtext:title) f)
36 (with-slots ((text phos/gemtext:text)
37 (level phos/gemtext:level))
39 (let ((w (make-instance 'label
45 :text (format nil "~v{~A~:*~} ~a" level '("#") text))))
46 (pack w :side :top))))
48 (defmethod render ((link gemtext:link) f)
49 (with-slots ((text phos/gemtext:text)
50 (url phos/gemtext:url))
52 (let ((w (make-instance 'button
55 :text (format nil "~a" (or text url))
57 (format t "before rendering ~a~%" url)
59 (pack w :side :top))))
61 (defmethod render ((item gemtext:item) f)
62 (with-slots ((text phos/gemtext:text)) item
63 (let ((w (make-instance 'label
66 :text (format nil "* ~a" text))))
67 (pack w :side :top))))
69 (defmethod render ((par gemtext:paragraph) f)
70 (with-slots ((text phos/gemtext:text)) par
71 (let ((w (make-instance 'label
73 :font *paragraph-font*
75 (pack w :side :top))))
77 (defmethod render ((v gemtext:verbatim) f)
78 (with-slots ((text phos/gemtext:text)
79 (alt phos/gemtext:alt))
81 (let ((w (make-instance 'label
87 (pack (make-instance 'label
92 (defun clear-window ()
93 (pack-forget-all *window-content*))
95 (defun do-render (url)
96 (let* ((uri (quri:uri url))
98 (base (quri:copy-uri uri)))
99 (setf (quri:uri-path base) nil)
101 (render (gemtext:parse-string "# loading...")
104 (multiple-value-bind (status body) (gemini:request url)
105 (declare (ignore status))
106 (render (gemtext:parse-string body base)
110 (with-nodgui (:title "phos")
111 (let ((sf (make-instance 'scrolled-frame)))
112 (setf *window-content* (interior sf))
113 (pack sf :side :top :fill :both :expand t)
116 ;; (nodgui.demo:demo)
118 ;; (main "gemini://gemini.omarpolo.com/")