Noah
93c13882aa
Finish implementing the basic forum features: * Pinned threads (admin or board owner only) * Edit Thread settings when you edit the top-most comment. * NoReply threads remove all the reply buttons. * Explicit forums and threads are filtered out unless opted-in (admins always see them). * Count the unique members who participated in each forum. * Get the most recently updated thread to show on forum list page. * Contact/Report page: handle receiving a comment ID to report on. Implement Likes & Notifications * Like buttons added to Photos and Profile Pages. Implemented via simple vanilla JS (likes.js) to make ajax requests to back-end to like/unlike. * Notifications: for your photo or profile being liked. If you unlike, the existing notifications about the like are revoked. * The notifications appear as an alert number in the nav bar and are read on the User Dashboard. Click to mark a notification as "read" or click the "mark all as read" button. Update DeleteUser to scrub likes, notifications, threads, and comments.
270 lines
11 KiB
HTML
270 lines
11 KiB
HTML
{{define "title"}}Untitled{{end}}
|
|
{{define "base"}}
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
|
|
<link rel="stylesheet" href="/static/fontawesome-free-6.1.2-web/css/all.css">
|
|
<link rel="stylesheet" href="/static/css/theme.css">
|
|
<title>{{template "title" .}} - {{ .Title }}</title>
|
|
</head>
|
|
<body>
|
|
<nav class="navbar" role="navigation" aria-label="main navigation">
|
|
<div class="navbar-brand">
|
|
<a class="navbar-item" href="/">
|
|
{{ PrettyTitle }}
|
|
</a>
|
|
|
|
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample">
|
|
<span aria-hidden="true"></span>
|
|
<span aria-hidden="true"></span>
|
|
<span aria-hidden="true"></span>
|
|
</a>
|
|
</div>
|
|
|
|
<div id="navbarBasicExample" class="navbar-menu">
|
|
<div class="navbar-start">
|
|
{{if not .LoggedIn}}
|
|
<a class="navbar-item" href="/">
|
|
<span class="icon"><i class="fa fa-home"></i></span>
|
|
<span>Home</span>
|
|
</a>
|
|
|
|
<a class="navbar-item" href="/about">
|
|
About
|
|
</a>
|
|
|
|
<a class="navbar-item" href="/faq">
|
|
FAQ
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if .LoggedIn}}
|
|
<a class="navbar-item" href="/me">
|
|
<span class="icon"><i class="fa fa-house-user"></i></span>
|
|
<span>Home</span>
|
|
</a>
|
|
|
|
<a class="navbar-item" href="/photo/gallery">
|
|
<span class="icon"><i class="fa fa-image"></i></span>
|
|
<span>Gallery</span>
|
|
</a>
|
|
|
|
<a class="navbar-item" href="/forum">
|
|
<span class="icon"><i class="fa fa-comments"></i></span>
|
|
<span>Forum</span>
|
|
</a>
|
|
|
|
<a class="navbar-item" href="/friends{{if gt .NavFriendRequests 0}}?view=requests{{end}}">
|
|
<span class="icon"><i class="fa fa-user-group"></i></span>
|
|
<span>Friends</span>
|
|
{{if .NavFriendRequests}}<span class="tag is-warning ml-1">{{.NavFriendRequests}}</span>{{end}}
|
|
</a>
|
|
|
|
<a class="navbar-item" href="/messages">
|
|
<span class="icon"><i class="fa fa-envelope"></i></span>
|
|
<span>Messages</span>
|
|
{{if .NavUnreadMessages}}<span class="tag is-warning ml-1">{{.NavUnreadMessages}}</span>{{end}}
|
|
</a>
|
|
{{end}}
|
|
|
|
<div id="navbar-more" class="navbar-item has-dropdown is-hoverable">
|
|
<a class="navbar-link">
|
|
More
|
|
</a>
|
|
|
|
<div class="navbar-dropdown is-active">
|
|
{{if .LoggedIn}}
|
|
<a class="navbar-item" href="/members">
|
|
<span class="icon"><i class="fa fa-people-group"></i></span>
|
|
<span>People</span>
|
|
</a>
|
|
{{end}}
|
|
<a class="navbar-item" href="/about">
|
|
About
|
|
</a>
|
|
<a class="navbar-item" href="/faq">
|
|
FAQ
|
|
</a>
|
|
<a class="navbar-item" href="/tos">
|
|
Terms of Service
|
|
</a>
|
|
<a class="navbar-item" href="/privacy">
|
|
Privacy Policy
|
|
</a>
|
|
<a class="navbar-item" href="/contact">
|
|
Contact
|
|
</a>
|
|
<hr class="navbar-divider">
|
|
<a class="navbar-item" href="/contact?intent=report">
|
|
Report an issue
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="navbar-end">
|
|
{{if .LoggedIn }}
|
|
<div id="navbar-user" class="navbar-item has-dropdown is-hoverable">
|
|
<a class="navbar-link" href="/me{{if .NavUnreadNotifications}}#notifications{{end}}">
|
|
<div class="columns is-mobile is-gapless">
|
|
<div class="column is-narrow">
|
|
<figure class="image is-24x24 mr-2">
|
|
{{if gt .CurrentUser.ProfilePhoto.ID 0}}
|
|
<img src="{{PhotoURL .CurrentUser.ProfilePhoto.CroppedFilename}}" class="is-rounded">
|
|
{{else}}
|
|
<img src="/static/img/shy.png" class="is-rounded has-background-warning">
|
|
{{end}}
|
|
</figure>
|
|
</div>
|
|
<div class="column">
|
|
{{.CurrentUser.Username}}
|
|
{{if .NavUnreadNotifications}}<span class="tag is-warning ml-1">{{.NavUnreadNotifications}}</span>{{end}}
|
|
{{if .NavAdminNotifications}}<span class="tag is-danger ml-1">{{.NavAdminNotifications}}</span>{{end}}
|
|
</div>
|
|
</div>
|
|
</a>
|
|
|
|
<div class="navbar-dropdown is-right is-hoverable">
|
|
<a class="navbar-item" href="/me{{if .NavUnreadNotifications}}#notifications{{end}}">
|
|
Dashboard
|
|
{{if .NavUnreadNotifications}}
|
|
<span class="tag is-warning ml-1">
|
|
<span class="icon"><i class="fa fa-bell"></i></span>
|
|
<span>{{.NavUnreadNotifications}}</span>
|
|
</span>
|
|
{{end}}
|
|
</a>
|
|
<a class="navbar-item" href="/u/{{.CurrentUser.Username}}">My Profile</a>
|
|
<a class="navbar-item" href="/photo/u/{{.CurrentUser.Username}}">My Photos</a>
|
|
<a class="navbar-item" href="/photo/upload">Upload Photo</a>
|
|
<a class="navbar-item" href="/settings">Settings</a>
|
|
{{if .CurrentUser.IsAdmin}}
|
|
<a class="navbar-item has-text-danger" href="/admin">
|
|
Admin
|
|
{{if .NavAdminNotifications}}<span class="tag is-danger ml-1">{{.NavAdminNotifications}}</span>{{end}}
|
|
</a>
|
|
{{end}}
|
|
{{if .SessionImpersonated}}
|
|
<a href="/admin/unimpersonate" class="navbar-item has-text-danger">
|
|
<span class="icon"><i class="fa fa-ghost"></i></span>
|
|
<span>Unimpersonate</span>
|
|
</a>
|
|
{{end}}
|
|
<a class="navbar-item" href="/logout">Log out</a>
|
|
</div>
|
|
</div>
|
|
{{ else }}
|
|
<div class="navbar-item">
|
|
<div class="buttons">
|
|
<a class="button is-primary" href="/signup">
|
|
<strong>Sign up</strong>
|
|
</a>
|
|
<a class="button is-light" href="/login">
|
|
Log in
|
|
</a>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Mobile: notifications badge next to hamburger menu -->
|
|
{{if gt .NavTotalNotifications 0}}
|
|
<div class="mobile nonshy-mobile-notification">
|
|
{{if gt .NavFriendRequests 0}}
|
|
<a class="tag is-warning" href="/friends?view=requests">
|
|
<span class="icon"><i class="fa fa-user-group"></i></span>
|
|
<span>{{.NavFriendRequests}}</span>
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if gt .NavUnreadMessages 0}}
|
|
<a class="tag is-warning" href="/messages">
|
|
<span class="icon"><i class="fa fa-envelope"></i></span>
|
|
<span>{{.NavUnreadMessages}}</span>
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if gt .NavUnreadNotifications 0}}
|
|
<a class="tag is-warning" href="/me#notifications">
|
|
<span class="icon"><i class="fa fa-bell"></i></span>
|
|
<span>{{.NavUnreadNotifications}}</span>
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if gt .NavAdminNotifications 0}}
|
|
<a class="tag is-danger" href="/admin">
|
|
<span class="icon"><i class="fa fa-gavel"></i></span>
|
|
<span>{{.NavAdminNotifications}}</span>
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="container is-fullhd">
|
|
{{if .Flashes}}
|
|
<div class="notification block is-success">
|
|
<!-- <button class="delete"></button> -->
|
|
|
|
{{range .Flashes}}
|
|
<div class="block">{{.}}</div>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
{{if .Errors}}
|
|
<div class="notification block is-danger">
|
|
<!-- <button class="delete"></button> -->
|
|
|
|
{{range .Errors}}
|
|
<div class="block">{{.}}</div>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
{{template "content" .}}
|
|
|
|
<div class="block has-text-centered has-text-grey">
|
|
© {{.YYYY}} {{.Title}}
|
|
<div class="columns">
|
|
<div class="column">
|
|
<a href="/">Home</a>
|
|
</div>
|
|
<div class="column">
|
|
<a href="/about">About</a>
|
|
</div>
|
|
{{if .LoggedIn}}
|
|
<div class="column">
|
|
<a href="/me">User Dashboard</a>
|
|
</div>
|
|
<div class="column">
|
|
<a href="/u/{{.CurrentUser.Username}}">My Profile</a>
|
|
</div>
|
|
<div class="column">
|
|
<a href="/settings">Settings</a>
|
|
</div>
|
|
<div class="column">
|
|
<a href="/logout">Log out</a>
|
|
</div>
|
|
{{else}}
|
|
<div class="column">
|
|
<a href="/login">Log in</a>
|
|
</div>
|
|
<div class="column">
|
|
<a href="/signup">Sign up</a>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/javascript" src="/static/js/bulma.js?build={{.BuildHash}}"></script>
|
|
<script type="text/javascript" src="/static/js/likes.js?build={{.BuildHash}}"></script>
|
|
|
|
</body>
|
|
</html>
|
|
{{end}} |