diff --git a/common/activity_stream.go b/common/activity_stream.go index 60aff6e9..5003ac9e 100644 --- a/common/activity_stream.go +++ b/common/activity_stream.go @@ -18,10 +18,11 @@ type DefaultActivityStream struct { } func NewDefaultActivityStream(acc *qgen.Accumulator) (*DefaultActivityStream, error) { + as := "activity_stream" return &DefaultActivityStream{ - add: acc.Insert("activity_stream").Columns("actor, targetUser, event, elementType, elementID, createdAt").Fields("?,?,?,?,?,UTC_TIMESTAMP()").Prepare(), - get: acc.Select("activity_stream").Columns("actor, targetUser, event, elementType, elementID, createdAt").Where("asid = ?").Prepare(), - count: acc.Count("activity_stream").Prepare(), + add: acc.Insert(as).Columns("actor, targetUser, event, elementType, elementID, createdAt").Fields("?,?,?,?,?,UTC_TIMESTAMP()").Prepare(), + get: acc.Select(as).Columns("actor, targetUser, event, elementType, elementID, createdAt").Where("asid = ?").Prepare(), + count: acc.Count(as).Prepare(), }, acc.FirstError() } diff --git a/common/alerts.go b/common/alerts.go index 0a7332de..49ea2c87 100644 --- a/common/alerts.go +++ b/common/alerts.go @@ -47,7 +47,7 @@ func init() { qgen.DBInsert{"activity_stream_matches", "watcher, asid", ""}, qgen.DBJoin{"activity_stream", "activity_subscriptions", "activity_subscriptions.user, activity_stream.asid", "activity_subscriptions.targetType = activity_stream.elementType AND activity_subscriptions.targetID = activity_stream.elementID AND activity_subscriptions.user != activity_stream.actor", "asid = ?", "", ""}, ), - notifyOne: acc.Insert("activity_stream_matches").Columns("watcher, asid").Fields("?,?").Prepare(), + notifyOne: acc.Insert("activity_stream_matches").Columns("watcher,asid").Fields("?,?").Prepare(), getWatchers: acc.SimpleInnerJoin("activity_stream", "activity_subscriptions", "activity_subscriptions.user", "activity_subscriptions.targetType = activity_stream.elementType AND activity_subscriptions.targetID = activity_stream.elementID AND activity_subscriptions.user != activity_stream.actor", "asid = ?", "", ""), } return acc.FirstError() @@ -224,8 +224,7 @@ func notifyWatchers(asid int) { } uids = append(uids, uid) } - err = rows.Err() - if err != nil { + if err = rows.Err(); err != nil { LogError(err) return } diff --git a/common/auth.go b/common/auth.go index 3e360870..948201b8 100644 --- a/common/auth.go +++ b/common/auth.go @@ -1,7 +1,7 @@ /* * * Gosora Authentication Interface -* Copyright Azareal 2017 - 2019 +* Copyright Azareal 2017 - 2020 * */ package common @@ -145,6 +145,7 @@ func (auth *DefaultAuth) ValidateMFAToken(mfaToken string, uid int) error { if ok { return nil } + for i, scratch := range mfaItem.Scratch { if subtle.ConstantTimeCompare([]byte(scratch), []byte(mfaToken)) == 1 { err = mfaItem.BurnScratch(i) @@ -155,6 +156,7 @@ func (auth *DefaultAuth) ValidateMFAToken(mfaToken string, uid int) error { return nil } } + return ErrWrongMFAToken } diff --git a/common/forum_perms_store.go b/common/forum_perms_store.go index a5522427..d9e16621 100644 --- a/common/forum_perms_store.go +++ b/common/forum_perms_store.go @@ -34,9 +34,10 @@ type MemoryForumPermsStore struct { func NewMemoryForumPermsStore() (*MemoryForumPermsStore, error) { acc := qgen.NewAcc() + fp := "forums_permissions" return &MemoryForumPermsStore{ - getByForum: acc.Select("forums_permissions").Columns("gid, permissions").Where("fid = ?").Orderby("gid ASC").Prepare(), - getByForumGroup: acc.Select("forums_permissions").Columns("permissions").Where("fid = ? AND gid = ?").Prepare(), + getByForum: acc.Select(fp).Columns("gid, permissions").Where("fid = ?").Orderby("gid ASC").Prepare(), + getByForumGroup: acc.Select(fp).Columns("permissions").Where("fid = ? AND gid = ?").Prepare(), evenForums: make(map[int]map[int]*ForumPerms), oddForums: make(map[int]map[int]*ForumPerms), diff --git a/common/poll_cache.go b/common/poll_cache.go index 6fc05622..5e8f5001 100644 --- a/common/poll_cache.go +++ b/common/poll_cache.go @@ -138,8 +138,9 @@ func (s *MemoryPollCache) RemoveUnsafe(id int) error { // Flush removes all the polls from the cache, useful for tests. func (s *MemoryPollCache) Flush() { + m := make(map[int]*Poll) s.Lock() - s.items = make(map[int]*Poll) + s.items = m s.length = 0 s.Unlock() } diff --git a/common/settings.go b/common/settings.go index 0172250e..f8491f7f 100644 --- a/common/settings.go +++ b/common/settings.go @@ -45,10 +45,11 @@ var settingStmts SettingStmts func init() { SettingBox.Store(SettingMap(make(map[string]interface{}))) DbInits.Add(func(acc *qgen.Accumulator) error { + s := "settings" settingStmts = SettingStmts{ - getAll: acc.Select("settings").Columns("name, content, type, constraints").Prepare(), - get: acc.Select("settings").Columns("content, type, constraints").Where("name = ?").Prepare(), - update: acc.Update("settings").Set("content = ?").Where("name = ?").Prepare(), + getAll: acc.Select(s).Columns("name, content, type, constraints").Prepare(), + get: acc.Select(s).Columns("content, type, constraints").Where("name = ?").Prepare(), + update: acc.Update(s).Set("content = ?").Where("name = ?").Prepare(), } return acc.FirstError() }) @@ -67,8 +68,8 @@ func LoadSettings() error { return err } - for _, setting := range settings { - err = sBox.ParseSetting(setting.Name, setting.Content, setting.Type, setting.Constraint) + for _, s := range settings { + err = sBox.ParseSetting(s.Name, s.Content, s.Type, s.Constraint) if err != nil { return err } @@ -80,7 +81,7 @@ func LoadSettings() error { // TODO: Add better support for HTML attributes (html-attribute). E.g. Meta descriptions. func (sBox SettingMap) ParseSetting(sname string, scontent string, stype string, constraint string) (err error) { - var ssBox = map[string]interface{}(sBox) + ssBox := map[string]interface{}(sBox) switch stype { case "bool": ssBox[sname] = (scontent == "1") diff --git a/common/topic_list.go b/common/topic_list.go index 0e409915..bf9d6a8d 100644 --- a/common/topic_list.go +++ b/common/topic_list.go @@ -88,7 +88,7 @@ func (tList *DefaultTopicList) Tick() error { canSee[i] = byte(item) } - var canSeeInt = make([]int, len(canSee)) + canSeeInt := make([]int, len(canSee)) copy(canSeeInt, group.CanSee) sCanSee := string(canSee) permTree[sCanSee] = canSeeInt @@ -161,7 +161,7 @@ func (tList *DefaultTopicList) GetListByCanSee(canSee []int, page int, orderby s } } - var inSlice = func(haystack []int, needle int) bool { + inSlice := func(haystack []int, needle int) bool { for _, item := range haystack { if needle == item { return true @@ -200,7 +200,7 @@ func (tList *DefaultTopicList) GetList(page int, orderby string, filterIDs []int return nil, nil, Paginator{nil, 1, 1}, err } - var inSlice = func(haystack []int, needle int) bool { + inSlice := func(haystack []int, needle int) bool { for _, item := range haystack { if needle == item { return true @@ -282,43 +282,43 @@ func (tList *DefaultTopicList) getList(page int, orderby string, argList []inter reqUserList := make(map[int]bool) for rows.Next() { // TODO: Embed Topic structs in TopicsRow to make it easier for us to reuse this work in the topic cache - topic := TopicsRow{} - err := rows.Scan(&topic.ID, &topic.Title, &topic.Content, &topic.CreatedBy, &topic.IsClosed, &topic.Sticky, &topic.CreatedAt, &topic.LastReplyAt, &topic.LastReplyBy, &topic.LastReplyID, &topic.ParentID, &topic.ViewCount, &topic.PostCount, &topic.LikeCount, &topic.AttachCount, &topic.Poll, &topic.Data) + t := TopicsRow{} + err := rows.Scan(&t.ID, &t.Title, &t.Content, &t.CreatedBy, &t.IsClosed, &t.Sticky, &t.CreatedAt, &t.LastReplyAt, &t.LastReplyBy, &t.LastReplyID, &t.ParentID, &t.ViewCount, &t.PostCount, &t.LikeCount, &t.AttachCount, &t.Poll, &t.Data) if err != nil { return nil, Paginator{nil, 1, 1}, err } - topic.Link = BuildTopicURL(NameToSlug(topic.Title), topic.ID) + t.Link = BuildTopicURL(NameToSlug(t.Title), t.ID) // TODO: Pass forum to something like topicItem.Forum and use that instead of these two properties? Could be more flexible. - forum := Forums.DirtyGet(topic.ParentID) - topic.ForumName = forum.Name - topic.ForumLink = forum.Link + forum := Forums.DirtyGet(t.ParentID) + t.ForumName = forum.Name + t.ForumLink = forum.Link // TODO: Create a specialised function with a bit less overhead for getting the last page for a post count - _, _, lastPage := PageOffset(topic.PostCount, 1, Config.ItemsPerPage) - topic.LastPage = lastPage + _, _, lastPage := PageOffset(t.PostCount, 1, Config.ItemsPerPage) + t.LastPage = lastPage // TODO: Rename this Vhook to better reflect moving the topic list from /routes/ to /common/ - GetHookTable().Vhook("topics_topic_row_assign", &topic, &forum) - topicList = append(topicList, &topic) - reqUserList[topic.CreatedBy] = true - reqUserList[topic.LastReplyBy] = true + GetHookTable().Vhook("topics_topic_row_assign", &t, &forum) + topicList = append(topicList, &t) + reqUserList[t.CreatedBy] = true + reqUserList[t.LastReplyBy] = true //log.Print("rlen: ", rlen) //log.Print("rcap: ", rcap) - //log.Print("topic.PostCount: ", topic.PostCount) + //log.Print("topic.PostCount: ", t.PostCount) //log.Print("topic.PostCount == 2 && rlen < rcap: ", topic.PostCount == 2 && rlen < rcap) // Avoid the extra queries on topic list pages, if we already have what we want... - var hRids = false + hRids := false if tcache != nil { - if t, err := tcache.Get(topic.ID); err == nil { + if t, err := tcache.Get(t.ID); err == nil { hRids = len(t.Rids) != 0 } } - if topic.PostCount == 2 && rlen < rcap && !hRids && page < 5 { - rids, err := GetRidsForTopic(topic.ID, 0) + if t.PostCount == 2 && rlen < rcap && !hRids && page < 5 { + rids, err := GetRidsForTopic(t.ID, 0) if err != nil { return nil, Paginator{nil, 1, 1}, err } @@ -329,12 +329,12 @@ func (tList *DefaultTopicList) getList(page int, orderby string, argList []inter } _, _ = Rstore.Get(rids[0]) rlen++ - topic.Rids = []int{rids[0]} + t.Rids = []int{rids[0]} } if tcache != nil { - if _, err := tcache.Get(topic.ID); err == sql.ErrNoRows { - _ = tcache.Set(topic.Topic()) + if _, err := tcache.Get(t.ID); err == sql.ErrNoRows { + _ = tcache.Set(t.Topic()) } } } @@ -344,7 +344,7 @@ func (tList *DefaultTopicList) getList(page int, orderby string, argList []inter } // Convert the user ID map to a slice, then bulk load the users - var idSlice = make([]int, len(reqUserList)) + idSlice := make([]int, len(reqUserList)) var i int for userID := range reqUserList { idSlice[i] = userID diff --git a/common/widgets.go b/common/widgets.go index c46c1d6b..1951f65b 100644 --- a/common/widgets.go +++ b/common/widgets.go @@ -1,4 +1,4 @@ -/* Copyright Azareal 2017 - 2019 */ +/* Copyright Azareal 2017 - 2020 */ package common import ( diff --git a/common/ws_hub.go b/common/ws_hub.go index 94daf40d..1c4594cc 100644 --- a/common/ws_hub.go +++ b/common/ws_hub.go @@ -223,6 +223,7 @@ func (h *WsHubImpl) UserCount() (count int) { h.evenUserLock.RLock() count += len(h.evenOnlineUsers) h.evenUserLock.RUnlock() + h.oddUserLock.RLock() count += len(h.oddOnlineUsers) h.oddUserLock.RUnlock() @@ -236,6 +237,7 @@ func (h *WsHubImpl) HasUser(uid int) (exists bool) { if exists { return exists } + h.oddUserLock.RLock() _, exists = h.oddOnlineUsers[uid] h.oddUserLock.RUnlock() diff --git a/common/ws_user.go b/common/ws_user.go index 81414bb4..cce8ea9c 100644 --- a/common/ws_user.go +++ b/common/ws_user.go @@ -100,6 +100,7 @@ func (u *WSUser) AddSocket(conn *websocket.Conn, page string) { func (u *WSUser) RemoveSocket(conn *websocket.Conn) { u.Lock() + defer u.Unlock() if len(u.Sockets) < 6 { for i, socket := range u.Sockets { if socket == nil { @@ -107,7 +108,6 @@ func (u *WSUser) RemoveSocket(conn *websocket.Conn) { } if socket.conn == conn { u.Sockets[i] = nil - u.Unlock() //fmt.Printf("%+v\n", wsUser.Sockets) return } @@ -123,8 +123,6 @@ func (u *WSUser) RemoveSocket(conn *websocket.Conn) { } u.Sockets = append(u.Sockets[:key], u.Sockets[key+1:]...) //fmt.Printf("%+v\n", u.Sockets) - - u.Unlock() } func (u *WSUser) SetPageForSocket(conn *websocket.Conn, page string) error { diff --git a/extend/guilds/lib/guilds.go b/extend/guilds/lib/guilds.go index 770477aa..5a68a45d 100644 --- a/extend/guilds/lib/guilds.go +++ b/extend/guilds/lib/guilds.go @@ -87,8 +87,8 @@ type Member struct { User c.User } -func PrebuildTmplList(user c.User, header *c.Header) c.CTmpl { - var guildList = []*Guild{ +func PrebuildTmplList(user c.User, h *c.Header) c.CTmpl { + guildList := []*Guild{ &Guild{ ID: 1, Name: "lol", @@ -104,7 +104,7 @@ func PrebuildTmplList(user c.User, header *c.Header) c.CTmpl { Forums: []*c.Forum{c.Forums.DirtyGet(1)}, }, } - listPage := ListPage{"Guild List", user, header, guildList} + listPage := ListPage{"Guild List", user, h, guildList} return c.CTmpl{"guilds_guild_list", "guilds_guild_list.html", "templates/", "guilds.ListPage", listPage, []string{"./extend/guilds/lib"}} } diff --git a/public/global.js b/public/global.js index 65d01528..cebecea5 100644 --- a/public/global.js +++ b/public/global.js @@ -879,7 +879,7 @@ function mainInit(){ for(let i = 0; i < elems.length; i++) { let elem = elems[i]; if(elem.nodeName=="SELECT") { - s += elem.name + "=" + elem.options[elem.selectedIndex].getAttribute("val") + "&"; + s += elem.name + "=" + elem.options[elem.selectedIndex].getAttribute("value") + "&"; } // TODO: Implement other element types... } diff --git a/router_gen/route_subset.go b/router_gen/route_subset.go index 4f3959a9..b6de9234 100644 --- a/router_gen/route_subset.go +++ b/router_gen/route_subset.go @@ -6,8 +6,8 @@ type RouteSubset struct { func (set *RouteSubset) Before(lines ...string) *RouteSubset { for _, line := range lines { - for _, route := range set.RouteList { - route.RunBefore = append(route.RunBefore, Runnable{line, false}) + for _, r := range set.RouteList { + r.RunBefore = append(r.RunBefore, Runnable{line, false}) } } return set @@ -15,8 +15,8 @@ func (set *RouteSubset) Before(lines ...string) *RouteSubset { func (set *RouteSubset) LitBefore(lines ...string) *RouteSubset { for _, line := range lines { - for _, route := range set.RouteList { - route.RunBefore = append(route.RunBefore, Runnable{line, true}) + for _, r := range set.RouteList { + r.RunBefore = append(r.RunBefore, Runnable{line, true}) } } return set diff --git a/routes/panel/settings.go b/routes/panel/settings.go index 3cb81ff4..280f87c6 100644 --- a/routes/panel/settings.go +++ b/routes/panel/settings.go @@ -103,7 +103,7 @@ func SettingEditSubmit(w http.ResponseWriter, r *http.Request, user c.User, snam return c.NoPermissions(w, r, user) } - scontent := c.SanitiseBody(r.PostFormValue("setting-value")) + scontent := c.SanitiseBody(r.PostFormValue("value")) rerr := headerLite.Settings.Update(sname, scontent) if rerr != nil { return rerr diff --git a/templates/account_menu.html b/templates/account_menu.html index 7355ed3f..d566dcd8 100644 --- a/templates/account_menu.html +++ b/templates/account_menu.html @@ -13,4 +13,4 @@
{{lang "account_menu_messages"}}
{{/** TODO: Add an alerts page with pagination to go through alerts which either don't fit in the alerts drop-down or which have already been dismissed. Bear in mind though that dismissed alerts older than two weeks might be purged to save space and to speed up the database **/}} - + \ No newline at end of file diff --git a/templates/account_own_edit.html b/templates/account_own_edit.html index 8aff40b6..fa8aa165 100644 --- a/templates/account_own_edit.html +++ b/templates/account_own_edit.html @@ -24,7 +24,7 @@
{{level .CurrentUser.Level}}
-
+
{{.CurrentScore}} / {{.NextScore}}
diff --git a/templates/account_own_edit_mfa.html b/templates/account_own_edit_mfa.html index c926860a..6a19df5c 100644 --- a/templates/account_own_edit_mfa.html +++ b/templates/account_own_edit_mfa.html @@ -20,10 +20,8 @@
{{lang "account_mfa_scratch_explanation"}}
- {{range .Something}} -
{{.}}
- {{end}} + {{range .Something}}
{{.}}
{{end}}
-{{template "footer.html" . }} +{{template "footer.html" . }} \ No newline at end of file diff --git a/templates/account_own_edit_mfa_setup.html b/templates/account_own_edit_mfa_setup.html index 8d396bc4..3eb19986 100644 --- a/templates/account_own_edit_mfa_setup.html +++ b/templates/account_own_edit_mfa_setup.html @@ -23,4 +23,4 @@ -{{template "footer.html" . }} +{{template "footer.html" . }} \ No newline at end of file diff --git a/templates/guilds_create_guild.html b/templates/guilds_create_guild.html index 371a68d1..781db643 100644 --- a/templates/guilds_create_guild.html +++ b/templates/guilds_create_guild.html @@ -18,9 +18,9 @@
Visibility
@@ -31,4 +31,4 @@ -{{template "footer.html" . }} +{{template "footer.html" . }} \ No newline at end of file diff --git a/templates/guilds_css.html b/templates/guilds_css.html index d80ac1e1..1903fd91 100644 --- a/templates/guilds_css.html +++ b/templates/guilds_css.html @@ -29,12 +29,12 @@ top: 4px; } .menuItem a { - color: black; - text-decoration: none; + color: black; + text-decoration: none; } .rightMenu { float: right; - border-right: none; + border-right: none; border-left: 1px solid #ccc; } .sgBackdrop { @@ -45,4 +45,4 @@ padding-top: calc(150px - 38px); border-bottom: none; } - + \ No newline at end of file diff --git a/templates/guilds_member_list.html b/templates/guilds_member_list.html index 50311cfe..e219d9bf 100644 --- a/templates/guilds_member_list.html +++ b/templates/guilds_member_list.html @@ -16,12 +16,12 @@ -
+
-
- {{range .ItemList}}
- - {{.RankString}}
+
+ {{range .ItemList}}
+ + {{.RankString}}
{{.JoinedAt}}
@@ -32,4 +32,4 @@
{{end}}
-{{template "footer.html" . }} +{{template "footer.html" . }} \ No newline at end of file diff --git a/templates/login.html b/templates/login.html index 9571c2cb..58c3e265 100644 --- a/templates/login.html +++ b/templates/login.html @@ -25,4 +25,4 @@
-{{template "footer.html" . }} +{{template "footer.html" . }} \ No newline at end of file diff --git a/templates/login_mfa_verify.html b/templates/login_mfa_verify.html index a92bfc66..80123804 100644 --- a/templates/login_mfa_verify.html +++ b/templates/login_mfa_verify.html @@ -18,4 +18,4 @@ -{{template "footer.html" . }} +{{template "footer.html" . }} \ No newline at end of file diff --git a/templates/panel_analytics_active_memory.html b/templates/panel_analytics_active_memory.html index 2b5e5dfe..dcd06b1b 100644 --- a/templates/panel_analytics_active_memory.html +++ b/templates/panel_analytics_active_memory.html @@ -2,10 +2,11 @@

{{lang "panel_statistics_active_memory_head"}}

+ {{template "panel_analytics_time_range_month.html" . }}
diff --git a/templates/panel_analytics_referrers.html b/templates/panel_analytics_referrers.html index 400108fa..9dbd8544 100644 --- a/templates/panel_analytics_referrers.html +++ b/templates/panel_analytics_referrers.html @@ -2,9 +2,10 @@

{{lang "panel_statistics_referrers_head"}}

+ {{template "panel_analytics_time_range.html" . }}
diff --git a/templates/panel_analytics_time_range.html b/templates/panel_analytics_time_range.html index 7294040c..21b2bd3c 100644 --- a/templates/panel_analytics_time_range.html +++ b/templates/panel_analytics_time_range.html @@ -1,10 +1,11 @@ \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/templates/panel_analytics_time_range_month.html b/templates/panel_analytics_time_range_month.html index 50833a9b..bdaa6481 100644 --- a/templates/panel_analytics_time_range_month.html +++ b/templates/panel_analytics_time_range_month.html @@ -1,8 +1,9 @@ \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/templates/panel_setting.html b/templates/panel_setting.html index 25493245..5678d552 100644 --- a/templates/panel_setting.html +++ b/templates/panel_setting.html @@ -7,7 +7,7 @@
{{lang "panel_setting_value"}}
- {{range .ItemList}}{{.Label}}{{end}}
@@ -16,19 +16,19 @@
- + {{lang "option_yes"}} + {{lang "option_no"}}
{{else if eq .Setting.Type "textarea"}}
-
+
{{else}}
-
+
{{end}}
diff --git a/templates/topic.html b/templates/topic.html index 529572cd..dcb9aca2 100644 --- a/templates/topic.html +++ b/templates/topic.html @@ -29,7 +29,7 @@ {{if .Poll.ID}}{{template "topic_poll.html" . }}{{end}}
-
+
{{.Topic.ContentHTML}}
{{if .CurrentUser.Loggedin}}{{end}} diff --git a/templates/topic_alt.html b/templates/topic_alt.html index 5f51113a..64ef4832 100644 --- a/templates/topic_alt.html +++ b/templates/topic_alt.html @@ -121,5 +121,4 @@ {{end}} - {{template "footer.html" . }} \ No newline at end of file diff --git a/templates/topic_alt_quick_reply.html b/templates/topic_alt_quick_reply.html index 0f20e989..871cd509 100644 --- a/templates/topic_alt_quick_reply.html +++ b/templates/topic_alt_quick_reply.html @@ -1,9 +1,13 @@
-
 
+
 
- {{if .CurrentUser.Tag}}
{{else}}
{{end}} +
+
+ {{if .CurrentUser.Tag}}{{else}}{{end}} +
+
diff --git a/templates/topic_alt_userinfo.html b/templates/topic_alt_userinfo.html index 6fcf21d7..8ac83e06 100644 --- a/templates/topic_alt_userinfo.html +++ b/templates/topic_alt_userinfo.html @@ -1,7 +1,11 @@
-
 
+
 
- {{if .Tag}}
{{else}}
{{end}} +
+
+ {{if .Tag}}{{else}}{{end}} +
+
\ No newline at end of file diff --git a/templates/topic_poll.html b/templates/topic_poll.html index c5fb05ab..991b42df 100644 --- a/templates/topic_poll.html +++ b/templates/topic_poll.html @@ -1,5 +1,5 @@
-
+
{{range .Poll.QuickOptions}}
diff --git a/themes/cosora/public/main.css b/themes/cosora/public/main.css index b898ba9a..3dae42b5 100644 --- a/themes/cosora/public/main.css +++ b/themes/cosora/public/main.css @@ -1059,6 +1059,7 @@ blockquote:first-child { width: 84px; height: 84px; margin-bottom: 12px; + background-position: 0px -10px; background-size: 120px; } .the_name, .userinfo .tag_block { diff --git a/themes/nox/public/main.css b/themes/nox/public/main.css index c2397759..e789b72c 100644 --- a/themes/nox/public/main.css +++ b/themes/nox/public/main.css @@ -837,6 +837,7 @@ blockquote:first-child { border-radius: 36px; height: 58px; width: 58px; + background-position: 0px -10px; background-size: 78px; margin-left: auto; margin-right: auto;