@@ -12,7 +12,9 @@ import (
1212 "code.gitea.io/gitea/modules/json"
1313 "code.gitea.io/gitea/modules/log"
1414 "code.gitea.io/gitea/modules/options"
15+ "code.gitea.io/gitea/modules/setting"
1516 "code.gitea.io/gitea/modules/svg"
17+ "code.gitea.io/gitea/modules/util"
1618)
1719
1820type materialIconRulesData struct {
@@ -78,41 +80,41 @@ func (m *MaterialIconProvider) renderFileIconSVG(p *RenderedIconPool, name, svg,
7880 return template .HTML (`<svg ` + svgCommonAttrs + `><use xlink:href="#` + svgID + `"></use></svg>` )
7981}
8082
81- func (m * MaterialIconProvider ) FolderIconWithOpenStatus (p * RenderedIconPool , isOpen bool ) template.HTML {
82- name := m .FindIconName ("folder" , true , isOpen )
83- return m .renderFileIconSVG (p , name , m .svgs [name ], BasicThemeFolderIconName (isOpen ))
84- }
85-
86- func (m * MaterialIconProvider ) FileIconWithOpenStatus (p * RenderedIconPool , entry * FileEntry , isOpen bool ) template.HTML {
83+ func (m * MaterialIconProvider ) EntryIconHTML (p * RenderedIconPool , entry * EntryInfo ) template.HTML {
8784 if m .rules == nil {
88- return BasicThemeIconWithOpenStatus (entry , isOpen )
85+ return BasicEntryIconHTML (entry )
8986 }
9087
9188 if entry .EntryMode .IsLink () {
92- if entry .FollowEntryMode .IsDir () {
89+ if entry .SymlinkToMode .IsDir () {
9390 // keep the old "octicon-xxx" class name to make some "theme plugin selector" could still work
9491 return svg .RenderHTML ("material-folder-symlink" , 16 , "octicon-file-directory-symlink" )
9592 }
9693 return svg .RenderHTML ("octicon-file-symlink-file" ) // TODO: find some better icons for them
9794 }
9895
99- // TODO: add "open icon" support
100- name := m .findIconNameByGit (entry , isOpen )
101- // the material icon pack's "folder" icon doesn't look good, so use our built-in one
102- // keep the old "octicon-xxx" class name to make some "theme plugin selector" could still work
103- if iconSVG , ok := m .svgs [name ]; ok && iconSVG != "" {
104- // keep the old "octicon-xxx" class name to make some "theme plugin selector" could still work
105- extraClass := "octicon-file"
106- switch {
107- case entry .EntryMode .IsDir ():
108- extraClass = BasicThemeFolderIconName (isOpen )
109- case entry .EntryMode .IsSubModule ():
110- extraClass = "octicon-file-submodule"
96+ name := m .FindIconName (entry )
97+ iconSVG := m .svgs [name ]
98+ if iconSVG == "" {
99+ name = "file"
100+ if entry .EntryMode .IsDir () {
101+ name = util .Iif (entry .IsOpen , "folder-open" , "folder" )
102+ }
103+ iconSVG = m .svgs [name ]
104+ if iconSVG == "" {
105+ setting .PanicInDevOrTesting ("missing file icon for %s" , name )
111106 }
112- return m .renderFileIconSVG (p , name , iconSVG , extraClass )
113107 }
114- // TODO: use an interface or wrapper for git.Entry to make the code testable.
115- return BasicThemeIconWithOpenStatus (entry , isOpen )
108+
109+ // keep the old "octicon-xxx" class name to make some "theme plugin selector" could still work
110+ extraClass := "octicon-file"
111+ switch {
112+ case entry .EntryMode .IsDir ():
113+ extraClass = BasicEntryIconName (entry )
114+ case entry .EntryMode .IsSubModule ():
115+ extraClass = "octicon-file-submodule"
116+ }
117+ return m .renderFileIconSVG (p , name , iconSVG , extraClass )
116118}
117119
118120func (m * MaterialIconProvider ) findIconNameWithLangID (s string ) string {
@@ -127,16 +129,17 @@ func (m *MaterialIconProvider) findIconNameWithLangID(s string) string {
127129 return ""
128130}
129131
130- func (m * MaterialIconProvider ) FindIconName (name string , isDir , isOpen bool ) string {
131- fileNameLower := strings .ToLower (path .Base (name ))
132- if isDir {
132+ func (m * MaterialIconProvider ) FindIconName (entry * EntryInfo ) string {
133+ if entry .EntryMode .IsSubModule () {
134+ return "folder-git"
135+ }
136+
137+ fileNameLower := strings .ToLower (path .Base (entry .FullName ))
138+ if entry .EntryMode .IsDir () {
133139 if s , ok := m .rules .FolderNames [fileNameLower ]; ok {
134140 return s
135141 }
136- if isOpen {
137- return "folder-open"
138- }
139- return "folder"
142+ return util .Iif (entry .IsOpen , "folder-open" , "folder" )
140143 }
141144
142145 if s , ok := m .rules .FileNames [fileNameLower ]; ok {
@@ -158,10 +161,3 @@ func (m *MaterialIconProvider) FindIconName(name string, isDir, isOpen bool) str
158161
159162 return "file"
160163}
161-
162- func (m * MaterialIconProvider ) findIconNameByGit (entry * FileEntry , isOpen bool ) string {
163- if entry .EntryMode .IsSubModule () {
164- return "folder-git"
165- }
166- return m .FindIconName (entry .Name , entry .EntryMode .IsDir (), isOpen )
167- }
0 commit comments