1
0
Fork 0

- [GUI] transformed relative IRI to absolute in the rendered gemtext;

[GUI] printed IRI on the info-bar when moving cursor over links in the rendered gemtext.
This commit is contained in:
cage 2023-03-03 17:04:40 +01:00
parent fd19aa8704
commit d6fdf00253
2 changed files with 100 additions and 77 deletions

View File

@ -286,24 +286,24 @@
(iri:make-iri nil nil nil nil link-value nil nil))))
(cond
((null (uri:host parsed))
(let* ((absolute-path-p (string-starts-with-p "/" link-value))
(query-path-p (uri:query parsed))
(path (cond
(absolute-path-p
(uri:path parsed))
((and query-path-p
original-query)
(strcat (safe-all-but-last-elt original-path)
(uri:path parsed)))
((or query-path-p
original-query)
(strcat original-path
(uri:path parsed)))
(t
(strcat (if original-path
(path-last-dir original-path)
"/")
(uri:path parsed))))))
(let* ((absolute-path-p (string-starts-with-p "/" link-value))
(query-path-p (uri:query parsed))
(path (cond
(absolute-path-p
(uri:path parsed))
((and query-path-p
original-query)
(strcat (safe-all-but-last-elt original-path)
(uri:path parsed)))
((or query-path-p
original-query)
(strcat original-path
(uri:path parsed)))
(t
(strcat (if original-path
(path-last-dir original-path)
"/")
(uri:path parsed))))))
(make-gemini-iri original-host
(fs:normalize-path path)
:query (uri:query parsed)

View File

@ -62,8 +62,8 @@
(defun find-db-stream-url (url)
(find-db-stream-if (lambda (a) (string= (server-stream-handle a) url))))
(defun notify-request-error (message)
(gui-goodies:error-dialog gui-goodies:*toplevel* message))
(defun notify-request-error (error)
(gui-goodies:error-dialog gui-goodies:*toplevel* error))
(defmacro with-notify-errors (&body body)
`(handler-case
@ -134,8 +134,8 @@
(defun initialize-menu (parent)
(with-accessors ((main-window main-window)) parent
(let* ((bar (gui:make-menubar parent))
(file (gui:make-menu bar (_ "File") :underline 0))
(help (gui:make-menu bar (_ "Help") :underline 0)))
(file (gui:make-menu bar (_ "File") :underline 0))
(help (gui:make-menu bar (_ "Help") :underline 0)))
(gui:make-menubutton file (_ "Quit") #'menu:quit :underline 0)
(gui:make-menubutton help (_ "About") #'menu:help-about :underline 0))))
@ -197,7 +197,7 @@
(lambda ()
(open-iri link-value main-window use-cache)))
(defun collect-ir-lines (main-window lines)
(defun collect-ir-lines (request-iri main-window lines)
(with-accessors ((ir-lines ir-lines)
(ir-rendered-lines ir-rendered-lines)
(gemtext-widget gemtext-widget)) main-window
@ -256,11 +256,24 @@
(gui-conf:gemini-quote-justification))
(:pre
(gui-conf:gemini-preformatted-text-justification))))
(absolutize-link (link-value)
(if (iri:absolute-url-p link-value)
link-value
(let ((parsed-request-iri (iri:iri-parse request-iri)))
(multiple-value-bind (x host path query port y w z)
(gemini-client:displace-iri parsed-request-iri)
(declare (ignore x y w z))
(gemini-parser:absolutize-link link-value
host
port
path
query)))))
(linkify (line line-number)
(multiple-value-bind (link-bg link-fg)
(gui-conf:gemini-link-colors)
(let* ((link-font (gui-conf:gemini-link-font-configuration))
(link-value (ir-href line))
(target-iri (absolutize-link link-value))
(link-name (or (ir-line line)
link-value))
(prefix-gemini (gui-conf:gemini-link-prefix-to-gemini))
@ -287,7 +300,13 @@
link-font
link-fg
link-bg
(link-click-mouse-1-callback link-value main-window))
(link-click-mouse-1-callback target-iri
main-window)
:over-callback
(lambda () (print-info-message target-iri))
:leave-callback
(lambda () (print-info-message "")))
(gui:append-line gemtext-widget "")))))
(render-line (key text line-number)
(let ((font (key->font key))
@ -316,54 +335,54 @@
with starting-pre-block-line = -1
with ending-pre-block-line = -1
with current-pre-block-alt-text = nil
for line in lines do
(vector-push-extend line ir-lines)
(let ((type (ir-type line)))
(ecase (format-keyword type)
(:vertical-space
(vector-push-extend (format nil "") ir-rendered-lines)
(incf render-line-count)
(render-line :vertical-space (a:last-elt ir-rendered-lines) render-line-count))
(:as-is
(vector-push-extend (ir-line line) ir-rendered-lines)
(incf render-line-count)
(render-line :as-is (a:last-elt ir-rendered-lines) render-line-count))
(:text
(vector-push-extend (ir-line line) ir-rendered-lines)
(incf render-line-count)
(render-line :text (a:last-elt ir-rendered-lines) render-line-count))
(:h1
(push-prefixed (gui-conf:gemini-h1-prefix) line)
(incf render-line-count)
(render-line :h1 (a:last-elt ir-rendered-lines) render-line-count))
(:h2
(push-prefixed (gui-conf:gemini-h1-prefix) line)
(incf render-line-count)
(render-line :h2 (a:last-elt ir-rendered-lines) render-line-count))
(:h3
(push-prefixed (gui-conf:gemini-h1-prefix) line)
(incf render-line-count)
(render-line :h3 (a:last-elt ir-rendered-lines) render-line-count))
(:li
(push-prefixed (gui-conf:gemini-bullet-prefix) line)
(incf render-line-count)
(render-line :li (a:last-elt ir-rendered-lines) render-line-count))
(:quote
(push-prefixed (gui-conf:gemini-quote-prefix) line)
(incf render-line-count)
(render-line :quote (a:last-elt ir-rendered-lines) render-line-count))
(:pre
(vector-push-extend (format nil "") ir-rendered-lines)
(setf starting-pre-block-line (1+ render-line-count))
(setf current-pre-block-alt-text (ir-pre-alt-text line))
(render-line :pre (a:last-elt ir-rendered-lines) render-line-count))
(:pre-end
(vector-push-extend (format nil "") ir-rendered-lines)
(setf ending-pre-block-line (1+ render-line-count))
(render-line :pre-end (a:last-elt ir-rendered-lines) render-line-count))
(:a
(incf render-line-count)
(linkify line render-line-count))))))))
for line in lines do
(vector-push-extend line ir-lines)
(let ((type (ir-type line)))
(ecase (format-keyword type)
(:vertical-space
(vector-push-extend (format nil "") ir-rendered-lines)
(incf render-line-count)
(render-line :vertical-space (a:last-elt ir-rendered-lines) render-line-count))
(:as-is
(vector-push-extend (ir-line line) ir-rendered-lines)
(incf render-line-count)
(render-line :as-is (a:last-elt ir-rendered-lines) render-line-count))
(:text
(vector-push-extend (ir-line line) ir-rendered-lines)
(incf render-line-count)
(render-line :text (a:last-elt ir-rendered-lines) render-line-count))
(:h1
(push-prefixed (gui-conf:gemini-h1-prefix) line)
(incf render-line-count)
(render-line :h1 (a:last-elt ir-rendered-lines) render-line-count))
(:h2
(push-prefixed (gui-conf:gemini-h1-prefix) line)
(incf render-line-count)
(render-line :h2 (a:last-elt ir-rendered-lines) render-line-count))
(:h3
(push-prefixed (gui-conf:gemini-h1-prefix) line)
(incf render-line-count)
(render-line :h3 (a:last-elt ir-rendered-lines) render-line-count))
(:li
(push-prefixed (gui-conf:gemini-bullet-prefix) line)
(incf render-line-count)
(render-line :li (a:last-elt ir-rendered-lines) render-line-count))
(:quote
(push-prefixed (gui-conf:gemini-quote-prefix) line)
(incf render-line-count)
(render-line :quote (a:last-elt ir-rendered-lines) render-line-count))
(:pre
(vector-push-extend (format nil "") ir-rendered-lines)
(setf starting-pre-block-line (1+ render-line-count))
(setf current-pre-block-alt-text (ir-pre-alt-text line))
(render-line :pre (a:last-elt ir-rendered-lines) render-line-count))
(:pre-end
(vector-push-extend (format nil "") ir-rendered-lines)
(setf ending-pre-block-line (1+ render-line-count))
(render-line :pre-end (a:last-elt ir-rendered-lines) render-line-count))
(:a
(incf render-line-count)
(linkify line render-line-count))))))))
(defun displace-gemini-response (response)
(values (getf response :status)
@ -375,9 +394,11 @@
(defun open-iri (iri main-window use-cache)
(handler-case
(let ((parsed-iri (iri:iri-parse iri)))
(if (string= (uri:scheme parsed-iri)
gemini-constants:+gemini-scheme+)
(start-stream-iri iri main-window use-cache)
(if (iri:absolute-url-p iri)
(if (string= (uri:scheme parsed-iri)
gemini-constants:+gemini-scheme+)
(start-stream-iri iri main-window use-cache)
(progn))
(progn)))
(error (e)
#+debug-mode (misc:dbg "error quen getting iri from autocomplete ~a" e)
@ -400,7 +421,7 @@
(start-streaming-thread iri
:use-cache nil
:process-function (lambda (lines)
(collect-ir-lines main-window lines)
(collect-ir-lines iri main-window lines)
(misc:dbg "lines ~a" lines))
:status status))))))
@ -538,7 +559,9 @@
(gui:focus (nodgui.mw:autocomplete-entry-widget (iri-entry (tool-bar object))))
object))
(defun print-info-message (message &key (color (gui-goodies:parse-color "gray")) (bold nil))
(defun print-info-message (message &key
(color (gui-goodies:parse-color "black"))
(bold nil))
(let ((info-widget (info-text gui-goodies:*main-frame*)))
(setf (gui:text info-widget) message)
(let ((color-tag (gui:tag-create info-widget