Skip to content

Commit 4fed86d

Browse files
committed
enhance(settings): add vertical tabs
1 parent b7278b4 commit 4fed86d

5 files changed

Lines changed: 90 additions & 64 deletions

File tree

src/view/actions/settings/render-settings.ts

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,41 +8,43 @@ import { DefaultDocumentFormat } from 'src/view/actions/settings/components/defa
88
import { CardsGap } from 'src/view/actions/settings/components/cards-gap';
99
import { CardIndentationWidth } from 'src/view/actions/settings/components/card-indentation-width';
1010
import { MaintainEditMode } from 'src/view/actions/settings/components/maintain-edit-mode';
11-
import { Setting } from 'obsidian';
12-
import { lang } from 'src/lang/lang';
1311
import { InactiveCardOpacity } from 'src/view/actions/settings/components/inactive-card-opacity';
1412
import { ActiveBranchColor } from 'src/view/actions/settings/components/active-branch-color';
1513
import { AlwaysShowCardButtons } from 'src/view/actions/settings/components/always-show-card-buttons';
1614
import { ControlsBarButtons } from 'src/view/actions/settings/components/controls-bar-buttons/controls-bar-buttons';
1715
import { HeadingsFontSize } from 'src/view/actions/settings/components/headings-font-size';
1816
import { LinkPaneType } from 'src/view/actions/settings/components/link-pane-type';
1917

