|
|
|
|
@@ -1,5 +1,5 @@
|
|
|
|
|
<script lang="ts">
|
|
|
|
|
import { onMount, untrack, getContext } from 'svelte';
|
|
|
|
|
import { onMount, getContext } from 'svelte';
|
|
|
|
|
import { browser } from '$app/environment';
|
|
|
|
|
import { goto } from '$app/navigation';
|
|
|
|
|
import { page } from '$app/state';
|
|
|
|
|
@@ -11,8 +11,9 @@
|
|
|
|
|
|
|
|
|
|
let { data }: { data: PageData } = $props();
|
|
|
|
|
|
|
|
|
|
let html = $state(untrack(() => data.html));
|
|
|
|
|
let fetchingContent = $state(untrack(() => !data.isPreview && !data.html));
|
|
|
|
|
let scrapedHtml = $state(''); // only set by the live-preview fallback
|
|
|
|
|
let html = $derived(scrapedHtml || data.html || '');
|
|
|
|
|
let fetchingContent = $state(false);
|
|
|
|
|
let fetchError = $state('');
|
|
|
|
|
let audioProRequired = $state(false);
|
|
|
|
|
|
|
|
|
|
@@ -202,8 +203,8 @@
|
|
|
|
|
{ code: 'pt', label: 'PT' },
|
|
|
|
|
{ code: 'fr', label: 'FR' }
|
|
|
|
|
];
|
|
|
|
|
let translationStatus = $state(untrack(() => data.translationStatus ?? 'idle'));
|
|
|
|
|
let translatingLang = $state(untrack(() => data.lang ?? ''));
|
|
|
|
|
let translationStatus = $state(data.translationStatus ?? 'idle');
|
|
|
|
|
let translatingLang = $state(data.lang ?? '');
|
|
|
|
|
let pollingTimer: ReturnType<typeof setTimeout> | null = null;
|
|
|
|
|
|
|
|
|
|
function currentLang() {
|
|
|
|
|
@@ -293,6 +294,7 @@
|
|
|
|
|
|
|
|
|
|
// If the normal path returned no content, fall back to live preview scrape
|
|
|
|
|
if (!data.isPreview && !data.html) {
|
|
|
|
|
fetchingContent = true;
|
|
|
|
|
(async () => {
|
|
|
|
|
try {
|
|
|
|
|
const res = await fetch(
|
|
|
|
|
@@ -302,7 +304,7 @@
|
|
|
|
|
const d = (await res.json()) as { text?: string };
|
|
|
|
|
if (d.text) {
|
|
|
|
|
const { marked } = await import('marked');
|
|
|
|
|
html = await marked(d.text, { async: true });
|
|
|
|
|
scrapedHtml = await marked(d.text, { async: true });
|
|
|
|
|
} else {
|
|
|
|
|
fetchError = m.reader_audio_error();
|
|
|
|
|
}
|
|
|
|
|
|