55b78e8fd308 — Peter Sanchez 26 days ago
Merge tedu upstream
8 files changed, 90 insertions(+), 79 deletions(-)

M TODO
M activity.go
M database.go
M fun.go
A => views/common.js
M views/header.html
M views/honkpage.js
M web.go
M TODO +0 -4
@@ 11,7 11,3 @@ The gob encoding for backend rpc uses mo
 Several columns and indices have potentially long shared prefixes.
 	These could be stored rearranged, perhaps with last four bytes prepended.
 	https://here/there/9876 -> 9876https://here/there/9876
-
-Stop double fetching when doing a search.
-
-Fix click to expand images.

          
M activity.go +17 -14
@@ 1728,15 1728,17 @@ func honkworldwide(user *WhatAbout, honk
 				rcpts[h.XID] = true
 			}
 		}
-		for _, f := range getbacktracks(honk.XID) {
-			if f[0] == '%' {
-				rcpts[f] = true
-			} else {
-				box, ok := boxofboxes.Get(f)
-				if ok && box.Shared != "" {
-					rcpts["%"+box.Shared] = true
+		if honk.What == "update" {
+			for _, f := range getbacktracks(honk.XID) {
+				if f[0] == '%' {
+					rcpts[f] = true
 				} else {
-					rcpts[f] = true
+					box, ok := boxofboxes.Get(f)
+					if ok && box.Shared != "" {
+						rcpts["%"+box.Shared] = true
+					} else {
+						rcpts[f] = true
+					}
 				}
 			}
 		}

          
@@ 1744,7 1746,7 @@ func honkworldwide(user *WhatAbout, honk
 	for a := range rcpts {
 		go deliverate(user.ID, a, msg)
 	}
-	if honk.Public && len(honk.Onts) > 0 {
+	if (honk.What == "honk" || honk.What == "bonk") && honk.Public && len(honk.Onts) > 0 {
 		collectiveaction(honk)
 	}
 }

          
@@ 1892,22 1894,23 @@ func gofish(name string) string {
 	return href
 }
 
-func investigate(name string) (*SomeThing, error) {
+func investigate(name string) (*SomeThing, junk.Junk, error) {
 	if name == "" {
-		return nil, fmt.Errorf("no name")
+		return nil, nil, fmt.Errorf("no name")
 	}
 	if name[0] == '@' {
 		name = gofish(name)
 	}
 	if name == "" {
-		return nil, fmt.Errorf("no name")
+		return nil, nil, fmt.Errorf("no name")
 	}
 	obj, err := GetJunkFast(readyLuserOne, name)
 	if err != nil {
-		return nil, err
+		return nil, nil, err
 	}
 	allinjest(originate(name), obj)
-	return somethingabout(obj)
+	info, err := somethingabout(obj)
+	return info, obj, err
 }
 
 func somethingabout(obj junk.Junk) (*SomeThing, error) {

          
M database.go +1 -1
@@ 1007,7 1007,7 @@ func savehonker(user *WhatAbout, url, na
 		owner = url
 
 	} else {
-		info, err := investigate(url)
+		info, _, err := investigate(url)
 		if err != nil {
 			ilog.Printf("failed to investigate honker: %s", err)
 			return 0, "", err

          
M fun.go +1 -1
@@ 636,7 636,7 @@ var allhandles = gencache.New(gencache.O
 	handle := getxonker(xid, "handle")
 	if handle == "" {
 		dlog.Printf("need to get a handle: %s", xid)
-		info, err := investigate(xid)
+		info, _, err := investigate(xid)
 		if err != nil {
 			m := re_unurl.FindStringSubmatch(xid)
 			if len(m) > 2 {

          
A => views/common.js +62 -0
@@ 0,0 1,62 @@ 
+
+function hotkey(e) {
+	if (e.ctrlKey || e.altKey)
+		return
+	if (e.code == "Escape") {
+		var menu = document.getElementById("topmenu")
+		menu.open = false
+		return
+	}
+	if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement)
+		return
+
+	switch (e.code) {
+	case "KeyR":
+		refreshhonks(document.getElementById("honkrefresher"));
+		break;
+	case "KeyS":
+		oldestnewest(document.getElementById("newerscroller"));
+		break;
+	case "KeyJ":
+		scrollnexthonk();
+		break;
+	case "KeyK":
+		scrollprevioushonk();
+		break;
+	case "KeyM":
+		var menu = document.getElementById("topmenu")
+		if (!menu.open) {
+			menu.open = true
+			menu.querySelector("a").focus()
+		} else {
+			menu.open = false
+		}
+		break
+	case "Slash":
+		document.getElementById("topmenu").open = true
+		document.getElementById("searchbox").focus()
+		e.preventDefault()
+		break
+	}
+}
+
+(function() {
+	document.addEventListener("keydown", hotkey)
+	var totop = document.querySelector(".nophone")
+	if (totop) {
+		totop.onclick = function() {
+			window.scrollTo(0,0)
+		}
+	}
+	var els = document.getElementsByClassName("donklink")
+	while (els.length) {
+		let el = els[0]
+		el.onclick = function() {
+			el.classList.remove("donk")
+			el.onclick = null
+			return false
+		}
+		el.classList.remove("donklink")
+	}
+
+})()

          
M views/header.html +1 -0
@@ 6,6 6,7 @@ 
 {{ if .LocalStyleParam }}
 <link href="/local.css{{ .LocalStyleParam }}" rel="stylesheet">
 {{ end }}
+<script src="/common.js{{ .CommonJSParam }}" defer></script>
 {{ .APAltLink }}
 {{ .Honkology }}
 <link href="/icon.png" rel="icon">

          
M views/honkpage.js +0 -50
@@ 460,49 460,6 @@ function scrollprevioushonk() {
 	}
 }
 
-function hotkey(e) {
-	if (e.ctrlKey || e.altKey)
-		return
-	if (e.code == "Escape") {
-		var menu = document.getElementById("topmenu")
-		menu.open = false
-		return
-	}
-	if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement)
-		return
-
-	switch (e.code) {
-	case "KeyR":
-		refreshhonks(document.getElementById("honkrefresher"));
-		break;
-	case "KeyS":
-		oldestnewest(document.getElementById("newerscroller"));
-		break;
-	case "KeyJ":
-		scrollnexthonk();
-		break;
-	case "KeyK":
-		scrollprevioushonk();
-		break;
-	case "KeyM":
-		var menu = document.getElementById("topmenu")
-		if (!menu.open) {
-			menu.open = true
-			menu.querySelector("a").focus()
-		} else {
-			menu.open = false
-		}
-		break
-	case "Slash":
-		document.getElementById("topmenu").open = true
-		document.getElementById("searchbox").focus()
-		e.preventDefault()
-		break
-	}
-}
-
-document.addEventListener("keydown", hotkey)
-
 function addemu(elem) {
 	const data = elem.alt
 	const box = document.getElementById("honknoise");

          
@@ 548,13 505,6 @@ function loademus() {
 	el = document.getElementById("longagolink")
 	el.onclick = pageswitcher("longago", "")
 
-	var totop = document.querySelector(".nophone")
-	if (totop) {
-		totop.onclick = function() {
-			window.scrollTo(0,0)
-		}
-	}
-
 	var refreshbox = document.getElementById("refreshbox")
 	if (refreshbox) {
 		refreshbox.querySelectorAll("button").forEach(function(el) {

          
M web.go +8 -9
@@ 91,6 91,7 @@ func getInfo(r *http.Request) map[string
 	templinfo := make(map[string]interface{})
 	templinfo["StyleParam"] = getassetparam(viewDir + "/views/style.css")
 	templinfo["LocalStyleParam"] = getassetparam(dataDir + "/views/local.css")
+	templinfo["CommonJSParam"] = getassetparam(viewDir + "/views/common.js")
 	templinfo["JSParam"] = getassetparam(viewDir + "/views/honkpage.js")
 	templinfo["MiscJSParam"] = getassetparam(viewDir + "/views/misc.js")
 	templinfo["LocalJSParam"] = getassetparam(dataDir + "/views/local.js")

          
@@ 696,21 697,17 @@ func ximport(w http.ResponseWriter, r *h
 	xid := strings.TrimSpace(r.FormValue("q"))
 	xonk := getxonk(UserID(u.UserID), xid)
 	if xonk == nil {
-		p, _ := investigate(xid)
-		if p != nil {
-			xid = p.XID
-		}
-		j, err := GetJunk(UserID(u.UserID), xid)
-		if err != nil {
+		info, j, err := investigate(xid)
+		if j == nil {
 			http.Error(w, "error getting external object", http.StatusInternalServerError)
 			ilog.Printf("error getting external object: %s", err)
 			return
 		}
-		allinjest(originate(xid), j)
-		dlog.Printf("importing %s", xid)
+		if info != nil {
+			xid = info.XID
+		}
 		user, _ := butwhatabout(u.Username)
 
-		info, _ := somethingabout(j)
 		if info == nil {
 			xonk = xonksaver(user, j, originate(xid))
 		} else if info.What == SomeActor {

          
@@ 3197,6 3194,7 @@ func serve() {
 		assets := []string{
 			viewDir + "/views/style.css",
 			dataDir + "/views/local.css",
+			viewDir + "/views/common.js",
 			viewDir + "/views/honkpage.js",
 			viewDir + "/views/misc.js",
 			dataDir + "/views/local.js",

          
@@ 3255,6 3253,7 @@ func serve() {
 	posters.HandleFunc("/csp-violation", fiveoh)
 
 	getters.HandleFunc("/style.css", serveviewasset)
+	getters.HandleFunc("/common.js", serveviewasset)
 	getters.HandleFunc("/honkpage.js", serveviewasset)
 	getters.HandleFunc("/misc.js", serveviewasset)
 	getters.HandleFunc("/local.css", servedataasset)