Improve name and date display
This commit is contained in:
parent
84eaae9fa9
commit
0349d9abe7
3 changed files with 69 additions and 2 deletions
|
@ -199,22 +199,30 @@ ul#server_selection_list {
|
||||||
}
|
}
|
||||||
|
|
||||||
.post {
|
.post {
|
||||||
margin: 1em 0;
|
margin: 1em 0 0.2em;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: auto auto;
|
grid-template-rows: auto auto;
|
||||||
grid-template-columns: auto auto;
|
grid-template-columns: auto auto;
|
||||||
}
|
}
|
||||||
|
.post.same_author {
|
||||||
|
margin-top: 0.2em;
|
||||||
|
}
|
||||||
.post:first-child {
|
.post:first-child {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
}
|
}
|
||||||
.post:last-child {
|
.post:last-child {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
.post:hover {
|
||||||
|
background-color: #e4e4e4;
|
||||||
|
}
|
||||||
|
|
||||||
.post .author {
|
.post .author {
|
||||||
grid-row: 1;
|
grid-row: 1;
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
|
font-weight: bold;
|
||||||
|
align-self: end;
|
||||||
}
|
}
|
||||||
.post.same_author .author {
|
.post.same_author .author {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -224,18 +232,32 @@ ul#server_selection_list {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
grid-row: 1;
|
grid-row: 1;
|
||||||
grid-column: 2;
|
grid-column: 2;
|
||||||
|
font-size: 80%;
|
||||||
color: #888;
|
color: #888;
|
||||||
|
align-self: end;
|
||||||
}
|
}
|
||||||
.post.same_author .create_at {
|
.post.same_author .create_at {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post .message {
|
.post .message {
|
||||||
|
line-height: 1.2;
|
||||||
grid-row: 2;
|
grid-row: 2;
|
||||||
grid-column-start: 1;
|
grid-column-start: 1;
|
||||||
grid-column-end: 3;
|
grid-column-end: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.post ul.attachments {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
.post ul.attachments img {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
.channel-contents-message {
|
.channel-contents-message {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
38
js/util.js
38
js/util.js
|
@ -55,6 +55,44 @@ function extend(obj1, obj2) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function padLeft(input, width, padding=" ") {
|
||||||
|
text = input + "";
|
||||||
|
while (text.length < width) {
|
||||||
|
text = padding + text;
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatDdddMmYy(date) {
|
||||||
|
return `${date.getFullYear()}-${padLeft(date.getMonth() + 1, 2, "0")}-${padLeft(date.getDate(), 2, "0")}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatHhMm(date) {
|
||||||
|
return `${padLeft(date.getHours(), 2, "0")}:${padLeft(date.getMinutes(), 2, "0")}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const DATE_SIMILARITY = {
|
||||||
|
none: 0,
|
||||||
|
year: 1,
|
||||||
|
month: 2,
|
||||||
|
date: 3,
|
||||||
|
hours: 4,
|
||||||
|
minutes: 5,
|
||||||
|
seconds: 6
|
||||||
|
}
|
||||||
|
function dateSimilarity(d1, d2) {
|
||||||
|
if (!d1 || !d2) return DATE_SIMILARITY.none;
|
||||||
|
if (d1.getFullYear() != d2.getFullYear()) return DATE_SIMILARITY.none;
|
||||||
|
if (d1.getMonth() != d2.getMonth()) return DATE_SIMILARITY.year;
|
||||||
|
if (d1.getDate() != d2.getDate()) return DATE_SIMILARITY.month;
|
||||||
|
if (d1.getHours() != d2.getHours()) return DATE_SIMILARITY.date;
|
||||||
|
if (d1.getMinutes() != d2.getMinutes()) return DATE_SIMILARITY.hours;
|
||||||
|
if (d1.getSeconds() != d2.getSeconds()) return DATE_SIMILARITY.minutes;
|
||||||
|
return DATE_SIMILARITY.seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class AssertionError extends Error {}
|
class AssertionError extends Error {}
|
||||||
/**
|
/**
|
||||||
* Throw an AssertionError if the first argument is not true
|
* Throw an AssertionError if the first argument is not true
|
||||||
|
|
|
@ -60,6 +60,8 @@ function populateChannelContents(client, contents) {
|
||||||
byId("channel_contents").innerHTML = "";
|
byId("channel_contents").innerHTML = "";
|
||||||
|
|
||||||
let lastAuthor = null;
|
let lastAuthor = null;
|
||||||
|
let lastTime = null;
|
||||||
|
|
||||||
let nodes = [];
|
let nodes = [];
|
||||||
for (let id of contents.order) {
|
for (let id of contents.order) {
|
||||||
const post = contents.posts[id];
|
const post = contents.posts[id];
|
||||||
|
@ -73,7 +75,12 @@ function populateChannelContents(client, contents) {
|
||||||
const createAt = new Date(post.create_at);
|
const createAt = new Date(post.create_at);
|
||||||
const createAtDiv = document.createElement("time");
|
const createAtDiv = document.createElement("time");
|
||||||
createAtDiv.className = "create_at";
|
createAtDiv.className = "create_at";
|
||||||
createAtDiv.innerText = createAt.toLocaleString("nl-BE");
|
const sim = dateSimilarity(lastTime, createAt);
|
||||||
|
lastTime = createAt;
|
||||||
|
let createAtText = "";
|
||||||
|
if (sim < DATE_SIMILARITY.date) createAtText += formatDdddMmYy(createAt);
|
||||||
|
if (sim < DATE_SIMILARITY.minutes) createAtText += " " + formatHhMm(createAt);
|
||||||
|
createAtDiv.innerText = createAtText;
|
||||||
createAtDiv.dateTime = createAt.toISOString();
|
createAtDiv.dateTime = createAt.toISOString();
|
||||||
|
|
||||||
const authorName = users[post.user_id] ? users[post.user_id].username : post.user_id;
|
const authorName = users[post.user_id] ? users[post.user_id].username : post.user_id;
|
||||||
|
|
Loading…
Reference in a new issue