Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
174b8b04
Unverified
Commit
174b8b04
authored
Feb 16, 2025
by
MHZ
Committed by
GitHub
Feb 16, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: support blur processing for NSFW content with customizable NSFW tags (#4407)
parent
47a9b434
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
246 additions
and
85 deletions
+246
-85
workspace_setting_service.proto
proto/api/v1/workspace_setting_service.proto
+4
-0
workspace_setting_service.pb.go
proto/gen/api/v1/workspace_setting_service.pb.go
+65
-42
apidocs.swagger.yaml
proto/gen/apidocs.swagger.yaml
+8
-0
workspace_setting.pb.go
proto/gen/store/workspace_setting.pb.go
+45
-22
workspace_setting.proto
proto/store/workspace_setting.proto
+4
-0
workspace_setting_service.go
server/router/api/v1/workspace_setting_service.go
+4
-0
workspace_setting.go
store/workspace_setting.go
+6
-0
MemoView.tsx
web/src/components/MemoView.tsx
+43
-15
MemoRelatedSettings.tsx
web/src/components/Settings/MemoRelatedSettings.tsx
+51
-0
en.json
web/src/locales/en.json
+5
-2
zh-Hans.json
web/src/locales/zh-Hans.json
+5
-2
zh-Hant.json
web/src/locales/zh-Hant.json
+5
-2
MemoDetail.tsx
web/src/pages/MemoDetail.tsx
+1
-0
No files found.
proto/api/v1/workspace_setting_service.proto
View file @
174b8b04
...
...
@@ -116,6 +116,10 @@ message WorkspaceMemoRelatedSetting {
repeated
string
reactions
=
10
;
// disable_markdown_shortcuts disallow the registration of markdown shortcuts.
bool
disable_markdown_shortcuts
=
11
;
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
bool
enable_blur_nsfw_content
=
12
;
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
repeated
string
nsfw_tags
=
13
;
}
message
GetWorkspaceSettingRequest
{
...
...
proto/gen/api/v1/workspace_setting_service.pb.go
View file @
174b8b04
...
...
@@ -466,8 +466,12 @@ type WorkspaceMemoRelatedSetting struct {
Reactions
[]
string
`protobuf:"bytes,10,rep,name=reactions,proto3" json:"reactions,omitempty"`
// disable_markdown_shortcuts disallow the registration of markdown shortcuts.
DisableMarkdownShortcuts
bool
`protobuf:"varint,11,opt,name=disable_markdown_shortcuts,json=disableMarkdownShortcuts,proto3" json:"disable_markdown_shortcuts,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
EnableBlurNsfwContent
bool
`protobuf:"varint,12,opt,name=enable_blur_nsfw_content,json=enableBlurNsfwContent,proto3" json:"enable_blur_nsfw_content,omitempty"`
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
NsfwTags
[]
string
`protobuf:"bytes,13,rep,name=nsfw_tags,json=nsfwTags,proto3" json:"nsfw_tags,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
WorkspaceMemoRelatedSetting
)
Reset
()
{
...
...
@@ -570,6 +574,20 @@ func (x *WorkspaceMemoRelatedSetting) GetDisableMarkdownShortcuts() bool {
return
false
}
func
(
x
*
WorkspaceMemoRelatedSetting
)
GetEnableBlurNsfwContent
()
bool
{
if
x
!=
nil
{
return
x
.
EnableBlurNsfwContent
}
return
false
}
func
(
x
*
WorkspaceMemoRelatedSetting
)
GetNsfwTags
()
[]
string
{
if
x
!=
nil
{
return
x
.
NsfwTags
}
return
nil
}
type
GetWorkspaceSettingRequest
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// The resource name of the workspace setting.
...
...
@@ -853,7 +871,7 @@ var file_api_v1_workspace_setting_service_proto_rawDesc = string([]byte{
0x5f
,
0x55
,
0x4e
,
0x53
,
0x50
,
0x45
,
0x43
,
0x49
,
0x46
,
0x49
,
0x45
,
0x44
,
0x10
,
0x00
,
0x12
,
0x0c
,
0x0a
,
0x08
,
0x44
,
0x41
,
0x54
,
0x41
,
0x42
,
0x41
,
0x53
,
0x45
,
0x10
,
0x01
,
0x12
,
0x09
,
0x0a
,
0x05
,
0x4c
,
0x4f
,
0x43
,
0x41
,
0x4c
,
0x10
,
0x02
,
0x12
,
0x06
,
0x0a
,
0x02
,
0x53
,
0x33
,
0x10
,
0x03
,
0x22
,
0x
8b
,
0x04
,
0x0a
,
0x1b
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x4d
,
0x65
,
0x6d
,
0x
e1
,
0x04
,
0x0a
,
0x1b
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x52
,
0x65
,
0x6c
,
0x61
,
0x74
,
0x65
,
0x64
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x3c
,
0x0a
,
0x1a
,
0x64
,
0x69
,
0x73
,
0x61
,
0x6c
,
0x6c
,
0x6f
,
0x77
,
0x5f
,
0x70
,
0x75
,
0x62
,
0x6c
,
0x69
,
0x63
,
0x5f
,
0x76
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x18
,
0x01
,
0x20
,
...
...
@@ -885,50 +903,55 @@ var file_api_v1_workspace_setting_service_proto_rawDesc = string([]byte{
0x3c
,
0x0a
,
0x1a
,
0x64
,
0x69
,
0x73
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x72
,
0x6b
,
0x64
,
0x6f
,
0x77
,
0x6e
,
0x5f
,
0x73
,
0x68
,
0x6f
,
0x72
,
0x74
,
0x63
,
0x75
,
0x74
,
0x73
,
0x18
,
0x0b
,
0x20
,
0x01
,
0x28
,
0x08
,
0x52
,
0x18
,
0x64
,
0x69
,
0x73
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x4d
,
0x61
,
0x72
,
0x6b
,
0x64
,
0x6f
,
0x77
,
0x6e
,
0x53
,
0x68
,
0x6f
,
0x72
,
0x74
,
0x63
,
0x75
,
0x74
,
0x73
,
0x22
,
0x36
,
0x0a
,
0x1a
,
0x47
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x18
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x42
,
0x04
,
0xe2
,
0x41
,
0x01
,
0x02
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x56
,
0x0a
,
0x1a
,
0x53
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x38
,
0x0a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0xd9
,
0x02
,
0x0a
,
0x17
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x93
,
0x01
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x28
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x32
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x25
,
0x12
,
0x23
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x77
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0xa7
,
0x01
,
0x0a
,
0x13
,
0x53
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x64
,
0x6f
,
0x77
,
0x6e
,
0x53
,
0x68
,
0x6f
,
0x72
,
0x74
,
0x63
,
0x75
,
0x74
,
0x73
,
0x12
,
0x37
,
0x0a
,
0x18
,
0x65
,
0x6e
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x5f
,
0x62
,
0x6c
,
0x75
,
0x72
,
0x5f
,
0x6e
,
0x73
,
0x66
,
0x77
,
0x5f
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x18
,
0x0c
,
0x20
,
0x01
,
0x28
,
0x08
,
0x52
,
0x15
,
0x65
,
0x6e
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x42
,
0x6c
,
0x75
,
0x72
,
0x4e
,
0x73
,
0x66
,
0x77
,
0x43
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x12
,
0x1b
,
0x0a
,
0x09
,
0x6e
,
0x73
,
0x66
,
0x77
,
0x5f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x18
,
0x0d
,
0x20
,
0x03
,
0x28
,
0x09
,
0x52
,
0x08
,
0x6e
,
0x73
,
0x66
,
0x77
,
0x54
,
0x61
,
0x67
,
0x73
,
0x22
,
0x36
,
0x0a
,
0x1a
,
0x47
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x18
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x42
,
0x04
,
0xe2
,
0x41
,
0x01
,
0x02
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x56
,
0x0a
,
0x1a
,
0x53
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x38
,
0x0a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0xd9
,
0x02
,
0x0a
,
0x17
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x93
,
0x01
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x28
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x
53
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x
47
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x
46
,
0xda
,
0x41
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x82
,
0xd3
,
0xe4
,
0x
93
,
0x02
,
0x36
,
0x3a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0x2b
,
0x2f
,
0x61
,
0x
70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x77
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x2f
,
0x
7b
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x73
,
0x65
,
0x
74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x42
,
0xb4
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x
2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x42
,
0x1c
,
0x67
,
0x22
,
0x
32
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x25
,
0x
12
,
0x23
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x77
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x
61
,
0x63
,
0x65
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x
67
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0xa7
,
0x01
,
0x0a
,
0x13
,
0x53
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x
6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x28
,
0x2e
,
0x6d
,
0x
65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x53
,
0x65
,
0x74
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x31
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x31
,
0xca
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x31
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x46
,
0xda
,
0x41
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x36
,
0x3a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0x2b
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x77
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x2f
,
0x7b
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x42
,
0xb4
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x42
,
0x1c
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x31
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x31
,
0xca
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x31
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
})
var
(
...
...
proto/gen/apidocs.swagger.yaml
View file @
174b8b04
...
...
@@ -2336,6 +2336,14 @@ definitions:
disableMarkdownShortcuts
:
type
:
boolean
description
:
disable_markdown_shortcuts disallow the registration of markdown shortcuts.
enableBlurNsfwContent
:
type
:
boolean
description
:
enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
nsfwTags
:
type
:
array
items
:
type
:
string
description
:
nsfw_tags is the list of tags that mark content as NSFW for blurring.
apiv1WorkspaceSetting
:
type
:
object
properties
:
...
...
proto/gen/store/workspace_setting.pb.go
View file @
174b8b04
...
...
@@ -677,8 +677,12 @@ type WorkspaceMemoRelatedSetting struct {
Reactions
[]
string
`protobuf:"bytes,10,rep,name=reactions,proto3" json:"reactions,omitempty"`
// disable markdown shortcuts
DisableMarkdownShortcuts
bool
`protobuf:"varint,11,opt,name=disable_markdown_shortcuts,json=disableMarkdownShortcuts,proto3" json:"disable_markdown_shortcuts,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
EnableBlurNsfwContent
bool
`protobuf:"varint,12,opt,name=enable_blur_nsfw_content,json=enableBlurNsfwContent,proto3" json:"enable_blur_nsfw_content,omitempty"`
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
NsfwTags
[]
string
`protobuf:"bytes,13,rep,name=nsfw_tags,json=nsfwTags,proto3" json:"nsfw_tags,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
WorkspaceMemoRelatedSetting
)
Reset
()
{
...
...
@@ -781,6 +785,20 @@ func (x *WorkspaceMemoRelatedSetting) GetDisableMarkdownShortcuts() bool {
return
false
}
func
(
x
*
WorkspaceMemoRelatedSetting
)
GetEnableBlurNsfwContent
()
bool
{
if
x
!=
nil
{
return
x
.
EnableBlurNsfwContent
}
return
false
}
func
(
x
*
WorkspaceMemoRelatedSetting
)
GetNsfwTags
()
[]
string
{
if
x
!=
nil
{
return
x
.
NsfwTags
}
return
nil
}
var
File_store_workspace_setting_proto
protoreflect
.
FileDescriptor
var
file_store_workspace_setting_proto_rawDesc
=
string
([]
byte
{
...
...
@@ -893,7 +911,7 @@ var file_store_workspace_setting_proto_rawDesc = string([]byte{
0x6b
,
0x65
,
0x74
,
0x18
,
0x05
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x06
,
0x62
,
0x75
,
0x63
,
0x6b
,
0x65
,
0x74
,
0x12
,
0x24
,
0x0a
,
0x0e
,
0x75
,
0x73
,
0x65
,
0x5f
,
0x70
,
0x61
,
0x74
,
0x68
,
0x5f
,
0x73
,
0x74
,
0x79
,
0x6c
,
0x65
,
0x18
,
0x06
,
0x20
,
0x01
,
0x28
,
0x08
,
0x52
,
0x0c
,
0x75
,
0x73
,
0x65
,
0x50
,
0x61
,
0x74
,
0x68
,
0x53
,
0x74
,
0x79
,
0x6c
,
0x65
,
0x22
,
0x
8b
,
0x04
,
0x0a
,
0x1b
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x74
,
0x68
,
0x53
,
0x74
,
0x79
,
0x6c
,
0x65
,
0x22
,
0x
e1
,
0x04
,
0x0a
,
0x1b
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x52
,
0x65
,
0x6c
,
0x61
,
0x74
,
0x65
,
0x64
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x3c
,
0x0a
,
0x1a
,
0x64
,
0x69
,
0x73
,
0x61
,
0x6c
,
0x6c
,
0x6f
,
0x77
,
0x5f
,
0x70
,
0x75
,
0x62
,
0x6c
,
0x69
,
0x63
,
0x5f
,
0x76
,
0x69
,
0x73
,
0x69
,
0x62
,
...
...
@@ -926,25 +944,30 @@ var file_store_workspace_setting_proto_rawDesc = string([]byte{
0x6c
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x72
,
0x6b
,
0x64
,
0x6f
,
0x77
,
0x6e
,
0x5f
,
0x73
,
0x68
,
0x6f
,
0x72
,
0x74
,
0x63
,
0x75
,
0x74
,
0x73
,
0x18
,
0x0b
,
0x20
,
0x01
,
0x28
,
0x08
,
0x52
,
0x18
,
0x64
,
0x69
,
0x73
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x4d
,
0x61
,
0x72
,
0x6b
,
0x64
,
0x6f
,
0x77
,
0x6e
,
0x53
,
0x68
,
0x6f
,
0x72
,
0x74
,
0x63
,
0x75
,
0x74
,
0x73
,
0x2a
,
0x73
,
0x0a
,
0x13
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x4b
,
0x65
,
0x79
,
0x12
,
0x25
,
0x0a
,
0x21
,
0x57
,
0x4f
,
0x52
,
0x4b
,
0x53
,
0x50
,
0x41
,
0x43
,
0x45
,
0x5f
,
0x53
,
0x45
,
0x54
,
0x54
,
0x49
,
0x4e
,
0x47
,
0x5f
,
0x4b
,
0x45
,
0x59
,
0x5f
,
0x55
,
0x4e
,
0x53
,
0x50
,
0x45
,
0x43
,
0x49
,
0x46
,
0x49
,
0x45
,
0x44
,
0x10
,
0x00
,
0x12
,
0x09
,
0x0a
,
0x05
,
0x42
,
0x41
,
0x53
,
0x49
,
0x43
,
0x10
,
0x01
,
0x12
,
0x0b
,
0x0a
,
0x07
,
0x47
,
0x45
,
0x4e
,
0x45
,
0x52
,
0x41
,
0x4c
,
0x10
,
0x02
,
0x12
,
0x0b
,
0x0a
,
0x07
,
0x53
,
0x54
,
0x4f
,
0x52
,
0x41
,
0x47
,
0x45
,
0x10
,
0x03
,
0x12
,
0x10
,
0x0a
,
0x0c
,
0x4d
,
0x45
,
0x4d
,
0x4f
,
0x5f
,
0x52
,
0x45
,
0x4c
,
0x41
,
0x54
,
0x45
,
0x44
,
0x10
,
0x04
,
0x42
,
0xa0
,
0x01
,
0x0a
,
0x0f
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x73
,
0x74
,
0x6f
,
0x72
,
0x65
,
0x42
,
0x15
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x29
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x73
,
0x74
,
0x6f
,
0x72
,
0x65
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x53
,
0x58
,
0xaa
,
0x02
,
0x0b
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0xca
,
0x02
,
0x0b
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0xe2
,
0x02
,
0x17
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
0x74
,
0x63
,
0x75
,
0x74
,
0x73
,
0x12
,
0x37
,
0x0a
,
0x18
,
0x65
,
0x6e
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x5f
,
0x62
,
0x6c
,
0x75
,
0x72
,
0x5f
,
0x6e
,
0x73
,
0x66
,
0x77
,
0x5f
,
0x63
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x18
,
0x0c
,
0x20
,
0x01
,
0x28
,
0x08
,
0x52
,
0x15
,
0x65
,
0x6e
,
0x61
,
0x62
,
0x6c
,
0x65
,
0x42
,
0x6c
,
0x75
,
0x72
,
0x4e
,
0x73
,
0x66
,
0x77
,
0x43
,
0x6f
,
0x6e
,
0x74
,
0x65
,
0x6e
,
0x74
,
0x12
,
0x1b
,
0x0a
,
0x09
,
0x6e
,
0x73
,
0x66
,
0x77
,
0x5f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x18
,
0x0d
,
0x20
,
0x03
,
0x28
,
0x09
,
0x52
,
0x08
,
0x6e
,
0x73
,
0x66
,
0x77
,
0x54
,
0x61
,
0x67
,
0x73
,
0x2a
,
0x73
,
0x0a
,
0x13
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x4b
,
0x65
,
0x79
,
0x12
,
0x25
,
0x0a
,
0x21
,
0x57
,
0x4f
,
0x52
,
0x4b
,
0x53
,
0x50
,
0x41
,
0x43
,
0x45
,
0x5f
,
0x53
,
0x45
,
0x54
,
0x54
,
0x49
,
0x4e
,
0x47
,
0x5f
,
0x4b
,
0x45
,
0x59
,
0x5f
,
0x55
,
0x4e
,
0x53
,
0x50
,
0x45
,
0x43
,
0x49
,
0x46
,
0x49
,
0x45
,
0x44
,
0x10
,
0x00
,
0x12
,
0x09
,
0x0a
,
0x05
,
0x42
,
0x41
,
0x53
,
0x49
,
0x43
,
0x10
,
0x01
,
0x12
,
0x0b
,
0x0a
,
0x07
,
0x47
,
0x45
,
0x4e
,
0x45
,
0x52
,
0x41
,
0x4c
,
0x10
,
0x02
,
0x12
,
0x0b
,
0x0a
,
0x07
,
0x53
,
0x54
,
0x4f
,
0x52
,
0x41
,
0x47
,
0x45
,
0x10
,
0x03
,
0x12
,
0x10
,
0x0a
,
0x0c
,
0x4d
,
0x45
,
0x4d
,
0x4f
,
0x5f
,
0x52
,
0x45
,
0x4c
,
0x41
,
0x54
,
0x45
,
0x44
,
0x10
,
0x04
,
0x42
,
0xa0
,
0x01
,
0x0a
,
0x0f
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x73
,
0x74
,
0x6f
,
0x72
,
0x65
,
0x42
,
0x15
,
0x57
,
0x6f
,
0x72
,
0x6b
,
0x73
,
0x70
,
0x61
,
0x63
,
0x65
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x29
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x73
,
0x74
,
0x6f
,
0x72
,
0x65
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x53
,
0x58
,
0xaa
,
0x02
,
0x0b
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0xca
,
0x02
,
0x0b
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0xe2
,
0x02
,
0x17
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x53
,
0x74
,
0x6f
,
0x72
,
0x65
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
})
var
(
...
...
proto/store/workspace_setting.proto
View file @
174b8b04
...
...
@@ -115,4 +115,8 @@ message WorkspaceMemoRelatedSetting {
repeated
string
reactions
=
10
;
// disable markdown shortcuts
bool
disable_markdown_shortcuts
=
11
;
// enable_blur_nsfw_content enables blurring of content marked as not safe for work (NSFW).
bool
enable_blur_nsfw_content
=
12
;
// nsfw_tags is the list of tags that mark content as NSFW for blurring.
repeated
string
nsfw_tags
=
13
;
}
server/router/api/v1/workspace_setting_service.go
View file @
174b8b04
...
...
@@ -239,6 +239,8 @@ func convertWorkspaceMemoRelatedSettingFromStore(setting *storepb.WorkspaceMemoR
EnableLocation
:
setting
.
EnableLocation
,
Reactions
:
setting
.
Reactions
,
DisableMarkdownShortcuts
:
setting
.
DisableMarkdownShortcuts
,
EnableBlurNsfwContent
:
setting
.
EnableBlurNsfwContent
,
NsfwTags
:
setting
.
NsfwTags
,
}
}
...
...
@@ -257,5 +259,7 @@ func convertWorkspaceMemoRelatedSettingToStore(setting *v1pb.WorkspaceMemoRelate
EnableLocation
:
setting
.
EnableLocation
,
Reactions
:
setting
.
Reactions
,
DisableMarkdownShortcuts
:
setting
.
DisableMarkdownShortcuts
,
EnableBlurNsfwContent
:
setting
.
EnableBlurNsfwContent
,
NsfwTags
:
setting
.
NsfwTags
,
}
}
store/workspace_setting.go
View file @
174b8b04
...
...
@@ -143,6 +143,9 @@ const DefaultContentLengthLimit = 8 * 1024
// DefaultReactions is the default reactions for memo related setting.
var
DefaultReactions
=
[]
string
{
"👍"
,
"👎"
,
"❤️"
,
"🎉"
,
"😄"
,
"😕"
,
"😢"
,
"😡"
}
// DefaultNsfwTags is the default tags that mark content as NSFW for blurring.
var
DefaultNsfwTags
=
[]
string
{
"nsfw"
}
func
(
s
*
Store
)
GetWorkspaceMemoRelatedSetting
(
ctx
context
.
Context
)
(
*
storepb
.
WorkspaceMemoRelatedSetting
,
error
)
{
workspaceSetting
,
err
:=
s
.
GetWorkspaceSetting
(
ctx
,
&
FindWorkspaceSetting
{
Name
:
storepb
.
WorkspaceSettingKey_MEMO_RELATED
.
String
(),
...
...
@@ -161,6 +164,9 @@ func (s *Store) GetWorkspaceMemoRelatedSetting(ctx context.Context) (*storepb.Wo
if
len
(
workspaceMemoRelatedSetting
.
Reactions
)
==
0
{
workspaceMemoRelatedSetting
.
Reactions
=
append
(
workspaceMemoRelatedSetting
.
Reactions
,
DefaultReactions
...
)
}
if
len
(
workspaceMemoRelatedSetting
.
NsfwTags
)
==
0
{
workspaceMemoRelatedSetting
.
NsfwTags
=
append
(
workspaceMemoRelatedSetting
.
NsfwTags
,
DefaultNsfwTags
...
)
}
s
.
workspaceSettingCache
.
Store
(
storepb
.
WorkspaceSettingKey_MEMO_RELATED
.
String
(),
&
storepb
.
WorkspaceSetting
{
Key
:
storepb
.
WorkspaceSettingKey_MEMO_RELATED
,
Value
:
&
storepb
.
WorkspaceSetting_MemoRelatedSetting
{
MemoRelatedSetting
:
workspaceMemoRelatedSetting
},
...
...
web/src/components/MemoView.tsx
View file @
174b8b04
import
{
Tooltip
}
from
"@mui/joy"
;
import
{
BookmarkIcon
,
MessageCircleMoreIcon
}
from
"lucide-react"
;
import
{
BookmarkIcon
,
EyeOffIcon
,
MessageCircleMoreIcon
}
from
"lucide-react"
;
import
{
memo
,
useCallback
,
useRef
,
useState
}
from
"react"
;
import
{
Link
,
useLocation
}
from
"react-router-dom"
;
import
useAsyncEffect
from
"@/hooks/useAsyncEffect"
;
...
...
@@ -32,6 +32,7 @@ interface Props {
showCreator
?:
boolean
;
showVisibility
?:
boolean
;
showPinned
?:
boolean
;
showNsfwContent
?:
boolean
;
className
?:
string
;
parentPage
?:
string
;
}
...
...
@@ -47,6 +48,7 @@ const MemoView: React.FC<Props> = (props: Props) => {
const
userStatsStore
=
useUserStatsStore
();
const
[
showEditor
,
setShowEditor
]
=
useState
<
boolean
>
(
false
);
const
[
creator
,
setCreator
]
=
useState
(
userStore
.
getUserByName
(
memo
.
creator
));
const
[
showNSFWContent
,
setShowNSFWContent
]
=
useState
(
props
.
showNsfwContent
);
const
memoContainerRef
=
useRef
<
HTMLDivElement
>
(
null
);
const
workspaceMemoRelatedSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
const
referencedMemos
=
memo
.
relations
.
filter
((
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
REFERENCE
);
...
...
@@ -58,6 +60,9 @@ const MemoView: React.FC<Props> = (props: Props) => {
const
readonly
=
memo
.
creator
!==
user
?.
name
&&
!
isSuperUser
(
user
);
const
isInMemoDetailPage
=
location
.
pathname
.
startsWith
(
`/
${
memo
.
name
}
`
);
const
parentPage
=
props
.
parentPage
||
location
.
pathname
;
const
nsfw
=
workspaceMemoRelatedSetting
.
enableBlurNsfwContent
&&
memo
.
tags
?.
some
((
tag
)
=>
workspaceMemoRelatedSetting
.
nsfwTags
.
includes
(
tag
.
toLowerCase
()));
// Initial related data: creator.
useAsyncEffect
(
async
()
=>
{
...
...
@@ -204,23 +209,46 @@ const MemoView: React.FC<Props> = (props: Props) => {
</
span
>
</
Tooltip
>
)
}
{
nsfw
&&
showNSFWContent
&&
(
<
span
className=
"cursor-pointer"
>
<
EyeOffIcon
className=
"w-4 h-auto text-amber-500"
onClick=
{
()
=>
setShowNSFWContent
(
false
)
}
/>
</
span
>
)
}
<
MemoActionMenu
className=
"-ml-1"
memo=
{
memo
}
readonly=
{
readonly
}
onEdit=
{
()
=>
setShowEditor
(
true
)
}
/>
</
div
>
</
div
>
<
MemoContent
key=
{
`${memo.name}-${memo.updateTime}`
}
memoName=
{
memo
.
name
}
nodes=
{
memo
.
nodes
}
readonly=
{
readonly
}
onClick=
{
handleMemoContentClick
}
onDoubleClick=
{
handleMemoContentDoubleClick
}
compact=
{
props
.
compact
&&
workspaceMemoRelatedSetting
.
enableAutoCompact
}
parentPage=
{
parentPage
}
/>
{
memo
.
location
&&
<
MemoLocationView
location=
{
memo
.
location
}
/>
}
<
MemoResourceListView
resources=
{
memo
.
resources
}
/>
<
MemoRelationListView
memo=
{
memo
}
relations=
{
referencedMemos
}
parentPage=
{
parentPage
}
/>
<
MemoReactionistView
memo=
{
memo
}
reactions=
{
memo
.
reactions
}
/>
<
div
className=
{
cn
(
"flex flex-col justify-start items-start w-full"
,
nsfw
&&
!
showNSFWContent
&&
"blur-lg transition-all duration-200"
,
)
}
>
<
MemoContent
key=
{
`${memo.name}-${memo.updateTime}`
}
memoName=
{
memo
.
name
}
nodes=
{
memo
.
nodes
}
readonly=
{
readonly
}
onClick=
{
handleMemoContentClick
}
onDoubleClick=
{
handleMemoContentDoubleClick
}
compact=
{
props
.
compact
&&
workspaceMemoRelatedSetting
.
enableAutoCompact
}
parentPage=
{
parentPage
}
/>
{
memo
.
location
&&
<
MemoLocationView
location=
{
memo
.
location
}
/>
}
<
MemoResourceListView
resources=
{
memo
.
resources
}
/>
<
MemoRelationListView
memo=
{
memo
}
relations=
{
referencedMemos
}
parentPage=
{
parentPage
}
/>
<
MemoReactionistView
memo=
{
memo
}
reactions=
{
memo
.
reactions
}
/>
</
div
>
{
nsfw
&&
!
showNSFWContent
&&
(
<>
<
div
className=
"absolute inset-0 bg-transparent"
/>
<
button
className=
"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 py-2 px-4 text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-zinc-800"
onClick=
{
()
=>
setShowNSFWContent
(
true
)
}
>
{
t
(
"memo.click-to-show-nsfw-content"
)
}
</
button
>
</>
)
}
</>
)
}
</
div
>
...
...
web/src/components/Settings/MemoRelatedSettings.tsx
View file @
174b8b04
...
...
@@ -15,6 +15,7 @@ const MemoRelatedSettings = () => {
const
originalSetting
=
workspaceStore
.
state
.
memoRelatedSetting
;
const
[
memoRelatedSetting
,
setMemoRelatedSetting
]
=
useState
<
WorkspaceMemoRelatedSetting
>
(
originalSetting
);
const
[
editingReaction
,
setEditingReaction
]
=
useState
<
string
>
(
""
);
const
[
editingNsfwTag
,
setEditingNsfwTag
]
=
useState
<
string
>
(
""
);
const
updatePartialSetting
=
(
partial
:
Partial
<
WorkspaceMemoRelatedSetting
>
)
=>
{
const
newWorkspaceMemoRelatedSetting
=
WorkspaceMemoRelatedSetting
.
fromPartial
({
...
...
@@ -33,6 +34,15 @@ const MemoRelatedSettings = () => {
setEditingReaction
(
""
);
};
const
upsertNsfwTags
=
()
=>
{
if
(
!
editingNsfwTag
)
{
return
;
}
updatePartialSetting
({
nsfwTags
:
uniq
([...
memoRelatedSetting
.
nsfwTags
,
editingNsfwTag
.
trim
()])
});
setEditingNsfwTag
(
""
);
};
const
updateSetting
=
async
()
=>
{
if
(
memoRelatedSetting
.
reactions
.
length
===
0
)
{
toast
.
error
(
"Reactions must not be empty."
);
...
...
@@ -155,6 +165,47 @@ const MemoRelatedSettings = () => {
/>
</
div
>
</
div
>
<
div
className=
"w-full"
>
<
div
className=
"w-full flex flex-row justify-between items-center"
>
<
span
>
{
t
(
"setting.memo-related-settings.enable-blur-nsfw-content"
)
}
</
span
>
<
Switch
checked=
{
memoRelatedSetting
.
enableBlurNsfwContent
}
onChange=
{
(
event
)
=>
updatePartialSetting
({
enableBlurNsfwContent
:
event
.
target
.
checked
})
}
/>
</
div
>
<
div
className=
"mt-2 w-full flex flex-row flex-wrap gap-1"
>
{
memoRelatedSetting
.
nsfwTags
.
map
((
nsfwTag
)
=>
{
return
(
<
Chip
className=
"!h-8"
key=
{
nsfwTag
}
variant=
"outlined"
size=
"lg"
endDecorator=
{
<
ChipDelete
onDelete=
{
()
=>
updatePartialSetting
({
nsfwTags
:
memoRelatedSetting
.
nsfwTags
.
filter
((
r
)
=>
r
!==
nsfwTag
)
})
}
/>
}
>
{
nsfwTag
}
</
Chip
>
);
})
}
<
Input
className=
"w-32 !rounded-full !pl-3"
placeholder=
{
t
(
"common.input"
)
}
size=
"sm"
value=
{
editingNsfwTag
}
onChange=
{
(
event
)
=>
setEditingNsfwTag
(
event
.
target
.
value
.
trim
())
}
endDecorator=
{
<
CheckIcon
className=
"w-5 h-5 text-gray-500 dark:text-gray-400 cursor-pointer hover:text-teal-600"
onClick=
{
()
=>
upsertNsfwTags
()
}
/>
}
/>
</
div
>
</
div
>
<
div
className=
"mt-2 w-full flex justify-end"
>
<
Button
color=
"primary"
disabled=
{
isEqual
(
memoRelatedSetting
,
originalSetting
)
}
onClick=
{
updateSetting
}
>
{
t
(
"common.save"
)
}
...
...
web/src/locales/en.json
View file @
174b8b04
...
...
@@ -137,7 +137,9 @@
"direction"
:
"Direction"
,
"direction-desc"
:
"Descending"
,
"direction-asc"
:
"Ascending"
,
"no-memos"
:
"No memos."
"no-memos"
:
"No memos."
,
"click-to-show-nsfw-content"
:
"Click to show NSFW contnet"
,
"click-to-hide-nsfw-content"
:
"Click to hide NSFW content"
},
"message"
:
{
"archived-successfully"
:
"Archived successfully"
,
...
...
@@ -377,7 +379,8 @@
"enable-memo-comments"
:
"Enable memo comments"
,
"enable-memo-location"
:
"Enable memo location"
,
"content-lenght-limit"
:
"Content length limit (Byte)"
,
"reactions"
:
"Reactions"
"reactions"
:
"Reactions"
,
"enable-blur-nsfw-content"
:
"Enable NSFW content blurring (add NSFW tags below)"
},
"version"
:
"Version"
},
...
...
web/src/locales/zh-Hans.json
View file @
174b8b04
...
...
@@ -133,7 +133,9 @@
"direction"
:
"排序方式"
,
"direction-desc"
:
"倒序"
,
"direction-asc"
:
"正序"
,
"no-memos"
:
"无备忘"
"no-memos"
:
"无备忘"
,
"click-to-show-nsfw-content"
:
"点击显示 NSFW 内容"
,
"click-to-hide-nsfw-content"
:
"点击隐藏 NSFW 内容"
},
"message"
:
{
"archived-successfully"
:
"归档成功"
,
...
...
@@ -352,7 +354,8 @@
"enable-memo-comments"
:
"启用备忘录评论"
,
"enable-memo-location"
:
"启用备忘录定位"
,
"content-lenght-limit"
:
"内容长度限制(字节)"
,
"reactions"
:
"表态"
"reactions"
:
"表态"
,
"enable-blur-nsfw-content"
:
"启用 NSFW 内容模糊处理(在下方添加 NSFW 标签)"
}
},
"tag"
:
{
...
...
web/src/locales/zh-Hant.json
View file @
174b8b04
...
...
@@ -131,7 +131,9 @@
"direction"
:
"方向"
,
"direction-desc"
:
"降序"
,
"direction-asc"
:
"升序"
,
"no-memos"
:
"沒有備忘錄"
"no-memos"
:
"沒有備忘錄"
,
"click-to-show-nsfw-content"
:
"點擊顯示 NSFW 內容"
,
"click-to-hide-nsfw-content"
:
"點擊隱藏 NSFW 內容"
},
"message"
:
{
"archived-successfully"
:
"封存成功"
,
...
...
@@ -367,7 +369,8 @@
"enable-memo-comments"
:
"啟用備忘評論"
,
"enable-memo-location"
:
"啟用備忘位置"
,
"content-lenght-limit"
:
"內容長度限制(位元組)"
,
"reactions"
:
"表情回應"
"reactions"
:
"表情回應"
,
"enable-blur-nsfw-content"
:
"啟用 NSFW 內容模糊化(在下方添加 NSFW 標籤)"
},
"version"
:
"版本"
},
...
...
web/src/pages/MemoDetail.tsx
View file @
174b8b04
...
...
@@ -112,6 +112,7 @@ const MemoDetail = () => {
showCreator
showVisibility
showPinned
showNsfwContent
/>
<
div
className=
"pt-8 pb-16 w-full"
>
<
h2
id=
"comments"
className=
"sr-only"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment