Skip to content

Commit 0537b1c

Browse files
committed
Deploying to master from @ 5a241cb 🚀
1 parent 36772da commit 0537b1c

111 files changed

Lines changed: 13578 additions & 1584 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

404.html

Lines changed: 137 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
/>
1414

1515

16-
<link rel="stylesheet" href="https://ferretlang.org/sass/main.min.481dd192e4d3d70d80a4e2fa81d6592f470e651db5407dd5eeaaabde7ecbcc4a.css" />
16+
<link rel="stylesheet" href="https://ferretlang.org/sass/main.min.9c29b02027e8b7895d7b2eb2185d5b9b7cefe6b3ef45099b3f2018fbf32ba946.css" />
17+
<link href="/pagefind/pagefind-component-ui.css" rel="stylesheet" />
18+
<script src="/pagefind/pagefind-component-ui.js" type="module"></script>
1719

1820
<link rel="icon" type="image/png" href="/favicon/favicon-96x96.png" sizes="96x96" />
1921
<link rel="icon" type="image/svg+xml" href="/favicon/favicon.svg" />
@@ -38,6 +40,8 @@
3840
</script>
3941
</head>
4042
<body><nav class="navbar site-navbar" role="navigation" aria-label="main navigation" data-pagefind-ignore="all">
43+
<pagefind-config instance="site-search" highlight-param="highlight"></pagefind-config>
44+
4145
<div class="container site-navbar-container">
4246
<div class="navbar-brand site-navbar-brand">
4347
<a class="navbar-item site-navbar-logo" href="/" aria-label="Ferret home">
@@ -47,6 +51,14 @@
4751
<span class="site-navbar-logo-text">FERRET</span>
4852
</a>
4953

54+
55+
<pagefind-modal-trigger
56+
class="site-navbar-search site-navbar-search-mobile"
57+
instance="site-search"
58+
placeholder="Search docs"
59+
></pagefind-modal-trigger>
60+
61+
5062
<button
5163
id="navbar-burger"
5264
type="button"
@@ -69,13 +81,6 @@
6981

7082

7183

72-
<a href="/try/" class="navbar-item site-navbar-link site-navbar-cta"
73-
title="Try it" id="repl">
74-
Try it
75-
</a>
76-
77-
78-
7984
<a href="/docs/" class="navbar-item site-navbar-link"
8085
title="Project documentation" id="docs">
8186
Docs
@@ -88,8 +93,24 @@
8893
Blog
8994
</a>
9095

96+
97+
98+
<a href="/try/" class="navbar-item site-navbar-link site-navbar-cta"
99+
title="Try it" id="repl">
100+
Try it
101+
</a>
102+
91103
</div>
92104

105+
106+
<pagefind-modal-trigger
107+
class="site-navbar-search site-navbar-search-desktop"
108+
instance="site-search"
109+
placeholder="Search docs"
110+
shortcut="/"
111+
></pagefind-modal-trigger>
112+
113+
93114
<div class="navbar-end site-navbar-links site-navbar-links-secondary">
94115

95116

