diff --git a/modules/markup/html.go b/modules/markup/html.go index 7961c5c930..aba287e0fd 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -1142,7 +1142,7 @@ func emojiShortCodeProcessor(ctx *RenderContext, node *html.Node) { converted := emoji.FromAlias(alias) if converted == nil { // check if this is a custom reaction - if _, exist := setting.UI.CustomEmojisMap[alias]; exist { + if setting.UI.CustomEmojisLookup.Contains(alias) { replaceContent(node, m[0], m[1], createCustomEmoji(alias)) node = node.NextSibling.NextSibling start = 0 diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index 6bc0f7e56c..22c7e4ca5d 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -358,7 +358,7 @@ func TestRender_emoji(t *testing.T) { test( ":custom-emoji:", `

:custom-emoji:

`) - setting.UI.CustomEmojisMap["custom-emoji"] = ":custom-emoji:" + setting.UI.CustomEmojisLookup.Add("custom-emoji") test( ":custom-emoji:", `

:custom-emoji:

`) diff --git a/modules/setting/ui.go b/modules/setting/ui.go index 2e6a3df4c6..9dafe350eb 100644 --- a/modules/setting/ui.go +++ b/modules/setting/ui.go @@ -31,7 +31,7 @@ var UI = struct { Reactions []string ReactionsLookup container.Set[string] `ini:"-"` CustomEmojis []string - CustomEmojisMap map[string]string `ini:"-"` + CustomEmojisLookup container.Set[string] `ini:"-"` SearchRepoDescription bool OnlyShowRelevantRepos bool ExploreDefaultSort string `ini:"EXPLORE_PAGING_DEFAULT_SORT"` @@ -87,7 +87,6 @@ var UI = struct { Themes: []string{`forgejo-auto`, `forgejo-light`, `forgejo-dark`, `gitea-auto`, `gitea-light`, `gitea-dark`, `forgejo-auto-deuteranopia-protanopia`, `forgejo-light-deuteranopia-protanopia`, `forgejo-dark-deuteranopia-protanopia`, `forgejo-auto-tritanopia`, `forgejo-light-tritanopia`, `forgejo-dark-tritanopia`}, Reactions: []string{`+1`, `-1`, `laugh`, `hooray`, `confused`, `heart`, `rocket`, `eyes`}, CustomEmojis: []string{`git`, `gitea`, `codeberg`, `gitlab`, `github`, `gogs`, `forgejo`}, - CustomEmojisMap: map[string]string{"git": ":git:", "gitea": ":gitea:", "codeberg": ":codeberg:", "gitlab": ":gitlab:", "github": ":github:", "gogs": ":gogs:", "forgejo": ":forgejo:"}, ExploreDefaultSort: "recentupdate", PreferredTimestampTense: "mixed", @@ -163,8 +162,6 @@ func loadUIFrom(rootCfg ConfigProvider) { for _, reaction := range UI.Reactions { UI.ReactionsLookup.Add(reaction) } - UI.CustomEmojisMap = make(map[string]string) - for _, emoji := range UI.CustomEmojis { - UI.CustomEmojisMap[emoji] = ":" + emoji + ":" - } + UI.CustomEmojisLookup = make(container.Set[string]) + UI.CustomEmojisLookup.AddMultiple(UI.CustomEmojis...) } diff --git a/modules/templates/helper.go b/modules/templates/helper.go index 42b4bad83c..8518290da0 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go @@ -128,8 +128,8 @@ func NewFuncMap() template.FuncMap { "AllowedReactions": func() []string { return setting.UI.Reactions }, - "CustomEmojis": func() map[string]string { - return setting.UI.CustomEmojisMap + "CustomEmojis": func() []string { + return setting.UI.CustomEmojis }, "MetaAuthor": func() string { return setting.UI.Meta.Author diff --git a/templates/base/head_script.tmpl b/templates/base/head_script.tmpl index d2774010b6..4bc274a73f 100644 --- a/templates/base/head_script.tmpl +++ b/templates/base/head_script.tmpl @@ -13,7 +13,7 @@ If you introduce mistakes in it, Gitea JavaScript code wouldn't run correctly. assetVersionEncoded: encodeURIComponent('{{AssetVersion}}'), // will be used in URL construction directly assetUrlPrefix: '{{AssetUrlPrefix}}', runModeIsProd: {{.RunModeIsProd}}, - customEmojis: {{CustomEmojis}}, + customEmojis: new Set({{CustomEmojis}}), csrfToken: '{{.CsrfToken}}', pageData: {{.PageData}}, notificationSettings: {{NotificationSettings}}, {{/*a map provided by NewFuncMap in helper.go*/}} diff --git a/web_src/js/features/emoji.js b/web_src/js/features/emoji.js index 032a3efe8a..76555bfe05 100644 --- a/web_src/js/features/emoji.js +++ b/web_src/js/features/emoji.js @@ -2,7 +2,7 @@ import emojis from '../../../assets/emoji.json'; const {assetUrlPrefix, customEmojis} = window.config; -const tempMap = {...customEmojis}; +const tempMap = Object.assign(...Array.from(customEmojis, (v) => ({[v]: `:${v}:`}))); for (const {emoji, aliases} of emojis) { for (const alias of aliases || []) { tempMap[alias] = emoji; @@ -23,7 +23,7 @@ for (const key of emojiKeys) { // retrieve HTML for given emoji name export function emojiHTML(name) { let inner; - if (Object.hasOwn(customEmojis, name)) { + if (customEmojis.has(name)) { inner = `:${name}:`; } else { inner = emojiString(name);