Notifications: trying to get a better layout (#660)
* i18n button titles * Improvements on notification page layout * Notification count badge fixes * Make table <tr> clickable * Fix octicon aligment * Fix use of AppSubUrl
This commit is contained in:
parent
d0ad7921f8
commit
d2bb8ef503
8 changed files with 104 additions and 81 deletions
|
@ -1275,3 +1275,6 @@ unread = Unread
|
||||||
read = Read
|
read = Read
|
||||||
no_unread = You have no unread notifications.
|
no_unread = You have no unread notifications.
|
||||||
no_read = You have no read notifications.
|
no_read = You have no read notifications.
|
||||||
|
pin = Pin
|
||||||
|
mark_as_read = Mark as read
|
||||||
|
mark_as_unread = Mark as unread
|
||||||
|
|
|
@ -1205,3 +1205,6 @@ unread = Não lidas
|
||||||
read = Lidas
|
read = Lidas
|
||||||
no_unread = Você não possui notificações não lidas.
|
no_unread = Você não possui notificações não lidas.
|
||||||
no_read = Você não possui notificações lidas.
|
no_read = Você não possui notificações lidas.
|
||||||
|
pin = Fixar
|
||||||
|
mark_as_read = Marcar como lida
|
||||||
|
mark_as_unread = Marcar como não lida
|
||||||
|
|
|
@ -2712,12 +2712,15 @@ footer .ui.language .menu {
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: 7px;
|
margin-left: 7px;
|
||||||
}
|
}
|
||||||
.user.notification .buttons-panel button {
|
.user.notification table form {
|
||||||
padding: 3px;
|
|
||||||
}
|
|
||||||
.user.notification .buttons-panel form {
|
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
.user.notification table button {
|
||||||
|
padding: 3px 3px 3px 5px;
|
||||||
|
}
|
||||||
|
.user.notification table tr {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
.user.notification .octicon-issue-opened,
|
.user.notification .octicon-issue-opened,
|
||||||
.user.notification .octicon-git-pull-request {
|
.user.notification .octicon-git-pull-request {
|
||||||
color: #21ba45;
|
color: #21ba45;
|
||||||
|
|
|
@ -1243,6 +1243,11 @@ $(document).ready(function () {
|
||||||
$($(this).data('target')).slideToggle(100);
|
$($(this).data('target')).slideToggle(100);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// make table <tr> element clickable like a link
|
||||||
|
$('tr[data-href]').click(function(event) {
|
||||||
|
window.location = $(this).data('href');
|
||||||
|
});
|
||||||
|
|
||||||
// Highlight JS
|
// Highlight JS
|
||||||
if (typeof hljs != 'undefined') {
|
if (typeof hljs != 'undefined') {
|
||||||
hljs.initHighlightingOnLoad();
|
hljs.initHighlightingOnLoad();
|
||||||
|
|
|
@ -85,14 +85,18 @@
|
||||||
margin-left: 7px;
|
margin-left: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.buttons-panel {
|
table {
|
||||||
button {
|
|
||||||
padding: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
form {
|
form {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 3px 3px 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.octicon-issue-opened, .octicon-git-pull-request {
|
.octicon-issue-opened, .octicon-git-pull-request {
|
||||||
|
|
|
@ -73,8 +73,8 @@ func Notifications(c *context.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
title := c.Tr("notifications")
|
title := c.Tr("notifications")
|
||||||
if count := len(notifications); count > 0 {
|
if status == models.NotificationStatusUnread && total > 0 {
|
||||||
title = fmt.Sprintf("(%d) %s", count, title)
|
title = fmt.Sprintf("(%d) %s", total, title)
|
||||||
}
|
}
|
||||||
c.Data["Title"] = title
|
c.Data["Title"] = title
|
||||||
c.Data["Keyword"] = keyword
|
c.Data["Keyword"] = keyword
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
|
|
||||||
{{if .IsSigned}}
|
{{if .IsSigned}}
|
||||||
<div class="right menu">
|
<div class="right menu">
|
||||||
<a href="{{$.AppSubUrl}}/notifications" class="ui head link jump item poping up" data-content='{{.i18n.Tr "notifications"}}' data-variation="tiny inverted">
|
<a href="{{AppSubUrl}}/notifications" class="ui head link jump item poping up" data-content='{{.i18n.Tr "notifications"}}' data-variation="tiny inverted">
|
||||||
<span class="text">
|
<span class="text">
|
||||||
<i class="octicon octicon-inbox"><span class="sr-only">{{.i18n.Tr "notifications"}}</span></i>
|
<i class="octicon octicon-inbox"><span class="sr-only">{{.i18n.Tr "notifications"}}</span></i>
|
||||||
|
|
||||||
|
|
|
@ -2,23 +2,20 @@
|
||||||
|
|
||||||
<div class="user notification">
|
<div class="user notification">
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<h1 class="ui header">{{.i18n.Tr "notification.notifications"}}</h1>
|
<h1 class="ui dividing header">{{.i18n.Tr "notification.notifications"}}</h1>
|
||||||
|
|
||||||
<div class="ui top attached tabular menu">
|
<div class="ui top attached tabular menu">
|
||||||
<a href="{{$.AppSubUrl}}/notifications?q=unread">
|
<a href="{{AppSubUrl}}/notifications?q=unread">
|
||||||
<div class="{{if eq .Status 1}}active{{end}} item">
|
<div class="{{if eq .Status 1}}active{{end}} item">
|
||||||
{{.i18n.Tr "notification.unread"}}
|
{{.i18n.Tr "notification.unread"}}
|
||||||
{{if eq .Status 1}}
|
{{if .NotificationUnreadCount}}
|
||||||
<div class="ui label">{{len .Notifications}}</div>
|
<div class="ui label">{{.NotificationUnreadCount}}</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<a href="{{$.AppSubUrl}}/notifications?q=read">
|
<a href="{{AppSubUrl}}/notifications?q=read">
|
||||||
<div class="{{if eq .Status 2}}active{{end}} item">
|
<div class="{{if eq .Status 2}}active{{end}} item">
|
||||||
{{.i18n.Tr "notification.read"}}
|
{{.i18n.Tr "notification.read"}}
|
||||||
{{if eq .Status 2}}
|
|
||||||
<div class="ui label">{{len .Notifications}}</div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -30,45 +27,15 @@
|
||||||
{{.i18n.Tr "notification.no_read"}}
|
{{.i18n.Tr "notification.no_read"}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="ui relaxed divided selection list">
|
<table class="ui unstackable striped very compact small selectable table">
|
||||||
|
<tbody>
|
||||||
{{range $notification := .Notifications}}
|
{{range $notification := .Notifications}}
|
||||||
{{$issue := $notification.GetIssue}}
|
{{$issue := $notification.GetIssue}}
|
||||||
{{$repo := $notification.GetRepo}}
|
{{$repo := $notification.GetRepo}}
|
||||||
{{$repoOwner := $repo.MustOwner}}
|
{{$repoOwner := $repo.MustOwner}}
|
||||||
|
|
||||||
<a class="item" href="{{$.AppSubUrl}}/{{$repoOwner.Name}}/{{$repo.Name}}/issues/{{$issue.Index}}">
|
<tr data-href="{{AppSubUrl}}/{{$repoOwner.Name}}/{{$repo.Name}}/issues/{{$issue.Index}}">
|
||||||
<div class="buttons-panel right floated content">
|
<td class="collapsing">
|
||||||
{{if ne $notification.Status 3}}
|
|
||||||
<form action="{{$.AppSubUrl}}/notifications/status" method="POST">
|
|
||||||
{{$.CsrfTokenHtml}}
|
|
||||||
<input type="hidden" name="notification_id" value="{{$notification.ID}}" />
|
|
||||||
<input type="hidden" name="status" value="pinned" />
|
|
||||||
<button class="ui button" title="Pin notification">
|
|
||||||
<i class="octicon octicon-pin"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
{{end}}
|
|
||||||
{{if or (eq $notification.Status 1) (eq $notification.Status 3)}}
|
|
||||||
<form action="{{$.AppSubUrl}}/notifications/status" method="POST">
|
|
||||||
{{$.CsrfTokenHtml}}
|
|
||||||
<input type="hidden" name="notification_id" value="{{$notification.ID}}" />
|
|
||||||
<input type="hidden" name="status" value="read" />
|
|
||||||
<button class="ui button" title="Mark as read">
|
|
||||||
<i class="octicon octicon-check"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
{{else if eq $notification.Status 2}}
|
|
||||||
<form action="{{$.AppSubUrl}}/notifications/status" method="POST">
|
|
||||||
{{$.CsrfTokenHtml}}
|
|
||||||
<input type="hidden" name="notification_id" value="{{$notification.ID}}" />
|
|
||||||
<input type="hidden" name="status" value="unread" />
|
|
||||||
<button class="ui button" title="Mark as unread">
|
|
||||||
<i class="octicon octicon-bell"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{if eq $notification.Status 3}}
|
{{if eq $notification.Status 3}}
|
||||||
<i class="blue octicon octicon-pin"></i>
|
<i class="blue octicon octicon-pin"></i>
|
||||||
{{else if $issue.IsPull}}
|
{{else if $issue.IsPull}}
|
||||||
|
@ -84,14 +51,52 @@
|
||||||
<i class="octicon octicon-issue-opened"></i>
|
<i class="octicon octicon-issue-opened"></i>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
</td>
|
||||||
<div class="content">
|
<td class="twelve wide">
|
||||||
<div class="header">{{$repoOwner.Name}}/{{$repo.Name}}</div>
|
<a class="item" href="{{AppSubUrl}}/{{$repoOwner.Name}}/{{$repo.Name}}/issues/{{$issue.Index}}">
|
||||||
<div class="description">#{{$issue.Index}} - {{$issue.Title}}</div>
|
#{{$issue.Index}} - {{$issue.Title}}
|
||||||
</div>
|
|
||||||
</a>
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{$repoOwner.Name}}/{{$repo.Name}}
|
||||||
|
</td>
|
||||||
|
<td class="collapsing">
|
||||||
|
{{if ne $notification.Status 3}}
|
||||||
|
<form action="{{AppSubUrl}}/notifications/status" method="POST">
|
||||||
|
{{$.CsrfTokenHtml}}
|
||||||
|
<input type="hidden" name="notification_id" value="{{$notification.ID}}" />
|
||||||
|
<input type="hidden" name="status" value="pinned" />
|
||||||
|
<button class="ui mini button" title='{{$.i18n.Tr "notification.pin"}}'>
|
||||||
|
<i class="octicon octicon-pin"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</td>
|
||||||
|
<td class="collapsing">
|
||||||
|
{{if or (eq $notification.Status 1) (eq $notification.Status 3)}}
|
||||||
|
<form action="{{AppSubUrl}}/notifications/status" method="POST">
|
||||||
|
{{$.CsrfTokenHtml}}
|
||||||
|
<input type="hidden" name="notification_id" value="{{$notification.ID}}" />
|
||||||
|
<input type="hidden" name="status" value="read" />
|
||||||
|
<button class="ui mini button" title='{{$.i18n.Tr "notification.mark_as_read"}}'>
|
||||||
|
<i class="octicon octicon-check"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
{{else if eq $notification.Status 2}}
|
||||||
|
<form action="{{AppSubUrl}}/notifications/status" method="POST">
|
||||||
|
{{$.CsrfTokenHtml}}
|
||||||
|
<input type="hidden" name="notification_id" value="{{$notification.ID}}" />
|
||||||
|
<input type="hidden" name="status" value="unread" />
|
||||||
|
<button class="ui mini button" title='{{$.i18n.Tr "notification.mark_as_unread"}}'>
|
||||||
|
<i class="octicon octicon-bell"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
{{end}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{end}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Reference in a new issue