Skip to content

Commit 159b775

Browse files
committed
feat: add $page and $renderContext context
1 parent 6f2df30 commit 159b775

File tree

5 files changed

+33
-18
lines changed

5 files changed

+33
-18
lines changed

packages/client/constants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import type { SlidevContext } from './modules/context'
55

66
export const injectionClicks: InjectionKey<Ref<number>> = Symbol('v-click-clicks')
77
export const injectionClicksElements: InjectionKey<Ref<(Element | string)[]>> = Symbol('v-click-clicks-elements')
8-
export const injectionOrderMap: InjectionKey<Ref<Map<number, HTMLElement[]>>> = Symbol('v-click-clicks-order-map')
98
export const injectionClicksDisabled: InjectionKey<Ref<boolean>> = Symbol('v-click-clicks-disabled')
9+
export const injectionOrderMap: InjectionKey<Ref<Map<number, HTMLElement[]>>> = Symbol('v-click-clicks-order-map')
10+
export const injectionCurrentPage: InjectionKey<number> = Symbol('slidev-page')
1011
export const injectionSlideScale: InjectionKey<ComputedRef<number>> = Symbol('slidev-slide-scale')
1112
export const injectionSlidevContext: InjectionKey<UnwrapNestedRefs<SlidevContext>> = Symbol('slidev-slidev-context')
1213
export const injectionRoute: InjectionKey<RouteRecordRaw> = Symbol('slidev-route')
1314
export const injectionSlideContext: InjectionKey<RenderContext> = Symbol('slidev-slide-context')
15+
export const injectionActive: InjectionKey<Ref<boolean>> = Symbol('slidev-active')
1416

1517
export const CLASS_VCLICK_TARGET = 'slidev-vclick-target'
1618
export const CLASS_VCLICK_HIDDEN = 'slidev-vclick-hidden'

packages/client/internals/SlideWrapper.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { useVModel } from '@vueuse/core'
22
import type { Ref } from 'vue'
3-
import { defineComponent, h, provide } from 'vue'
3+
import { defineComponent, h, provide, toRef } from 'vue'
44
import type { RenderContext } from '@slidev/types'
5-
import { injectionClicks, injectionClicksDisabled, injectionClicksElements, injectionOrderMap, injectionRoute, injectionSlideContext } from '../constants'
5+
import { injectionActive, injectionClicks, injectionClicksDisabled, injectionClicksElements, injectionCurrentPage, injectionOrderMap, injectionRoute, injectionSlideContext } from '../constants'
66

77
export default defineComponent({
88
name: 'SlideWrapper',
@@ -27,6 +27,10 @@ export default defineComponent({
2727
type: String,
2828
default: 'main',
2929
},
30+
active: {
31+
type: Boolean,
32+
default: false,
33+
},
3034
is: {
3135
type: Object,
3236
default: undefined,
@@ -45,7 +49,9 @@ export default defineComponent({
4549
clicksElements.value.length = 0
4650

4751
provide(injectionRoute, props.route as any)
52+
provide(injectionCurrentPage, +props.route?.path)
4853
provide(injectionSlideContext, props.context as RenderContext)
54+
provide(injectionActive, toRef(props, 'active'))
4955
provide(injectionClicks, clicks as Ref<number>)
5056
provide(injectionClicksDisabled, clicksDisabled)
5157
provide(injectionClicksElements, clicksElements as any)

packages/slidev/node/plugins/loaders.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ import { resolveImportPath, stringifyMarkdownTokens, toAtFS } from '../utils'
2121
const regexId = /^\/\@slidev\/slide\/(\d+)\.(md|json)(?:\?import)?$/
2222
const regexIdQuery = /(\d+?)\.(md|json)$/
2323

24+
const vueContextImports = [
25+
'import { inject as _vueInject, toRef as _vueToRef } from "vue"',
26+
`import {
27+
injectionSlidevContext as _injectionSlidevContext,
28+
injectionClicks as _injectionClicks,
29+
injectionCurrentPage as _injectionCurrentPage,
30+
injectionSlideContext as _injectionSlideContext,
31+
} from "@slidev/client/constants.ts"`.replace(/\n\s+/g, '\n'),
32+
'const $slidev = _vueInject(_injectionSlidevContext)',
33+
'const $nav = _vueToRef($slidev, "nav")',
34+
'const $clicks = _vueInject(_injectionClicks)',
35+
'const $page = _vueInject(_injectionCurrentPage)',
36+
'const $renderContext = _vueInject(_injectionSlideContext)',
37+
]
38+
2439
export function getBodyJson(req: Connect.IncomingMessage) {
2540
return new Promise<any>((resolve, reject) => {
2641
let body = ''
@@ -345,14 +360,10 @@ ${title}
345360

346361
delete frontmatter.title
347362
const imports = [
348-
'import { inject as _vueInject, toRef as _vueToRef } from "vue"',
363+
...vueContextImports,
349364
`import InjectedLayout from "${toAtFS(layouts[layoutName])}"`,
350-
'import { injectionSlidevContext as _injectionSlidevContext, injectionClicks as _injectionClicks } from "@slidev/client/constants.ts"',
351365
`const frontmatter = ${JSON.stringify(frontmatter)}`,
352366
'const $frontmatter = frontmatter',
353-
'const $slidev = _vueInject(_injectionSlidevContext)',
354-
'const $nav = _vueToRef($slidev, "nav")',
355-
'const $clicks = _vueInject(_injectionClicks)',
356367
]
357368

358369
code = code.replace(/(<script setup.*>)/g, `$1\n${imports.join('\n')}\n`)
@@ -370,11 +381,7 @@ ${title}
370381
if (code.includes('injectionSlidevContext') || code.includes('injectionClicks') || code.includes('const $slidev'))
371382
return code // Assume that the context is already imported and used
372383
const imports = [
373-
'import { inject as _vueInject, toRef as _vueToRef } from "vue"',
374-
'import { injectionSlidevContext as _injectionSlidevContext, injectionClicks as _injectionClicks } from "@slidev/client/constants.ts"',
375-
'const $slidev = _vueInject(_injectionSlidevContext)',
376-
'const $nav = _vueToRef($slidev, "nav")',
377-
'const $clicks = _vueInject(_injectionClicks)',
384+
...vueContextImports,
378385
]
379386
const matchScript = code.match(/<script((?!setup).)*(setup)?.*>/)
380387
if (matchScript && matchScript[2]) {

packages/slidev/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
"markdown-it": "^13.0.1",
8181
"markdown-it-footnote": "^3.0.3",
8282
"markdown-it-link-attributes": "^4.0.1",
83-
"markdown-it-mdc": "^0.1.1",
83+
"markdown-it-mdc": "^0.1.2",
8484
"monaco-editor": "^0.37.1",
8585
"nanoid": "^4.0.2",
8686
"open": "^8.4.1",

pnpm-lock.yaml

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)