@@ -6,7 +6,7 @@ import org.scalajs.dom.html.Input
6
6
class SearchbarComponent (val callback : (String ) => List [PageEntry ]):
7
7
extension (p : PageEntry )
8
8
def toHTML =
9
- val wrapper = document.createElement(" div" )
9
+ val wrapper = document.createElement(" div" ). asInstanceOf [html. Div ]
10
10
wrapper.classList.add(" scala3doc-searchbar-result" )
11
11
wrapper.classList.add(" monospace" )
12
12
@@ -25,8 +25,23 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
25
25
26
26
def handleNewQuery (query : String ) =
27
27
val result = callback(query).map(_.toHTML)
28
+ resultsDiv.scrollTop = 0
28
29
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 ))
30
45
31
46
private val logoClick : html.Div =
32
47
val span = document.createElement(" span" ).asInstanceOf [html.Span ]
@@ -39,7 +54,7 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
39
54
else document.body.appendChild(rootDiv)
40
55
41
56
val element = createNestingDiv(" search-content" )(
42
- createNestingDiv(" search-conatiner " )(
57
+ createNestingDiv(" search-container " )(
43
58
createNestingDiv(" search" )(
44
59
span
45
60
)
@@ -71,9 +86,9 @@ class SearchbarComponent(val callback: (String) => List[PageEntry]):
71
86
72
87
private val rootDiv : html.Div =
73
88
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 ) =>
77
92
if (document.body.contains(element)) {
78
93
document.body.removeChild(element)
79
94
}
0 commit comments