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