Skip to content

Commit 4a8bd32

Browse files
committed
Add debounce
1 parent 6eb7b0c commit 4a8bd32

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

scaladoc-js/src/searchbar/SearchbarComponent.scala

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package dotty.tools.scaladoc
22

33
import org.scalajs.dom._
44
import org.scalajs.dom.html.Input
5+
import scala.scalajs.js.timers._
6+
import scala.concurrent.duration._
57

68
class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireDelegateSearchEngine, parser: QueryParser):
79
val resultsChunkSize = 100
@@ -41,28 +43,32 @@ class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireDelegate
4143
resultsDiv.appendChild(fragment)
4244
def loadMoreResults(result: List[raw.HTMLElement]): Unit = {
4345
resultsDiv.onscroll = (event: Event) => {
44-
if (resultsDiv.scrollHeight - resultsDiv.scrollTop == resultsDiv.clientHeight)
45-
{
46-
val fragment = document.createDocumentFragment()
47-
result.take(resultsChunkSize).foreach(fragment.appendChild)
48-
resultsDiv.appendChild(fragment)
49-
loadMoreResults(result.drop(resultsChunkSize))
50-
}
46+
if (resultsDiv.scrollHeight - resultsDiv.scrollTop == resultsDiv.clientHeight) {
47+
val fragment = document.createDocumentFragment()
48+
result.take(resultsChunkSize).foreach(fragment.appendChild)
49+
resultsDiv.appendChild(fragment)
50+
loadMoreResults(result.drop(resultsChunkSize))
51+
}
5152
}
5253
}
5354
loadMoreResults(result.drop(resultsChunkSize))
5455

56+
var timeoutHandle: SetTimeoutHandle = null
5557
def handleNewQuery(query: String) =
56-
resultsDiv.scrollTop = 0
57-
while (resultsDiv.hasChildNodes()) resultsDiv.removeChild(resultsDiv.lastChild)
58-
val fragment = document.createDocumentFragment()
59-
parser.parse(query) match {
60-
case EngineMatchersQuery(matchers) =>
61-
handleNewFluffQuery(matchers)
62-
case BySignature(signature) =>
63-
inkuireEngine.query(query) { (p: PageEntry) =>
64-
resultsDiv.appendChild(p.toHTML)
65-
}
58+
clearTimeout(timeoutHandle)
59+
timeoutHandle = setTimeout(1.second) {
60+
resultsDiv.scrollTop = 0
61+
while (resultsDiv.hasChildNodes()) resultsDiv.removeChild(resultsDiv.lastChild)
62+
val fragment = document.createDocumentFragment()
63+
parser.parse(query) match {
64+
case EngineMatchersQuery(matchers) =>
65+
handleNewFluffQuery(matchers)
66+
case BySignature(signature) =>
67+
println("Searching")
68+
inkuireEngine.query(query) { (p: PageEntry) =>
69+
resultsDiv.appendChild(p.toHTML)
70+
}
71+
}
6672
}
6773

6874
private val searchIcon: html.Div =

0 commit comments

Comments
 (0)