Skip to content

Commit a126b8b

Browse files
committed
Minor bugfixes and adjustments of scala3doc searchbar
1 parent 8138baa commit a126b8b

File tree

5 files changed

+18
-12
lines changed

5 files changed

+18
-12
lines changed

scala3doc-js/resources/scala3doc-searchbar.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
}
3333

3434
#scala3doc-search {
35-
margin-top: 2px;
35+
margin-top: 10px;
3636
cursor: pointer;
3737
position: fixed;
3838
top: 0;

scala3doc-js/src/searchbar/SearchbarComponent.scala

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
3333
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>"""
3434
span.id = "scala3doc-search"
3535
span.onclick = (event: Event) =>
36-
if (rootDiv.className.contains("hidden"))
37-
rootDiv.className = rootShowClasses
38-
else rootDiv.className = rootHiddenClasses
36+
if (document.body.contains(rootDiv)) {
37+
document.body.removeChild(rootDiv)
38+
}
39+
else document.body.appendChild(rootDiv)
3940

4041
val element = createNestingDiv("search-content")(
4142
createNestingDiv("search-conatiner")(
@@ -72,12 +73,14 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
7273
val element = document.createElement("div").asInstanceOf[html.Div]
7374
element.addEventListener("click", (e: Event) => e.stopPropagation())
7475
logoClick.addEventListener("click", (e: Event) => e.stopPropagation())
75-
document.body.addEventListener("click", (e: Event) => element.className = rootHiddenClasses)
76-
element.className = rootHiddenClasses
76+
document.body.addEventListener("click", (e: Event) =>
77+
if (document.body.contains(element)) {
78+
document.body.removeChild(element)
79+
}
80+
)
7781
element.id = "scala3doc-searchbar"
7882
element.appendChild(input)
7983
element.appendChild(resultsDiv)
80-
document.body.appendChild(element)
8184
element
8285

8386
handleNewQuery("")

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ enum Matchers(func: (PageEntry) => Int) extends Function1[PageEntry, Int]:
44
export func.apply
55
case ByName(query: String) extends Matchers( (p) => {
66
val name = p.searchKeys.headOption.map(_.toLowerCase)
7-
name.filter(_.contains(query)).map(_ => p.name.size - query.size).getOrElse(-1)
7+
//Edge case for empty query string
8+
if query == "" then 1
9+
else name.filter(_.contains(query)).map(_ => p.name.size - query.size).getOrElse(-1)
810
})
911
case ByKind(kind: String) extends Matchers((p) => p.name.split(" ").headOption.filter(_ == kind).fold(-1)(_ => 1))
1012

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ class QueryParser:
1515
"package",
1616
"given",
1717
)
18-
val kindRegex = (kinds.mkString("(","|",")") + " (.+)").r
19-
val restRegex = raw"(.+)".r
20-
val escapedRegex = raw"`(.+)`".r
18+
val kindRegex = (kinds.mkString("(","|",")") + " (.*)").r
19+
val restRegex = raw"(.*)".r
20+
val escapedRegex = raw"`(.*)`".r
2121

2222
def parse(query: String): List[Matchers] = query.toLowerCase match {
2323
case escapedRegex(rest) => List(Matchers.ByName(rest))

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ 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+
// Results list is limited to 100 entries for performance reasons
8+
pages.map(p => p -> query.map(_(p))).filterNot(_(1).exists(_ < 0)).sortBy(_(1)).map(_(0)).take(100)
89
}
910
}

0 commit comments

Comments
 (0)