Sort directory listings with directories before files
This commit is contained in:
parent
733e518392
commit
67d509a234
3 changed files with 48 additions and 0 deletions
|
@ -29,6 +29,7 @@ type Config struct {
|
|||
SCGIPaths map[string]string
|
||||
CertificateZones map[string][]string
|
||||
DirectorySort string
|
||||
DirectoriesFirst bool
|
||||
DirectoryReverse bool
|
||||
DirectoryTitles bool
|
||||
}
|
||||
|
@ -42,6 +43,7 @@ type MollyFile struct {
|
|||
DefaultLang string
|
||||
DefaultEncoding string
|
||||
DirectorySort string
|
||||
DirectoriesFirst bool
|
||||
DirectoryReverse bool
|
||||
DirectoryTitles bool
|
||||
}
|
||||
|
@ -67,6 +69,7 @@ func getConfig(filename string) (Config, error) {
|
|||
config.CGIPaths = make([]string, 0)
|
||||
config.SCGIPaths = make(map[string]string)
|
||||
config.DirectorySort = "Name"
|
||||
config.DirectoriesFirst = false
|
||||
|
||||
// Return defaults if no filename given
|
||||
if filename == "" {
|
||||
|
@ -144,6 +147,7 @@ func parseMollyFiles(path string, config *Config, errorLog *log.Logger) {
|
|||
mollyFile.DefaultLang = config.DefaultLang
|
||||
mollyFile.DefaultEncoding = config.DefaultEncoding
|
||||
mollyFile.DirectorySort = config.DirectorySort
|
||||
mollyFile.DirectoriesFirst = config.DirectoriesFirst
|
||||
mollyFile.DirectoryReverse = config.DirectoryReverse
|
||||
mollyFile.DirectoryTitles = config.DirectoryTitles
|
||||
// Build list of directories to check
|
||||
|
@ -182,6 +186,7 @@ func parseMollyFiles(path string, config *Config, errorLog *log.Logger) {
|
|||
config.DefaultLang = mollyFile.DefaultLang
|
||||
config.DefaultEncoding = mollyFile.DefaultEncoding
|
||||
config.DirectorySort = mollyFile.DirectorySort
|
||||
config.DirectoriesFirst = mollyFile.DirectoriesFirst
|
||||
config.DirectoryReverse = mollyFile.DirectoryReverse
|
||||
config.DirectoryTitles = mollyFile.DirectoryTitles
|
||||
for key, value := range mollyFile.TempRedirects {
|
||||
|
|
42
dirlist.go
42
dirlist.go
|
@ -42,10 +42,52 @@ func generateDirectoryListing(URL *url.URL, path string, config Config) (string,
|
|||
i, j = j, i
|
||||
}
|
||||
if config.DirectorySort == "Name" {
|
||||
if config.DirectoriesFirst {
|
||||
if files[i].IsDir() {
|
||||
if files[j].IsDir() {
|
||||
return files[i].Name() < files[j].Name()
|
||||
}
|
||||
return true
|
||||
}
|
||||
if files[j].IsDir() {
|
||||
if files[i].IsDir() {
|
||||
return files[i].Name() < files[j].Name()
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
return files[i].Name() < files[j].Name()
|
||||
} else if config.DirectorySort == "Size" {
|
||||
if config.DirectoriesFirst {
|
||||
if files[i].IsDir() {
|
||||
if files[j].IsDir() {
|
||||
return files[i].Size() < files[j].Size()
|
||||
}
|
||||
return true
|
||||
}
|
||||
if files[j].IsDir() {
|
||||
if files[i].IsDir() {
|
||||
return files[i].Size() < files[j].Size()
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
return files[i].Size() < files[j].Size()
|
||||
} else if config.DirectorySort == "Time" {
|
||||
if config.DirectoriesFirst {
|
||||
if files[i].IsDir() {
|
||||
if files[j].IsDir() {
|
||||
return files[i].ModTime().Before(files[j].ModTime())
|
||||
}
|
||||
return true
|
||||
}
|
||||
if files[j].IsDir() {
|
||||
if files[i].IsDir() {
|
||||
return files[i].ModTime().Before(files[j].ModTime())
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
return files[i].ModTime().Before(files[j].ModTime())
|
||||
}
|
||||
return false // Should not happen
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
## Directory listing
|
||||
#
|
||||
#DirectorySort = "Time"
|
||||
#DirectoriesFirst = false
|
||||
#DirectoryReverse = true
|
||||
#DirectoryTitles = true
|
||||
#
|
||||
|
|
Loading…
Add table
Reference in a new issue