Use placeholder svg
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{{if .Photos}}
|
{{if .Photos}}
|
||||||
<div class="photo-grid">
|
<div class="photo-grid">
|
||||||
{{range .Photos}}
|
{{range .Photos}}
|
||||||
<a href="{{.URL}}" target="_blank"><img src="{{.ThumbURL}}" alt="{{.Name}}" loading="lazy"></a>
|
<a href="{{.URL}}" target="_blank"><img src="{{.ThumbURL}}" alt="" loading="lazy"></a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
{{if .Photos}}
|
{{if .Photos}}
|
||||||
<div class="photo-grid">
|
<div class="photo-grid">
|
||||||
{{range .Photos}}
|
{{range .Photos}}
|
||||||
<a href="{{.URL}}" target="_blank"><img src="{{.ThumbURL}}" alt="{{.Name}}" loading="lazy"></a>
|
<a href="{{.URL}}" target="_blank"><img src="{{.ThumbURL}}" alt="" loading="lazy"></a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<h2 id="months">Months</h2>
|
<h2 id="months">Monate</h2>
|
||||||
{{range .Months}}
|
{{range .Months}}
|
||||||
<h3 id="{{.ID}}">
|
<h3 id="{{.ID}}">
|
||||||
<a href="{{.URL}}">{{.Name}}</a>
|
<a href="{{.URL}}">{{.Name}}</a>
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
{{if .Photos}}
|
{{if .Photos}}
|
||||||
<div class="photo-grid">
|
<div class="photo-grid">
|
||||||
{{range .Photos}}
|
{{range .Photos}}
|
||||||
<a href="{{.URL}}" target="_blank"><img src="{{.ThumbURL}}" alt="{{.Name}}" loading="lazy"></a>
|
<a href="{{.URL}}" target="_blank"><img src="{{.ThumbURL}}" alt="" loading="lazy"></a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"
|
||||||
|
fill="none" stroke="#cfcfcf" stroke-width="1.5" stroke-linejoin="miter" shape-rendering="crispEdges">
|
||||||
|
<rect x="1" y="2" width="14" height="12"/>
|
||||||
|
<path d="M1 11l4-4 3 3 2-2 5 5"/>
|
||||||
|
<rect x="10" y="4" width="2" height="2" fill="#cfcfcf" stroke="none"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 328 B |
@@ -374,6 +374,7 @@ textarea {
|
|||||||
height: 140px;
|
height: 140px;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
display: block;
|
display: block;
|
||||||
|
background: var(--bg-panel) url("/_/icons/thumb-placeholder.svg") center/2rem no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* === Empty state === */
|
/* === Empty state === */
|
||||||
|
|||||||
@@ -401,20 +401,36 @@ func renderDiaryYear(fsPath, urlPath string) template.HTML {
|
|||||||
|
|
||||||
photos := yearPhotos(fsPath, urlPath)
|
photos := yearPhotos(fsPath, urlPath)
|
||||||
|
|
||||||
entries, err := os.ReadDir(fsPath)
|
// Collect month numbers from both subdirectories and photo filenames so
|
||||||
if err != nil {
|
// years that contain only photos (no diary entries) still list months.
|
||||||
return ""
|
monthSet := map[int]bool{}
|
||||||
}
|
monthDirs := map[int]string{}
|
||||||
|
entries, _ := os.ReadDir(fsPath)
|
||||||
var months []diaryMonthSummary
|
|
||||||
for _, e := range entries {
|
for _, e := range entries {
|
||||||
if !e.IsDir() {
|
if !e.IsDir() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
monthNum, err := strconv.Atoi(e.Name())
|
n, err := strconv.Atoi(e.Name())
|
||||||
if err != nil || monthNum < 1 || monthNum > 12 {
|
if err != nil || n < 1 || n > 12 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
monthSet[n] = true
|
||||||
|
monthDirs[n] = e.Name()
|
||||||
|
}
|
||||||
|
for _, p := range photos {
|
||||||
|
if p.Date.Year() == year {
|
||||||
|
monthSet[int(p.Date.Month())] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
monthNums := make([]int, 0, len(monthSet))
|
||||||
|
for m := range monthSet {
|
||||||
|
monthNums = append(monthNums, m)
|
||||||
|
}
|
||||||
|
sort.Ints(monthNums)
|
||||||
|
|
||||||
|
var months []diaryMonthSummary
|
||||||
|
for _, monthNum := range monthNums {
|
||||||
var monthPhotos []diaryPhoto
|
var monthPhotos []diaryPhoto
|
||||||
for _, p := range photos {
|
for _, p := range photos {
|
||||||
if p.Date.Year() == year && int(p.Date.Month()) == monthNum {
|
if p.Date.Year() == year && int(p.Date.Month()) == monthNum {
|
||||||
@@ -422,10 +438,14 @@ func renderDiaryYear(fsPath, urlPath string) template.HTML {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
monthDate := time.Date(year, time.Month(monthNum), 1, 0, 0, 0, 0, time.UTC)
|
monthDate := time.Date(year, time.Month(monthNum), 1, 0, 0, 0, 0, time.UTC)
|
||||||
|
dirName, ok := monthDirs[monthNum]
|
||||||
|
if !ok {
|
||||||
|
dirName = fmt.Sprintf("%02d", monthNum)
|
||||||
|
}
|
||||||
months = append(months, diaryMonthSummary{
|
months = append(months, diaryMonthSummary{
|
||||||
ID: monthDate.Format("2006-01"),
|
ID: monthDate.Format("2006-01"),
|
||||||
Name: fmt.Sprintf("%s %d", germanMonths[monthDate.Month()], year),
|
Name: fmt.Sprintf("%s %d", germanMonths[monthDate.Month()], year),
|
||||||
URL: path.Join(urlPath, e.Name()) + "/",
|
URL: path.Join(urlPath, dirName) + "/",
|
||||||
Photos: monthPhotos,
|
Photos: monthPhotos,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user