Skip to content

Commit 74dbbaa

Browse files
committed
Adapt search to new renderer
1 parent ef83b79 commit 74dbbaa

File tree

6 files changed

+74
-31
lines changed

6 files changed

+74
-31
lines changed

scala3doc-js/src/searchbar/PageEntry.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import scala.scalajs.js
44

55
@js.native
66
trait PageEntryJS extends js.Object {
7-
val name: String = js.native
8-
val description: String = js.native
9-
val location: String = js.native
10-
val searchKeys: js.Array[String] = js.native
7+
val n: String = js.native
8+
val t: String = js.native
9+
val d: String = js.native
10+
val l: String = js.native
1111
}
1212

1313
case class PageEntry(
@@ -23,10 +23,10 @@ object PageEntry {
2323
s.headOption.map(firstLetter => firstLetter.toString ++ s.tail.filter(_.isUpper))
2424

2525
def apply(jsObj: PageEntryJS): PageEntry = PageEntry(
26-
jsObj.name,
27-
jsObj.description,
28-
jsObj.location,
29-
jsObj.searchKeys.head.toLowerCase,
30-
createAcronym(jsObj.searchKeys.head)
26+
jsObj.t,
27+
jsObj.d,
28+
jsObj.l,
29+
jsObj.n.toLowerCase,
30+
createAcronym(jsObj.n)
3131
)
3232
}

scala3doc-js/src/searchbar/engine/SearchbarEngine.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package dotty.dokka
22

33
import math.Ordering.Implicits.seqOrdering
44

5-
class SearchbarEngine(pages: List[PageEntry]) {
6-
def query(query: List[Matchers]): List[PageEntry] = {
5+
class SearchbarEngine(pages: List[PageEntry]):
6+
def query(query: List[Matchers]): List[PageEntry] =
77
pages
88
.map( page =>
99
page -> query.map(matcher => matcher(page))
@@ -17,5 +17,3 @@ class SearchbarEngine(pages: List[PageEntry]) {
1717
.map {
1818
case (page, matchResults) => page
1919
}
20-
}
21-
}

scala3doc/src/dotty/renderers/HtmlRenderer.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ class HtmlRenderer(rootPackage: Member, val members: Map[DRI, Member], buildNode
6161
val hiddenPages: Seq[Page] =
6262
staticSite.toSeq.flatMap(c => c.orphanedTemplates.map(templateToPage(_, c)))
6363

64+
val allPages = navigablePage +: hiddenPages
65+
6466
def renderContent(page: Page) = page.content match
6567
case m: Member =>
6668
val signatureRenderer = new SignatureRenderer:
@@ -103,15 +105,14 @@ class HtmlRenderer(rootPackage: Member, val members: Map[DRI, Member], buildNode
103105
files.map(p => siteRoot.relativize(p).toString).toList
104106
}
105107

106-
val siteResourcesPaths =
107-
(navigablePage +: hiddenPages).toSet.flatMap(specificResources) ++ siteImages
108+
val siteResourcesPaths = allPages.toSet.flatMap(specificResources) ++ siteImages
108109

109-
val resources = siteResourcesPaths.toSeq.map(pathToResource) ++ allResources(rootPackage)
110+
val resources = siteResourcesPaths.toSeq.map(pathToResource) ++ allResources(allPages)
110111
resources.flatMap(renderResource)
111112

112113
def render(): Unit =
113114
val renderedResources = renderResources()
114-
val sites = (navigablePage +: hiddenPages).map(renderPage(_, Vector.empty))
115+
val sites = allPages.map(renderPage(_, Vector.empty))
115116

116117
def mkHead(page: Page): AppliedTag =
117118
val resources = page.content match
@@ -187,7 +188,7 @@ class HtmlRenderer(rootPackage: Member, val members: Map[DRI, Member], buildNode
187188
div (id := "leftToggler")(
188189
span(cls := "icon-toggler")
189190
),
190-
div(id := "searchBar"),
191+
div(id := "scala3doc-searchBar"),
191192
main(
192193
div(id := "content")(
193194
parentsHtml,

scala3doc/src/dotty/renderers/Locations.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,14 @@ trait Locations(using ctx: DocContext):
7171
pathTo(to.split("/").toList, from)
7272

7373
def resolveRoot(dri: DRI, path: String): String = resolveRoot(rawLocation(dri), path)
74+
def absolutePath(dri: DRI): String = rawLocation(dri).mkString("", "/", ".html")
7475

7576
def resolveLink(dri: DRI, url: String): String =
7677
if URI(url).isAbsolute then url else resolveRoot(dri, url)
7778

78-
def pathToRoot(dri: DRI): String =
79-
pathTo(rawLocation(dri), Nil).dropRight(1)
79+
def pathToRoot(dri: DRI): String = rawLocation(dri).drop(1).map(_ => "..") match
80+
case Nil => ""
81+
case seq => seq.mkString("", "/", "/")
8082

8183
def driExisits(dri: DRI) = true // TODO implement checks!
8284

scala3doc/src/dotty/renderers/Resources.scala

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ trait Resources(using ctx: DocContext) extends Locations, Writter:
6060
"styles/diagram.css",
6161
"styles/filter-bar.css",
6262
"styles/search-bar.css",
63+
"styles/scala3doc-searchbar.css",
6364
"hljs/highlight.pack.js",
6465
"hljs/LICENSE",
6566
"scripts/hljs-scala3.js",
@@ -71,6 +72,7 @@ trait Resources(using ctx: DocContext) extends Locations, Writter:
7172
"scripts/components/Input.js",
7273
"scripts/components/FilterGroup.js",
7374
"scripts/components/Filter.js",
75+
"scripts/searchbar.js"
7476
).map(dottyRes)
7577

7678
val urls = List(
@@ -82,18 +84,58 @@ trait Resources(using ctx: DocContext) extends Locations, Writter:
8284

8385
fromResources ++ urls ++ projectLogo ++ Seq(scala3docVersionFile, dynamicJsData)
8486

85-
val memberResourcesPaths = memberResources.map(_.path)
86-
87-
val scala3docLogo = dottyRes("images/scala3doc_logo.svg")
88-
89-
def packageList(topLevelPackage: Member) = Resource.Text("scala3doc/package-list", "TODO")
90-
91-
def allResources(topLevelPackage: Member): Seq[Resource] = memberResources ++ Seq(
87+
val searchDataPath = "scripts/searchData.js"
88+
val memberResourcesPaths = Seq(searchDataPath) ++ memberResources.map(_.path)
89+
90+
case class PageEntry(
91+
dri: DRI,
92+
name: String,
93+
text: String,
94+
descr: String,
95+
):
96+
// for jackson
97+
def getL: String = absolutePath(dri)
98+
def getN: String = name
99+
def getT: String = text
100+
def getD: String = descr
101+
102+
def searchData(pages: Seq[Page]) =
103+
def flattenToText(signature: Signature): String =
104+
signature.map {
105+
case Link(name, dri) => name
106+
case s: String => s
107+
}.mkString
108+
109+
def processPage(page: Page): Seq[PageEntry] =
110+
val res = page.content match
111+
case m: Member =>
112+
val descr = m.dri.location.replace("/", ".")
113+
def processMember(member: Member): Seq[PageEntry] =
114+
val signatureBuilder = ScalaSignatureProvider.rawSignature(member, InlineSignatureBuilder()).asInstanceOf[InlineSignatureBuilder]
115+
val sig = Signature(member.kind.name, " ") ++ Seq(Link(member.name, member.dri)) ++ signatureBuilder.names.reverse
116+
val entry = PageEntry(member.dri, member.name, flattenToText(sig), descr)
117+
val children = member
118+
.membersBy(m => m.kind != dotty.dokka.model.api.Kind.Package && !m.kind.isInstanceOf[Classlike])
119+
.filter(m => m.origin == Origin.RegularlyDefined && m.inheritedFrom.isEmpty)
120+
Seq(entry) ++ children.flatMap(processMember)
121+
122+
processMember(m)
123+
case _ =>
124+
Seq(PageEntry(page.link.dri, page.link.name, page.link.name, ""))
125+
126+
res ++ page.children.flatMap(processPage)
127+
128+
val entries = pages.flatMap(processPage).toArray
129+
val entriesText = new ObjectMapper().writeValueAsString(entries)
130+
Resource.Text(searchDataPath, s"pages = $entriesText;")
131+
132+
133+
def allResources(pages: Seq[Page]): Seq[Resource] = memberResources ++ Seq(
92134
dottyRes("favicon.ico"),
93135
dottyRes("fonts/dotty-icons.woff"),
94136
dottyRes("fonts/dotty-icons.ttf"),
95-
scala3docLogo,
96-
packageList(topLevelPackage)
137+
dottyRes("images/scala3doc_logo.svg"),
138+
searchData(pages)
97139
)
98140

99141
def renderResource(resource: Resource): Seq[String] =

scala3doc/src/dotty/renderers/Writter.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ trait Writter(using ctx: DocContext) extends Locations:
1717
if !Files.exists(absPath.getParent) then Files.createDirectories(absPath.getParent)
1818
absPath
1919

20-
def write(dri: DRI, content: AppliedTag, ext: String = ".html"): String =
21-
val path = rawLocation(dri).mkString("", "/", ext)
20+
def write(dri: DRI, content: AppliedTag): String =
21+
val path = absolutePath(dri)
2222
Files.write(dest(path), content.toString.getBytes)
2323
path
2424

0 commit comments

Comments
 (0)