@@ -2,6 +2,8 @@ package dotty.dokka
22package site
33
44import java .io .File
5+ import java .nio .file .Files
6+
57
68import org .jetbrains .dokka .base .parsers .MarkdownParser
79import org .jetbrains .dokka .base .transformers .pages .comments .DocTagToContentConverter
@@ -21,13 +23,22 @@ class StaticSiteContext(val root: File, sourceSets: Set[SourceSetWrapper]):
2123 def indexPage (): Option [StaticPageNode ] =
2224 val files = List (new File (root, " index.html" ), new File (root, " index.md" )).filter { _.exists() }
2325 if (files.size > 1 ) println(s " ERROR: Multiple root index pages found: ${files.map(_.getAbsolutePath)}" ) // TODO (#14): provide proper error handling
24- loadFiles( files) .headOption
26+ files.flatMap(loadTemplate(_, isBlog = false )) .headOption.map(templateToPage)
2527
2628 lazy val layouts : Map [String , TemplateFile ] =
2729 val layoutRoot = new File (root, " _layouts" )
2830 val dirs : Array [File ] = Option (layoutRoot.listFiles()).getOrElse(Array ())
2931 dirs.map { it => loadTemplateFile(it) }.map { it => it.name() -> it }.toMap
3032
33+ lazy val sideBarConfig =
34+ val sidebarFile = root.toPath.resolve(" sidebar.yml" )
35+ if (! Files .exists(sidebarFile)) None
36+ else Some (Sidebar .load(Files .readAllLines(sidebarFile).asScala.mkString(" \n " )))
37+
38+ lazy val templates : Seq [LoadedTemplate ] = sideBarConfig.fold(loadAllFiles())(_.map(loadSidebarContent))
39+
40+ lazy val pages = templates.map(templateToPage)
41+
3142 private def isValidTemplate (file : File ): Boolean =
3243 (file.isDirectory && ! file.getName.startsWith(" _" )) ||
3344 file.getName.endsWith(" .md" ) ||
@@ -38,7 +49,7 @@ class StaticSiteContext(val root: File, sourceSets: Set[SourceSetWrapper]):
3849 if (! isValidTemplate(from)) None else
3950 try
4051 val topLevelFiles = if isBlog then Seq (from, new File (from, " _posts" )) else Seq (from)
41- val allFiles = topLevelFiles.filter(_.isDirectory).flatMap(_.listFiles())
52+ val allFiles = topLevelFiles.filter(_.isDirectory).flatMap(_.listFiles())
4253 val (indexes, children) = allFiles.flatMap(loadTemplate(_)).partition(_.templateFile.isIndexPage())
4354 if (indexes.size > 1 )
4455 println(s " ERROR: Multiple index pages for $from found in ${indexes.map(_.file)}" ) // TODO (#14): provide proper error handling
@@ -68,36 +79,38 @@ class StaticSiteContext(val root: File, sourceSets: Set[SourceSetWrapper]):
6879 new PropertyContainer (JMap ())
6980 )
7081
71- def loadAllFiles () =
82+ private def loadSidebarContent (entry : Sidebar ): LoadedTemplate = entry match
83+ case Sidebar .Page (title, url) =>
84+ val isBlog = title == " Blog"
85+ val path = if isBlog then " blog" else url.stripSuffix(" .html" ) + " .md"
86+ val file = root.toPath.resolve(path) // Add support for.html files!
87+ val LoadedTemplate (template, children, tFile) = loadTemplate(file.toFile, isBlog).get // Add proper logging if file does not exisits
88+ LoadedTemplate (template.copy(settings = template.settings + (" title" -> List (title))), children, tFile)
89+ case Sidebar .Category (title, nested) =>
90+ val fakeFile = new File (root, title)
91+ LoadedTemplate (emptyTemplate(fakeFile), nested.map(loadSidebarContent), fakeFile)
92+
93+ private def loadAllFiles () =
7294 def dir (name : String )= List (new File (root, name)).filter(_.isDirectory)
73- loadFiles(dir(" docs" ).flatMap(_.listFiles())) ++ loadFiles(dir(" blog" ), isBlog = true )
74-
75- def loadFiles (files : List [File ], isBlog : Boolean = false ): List [StaticPageNode ] =
76- val all = files.flatMap(loadTemplate(_, isBlog))
77- def flatten (it : LoadedTemplate ): List [String ] =
78- List (it.relativePath(root)) ++ it.children.flatMap(flatten)
95+ dir(" docs" ).flatMap(_.listFiles()).flatMap(loadTemplate(_, isBlog = false ))
96+ ++ dir(" blog" ).flatMap(loadTemplate(_, isBlog = true ))
7997
98+ def templateToPage (myTemplate : LoadedTemplate ): StaticPageNode =
8099 def pathToDRI (path : String ) = mkDRI(s " _. $path" )
81-
82- val driMap = all.flatMap(flatten).map(it => it -> pathToDRI(it)).toMap
83-
84- def templateToPage (myTemplate : LoadedTemplate ): StaticPageNode =
85- val dri = pathToDRI(myTemplate.relativePath(root))
86- val content = new PartiallyRenderedContent (
87- myTemplate.templateFile,
88- this ,
89- JList (),
90- new DCI (Set (dri).asJava, ContentKind .Empty ),
91- sourceSets.toDisplay,
92- JSet ()
93- )
94- StaticPageNode (
95- myTemplate.templateFile,
96- myTemplate.templateFile.title(),
97- content,
98- JSet (dri),
99- JList (),
100- (myTemplate.children.map(templateToPage)).asJava
101- )
102-
103- all.map(templateToPage)
100+ val dri = pathToDRI(myTemplate.relativePath(root))
101+ val content = new PartiallyRenderedContent (
102+ myTemplate.templateFile,
103+ this ,
104+ JList (),
105+ new DCI (Set (dri).asJava, ContentKind .Empty ),
106+ sourceSets.toDisplay,
107+ JSet ()
108+ )
109+ StaticPageNode (
110+ myTemplate.templateFile,
111+ myTemplate.templateFile.title(),
112+ content,
113+ JSet (dri),
114+ JList (),
115+ (myTemplate.children.map(templateToPage)).asJava
116+ )
0 commit comments