This repository has been archived by the owner on Jun 13, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 198
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(core): support sitemap generation
- Loading branch information
1 parent
ff37115
commit 965f496
Showing
7 changed files
with
248 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<xsl:stylesheet | ||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | ||
xmlns:html="http://www.w3.org/TR/REC-html40" | ||
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" | ||
xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9" | ||
version="2.0"> | ||
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" /> | ||
<xsl:template match="/"> | ||
<html xmlns="http://www.w3.org/1999/xhtml"> | ||
<head> | ||
<title>XML Sitemap</title> | ||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
<style type="text/css"> | ||
body { | ||
font-family: sans-serif; | ||
font-size: 16px; | ||
color: #242628; | ||
} | ||
a { | ||
color: #000; | ||
text-decoration: none; | ||
} | ||
a:hover { | ||
text-decoration: underline; | ||
} | ||
table { | ||
border: none; | ||
border-collapse: collapse; | ||
width: 100% | ||
} | ||
th { | ||
text-align: left; | ||
padding-right: 30px; | ||
font-size: 11px; | ||
} | ||
thead th { | ||
border-bottom: 1px solid #7d878a; | ||
cursor: pointer; | ||
} | ||
td { | ||
font-size:11px; | ||
padding: 5px; | ||
} | ||
tr:nth-child(odd) td { | ||
background-color: rgba(0,0,0,0.04); | ||
} | ||
tr:hover td { | ||
background-color: #e2edf2; | ||
} | ||
|
||
#content { | ||
margin: 0 auto; | ||
padding: 2% 5%; | ||
max-width: 800px; | ||
} | ||
|
||
.desc { | ||
margin: 18px 3px; | ||
line-height: 1.2em; | ||
} | ||
.desc a { | ||
color: #5ba4e5; | ||
} | ||
</style> | ||
</head> | ||
<body> | ||
<div id="content"> | ||
<h1>XML Sitemap</h1> | ||
<xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) > 0"> | ||
<table id="sitemap" cellpadding="3"> | ||
<thead> | ||
<tr> | ||
<th width="75%">Sitemap</th> | ||
<th width="25%">Last Modified</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap"> | ||
<xsl:variable name="sitemapURL"> | ||
<xsl:value-of select="sitemap:loc" /> | ||
</xsl:variable> | ||
<tr> | ||
<td> | ||
<a href="{$sitemapURL}"> | ||
<xsl:value-of select="sitemap:loc" /> | ||
</a> | ||
</td> | ||
<td> | ||
<xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))" /> | ||
</td> | ||
</tr> | ||
</xsl:for-each> | ||
</tbody> | ||
</table> | ||
</xsl:if> | ||
<xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) < 1"> | ||
<p class="desc"> | ||
<a href="/sitemaps.xml" class="back-link">← Back to index</a> | ||
</p> | ||
<table id="sitemap" cellpadding="3"> | ||
<thead> | ||
<tr> | ||
<th width="70%"> | ||
URL ( | ||
<xsl:value-of select="count(sitemap:urlset/sitemap:url)" /> | ||
total) | ||
</th> | ||
<th title="Priority" width="5%">Prio</th> | ||
<th title="Change Frequency" width="10%">Ch. Freq.</th> | ||
<th title="Last Modification Time" width="15%">Last Modified</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'" /> | ||
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> | ||
<xsl:for-each select="sitemap:urlset/sitemap:url"> | ||
<tr> | ||
<td> | ||
<xsl:variable name="itemURL"> | ||
<xsl:value-of select="sitemap:loc" /> | ||
</xsl:variable> | ||
<a href="{$itemURL}"> | ||
<xsl:value-of select="sitemap:loc" /> | ||
</a> | ||
</td> | ||
<td> | ||
<xsl:value-of select="concat(sitemap:priority*100,'%')" /> | ||
</td> | ||
<td> | ||
<xsl:value-of select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))" /> | ||
</td> | ||
<td> | ||
<xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))" /> | ||
</td> | ||
</tr> | ||
</xsl:for-each> | ||
</tbody> | ||
</table> | ||
<p class="desc"> | ||
<a href="/sitemaps.xml" class="back-link">← Back to index</a> | ||
</p> | ||
</xsl:if> | ||
</div> | ||
</body> | ||
</html> | ||
</xsl:template> | ||
</xsl:stylesheet> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
const sm = require('sitemap') | ||
const createDatabase = require('./database') | ||
|
||
module.exports = async function sitemap (siteConfig) { | ||
const database = await createDatabase(siteConfig) | ||
|
||
const sitemap = sm.createSitemap({ | ||
hostname: siteConfig.baseUrl, | ||
cacheTime: 86400, // 1 day | ||
xslUrl: '/sitemap.xsl' | ||
}) | ||
|
||
siteConfig.locales.forEach(locale => { | ||
const prefix = locale.code === siteConfig.defaultLocale ? '' : `/${locale.code}` | ||
const fixedPages = ['/', '/history'] | ||
const base = { | ||
changefreq: 'daily', | ||
priority: 0.8, | ||
lastmodISO: new Date().toISOString() | ||
} | ||
|
||
// Fixed Pages | ||
fixedPages.forEach(route => { | ||
sitemap.add({ | ||
...base, | ||
url: `${siteConfig.baseUrl}${prefix}${route}` | ||
}) | ||
}) | ||
|
||
// History Pages | ||
const historyPage1 = database.incidentsHistory(locale.code) | ||
const totalPages = historyPage1.total_pages | ||
|
||
for (let page = 2; page <= totalPages; page++) { | ||
sitemap.add({ | ||
...base, | ||
url: `${siteConfig.baseUrl}${prefix}/history/${page}` | ||
}) | ||
} | ||
|
||
// Incidents Pages | ||
const { incidents } = database.incidents(locale.code, 1, -1) | ||
|
||
incidents.forEach(incident => { | ||
sitemap.add({ | ||
...base, | ||
url: `${siteConfig.baseUrl}${prefix}/incidents/${incident.id}`, | ||
changefreq: 'weekly', | ||
priority: 0.7, | ||
lastmodISO: new Date(incident.modified).toISOString() | ||
}) | ||
}) | ||
}) | ||
|
||
return sitemap.toString() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
const createSitemap = require('../../lib/content/sitemap') | ||
|
||
module.exports = async (req, res, next) => { | ||
const siteConfig = req.app.get('siteConfig') | ||
const sitemap = await createSitemap(siteConfig) | ||
|
||
res.header('Content-Type', 'application/xml') | ||
res.send(sitemap.toString()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters