fix refreshing pages with reversed order

This commit is contained in:
Ted Unangst 2019-10-08 00:58:42 -04:00
parent 75fdc3a5f4
commit 5916ae68ab
4 changed files with 33 additions and 10 deletions

View File

@ -1109,6 +1109,7 @@ var oldjonks = cacheNew(cacheOptions{Filler: func(xid string) ([]byte, bool) {
} }
user, _ := butwhatabout(honk.Username) user, _ := butwhatabout(honk.Username)
rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy) rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy)
reversehonks(rawhonks)
for _, h := range rawhonks { for _, h := range rawhonks {
if h.RID == honk.XID && h.Public && (h.Whofore == 2 || h.IsAcked()) { if h.RID == honk.XID && h.Public && (h.Whofore == 2 || h.IsAcked()) {
honk.Replies = append(honk.Replies, h) honk.Replies = append(honk.Replies, h)

View File

@ -159,9 +159,6 @@ func gethonksbycombo(userid int64, combo string) []*Honk {
func gethonksbyconvoy(userid int64, convoy string) []*Honk { func gethonksbyconvoy(userid int64, convoy string) []*Honk {
rows, err := stmtHonksByConvoy.Query(userid, userid, convoy) rows, err := stmtHonksByConvoy.Query(userid, userid, convoy)
honks := getsomehonks(rows, err) honks := getsomehonks(rows, err)
for i, j := 0, len(honks)-1; i < j; i, j = i+1, j-1 {
honks[i], honks[j] = honks[j], honks[i]
}
return honks return honks
} }
func gethonksbysearch(userid int64, q string) []*Honk { func gethonksbysearch(userid int64, q string) []*Honk {
@ -176,6 +173,12 @@ func gethonksbyontology(userid int64, name string) []*Honk {
return honks return honks
} }
func reversehonks(honks []*Honk) {
for i, j := 0, len(honks)-1; i < j; i, j = i+1, j-1 {
honks[i], honks[j] = honks[j], honks[i]
}
}
func getsomehonks(rows *sql.Rows, err error) []*Honk { func getsomehonks(rows *sql.Rows, err error) []*Honk {
if err != nil { if err != nil {
log.Printf("error querying honks: %s", err) log.Printf("error querying honks: %s", err)

View File

@ -76,11 +76,21 @@ function fillinhonks(xhr) {
} }
srvel.prepend(srvmsg) srvel.prepend(srvmsg)
var frontload = true
if (curpagestate.name == "convoy") {
frontload = false
}
var honksonpage = document.getElementById("honksonpage") var honksonpage = document.getElementById("honksonpage")
var holder = honksonpage.children[0] var holder = honksonpage.children[0]
var lenhonks = honks.length var lenhonks = honks.length
for (var i = honks.length; i > 0; i--) { for (var i = honks.length; i > 0; i--) {
holder.prepend(honks[i-1]) if (frontload) {
holder.prepend(honks[i-1])
} else {
holder.append(honks[i-1])
}
} }
relinklinks() relinklinks()
return lenhonks return lenhonks
@ -157,9 +167,7 @@ function pageswitcher(name, arg) {
return function(evt) { return function(evt) {
var topmenu = document.getElementById("topmenu") var topmenu = document.getElementById("topmenu")
topmenu.open = false topmenu.open = false
console.log("switching to", name +":"+arg)
if (name == curpagestate.name && arg == curpagestate.arg) { if (name == curpagestate.name && arg == curpagestate.arg) {
console.log("skipping nav")
return false return false
} }
switchtopage(name, arg) switchtopage(name, arg)

19
web.go
View File

@ -455,7 +455,7 @@ func xzone(w http.ResponseWriter, r *http.Request) {
} }
} }
var oldoutbox = cacheNew(cacheOptions{ Filler: func(name string) ([]byte, bool) { var oldoutbox = cacheNew(cacheOptions{Filler: func(name string) ([]byte, bool) {
user, err := butwhatabout(name) user, err := butwhatabout(name)
if err != nil { if err != nil {
return nil, false return nil, false
@ -481,7 +481,7 @@ var oldoutbox = cacheNew(cacheOptions{ Filler: func(name string) ([]byte, bool)
var buf bytes.Buffer var buf bytes.Buffer
j.Write(&buf) j.Write(&buf)
return buf.Bytes(), true return buf.Bytes(), true
}, Duration: 1*time.Minute}) }, Duration: 1 * time.Minute})
func outbox(w http.ResponseWriter, r *http.Request) { func outbox(w http.ResponseWriter, r *http.Request) {
name := mux.Vars(r)["name"] name := mux.Vars(r)["name"]
@ -579,6 +579,7 @@ func showhonker(w http.ResponseWriter, r *http.Request) {
msg := fmt.Sprintf(`honks by honker: <a href="%s" ref="noreferrer">%s</a>`, name, name) msg := fmt.Sprintf(`honks by honker: <a href="%s" ref="noreferrer">%s</a>`, name, name)
templinfo := getInfo(r) templinfo := getInfo(r)
templinfo["PageName"] = "honker" templinfo["PageName"] = "honker"
templinfo["PageArg"] = name
templinfo["ServerMessage"] = template.HTML(msg) templinfo["ServerMessage"] = template.HTML(msg)
templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r)
honkpage(w, u, honks, templinfo) honkpage(w, u, honks, templinfo)
@ -591,7 +592,7 @@ func showcombo(w http.ResponseWriter, r *http.Request) {
honks = osmosis(honks, u.UserID) honks = osmosis(honks, u.UserID)
templinfo := getInfo(r) templinfo := getInfo(r)
templinfo["PageName"] = "combo" templinfo["PageName"] = "combo"
templinfo["PageArg"] = "name" templinfo["PageArg"] = name
templinfo["ServerMessage"] = "honks by combo: " + name templinfo["ServerMessage"] = "honks by combo: " + name
templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r)
honkpage(w, u, honks, templinfo) honkpage(w, u, honks, templinfo)
@ -601,6 +602,12 @@ func showconvoy(w http.ResponseWriter, r *http.Request) {
u := login.GetUserInfo(r) u := login.GetUserInfo(r)
honks := gethonksbyconvoy(u.UserID, c) honks := gethonksbyconvoy(u.UserID, c)
templinfo := getInfo(r) templinfo := getInfo(r)
if len(honks) > 0 {
templinfo["TopXID"] = honks[0].XID
}
reversehonks(honks)
templinfo["PageName"] = "convoy"
templinfo["PageArg"] = c
templinfo["ServerMessage"] = "honks in convoy: " + c templinfo["ServerMessage"] = "honks in convoy: " + c
templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r)
honkpage(w, u, honks, templinfo) honkpage(w, u, honks, templinfo)
@ -610,6 +617,8 @@ func showsearch(w http.ResponseWriter, r *http.Request) {
u := login.GetUserInfo(r) u := login.GetUserInfo(r)
honks := gethonksbysearch(u.UserID, q) honks := gethonksbysearch(u.UserID, q)
templinfo := getInfo(r) templinfo := getInfo(r)
templinfo["PageName"] = "search"
templinfo["PageArg"] = q
templinfo["ServerMessage"] = "honks for search: " + q templinfo["ServerMessage"] = "honks for search: " + q
templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r)
honkpage(w, u, honks, templinfo) honkpage(w, u, honks, templinfo)
@ -706,6 +715,7 @@ func showhonk(w http.ResponseWriter, r *http.Request) {
return return
} }
rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy) rawhonks := gethonksbyconvoy(honk.UserID, honk.Convoy)
reversehonks(rawhonks)
var honks []*Honk var honks []*Honk
for _, h := range rawhonks { for _, h := range rawhonks {
if h.Public && (h.Whofore == 2 || h.IsAcked()) { if h.Public && (h.Whofore == 2 || h.IsAcked()) {
@ -729,7 +739,8 @@ func honkpage(w http.ResponseWriter, u *login.UserInfo, honks []*Honk, templinfo
} }
reverbolate(userid, honks) reverbolate(userid, honks)
templinfo["Honks"] = honks templinfo["Honks"] = honks
if len(honks) > 0 { if templinfo["TopXID"] == nil && len(honks) > 0 {
log.Printf("setting topxid")
templinfo["TopXID"] = honks[0].XID templinfo["TopXID"] = honks[0].XID
} }
err := readviews.Execute(w, "honkpage.html", templinfo) err := readviews.Execute(w, "honkpage.html", templinfo)