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 @@ /> +