Skip to content

Commit a42d8d7

Browse files
committed
+
1 parent 1164183 commit a42d8d7

File tree

1 file changed

+120
-1
lines changed

1 file changed

+120
-1
lines changed

src/layouts/CenteredLayout.astro

Lines changed: 120 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import type { IHeading } from "@/types/astro";
99
import NavigationAstro from "@components/layout/NavigationAstro.astro";
1010
import DocsSidebar from "../components/layout/DocsSidebar/DocsSidebar.astro";
1111
import getContentTree from '@/utils/getContentTree';
12-
import type { IHeading } from '@/types/astro';
1312
1413
interface Props {
1514
customTitle?: string;
@@ -139,5 +138,125 @@ const { title, tree } = await getContentTree({
139138
}
140139
}
141140
</script>
141+
<script is:inline>
142+
const changeNpmTab = () => {
143+
const packageManagers = ['npm', 'yarn', 'pnpm', 'bun'];
144+
145+
let packageManagerIndex = packageManagers.indexOf(packageManager);
146+
147+
const updateUI = (index) => {
148+
npmContent.forEach((element) => {
149+
Array.from(element.children).forEach((child, i) => {
150+
child.classList.toggle('hidden', i !== index);
151+
});
152+
});
153+
npmTabs.forEach((element) => {
154+
Array.from(element.children).forEach((child, i) => {
155+
child.classList.toggle('npm__tab--active', i === index);
156+
});
157+
});
158+
159+
npxSelectResizer.querySelector('.line span').innerText = packageManagers[index]
160+
161+
npxSelects.forEach((element) => {
162+
element.value = index;
163+
element.style.width = `${npxSelectResizer.offsetWidth}px`
164+
});
165+
};
166+
167+
const npmContent = document.querySelectorAll('.npm__content');
168+
const npmTabs = document.querySelectorAll('.npm__tabs');
169+
const npxSelects = document.querySelectorAll('.npx-select');
170+
const npxSelectResizer = document.querySelector('.npx-select-resizer');
171+
172+
npmContent.forEach((content) => {
173+
Array.from(content.children).forEach((child, index) => {
174+
child.classList.toggle('hidden', index !== packageManagerIndex);
175+
});
176+
});
177+
178+
npmTabs.forEach((tab) => {
179+
Array.from(tab.children).forEach((child, index) => {
180+
child.classList.toggle('npm__tab--active', index === packageManagerIndex);
181+
child.addEventListener('click', () => {
182+
packageManager = packageManagers[index];
183+
localStorage.setItem('package-manager', packageManager);
184+
updateUI(index);
185+
});
186+
});
187+
});
188+
189+
npxSelects.forEach((element) => {
190+
npxSelectResizer.querySelector('.line span').innerText = packageManagers[packageManagerIndex];
191+
element.value = packageManagerIndex;
192+
setTimeout(() => element.style.width = `${npxSelectResizer.offsetWidth}px`, 1);
193+
element.addEventListener('change', (e) => {
194+
packageManager = packageManagers[Number(e.target.value)];
195+
localStorage.setItem('package-manager', packageManager);
196+
updateUI(Number(e.target.value));
197+
})
198+
});
199+
}
200+
changeNpmTab();
201+
</script>
202+
<script>
203+
document.addEventListener("astro:after-swap", () => {
204+
const npmContent: NodeList = document.querySelectorAll('.npm__content');
205+
const npmTabs: NodeList = document.querySelectorAll('.npm__tabs');
206+
const npxSelects: NodeList = document.querySelectorAll('.npx-select');
207+
const npxSelectResizer = document.querySelector('.npx-select-resizer');
208+
const packageManagers: string[] = ['npm', 'yarn', 'pnpm', 'bun'];
209+
let packageManager: string = localStorage.getItem('package-manager') || 'npm';
210+
let packageManagerIndex: number = packageManagers.indexOf(packageManager);
211+
212+
const updateUI = (index: number): void => {
213+
npmContent.forEach((element) => {
214+
Array.from((element as HTMLElement).children).forEach((child, i) => {
215+
child.classList.toggle('hidden', i !== index);
216+
});
217+
});
218+
npmTabs.forEach((element) => {
219+
Array.from((element as HTMLElement).children).forEach((child, i) => {
220+
child.classList.toggle('npm__tab--active', i === index);
221+
});
222+
});
223+
224+
npxSelectResizer.querySelector('.line span').innerText = packageManagers[index]
225+
226+
npxSelects.forEach((element) => {
227+
element.value = index;
228+
element.style.width = `${npxSelectResizer.offsetWidth}px`
229+
});
230+
};
231+
232+
npmContent.forEach((content) => {
233+
Array.from((content as HTMLElement).children).forEach((child, index) => {
234+
child.classList.toggle('hidden', index !== packageManagerIndex);
235+
});
236+
});
237+
238+
npmTabs.forEach((tab) => {
239+
Array.from((tab as HTMLElement).children).forEach((child, index) => {
240+
child.classList.toggle('npm__tab--active', index === packageManagerIndex);
241+
child.addEventListener('click', () => {
242+
packageManager = packageManagers[index];
243+
localStorage.setItem('package-manager', packageManager);
244+
updateUI(index);
245+
});
246+
});
247+
});
248+
249+
npxSelects.forEach((element) => {
250+
npxSelectResizer.querySelector('.line span').innerText = packageManagers[packageManagerIndex];
251+
element.value = packageManagerIndex;
252+
element.style.width = `${npxSelectResizer.offsetWidth}px`
253+
element.addEventListener('change', (e) => {
254+
packageManager = packageManagers[Number(e.target.value)];
255+
localStorage.setItem('package-manager', packageManager);
256+
updateUI(Number(e.target.value));
257+
})
258+
});
259+
})
260+
</script>
142261
</body>
143262
</html>

0 commit comments

Comments
 (0)