@@ -76,6 +76,8 @@ async function applyUpdatedIcons() {
76
76
const processedMainFileNames : Set < Element > = new Set ( )
77
77
const processedTreeFileNames : Set < Element > = new Set ( )
78
78
const processedTreeFolders : Map < Element , boolean > = new Map ( )
79
+ const processedActionListFileNames : Set < Element > = new Set ( )
80
+ const processedActionListFolders : Map < Element , boolean > = new Map ( )
79
81
80
82
type SvgFn = ( element : Element ) => SVGSVGElement | null | undefined
81
83
@@ -98,7 +100,8 @@ async function applyUpdatedIcons() {
98
100
else
99
101
iconClass = getFileClass ( fileName ) || 'ICON_file'
100
102
101
- svgElement ?. classList . add ( iconClass )
103
+ if ( iconClass )
104
+ svgElement ?. classList . add ( iconClass )
102
105
103
106
processedFileNames . add ( fileNameElement )
104
107
} )
@@ -125,6 +128,41 @@ async function applyUpdatedIcons() {
125
128
} )
126
129
}
127
130
131
+ function processActionListFileNames ( fileNames : NodeListOf < Element > , processedFileNames : Set < Element > , svgFn : SvgFn ) {
132
+ fileNames . forEach ( ( fileNameElement ) => {
133
+ if ( processedFileNames . has ( fileNameElement ) )
134
+ return
135
+
136
+ const fileName = fileNameElement . textContent ?. trim ( ) ?? undefined
137
+ const svgElement = svgFn ( fileNameElement )
138
+ const iconClass = getFileClass ( fileName ) || 'ICON_file'
139
+
140
+ if ( iconClass )
141
+ svgElement ?. classList . add ( iconClass )
142
+
143
+ processedFileNames . add ( fileNameElement )
144
+ } )
145
+ }
146
+
147
+ function processActionListFolderNames ( folderNames : NodeListOf < Element > , processedFolderNames : Map < Element , boolean > , svgFn : SvgFn ) {
148
+ folderNames . forEach ( ( folderNameElement ) => {
149
+ const button = folderNameElement . closest ( 'button.ActionList-content' )
150
+ const isOpen = button ?. getAttribute ( 'aria-expanded' ) === 'true'
151
+
152
+ if ( processedFolderNames . has ( folderNameElement ) && isOpen === processedFolderNames . get ( folderNameElement ) )
153
+ return
154
+
155
+ const svgElement = svgFn ( folderNameElement )
156
+ const folderName = folderNameElement . textContent ?. trim ( ) ?? undefined
157
+ const iconClass = getFolderClass ( folderName , isOpen ) || ( isOpen ? 'ICON_folder-open' : 'ICON_folder' )
158
+
159
+ if ( iconClass )
160
+ svgElement ?. classList . add ( iconClass )
161
+
162
+ processedFolderNames . set ( folderNameElement , isOpen )
163
+ } )
164
+ }
165
+
128
166
function processExtraIcons ( ) {
129
167
const extraFolderIcon = document . querySelector ( '#folder-row-0 svg' )
130
168
if ( extraFolderIcon && ! processedMainFileNames . has ( extraFolderIcon ) ) {
@@ -150,12 +188,24 @@ async function applyUpdatedIcons() {
150
188
?. querySelector ( 'svg' )
151
189
processFolderNames ( treeFolderNames , processedTreeFolders , treeFolderSvgFn )
152
190
153
- const treeFileNames = document . querySelectorAll ( 'span.PRIVATE_TreeView-item-content-text span' )
191
+ const treeFileNames = document . querySelectorAll ( 'span.PRIVATE_TreeView-item-content-text a, span.PRIVATE_TreeView-item-content-text span' )
154
192
const treeSvgFn : SvgFn = element =>
155
193
element . closest ( 'div.PRIVATE_TreeView-item-content' )
156
194
?. querySelector ( 'div.PRIVATE_TreeView-item-visual' )
157
195
?. querySelector ( 'svg' )
158
196
processFileNames ( treeFileNames , processedTreeFileNames , treeSvgFn , processedTreeFolders )
197
+
198
+ const actionListFolderNames = document . querySelectorAll ( 'li[data-tree-entry-type="directory"] .ActionList-item-label' )
199
+ const actionListFolderSvgFn : SvgFn = element =>
200
+ element . closest ( '.ActionList-content' )
201
+ ?. querySelector ( '.ActionList-item-visual--leading svg' )
202
+ processActionListFolderNames ( actionListFolderNames , processedActionListFolders , actionListFolderSvgFn )
203
+
204
+ const actionListFileNames = document . querySelectorAll ( 'li[data-tree-entry-type="file"] .ActionList-item-label' )
205
+ const actionListFileSvgFn : SvgFn = element =>
206
+ element . closest ( '.ActionList-content' )
207
+ ?. querySelector ( '.ActionList-item-visual--leading svg' )
208
+ processActionListFileNames ( actionListFileNames , processedActionListFileNames , actionListFileSvgFn )
159
209
}
160
210
161
211
const observer = new MutationObserver ( callback )
0 commit comments