mirror of https://github.com/vuejs/core.git
chore(sfc-playground): editor can modify whether auto-save is enabled (#11428)
This commit is contained in:
parent
f599321a65
commit
d0b513eb46
|
@ -13,7 +13,7 @@
|
||||||
"vite": "catalog:"
|
"vite": "catalog:"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/repl": "^4.3.1",
|
"@vue/repl": "^4.4.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"jszip": "^3.10.1",
|
"jszip": "^3.10.1",
|
||||||
"vue": "workspace:*"
|
"vue": "workspace:*"
|
||||||
|
|
|
@ -14,6 +14,12 @@ setVH()
|
||||||
|
|
||||||
const useSSRMode = ref(false)
|
const useSSRMode = ref(false)
|
||||||
|
|
||||||
|
const AUTO_SAVE_STORAGE_KEY = 'vue-sfc-playground-auto-save'
|
||||||
|
const initAutoSave: boolean = JSON.parse(
|
||||||
|
localStorage.getItem(AUTO_SAVE_STORAGE_KEY) ?? 'true',
|
||||||
|
)
|
||||||
|
const autoSave = ref(initAutoSave)
|
||||||
|
|
||||||
const { productionMode, vueVersion, importMap } = useVueImportMap({
|
const { productionMode, vueVersion, importMap } = useVueImportMap({
|
||||||
runtimeDev: import.meta.env.PROD
|
runtimeDev: import.meta.env.PROD
|
||||||
? `${location.origin}/vue.runtime.esm-browser.js`
|
? `${location.origin}/vue.runtime.esm-browser.js`
|
||||||
|
@ -89,6 +95,11 @@ function toggleSSR() {
|
||||||
useSSRMode.value = !useSSRMode.value
|
useSSRMode.value = !useSSRMode.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleAutoSave() {
|
||||||
|
autoSave.value = !autoSave.value
|
||||||
|
localStorage.setItem(AUTO_SAVE_STORAGE_KEY, String(autoSave.value))
|
||||||
|
}
|
||||||
|
|
||||||
function reloadPage() {
|
function reloadPage() {
|
||||||
replRef.value?.reload()
|
replRef.value?.reload()
|
||||||
}
|
}
|
||||||
|
@ -111,9 +122,11 @@ onMounted(() => {
|
||||||
:store="store"
|
:store="store"
|
||||||
:prod="productionMode"
|
:prod="productionMode"
|
||||||
:ssr="useSSRMode"
|
:ssr="useSSRMode"
|
||||||
|
:autoSave="autoSave"
|
||||||
@toggle-theme="toggleTheme"
|
@toggle-theme="toggleTheme"
|
||||||
@toggle-prod="toggleProdMode"
|
@toggle-prod="toggleProdMode"
|
||||||
@toggle-ssr="toggleSSR"
|
@toggle-ssr="toggleSSR"
|
||||||
|
@toggle-autosave="toggleAutoSave"
|
||||||
@reload-page="reloadPage"
|
@reload-page="reloadPage"
|
||||||
/>
|
/>
|
||||||
<Repl
|
<Repl
|
||||||
|
@ -123,6 +136,7 @@ onMounted(() => {
|
||||||
@keydown.ctrl.s.prevent
|
@keydown.ctrl.s.prevent
|
||||||
@keydown.meta.s.prevent
|
@keydown.meta.s.prevent
|
||||||
:ssr="useSSRMode"
|
:ssr="useSSRMode"
|
||||||
|
:autoSave="autoSave"
|
||||||
:store="store"
|
:store="store"
|
||||||
:showCompileOutput="true"
|
:showCompileOutput="true"
|
||||||
:autoResize="true"
|
:autoResize="true"
|
||||||
|
|
|
@ -14,11 +14,13 @@ const props = defineProps<{
|
||||||
store: ReplStore
|
store: ReplStore
|
||||||
prod: boolean
|
prod: boolean
|
||||||
ssr: boolean
|
ssr: boolean
|
||||||
|
autoSave: boolean
|
||||||
}>()
|
}>()
|
||||||
const emit = defineEmits([
|
const emit = defineEmits([
|
||||||
'toggle-theme',
|
'toggle-theme',
|
||||||
'toggle-ssr',
|
'toggle-ssr',
|
||||||
'toggle-prod',
|
'toggle-prod',
|
||||||
|
'toggle-autosave',
|
||||||
'reload-page',
|
'reload-page',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -107,6 +109,14 @@ function toggleDark() {
|
||||||
>
|
>
|
||||||
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
|
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
title="Toggle editor auto save mode"
|
||||||
|
class="toggle-autosave"
|
||||||
|
:class="{ enabled: autoSave }"
|
||||||
|
@click="$emit('toggle-autosave')"
|
||||||
|
>
|
||||||
|
<span>{{ autoSave ? 'AutoSave ON' : 'AutoSave OFF' }}</span>
|
||||||
|
</button>
|
||||||
<button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
|
<button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
|
||||||
<Sun class="light" />
|
<Sun class="light" />
|
||||||
<Moon class="dark" />
|
<Moon class="dark" />
|
||||||
|
@ -199,7 +209,8 @@ h1 img {
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-prod span,
|
.toggle-prod span,
|
||||||
.toggle-ssr span {
|
.toggle-ssr span,
|
||||||
|
.toggle-autosave span {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 4px 6px;
|
padding: 4px 6px;
|
||||||
|
@ -214,11 +225,13 @@ h1 img {
|
||||||
background: var(--purple);
|
background: var(--purple);
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-ssr span {
|
.toggle-ssr span,
|
||||||
|
.toggle-autosave span {
|
||||||
background-color: var(--btn-bg);
|
background-color: var(--btn-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-ssr.enabled span {
|
.toggle-ssr.enabled span,
|
||||||
|
.toggle-autosave.enabled span {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: var(--green);
|
background-color: var(--green);
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,8 +204,8 @@ importers:
|
||||||
packages-private/sfc-playground:
|
packages-private/sfc-playground:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/repl':
|
'@vue/repl':
|
||||||
specifier: ^4.3.1
|
specifier: ^4.4.0
|
||||||
version: 4.3.1
|
version: 4.4.0
|
||||||
file-saver:
|
file-saver:
|
||||||
specifier: ^2.0.5
|
specifier: ^2.0.5
|
||||||
version: 2.0.5
|
version: 2.0.5
|
||||||
|
@ -1300,8 +1300,8 @@ packages:
|
||||||
resolution: {integrity: sha512-oTyUE+QHIzLw2PpV14GD/c7EohDyP64xCniWTcqcEmTd699eFqTIwOmtDYjcO1j3QgdXoJEoWv1/cCdLrRoOfg==}
|
resolution: {integrity: sha512-oTyUE+QHIzLw2PpV14GD/c7EohDyP64xCniWTcqcEmTd699eFqTIwOmtDYjcO1j3QgdXoJEoWv1/cCdLrRoOfg==}
|
||||||
engines: {node: '>= 0.12.0'}
|
engines: {node: '>= 0.12.0'}
|
||||||
|
|
||||||
'@vue/repl@4.3.1':
|
'@vue/repl@4.4.0':
|
||||||
resolution: {integrity: sha512-yzUuLhR+MqOGBDES+xbnm27SfPIEv7XKwhFWWpQhL7HUbXj77GVu+x50Q56JhCWWKTUJzk9MOvAn7bSgdvB5og==}
|
resolution: {integrity: sha512-caOSbxYOIY7AOYYqc0SJe8BKaFhwmLy3v3wpxWyzumCMH3W2rk6/j0MjZ+9D8dK0zefhJ2dWl+oetg6HmDQqxg==}
|
||||||
|
|
||||||
'@zeit/schemas@2.36.0':
|
'@zeit/schemas@2.36.0':
|
||||||
resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==}
|
resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==}
|
||||||
|
@ -4161,7 +4161,7 @@ snapshots:
|
||||||
|
|
||||||
'@vue/consolidate@1.0.0': {}
|
'@vue/consolidate@1.0.0': {}
|
||||||
|
|
||||||
'@vue/repl@4.3.1': {}
|
'@vue/repl@4.4.0': {}
|
||||||
|
|
||||||
'@zeit/schemas@2.36.0': {}
|
'@zeit/schemas@2.36.0': {}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue