Skip to content

Commit 94d91cf

Browse files
committed
Adjust generated links for blogs to avoid 404 errors
1 parent 1a4106f commit 94d91cf

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

scala3doc/src/dotty/dokka/site/StaticSiteLocationProvider.scala

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import org.jetbrains.dokka.pages.RootPageNode
1010
import org.jetbrains.dokka.plugability.DokkaContext
1111

1212
import scala.collection.JavaConverters._
13+
import java.nio.file.Paths
14+
import java.nio.file.Path
1315

1416
class StaticSiteLocationProviderFactory(private val ctx: DokkaContext) extends LocationProviderFactory:
1517
override def getLocationProvider(pageNode: RootPageNode): LocationProvider =
@@ -24,11 +26,21 @@ class StaticSiteLocationProvider(ctx: DokkaContext, pageNode: RootPageNode)
2426
val rawFilePath = context.root.toPath.relativize(page.template.file.toPath)
2527
val pageName = page.template.file.getName
2628
val dotIndex = pageName.lastIndexOf('.')
27-
val newPath =
28-
if (dotIndex < 0) rawFilePath.resolve("index")
29-
else rawFilePath.resolveSibling(pageName.substring(0, dotIndex))
3029

31-
newPath.iterator.asScala.map(_.toString).toList.asJava
30+
if (isBlogPostPath(rawFilePath)) {
31+
val regex = raw"(\d*)-(\d*)-(\d*)-(.*)\..*".r
32+
val blogPostPath = pageName.toString match {
33+
case regex(year, month, day, name) =>
34+
rawFilePath.getParent.resolveSibling(Paths.get(year, month, day, name))
35+
case _ => rawFilePath
36+
}
37+
blogPostPath.iterator.asScala.map(_.toString).toList.asJava
38+
} else {
39+
val newPath =
40+
if (dotIndex < 0) rawFilePath.resolve("index")
41+
else rawFilePath.resolveSibling(pageName.substring(0, dotIndex))
42+
newPath.iterator.asScala.map(_.toString).toList.asJava
43+
}
3244
}
3345

3446
case page: ContentPage if page.getDri.contains(docsDRI) =>
@@ -43,6 +55,8 @@ class StaticSiteLocationProvider(ctx: DokkaContext, pageNode: RootPageNode)
4355
case _ =>
4456
jpath
4557

58+
private def isBlogPostPath(path: Path): Boolean = path.startsWith(Paths.get("blog","_posts"))
59+
4660
override val getPathsIndex: JMap[PageNode, JList[String]] =
4761
super.getPathsIndex.asScala.mapValuesInPlace(updatePageEntry).asJava
4862

0 commit comments

Comments
 (0)