-9
modules/util/truncate.go
-9
modules/util/truncate.go
···
54
55
return stringList
56
}
57
-
58
-
// TruncateRunes returns a truncated string with given rune limit,
59
-
// it returns input string if its rune length doesn't exceed the limit.
60
-
func TruncateRunes(str string, limit int) string {
61
-
if utf8.RuneCountInString(str) < limit {
62
-
return str
63
-
}
64
-
return string([]rune(str)[:limit])
65
-
}
-15
modules/util/truncate_test.go
-15
modules/util/truncate_test.go
···
44
}
45
test(tc, SplitStringAtByteN)
46
}
47
-
48
-
func TestTruncateRunes(t *testing.T) {
49
-
assert.Empty(t, TruncateRunes("", 0))
50
-
assert.Empty(t, TruncateRunes("", 1))
51
-
52
-
assert.Empty(t, TruncateRunes("ab", 0))
53
-
assert.Equal(t, "a", TruncateRunes("ab", 1))
54
-
assert.Equal(t, "ab", TruncateRunes("ab", 2))
55
-
assert.Equal(t, "ab", TruncateRunes("ab", 3))
56
-
57
-
assert.Empty(t, TruncateRunes("测试", 0))
58
-
assert.Equal(t, "测", TruncateRunes("测试", 1))
59
-
assert.Equal(t, "测试", TruncateRunes("测试", 2))
60
-
assert.Equal(t, "测试", TruncateRunes("测试", 3))
61
-
}
+2
-1
services/webhook/discord.go
+2
-1
services/webhook/discord.go
···
16
"unicode/utf8"
17
18
webhook_model "forgejo.org/models/webhook"
19
"forgejo.org/modules/git"
20
"forgejo.org/modules/json"
21
"forgejo.org/modules/log"
···
364
Embeds: []DiscordEmbed{
365
{
366
Title: title,
367
-
Description: util.TruncateRunes(text, discordDescriptionCharactersLimit),
368
URL: url,
369
Color: color,
370
Author: DiscordEmbedAuthor{
···
16
"unicode/utf8"
17
18
webhook_model "forgejo.org/models/webhook"
19
+
"forgejo.org/modules/base"
20
"forgejo.org/modules/git"
21
"forgejo.org/modules/json"
22
"forgejo.org/modules/log"
···
365
Embeds: []DiscordEmbed{
366
{
367
Title: title,
368
+
Description: base.TruncateString(text, discordDescriptionCharactersLimit),
369
URL: url,
370
Color: color,
371
Author: DiscordEmbedAuthor{