diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-09 20:00:05 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-09 20:00:05 +0100 |
commit | 36c280848e85595166e51bacb215a4d1eb550e0d (patch) | |
tree | 1a7c8f4d8bd1865cad0ae052045c3a641c0d573c /src/server/buffer.nim | |
parent | 86129e41a258cdbab4d9cccd86709e2ab02a3645 (diff) | |
download | chawan-36c280848e85595166e51bacb215a4d1eb550e0d.tar.gz |
buffer: make iframes clickable
better than nothing
Diffstat (limited to 'src/server/buffer.nim')
-rw-r--r-- | src/server/buffer.nim | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/server/buffer.nim b/src/server/buffer.nim index d32e96c7..43d2f689 100644 --- a/src/server/buffer.nim +++ b/src/server/buffer.nim @@ -332,7 +332,7 @@ func getTitleAttr(buffer: Buffer; element: Element): string = const ClickableElements = { TAG_A, TAG_INPUT, TAG_OPTION, TAG_BUTTON, TAG_TEXTAREA, TAG_LABEL, - TAG_VIDEO, TAG_AUDIO + TAG_VIDEO, TAG_AUDIO, TAG_IFRAME } proc isClickable(element: Element): bool = @@ -401,6 +401,12 @@ proc getClickHover(buffer: Buffer; element: Element): string = let url = clickable.document.parseURL(src) if url.isSome: return $url.get + elif clickable of HTMLIFrameElement: + let src = clickable.attr(satSrc) + if src != "": + let url = clickable.document.parseURL(src) + if url.isSome: + return $url.get "" proc getCachedImageHover(buffer: Buffer; element: Element): string = @@ -1546,6 +1552,15 @@ proc click(buffer: Buffer; video: HTMLVideoElement): ClickResult = ) return ClickResult(repaint: repaint) +proc click(buffer: Buffer; iframe: HTMLIFrameElement): ClickResult = + let repaint = buffer.restoreFocus() + let src = iframe.attr(satSrc) + if src != "": + let url = iframe.document.parseURL(src) + if url.isSome: + return ClickResult(repaint: repaint, open: newRequest(url.get)) + return ClickResult(repaint: repaint) + const InputTypePrompt = [ itText: "TEXT", itButton: "", @@ -1632,6 +1647,8 @@ proc click(buffer: Buffer; clickable: Element): ClickResult = return buffer.click(HTMLAudioElement(clickable)) of TAG_VIDEO: return buffer.click(HTMLVideoElement(clickable)) + of TAG_IFRAME: + return buffer.click(HTMLIFrameElement(clickable)) else: return ClickResult(repaint: buffer.restoreFocus()) |