diff --git a/src/lib/components/ShareSelector.svelte b/src/lib/components/ShareSelector.svelte
new file mode 100644
index 000000000..da15c65da
--- /dev/null
+++ b/src/lib/components/ShareSelector.svelte
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/components/TextSelectionToolbar.svelte b/src/lib/components/TextSelectionToolbar.svelte
index 37a4a2661..9490f4d8d 100644
--- a/src/lib/components/TextSelectionToolbar.svelte
+++ b/src/lib/components/TextSelectionToolbar.svelte
@@ -7,7 +7,6 @@ TODO:
-> Share
-> Play
-> Play Repeat
- -> Verse On Image
- Add note dialog
- Add highlight colors
-->
@@ -22,6 +21,8 @@ TODO:
import { shareText } from '$lib/data/share';
import {
audioActive,
+ modal,
+ ModalType,
refs,
s,
selectedVerses,
@@ -131,18 +132,22 @@ TODO:
}
async function shareSelectedText() {
- const book = $selectedVerses[0].book;
- const reference = selectedVerses.getCompositeReference();
- const text = await selectedVerses.getCompositeText();
- const bookCol = $selectedVerses[0].collection;
- const fullBook = getBook({ collection: bookCol, book: book });
- const bookAbbrev = fullBook?.abbreviation ?? fullBook?.name;
- shareText(
- scriptureConfig.name ?? '',
- scriptureConfig.name + '\n\n' + text + '\n' + reference,
- book + '.txt'
- );
- logShareContent('Text', bookCol, bookAbbrev ?? '', reference);
+ if ($refs.hasAudio?.timingFile) {
+ modal.open(ModalType.Share);
+ } else {
+ const book = $selectedVerses[0].book;
+ const reference = selectedVerses.getCompositeReference();
+ const text = await selectedVerses.getCompositeText();
+ const bookCol = $selectedVerses[0].collection;
+ const fullBook = getBook({ collection: bookCol, book: book });
+ const bookAbbrev = fullBook?.abbreviation ?? fullBook?.name;
+ shareText(
+ scriptureConfig.name ?? '',
+ scriptureConfig.name + '\n\n' + text + '\n' + reference,
+ book + '.txt'
+ );
+ logShareContent('Text', bookCol, bookAbbrev ?? '', reference);
+ }
}
const backgroundColor = $derived($s['ui.bar.text-select']['background-color']);
diff --git a/src/lib/components/VerseOnImage.svelte b/src/lib/components/VerseOnImage.svelte
index 4f457f1e6..7244af32c 100644
--- a/src/lib/components/VerseOnImage.svelte
+++ b/src/lib/components/VerseOnImage.svelte
@@ -647,7 +647,7 @@ The verse on image component.
downloadProgress = 0;
await audioCtx?.close();
}
- } //Most of this is AI-generated, so serious testing is needed. I've done a lot of testing, but it would be good to make sure there aren't subtle problems with this code.
+ }
// EditorTabs centering feature:
diff --git a/src/lib/data/stores/view.ts b/src/lib/data/stores/view.ts
index c0f23db52..30e1d9393 100644
--- a/src/lib/data/stores/view.ts
+++ b/src/lib/data/stores/view.ts
@@ -32,8 +32,8 @@ export const ModalType = {
Font: 'font',
StopPlan: 'stop-plan',
PlaybackSpeed: 'playback-speed',
- VerseOnImage: 'verse-on-image',
- Download: 'download'
+ Download: 'download',
+ Share: 'share'
} as const;
export type ModalType = (typeof ModalType)[keyof typeof ModalType];
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 1b5c7e6b4..dad15e0ab 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -9,6 +9,7 @@
import FontSelector from '$lib/components/FontSelector.svelte';
import NoteDialog from '$lib/components/NoteDialog.svelte';
import PlanStopDialog from '$lib/components/PlanStopDialog.svelte';
+ import ShareSelector from '$lib/components/ShareSelector.svelte';
import Sidebar from '$lib/components/Sidebar.svelte';
import TextAppearanceSelector from '$lib/components/TextAppearanceSelector.svelte';
import catalog from '$lib/data/catalogData';
@@ -89,6 +90,9 @@
case ModalType.PlaybackSpeed:
audioPlaybackSpeed?.showModal();
break;
+ case ModalType.Share:
+ shareSelector?.showModal();
+ break;
}
});
modal.clear();
@@ -108,6 +112,7 @@
let textAppearanceSelector: TextAppearanceSelector | undefined = $state();
let collectionSelector: CollectionSelector | undefined = $state();
let fontSelector: FontSelector | undefined = $state();
+ let shareSelector: ShareSelector | undefined = $state();
let noteDialog: NoteDialog | undefined = $state();
let planStopDialog: PlanStopDialog | undefined = $state(undefined);
let planStopId: string = $state('');
@@ -156,6 +161,7 @@
/>
+