Skip to content

Commit 04d94e2

Browse files
authored
Merge pull request #1208 from getfider/ui-tweaks
First set of proposed UI tweaks.
2 parents 8d3bb29 + 47c22de commit 04d94e2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+536
-193
lines changed

app/cmd/routes.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func routes(r *web.Engine) *web.Engine {
7373
r.Get("/oauth/:provider", handlers.SignInByOAuth())
7474
r.Get("/oauth/:provider/callback", handlers.OAuthCallback())
7575

76-
//Starting from this step, a Tenant is required
76+
// Starting from this step, a Tenant is required
7777
r.Use(middlewares.RequireTenant())
7878

7979
r.Get("/sitemap.xml", handlers.Sitemap())
@@ -98,7 +98,7 @@ func routes(r *web.Engine) *web.Engine {
9898
r.Get("/oauth/:provider/token", handlers.OAuthToken())
9999
r.Get("/oauth/:provider/echo", handlers.OAuthEcho())
100100

101-
//If tenant is pending, block it from using any other route
101+
// If tenant is pending, block it from using any other route
102102
r.Use(middlewares.BlockPendingTenants())
103103

104104
r.Get("/signin", handlers.SignInPage())
@@ -108,7 +108,7 @@ func routes(r *web.Engine) *web.Engine {
108108
r.Post("/_api/signin/complete", handlers.CompleteSignInProfile())
109109
r.Post("/_api/signin", handlers.SignInByEmail())
110110

111-
//Block if it's private tenant with unauthenticated user
111+
// Block if it's private tenant with unauthenticated user
112112
r.Use(middlewares.CheckTenantPrivacy())
113113

114114
r.Get("/", handlers.Index())
@@ -117,12 +117,13 @@ func routes(r *web.Engine) *web.Engine {
117117

118118
ui := r.Group()
119119
{
120-
//From this step, a User is required
120+
// From this step, a User is required
121121
ui.Use(middlewares.IsAuthenticated())
122122

123123
ui.Get("/settings", handlers.UserSettings())
124124
ui.Get("/notifications", handlers.Notifications())
125125
ui.Get("/notifications/:id", handlers.ReadNotification())
126+
ui.Get("/_api/notifications/unread", handlers.GetAllNotifications())
126127
ui.Get("/change-email/verify", handlers.VerifyChangeEmailKey())
127128

128129
ui.Delete("/_api/user", handlers.DeleteUser())
@@ -148,7 +149,7 @@ func routes(r *web.Engine) *web.Engine {
148149
ui.Get("/admin/authentication", handlers.ManageAuthentication())
149150
ui.Get("/_api/admin/oauth/:provider", handlers.GetOAuthConfig())
150151

151-
//From this step, only Administrators are allowed
152+
// From this step, only Administrators are allowed
152153
ui.Use(middlewares.IsAuthorized(enum.RoleAdministrator))
153154

154155
ui.Get("/admin/export", handlers.Page("Export · Site Settings", "", "Administration/pages/Export.page"))

app/handlers/notification.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ import (
99
"github.com/getfider/fider/app/pkg/web"
1010
)
1111

12+
// GetAllNotifications will get all the notifications for the new modal
13+
func GetAllNotifications() web.HandlerFunc {
14+
return func(c *web.Context) error {
15+
q := &query.GetActiveNotifications{}
16+
if err := bus.Dispatch(c, q); err != nil {
17+
return c.Failure(err)
18+
}
19+
20+
return c.Ok(q.Result)
21+
}
22+
}
23+
1224
// TotalUnreadNotifications returns the total number of unread notifications
1325
func TotalUnreadNotifications() web.HandlerFunc {
1426
return func(c *web.Context) error {
@@ -65,7 +77,6 @@ func ReadNotification() web.HandlerFunc {
6577
// ReadAllNotifications marks all unread notifications as read
6678
func ReadAllNotifications() web.HandlerFunc {
6779
return func(c *web.Context) error {
68-
6980
if err := bus.Dispatch(c, &cmd.MarkAllNotificationsAsRead{}); err != nil {
7081
return c.Failure(err)
7182
}

app/models/entity/notification.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
package entity
22

3-
import "time"
3+
import (
4+
"time"
5+
6+
"github.com/getfider/fider/app/models/enum"
7+
)
48

59
// Notification is the system generated notification entity
610
type Notification struct {
7-
ID int `json:"id" db:"id"`
8-
Title string `json:"title" db:"title"`
9-
Link string `json:"link" db:"link"`
10-
Read bool `json:"read" db:"read"`
11-
CreatedAt time.Time `json:"createdAt" db:"created_at"`
11+
ID int `json:"id" db:"id"`
12+
Title string `json:"title" db:"title"`
13+
Link string `json:"link" db:"link"`
14+
Read bool `json:"read" db:"read"`
15+
CreatedAt time.Time `json:"createdAt" db:"created_at"`
16+
AuthorName string `json:"authorName" db:"name"`
17+
AuthorID int `json:"-" db:"author_id"`
18+
AvatarBlobKey string `json:"-" db:"avatar_bkey"`
19+
AvatarType enum.AvatarType `json:"-" db:"avatar_type"`
20+
AvatarURL string `json:"avatarURL,omitempty"`
1221
}

app/pkg/web/testdata/basic.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013

1114

app/pkg/web/testdata/canonical.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013
<link rel="canonical" href="http://feedback.demo.org" />
1114

app/pkg/web/testdata/chunk.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013

1114

app/pkg/web/testdata/home.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013

1114

app/pkg/web/testdata/home_ssr.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013

1114

app/pkg/web/testdata/oauth.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013

1114

app/pkg/web/testdata/tenant.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013

1114

app/pkg/web/testdata/user.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=64" sizes="64x64" type="image/png">
77
<link rel="icon" href="https://demo.test.fider.io:3000/static/favicon?size=192" sizes="192x192" type="image/png">
88
<link rel="apple-touch-icon" href="https://demo.test.fider.io:3000/static/favicon?size=180&bg=white" sizes="180x180" type="image/png">
9+
<link rel="preconnect" href="https://fonts.googleapis.com" />
10+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11+
<link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap" rel="stylesheet" />
912

1013

1114

app/services/sqlstore/postgres/notification.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,23 @@ func getNotificationByID(ctx context.Context, q *query.GetNotificationByID) erro
102102

103103
func getActiveNotifications(ctx context.Context, q *query.GetActiveNotifications) error {
104104
return using(ctx, func(trx *dbx.Trx, tenant *entity.Tenant, user *entity.User) error {
105-
q.Result = []*entity.Notification{}
106105
err := trx.Select(&q.Result, `
107-
SELECT id, title, link, read, created_at
108-
FROM notifications
109-
WHERE tenant_id = $1 AND user_id = $2
110-
AND (read = false OR updated_at > CURRENT_DATE - INTERVAL '30 days')
106+
SELECT n.id, n.title, n.link, n.read, n.created_at, n.author_id, u.avatar_type, u.avatar_bkey, u.name
107+
FROM notifications n
108+
LEFT JOIN users u ON u.id = n.author_id
109+
WHERE n.tenant_id = $1 AND n.user_id = $2
110+
AND (n.read = false OR n.updated_at > CURRENT_DATE - INTERVAL '30 days')
111+
ORDER BY n.updated_at DESC
111112
`, tenant.ID, user.ID)
112113
if err != nil {
113114
return errors.Wrap(err, "failed to get active notifications")
114115
}
116+
117+
// Iterate over notifications and build avatar URL
118+
for i := range q.Result {
119+
q.Result[i].AvatarURL = buildAvatarURL(ctx, q.Result[i].AvatarType, int(q.Result[i].AuthorID), q.Result[i].AuthorName, q.Result[i].AvatarBlobKey)
120+
}
121+
115122
return nil
116123
})
117124
}

e2e/features/server/ssr.feature

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Feature: SSR
55
And I set the "User-Agent" header to "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
66
When I send the request
77
Then I should see http status 200
8-
And I should not see ">Powered by Fider</a>" on the response body
8+
And I should not see ">Powered by Fider</a>" on the response body
99
And I should see "This website requires JavaScript, please enable and reload the page." on the response body
1010
And I should see "/assets/js/vendor" on the response body
1111

@@ -14,6 +14,6 @@ Feature: SSR
1414
And I set the "User-Agent" header to "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
1515
When I send the request
1616
Then I should see http status 200
17-
And I should see ">Powered by Fider</a>" on the response body
17+
And I should see ">Powered by Fider</a>" on the response body
1818
And I should not see "This website requires JavaScript, please enable and reload the page." on the response body
1919
And I should not see "/assets/js/vendor" on the response body

locale/de/client.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"action.change": "ändern",
44
"action.close": "Schließen",
55
"action.confirm": "Bestätigen",
6+
"action.copylink": "",
67
"action.delete": "Löschen",
78
"action.edit": "Bearbeiten",
89
"action.markallasread": "Alle als gelesen markieren",
@@ -81,6 +82,9 @@
8182
"modal.deleteaccount.text": "<0>Wenn Sie Ihr Konto löschen, werden wir all Ihre persönlichen Daten für immer löschen. Der von Ihnen veröffentlichte Inhalt bleibt erhalten, wird aber anonymisiert.</0><1>Dieser Prozess ist irreversibel. <2>Sind Sie sicher? </2></1>",
8283
"modal.deletecomment.header": "Kommentar löschen",
8384
"modal.deletecomment.text": "Dieser Prozess ist unumkehrbar. <0>Bist du dir sicher?</0>",
85+
"modal.notifications.nonew": "",
86+
"modal.notifications.previous": "",
87+
"modal.notifications.unread": "",
8488
"modal.showvotes.message.zeromatches": "Keine Benutzer gefunden, die <0>{0}</0> entsprechen.",
8589
"modal.showvotes.query.placeholder": "Suche nach Benutzern nach Namen...",
8690
"modal.signin.header": "Melde dich an, um eine neue Idee zu posten",
@@ -127,6 +131,9 @@
127131
"page.pendingactivation.text": "Wir haben Ihnen eine Bestätigungs-E-Mail mit einem Link zur Aktivierung Ihrer Website geschickt.",
128132
"page.pendingactivation.text2": "Bitte überprüfe deinen Posteingang, um ihn zu aktivieren.",
129133
"page.pendingactivation.title": "Dein Account ist nicht aktiviert",
134+
"showpost.comment.copylink.error": "",
135+
"showpost.comment.copylink.success": "",
136+
"showpost.comment.unknownhighlighted": "",
130137
"showpost.commentinput.placeholder": "Kommentar hinzufügen",
131138
"showpost.discussionpanel.emptymessage": "Niemand hat bisher kommentiert.",
132139
"showpost.label.author": "Gepostet von <0/> · <1/>",

locale/el/client.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"action.change": "αλλαγή",
44
"action.close": "Κλείσιμο",
55
"action.confirm": "Επιβεβαίωση",
6+
"action.copylink": "",
67
"action.delete": "Διαγραφή",
78
"action.edit": "Επεξεργασία",
89
"action.markallasread": "Σήμανση όλων ως αναγνωσμένων",
@@ -81,6 +82,9 @@
8182
"modal.deleteaccount.text": "<0>Όταν επιλέξετε να διαγράψετε τον λογαριασμό σας, θα διαγράψουμε για πάντα όλες τις προσωπικές σας πληροφορίες. Το περιεχόμενο που δημοσιεύσατε θα παραμείνει, αλλά θα είναι ανώνυμο.</0><1>Αυτή η διαδικασία είναι μη αναστρέψιμη. <2>Είστε σίγουρος;</2></1>",
8283
"modal.deletecomment.header": "Διαγραφή Σχολίου",
8384
"modal.deletecomment.text": "Αυτή η διαδικασία είναι μη αναστρέψιμη. <0>Είστε σίγουρος;</0>",
85+
"modal.notifications.nonew": "",
86+
"modal.notifications.previous": "",
87+
"modal.notifications.unread": "",
8488
"modal.showvotes.message.zeromatches": "Δεν βρέθηκαν χρήστες που να ταιριάζουν <0>{0}</0>.",
8589
"modal.showvotes.query.placeholder": "Αναζήτηση χρηστών με όνομα...",
8690
"modal.signin.header": "Συνδεθείτε για να συμμετάσχετε και να ψηφίσετε",
@@ -127,6 +131,9 @@
127131
"page.pendingactivation.text": "Σας στείλαμε ένα email επιβεβαίωσης με ένα σύνδεσμο για να ενεργοποιήσετε τον ιστότοπό σας.",
128132
"page.pendingactivation.text2": "Παρακαλώ ελέγξτε τα εισερχόμενά σας για να το ενεργοποιήσετε.",
129133
"page.pendingactivation.title": "Ο λογαριασμός σας εκκρεμεί ενεργοποίηση",
134+
"showpost.comment.copylink.error": "",
135+
"showpost.comment.copylink.success": "",
136+
"showpost.comment.unknownhighlighted": "",
130137
"showpost.commentinput.placeholder": "Αφήστε ένα σχόλιο",
131138
"showpost.discussionpanel.emptymessage": "Κανείς δεν έχει σχολιάσει ακόμα.",
132139
"showpost.label.author": "Δημοσιεύτηκε από <0/> · <1/>",

locale/en/client.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@
8282
"modal.deleteaccount.text": "<0>When you choose to delete your account, we will erase all your personal information forever. The content you have published will remain, but it will be anonymised.</0><1>This process is irreversible. <2>Are you sure?</2></1>",
8383
"modal.deletecomment.header": "Delete Comment",
8484
"modal.deletecomment.text": "This process is irreversible. <0>Are you sure?</0>",
85+
"modal.notifications.nonew": "No new notifications",
86+
"modal.notifications.previous": "Previous notifications",
87+
"modal.notifications.unread": "Unread notifications",
8588
"modal.showvotes.message.zeromatches": "No users found matching <0>{0}</0>.",
8689
"modal.showvotes.query.placeholder": "Search for users by name...",
8790
"modal.signin.header": "Sign in to participate and vote",

locale/es-ES/client.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"action.change": "cambiar",
44
"action.close": "Cerrar",
55
"action.confirm": "Confirmar",
6+
"action.copylink": "",
67
"action.delete": "Eliminar",
78
"action.edit": "Editar",
89
"action.markallasread": "Marcar Todo como Leído",
@@ -81,6 +82,9 @@
8182
"modal.deleteaccount.text": "<0>Cuando decides eliminar tu cuenta, borraremos toda tu información personal para siempre. El contenido que has publicado permanecerá, pero será anónimo.</0><1>Este proceso es irreversible. <2>¿Estás seguro?</2></1>",
8283
"modal.deletecomment.header": "Eliminar Comentario",
8384
"modal.deletecomment.text": "Este proceso es irreversible. <0>¿Estás seguro?</0>",
85+
"modal.notifications.nonew": "",
86+
"modal.notifications.previous": "",
87+
"modal.notifications.unread": "",
8488
"modal.showvotes.message.zeromatches": "No se encontraron usuarios que coincidan con <0>{0}</0>.",
8589
"modal.showvotes.query.placeholder": "Buscar usuarios por nombre...",
8690
"modal.signin.header": "Inicia sesión para publicar y votar",
@@ -127,6 +131,9 @@
127131
"page.pendingactivation.text": "Te hemos enviado un correo electrónico de confirmación con un enlace para activar tu sitio.",
128132
"page.pendingactivation.text2": "Por favor, revisa tu bandeja de entrada para activarla.",
129133
"page.pendingactivation.title": "Tu cuenta está pendiente de activación",
134+
"showpost.comment.copylink.error": "",
135+
"showpost.comment.copylink.success": "",
136+
"showpost.comment.unknownhighlighted": "",
130137
"showpost.commentinput.placeholder": "Publica un comentario",
131138
"showpost.discussionpanel.emptymessage": "Nadie ha comentado todavía.",
132139
"showpost.label.author": "Publicado por <0/> · <1/>",

locale/fr/client.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"action.change": "changer",
44
"action.close": "Fermer",
55
"action.confirm": "Confirmer",
6+
"action.copylink": "",
67
"action.delete": "Supprimer",
78
"action.edit": "Modifier",
89
"action.markallasread": "Tout marquer comme lu",
@@ -81,6 +82,9 @@
8182
"modal.deleteaccount.text": "<0>Lorsque vous choisissez de supprimer votre compte, nous effacerons définitivement toutes vos informations personnelles. Le contenu que vous avez publié restera, mais il sera anonyme.</0><1>Ce processus est irréversible. <2>Êtes-vous sûr ?</2></1>",
8283
"modal.deletecomment.header": "Supprimer le commentaire",
8384
"modal.deletecomment.text": "Ce processus est irréversible. <0>Êtes-vous sûr ?</0>",
85+
"modal.notifications.nonew": "",
86+
"modal.notifications.previous": "",
87+
"modal.notifications.unread": "",
8488
"modal.showvotes.message.zeromatches": "Aucun utilisateur correspondant à <0>{0}</0>.",
8589
"modal.showvotes.query.placeholder": "Rechercher des utilisateurs par nom...",
8690
"modal.signin.header": "Connectez-vous pour poster et voter",
@@ -127,6 +131,9 @@
127131
"page.pendingactivation.text": "Nous vous avons envoyé un e-mail de confirmation avec un lien pour activer votre site.",
128132
"page.pendingactivation.text2": "Veuillez vérifier votre boîte de réception pour l'activer.",
129133
"page.pendingactivation.title": "Votre compte n'est pas activé",
134+
"showpost.comment.copylink.error": "",
135+
"showpost.comment.copylink.success": "",
136+
"showpost.comment.unknownhighlighted": "",
130137
"showpost.commentinput.placeholder": "Rédiger un commentaire",
131138
"showpost.discussionpanel.emptymessage": "Personne n'a encore commenté.",
132139
"showpost.label.author": "Posté par <0/> · <1/>",

0 commit comments

Comments
 (0)