Noah
030fadcf8d
Implement block lists. They work like friend lists but are unidirectional, but take effect in both directions (blocker and blockee can not see one another on the site -- except admin users can always see all users). * Profile page says 404 * User gallery says 404 * User search page filters out blocked users * Compose endpoint blocks sending messages to blocked users (except admin) * Site Gallery filters photos by blocked (and uncertified) users * Inbox page hides chat list for blocked users (can still read the chat history if you have a link to the old thread)
99 lines
4.2 KiB
HTML
99 lines
4.2 KiB
HTML
{{define "title"}}Blocked Users{{end}}
|
|
{{define "content"}}
|
|
<div class="container">
|
|
{{$Root := .}}
|
|
<section class="hero is-link is-bold">
|
|
<div class="hero-body">
|
|
<div class="container">
|
|
<h1 class="title">Blocked Users</h1>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<div class="p-4">
|
|
|
|
<div class="block">
|
|
You have blocked {{.Pager.Total}} user{{Pluralize64 .Pager.Total}}
|
|
(page {{.Pager.Page}} of {{.Pager.Pages}}).
|
|
</div>
|
|
|
|
<div class="block">
|
|
<nav class="pagination" role="navigation" aria-label="pagination">
|
|
<a class="pagination-previous{{if not .Pager.HasPrevious}} is-disabled{{end}}" title="Previous"
|
|
href="{{.Request.URL.Path}}?page={{.Pager.Previous}}">Previous</a>
|
|
<a class="pagination-next{{if not .Pager.HasNext}} is-disabled{{end}}" title="Next"
|
|
href="{{.Request.URL.Path}}?page={{.Pager.Next}}">Next page</a>
|
|
<ul class="pagination-list">
|
|
{{$Root := .}}
|
|
{{range .Pager.Iter}}
|
|
<li>
|
|
<a class="pagination-link{{if .IsCurrent}} is-current{{end}}"
|
|
aria-label="Page {{.Page}}"
|
|
href="{{$Root.Request.URL.Path}}?page={{.Page}}">
|
|
{{.Page}}
|
|
</a>
|
|
</li>
|
|
{{end}}
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="columns is-multiline">
|
|
|
|
{{range .BlockedUsers}}
|
|
<div class="column is-half-tablet is-one-third-desktop">
|
|
|
|
<form action="/users/block" method="POST">
|
|
{{InputCSRF}}
|
|
<input type="hidden" name="username" value="{{.Username}}">
|
|
|
|
<div class="card">
|
|
<div class="card-content">
|
|
<div class="media block">
|
|
<div class="media-left">
|
|
<figure class="image is-64x64">
|
|
{{if .ProfilePhoto.ID}}
|
|
<img src="{{PhotoURL .ProfilePhoto.CroppedFilename}}">
|
|
{{else}}
|
|
<img src="/static/img/shy.png">
|
|
{{end}}
|
|
</figure>
|
|
</div>
|
|
<div class="media-content">
|
|
<p class="title is-4">{{or .Name "(no name)"}}</p>
|
|
<p class="subtitle is-6">
|
|
<span class="icon"><i class="fa fa-user"></i></span>
|
|
<a href="/u/{{.Username}}">{{.Username}}</a>
|
|
{{if not .Certified}}
|
|
<span class="has-text-danger">
|
|
<span class="icon"><i class="fa fa-certificate"></i></span>
|
|
<span>Not Certified!</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
{{if .IsAdmin}}
|
|
<span class="has-text-danger">
|
|
<span class="icon"><i class="fa fa-gavel"></i></span>
|
|
<span>Admin</span>
|
|
</span>
|
|
{{end}}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<footer class="card-footer">
|
|
<button type="submit" name="unblock" value="true" class="card-footer-item button is-danger">
|
|
<span class="icon"><i class="fa fa-xmark"></i></span>
|
|
<span>Unblock User</span>
|
|
</button>
|
|
</footer>
|
|
</div>
|
|
</form>
|
|
|
|
</div>
|
|
{{end}}<!-- range .BlockedUsers -->
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
{{end}} |