diff --git a/scaladoc-js/main/src/searchbar/SearchbarComponent.scala b/scaladoc-js/main/src/searchbar/SearchbarComponent.scala index c77c8b6b9d83..33f38e690a1e 100644 --- a/scaladoc-js/main/src/searchbar/SearchbarComponent.scala +++ b/scaladoc-js/main/src/searchbar/SearchbarComponent.scala @@ -6,6 +6,8 @@ import org.scalajs.dom.html.Input import scala.scalajs.js.timers._ import scala.concurrent.duration._ +import java.net.URI + class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireJSSearchEngine, parser: QueryParser): val resultsChunkSize = 100 extension (p: PageEntry) @@ -22,6 +24,10 @@ class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireJSSearch val resultA = document.createElement("a").asInstanceOf[html.Anchor] resultA.href = Globals.pathToRoot + p.location resultA.text = s"${p.fullName}" + resultA.onclick = (event: Event) => + if (document.body.contains(rootDiv)) { + document.body.removeChild(rootDiv) + } val location = document.createElement("span") location.classList.add("pull-right") @@ -51,8 +57,17 @@ class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireJSSearch icon.classList.add(m.entryType.take(2)) val resultA = document.createElement("a").asInstanceOf[html.Anchor] - resultA.href = m.pageLocation + resultA.href = + if(new URI(m.pageLocation).isAbsolute()) { + m.pageLocation + } else { + Globals.pathToRoot + m.pageLocation + } resultA.text = m.functionName + resultA.onclick = (event: Event) => + if (document.body.contains(rootDiv)) { + document.body.removeChild(rootDiv) + } val packageDiv = document.createElement("div").asInstanceOf[html.Div] packageDiv.classList.add("scaladoc-searchbar-inkuire-package") diff --git a/scaladoc/src/dotty/tools/scaladoc/renderers/Locations.scala b/scaladoc/src/dotty/tools/scaladoc/renderers/Locations.scala index bcdaa2bb5a5a..ac42a1f92342 100644 --- a/scaladoc/src/dotty/tools/scaladoc/renderers/Locations.scala +++ b/scaladoc/src/dotty/tools/scaladoc/renderers/Locations.scala @@ -82,6 +82,7 @@ trait Locations(using ctx: DocContext): def resolveRoot(dri: DRI, path: String): String = resolveRoot(rawLocation(dri), path) def absolutePath(dri: DRI, extension: String = "html"): String = rawLocation(dri).mkString("", "/", s".$extension") + def absolutePathWithAnchor(dri: DRI, extension: String = "html"): String = s"${absolutePath(dri, extension)}#${dri.anchor}" def resolveLink(dri: DRI, url: String): String = if URI(url).isAbsolute then url else resolveRoot(dri, url) diff --git a/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala b/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala index 7857c1bbd06a..5a5e60f08879 100644 --- a/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala +++ b/scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala @@ -133,7 +133,7 @@ trait Resources(using ctx: DocContext) extends Locations, Writer: }.mkString def mkEntry(dri: DRI, name: String, text: String, descr: String, kind: String) = jsonObject( - "l" -> jsonString(absolutePath(dri)), + "l" -> jsonString(absolutePathWithAnchor(dri)), "n" -> jsonString(name), "t" -> jsonString(text), "d" -> jsonString(descr), diff --git a/scaladoc/src/dotty/tools/scaladoc/tasty/InkuireSupport.scala b/scaladoc/src/dotty/tools/scaladoc/tasty/InkuireSupport.scala index 3e1a09574b16..36b29ff05eee 100644 --- a/scaladoc/src/dotty/tools/scaladoc/tasty/InkuireSupport.scala +++ b/scaladoc/src/dotty/tools/scaladoc/tasty/InkuireSupport.scala @@ -4,6 +4,7 @@ import collection.JavaConverters._ import dotty.tools.scaladoc._ import dotty.tools.scaladoc.{Signature => DSignature} import dotty.tools.scaladoc.Inkuire +import dotty.tools.scaladoc.renderers.Resources import scala.util.Random import scala.quoted._ @@ -13,10 +14,13 @@ import SymOps._ import NameNormalizer._ import SyntheticsSupport._ -trait InkuireSupport: +trait InkuireSupport(using DocContext) extends Resources: self: TastyParser => import qctx.reflect._ + // Unused in InkuireSupport, required for Resources + override def effectiveMembers: Map[DRI, Member] = Map.empty + private given qctx.type = qctx def doInkuireStuff(classDef: ClassDef): Unit = { @@ -110,7 +114,7 @@ trait InkuireSupport: ), name = name, packageName = ownerName, - uri = methodSymbol.dri.externalLink.getOrElse(""), + uri = methodSymbol.dri.externalLink.getOrElse(absolutePathWithAnchor(methodSymbol.dri)), entryType = "def" ) val curriedSgn = sgn.copy(signature = Inkuire.curry(sgn.signature)) @@ -138,7 +142,7 @@ trait InkuireSupport: ), name = name, packageName = ownerName, - uri = valSymbol.dri.externalLink.getOrElse(""), + uri = valSymbol.dri.externalLink.getOrElse(absolutePathWithAnchor(valSymbol.dri)), entryType = "val" ) val curriedSgn = sgn.copy(signature = Inkuire.curry(sgn.signature))