feat: add big preview mode
This commit is contained in:
parent
3833bd1951
commit
7c2fa7d6c0
62
html/html.go
62
html/html.go
@ -14,7 +14,28 @@ type Entry struct {
|
|||||||
Size int64
|
Size int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func FileListPage(req string, entries []Entry) string {
|
func FileListPage(req string, entries []Entry, big_preview_mode bool) string {
|
||||||
|
headerCSS1 := ""
|
||||||
|
if !big_preview_mode {
|
||||||
|
headerCSS1 = "display: flex;"
|
||||||
|
} else {
|
||||||
|
headerCSS1 = "width: 320px;"
|
||||||
|
}
|
||||||
|
headerCSS2 := ""
|
||||||
|
if !big_preview_mode {
|
||||||
|
headerCSS2 = `width: 48px;height: 48px;`
|
||||||
|
} else {
|
||||||
|
headerCSS2 = `width: 256px;height: 256px;`
|
||||||
|
}
|
||||||
|
linkSuffixToggle := ""
|
||||||
|
linkSuffix := ""
|
||||||
|
if big_preview_mode {
|
||||||
|
linkSuffixToggle = ""
|
||||||
|
linkSuffix = "?big_preview=true"
|
||||||
|
} else {
|
||||||
|
linkSuffixToggle = "?big_preview=true"
|
||||||
|
linkSuffix = ""
|
||||||
|
}
|
||||||
header := fmt.Sprintf(`
|
header := fmt.Sprintf(`
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
@ -58,6 +79,7 @@ func FileListPage(req string, entries []Entry) string {
|
|||||||
}
|
}
|
||||||
#footer {
|
#footer {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
margin-bottom: 64px;
|
||||||
}
|
}
|
||||||
a {
|
a {
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
@ -65,15 +87,15 @@ func FileListPage(req string, entries []Entry) string {
|
|||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
}
|
}
|
||||||
.entry {
|
.entry {
|
||||||
display: flex;
|
%s
|
||||||
}
|
}
|
||||||
.entry-name {
|
.entry-name {
|
||||||
margin-left: 16px;
|
margin-left: 16px;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
.entry-icon{
|
.entry-icon{
|
||||||
width: 48px;
|
%s
|
||||||
height: 48px;
|
image-rendering: pixelated;
|
||||||
}
|
}
|
||||||
#leech {
|
#leech {
|
||||||
image-rendering: pixelated;
|
image-rendering: pixelated;
|
||||||
@ -81,6 +103,16 @@ func FileListPage(req string, entries []Entry) string {
|
|||||||
height:256px;
|
height:256px;
|
||||||
width:auto;
|
width:auto;
|
||||||
}
|
}
|
||||||
|
.left-entry{
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
.row {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
#toggle-big-preview-link {
|
||||||
|
text-decoration-line: underline;
|
||||||
|
text-decoration-style: wavy;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<!-- Title Element-->
|
<!-- Title Element-->
|
||||||
<title>%s | leech.ontake.dev</title>
|
<title>%s | leech.ontake.dev</title>
|
||||||
@ -94,9 +126,9 @@ func FileListPage(req string, entries []Entry) string {
|
|||||||
<meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'>
|
<meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="content"><img src="/assets/images/leech.png" id="leech"></img>`, req, req)
|
<div id="content"><img src="/assets/images/leech.png" id="leech"></img>`, headerCSS1, headerCSS2, req, req)
|
||||||
|
|
||||||
footer := `</div><br><div id="footer">powered by leech. ontake. 2024.</div></body></html>`
|
footer := fmt.Sprintf(`</div><br><div id="footer"><a id="toggle-big-preview-link" href="./%s">Toggle big preview mode.</a><br><br>powered by leech. ontake. 2024.</div></body></html>`, linkSuffixToggle)
|
||||||
|
|
||||||
body := ""
|
body := ""
|
||||||
entriesWithParent := []Entry{}
|
entriesWithParent := []Entry{}
|
||||||
@ -108,7 +140,7 @@ func FileListPage(req string, entries []Entry) string {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
entriesWithParent = append(entriesWithParent, entries...)
|
entriesWithParent = append(entriesWithParent, entries...)
|
||||||
for _, dirEntry := range entriesWithParent {
|
for i, dirEntry := range entriesWithParent {
|
||||||
formattedSize := ""
|
formattedSize := ""
|
||||||
if dirEntry.Size != -1 {
|
if dirEntry.Size != -1 {
|
||||||
formattedSize = humanize.Bytes(uint64(dirEntry.Size))
|
formattedSize = humanize.Bytes(uint64(dirEntry.Size))
|
||||||
@ -133,7 +165,21 @@ func FileListPage(req string, entries []Entry) string {
|
|||||||
if dirEntry.IsDir {
|
if dirEntry.IsDir {
|
||||||
icon = "/assets/images/diricon.png"
|
icon = "/assets/images/diricon.png"
|
||||||
}
|
}
|
||||||
body += fmt.Sprintf(`<a href="%s"><div class="entry"><img class="entry-icon" src="%s"></img><div class="entry-name">%s</div><div class="entry-size">%s</div></div></a>`, link, icon, dirEntry.Name, formattedSize)
|
newLine := ""
|
||||||
|
alignCSSClass := ""
|
||||||
|
if big_preview_mode {
|
||||||
|
if i%2 == 0 {
|
||||||
|
alignCSSClass = `class="left-entry"`
|
||||||
|
if i != 0 {
|
||||||
|
newLine += "</div>"
|
||||||
|
}
|
||||||
|
newLine += "<div class=\"row\">"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
body += fmt.Sprintf(`%s<a href="%s%s" %s><div class="entry"><img class="entry-icon" src="%s"></img><div class="entry-name">%s</div><div class="entry-size">%s</div></div></a>`, newLine, link, linkSuffix, alignCSSClass, icon, dirEntry.Name, formattedSize)
|
||||||
|
}
|
||||||
|
if big_preview_mode {
|
||||||
|
body += "</div>"
|
||||||
}
|
}
|
||||||
return header + body + footer
|
return header + body + footer
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ func HandleList(c *fiber.Ctx) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusInternalServerError).SendString(err.Error())
|
return c.Status(fiber.StatusInternalServerError).SendString(err.Error())
|
||||||
}
|
}
|
||||||
|
bigPreview := c.QueryBool("big_preview")
|
||||||
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
|
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
|
||||||
if req == "" {
|
if req == "" {
|
||||||
keys := make([]string, 0, len(config.Config.ServeDirs))
|
keys := make([]string, 0, len(config.Config.ServeDirs))
|
||||||
@ -64,7 +65,7 @@ func HandleList(c *fiber.Ctx) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.SendString(html.FileListPage(req, entries))
|
return c.SendString(html.FileListPage(req, entries, bigPreview))
|
||||||
} else {
|
} else {
|
||||||
pathSlice := strings.Split(req, "/")
|
pathSlice := strings.Split(req, "/")
|
||||||
pathBase, ok := config.Config.ServeDirs[pathSlice[0]]
|
pathBase, ok := config.Config.ServeDirs[pathSlice[0]]
|
||||||
@ -94,7 +95,7 @@ func HandleList(c *fiber.Ctx) error {
|
|||||||
IsDir: f.IsDir(),
|
IsDir: f.IsDir(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return c.SendString(html.FileListPage(req, entries))
|
return c.SendString(html.FileListPage(req, entries, bigPreview))
|
||||||
} else {
|
} else {
|
||||||
return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!")
|
return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user