From a72763749ac8b7869619ec3a7d2c8e5095229309 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Wed, 22 Jun 2016 11:48:27 +0200 Subject: Fix proper structure for paramlist links (clientside) --- dottydoc/js/src/html/Member.scala | 70 ++++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 15 deletions(-) (limited to 'dottydoc/js') diff --git a/dottydoc/js/src/html/Member.scala b/dottydoc/js/src/html/Member.scala index 4ab214fdb..a8da9d126 100644 --- a/dottydoc/js/src/html/Member.scala +++ b/dottydoc/js/src/html/Member.scala @@ -57,7 +57,7 @@ trait MemberLayout { m.name ), spanWith("member-type-params no-left-margin", typeParams(m)), - spanWith("member-param-list no-left-margin", paramList(m)), + span(cls := "member-param-list no-left-margin", paramList(m)), returnValue(m, parent) ), shortComment, @@ -73,23 +73,63 @@ trait MemberLayout { case _ => Some(span(cls := clazz, contents)) } - def paramList(m: Entity): String = m match { + def paramList(m: Entity): Span = m match { case d: Def if d.paramLists.nonEmpty => - d.paramLists.map { xs => - xs.map { tr => - // FIXME: should not cast like this - it won't be guaranteed to be a - // TypeReference after Or/Types for paramlists have been implemented - tr.title + ": " + decodeLink(tr.ref.asInstanceOf[TypeReference].tpeLink) - }.mkString ("(", ", ", ")") - }.mkString("") - case _ => "" + span( + cls := "member-param-lists", + d.paramLists.map { xs => + span( + cls := "param-list", + "(", + xs.flatMap { tr => + Seq( + span(cls := "param-name", tr.title).render, + span(cls := "type-separator no-left-margin", ":").render, + span(referenceToLinks(tr.ref)).render, + span(cls := "type-separator no-left-margin", ",").render + ) + }.dropRight(1), + ")" + ).render + } + ).render + case _ => span().render } - def decodeLink: MaterializableLink => String = { - case MaterializedLink(t, _) => t - case NoLink(t, _) => t - //FIXME: there should be no UnsetLinks - either MaterializedLink or NoLink - case UnsetLink(_, q) => q + def referenceToLinks(ref: Reference): Span = { + def linkToAnchor(link: MaterializableLink) = link match { + case MaterializedLink(t, url) => a(href := url, t).render + case NoLink(t, _) => span(t).render + + //FIXME: there should be no UnsetLinks - either MaterializedLink or NoLink + case UnsetLink(_, q) => span(q).render + } + + ref match { + case ref: TypeReference if ref.paramLinks.nonEmpty => span( + linkToAnchor(ref.tpeLink), + "[", + ref + .paramLinks + .map(linkToAnchor) + .flatMap(link => Seq(link, span(cls := "type-separator no-left-margin", ",").render)) + .dropRight(1), + "]" + ).render + case ref: TypeReference => span(linkToAnchor(ref.tpeLink)).render + + case OrTypeReference(left, right) => span( + referenceToLinks(left), + span(cls := "type-separator", "|"), + referenceToLinks(right) + ).render + + case AndTypeReference(left, right) => span( + referenceToLinks(left), + span(cls := "type-separator", "&"), + referenceToLinks(right) + ).render + } } def typeParams(m: Entity): String = m match { -- cgit v1.2.3