From bb9a099deab5e5c40a043dde30d4b82d8ed25dce Mon Sep 17 00:00:00 2001 From: Conatum Date: Sun, 1 Oct 2023 07:34:16 +0300 Subject: [PATCH] fix(settingui): Limit desc table length. --- src/babel/settings.py | 5 +++-- src/modules/member_admin/settings.py | 8 ++++---- src/settings/ui.py | 22 +++++++++++++++++++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/babel/settings.py b/src/babel/settings.py index 47da6afe..24c45914 100644 --- a/src/babel/settings.py +++ b/src/babel/settings.py @@ -1,3 +1,4 @@ +from typing import Optional from settings import ModelData from settings.setting_types import StringSetting, BoolSetting @@ -23,11 +24,11 @@ class LocaleSetting(StringSetting): "Enter a supported language (e.g. 'en-GB')." ) - def _desc_table(self) -> list[str]: + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: translator = ctx_translator.get() t = translator.t - lines = super()._desc_table() + lines = super()._desc_table(show_value=show_value) lines.append(( t(_p( 'settype:locale|summary_table|field:supported|key', diff --git a/src/modules/member_admin/settings.py b/src/modules/member_admin/settings.py index deaba142..95fb79e8 100644 --- a/src/modules/member_admin/settings.py +++ b/src/modules/member_admin/settings.py @@ -188,8 +188,8 @@ class MemberAdminSettings(SettingGroup): self.value = editor_data await self.write() - def _desc_table(self) -> list[str]: - lines = super()._desc_table() + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: + lines = super()._desc_table(show_value=show_value) t = ctx_translator.get().t keydescs = [ (key, t(value)) for key, value in self._subkey_desc.items() @@ -313,8 +313,8 @@ class MemberAdminSettings(SettingGroup): self.value = editor_data await self.write() - def _desc_table(self) -> list[str]: - lines = super()._desc_table() + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: + lines = super()._desc_table(show_value=show_value) t = ctx_translator.get().t keydescs = [ (key, t(value)) for key, value in self._subkey_desc_returning.items() diff --git a/src/settings/ui.py b/src/settings/ui.py index 046a961b..b804f73c 100644 --- a/src/settings/ui.py +++ b/src/settings/ui.py @@ -310,6 +310,22 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]): """ name = self.display_name value = f"{self.long_desc}\n{self.desc_table}" + if len(value) > 1024: + t = ctx_translator.get().t + desc_table = '\n'.join( + tabulate( + *self._desc_table( + show_value=t(_p( + 'setting|embed_field|too_long', + "Too long to display here!" + )) + ) + ) + ) + value = f"{self.long_desc}\n{desc_table}" + if len(value) > 1024: + # Forcibly trim + value = value[:1020] + '...' return {'name': name, 'value': value} @property @@ -341,14 +357,14 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]): embed.description = "{}\n{}".format(self.long_desc.format(self=self), self.desc_table) return embed - def _desc_table(self) -> list[str]: + def _desc_table(self, show_value: Optional[str] = None) -> list[tuple[str, str]]: t = ctx_translator.get().t lines = [] # Currently line lines.append(( t(_p('setting|summary_table|field:currently|key', "Currently")), - self.formatted or self.notset_str + show_value or (self.formatted or self.notset_str) )) # Default line @@ -380,7 +396,7 @@ class InteractiveSetting(BaseSetting[ParentID, SettingData, SettingValue]): return TextInput( label=self.display_name, placeholder=self.accepts, - default=self.input_formatted, + default=self.input_formatted[:4000], required=self._required )