Skip to content

Commit 6e0f3ac

Browse files
committed
feat(doc-layout): setup multiple versions for exported site
1 parent 8fc69be commit 6e0f3ac

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

doc-layout/src/template.js

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,26 @@ import { styles } from '@divriots/dockit-core/layout';
33
import '@api-viewer/docs';
44
import { html } from 'lit';
55
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
6+
import { until } from 'lit/directives/until.js';
67
import logoSvg from './logo.svg?raw';
78
import { search } from '@divriots/dockit-core/search';
8-
import '~/search/dockit-search.define.js';
9+
import '@divriots/dockit-core/search/dockit-search.define.js';
10+
import '@divriots/dockit-core/version-selector/dockit-version-selector.define.js';
911

1012
export const docLayoutTemplate = (content, context) => {
13+
// TODO: remove when Backlight is released with new functionality
14+
const isMultiverseSupported = context.isLive !== undefined;
15+
16+
let versionsPromise;
17+
if (isMultiverseSupported) {
18+
if (context.isLive) {
19+
versionsPromise = Promise.resolve([context.version]);
20+
} else {
21+
versionsPromise = import(new URL('/docs-shared.mjs', location.href)).then(
22+
(m) => m.versions
23+
);
24+
}
25+
}
1126
return html`
1227
<style>
1328
${unsafeHTML(styles)} .logo {
@@ -35,6 +50,35 @@ export const docLayoutTemplate = (content, context) => {
3550
</div>
3651
<dockit-search slot="topbar" .search=${(query) => search(query, context)}>
3752
</dockit-search>
53+
${isMultiverseSupported
54+
? until(
55+
versionsPromise.then((versions) => {
56+
const isLatestVersion =
57+
context.version === versions[versions.length - 1];
58+
return html`
59+
<dockit-version-selector
60+
slot="topbar"
61+
.versions=${versions}
62+
selected=${context.version}
63+
@select=${(event) => {
64+
if (!context.isLive) {
65+
const baseUrl = new URL(
66+
isLatestVersion ? './' : '../',
67+
new URL(context.base, location.href)
68+
);
69+
location.href = new URL(
70+
event.detail.isLatest
71+
? './'
72+
: `./${event.detail.version}/`,
73+
baseUrl
74+
).href;
75+
}
76+
}}
77+
></dockit-version-selector>
78+
`;
79+
})
80+
)
81+
: null}
3882
<div class="prose dark:prose-invert">${unsafeHTML(content)}</div>
3983
</dockit-layout>
4084
`;

0 commit comments

Comments
 (0)