103 lines
3.2 KiB
Plaintext
103 lines
3.2 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<link rel="stylesheet" href="/style.css" />
|
|
<title>Notifications</title>
|
|
<style>
|
|
body {
|
|
max-width: 800px;
|
|
margin: auto;
|
|
padding: 1em;
|
|
}
|
|
|
|
.notification {
|
|
margin: 0.5em;
|
|
border-radius: 20px;
|
|
height: 5em;
|
|
background-color: var(--background-color-2);
|
|
|
|
display: flex;
|
|
flex-direction: row;
|
|
}
|
|
.notification.unread {
|
|
outline: 1px solid var(--accent-color);
|
|
}
|
|
.notification > .notif-left, .notification > .notif-right {
|
|
padding: 1em;
|
|
}
|
|
.notif-left {
|
|
flex: 0 0 auto;
|
|
max-width: 100%;
|
|
|
|
width: 5em;
|
|
height: 100%;
|
|
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
.notif-left > img, .notif-left > svg {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: contain;
|
|
}
|
|
.notif-right {
|
|
flex: 1 1 0px;
|
|
min-width: 0;
|
|
|
|
border-left: 3px solid var(--background-color);
|
|
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
}
|
|
.timestamp {
|
|
text-align: right;
|
|
color: var(--text-color-dark)
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="header">
|
|
<a href="/accounts/" title="<%=username%>" class="circle-button">
|
|
<img src="https://gdicon.oat.zone/icon.png?type=<%=type_str%>&value=<%=icon_value%>&color1=<%=color1%>&color2=<%=color2%><%=glow ? "&glow=1" : ""%>" class="icon">
|
|
</a>
|
|
<span class="title">
|
|
<a href="/"><img src="/favicon.png" width="64" height="auto" class="spinny favicon"></a>
|
|
Notifications
|
|
</span>
|
|
<a href="/accounts/notifications/" title="Notifiations" class="circle-button notifications <%= unread_notifications ? "notifications-unread" : "" %>">
|
|
<%= # todo: unhardcode public dir location
|
|
File.read("public/assets/icons/bell.svg") %>
|
|
</a>
|
|
</div>
|
|
<%- notifications.each() do |notif| -%>
|
|
<div class="notification <%= notif[:read_at] == nil ? "unread" : "" %>">
|
|
<div class="notif-left">
|
|
<%=
|
|
case notif[:type]
|
|
when "authored_level_featured", "authored_level_rated"
|
|
difficulty = notif[:details]["difficulty"]?.as?(Int64).try { |n| LevelDifficulty.new(n.to_i32) }
|
|
"<img src='#{Templates.get_difficulty_icon(difficulty, notif[:type] == "authored_level_featured")}' class='notif-icon'>"
|
|
end
|
|
%>
|
|
</div>
|
|
<div class="notif-right">
|
|
<div>
|
|
<%= Notifications.format_notification(notif[:type], notif[:target], notif[:details], html_safe: true) %>
|
|
</div>
|
|
<div class="timestamp">
|
|
<time datetime="<%= notif[:created_at] %>Z">
|
|
<%= Format.fmt_value(Time.parse(notif[:created_at], Format::TIME_FORMAT, Time::Location::UTC)) %> ago
|
|
</time>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<%- end -%>
|
|
</body>
|
|
</html>
|