@@ -109,6 +130,114 @@
109130
</div>
110131
</div>
111132
</nav>
133+
<pagefind-modal class="site-search-modal" instance="site-search">
134+
<pagefind-modal-header>
135+
<pagefind-input instance="site-search" placeholder="Search docs" debounce="150"></pagefind-input>
136+
</pagefind-modal-header>
137+
<pagefind-modal-body>
138+
<pagefind-summary instance="site-search" default-message="Type at least 2 characters to search."></pagefind-summary>
139+
<pagefind-results instance="site-search" max-results="6" max-sub-results="3"></pagefind-results>
140+
</pagefind-modal-body>
141+
<pagefind-modal-footer>
142+
<a id="site-search-view-all" class="site-search-view-all" href="/search/">View all results</a>
143+
<pagefind-keyboard-hints instance="site-search"></pagefind-keyboard-hints>
144+
</pagefind-modal-footer>
145+
</pagefind-modal>
146+
147+
<script type="module">
148+
await customElements.whenDefined("pagefind-modal");
149+
150+
const components = window.PagefindComponents;
151+
if (components) {
152+
const instanceName = "site-search";
153+
const instance = components.getInstanceManager().getInstance(instanceName);
154+
const inputComponent = document.querySelector(`pagefind-input[instance="${instanceName}"]`);
155+
const modal = document.querySelector(`pagefind-modal[instance="${instanceName}"]`);
156+
const viewAll = document.getElementById("site-search-view-all");
157+
158+
const waitForInput = () => new Promise((resolve) => {
159+
const check = () => {
160+
if (inputComponent?.inputEl) {
161+
resolve(inputComponent.inputEl);
162+
return;
163+
}
164+
165+
window.requestAnimationFrame(check);
166+
};
167+
168+
check();
169+
});
170+
171+
const input = await waitForInput();
172+
const searchURL = (query) => {
173+
const url = new URL("/search/", window.location.origin);
174+
if (query) {
175+
url.searchParams.set("q", query);
176+
}
177+
178+
return `${url.pathname}${url.search}`;
179+
};
180+
const updateViewAll = (query) => {
181+
if (viewAll) {
182+
viewAll.href = searchURL(query.trim());
183+
}
184+
};
185+
const addResultHighlights = () => {
186+
const query = input.value.trim();
187+
if (query.length < 2) {
188+
return;
189+
}
190+
191+
modal?.querySelectorAll(".pf-result-link, .pf-heading-link").forEach((link) => {
192+
const url = new URL(link.href, window.location.origin);
193+
url.searchParams.set("highlight", query);
194+
link.href = `${url.pathname}${url.search}${url.hash}`;
195+
});
196+
};
197+
198+
const resultObserver = new MutationObserver(addResultHighlights);
199+
resultObserver.observe(modal, {
200+
childList: true,
201+
subtree: true
202+
});
203+
204+
input.addEventListener("input", (event) => {
205+
const query = input.value.trim();
206+
updateViewAll(query);
207+
208+
if (query.length < 2) {
209+
event.stopImmediatePropagation();
210+
inputComponent.updateState?.(input.value);
211+
instance.triggerSearch("");
212+
}
213+
}, true);
214+
215+
input.addEventListener("keydown", (event) => {
216+
if (event.key !== "Enter") {
217+
return;
218+
}
219+
220+
event.preventDefault();
221+
event.stopImmediatePropagation();
222+
223+
const query = input.value.trim();
224+
const firstResult = instance.searchTerm.trim() === query
225+
? modal?.querySelector(".pf-result-link, .pf-heading-link")
226+
: null;
227+
228+
window.location.href = firstResult?.href || searchURL(query);
229+
}, true);
230+
231+
instance.on("search", (query) => {
232+
if (document.activeElement !== input) {
233+
updateViewAll(query);
234+
}
235+
});
236+
instance.on("results", () => {
237+
window.requestAnimationFrame(addResultHighlights);
238+
});
239+
}
240+
</script>
112241

