Open1
starlight サイドバーを全部閉じる
astro starlight のサイドバーの項目が多いときに全部閉じる
項目が多くなってくると、スクロールしなければならないので、全部閉じることができたらいいかも。
SidebarSublist.astro
を上書きしたらいい?
上書きできそうにない。
サイドバーはどうなっている
xxx.html
<details>
<summary>ここからはじめる</summary>
...
</details>
こんな感じでアコーディオンになっている。
Sidebar.astro
を上書き
details
を閉じれたらいいらしい。
閉じ方は次を参考にした。
Sidebar.astro
---
import type { Props } from '@astrojs/starlight/props';
import Default from '@astrojs/starlight/components/Sidebar.astro';
import { Icon } from '@astrojs/starlight/components';
---
<!-- https://starlight.astro.build/guides/overriding-components/#reuse-a-built-in-component -->
<div class="open-close">
<button id="tree-close-all"><Icon name="up-caret" size="0.75rem" /></button>
<button id="tree-open-all"><Icon name="down-caret" size="0.75rem" /></button>
</div>
<Default {...Astro.props} />
<style>
.open-close {
display: flex;
justify-content: flex-end;
}
</style>
<script>
let links = document.getElementsByTagName('details');
function details_open(bool: boolean) {
for (let link of links) {
link.open = bool;
}
}
// Find all buttons for open and close
const openButton = document.getElementById("tree-open-all");
const closeButton = document.getElementById("tree-close-all");
// Handle clicks
openButton?.addEventListener('click', () => {
details_open(true);
});
// Handle clicks
closeButton?.addEventListener('click', () => {
details_open(false);
});
</script>
astro.config.mjs
にオーバーライドの設定
astro.config.mjs
components: {
// デフォルトの`SocialIcons`コンポーネントをオーバーライドします。
Sidebar: './src/components/Sidebar.astro',
},
Sidebar.astro
は上記のフォルダに配置する。
全部を閉じれるようになったが、現在のページは開いたままにしてほしい。