Skip to content

Commit 37e997a

Browse files
Merge pull request #14454 from jchyb/scaladoc/searchbar-anchors
Scaladoc: Add member position IDs to anchors in searchbar
2 parents 990a367 + 91e3e99 commit 37e997a

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

scaladoc-js/main/src/searchbar/SearchbarComponent.scala

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import org.scalajs.dom.html.Input
66
import scala.scalajs.js.timers._
77
import scala.concurrent.duration._
88

9+
import java.net.URI
10+
911
class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireJSSearchEngine, parser: QueryParser):
1012
val resultsChunkSize = 100
1113
extension (p: PageEntry)
@@ -22,6 +24,10 @@ class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireJSSearch
2224
val resultA = document.createElement("a").asInstanceOf[html.Anchor]
2325
resultA.href = Globals.pathToRoot + p.location
2426
resultA.text = s"${p.fullName}"
27+
resultA.onclick = (event: Event) =>
28+
if (document.body.contains(rootDiv)) {
29+
document.body.removeChild(rootDiv)
30+
}
2531

2632
val location = document.createElement("span")
2733
location.classList.add("pull-right")
@@ -51,8 +57,17 @@ class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireJSSearch
5157
icon.classList.add(m.entryType.take(2))
5258

5359
val resultA = document.createElement("a").asInstanceOf[html.Anchor]
54-
resultA.href = m.pageLocation
60+
resultA.href =
61+
if(new URI(m.pageLocation).isAbsolute()) {
62+
m.pageLocation
63+
} else {
64+
Globals.pathToRoot + m.pageLocation
65+
}
5566
resultA.text = m.functionName
67+
resultA.onclick = (event: Event) =>
68+
if (document.body.contains(rootDiv)) {
69+
document.body.removeChild(rootDiv)
70+
}
5671

5772
val packageDiv = document.createElement("div").asInstanceOf[html.Div]
5873
packageDiv.classList.add("scaladoc-searchbar-inkuire-package")

scaladoc/src/dotty/tools/scaladoc/renderers/Locations.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ trait Locations(using ctx: DocContext):
8181

8282
def resolveRoot(dri: DRI, path: String): String = resolveRoot(rawLocation(dri), path)
8383
def absolutePath(dri: DRI, extension: String = "html"): String = rawLocation(dri).mkString("", "/", s".$extension")
84+
def absolutePathWithAnchor(dri: DRI, extension: String = "html"): String = s"${absolutePath(dri, extension)}#${dri.anchor}"
8485

8586
def resolveLink(dri: DRI, url: String): String =
8687
if URI(url).isAbsolute then url else resolveRoot(dri, url)

scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ trait Resources(using ctx: DocContext) extends Locations, Writer:
133133
}.mkString
134134

135135
def mkEntry(dri: DRI, name: String, text: String, descr: String, kind: String) = jsonObject(
136-
"l" -> jsonString(absolutePath(dri)),
136+
"l" -> jsonString(absolutePathWithAnchor(dri)),
137137
"n" -> jsonString(name),
138138
"t" -> jsonString(text),
139139
"d" -> jsonString(descr),

scaladoc/src/dotty/tools/scaladoc/tasty/InkuireSupport.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import collection.JavaConverters._
44
import dotty.tools.scaladoc._
55
import dotty.tools.scaladoc.{Signature => DSignature}
66
import dotty.tools.scaladoc.Inkuire
7+
import dotty.tools.scaladoc.renderers.Resources
78

89
import scala.util.Random
910
import scala.quoted._
@@ -13,10 +14,13 @@ import SymOps._
1314
import NameNormalizer._
1415
import SyntheticsSupport._
1516

16-
trait InkuireSupport:
17+
trait InkuireSupport(using DocContext) extends Resources:
1718
self: TastyParser =>
1819
import qctx.reflect._
1920

21+
// Unused in InkuireSupport, required for Resources
22+
override def effectiveMembers: Map[DRI, Member] = Map.empty
23+
2024
private given qctx.type = qctx
2125

2226
def doInkuireStuff(classDef: ClassDef): Unit = {
@@ -110,7 +114,7 @@ trait InkuireSupport:
110114
),
111115
name = name,
112116
packageName = ownerName,
113-
uri = methodSymbol.dri.externalLink.getOrElse(""),
117+
uri = methodSymbol.dri.externalLink.getOrElse(absolutePathWithAnchor(methodSymbol.dri)),
114118
entryType = "def"
115119
)
116120
val curriedSgn = sgn.copy(signature = Inkuire.curry(sgn.signature))
@@ -138,7 +142,7 @@ trait InkuireSupport:
138142
),
139143
name = name,
140144
packageName = ownerName,
141-
uri = valSymbol.dri.externalLink.getOrElse(""),
145+
uri = valSymbol.dri.externalLink.getOrElse(absolutePathWithAnchor(valSymbol.dri)),
142146
entryType = "val"
143147
)
144148
val curriedSgn = sgn.copy(signature = Inkuire.curry(sgn.signature))

0 commit comments

Comments
 (0)