quiz EN-KO
This commit is contained in:
1 parent
2b62c9b9e0
commit
cfb455d6ad
1 file changed
+93
-13
@@ -14,19 +14,21 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<span v-if="v.audio">
|
<span :class="isKoFirst ? '' : 'spoiler'">
|
||||||
{{ v.ko }}
|
<span v-if="v.audio">
|
||||||
<AudioButton :src="v.audio" />
|
{{ v.ko }}
|
||||||
|
<AudioButton :src="v.audio" />
|
||||||
|
</span>
|
||||||
|
<TTS v-else>
|
||||||
|
{{ v.ko }}
|
||||||
|
</TTS>
|
||||||
</span>
|
</span>
|
||||||
<TTS v-else>
|
|
||||||
{{ v.ko }}
|
|
||||||
</TTS>
|
|
||||||
<span>{{ " = " }}</span>
|
<span>{{ " = " }}</span>
|
||||||
<span class="spoiler"> {{ v.en }} </span>
|
<span :class="isKoFirst ? 'spoiler' : ''"> {{ v.en }} </span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<details v-if="example" ref="sdetails">
|
<details v-if="example" ref="sdetails">
|
||||||
<summary>
|
<summary :class="isKoFirst ? '' : 'spoiler'">
|
||||||
<span v-if="example.audio">
|
<span v-if="example.audio">
|
||||||
{{ example.ko }}
|
{{ example.ko }}
|
||||||
<AudioButton :src="example.audio" />
|
<AudioButton :src="example.audio" />
|
||||||
@@ -36,6 +38,10 @@
|
|||||||
</TTS>
|
</TTS>
|
||||||
</summary>
|
</summary>
|
||||||
<span>{{ example.en }}</span>
|
<span>{{ example.en }}</span>
|
||||||
|
|
||||||
|
<blockquote v-if="v.notes">
|
||||||
|
{{ v.notes }}
|
||||||
|
</blockquote>
|
||||||
</details>
|
</details>
|
||||||
</nav>
|
</nav>
|
||||||
<details :class="$style.options">
|
<details :class="$style.options">
|
||||||
@@ -47,11 +53,25 @@
|
|||||||
</label>
|
</label>
|
||||||
</nav>
|
</nav>
|
||||||
<nav>
|
<nav>
|
||||||
|
<span>
|
||||||
|
<label role="switch">
|
||||||
|
<span>KR</span>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="front"
|
||||||
|
role="switch"
|
||||||
|
v-model="isKoFirst"
|
||||||
|
/>
|
||||||
|
<span role="slider"></span>
|
||||||
|
<span>EN</span>
|
||||||
|
</label>
|
||||||
|
</span>
|
||||||
|
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="autoplay-audio"
|
name="autoplay-audio"
|
||||||
v-model="vSentAutoplayAudio"
|
v-model="isSentAutoplayAudio"
|
||||||
/>
|
/>
|
||||||
autoplay sentence audio
|
autoplay sentence audio
|
||||||
</label>
|
</label>
|
||||||
@@ -62,14 +82,16 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useData } from "vitepress";
|
import { useData } from "vitepress";
|
||||||
import { computed, nextTick, ref, useTemplateRef } from "vue";
|
import { computed, nextTick, ref, useTemplateRef, watch } from "vue";
|
||||||
import TTS from "./TTS.vue";
|
import TTS from "./TTS.vue";
|
||||||
|
|
||||||
const vCats = ref<string[]>([]);
|
const vCats = ref<string[]>([]);
|
||||||
const vChosenCats = ref<string[]>([]);
|
const vChosenCats = ref<string[]>([]);
|
||||||
const vList = ref<IVoc[]>([]);
|
const vList = ref<IVoc[]>([]);
|
||||||
const vIndex = ref(-1);
|
const vIndex = ref(-1);
|
||||||
const vSentAutoplayAudio = ref(true);
|
|
||||||
|
const isSentAutoplayAudio = ref(true);
|
||||||
|
const isKoFirst = ref(true);
|
||||||
|
|
||||||
const sentenceDetails = useTemplateRef("sdetails");
|
const sentenceDetails = useTemplateRef("sdetails");
|
||||||
const stts = useTemplateRef<InstanceType<typeof TTS>>("stts");
|
const stts = useTemplateRef<InstanceType<typeof TTS>>("stts");
|
||||||
@@ -101,6 +123,10 @@ vCats.value = Object.keys(vocabulary);
|
|||||||
vChosenCats.value = [...vCats.value];
|
vChosenCats.value = [...vCats.value];
|
||||||
makeVList();
|
makeVList();
|
||||||
|
|
||||||
|
watch(isKoFirst, () => {
|
||||||
|
makeVList();
|
||||||
|
});
|
||||||
|
|
||||||
function makeVList() {
|
function makeVList() {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if (sentenceDetails.value) {
|
if (sentenceDetails.value) {
|
||||||
@@ -127,7 +153,7 @@ function mark(isRight: boolean) {
|
|||||||
sentenceDetails.value.open = false;
|
sentenceDetails.value.open = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vSentAutoplayAudio.value) {
|
if (isSentAutoplayAudio.value) {
|
||||||
if (stts.value) {
|
if (stts.value) {
|
||||||
stts.value.playAudio();
|
stts.value.playAudio();
|
||||||
} else if (example.value?.audio) {
|
} else if (example.value?.audio) {
|
||||||
@@ -179,8 +205,62 @@ function updateCats(cat: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.options {
|
.options {
|
||||||
label + label {
|
* + label {
|
||||||
margin-inline-start: 0.5em;
|
margin-inline-start: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
label[role="switch"] {
|
||||||
|
--slider-width: 50px;
|
||||||
|
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
width: calc(var(--slider-width) + 4em);
|
||||||
|
height: 24px;
|
||||||
|
|
||||||
|
input[role="switch"] {
|
||||||
|
opacity: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The track */
|
||||||
|
[role="slider"] {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 24px;
|
||||||
|
width: var(--slider-width);
|
||||||
|
height: 100%;
|
||||||
|
transition: background-color 0.3s;
|
||||||
|
|
||||||
|
+ span {
|
||||||
|
margin-left: calc(var(--slider-width) + 0.5em);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The circular slider */
|
||||||
|
[role="slider"]::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
left: 4px;
|
||||||
|
bottom: 2px;
|
||||||
|
background-color: rgb(87, 87, 87);
|
||||||
|
border-radius: 50%;
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Toggled state */
|
||||||
|
input:not(:checked) {
|
||||||
|
+ [role="slider"] {
|
||||||
|
/* background-color: #4caf50; */
|
||||||
|
background-color: gainsboro;
|
||||||
|
}
|
||||||
|
+ [role="slider"]::before {
|
||||||
|
transform: translateX(23px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
Reference in new issue
Block a user