@@ -18,9 +18,6 @@ import (
1818)
1919
2020type materialIconRulesData struct {
21- IconDefinitions map [string ]* struct {
22- IconPath string `json:"iconPath"`
23- } `json:"iconDefinitions"`
2421 FileNames map [string ]string `json:"fileNames"`
2522 FolderNames map [string ]string `json:"folderNames"`
2623 FileExtensions map [string ]string `json:"fileExtensions"`
@@ -36,6 +33,7 @@ type MaterialIconProvider struct {
3633var materialIconProvider MaterialIconProvider
3734
3835func DefaultMaterialIconProvider () * MaterialIconProvider {
36+ materialIconProvider .once .Do (materialIconProvider .loadData )
3937 return & materialIconProvider
4038}
4139
@@ -88,8 +86,6 @@ func (m *MaterialIconProvider) renderFileIconSVG(ctx reqctx.RequestContext, name
8886}
8987
9088func (m * MaterialIconProvider ) FileIcon (ctx reqctx.RequestContext , entry * git.TreeEntry ) template.HTML {
91- m .once .Do (m .loadData )
92-
9389 if m .rules == nil {
9490 return BasicThemeIcon (entry )
9591 }
@@ -101,7 +97,7 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
10197 return svg .RenderHTML ("octicon-file-symlink-file" ) // TODO: find some better icons for them
10298 }
10399
104- name := m .findIconName (entry )
100+ name := m .findIconNameByGit (entry )
105101 if name == "folder" {
106102 // the material icon pack's "folder" icon doesn't look good, so use our built-in one
107103 return svg .RenderHTML ("material-folder-generic" )
@@ -112,34 +108,23 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
112108 return svg .RenderHTML ("octicon-file" )
113109}
114110
115- func (m * MaterialIconProvider ) findIconName (entry * git.TreeEntry ) string {
116- if entry .IsSubModule () {
117- return "folder-git"
118- }
119-
111+ func (m * MaterialIconProvider ) FindIconName (name string , isDir bool ) string {
120112 iconsData := m .rules
121- fileName := path .Base (entry .Name ())
122-
123- if entry .IsDir () {
124- if s , ok := iconsData .FolderNames [fileName ]; ok {
125- return s
126- }
127- if s , ok := iconsData .FolderNames [strings .ToLower (fileName )]; ok {
113+ fileNameLower := strings .ToLower (path .Base (name ))
114+ if isDir {
115+ if s , ok := iconsData .FolderNames [fileNameLower ]; ok {
128116 return s
129117 }
130118 return "folder"
131119 }
132120
133- if s , ok := iconsData .FileNames [fileName ]; ok {
134- return s
135- }
136- if s , ok := iconsData .FileNames [strings .ToLower (fileName )]; ok {
121+ if s , ok := iconsData .FileNames [fileNameLower ]; ok {
137122 return s
138123 }
139124
140- for i := len (fileName ) - 1 ; i >= 0 ; i -- {
141- if fileName [i ] == '.' {
142- ext := fileName [i + 1 :]
125+ for i := len (fileNameLower ) - 1 ; i >= 0 ; i -- {
126+ if fileNameLower [i ] == '.' {
127+ ext := fileNameLower [i + 1 :]
143128 if s , ok := iconsData .FileExtensions [ext ]; ok {
144129 return s
145130 }
@@ -148,3 +133,10 @@ func (m *MaterialIconProvider) findIconName(entry *git.TreeEntry) string {
148133
149134 return "file"
150135}
136+
137+ func (m * MaterialIconProvider ) findIconNameByGit (entry * git.TreeEntry ) string {
138+ if entry .IsSubModule () {
139+ return "folder-git"
140+ }
141+ return m .FindIconName (entry .Name (), entry .IsDir ())
142+ }
0 commit comments