]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
workflow: add prod/dev toggle to sfc playground
authorEvan You <yyx990803@gmail.com>
Tue, 17 May 2022 04:10:29 +0000 (12:10 +0800)
committerEvan You <yyx990803@gmail.com>
Tue, 17 May 2022 04:10:29 +0000 (12:10 +0800)
packages/sfc-playground/package.json
packages/sfc-playground/src/App.vue
packages/sfc-playground/src/Header.vue
pnpm-lock.yaml

index 0fe609b05980fa9b5d8a3331c830ec46489648f7..a2584a7f8dbc36653a1db0eb0b28f3d18ca87dfd 100644 (file)
@@ -13,7 +13,7 @@
   },
   "dependencies": {
     "vue": "3.2.33",
-    "@vue/repl": "^1.0.0",
+    "@vue/repl": "^1.1.0",
     "file-saver": "^2.0.5",
     "jszip": "^3.6.0"
   }
index df91bb5af74bc5e25f7fbc7467c1d643890a58ec..95a1d9552d83f95695f11c1eff5f380c6beac789 100644 (file)
@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import Header from './Header.vue'
 import { Repl, ReplStore } from '@vue/repl'
-import { watchEffect } from 'vue'
+import { ref, watchEffect } from 'vue'
 
 const setVH = () => {
   document.documentElement.style.setProperty('--vh', window.innerHeight + `px`)
@@ -9,8 +9,11 @@ const setVH = () => {
 window.addEventListener('resize', setVH)
 setVH()
 
+const hash = location.hash.slice(1)
+const useDevMode = ref(hash.startsWith('__DEV__'))
+
 const store = new ReplStore({
-  serializedState: location.hash.slice(1),
+  serializedState: useDevMode.value ? hash.slice(7) : hash,
   defaultVueRuntimeURL: import.meta.env.PROD
     ? `${location.origin}/vue.runtime.esm-browser.js`
     : `${location.origin}/src/vue-dev-proxy`
@@ -19,16 +22,28 @@ const store = new ReplStore({
 // enable experimental features
 const sfcOptions = {
   script: {
+    inlineTemplate: !useDevMode.value,
     reactivityTransform: true
   }
 }
 
 // persist state
-watchEffect(() => history.replaceState({}, '', store.serialize()))
+watchEffect(() => {
+  const newHash = store
+    .serialize()
+    .replace(/^#/, useDevMode.value ? `#__DEV__` : `#`)
+  history.replaceState({}, '', newHash)
+})
+
+function toggleDevMode() {
+  const dev = (useDevMode.value = !useDevMode.value)
+  sfcOptions.script.inlineTemplate = !dev
+  store.setFiles(store.getFiles())
+}
 </script>
 
 <template>
-  <Header :store="store" />
+  <Header :store="store" :dev="useDevMode" @toggle-dev="toggleDevMode" />
   <Repl
     @keydown.ctrl.s.prevent
     @keydown.meta.s.prevent
index fe65d8af7aebd65dfac05669cfc9cf32e0b1ffa8..8cf4966c56d129c07e8ea4abf583254111e589d3 100644 (file)
@@ -8,7 +8,8 @@ import Download from './icons/Download.vue'
 import GitHub from './icons/GitHub.vue'
 
 // @ts-ignore
-const { store } = defineProps(['store'])
+const props = defineProps(['store', 'dev'])
+const { store } = props
 
 const currentCommit = __COMMIT__
 const activeVersion = ref(`@${currentCommit}`)
@@ -112,6 +113,14 @@ async function fetchVersions(): Promise<string[]> {
           </li>
         </ul>
       </div>
+      <button
+        title="Toggle development production mode"
+        class="toggle-dev"
+        :class="{ dev }"
+        @click="$emit('toggle-dev')"
+      >
+        {{ dev ? 'DEV' : 'PROD' }}
+      </button>
       <button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
         <Sun class="light" />
         <Moon class="dark" />
@@ -126,13 +135,10 @@ async function fetchVersions(): Promise<string[]> {
       >
         <Download />
       </button>
-      <button
-          title="View on GitHub"
-          class="github"
-      >
+      <button title="View on GitHub" class="github">
         <a
-            href="https://github.com/vuejs/core/tree/main/packages/sfc-playground"
-            target="_blank"
+          href="https://github.com/vuejs/core/tree/main/packages/sfc-playground"
+          target="_blank"
         >
           <GitHub />
         </a>
@@ -228,6 +234,16 @@ h1 img {
   top: 22px;
 }
 
+.toggle-dev {
+  color: #f07178;
+  font-size: 12px;
+  line-height: var(--nav-height);
+}
+
+.toggle-dev.dev {
+  color: #c3e88d;
+}
+
 .toggle-dark svg {
   width: 18px;
   height: 18px;
index 680005bef3641fcdeff6d10526f115a04052c6b9..ee0c20ef98360b329aaa132c7534e2e44d7af81d 100644 (file)
@@ -242,13 +242,13 @@ importers:
   packages/sfc-playground:
     specifiers:
       '@vitejs/plugin-vue': ^1.10.2
-      '@vue/repl': ^1.0.0
+      '@vue/repl': ^1.1.0
       file-saver: ^2.0.5
       jszip: ^3.6.0
       vite: ^2.9.8
       vue: 3.2.33
     dependencies:
-      '@vue/repl': 1.0.0_vue@packages+vue
+      '@vue/repl': 1.1.0_vue@packages+vue
       file-saver: 2.0.5
       jszip: 3.7.1
       vue: link:../vue
@@ -1349,8 +1349,8 @@ packages:
     engines: {node: '>= 0.12.0'}
     dev: true
 
-  /@vue/repl/1.0.0_vue@packages+vue:
-    resolution: {integrity: sha512-cDcQuWKZuA0Y0JYEpiQS/ZAEGP/RrfkcK+zKm5H8tUjfD8XIxYHY+sQGoY6FSkz/gAOQJocrsaPgt7ddKL0inQ==}
+  /@vue/repl/1.1.0_vue@packages+vue:
+    resolution: {integrity: sha512-qmu05PZdBtdkSacQgRdqmOnRbzJZlryee/d6OFZfRMwthHI8Ek3GLvTXkSAzhjgWXdENBPOBIoYW3gOZTVfNzA==}
     peerDependencies:
       vue: ^3.2.13
     dependencies: