diff --git a/src/interface/components/DisclaimerModal.svelte b/src/interface/components/DisclaimerModal.svelte new file mode 100644 index 00000000..49bd4c87 --- /dev/null +++ b/src/interface/components/DisclaimerModal.svelte @@ -0,0 +1,73 @@ + + +
{ + if (e.target === e.currentTarget) onCancel(); + }} + onkeydown={(e) => { + if (e.key === 'Escape') onCancel(); + }} + role="button" + tabindex="-1" + transition:fade={{ duration: 150 }} +> + +
e.stopPropagation()} + onkeydown={(e) => e.stopPropagation()} + > +

+ {title} +

+ +
+ {message} +
+ +
+ + +
+
+
+ diff --git a/src/interface/pages/settings.svelte b/src/interface/pages/settings.svelte index f349d450..3ecdad60 100644 --- a/src/interface/pages/settings.svelte +++ b/src/interface/pages/settings.svelte @@ -15,9 +15,12 @@ //import { OpenMinecraftServerPopup } from "@/seqta/utils/Openers/OpenMinecraftServerPopup"; import ColourPicker from "../components/ColourPicker.svelte"; + import DisclaimerModal from "../components/DisclaimerModal.svelte"; import { settingsPopup } from "../hooks/SettingsPopup"; let devModeSequence = ""; + let showDisclaimerModal = $state(false); + let disclaimerCallbacks = $state<{ onConfirm: () => void, onCancel: () => void } | null>(null); const handleDevModeToggle = () => { const handleKeyDown = (event: KeyboardEvent) => { @@ -63,6 +66,11 @@ let { standalone } = $props<{ standalone?: boolean }>(); let showColourPicker = $state(false); + const showDisclaimer = (onConfirm: () => void, onCancel: () => void) => { + disclaimerCallbacks = { onConfirm, onCancel }; + showDisclaimerModal = true; + }; + onMount(async () => { settingsPopup.addListener(() => { showColourPicker = false; @@ -271,7 +279,7 @@ { title: "Settings", Content: Settings, - props: { showColourPicker: openColourPicker }, + props: { showColourPicker: openColourPicker, showDisclaimer }, }, { title: "Shortcuts", Content: Shortcuts }, { title: "Themes", Content: Theme }, @@ -287,3 +295,27 @@ /> {/if} + +{#if showDisclaimerModal && disclaimerCallbacks} + { + disclaimerCallbacks?.onConfirm(); + showDisclaimerModal = false; + disclaimerCallbacks = null; + }} + onCancel={() => { + disclaimerCallbacks?.onCancel(); + showDisclaimerModal = false; + disclaimerCallbacks = null; + }} + /> +{/if} diff --git a/src/interface/pages/settings/general.svelte b/src/interface/pages/settings/general.svelte index c9ddae18..23936824 100644 --- a/src/interface/pages/settings/general.svelte +++ b/src/interface/pages/settings/general.svelte @@ -92,7 +92,10 @@ loadPluginSettings(); }) - const { showColourPicker } = $props<{ showColourPicker: () => void }>(); + const { showColourPicker, showDisclaimer } = $props<{ + showColourPicker: () => void; + showDisclaimer: (onConfirm: () => void, onCancel: () => void) => void; + }>(); {#snippet Setting({ title, description, Component, props }: SettingsList) } @@ -224,7 +227,20 @@
updatePluginSetting(plugin.pluginId, 'enabled', value)} + onChange={async (value) => { + if (plugin.pluginId === 'assessments-average' && value === true) { + showDisclaimer( + async () => { + await updatePluginSetting(plugin.pluginId, 'enabled', true); + }, + () => { + // Do nothing on cancel + } + ); + return; + } + await updatePluginSetting(plugin.pluginId, 'enabled', value); + }} />
diff --git a/src/seqta/utils/Openers/OpenPrivacyNotification.ts b/src/seqta/utils/Openers/OpenPrivacyNotification.ts index aa2d7432..fa573fc9 100644 --- a/src/seqta/utils/Openers/OpenPrivacyNotification.ts +++ b/src/seqta/utils/Openers/OpenPrivacyNotification.ts @@ -6,8 +6,8 @@ export function showPrivacyNotification() { const lastUpdated = "2025-12-19"; if (document.getElementById("whatsnewbk")) return; - //if (settingsState.privacyStatementShown) return; - //if (settingsState.privacyStatementLastUpdated && new Date(settingsState.privacyStatementLastUpdated) > new Date(lastUpdated)) return; + if (settingsState.privacyStatementShown) return; + if (settingsState.privacyStatementLastUpdated && new Date(settingsState.privacyStatementLastUpdated) > new Date(lastUpdated)) return; const header = stringToHTML( /* html */