Compare commits

..

10 commits

5 changed files with 46 additions and 9 deletions

View file

@ -133,7 +133,10 @@ import magnifierIcon from "@icons/magnifier.svg?raw";
//@ts-expect-error //@ts-expect-error
"@pagefind/default-ui" "@pagefind/default-ui"
); );
new PagefindUI({ const versionMatch = window.location.pathname.match(/^\/docs\/([^/]+)/);
const activeVersion = versionMatch?.[1];
const search = new PagefindUI({
element: "#qs_search", element: "#qs_search",
// resetStyles: false, // resetStyles: false,
sort: { version: "desc" }, sort: { version: "desc" },
@ -170,6 +173,10 @@ import magnifierIcon from "@icons/magnifier.svg?raw";
}); });
}, },
}); });
if (activeVersion) {
search.triggerFilters({ version: activeVersion });
}
}); });
}); });
} }

View file

@ -176,12 +176,13 @@ document.addEventListener("DOMContentLoaded", () => {
// video handling // video handling
const videos = scroller.querySelectorAll("video"); const videos = scroller.querySelectorAll("video");
const observerOptions = {
const playObserverOptions = {
root: container, root: container,
threshold: 0.5, threshold: 0.5,
}; };
const videoObserver = new IntersectionObserver(entries => { const playObserver = new IntersectionObserver(entries => {
entries.forEach(entry => { entries.forEach(entry => {
const video = entry.target as HTMLVideoElement; const video = entry.target as HTMLVideoElement;
if (entry.isIntersecting) { if (entry.isIntersecting) {
@ -190,12 +191,28 @@ document.addEventListener("DOMContentLoaded", () => {
video.pause(); video.pause();
} }
}); });
}, observerOptions); }, playObserverOptions);
const resetObserverOptions = {
root: container,
threshold: 0.01,
};
const resetObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
const video = entry.target as HTMLVideoElement;
if (!entry.isIntersecting) {
video.currentTime = 0;
video.pause();
}
});
}, resetObserverOptions);
const startObserving = () => { const startObserving = () => {
const allVideos = scroller.querySelectorAll("video"); const allVideos = scroller.querySelectorAll("video");
allVideos.forEach(v => { allVideos.forEach(v => {
videoObserver.observe(v); playObserver.observe(v);
resetObserver.observe(v);
v.addEventListener("ended", () => { v.addEventListener("ended", () => {
targetScrollX += itemWidth; targetScrollX += itemWidth;
startAnimation(); startAnimation();

View file

@ -43,8 +43,14 @@ const details = type.details
? await processMarkdown(version.name, type.details) ? await processMarkdown(version.name, type.details)
: null; : null;
const description = type.description
? await processMarkdown(version.name, type.description)
: null;
const searchWeight = const searchWeight =
version.name != "master" ? getSearchWeight(version.name) : 999.0; version.name != "master" ? getSearchWeight(version.name) : 999.0;
--- ---
<DocsLayout <DocsLayout
@ -78,7 +84,7 @@ const searchWeight =
<code class="type-module" data-pagefind-ignore>import {module.name}</code> <code class="type-module" data-pagefind-ignore>import {module.name}</code>
<section class="typedocs-data typedata"> <section class="typedocs-data typedata">
<subheading class="typedocs-subheading"> <subheading class="typedocs-subheading">
{details ? <span class="parsedMD" set:html={details}/> : (<span class="toparse">{type.description}</span>)} {details ? <span class="parsedMD" set:html={details}/> : <span class="parsedMD" set:html={description}/>}
</subheading> </subheading>
{Object.keys(type.properties ?? {}).length != 0 && ( {Object.keys(type.properties ?? {}).length != 0 && (
<h2>Properties <a href={`/docs/${version.name}/guide/qml-language#properties`}>[?]</a></h2> <h2>Properties <a href={`/docs/${version.name}/guide/qml-language#properties`}>[?]</a></h2>

View file

@ -2,7 +2,6 @@
import DocsLayout from "@layouts/DocsLayout.astro"; import DocsLayout from "@layouts/DocsLayout.astro";
import { getVersionsData } from "@config/io/generateTypeData"; import { getVersionsData } from "@config/io/generateTypeData";
import { processMarkdown } from "@src/config/io/markdown"; import { processMarkdown } from "@src/config/io/markdown";
import type { TypeData } from "@_types";
export async function getStaticPaths() { export async function getStaticPaths() {
return (await getVersionsData()).versions.flatMap(version => { return (await getVersionsData()).versions.flatMap(version => {
@ -17,6 +16,11 @@ const { version, module } = Astro.props;
const details = module.details const details = module.details
? await processMarkdown(version.name, module.details) ? await processMarkdown(version.name, module.details)
: null; : null;
const types = await Promise.all(module.types.map(async type => ({
description2: type.description ? await processMarkdown(version.name, type.description) : null,
...type
})));
--- ---
<DocsLayout <DocsLayout
@ -29,13 +33,13 @@ const details = module.details
<section> <section>
<span>{module.description}</span> <span>{module.description}</span>
<div class="root-nav" data-pagefind-ignore> <div class="root-nav" data-pagefind-ignore>
{module.types.map((type: TypeData) => {types.map(type =>
( (
<div class="root-nav-entry"> <div class="root-nav-entry">
<a class="root-nav-link" href={`/docs/${version.name}/types/${module.name}/${type.name}`}> <a class="root-nav-link" href={`/docs/${version.name}/types/${module.name}/${type.name}`}>
{type.name} {type.name}
</a> </a>
<span class="root-nav-desc">{type.description}</span> {type.description2 && <span class="root-nav-desc" set:html={type.description2}/>}
</div> </div>
) )
)} )}

View file

@ -363,6 +363,9 @@ html:has(input#theme-manual-toggle:checked) .typevariants {
& .root-nav-desc { & .root-nav-desc {
padding-left: 1rem; padding-left: 1rem;
border-left: 1px solid hsl(var(--blue) 10% 15% / 0.6); border-left: 1px solid hsl(var(--blue) 10% 15% / 0.6);
/* for processMarkdown in desc strs*/
& > p { margin: 0 }
} }
} }
} }