mirror of
https://github.com/purocean/yn.git
synced 2026-09-24 15:46:02 +08:00
upd: optimize group tabs input experience
This commit is contained in:
@@ -49,7 +49,7 @@ import { markdown } from '@fe/services/markdown'
|
||||
import { registerHook, removeHook, triggerHook } from '@fe/core/hook'
|
||||
import { registerAction, removeAction } from '@fe/core/action'
|
||||
import { revealLineInCenter } from '@fe/services/editor'
|
||||
import { showExport } from '@fe/services/document'
|
||||
import { showExport, toUri } from '@fe/services/document'
|
||||
import { getContextMenuItems, toggleAutoPreview } from '@fe/services/view'
|
||||
import { useContextMenu } from '@fe/support/ui/context-menu'
|
||||
import { useI18n } from '@fe/services/i18n'
|
||||
@@ -76,6 +76,7 @@ export default defineComponent({
|
||||
const { currentContent, currentFile, autoPreview, presentation, inComposition } = toRefs(store.state)
|
||||
const fileName = computed(() => currentFile.value?.name)
|
||||
const filePath = computed(() => currentFile.value?.path)
|
||||
const fileUri = computed(() => toUri(currentFile.value))
|
||||
|
||||
const refViewWrapper = ref<HTMLElement | null>(null)
|
||||
const refView = ref<HTMLElement | null>(null)
|
||||
@@ -102,6 +103,8 @@ export default defineComponent({
|
||||
let renderEnv: RenderEnv | null = null
|
||||
const getRenderEnv = () => renderEnv
|
||||
|
||||
let renderCount = 0
|
||||
|
||||
function togglePinOutline () {
|
||||
pinOutline.value = !pinOutline.value
|
||||
}
|
||||
@@ -165,7 +168,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
const startTime = performance.now()
|
||||
renderEnv = { source: content, file: currentFile.value }
|
||||
renderEnv = { source: content, file: currentFile.value, renderCount: renderCount++ }
|
||||
try {
|
||||
renderContent.value = markdown.render(content, renderEnv)
|
||||
} catch (error: any) {
|
||||
@@ -287,11 +290,12 @@ export default defineComponent({
|
||||
window.removeEventListener('keydown', keydownHandler)
|
||||
})
|
||||
|
||||
watch([currentContent, filePath, inComposition], () => {
|
||||
watch([currentContent, fileUri, inComposition], () => {
|
||||
autoPreview.value && updateRender()
|
||||
})
|
||||
|
||||
watch(filePath, () => {
|
||||
watch(fileUri, () => {
|
||||
renderCount = 0
|
||||
// file switched, turn on auto render preview.
|
||||
toggleAutoPreview(true)
|
||||
updateRender = debounce(render, 25)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import MarkdownItContainer from 'markdown-it-container'
|
||||
import { Fragment, h } from 'vue'
|
||||
import { Plugin } from '@fe/context'
|
||||
import type Token from 'markdown-it/lib/token'
|
||||
import { Plugin } from '@fe/context'
|
||||
|
||||
export default {
|
||||
name: 'markdown-container',
|
||||
@@ -138,7 +138,18 @@ export default {
|
||||
`)
|
||||
|
||||
let groupItemIdx = 0
|
||||
let groupItemName = 0
|
||||
let groupItemSeq = 0
|
||||
let groupItemBase = Date.now()
|
||||
let groupItemName = groupItemBase + groupItemSeq
|
||||
|
||||
ctx.registerHook('MARKDOWN_BEFORE_RENDER', ({ env }) => {
|
||||
// first render, reset count
|
||||
if (env.renderCount === 0) {
|
||||
groupItemBase = Date.now()
|
||||
}
|
||||
|
||||
groupItemSeq = 0
|
||||
})
|
||||
|
||||
ctx.markdown.registerPlugin(md => {
|
||||
['tip', 'warning', 'danger', 'details', 'group-item', 'group'].forEach(name => {
|
||||
@@ -172,7 +183,8 @@ export default {
|
||||
}
|
||||
} else if (name === 'group') {
|
||||
groupItemIdx = 0
|
||||
groupItemName++
|
||||
groupItemSeq++
|
||||
groupItemName = groupItemBase + groupItemSeq
|
||||
}
|
||||
|
||||
const containerTag = name === 'details' ? 'details' : 'div'
|
||||
|
||||
Reference in New Issue
Block a user