refac
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
import type { Token } from 'marked';
|
import type { Token } from 'marked';
|
||||||
import { getContext } from 'svelte';
|
import { getContext } from 'svelte';
|
||||||
|
import { goto } from '$app/navigation';
|
||||||
|
|
||||||
const i18n = getContext('i18n');
|
const i18n = getContext('i18n');
|
||||||
|
|
||||||
@@ -24,6 +25,27 @@
|
|||||||
export let tokens: Token[];
|
export let tokens: Token[];
|
||||||
export let sourceIds = [];
|
export let sourceIds = [];
|
||||||
export let onSourceClick: Function = () => {};
|
export let onSourceClick: Function = () => {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle link clicks - intercept same-origin app URLs for in-app navigation
|
||||||
|
*/
|
||||||
|
const handleLinkClick = (e: MouseEvent, href: string) => {
|
||||||
|
try {
|
||||||
|
const url = new URL(href, window.location.origin);
|
||||||
|
// Check if same origin and an in-app route
|
||||||
|
if (
|
||||||
|
url.origin === window.location.origin &&
|
||||||
|
(url.pathname.startsWith('/notes/') ||
|
||||||
|
url.pathname.startsWith('/c/') ||
|
||||||
|
url.pathname.startsWith('/channels/'))
|
||||||
|
) {
|
||||||
|
e.preventDefault();
|
||||||
|
goto(url.pathname + url.search + url.hash);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Invalid URL, let browser handle it
|
||||||
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#each tokens as token, tokenIdx (tokenIdx)}
|
{#each tokens as token, tokenIdx (tokenIdx)}
|
||||||
@@ -33,11 +55,11 @@
|
|||||||
<HtmlToken {id} {token} {onSourceClick} />
|
<HtmlToken {id} {token} {onSourceClick} />
|
||||||
{:else if token.type === 'link'}
|
{:else if token.type === 'link'}
|
||||||
{#if token.tokens}
|
{#if token.tokens}
|
||||||
<a href={token.href} target="_blank" rel="nofollow" title={token.title}>
|
<a href={token.href} target="_blank" rel="nofollow" title={token.title} on:click={(e) => handleLinkClick(e, token.href)}>
|
||||||
<svelte:self id={`${id}-a`} tokens={token.tokens} {onSourceClick} {done} />
|
<svelte:self id={`${id}-a`} tokens={token.tokens} {onSourceClick} {done} />
|
||||||
</a>
|
</a>
|
||||||
{:else}
|
{:else}
|
||||||
<a href={token.href} target="_blank" rel="nofollow" title={token.title}>{token.text}</a>
|
<a href={token.href} target="_blank" rel="nofollow" title={token.title} on:click={(e) => handleLinkClick(e, token.href)}>{token.text}</a>
|
||||||
{/if}
|
{/if}
|
||||||
{:else if token.type === 'image'}
|
{:else if token.type === 'image'}
|
||||||
<Image src={token.href} alt={token.text} />
|
<Image src={token.href} alt={token.text} />
|
||||||
|
|||||||
Reference in New Issue
Block a user