Add TypeScript migration, image resizing, media upload UX, and multimedia support
All checks were successful
Deploy to NAS / deploy (push) Successful in 2m20s
All checks were successful
Deploy to NAS / deploy (push) Successful in 2m20s
- Migrate static JS to TypeScript (static-ts/ → compiled to internal/api/static/) - Add image resizing on upload: JPEG/PNG/WebP scaled to max 1920px at quality 80 - Extract shared upload logic into upload.go (saveUpload, saveResizedImage, saveResizedWebP) - Add POST /media endpoint for drag-drop/paste media uploads with markdown ref return - Add background music player with video/audio coordination (autoplay.ts) - Add global nav, public feed, hashtags, visibility, Markdown rendering for entries - Add Dockerfile stage for TypeScript compilation (static-ts-builder) - Add goldmark, disintegration/imaging, golang.org/x/image dependencies Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,7 +15,14 @@
|
||||
</select>
|
||||
</div>
|
||||
<input type="text" name="title" placeholder="Überschrift">
|
||||
<textarea name="description" rows="4" placeholder="Beschreibung"></textarea>
|
||||
<div class="editor-wrap">
|
||||
<textarea name="description" rows="6" placeholder="Beschreibung — Markdown unterstützt Medien: per Drag & Drop oder Einfügen (Strg+V)"></textarea>
|
||||
<div class="editor-bar">
|
||||
<button type="button" class="media-picker">📎 Datei anhängen</button>
|
||||
<span class="upload-status"></span>
|
||||
<input type="file" class="media-file-input" multiple accept="image/*,video/*,audio/*" style="display:none">
|
||||
</div>
|
||||
</div>
|
||||
<div class="gps-row">
|
||||
<input type="number" name="lat" id="entry-lat" step="any" placeholder="Breite">
|
||||
<input type="number" name="lon" id="entry-lon" step="any" placeholder="Länge">
|
||||
@@ -23,8 +30,6 @@
|
||||
</div>
|
||||
<small id="gps-status"></small>
|
||||
<input type="text" name="hashtags" placeholder="Hashtags (kommagetrennt)">
|
||||
<input type="file" name="images" multiple accept="image/*" id="image-input">
|
||||
<div id="image-preview" class="image-preview"></div>
|
||||
<button type="submit">Speichern</button>
|
||||
</form>
|
||||
|
||||
@@ -38,15 +43,21 @@
|
||||
<a href="/entries/{{.EntryID}}/edit" class="entry-edit">bearbeiten</a>
|
||||
</div>
|
||||
{{if .Title}}<div class="entry-title">{{.Title}}</div>{{end}}
|
||||
{{if .Description}}<div class="entry-desc">{{.Description}}</div>{{end}}
|
||||
{{if .Description}}<div class="entry-desc">{{markdown .Description}}</div>{{end}}
|
||||
{{if .Hashtags}}<div class="hashtags">{{range .Hashtags}}<span class="tag">#{{.}}</span> {{end}}</div>{{end}}
|
||||
{{if .Images}}
|
||||
<div class="entry-images">
|
||||
{{range .Images}}
|
||||
{{if isVideo .MimeType}}
|
||||
<video src="/uploads/{{.Filename}}" controls class="media-embed"></video>
|
||||
{{else if isAudio .MimeType}}
|
||||
<audio src="/uploads/{{.Filename}}" controls class="media-audio"></audio>
|
||||
{{else}}
|
||||
<a href="/uploads/{{.Filename}}" target="_blank">
|
||||
<img src="/uploads/{{.Filename}}" alt="{{.OriginalName}}" class="thumb">
|
||||
</a>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
@@ -96,6 +107,7 @@
|
||||
|
||||
{{define "scripts"}}
|
||||
<script src="/static/day.js"></script>
|
||||
<script src="/static/editor.js"></script>
|
||||
{{end}}
|
||||
|
||||
{{template "base" .}}
|
||||
|
||||
Reference in New Issue
Block a user