From 20bbda30f8aa9d8d56c9cf65c98dc51ccc78f8a2 Mon Sep 17 00:00:00 2001 From: moumar Date: Thu, 23 Oct 2025 23:15:21 +0200 Subject: [PATCH 1/4] Add setting to toggle pattern auto-start on pattern change --- website/src/repl/components/panel/PatternsTab.jsx | 12 ++++++------ website/src/repl/components/panel/SettingsTab.jsx | 6 ++++++ website/src/settings.mjs | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/website/src/repl/components/panel/PatternsTab.jsx b/website/src/repl/components/panel/PatternsTab.jsx index 8e2b75b9..51946144 100644 --- a/website/src/repl/components/panel/PatternsTab.jsx +++ b/website/src/repl/components/panel/PatternsTab.jsx @@ -79,13 +79,11 @@ const updateCodeWindow = (context, patternData, reset = false) => { context.handleUpdate(patternData, reset); }; -const autoResetPatternOnChange = !isUdels(); - function UserPatterns({ context }) { const activePattern = useActivePattern(); const viewingPatternStore = useViewingPatternData(); const viewingPatternData = parseJSON(viewingPatternStore); - const { userPatterns, patternFilter } = useSettings(); + const { userPatterns, patternFilter, patternAutoStart } = useSettings(); const viewingPatternID = viewingPatternData?.id; return (
@@ -139,7 +137,7 @@ function UserPatterns({ context }) { updateCodeWindow( context, { ...userPatterns[id], collection: userPattern.collection }, - autoResetPatternOnChange, + patternAutoStart, ) } patterns={userPatterns} @@ -188,6 +186,7 @@ function FeaturedPatterns({ context }) { const examplePatterns = useExamplePatterns(); const collections = examplePatterns.collections; const patterns = collections.get(patternFilterName.featured); + const { patternAutoStart } = useSettings(); return ( { @@ -213,13 +212,14 @@ function LatestPatterns({ context }) { const examplePatterns = useExamplePatterns(); const collections = examplePatterns.collections; const patterns = collections.get(patternFilterName.public); + const { patternAutoStart } = useSettings(); return ( { - updateCodeWindow(context, { ...patterns[id], collection: patternFilterName.public }, autoResetPatternOnChange); + updateCodeWindow(context, { ...patterns[id], collection: patternFilterName.public }, patternAutoStart); }} paginationOnChange={async (pageNum) => { await loadAndSetPublicPatterns(pageNum - 1); diff --git a/website/src/repl/components/panel/SettingsTab.jsx b/website/src/repl/components/panel/SettingsTab.jsx index 80daef01..c898609d 100644 --- a/website/src/repl/components/panel/SettingsTab.jsx +++ b/website/src/repl/components/panel/SettingsTab.jsx @@ -112,6 +112,7 @@ export function SettingsTab({ started }) { multiChannelOrbits, isTabIndentationEnabled, isMultiCursorEnabled, + patternAutoStart } = useSettings(); const shouldAlwaysSync = isUdels(); const canChangeAudioDevice = AudioContext.prototype.setSinkId != null; @@ -304,6 +305,11 @@ export function SettingsTab({ started }) { onChange={(cbEvent) => settingsMap.setKey('isCSSAnimationDisabled', cbEvent.target.checked)} value={isCSSAnimationDisabled} /> + settingsMap.setKey('patternAutoStart', cbEvent.target.checked)} + value={patternAutoStart} + /> Try clicking the logo in the top left! diff --git a/website/src/settings.mjs b/website/src/settings.mjs index 9365a6db..bbf89355 100644 --- a/website/src/settings.mjs +++ b/website/src/settings.mjs @@ -96,6 +96,7 @@ export function useSettings() { isPanelOpen: parseBoolean(state.isPanelOpen), userPatterns: userPatterns, multiChannelOrbits: parseBoolean(state.multiChannelOrbits), + patternAutoStart: isUdels() ? false : parseBoolean(state.patternAutoStart) }; } From fddf2ff2a76eb04f900f187642e6c2e978d97df9 Mon Sep 17 00:00:00 2001 From: moumar Date: Sun, 26 Oct 2025 14:06:31 +0100 Subject: [PATCH 2/4] Set pattern auto-start to true by default --- website/src/settings.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/settings.mjs b/website/src/settings.mjs index bbf89355..ef074b78 100644 --- a/website/src/settings.mjs +++ b/website/src/settings.mjs @@ -96,7 +96,7 @@ export function useSettings() { isPanelOpen: parseBoolean(state.isPanelOpen), userPatterns: userPatterns, multiChannelOrbits: parseBoolean(state.multiChannelOrbits), - patternAutoStart: isUdels() ? false : parseBoolean(state.patternAutoStart) + patternAutoStart: isUdels() ? false : state.patternAutoStart === undefined ? true : parseBoolean(state.patternAutoStart) }; } From fcd83cce5556541c4fcb72e05a2468ef902af157 Mon Sep 17 00:00:00 2001 From: moumar Date: Sun, 26 Oct 2025 14:07:36 +0100 Subject: [PATCH 3/4] Re-evaluate pattern if activated --- website/src/repl/components/panel/PatternsTab.jsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/website/src/repl/components/panel/PatternsTab.jsx b/website/src/repl/components/panel/PatternsTab.jsx index 51946144..38b7294d 100644 --- a/website/src/repl/components/panel/PatternsTab.jsx +++ b/website/src/repl/components/panel/PatternsTab.jsx @@ -133,13 +133,17 @@ function UserPatterns({ context }) {
{/* {patternFilter === patternFilterName.user && ( */} + onClick={(id) => { updateCodeWindow( context, { ...userPatterns[id], collection: userPattern.collection }, patternAutoStart, ) - } + + if (context.started && activePattern === id) { + context.handleEvaluate() + } + }} patterns={userPatterns} started={context.started} activePattern={activePattern} From 809eb7132c43cb4ea6e7c22511f9d314bd403498 Mon Sep 17 00:00:00 2001 From: moumar Date: Sun, 2 Nov 2025 15:20:31 +0100 Subject: [PATCH 4/4] codeformat --- website/src/repl/components/panel/PatternsTab.jsx | 14 +++----------- website/src/repl/components/panel/SettingsTab.jsx | 2 +- website/src/settings.mjs | 6 +++++- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/website/src/repl/components/panel/PatternsTab.jsx b/website/src/repl/components/panel/PatternsTab.jsx index 38b7294d..5e0d50e7 100644 --- a/website/src/repl/components/panel/PatternsTab.jsx +++ b/website/src/repl/components/panel/PatternsTab.jsx @@ -134,14 +134,10 @@ function UserPatterns({ context }) { {/* {patternFilter === patternFilterName.user && ( */} { - updateCodeWindow( - context, - { ...userPatterns[id], collection: userPattern.collection }, - patternAutoStart, - ) + updateCodeWindow(context, { ...userPatterns[id], collection: userPattern.collection }, patternAutoStart); if (context.started && activePattern === id) { - context.handleEvaluate() + context.handleEvaluate(); } }} patterns={userPatterns} @@ -197,11 +193,7 @@ function FeaturedPatterns({ context }) { context={context} initialPage={featuredPageNum} patternOnClick={(id) => { - updateCodeWindow( - context, - { ...patterns[id], collection: patternFilterName.featured }, - patternAutoStart, - ); + updateCodeWindow(context, { ...patterns[id], collection: patternFilterName.featured }, patternAutoStart); }} paginationOnChange={async (pageNum) => { await loadAndSetFeaturedPatterns(pageNum - 1); diff --git a/website/src/repl/components/panel/SettingsTab.jsx b/website/src/repl/components/panel/SettingsTab.jsx index c898609d..85991f55 100644 --- a/website/src/repl/components/panel/SettingsTab.jsx +++ b/website/src/repl/components/panel/SettingsTab.jsx @@ -112,7 +112,7 @@ export function SettingsTab({ started }) { multiChannelOrbits, isTabIndentationEnabled, isMultiCursorEnabled, - patternAutoStart + patternAutoStart, } = useSettings(); const shouldAlwaysSync = isUdels(); const canChangeAudioDevice = AudioContext.prototype.setSinkId != null; diff --git a/website/src/settings.mjs b/website/src/settings.mjs index ef074b78..7c62b0de 100644 --- a/website/src/settings.mjs +++ b/website/src/settings.mjs @@ -96,7 +96,11 @@ export function useSettings() { isPanelOpen: parseBoolean(state.isPanelOpen), userPatterns: userPatterns, multiChannelOrbits: parseBoolean(state.multiChannelOrbits), - patternAutoStart: isUdels() ? false : state.patternAutoStart === undefined ? true : parseBoolean(state.patternAutoStart) + patternAutoStart: isUdels() + ? false + : state.patternAutoStart === undefined + ? true + : parseBoolean(state.patternAutoStart), }; }