20-
export const renderSettings = (element: HTMLElement) => {
18+
export type SettingsTab = 'General' | 'Appearance' | 'Layout';
19+
export const renderSettings = (element: HTMLElement, tab: SettingsTab) => {
2120
const view = getView();
2221
const settingsStore = view.plugin.settings;
23-
const render = () => {
24-
DefaultDocumentFormat(element, settingsStore);
25-
LinkPaneType(element, settingsStore);
26-
MaintainEditMode(element, settingsStore);
27-
AlwaysShowCardButtons(element, settingsStore);
28-
ControlsBarButtons(element, view);
29-
new Setting(element).setHeading().setName(lang.settings_appearance);
30-
BackgroundColor(element, settingsStore);
31-
ActiveBranchBackground(element, settingsStore);
32-
ActiveBranchColor(element, settingsStore);
33-
InactiveCardOpacity(element, settingsStore);
34-
FontSize(element, settingsStore);
35-
HeadingsFontSize(element, settingsStore);
36-
new Setting(element).setHeading().setName(lang.settings_layout);
37-
CardWidth(element, settingsStore);
38-
CardsGap(element, settingsStore);
39-
CardIndentationWidth(element, settingsStore);
40-
LimitCardHeight(element, settingsStore);
22+
const render = (tab: SettingsTab) => {
23+
element.empty();
24+
if (tab === 'General') {
25+
DefaultDocumentFormat(element, settingsStore);
26+
LinkPaneType(element, settingsStore);
27+
MaintainEditMode(element, settingsStore);
28+
AlwaysShowCardButtons(element, settingsStore);
29+
ControlsBarButtons(element, view);
30+
} else if (tab === 'Appearance') {
31+
BackgroundColor(element, settingsStore);
32+
ActiveBranchBackground(element, settingsStore);
33+
ActiveBranchColor(element, settingsStore);
34+
InactiveCardOpacity(element, settingsStore);
35+
FontSize(element, settingsStore);
36+
HeadingsFontSize(element, settingsStore);
37+
} else if (tab === 'Layout') {
38+
CardWidth(element, settingsStore);
39+
CardsGap(element, settingsStore);
40+
CardIndentationWidth(element, settingsStore);
41+
LimitCardHeight(element, settingsStore);
42+
}
4143
};
42-
render();
44+
render(tab);
4345
return {
44-
update: () => {
45-
render();
46+
update: (tab: SettingsTab) => {
47+
render(tab);
4648
},
4749
};
4850
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { writable } from 'svelte/store';
2+
import { SettingsTab } from 'src/view/actions/settings/render-settings';
3+
4+
export const ActiveSettingsTabStore = writable<SettingsTab>('General');
Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,42 @@
11
<script lang="ts">
2-
import { renderSettings } from '../../../../actions/settings/render-settings';
2+
import { renderSettings, SettingsTab } from '../../../../actions/settings/render-settings';
3+
import VerticalTabHeader from './vertical-tab-header.svelte';
4+
import { ActiveSettingsTabStore } from 'src/view/components/container/modals/settings/active-settings-tab-store';
5+
6+
const setActiveTab = (tab: SettingsTab) => {
7+
ActiveSettingsTabStore.set(tab);
8+
};
39
</script>
410

511
<div class="lineage-modal" id="lineage-view-settings" tabindex="0">
6-
<div class="setting-items" use:renderSettings></div>
12+
<div class="lineage-vertical-tabs-container">
13+
<VerticalTabHeader {setActiveTab} activeTab={$ActiveSettingsTabStore} />
14+
<div
15+
class="lineage-vertical-tab-content"
16+
use:renderSettings={$ActiveSettingsTabStore}
17+
></div>
18+
</div>
719
</div>
820

921
<style>
10-
11-
12-
.setting-items {
22+
.lineage-vertical-tabs-container {
23+
display: flex;
24+
}
25+
.lineage-vertical-tab-content {
1326
display: flex;
1427
flex-direction: column;
15-
padding: 5px 20px;
1628
width: 500px;
17-
overflow-y:auto;
18-
& .setting-item {
19-
padding: 10px 0;
20-
}
21-
22-
& .setting-item-heading {
23-
margin-top: 22px;
24-
25-
& .setting-item-name {
26-
font-size: 17px;
27-
}
28-
}
29-
}
30-
@media (max-width: 720px) {
31-
.setting-items{
32-
width:initial;
33-
}
29+
overflow-y: auto;
30+
height: 400px;
31+
padding-top: var(--size-4-8);
32+
padding-bottom: var(--size-4-12);
33+
padding-inline-start: var(--size-4-12);
34+
padding-inline-end: var(--size-4-12);
3435
}
35-
:global(.is-mobile) {
3636
37-
& .setting-items {
38-
padding: 5px 10px;
39-
}
40-
& :global(.setting-item) {
41-
display: flex;
42-
flex-direction: column;
43-
gap: 4px;
44-
}
45-
& :global(.setting-item-control) {
46-
width: 100%;
47-
justify-content: center;
37+
:global(.is-mobile) {
38+
& .lineage-vertical-tab-content {
39+
height: 500px;
4840
}
4941
}
5042
</style>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<script lang="ts">
2+
import { SettingsTab } from '../../../../actions/settings/render-settings';
3+
4+
export let setActiveTab : (tab: SettingsTab)=>void
5+
export let activeTab: SettingsTab
6+
const tabs: SettingsTab[] = ['General', 'Appearance', 'Layout']
7+
8+
</script>
9+
10+
<div class="lineage-vertical-tab-header">
11+
<div class="vertical-tab-header-group">
12+
<!-- <div class="vertical-tab-header-group-title">Options</div>-->
13+
<div class="vertical-tab-header-group-items">
14+
{#each tabs as tab}
15+
<div
16+
class={'vertical-tab-nav-item' +
17+
(tab === activeTab ? ' is-active' : '')}
18+
on:click={() => setActiveTab(tab)}
19+
>
20+
{tab}
21+
</div>
22+
{/each}
23+
</div>
24+
</div>
25+
</div>
26+
27+
<style>
28+
.lineage-vertical-tab-header {
29+
width: 250px;
30+
padding: var(--size-4-3);
31+
background-color: var(--background-secondary);
32+
}
33+
</style>

src/view/components/container/toolbar-vertical/vertical-toolbar-buttons-list.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,6 @@ export const VerticalToolbarButtonsList = (view: LineageView) => {
7878
icon: customIcons.alignV,
7979
id: 'center-active-node-v',
8080
},
81-
],
82-
},
83-
{
84-
id: 'display',
85-
buttons: [
8681
{
8782
label: lang.controls_single_column,
8883
onClick: h.toggleOutlineMode,

0 commit comments

Comments
 (0)