@@ -17,6 +17,10 @@ type pathEntry struct {
17
17
Path string
18
18
}
19
19
20
+ type subItemSort struct {
21
+ Name []byte
22
+ }
23
+
20
24
type subItemHtml struct {
21
25
IsDir bool
22
26
Name template.HTML
@@ -25,8 +29,10 @@ type subItemHtml struct {
25
29
}
26
30
27
31
type subItem struct {
32
+ sort subItemSort
33
+
28
34
Info os.FileInfo
29
- Html subItemHtml
35
+ Html * subItemHtml
30
36
}
31
37
32
38
type responseData struct {
@@ -200,25 +206,6 @@ func getSubItemPrefix(requestPath string, tailSlash bool) (subItemPrefix string)
200
206
return
201
207
}
202
208
203
- func sortSubInfos (subInfos []os.FileInfo ) {
204
- sort .Slice (
205
- subInfos ,
206
- func (prevIndex , nextIndex int ) bool {
207
- prevItem := subInfos [prevIndex ]
208
- nextItem := subInfos [nextIndex ]
209
-
210
- prevIsDir := prevItem .IsDir ()
211
- nextIsDir := nextItem .IsDir ()
212
-
213
- if prevIsDir != nextIsDir {
214
- return prevIsDir
215
- }
216
-
217
- return util .CompareNumInStr ([]byte (prevItem .Name ()), []byte (nextItem .Name ()))
218
- },
219
- )
220
- }
221
-
222
209
func getItemName (info os.FileInfo , r * http.Request ) (itemName string ) {
223
210
if info != nil {
224
211
itemName = info .Name ()
@@ -235,19 +222,47 @@ func getSubItems(subInfos []os.FileInfo) []*subItem {
235
222
for i := 0 ; i < len (subInfos ); i ++ {
236
223
info := subInfos [i ]
237
224
subItems [i ] = & subItem {
238
- Info : info ,
239
- Html : subItemHtml {
240
- IsDir : info .IsDir (),
241
- Name : tplutil .FormatFilename (info .Name ()),
242
- Size : tplutil .FormatSize (info .Size ()),
243
- ModTime : tplutil .FormatTime (info .ModTime ()),
225
+ sort : subItemSort {
226
+ Name : []byte (info .Name ()),
244
227
},
228
+ Info : info ,
245
229
}
246
230
}
247
231
248
232
return subItems
249
233
}
250
234
235
+ func updateSubsItemHtml (subItems []* subItem ) {
236
+ for _ , item := range subItems {
237
+ info := item .Info
238
+ item .Html = & subItemHtml {
239
+ IsDir : info .IsDir (),
240
+ Name : tplutil .FormatFilename (info .Name ()),
241
+ Size : tplutil .FormatSize (info .Size ()),
242
+ ModTime : tplutil .FormatTime (info .ModTime ()),
243
+ }
244
+ }
245
+ }
246
+
247
+ func sortSubItems (subItems []* subItem ) {
248
+ sort .Slice (
249
+ subItems ,
250
+ func (prevIndex , nextIndex int ) bool {
251
+ prevItem := subItems [prevIndex ]
252
+ nextItem := subItems [nextIndex ]
253
+
254
+ prevIsDir := prevItem .Info .IsDir ()
255
+ nextIsDir := nextItem .Info .IsDir ()
256
+
257
+ if prevIsDir != nextIsDir {
258
+ return prevIsDir
259
+ }
260
+
261
+ return util .CompareNumInStr (prevItem .sort .Name , nextItem .sort .Name )
262
+ },
263
+ )
264
+ }
265
+
251
266
func (h * handler ) getResponseData (r * http.Request ) (data * responseData ) {
252
267
requestUri := r .URL .Path
253
268
tailSlash := requestUri [len (requestUri )- 1 ] == '/'
@@ -291,9 +306,9 @@ func (h *handler) getResponseData(r *http.Request) (data *responseData) {
291
306
internalError = internalError || len (_mergeErrs ) > 0
292
307
293
308
subInfos = h .FilterItems (subInfos )
294
- sortSubInfos (subInfos )
295
309
296
310
subItems := getSubItems (subInfos )
311
+ sortSubItems (subItems )
297
312
298
313
subItemPrefix := getSubItemPrefix (reqPath , tailSlash )
299
314
0 commit comments