@@ -18,9 +18,6 @@ import (
18
18
)
19
19
20
20
type materialIconRulesData struct {
21
- IconDefinitions map [string ]* struct {
22
- IconPath string `json:"iconPath"`
23
- } `json:"iconDefinitions"`
24
21
FileNames map [string ]string `json:"fileNames"`
25
22
FolderNames map [string ]string `json:"folderNames"`
26
23
FileExtensions map [string ]string `json:"fileExtensions"`
@@ -36,6 +33,7 @@ type MaterialIconProvider struct {
36
33
var materialIconProvider MaterialIconProvider
37
34
38
35
func DefaultMaterialIconProvider () * MaterialIconProvider {
36
+ materialIconProvider .once .Do (materialIconProvider .loadData )
39
37
return & materialIconProvider
40
38
}
41
39
@@ -88,8 +86,6 @@ func (m *MaterialIconProvider) renderFileIconSVG(ctx reqctx.RequestContext, name
88
86
}
89
87
90
88
func (m * MaterialIconProvider ) FileIcon (ctx reqctx.RequestContext , entry * git.TreeEntry ) template.HTML {
91
- m .once .Do (m .loadData )
92
-
93
89
if m .rules == nil {
94
90
return BasicThemeIcon (entry )
95
91
}
@@ -101,7 +97,7 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
101
97
return svg .RenderHTML ("octicon-file-symlink-file" ) // TODO: find some better icons for them
102
98
}
103
99
104
- name := m .findIconName (entry )
100
+ name := m .findIconNameByGit (entry )
105
101
if name == "folder" {
106
102
// the material icon pack's "folder" icon doesn't look good, so use our built-in one
107
103
return svg .RenderHTML ("material-folder-generic" )
@@ -112,34 +108,23 @@ func (m *MaterialIconProvider) FileIcon(ctx reqctx.RequestContext, entry *git.Tr
112
108
return svg .RenderHTML ("octicon-file" )
113
109
}
114
110
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 {
120
112
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 {
128
116
return s
129
117
}
130
118
return "folder"
131
119
}
132
120
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 {
137
122
return s
138
123
}
139
124
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 :]
143
128
if s , ok := iconsData .FileExtensions [ext ]; ok {
144
129
return s
145
130
}
@@ -148,3 +133,10 @@ func (m *MaterialIconProvider) findIconName(entry *git.TreeEntry) string {
148
133
149
134
return "file"
150
135
}
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