@@ -6,7 +6,7 @@ import org.scalajs.dom.html.Input
66class SearchbarComponent (val callback : (String ) => List [PageEntry ]):
77 extension (p : PageEntry )
88 def toHTML =
9- val wrapper = document.createElement(" div" )
9+ val wrapper = document.createElement(" div" ). asInstanceOf [html. Div ]
1010 wrapper.classList.add(" scala3doc-searchbar-result" )
1111 wrapper.classList.add(" monospace" )
1212
@@ -25,8 +25,23 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
2525
2626 def handleNewQuery (query : String ) =
2727 val result = callback(query).map(_.toHTML)
28+ resultsDiv.scrollTop = 0
2829 while (resultsDiv.hasChildNodes()) resultsDiv.removeChild(resultsDiv.lastChild)
29- result.foreach(resultsDiv.appendChild)
30+ val fragment = document.createDocumentFragment()
31+ result.take(100 ).foreach(fragment.appendChild)
32+ resultsDiv.appendChild(fragment)
33+ def loadMoreResults (result : List [raw.HTMLElement ]): Unit = {
34+ resultsDiv.onscroll = (event : Event ) => {
35+ if (resultsDiv.scrollHeight - resultsDiv.scrollTop == resultsDiv.clientHeight)
36+ {
37+ val fragment = document.createDocumentFragment()
38+ result.take(100 ).foreach(fragment.appendChild)
39+ resultsDiv.appendChild(fragment)
40+ loadMoreResults(result.drop(100 ))
41+ }
42+ }
43+ }
44+ loadMoreResults(result.drop(100 ))
3045
3146 private val logoClick : html.Div =
3247 val span = document.createElement(" span" ).asInstanceOf [html.Span ]
@@ -39,7 +54,7 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
3954 else document.body.appendChild(rootDiv)
4055
4156 val element = createNestingDiv(" search-content" )(
42- createNestingDiv(" search-conatiner " )(
57+ createNestingDiv(" search-container " )(
4358 createNestingDiv(" search" )(
4459 span
4560 )
@@ -71,9 +86,9 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
7186
7287 private val rootDiv : html.Div =
7388 val element = document.createElement(" div" ).asInstanceOf [html.Div ]
74- element.addEventListener(" click " , (e : Event ) => e.stopPropagation())
75- logoClick.addEventListener(" click " , (e : Event ) => e.stopPropagation())
76- document.body.addEventListener(" click " , (e : Event ) =>
89+ element.addEventListener(" mousedown " , (e : Event ) => e.stopPropagation())
90+ logoClick.addEventListener(" mousedown " , (e : Event ) => e.stopPropagation())
91+ document.body.addEventListener(" mousedown " , (e : Event ) =>
7792 if (document.body.contains(element)) {
7893 document.body.removeChild(element)
7994 }
0 commit comments