diff --git a/api/system.go b/api/system.go index 31fe135d..41220741 100644 --- a/api/system.go +++ b/api/system.go @@ -10,4 +10,6 @@ type SystemStatus struct { AllowSignUp bool `json:"allowSignUp"` // Additional style. AdditionalStyle string `json:"additionalStyle"` + // Additional script. + AdditionalScript string `json:"additionalScript"` } diff --git a/api/system_setting.go b/api/system_setting.go index 6327a0ff..ce35bb8a 100644 --- a/api/system_setting.go +++ b/api/system_setting.go @@ -12,6 +12,8 @@ const ( SystemSettingAllowSignUpName SystemSettingName = "allowSignUp" // SystemSettingAdditionalStyleName is the key type of additional style. SystemSettingAdditionalStyleName SystemSettingName = "additionalStyle" + // SystemSettingAdditionalScriptName is the key type of additional script. + SystemSettingAdditionalScriptName SystemSettingName = "additionalScript" ) func (key SystemSettingName) String() string { @@ -20,6 +22,8 @@ func (key SystemSettingName) String() string { return "allowSignUp" case SystemSettingAdditionalStyleName: return "additionalStyle" + case SystemSettingAdditionalScriptName: + return "additionalScript" } return "" } @@ -65,6 +69,12 @@ func (upsert SystemSettingUpsert) Validate() error { if err != nil { return fmt.Errorf("failed to unmarshal system setting additional style value") } + } else if upsert.Name == SystemSettingAdditionalScriptName { + value := "" + err := json.Unmarshal([]byte(upsert.Value), &value) + if err != nil { + return fmt.Errorf("failed to unmarshal system setting additional script value") + } } else { return fmt.Errorf("invalid system setting name") } diff --git a/server/system.go b/server/system.go index dad8fffa..64ea9d14 100644 --- a/server/system.go +++ b/server/system.go @@ -38,10 +38,11 @@ func (s *Server) registerSystemRoutes(g *echo.Group) { } systemStatus := api.SystemStatus{ - Host: hostUser, - Profile: s.Profile, - AllowSignUp: false, - AdditionalStyle: "", + Host: hostUser, + Profile: s.Profile, + AllowSignUp: false, + AdditionalStyle: "", + AdditionalScript: "", } systemSettingList, err := s.Store.FindSystemSettingList(ctx, &api.SystemSettingFind{}) @@ -59,6 +60,8 @@ func (s *Server) registerSystemRoutes(g *echo.Group) { systemStatus.AllowSignUp = value.(bool) } else if systemSetting.Name == api.SystemSettingAdditionalStyleName { systemStatus.AdditionalStyle = value.(string) + } else if systemSetting.Name == api.SystemSettingAdditionalScriptName { + systemStatus.AdditionalScript = value.(string) } } diff --git a/web/src/App.tsx b/web/src/App.tsx index 7a59fa85..2a94cf54 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -30,6 +30,11 @@ function App() { styleEl.setAttribute("type", "text/css"); document.head.appendChild(styleEl); } + if (status.additionalScript) { + const scriptEl = document.createElement("script"); + scriptEl.innerHTML = status.additionalScript; + document.head.appendChild(scriptEl); + } }); }, []); diff --git a/web/src/components/Settings/PreferencesSection.tsx b/web/src/components/Settings/PreferencesSection.tsx index 8c276657..5293340d 100644 --- a/web/src/components/Settings/PreferencesSection.tsx +++ b/web/src/components/Settings/PreferencesSection.tsx @@ -80,10 +80,6 @@ const PreferencesSection = () => { handleValueChanged={handleDefaultMemoVisibilityChanged} /> - - {t("setting.preference-section.fold-memo")} - - {t("setting.preference-section.default-memo-sort-option")} { handleValueChanged={handleMemoDisplayTsOptionChanged} /> + + {t("setting.preference-section.enable-folding-memo")} + + ); }; diff --git a/web/src/components/Settings/SystemSection.tsx b/web/src/components/Settings/SystemSection.tsx index 683617e1..0eeec04b 100644 --- a/web/src/components/Settings/SystemSection.tsx +++ b/web/src/components/Settings/SystemSection.tsx @@ -7,6 +7,7 @@ import "../../less/settings/preferences-section.less"; interface State { allowSignUp: boolean; additionalStyle: string; + additionalScript: string; } const SystemSection = () => { @@ -14,6 +15,7 @@ const SystemSection = () => { const [state, setState] = useState({ allowSignUp: false, additionalStyle: "", + additionalScript: "", }); useEffect(() => { @@ -22,6 +24,7 @@ const SystemSection = () => { setState({ allowSignUp: status.allowSignUp, additionalStyle: status.additionalStyle, + additionalScript: status.additionalScript, }); }); }, []); @@ -51,6 +54,20 @@ const SystemSection = () => { }); }; + const handleAdditionalScriptChanged = (value: string) => { + setState({ + ...state, + additionalScript: value, + }); + }; + + const handleSaveAdditionalScript = async () => { + await api.upsertSystemSetting({ + name: "additionalScript", + value: JSON.stringify(state.additionalScript), + }); + }; + return ( {t("common.basic")} @@ -58,12 +75,12 @@ const SystemSection = () => { Allow user signup handleAllowSignUpChanged(event.target.checked)} /> - + Additional style Save - + { defaultValue={state.additionalStyle} onChange={(event) => handleAdditionalStyleChanged(event.target.value)} /> + + Additional script + + Save + + + handleAdditionalScriptChanged(event.target.value)} + /> ); }; diff --git a/web/src/locales/en.json b/web/src/locales/en.json index ac08a639..4d65d343 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -139,7 +139,7 @@ }, "preference-section": { "default-memo-visibility": "Default memo visibility", - "fold-memo": "Fold Memo", + "enable-folding-memo": "Enable folding memo", "editor-font-style": "Editor font style", "mobile-editor-style": "Mobile editor style", "default-memo-sort-option": "Display by created/updated time", diff --git a/web/src/locales/vi.json b/web/src/locales/vi.json index 495b74f5..8d8cf256 100644 --- a/web/src/locales/vi.json +++ b/web/src/locales/vi.json @@ -138,7 +138,7 @@ }, "preference-section": { "default-memo-visibility": "Chế độ memo mặc định", - "fold-memo": "nếp gấp Memo", + "enable-folding-memo": "Enable folding memo", "editor-font-style": "Thay đổi font cho trình soạn thảo", "mobile-editor-style": "Vị trí editor trên mobile", "default-memo-sort-option": "Sắp xếp theo thời gian đã tạo", diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json index cdd5eab5..57e09501 100644 --- a/web/src/locales/zh.json +++ b/web/src/locales/zh.json @@ -139,7 +139,7 @@ }, "preference-section": { "default-memo-visibility": "默认 Memo 可见性", - "fold-memo": "折叠 Memo", + "enable-folding-memo": "开启折叠 Memo", "editor-font-style": "编辑器字体样式", "mobile-editor-style": "移动端编辑器样式", "default-memo-sort-option": "按创建时间/更新时间显示", diff --git a/web/src/types/modules/system.d.ts b/web/src/types/modules/system.d.ts index aeebf657..ecad2d56 100644 --- a/web/src/types/modules/system.d.ts +++ b/web/src/types/modules/system.d.ts @@ -9,6 +9,7 @@ interface SystemStatus { // System settings allowSignUp: boolean; additionalStyle: string; + additionalScript: string; } interface SystemSetting {
{t("common.basic")}