Skip to content

Commit d0a8992

Browse files
committed
Change requests
1 parent 625538d commit d0a8992

File tree

6 files changed

+46
-31
lines changed

6 files changed

+46
-31
lines changed

scala3doc-js/src/Main.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package dotty.dokka
22

33
object Main extends App {
4-
def initializeSearchbar(): Unit = Searchbar()
5-
6-
initializeSearchbar()
4+
Searchbar()
75
}

scala3doc-js/src/searchbar/PageEntry.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ case class PageEntry(
1515
description: String,
1616
location: String,
1717
shortName: String,
18-
acronym: Option[String],
18+
acronym: Option[String]
1919
)
2020

2121
object PageEntry {
22+
private def createAcronym(s: String): Option[String] =
23+
s.headOption.map(firstLetter => firstLetter.toString ++ s.tail.filter(_.isUpper))
24+
2225
def apply(jsObj: PageEntryJS): PageEntry = PageEntry(
2326
jsObj.name,
2427
jsObj.description,
2528
jsObj.location,
2629
jsObj.searchKeys.head.toLowerCase,
27-
Option.when(jsObj.searchKeys.size > 1)(jsObj.searchKeys.last)
30+
createAcronym(jsObj.searchKeys.head)
2831
)
2932
}

scala3doc-js/src/searchbar/SearchbarComponent.scala

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import org.scalajs.dom._
44
import org.scalajs.dom.html.Input
55

66
class SearchbarComponent(val callback: (String) => List[PageEntry]):
7+
val resultsChunkSize = 100
78
extension (p: PageEntry)
89
def toHTML =
910
val wrapper = document.createElement("div").asInstanceOf[html.Div]
@@ -28,22 +29,22 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
2829
resultsDiv.scrollTop = 0
2930
while (resultsDiv.hasChildNodes()) resultsDiv.removeChild(resultsDiv.lastChild)
3031
val fragment = document.createDocumentFragment()
31-
result.take(100).foreach(fragment.appendChild)
32+
result.take(resultsChunkSize).foreach(fragment.appendChild)
3233
resultsDiv.appendChild(fragment)
3334
def loadMoreResults(result: List[raw.HTMLElement]): Unit = {
3435
resultsDiv.onscroll = (event: Event) => {
3536
if (resultsDiv.scrollHeight - resultsDiv.scrollTop == resultsDiv.clientHeight)
3637
{
3738
val fragment = document.createDocumentFragment()
38-
result.take(100).foreach(fragment.appendChild)
39+
result.take(resultsChunkSize).foreach(fragment.appendChild)
3940
resultsDiv.appendChild(fragment)
40-
loadMoreResults(result.drop(100))
41+
loadMoreResults(result.drop(resultsChunkSize))
4142
}
4243
}
4344
}
44-
loadMoreResults(result.drop(100))
45+
loadMoreResults(result.drop(resultsChunkSize))
4546

46-
private val logoClick: html.Div =
47+
private val searchIcon: html.Div =
4748
val span = document.createElement("span").asInstanceOf[html.Span]
4849
span.innerHTML = """<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M19.64 18.36l-6.24-6.24a7.52 7.52 0 10-1.28 1.28l6.24 6.24zM7.5 13.4a5.9 5.9 0 115.9-5.9 5.91 5.91 0 01-5.9 5.9z"></path></svg>"""
4950
span.id = "scala3doc-search"
@@ -87,7 +88,7 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
8788
private val rootDiv: html.Div =
8889
val element = document.createElement("div").asInstanceOf[html.Div]
8990
element.addEventListener("mousedown", (e: Event) => e.stopPropagation())
90-
logoClick.addEventListener("mousedown", (e: Event) => e.stopPropagation())
91+
searchIcon.addEventListener("mousedown", (e: Event) => e.stopPropagation())
9192
document.body.addEventListener("mousedown", (e: Event) =>
9293
if (document.body.contains(element)) {
9394
document.body.removeChild(element)
Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package dotty.dokka
22

3-
enum Matchers(func: (PageEntry) => Int) extends Function1[PageEntry, Int]:
4-
export func.apply
5-
case ByName(query: String) extends Matchers( (p) => {
6-
val nameOption = Option(p.shortName)
7-
val acronym = p.acronym
8-
//Edge case for empty query string
9-
if query == "" then 1
10-
else {
11-
val results = List(
12-
nameOption.filter(_.contains(query.toLowerCase)).fold(-1)(_.size - query.size),
13-
acronym.filter(_.contains(query)).fold(-1)(_.size - query.size + 1)
14-
)
15-
if results.forall(_ == -1) then -1 else results.filter(_ != -1).min
3+
enum Matchers extends Function1[PageEntry, Int]:
4+
case ByName(query: String)
5+
case ByKind(kind: String)
6+
7+
def apply(p: PageEntry): Int = this match {
8+
case ByName(query) => {
9+
val nameOption = Option(p.shortName)
10+
val acronym = p.acronym
11+
//Edge case for empty query string
12+
if query == "" then 1
13+
else {
14+
val results = List(
15+
nameOption.filter(_.contains(query.toLowerCase)).fold(-1)(_.size - query.size),
16+
acronym.filter(_.contains(query)).fold(-1)(_.size - query.size + 1)
17+
)
18+
if results.forall(_ == -1) then -1 else results.filter(_ != -1).min
19+
}
1620
}
17-
})
18-
case ByKind(kind: String) extends Matchers((p) => p.fullName.split(" ").headOption.filter(_.equalsIgnoreCase(kind)).fold(-1)(_ => 1))
21+
case ByKind(kind) => p.fullName.split(" ").headOption.filter(_.equalsIgnoreCase(kind)).fold(-1)(_ => 1)
22+
}
1923

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@ import math.Ordering.Implicits.seqOrdering
44

55
class SearchbarEngine(pages: List[PageEntry]) {
66
def query(query: List[Matchers]): List[PageEntry] = {
7-
pages.map(p => p -> query.map(_(p))).filterNot(_(1).exists(_ < 0)).sortBy(_(1)).map(_(0))
7+
pages
8+
.map( page =>
9+
page -> query.map(matcher => matcher(page))
10+
)
11+
.filterNot {
12+
case (page, matchResults) => matchResults.exists(_ < 0)
13+
}
14+
.sortBy {
15+
case (page, matchResults) => matchResults
16+
}
17+
.map {
18+
case (page, matchResults) => page
19+
}
820
}
921
}

scala3doc/src/dotty/renderers/ScalaSearchbarDataInstaller.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,8 @@ class ScalaSearchbarDataInstaller(val ctx: DokkaContext) extends SearchbarDataIn
6060
pages.addOne(p.getName + link, PageEntry(p.getName, p.getName, link, ""))
6161
}
6262

63-
private def createAcronym(s: String): Option[String] =
64-
s.headOption.filter(_.isUpper).map(_ => s.filter(_.isUpper))
65-
6663
override def generatePagesList(): String = {
6764
val mapper = jacksonObjectMapper()
68-
val pagesList = pages.values.map(p => createSearchRecord(p.signature, p.pkg, p.link, (List(p.name) ++ createAcronym(p.name)).asJava)).toList.asJava
65+
val pagesList = pages.values.map(p => createSearchRecord(p.signature, p.pkg, p.link, (List(p.name)).asJava)).toList.asJava
6966
mapper.writeValueAsString(pagesList)
7067
}

0 commit comments

Comments
 (0)