Skip to content

Commit 491720e

Browse files
committed
Add second line with description to search result
1 parent e725348 commit 491720e

File tree

5 files changed

+75
-5
lines changed

5 files changed

+75
-5
lines changed

scaladoc-js/main/src/searchbar/PageEntry.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ trait PageEntryJS extends js.Object {
1111
val l: String = js.native
1212
val e: Boolean = js.native
1313
val k: String = js.native
14+
val x: String = js.native
1415
}
1516

1617
case class PageEntry(
1718
fullName: String,
1819
description: String,
20+
extraDescription: String,
1921
extensionTarget: String,
2022
location: String,
2123
isLocationExternal: Boolean,
@@ -37,6 +39,7 @@ object PageEntry {
3739
def apply(jsObj: PageEntryJS): PageEntry = PageEntry(
3840
jsObj.t,
3941
jsObj.d,
42+
jsObj.x,
4043
jsObj.i,
4144
jsObj.l,
4245
jsObj.e,

scaladoc-js/main/src/searchbar/SearchbarComponent.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ class SearchbarComponent(engine: PageSearchEngine, inkuireEngine: InkuireJSSearc
3535
a(cls := "scaladoc-searchbar-row mono-small-inline", href := location)(
3636
p.fullName.zipWithIndex.map((c, i) => if boldChars.contains(i) then b(c.toString) else c.toString),
3737
span(i(extensionTargetMessage)),
38-
span(cls := "pull-right scaladoc-searchbar-location")(p.description)
38+
span(cls := "pull-right scaladoc-searchbar-location")(p.description),
39+
if p.extraDescription == "" then ""
40+
else div(cls := "scaladoc-searchbar-extra-info")(p.extraDescription)
3941
).tap { _.onclick = (event: Event) =>
4042
if (document.body.contains(rootDiv)) {
4143
document.body.removeChild(rootDiv)

scaladoc-js/main/test/dotty/tools/scaladoc/PageSearchEngineTest.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class PageSearchEngineTest {
1313
"",
1414
"",
1515
"",
16+
"",
1617
false,
1718
s"$name",
1819
kind,

scaladoc/resources/dotty_res/styles/theme/layout/searchBar.css

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@
182182

183183
.scaladoc-searchbar-row {
184184
display: flex;
185+
flex-wrap: wrap;
185186
color: var(--text-secondary);
186187
padding: calc(1.5 * var(--base-spacing)) calc(2 * var(--base-spacing));
187188
}
@@ -228,6 +229,19 @@
228229
display: block;
229230
}
230231

232+
.scaladoc-searchbar-extra-info {
233+
display: none;
234+
width: 100%;
235+
padding-top: 1em;
236+
white-space: nowrap;
237+
overflow-x: hidden;
238+
text-overflow: ellipsis;
239+
}
240+
241+
.scaladoc-searchbar-row:hover .scaladoc-searchbar-extra-info {
242+
display: block;
243+
}
244+
231245
/* searchbar footer */
232246
#searchbar-footer {
233247
position: absolute;
@@ -290,6 +304,10 @@
290304
display: none;
291305
}
292306

307+
.scaladoc-searchbar-row:hover .scaladoc-searchbar-extra-info {
308+
display: none;
309+
}
310+
293311
#scaladoc-searchbar-results {
294312
border: none;
295313
margin-left: calc(3 * var(--base-spacing));

scaladoc/src/dotty/tools/scaladoc/renderers/Resources.scala

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,29 +154,75 @@ trait Resources(using ctx: DocContext) extends Locations, Writer:
154154
val signatureProvider = ScalaSignatureProvider()
155155
def flattenToText(signature: Signature): String = signature.getName
156156

157-
def mkEntry(dri: DRI, name: String, text: String, extensionTarget: String, descr: String, kind: String) = jsonObject(
157+
def mkEntry(
158+
dri: DRI,
159+
name: String,
160+
text: String,
161+
extensionTarget: String,
162+
descr: String,
163+
extraDescr: String,
164+
kind: String,
165+
) = jsonObject(
158166
"l" -> jsonString(relativeInternalOrAbsoluteExternalPath(dri)),
159167
"e" -> (if dri.externalLink.isDefined then rawJSON("true") else rawJSON("false")),
160168
"i" -> jsonString(extensionTarget),
161169
"n" -> jsonString(name),
162170
"t" -> jsonString(text),
163171
"d" -> jsonString(descr),
164-
"k" -> jsonString(kind)
172+
"k" -> jsonString(kind),
173+
"x" -> jsonString(extraDescr),
165174
)
166175

167176
def extensionTarget(member: Member): String =
168177
member.kind match
169178
case Kind.Extension(on, _) => flattenToText(on.signature)
170179
case _ => ""
171180

181+
def docPartRenderPlain(d: DocPart): String =
182+
import dotty.tools.scaladoc.tasty.comments.wiki._
183+
import com.vladsch.flexmark.util.ast.{Node => MdNode}
184+
def renderPlain(wd: WikiDocElement): String =
185+
wd match
186+
case Paragraph(text) => renderPlain(text)
187+
case Chain(items) => items.map(renderPlain).mkString("")
188+
case Italic(text) => renderPlain(text)
189+
case Bold(text) => renderPlain(text)
190+
case Underline(text) => renderPlain(text)
191+
case Superscript(text) => renderPlain(text)
192+
case Subscript(text) => renderPlain(text)
193+
case Link(link, title) => title.map(renderPlain).getOrElse(
194+
link match
195+
case DocLink.ToURL(url) => url
196+
case DocLink.ToDRI(_, name) => name
197+
case _ => ""
198+
)
199+
case Monospace(text) => renderPlain(text)
200+
case Text(text) => text
201+
case Summary(text) => renderPlain(text)
202+
case _ => ""
203+
d match
204+
case s: Seq[WikiDocElement @unchecked] =>
205+
if s.length == 0 then ""
206+
else renderPlain(s.head)
207+
case _ => ""
208+
172209
def processPage(page: Page, pageFQName: List[String]): Seq[(JSON, Seq[String])] =
173210
val (res, pageName) = page.content match
174211
case m: Member if m.kind != Kind.RootPackage =>
175212
def processMember(member: Member, fqName: List[String]): Seq[(JSON, Seq[String])] =
176213
val signature: MemberSignature = signatureProvider.rawSignature(member)()
177214
val sig = Signature(Plain(member.name)) ++ signature.suffix
178215
val descr = if member.kind == Kind.Package then "" else fqName.mkString(".")
179-
val entry = mkEntry(member.dri, member.name, flattenToText(sig), extensionTarget(member), descr, member.kind.name)
216+
val extraDescr = member.docs.map(d => docPartRenderPlain(d.body)).getOrElse("")
217+
val entry = mkEntry(
218+
member.dri,
219+
member.name,
220+
flattenToText(sig),
221+
extensionTarget(member),
222+
descr,
223+
extraDescr,
224+
member.kind.name,
225+
)
180226
val children = member
181227
.membersBy(m => m.kind != Kind.Package && !m.kind.isInstanceOf[Classlike])
182228
.filter(m => m.origin == Origin.RegularlyDefined && m.inheritedFrom.fold(true)(_.isSourceSuperclassHidden))
@@ -185,7 +231,7 @@ trait Resources(using ctx: DocContext) extends Locations, Writer:
185231

186232
(processMember(m, pageFQName), m.name)
187233
case _ =>
188-
(Seq((mkEntry(page.link.dri, page.link.name, page.link.name, "", "", "static"), pageFQName)), "")
234+
(Seq((mkEntry(page.link.dri, page.link.name, page.link.name, "", "", "", "static"), pageFQName)), "")
189235

190236
val updatedFqName = page.content match
191237
case m: Member if m.kind == Kind.Package => List(m.name)

0 commit comments

Comments
 (0)