113242
<script>
114243
(function(){

blog/ferret-v0.10.0/index.html

Lines changed: 137 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
/>
1414

1515

16-
<link rel="stylesheet" href="https://ferretlang.org/sass/main.min.481dd192e4d3d70d80a4e2fa81d6592f470e651db5407dd5eeaaabde7ecbcc4a.css" />
16+
<link rel="stylesheet" href="https://ferretlang.org/sass/main.min.9c29b02027e8b7895d7b2eb2185d5b9b7cefe6b3ef45099b3f2018fbf32ba946.css" />
17+
<link href="/pagefind/pagefind-component-ui.css" rel="stylesheet" />
18+
<script src="/pagefind/pagefind-component-ui.js" type="module"></script>
1719

1820
<link rel="icon" type="image/png" href="/favicon/favicon-96x96.png" sizes="96x96" />
1921
<link rel="icon" type="image/svg+xml" href="/favicon/favicon.svg" />
@@ -38,6 +40,8 @@
3840
</script>
3941
</head>
4042
<body><nav class="navbar site-navbar" role="navigation" aria-label="main navigation" data-pagefind-ignore="all">
43+
<pagefind-config instance="site-search" highlight-param="highlight"></pagefind-config>
44+
4145
<div class="container site-navbar-container">
4246
<div class="navbar-brand site-navbar-brand">
4347
<a class="navbar-item site-navbar-logo" href="/" aria-label="Ferret home">
@@ -47,6 +51,14 @@
4751
<span class="site-navbar-logo-text">FERRET</span>
4852
</a>
4953

54+
55+
<pagefind-modal-trigger
56+
class="site-navbar-search site-navbar-search-mobile"
57+
instance="site-search"
58+
placeholder="Search docs"
59+
></pagefind-modal-trigger>
60+
61+
5062
<button
5163
id="navbar-burger"
5264
type="button"
@@ -69,13 +81,6 @@
6981

7082

7183

72-
<a href="/try/" class="navbar-item site-navbar-link site-navbar-cta"
73-
title="Try it" id="repl">
74-
Try it
75-
</a>
76-
77-
78-
7984
<a href="/docs/" class="navbar-item site-navbar-link"
8085
title="Project documentation" id="docs">
8186
Docs
@@ -88,8 +93,24 @@
8893
Blog
8994
</a>
9095

96+
97+
98+
<a href="/try/" class="navbar-item site-navbar-link site-navbar-cta"
99+
title="Try it" id="repl">
100+
Try it
101+
</a>
102+
91103
</div>
92104

105+
106+
<pagefind-modal-trigger
107+
class="site-navbar-search site-navbar-search-desktop"
108+
instance="site-search"
109+
placeholder="Search docs"
110+
shortcut="/"
111+
></pagefind-modal-trigger>
112+
113+
93114
<div class="navbar-end site-navbar-links site-navbar-links-secondary">
94115

95116

@@ -109,6 +130,114 @@
109130
</div>
110131
</div>
111132
</nav>
133+
<pagefind-modal class="site-search-modal" instance="site-search">
134+
<pagefind-modal-header>
135+
<pagefind-input instance="site-search" placeholder="Search docs" debounce="150"></pagefind-input>
136+
</pagefind-modal-header>
137+
<pagefind-modal-body>
138+
<pagefind-summary instance="site-search" default-message="Type at least 2 characters to search."></pagefind-summary>
139+
<pagefind-results instance="site-search" max-results="6" max-sub-results="3"></pagefind-results>
140+
</pagefind-modal-body>
141+
<pagefind-modal-footer>
142+
<a id="site-search-view-all" class="site-search-view-all" href="/search/">View all results</a>
143+
<pagefind-keyboard-hints instance="site-search"></pagefind-keyboard-hints>
144+
</pagefind-modal-footer>
145+
</pagefind-modal>
146+
147+
<script type="module">
148+
await customElements.whenDefined("pagefind-modal");
149+
150+
const components = window.PagefindComponents;
151+
if (components) {
152+
const instanceName = "site-search";
153+
const instance = components.getInstanceManager().getInstance(instanceName);
154+
const inputComponent = document.querySelector(`pagefind-input[instance="${instanceName}"]`);
155+
const modal = document.querySelector(`pagefind-modal[instance="${instanceName}"]`);
156+
const viewAll = document.getElementById("site-search-view-all");
157+
158+
const waitForInput = () => new Promise((resolve) => {
159+
const check = () => {
160+
if (inputComponent?.inputEl) {
161+
resolve(inputComponent.inputEl);
162+
return;
163+
}
164+
165+
window.requestAnimationFrame(check);
166+
};
167+
168+
check();
169+
});
170+
171+
const input = await waitForInput();
172+
const searchURL = (query) => {
173+
const url = new URL("/search/", window.location.origin);
174+
if (query) {
175+
url.searchParams.set("q", query);
176+
}
177+
178+
return `${url.pathname}${url.search}`;
179+
};
180+
const updateViewAll = (query) => {
181+
if (viewAll) {
182+
viewAll.href = searchURL(query.trim());
183+
}
184+
};
185+
const addResultHighlights = () => {
186+
const query = input.value.trim();
187+
if (query.length < 2) {
188+
return;
189+
}
190+
191+
modal?.querySelectorAll(".pf-result-link, .pf-heading-link").forEach((link) => {
192+
const url = new URL(link.href, window.location.origin);
193+
url.searchParams.set("highlight", query);
194+
link.href = `${url.pathname}${url.search}${url.hash}`;
195+
});
196+
};
197+
198+
const resultObserver = new MutationObserver(addResultHighlights);
199+
resultObserver.observe(modal, {
200+
childList: true,
201+
subtree: true
202+
});
203+
204+
input.addEventListener("input", (event) => {
205+
const query = input.value.trim();
206+
updateViewAll(query);
207+
208+
if (query.length < 2) {
209+
event.stopImmediatePropagation();
210+
inputComponent.updateState?.(input.value);
211+
instance.triggerSearch("");
212+
}
213+
}, true);
214+
215+
input.addEventListener("keydown", (event) => {
216+
if (event.key !== "Enter") {
217+
return;
218+
}
219+
220+
event.preventDefault();
221+
event.stopImmediatePropagation();
222+
223+
const query = input.value.trim();
224+
const firstResult = instance.searchTerm.trim() === query
225+
? modal?.querySelector(".pf-result-link, .pf-heading-link")
226+
: null;
227+
228+
window.location.href = firstResult?.href || searchURL(query);
229+
}, true);
230+
231+
instance.on("search", (query) => {
232+
if (document.activeElement !== input) {
233+
updateViewAll(query);
234+
}
235+
});
236+
instance.on("results", () => {
237+
window.requestAnimationFrame(addResultHighlights);
238+
});
239+
}
240+
</script>
112241

113242
<script>
114243
(function(){

0 commit comments

Comments
 (0)