@@ -101,64 +101,78 @@ class SearchbarComponent(engine: PageSearchEngine, inkuireEngine: InkuireJSSearc
101
101
def handleNewFluffQuery (query : NameAndKindQuery ) =
102
102
val searchTask : Future [List [MatchResult ]] = Future (engine.query(query))
103
103
searchTask.map { result =>
104
- val resultWithDocBonus = result
105
- .map(entry =>
106
- // add bonus score for static pages when in documentation section
107
- if entry.pageEntry.kind == " static" && ! window.location.href.contains(" api" ) then
108
- entry.copy(score = entry.score + 7 )
109
- else entry
110
- )
111
- val fragment = document.createDocumentFragment()
112
-
113
- def createLoadMoreElement =
114
- div(cls := " scaladoc-searchbar-row mono-small-inline" , " loadmore" := " " )(
115
- a(
116
- span(" Load more" )
117
- )
118
- ).tap { loadMoreElement =>
119
- loadMoreElement
120
- .addEventListener(" mouseover" , _ => handleHover(loadMoreElement))
121
- }
104
+ if result.isEmpty then
105
+ val noResultsDiv = div(id := " no-results-container" )(
106
+ // TODO fix path to the element
107
+ img(src := " ./icons/no-results.svg" , alt := " Sick face" ),
108
+ h2(cls := " h200 no-result-header" )(" No results match your filter criteria." ),
109
+ p(cls := " body-small no-result-content" )(" Try adjusting or clearing your filters" , p(" to display better result" )),
110
+ button(id := " searchbar-clear-button" , cls := " clearButton label-only-button" )(" Clear all filters" ).tap(_.addEventListener(" click" , _ => {
111
+ inputElem.value = " "
112
+ inputElem.dispatchEvent(new Event (" input" ))
113
+ }))
114
+ )
115
+ resultsDiv.scrollTop = 0
116
+ resultsDiv.appendChild(noResultsDiv)
117
+ else
118
+ val resultWithDocBonus = result
119
+ .map(entry =>
120
+ // add bonus score for static pages when in documentation section
121
+ if entry.pageEntry.kind == " static" && ! window.location.href.contains(" api" ) then
122
+ entry.copy(score = entry.score + 7 )
123
+ else entry
124
+ )
125
+ val fragment = document.createDocumentFragment()
126
+
127
+ def createLoadMoreElement =
128
+ div(cls := " scaladoc-searchbar-row mono-small-inline" , " loadmore" := " " )(
129
+ a(
130
+ span(" Load more" )
131
+ )
132
+ ).tap { loadMoreElement =>
133
+ loadMoreElement
134
+ .addEventListener(" mouseover" , _ => handleHover(loadMoreElement))
135
+ }
122
136
123
- val groupedResults = resultWithDocBonus.groupBy(_.pageEntry.kind)
124
- val groupedResultsSortedByScore = groupedResults.map {
125
- case (kind, results) => (kind, results.maxByOption(_.score).map(_.score), results)
126
- }.toList.sortBy {
127
- case (_, topScore, _) => - topScore.getOrElse(0 )
128
- }.map {
129
- case (kind, _, results) => (kind, results.take(40 )) // limit to 40 results per category
130
- }
137
+ val groupedResults = resultWithDocBonus.groupBy(_.pageEntry.kind)
138
+ val groupedResultsSortedByScore = groupedResults.map {
139
+ case (kind, results) => (kind, results.maxByOption(_.score).map(_.score), results)
140
+ }.toList.sortBy {
141
+ case (_, topScore, _) => - topScore.getOrElse(0 )
142
+ }.map {
143
+ case (kind, _, results) => (kind, results.take(40 )) // limit to 40 results per category
144
+ }
131
145
132
- groupedResultsSortedByScore.map {
133
- case (kind, results) =>
134
- val kindSeparator = createKindSeparator(kind)
135
- val htmlEntries = results.map(result => result.pageEntry.toHTML(result.indices))
136
- val loadMoreElement = createLoadMoreElement
137
-
138
- def loadMoreResults (entries : List [raw.HTMLElement ]): Unit = {
139
- loadMoreElement.onclick = (event : Event ) => {
140
- entries.take(resultsChunkSize).foreach(_.classList.remove(" hidden" ))
141
- val nextElems = entries.drop(resultsChunkSize)
142
- if nextElems.nonEmpty then loadMoreResults(nextElems) else loadMoreElement.classList.add(" hidden" )
146
+ groupedResultsSortedByScore.map {
147
+ case (kind, results) =>
148
+ val kindSeparator = createKindSeparator(kind)
149
+ val htmlEntries = results.map(result => result.pageEntry.toHTML(result.indices))
150
+ val loadMoreElement = createLoadMoreElement
151
+
152
+ def loadMoreResults (entries : List [raw.HTMLElement ]): Unit = {
153
+ loadMoreElement.onclick = (event : Event ) => {
154
+ entries.take(resultsChunkSize).foreach(_.classList.remove(" hidden" ))
155
+ val nextElems = entries.drop(resultsChunkSize)
156
+ if nextElems.nonEmpty then loadMoreResults(nextElems) else loadMoreElement.classList.add(" hidden" )
157
+ }
143
158
}
144
- }
145
159
146
- fragment.appendChild(kindSeparator)
147
- htmlEntries.foreach(fragment.appendChild)
148
- fragment.appendChild(loadMoreElement)
160
+ fragment.appendChild(kindSeparator)
161
+ htmlEntries.foreach(fragment.appendChild)
162
+ fragment.appendChild(loadMoreElement)
149
163
150
- val nextElems = htmlEntries.drop(initialChunkSize)
151
- if nextElems.nonEmpty then {
152
- nextElems.foreach(_.classList.add(" hidden" ))
153
- loadMoreResults(nextElems)
154
- } else {
155
- loadMoreElement.classList.add(" hidden" )
156
- }
164
+ val nextElems = htmlEntries.drop(initialChunkSize)
165
+ if nextElems.nonEmpty then {
166
+ nextElems.foreach(_.classList.add(" hidden" ))
167
+ loadMoreResults(nextElems)
168
+ } else {
169
+ loadMoreElement.classList.add(" hidden" )
170
+ }
157
171
158
- }
172
+ }
159
173
160
- resultsDiv.scrollTop = 0
161
- resultsDiv.appendChild(fragment)
174
+ resultsDiv.scrollTop = 0
175
+ resultsDiv.appendChild(fragment)
162
176
}
163
177
164
178
def handleRecentQueries (query : String ) = {
0 commit comments