8
8
9
9
namespace Documentation . Assembler . Building ;
10
10
11
- public class SitemapBuilder ( IReadOnlyCollection < INavigationItem > navigationItems , IFileSystem fileSystem , IDirectoryInfo outputFolder )
11
+ public class SitemapBuilder (
12
+ IReadOnlyCollection < INavigationItem > navigationItems ,
13
+ IFileSystem fileSystem ,
14
+ IDirectoryInfo outputFolder
15
+ )
12
16
{
13
17
private static readonly Uri BaseUri = new ( "https://www.elastic.co" ) ;
14
- private readonly IReadOnlyCollection < INavigationItem > _navigationItems = navigationItems ;
15
- private readonly IFileSystem _fileSystem = fileSystem ;
16
- private readonly IDirectoryInfo _outputFolder = outputFolder ;
17
18
18
19
public void Generate ( )
19
20
{
20
- var flattenedNavigationItems = GetNavigationItems ( _navigationItems ) ;
21
+ var flattenedNavigationItems = GetNavigationItems ( navigationItems ) ;
21
22
22
23
var doc = new XDocument ( )
23
24
{
24
25
Declaration = new XDeclaration ( "1.0" , "utf-8" , "yes" ) ,
25
26
} ;
26
27
28
+ var currentDate = DateTime . UtcNow . ToString ( "yyyy-MM-ddTHH:mm:sszzz" ) ;
27
29
var root = new XElement (
28
30
"urlset" ,
29
31
new XAttribute ( "xlmns" , "http://www.sitemaps.org/schemas/sitemap/0.9" ) ,
@@ -32,12 +34,15 @@ public void Generate()
32
34
. Select ( n => n . File . Url )
33
35
. Distinct ( )
34
36
. Select ( u => new Uri ( BaseUri , u ) )
35
- . Select ( u => new XElement ( "url" , new XElement ( "loc" , u ) ) )
37
+ . Select ( u => new XElement ( "url" , [
38
+ new XElement ( "loc" , u ) ,
39
+ new XElement ( "lastmod" , currentDate )
40
+ ] ) )
36
41
) ;
37
42
38
43
doc . Add ( root ) ;
39
44
40
- using var fileStream = _fileSystem . File . Create ( Path . Combine ( _outputFolder . ToString ( ) ?? string . Empty , "docs" , "sitemap.xml" ) ) ;
45
+ using var fileStream = fileSystem . File . Create ( Path . Combine ( outputFolder . ToString ( ) ?? string . Empty , "docs" , "sitemap.xml" ) ) ;
41
46
doc . Save ( fileStream ) ;
42
47
}
43
48
@@ -54,6 +59,9 @@ private static IReadOnlyCollection<INavigationItem> GetNavigationItems(IReadOnly
54
59
case GroupNavigationItem group :
55
60
result . AddRange ( GetNavigationItems ( group . Group . NavigationItems ) ) ;
56
61
break ;
62
+ case DocumentationGroup group :
63
+ result . AddRange ( GetNavigationItems ( group . NavigationItems ) ) ;
64
+ break ;
57
65
}
58
66
}
59
67
return result ;
0 commit comments