26
server/assets/pages/change_avatar.tmpl
Normal file
26
server/assets/pages/change_avatar.tmpl
Normal file
@@ -0,0 +1,26 @@
|
||||
{{ define "user" }}
|
||||
<div class="padded box">
|
||||
<div class="box-title">
|
||||
<i class="mdi mdi-account-key"></i> changing {{ .SelectedUser.Name }}'s avatar
|
||||
</div>
|
||||
{{ if ne (len .SelectedUser.Avatar) 0 }}
|
||||
<form class="block" action="{{ printf "/admin/delete_avatar_do?user=%s" .SelectedUser.Name | path }}" method="post">
|
||||
<input type="submit" value="delete avatar">
|
||||
</form>
|
||||
{{ end }}
|
||||
<form
|
||||
class="block file-upload"
|
||||
enctype="multipart/form-data"
|
||||
action="{{ printf "/admin/change_avatar_do?user=%s" .SelectedUser.Name | path }}"
|
||||
method="post"
|
||||
>
|
||||
<div style="position: relative;">
|
||||
<input style="position: absolute; opacity: 0;" name="avatar" type="file" accept="image/jpeg image/png image/gif" />
|
||||
<input type="button" value="upload avatar">
|
||||
</div>
|
||||
{{ if ne (len .SelectedUser.Avatar) 0 }}
|
||||
<p><img class="avatar-preview" src="data:image/jpg;base64,{{ .SelectedUser.Avatar | base64 }}"/></p>
|
||||
{{ end }}
|
||||
</form>
|
||||
</div>
|
||||
{{ end }}
|
||||
26
server/assets/pages/change_own_avatar.tmpl
Normal file
26
server/assets/pages/change_own_avatar.tmpl
Normal file
@@ -0,0 +1,26 @@
|
||||
{{ define "user" }}
|
||||
<div class="padded box">
|
||||
<div class="box-title">
|
||||
<i class="mdi mdi-account-key"></i> changing account avatar
|
||||
</div>
|
||||
{{ if ne (len .SelectedUser.Avatar) 0 }}
|
||||
<form class="block" action="{{ path "/admin/delete_own_avatar_do" }}" method="post">
|
||||
<input type="submit" value="delete avatar">
|
||||
</form>
|
||||
{{ end }}
|
||||
<form
|
||||
class="block file-upload"
|
||||
enctype="multipart/form-data"
|
||||
action="{{ path "/admin/change_own_avatar_do" }}"
|
||||
method="post"
|
||||
>
|
||||
<div style="position: relative;">
|
||||
<input style="position: absolute; opacity: 0;" name="avatar" type="file" accept="image/jpeg image/png image/gif" />
|
||||
<input type="button" value="upload avatar">
|
||||
</div>
|
||||
{{ if ne (len .SelectedUser.Avatar) 0 }}
|
||||
<p><img class="avatar-preview" src="data:image/jpg;base64,{{ .SelectedUser.Avatar | base64 }}"/></p>
|
||||
{{ end }}
|
||||
</form>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -82,6 +82,8 @@
|
||||
<span class="text-light">|</span>
|
||||
<a href="{{ printf "/admin/change_password?user=%s" $user.Name | path }}">password…</a>
|
||||
<span class="text-light">|</span>
|
||||
<a href="{{ printf "/admin/change_avatar?user=%s" $user.Name | path }}">change avatar…</a>
|
||||
<span class="text-light">|</span>
|
||||
{{ if $user.IsAdmin }}
|
||||
<span class="text-light">delete…</span>
|
||||
{{ else }}
|
||||
@@ -100,6 +102,8 @@
|
||||
<a href="{{ path "/admin/change_own_username" }}" class="button">change username…</a>
|
||||
<span class="text-light">|</span>
|
||||
<a href="{{ path "/admin/change_own_password" }}" class="button">change password…</a>
|
||||
<span class="text-light">|</span>
|
||||
<a href="{{ path "/admin/change_own_avatar" }}" class="button">change avatar…</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
@@ -260,17 +264,16 @@
|
||||
{{ end }}
|
||||
</table>
|
||||
<form
|
||||
id="playlist-upload-form"
|
||||
class="file-upload"
|
||||
enctype="multipart/form-data"
|
||||
action="{{ path "/admin/upload_playlist_do" }}"
|
||||
method="post"
|
||||
>
|
||||
<div style="position: relative;">
|
||||
<input id="playlist-upload-input" style="position: absolute; opacity: 0;" name="playlist-files" type="file" multiple />
|
||||
<input style="position: absolute; opacity: 0;" name="playlist-files" type="file" multiple />
|
||||
<input type="button" value="upload m3u8">
|
||||
</div>
|
||||
</form>
|
||||
<script src="{{ path "/admin/static/playlist-upload.js" }}"></script>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
@@ -5,4 +5,5 @@
|
||||
<link rel="shortcut icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
|
||||
<link rel="icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<script src="{{ path "/admin/static/main.js" }}" defer></script>
|
||||
{{ end }}
|
||||
|
||||
@@ -178,3 +178,9 @@ a:hover {
|
||||
.angry {
|
||||
background-color: #f4433669;
|
||||
}
|
||||
|
||||
.avatar-preview {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
5
server/assets/static/main.js
Normal file
5
server/assets/static/main.js
Normal file
@@ -0,0 +1,5 @@
|
||||
for (const form of document.querySelectorAll("form.file-upload") || []) {
|
||||
const input = form.querySelector("input[type=file]");
|
||||
if (!input) continue;
|
||||
input.onchange = (e) => form.submit();
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
document.getElementById("playlist-upload-input").onchange = e => {
|
||||
document.getElementById("playlist-upload-form").submit();
|
||||
};
|
||||
Reference in New Issue
Block a user