file.html (4346B)
1 {{template "_header" .}} 2 <h2>File: {{.Data.File.Filename}}</h2> 3 4 <div class="file-container"> 5 6 <div class="file-sidebar"> 7 8 <details open> 9 <summary>Tags</summary> 10 <ul> 11 {{range $k, $vs := .Data.File.Tags}} 12 <li> 13 <span class="file-tag-category">{{$k}}:</span><br> 14 {{range $i, $v := $vs}} 15 {{if $i}}<br> {{end}} 16 <form method="post" action="/file/{{$.Data.File.ID}}/tag/{{$k}}/{{$v}}/delete"><button class="text-button" type="submit">x</button></form> 17 <a href="/tag/{{$k}}/{{$v}}">{{$v}}</a> 18 {{end}} 19 </li> 20 {{else}} 21 <li>No tags yet</li> 22 {{end}} 23 </ul> 24 </details> 25 26 <details> 27 <summary>Add Tags</summary> 28 <form method="post"> 29 <input type="text" name="category" list="categories" placeholder="Category"><br> 30 <datalist id="categories">{{range .Data.Categories}}<option value="{{.}}">{{end}}</datalist> 31 <input type="text" name="value" placeholder="Value"><br> 32 <button class="text-button" type="submit">Add Tag</button> 33 </form> 34 </details> 35 36 <details> 37 <summary>Raw URL</summary> 38 <input id="raw-url" value="http://{{.IP}}:{{.Port}}/uploads/{{.Data.EscapedFilename}}"><br> 39 <button class="text-button" id="copy-btn">Copy</button><br> 40 <span id="copy-status"></span> 41 <script src="/static/copy-link.js" defer></script> 42 </details> 43 44 <details> 45 <summary>File Actions</summary> 46 47 <script src="/static/rename-file.js" defer></script> 48 <form id="renameForm-{{.Data.File.ID}}" method="post" action="/file/{{.Data.File.ID}}/rename"> 49 <input type="hidden" name="newfilename" value="{{.Data.File.Filename}}"> 50 <button type="button" class="text-button rename-button" data-file-id="{{.Data.File.ID}}" data-current-name="{{.Data.File.Filename}}">Rename File</button> 51 </form> 52 <br /> 53 <form method="post" action="/file/{{.Data.File.ID}}/delete"> 54 <button type="submit" onclick="return confirm('Are you sure you want to delete this file? This cannot be undone!')" class="text-button">Delete File</button> 55 </form> 56 </details> 57 </div> 58 59 <div class="file-content"> 60 61 {{if hasAnySuffix .Data.File.Filename ".jpg" ".jpeg" ".png" ".gif" ".webp"}} 62 <a href="/uploads/{{.Data.EscapedFilename}}" target="_blank"><img src="/uploads/{{.Data.EscapedFilename}}" class="file-content-image"></a><br> 63 {{else if hasAnySuffix .Data.File.Filename ".mp4" ".webm" ".mov" ".m4v"}} 64 <video id="videoPlayer" controls loop muted width="600"> 65 <source src="/uploads/{{.Data.EscapedFilename}}"> 66 </video><br> 67 <script src="/static/timestamps.js" defer></script> 68 {{else if hasAnySuffix .Data.File.Filename ".txt" ".md"}} 69 <div id="text-viewer-container"> 70 <div> 71 <button onclick="toggleLineNumbers()" class="text-button">Line Numbers</button> 72 <button onclick="toggleFullscreen()" class="text-button">Fullscreen</button> 73 </div> 74 <pre id="text-viewer" data-filename="{{.Data.EscapedFilename}}">Loading...</pre> 75 </div> 76 <script src="/static/text-viewer.js"></script> 77 {{else}} 78 <a href="/uploads/{{.Data.EscapedFilename}}">Download file</a><br> 79 {{end}} 80 81 <div class="description-section"> 82 <h3>Description</h3> 83 84 <!-- Display Mode --> 85 <div id="description-display" data-original-description="{{.Data.File.Description}}"> 86 {{if .Data.File.Description}} 87 <div id="current-description" >{{.Data.File.Description}}</div> 88 {{else}} 89 <div id="no-description">No description set</div> 90 {{end}} 91 <button class="text-button" id="edit-description-btn" onclick="toggleDescriptionEdit()"> 92 {{if .Data.File.Description}}Edit Description{{else}}Add Description{{end}} 93 </button> 94 </div> 95 96 <!-- Edit Mode (initially hidden) --> 97 <div id="description-edit" style="display: none;"> 98 <form method="post"> 99 <input type="hidden" name="action" value="update_description"> 100 <div> 101 <textarea 102 id="description-textarea" 103 name="description" 104 rows="6" 105 maxlength="2048" 106 placeholder="Enter description..." 107 >{{.Data.File.Description}}</textarea> 108 </div> 109 <div style="margin-top: 8px; display: flex; align-items: center; gap: 10px;"> 110 <button class="text-button" type="submit">Save Description</button> 111 <button class="text-button" type="button" onclick="cancelDescriptionEdit()">Cancel</button> 112 </div> 113 </form> 114 </div> 115 </div> 116 117 <script src="/static/description.js" defer></script> 118 119 </div> 120 121 {{template "_footer"}}