4 Commits

Author SHA1 Message Date
2aea1eae7f [Feature]
All checks were successful
Node.js CI / build-and-test (push) Successful in 24s
为 SSR 的导航菜单添加链接
2025-05-16 09:31:13 +08:00
063a1330d7 [Feature]
All checks were successful
Node.js CI / build-and-test (push) Successful in 31s
为 Markdown 启用自定义 Hr 组件
2025-05-16 09:01:11 +08:00
0607e6241b [BugFix]
All checks were successful
Node.js CI / build-and-test (push) Successful in 25s
修复链接转换器不显示格式错误的 BUG
2025-05-14 18:00:56 +08:00
89538823fc [BUGFix]
All checks were successful
Node.js CI / build-and-test (push) Successful in 35s
修复书签删除问题

[Feature]
使用表单保证 HTML 语义化
更新关于页面
2025-05-14 17:49:44 +08:00
7 changed files with 43 additions and 17 deletions

View File

@ -98,7 +98,7 @@ onMounted(async () => {
<li v-for="item in routeStore.allRoutes"
:key="item.path"
:class="{ 'active-item' : item.path == $route.path }"
>{{ item.name }}</li>
><a :href="item.path">{{ item.name }}</a></li>
</ul>
</template></ClientOnly>
</nav>

View File

@ -5,6 +5,7 @@ import App from './App.vue'
import ClientOnly from './ssr/ClientOnly.vue'
import Hr from './ui/BetterHr.vue'
import Form from './ui/Form.vue'
export function createApp() {
const app = createSSRApp(App)
@ -13,5 +14,6 @@ export function createApp() {
app
.component('ClientOnly', ClientOnly)
.component('Hr', Hr)
.component('Form', Form)
return { app, pinia }
}

View File

@ -16,7 +16,7 @@
---
- MDUI 2 [mdui.org](https://mdui.org)
- Vue 3 [vuejs.org](https://vuejs.org)
- Vite 6 [vitejs.dev](https://vitejs.dev)
- Vite 6 [vitejs.dev](https://vite.dev)
其他
---

20
src/ui/Form.vue Normal file
View File

@ -0,0 +1,20 @@
<template>
<form @submit="handleSubmit">
<slot></slot>
</form>
</template>
<script setup>
import { ref } from 'vue'
const emit = defineEmits(['submit'])
function handleSubmit(event) {
event.preventDefault()
const form = event.target
const formData = new FormData(form)
const data = Object.fromEntries(formData.entries())
emit('submit', data, event)
}
</script>

View File

@ -9,13 +9,13 @@ import Intro from '../texts/intro.md'
const router = useRouter()
const src = ref('')
const srcText = ref(null)
const err = ref(false)
const srcText = ref(null)
function convert(from) {
if( Number(from) ) {
return {
type: 's',
id: Number(from)
}
} else if (from.includes('https://archiveofourown.org/works/')) {
@ -35,9 +35,10 @@ function convert(from) {
}
}
function onConvert() {
const { id, cid } = convert(src.value)
if (id == null) {
function onConvert(data) {
const { type, id, cid } = convert(data.src)
console.log(type, id, cid)
if (type == null) {
err.value = true
srcText.value?.focus()
} else {
@ -56,17 +57,17 @@ function onConvert() {
<section id="converter">
<h2>链接转换</h2>
<p>输入完整链接或者 ID</p>
<ClientOnly>
<mdui-text-field variant="filled" label="链接" placeholder="https://archiveofourown.org/works/114514" @input="src = $event.target.value" ref='srcText'>
<Form @submit="onConvert"><ClientOnly>
<mdui-text-field variant="filled" label="链接" name="src" placeholder="https://archiveofourown.org/works/114514" ref='srcText'>
<span v-if='err' slot="helper" class='warn-text'>链接格式错误!</span>
</mdui-text-field><br/>
<div style="display: flex">
<div style="flex-grow: 1"></div>
<mdui-button @click='onConvert'>-></mdui-button>
<mdui-button type="submit">-></mdui-button>
</div>
{{ src }}
<template #ssr>
Padding...
</template></ClientOnly>
<input type="text" id="src" name="src" />
<input type="submit" />
</template></ClientOnly></Form>
</section>
</template>

View File

@ -120,7 +120,7 @@ function openBookmarkMenu(bk, index) {
async function deleteBookmark() {
if (bookmarkSelect.value) {
bookmarkStore.del(bookmarkSelect.value.bk.id)
bookmarks.value.splice(bookmarkSelect.value.index)
bookmarks.value.splice(bookmarkSelect.value.index,1)
bookmarkSelect.value = null
}
}

View File

@ -19,8 +19,11 @@ export default defineConfig({
}),
vueJsx(),
vueDevTools(),
markdown()
markdown({
markdownItSetup(md) {
md.renderer.rules.hr = () => "<Hr />"
}
})
],
resolve: {
alias: {