From ff876a261f3019db61ed73eeab32d3c2d3bcbf57 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Mon, 31 Aug 2020 20:49:10 +0800 Subject: [PATCH] feat: enhance styles and add settings for recursive toggling --- src/components/SideBar.tsx | 1 + src/components/settings/FileTreeSettings.tsx | 29 ++++++++++++++++++-- src/components/settings/SettingsBar.tsx | 4 +-- src/components/settings/SidebarSettings.tsx | 10 +++---- src/content.scss | 4 +-- src/driver/core/FileExplorer.ts | 15 +++++++++- src/utils/configHelper.ts | 3 ++ 7 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index c0e70a8..75259e5 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -137,6 +137,7 @@ const RawGitako: React.FC = function RawGitako(props) { freeze={showSettings} accessToken={accessToken} loadWithPJAX={loadWithPJAX} + config={configContext.val} /> ) )} diff --git a/src/components/settings/FileTreeSettings.tsx b/src/components/settings/FileTreeSettings.tsx index 2a1dc12..661ad17 100644 --- a/src/components/settings/FileTreeSettings.tsx +++ b/src/components/settings/FileTreeSettings.tsx @@ -7,7 +7,7 @@ import { Option, SelectInput } from '../SelectInput' import { Field } from './Field' import { SettingsSection } from './SettingsSection' -const options: Option[] = [ +const iconOptions: Option[] = [ { key: 'rich', value: 'rich', @@ -25,16 +25,41 @@ const options: Option[] = [ }, ] +const recursiveToggleFolderOptions: Option[] = [ + { + key: 'shift', + value: 'shift', + label: `⇧(shift)`, + }, + { + key: 'alt', + value: 'alt', + label: `⌥(alt)`, + }, +] + type Props = {} export function FileTreeSettings(props: React.PropsWithChildren) { const configContext = useConfigs() return ( + + { + configContext.set({ + recursiveToggleFolder: v, + }) + }} + value={configContext.val.recursiveToggleFolder} + > + id="file-tree-icons" - options={options} + options={iconOptions} onChange={v => { configContext.set({ icons: v, diff --git a/src/components/settings/SettingsBar.tsx b/src/components/settings/SettingsBar.tsx index 530497b..df56029 100644 --- a/src/components/settings/SettingsBar.tsx +++ b/src/components/settings/SettingsBar.tsx @@ -44,7 +44,7 @@ function SettingsBarContent() { }, { key: 'shrinkGitHubHeader', - label: 'Shrink GitHub Header(experimental)', + label: 'Shrink GitHub header(experimental)', }, ] : [] @@ -68,7 +68,7 @@ function SettingsBarContent() { {reloadHint &&
{reloadHint}
}
)} - + Report bug / Request feature. diff --git a/src/components/settings/SidebarSettings.tsx b/src/components/settings/SidebarSettings.tsx index 54d8182..8a5460e 100644 --- a/src/components/settings/SidebarSettings.tsx +++ b/src/components/settings/SidebarSettings.tsx @@ -12,7 +12,7 @@ import { SettingsSection } from './SettingsSection' type Props = {} -const options: Option[] = [ +const toggleButtonContentOptions: Option[] = [ { key: 'logo', value: 'logo', @@ -36,8 +36,8 @@ export function SidebarSettings(props: React.PropsWithChildren) { }, [configContext.val.shortcut]) return ( - - + +
) { )}
- + { configContext.set({ toggleButtonContent: v, diff --git a/src/content.scss b/src/content.scss index 947f3ee..89cf08d 100644 --- a/src/content.scss +++ b/src/content.scss @@ -545,11 +545,11 @@ $minimal-z-index: max($github-header-z-index, $github-pull-request-float-header- } .field { - margin-bottom: 4px; + margin-bottom: 8px; label { display: inline-block; - margin-bottom: 2px; + margin-bottom: 0px; font-weight: 600; } input { diff --git a/src/driver/core/FileExplorer.ts b/src/driver/core/FileExplorer.ts index 0f5fed7..1325e1d 100644 --- a/src/driver/core/FileExplorer.ts +++ b/src/driver/core/FileExplorer.ts @@ -11,6 +11,7 @@ export type Props = { freeze: boolean accessToken: string | undefined toggleShowSettings: React.MouseEventHandler + config: Config loadWithPJAX(url: string): void } @@ -242,7 +243,19 @@ export const onNodeClick: BoundMethodCreator<[ if (preventDefault) event.preventDefault() if (node.type === 'tree') { - dispatch.call(toggleNodeExpansion, node, { skipScrollToNode: true, recursive: event.shiftKey }) + const [ + , + { + config: { recursiveToggleFolder }, + }, + ] = dispatch.get() + const recursive = + (recursiveToggleFolder === 'shift' && event.shiftKey) || + (recursiveToggleFolder === 'alt' && event.altKey) + dispatch.call(toggleNodeExpansion, node, { + skipScrollToNode: true, + recursive, + }) } else if (node.type === 'blob') { const [, { loadWithPJAX }] = dispatch.get() dispatch.call(focusNode, node, true) diff --git a/src/utils/configHelper.ts b/src/utils/configHelper.ts index c4bf06c..e587dae 100644 --- a/src/utils/configHelper.ts +++ b/src/utils/configHelper.ts @@ -11,6 +11,7 @@ export type Config = { icons: 'rich' | 'dim' | 'native' toggleButtonVerticalDistance: number toggleButtonContent: 'logo' | 'octoface' + recursiveToggleFolder: 'shift' | 'alt' shrinkGitHubHeader: boolean } @@ -25,6 +26,7 @@ export enum configKeys { icons = 'icons', toggleButtonVerticalDistance = 'toggleButtonVerticalDistance', toggleButtonContent = 'toggleButtonContent', + recursiveToggleFolder = 'recursiveToggleFolder', shrinkGitHubHeader = 'shrinkGitHubHeader', } @@ -39,6 +41,7 @@ const defaultConfigs: Config = { icons: 'rich', toggleButtonVerticalDistance: 124, // align with GitHub's navbar items toggleButtonContent: 'logo', + recursiveToggleFolder: 'shift', shrinkGitHubHeader: false, }