diff --git a/website/src/repl/components/panel/SettingsTab.jsx b/website/src/repl/components/panel/SettingsTab.jsx
index b243e8516..f46fa661c 100644
--- a/website/src/repl/components/panel/SettingsTab.jsx
+++ b/website/src/repl/components/panel/SettingsTab.jsx
@@ -115,7 +115,7 @@ export function SettingsTab({ started }) {
isTabIndentationEnabled,
isMultiCursorEnabled,
patternAutoStart,
- prebakeScript,
+ includePrebakeScriptInShare,
} = useSettings();
const shouldAlwaysSync = isUdels();
const canChangeAudioDevice = AudioContext.prototype.setSinkId != null;
@@ -207,7 +207,15 @@ export function SettingsTab({ started }) {
/>
-
+
+
+ settingsMap.setKey('includePrebakeScriptInShare', cbEvent.target.checked)}
+ value={includePrebakeScriptInShare}
+ />
+
+
shareCode(replState.code);
+ const handleShare = async () => {
+ let code = replState.code;
+ if (includePrebakeScriptInShare) {
+ code = prebakeScript + '\n' + code;
+ }
+ shareCode(code);
+ };
const context = {
started,
pending,
diff --git a/website/src/repl/util.mjs b/website/src/repl/util.mjs
index ac27158f4..4a7cb26a8 100644
--- a/website/src/repl/util.mjs
+++ b/website/src/repl/util.mjs
@@ -1,11 +1,10 @@
-import { evalScope, hash2code, logger } from '@strudel/core';
+import { code2hash, evalScope, hash2code, logger } from '@strudel/core';
import { settingPatterns } from '../settings.mjs';
import { setVersionDefaults } from '@strudel/webaudio';
import { getMetadata } from '../metadata_parser';
import { isTauri } from '../tauri.mjs';
import './Repl.css';
import { createClient } from '@supabase/supabase-js';
-import { nanoid } from 'nanoid';
import { writeText } from '@tauri-apps/plugin-clipboard-manager';
import { $featuredPatterns /* , loadDBPatterns */ } from '@src/user_pattern_utils.mjs';
@@ -109,9 +108,8 @@ export function confirmDialog(msg) {
});
}
-let lastShared;
-
//RIP due to SPAM
+// let lastShared;
// export async function shareCode(codeToShare) {
// // const codeToShare = activeCode || code;
// if (lastShared === codeToShare) {
@@ -146,9 +144,10 @@ let lastShared;
// });
// }
-export async function shareCode() {
+export async function shareCode(codeToShare) {
try {
- const shareUrl = window.location.href;
+ const hash = '#' + code2hash(codeToShare);
+ const shareUrl = window.location.origin + window.location.pathname + hash;
if (isTauri()) {
await writeText(shareUrl);
} else {
diff --git a/website/src/settings.mjs b/website/src/settings.mjs
index a1ddc90cb..8ec7d455a 100644
--- a/website/src/settings.mjs
+++ b/website/src/settings.mjs
@@ -51,6 +51,7 @@ export const defaultSettings = {
isCSSAnimationDisabled: false,
maxPolyphony: 128,
multiChannelOrbits: false,
+ includePrebakeScriptInShare: true,
};
let search = null;
@@ -97,6 +98,7 @@ export function useSettings() {
isPanelOpen: parseBoolean(state.isPanelOpen),
userPatterns: userPatterns,
multiChannelOrbits: parseBoolean(state.multiChannelOrbits),
+ includePrebakeScriptInShare: parseBoolean(state.includePrebakeScriptInShare),
patternAutoStart: isUdels()
? false
: state.patternAutoStart === undefined