Skip to content

Correctly handle Javadoc method link #160

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -240,12 +240,23 @@ case class ScaladocDirective(page: Page, variables: Map[String, String])
case class JavadocDirective(page: Page, variables: Map[String, String])
extends ApiDocDirective("javadoc", page, variables) {

def resolveApiLink(baseUrl: Url, link: String): Url = {
def resolveApiLink(baseUrl: Url, link: String): Url =
if (link.contains("#"))
resolveMethodLink(baseUrl, link)
else
resolveClassLink(baseUrl, link)

private def resolveClassLink(baseUrl: Url, link: String): Url = {
val url = Url(link).base
val path = url.getPath.replace('.', '/') + ".html"
baseUrl.withEndingSlash.withQuery(path).withFragment(url.getFragment)
}

private def resolveMethodLink(baseUrl: Url, link: String): Url = {
val url = Url(link).base
val path = url.getPath.replace('.', '/') + ".html"
(baseUrl / path) withFragment (url.getFragment)
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class JavadocDirectiveSpec extends MarkdownBaseSpec {

it should "handle method links correctly" in {
markdown("@javadoc[File.pathSeparator](java.io.File#pathSeparator)") shouldEqual
html("""<p><a href="https://docs.oracle.com/javase/8/docs/api/?java/io/File.html#pathSeparator">File.pathSeparator</a></p>""")
html("""<p><a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html#pathSeparator">File.pathSeparator</a></p>""")
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(current) https://docs.oracle.com/javase/8/docs/api/?java/io/File.html#pathSeparator
jumps to the class page,

(expected) https://docs.oracle.com/javase/8/docs/api/java/io/File.html#pathSeparator
correctly jumps to the method section of the page

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The original behaviour of linking to the javadoc with frames comes from this suggestion by @jroper : #52 (comment)

I am not sure if there even exists a way to link to methods when opening with frames.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As @jonas points out, this change results in a terrible user experience. Out of the box there doesn't exist a way to link to methods when opening with frames, but we have this Javascript code that gets added to every page in the Lagom Javadocs:

https://github.com/lagom/lagom/blob/fde496bc089157e40a3a132a3ae1cf0d5f1111d4/project/Doc.scala#L63-L79

This then gets configured here:

https://github.com/lagom/lagom/blob/fde496bc089157e40a3a132a3ae1cf0d5f1111d4/project/Doc.scala#L134

That way, you can link to methods in the docs, and still have it open with frames.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, let me look at how lagom works for this.

}

it should "handle class links correctly" in {
Expand Down