Skip to content

Commit

Permalink
[chore] Use shorter timestamps in frontend for replies (#875)
Browse files Browse the repository at this point in the history
* rename timestampShort -> timestampVague

* add ParseISO8601

* start fiddling with timestamp

* pad/margin a bit more consistently

* remove visibilty icon, change timestamp use

* update timestamp logic

* check + log errors

* properly cut-off long display- and usernames

Co-authored-by: f0x <f0x@cthu.lu>
  • Loading branch information
tsmethurst and f0x52 committed Oct 2, 2022
1 parent 196e474 commit deba75c
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 31 deletions.
69 changes: 56 additions & 13 deletions internal/router/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,18 @@ import (
"github.com/gin-gonic/gin"
"github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/log"
"github.com/superseriousbusiness/gotosocial/internal/regexes"
"github.com/superseriousbusiness/gotosocial/internal/util"
)

const (
justTime = "15:04"
dateYear = "Jan 02, 2006"
dateTime = "Jan 02, 15:04"
dateYearTime = "Jan 02, 2006, 15:04"
monthYear = "Jan, 2006"
badTimestamp = "bad timestamp"
)

// LoadTemplates loads html templates for use by the given engine
Expand Down Expand Up @@ -76,13 +87,44 @@ func noescapeAttr(str string) template.HTMLAttr {
}

func timestamp(stamp string) string {
t, _ := time.Parse(time.RFC3339, stamp)
return t.Format("January 2, 2006, 15:04:05")
t, err := util.ParseISO8601(stamp)
if err != nil {
log.Errorf("error parsing timestamp %s: %s", stamp, err)
return badTimestamp
}

t = t.Local()

tYear, tMonth, tDay := t.Date()
now := time.Now()
currentYear, currentMonth, currentDay := now.Date()

switch {
case tYear == currentYear && tMonth == currentMonth && tDay == currentDay:
return "Today, " + t.Format(justTime)
case tYear == currentYear:
return t.Format(dateTime)
default:
return t.Format(dateYear)
}
}

func timestampShort(stamp string) string {
t, _ := time.Parse(time.RFC3339, stamp)
return t.Format("January, 2006")
func timestampPrecise(stamp string) string {
t, err := util.ParseISO8601(stamp)
if err != nil {
log.Errorf("error parsing timestamp %s: %s", stamp, err)
return badTimestamp
}
return t.Local().Format(dateYearTime)
}

func timestampVague(stamp string) string {
t, err := util.ParseISO8601(stamp)
if err != nil {
log.Errorf("error parsing timestamp %s: %s", stamp, err)
return badTimestamp
}
return t.Format(monthYear)
}

type iconWithLabel struct {
Expand Down Expand Up @@ -154,13 +196,14 @@ func emojify(emojis []model.Emoji, text template.HTML) template.HTML {

func LoadTemplateFunctions(engine *gin.Engine) {
engine.SetFuncMap(template.FuncMap{
"escape": escape,
"noescape": noescape,
"noescapeAttr": noescapeAttr,
"oddOrEven": oddOrEven,
"visibilityIcon": visibilityIcon,
"timestamp": timestamp,
"timestampShort": timestampShort,
"emojify": emojify,
"escape": escape,
"noescape": noescape,
"noescapeAttr": noescapeAttr,
"oddOrEven": oddOrEven,
"visibilityIcon": visibilityIcon,
"timestamp": timestamp,
"timestampVague": timestampVague,
"timestampPrecise": timestampPrecise,
"emojify": emojify,
})
}
5 changes: 5 additions & 0 deletions internal/util/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,8 @@ const ISO8601 = "2006-01-02T15:04:05.000Z"
func FormatISO8601(t time.Time) string {
return t.UTC().Format(ISO8601)
}

// ParseISO8601 parses the given time string according to the ISO8601 const.
func ParseISO8601(in string) (time.Time, error) {
return time.Parse(ISO8601, in)
}
34 changes: 19 additions & 15 deletions web/source/css/status.css
Original file line number Diff line number Diff line change
Expand Up @@ -75,28 +75,27 @@ main {
background: $bg;
}
}

.displayname {
font-weight: bold;
font-size: 1.2rem;
line-height: 2rem;
margin-top: -0.5rem;
align-self: start;

.displayname, .username {
justify-self: start;
align-self: start;

max-width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;

/* margin-top: -0.5rem; */
line-height: 2rem;
}

.displayname {
font-weight: bold;
font-size: 1.2rem;
}

.username {
color: $link-fg;
line-height: 2rem;
margin-top: -0.5rem;
align-self: start;

white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

input.spoiler:checked ~ .content {
Expand Down Expand Up @@ -180,7 +179,7 @@ main {
}

.media {
margin-top: 0.6rem;
margin-top: 0.5rem;
border-radius: $br;
grid-column: span 3;
display: grid;
Expand Down Expand Up @@ -362,6 +361,7 @@ main {

.text {
grid-column: 1 / span 3;
padding-top: 0.5rem;
}

.not-expanded {
Expand All @@ -372,6 +372,10 @@ main {
.info {
display: flex;
}

.media {
margin-bottom: 0.5rem;
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion web/template/profile.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
</div>
</div>
<div class="accountstats">
<div class="entry">Joined <b>{{.account.CreatedAt | timestampShort}}</b></div>
<div class="entry">Joined <b>{{.account.CreatedAt | timestampVague}}</b></div>
<div class="entry">Followed by <b>{{.account.FollowersCount}}</b></div>
<div class="entry">Following <b>{{.account.FollowingCount}}</b></div>
<div class="entry">Posted <b>{{.account.StatusesCount}}</b></div>
Expand Down
3 changes: 1 addition & 2 deletions web/template/status.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
<a href="{{.Account.URL}}" class="displayname">{{if .Account.DisplayName}}{{emojify .Account.Emojis (escape .Account.DisplayName)}}{{else}}{{.Account.Username}}{{end}}</a>
<a href="{{.Account.URL}}" class="username">@{{.Account.Acct}}</a>
<div class="not-expanded">
<span class="visibility">{{.Visibility | visibilityIcon}}</span>
<span class="date">{{.CreatedAt | timestamp}}</span>
</div>
<div class="text">
Expand Down Expand Up @@ -45,7 +44,7 @@
{{end}}
</div>
<div class="info">
<div id="date">{{.CreatedAt | timestamp}}</div>
<div id="date">{{.CreatedAt | timestampPrecise}}</div>
<div class="stats">
<div id="replies"><i aria-label="Replies" class="fa fa-reply-all"></i> {{.RepliesCount}}</div>
<div id="boosts"><i aria-label="Boosts" class="fa fa-retweet"></i> {{.ReblogsCount}}</div>
Expand Down

0 comments on commit deba75c

Please sign in to comment.