From f4d9ef12746075ba00aa1e57ed26824c7ec64f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Thu, 26 Nov 2020 12:54:00 +0100 Subject: [PATCH] Adjust generated links for blogs to avoid 404 errors --- .../site/StaticSiteLocationProvider.scala | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/scala3doc/src/dotty/dokka/site/StaticSiteLocationProvider.scala b/scala3doc/src/dotty/dokka/site/StaticSiteLocationProvider.scala index 4619c8c290e0..b82e173523b6 100644 --- a/scala3doc/src/dotty/dokka/site/StaticSiteLocationProvider.scala +++ b/scala3doc/src/dotty/dokka/site/StaticSiteLocationProvider.scala @@ -10,6 +10,8 @@ import org.jetbrains.dokka.pages.RootPageNode import org.jetbrains.dokka.plugability.DokkaContext import scala.collection.JavaConverters._ +import java.nio.file.Paths +import java.nio.file.Path class StaticSiteLocationProviderFactory(private val ctx: DokkaContext) extends LocationProviderFactory: override def getLocationProvider(pageNode: RootPageNode): LocationProvider = @@ -24,11 +26,23 @@ class StaticSiteLocationProvider(ctx: DokkaContext, pageNode: RootPageNode) val rawFilePath = context.root.toPath.relativize(page.template.file.toPath) val pageName = page.template.file.getName val dotIndex = pageName.lastIndexOf('.') - val newPath = - if (dotIndex < 0) rawFilePath.resolve("index") - else rawFilePath.resolveSibling(pageName.substring(0, dotIndex)) - newPath.iterator.asScala.map(_.toString).toList.asJava + if (isBlogPostPath(rawFilePath)) { + val regex = raw"(\d*)-(\d*)-(\d*)-(.*)\..*".r + val blogPostPath = pageName.toString match { + case regex(year, month, day, name) => + rawFilePath.getParent.resolveSibling(Paths.get(year, month, day, name)) + case _ => + println(s"Blog file at path: $rawFilePath doesn't match desired format.") + rawFilePath.resolveSibling(pageName.substring(0, dotIndex)) + } + blogPostPath.iterator.asScala.map(_.toString).toList.asJava + } else { + val newPath = + if (dotIndex < 0) rawFilePath.resolve("index") + else rawFilePath.resolveSibling(pageName.substring(0, dotIndex)) + newPath.iterator.asScala.map(_.toString).toList.asJava + } } case page: ContentPage if page.getDri.contains(docsDRI) => @@ -43,6 +57,8 @@ class StaticSiteLocationProvider(ctx: DokkaContext, pageNode: RootPageNode) case _ => jpath + private def isBlogPostPath(path: Path): Boolean = path.startsWith(Paths.get("blog","_posts")) + override val getPathsIndex: JMap[PageNode, JList[String]] = super.getPathsIndex.asScala.mapValuesInPlace(updatePageEntry).asJava