@@ -18,13 +18,9 @@ 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"`
27- LanguageIDs map [string ]string `json:"languageIds"`
2824}
2925
3026type MaterialIconProvider struct {
@@ -36,6 +32,7 @@ type MaterialIconProvider struct {
3632var materialIconProvider MaterialIconProvider
3733
3834func DefaultMaterialIconProvider () * MaterialIconProvider {
35+ materialIconProvider .once .Do (materialIconProvider .loadData )
3936 return & materialIconProvider
4037}
4138
@@ -88,8 +85,6 @@ func (m *MaterialIconProvider) renderFileIconSVG(ctx reqctx.RequestContext, name
8885}
8986
9087func (m * MaterialIconProvider ) FileIcon (ctx reqctx.RequestContext , entry * git.TreeEntry ) template.HTML {
91- m .once .Do (m .loadData )
92-
9388 if m .rules == nil {
9489 return BasicThemeIcon (entry )
9590 }
@@ -101,7 +96,7 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
10196 return svg .RenderHTML ("octicon-file-symlink-file" ) // TODO: find some better icons for them
10297 }
10398
104- name := m .findIconName (entry )
99+ name := m .findIconNameByGit (entry )
105100 if name == "folder" {
106101 // the material icon pack's "folder" icon doesn't look good, so use our built-in one
107102 return svg .RenderHTML ("material-folder-generic" )
@@ -112,34 +107,23 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
112107 return svg .RenderHTML ("octicon-file" )
113108}
114109
115- func (m * MaterialIconProvider ) findIconName (entry * git.TreeEntry ) string {
116- if entry .IsSubModule () {
117- return "folder-git"
118- }
119-
110+ func (m * MaterialIconProvider ) FindIconName (name string , isDir bool ) string {
120111 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 {
112+ fileNameLower := strings .ToLower (path .Base (name ))
113+ if isDir {
114+ if s , ok := iconsData .FolderNames [fileNameLower ]; ok {
128115 return s
129116 }
130117 return "folder"
131118 }
132119
133- if s , ok := iconsData .FileNames [fileName ]; ok {
134- return s
135- }
136- if s , ok := iconsData .FileNames [strings .ToLower (fileName )]; ok {
120+ if s , ok := iconsData .FileNames [fileNameLower ]; ok {
137121 return s
138122 }
139123
140- for i := len (fileName ) - 1 ; i >= 0 ; i -- {
141- if fileName [i ] == '.' {
142- ext := fileName [i + 1 :]
124+ for i := len (fileNameLower ) - 1 ; i >= 0 ; i -- {
125+ if fileNameLower [i ] == '.' {
126+ ext := fileNameLower [i + 1 :]
143127 if s , ok := iconsData .FileExtensions [ext ]; ok {
144128 return s
145129 }
@@ -148,3 +132,10 @@ func (m *MaterialIconProvider) findIconName(entry *git.TreeEntry) string {
148132
149133 return "file"
150134}
135+
136+ func (m * MaterialIconProvider ) findIconNameByGit (entry * git.TreeEntry ) string {
137+ if entry .IsSubModule () {
138+ return "folder-git"
139+ }
140+ return m .FindIconName (entry .Name (), entry .IsDir ())
141+ }
0 commit comments