支持前端使能/禁用代码折叠

This commit is contained in:
code-october 2024-10-11 11:19:36 +00:00
parent c5074f0aa4
commit 6792d6e475
7 changed files with 52 additions and 2 deletions

View File

@ -169,6 +169,12 @@ export function PreCode(props: { children: any }) {
} }
function CustomCode(props: { children: any; className?: string }) { function CustomCode(props: { children: any; className?: string }) {
const chatStore = useChatStore();
const session = chatStore.currentSession();
const config = useAppConfig();
const enableCodeFold =
session.mask?.enableCodeFold != false && config.enableCodeFold;
const ref = useRef<HTMLPreElement>(null); const ref = useRef<HTMLPreElement>(null);
const [collapsed, setCollapsed] = useState(true); const [collapsed, setCollapsed] = useState(true);
const [showToggle, setShowToggle] = useState(false); const [showToggle, setShowToggle] = useState(false);
@ -190,13 +196,13 @@ function CustomCode(props: { children: any; className?: string }) {
className={props?.className} className={props?.className}
ref={ref} ref={ref}
style={{ style={{
maxHeight: collapsed ? "400px" : "none", maxHeight: enableCodeFold && collapsed ? "400px" : "none",
overflowY: "hidden", overflowY: "hidden",
}} }}
> >
{props.children} {props.children}
</code> </code>
{showToggle && collapsed && ( {showToggle && enableCodeFold && collapsed && (
<div <div
className={`show-hide-button ${collapsed ? "collapsed" : "expanded"}`} className={`show-hide-button ${collapsed ? "collapsed" : "expanded"}`}
> >

View File

@ -183,6 +183,23 @@ export function MaskConfig(props: {
></input> ></input>
</ListItem> </ListItem>
)} )}
{globalConfig.enableCodeFold && (
<ListItem
title={Locale.Mask.Config.CodeFold.Title}
subTitle={Locale.Mask.Config.CodeFold.SubTitle}
>
<input
aria-label={Locale.Mask.Config.CodeFold.Title}
type="checkbox"
checked={props.mask.enableCodeFold !== false}
onChange={(e) => {
props.updateMask((mask) => {
mask.enableCodeFold = e.currentTarget.checked;
});
}}
></input>
</ListItem>
)}
{!props.shouldSyncFromGlobal ? ( {!props.shouldSyncFromGlobal ? (
<ListItem <ListItem

View File

@ -1509,6 +1509,21 @@ export function Settings() {
} }
></input> ></input>
</ListItem> </ListItem>
<ListItem
title={Locale.Mask.Config.CodeFold.Title}
subTitle={Locale.Mask.Config.CodeFold.SubTitle}
>
<input
aria-label={Locale.Mask.Config.CodeFold.Title}
type="checkbox"
checked={config.enableCodeFold}
onChange={(e) =>
updateConfig(
(config) => (config.enableCodeFold = e.currentTarget.checked),
)
}
></input>
</ListItem>
</List> </List>
<SyncItems /> <SyncItems />

View File

@ -665,6 +665,10 @@ const cn = {
Title: "启用Artifacts", Title: "启用Artifacts",
SubTitle: "启用之后可以直接渲染HTML页面", SubTitle: "启用之后可以直接渲染HTML页面",
}, },
CodeFold: {
Title: "启用CodeFold",
SubTitle: "启用之后可以折叠/展开过长的代码块",
},
Share: { Share: {
Title: "分享此面具", Title: "分享此面具",
SubTitle: "生成此面具的直达链接", SubTitle: "生成此面具的直达链接",

View File

@ -675,6 +675,11 @@ const en: LocaleType = {
Title: "Enable Artifacts", Title: "Enable Artifacts",
SubTitle: "Can render HTML page when enable artifacts.", SubTitle: "Can render HTML page when enable artifacts.",
}, },
CodeFold: {
Title: "Enable CodeFold",
SubTitle:
"Automatically collapse/expand overly long code block when enable CodeFold",
},
Share: { Share: {
Title: "Share This Mask", Title: "Share This Mask",
SubTitle: "Generate a link to this mask", SubTitle: "Generate a link to this mask",

View File

@ -52,6 +52,8 @@ export const DEFAULT_CONFIG = {
enableArtifacts: true, // show artifacts config enableArtifacts: true, // show artifacts config
enableCodeFold: true, // code fold config
disablePromptHint: false, disablePromptHint: false,
dontShowMaskSplashScreen: false, // dont show splash screen when create chat dontShowMaskSplashScreen: false, // dont show splash screen when create chat

View File

@ -19,6 +19,7 @@ export type Mask = {
builtin: boolean; builtin: boolean;
plugin?: string[]; plugin?: string[];
enableArtifacts?: boolean; enableArtifacts?: boolean;
enableCodeFold?: boolean;
}; };
export const DEFAULT_MASK_STATE = { export const DEFAULT_MASK_STATE = {