Skip to content

Commit

Permalink
Sitemap generator has added.
Browse files Browse the repository at this point in the history
- Routes has added.
- Constants has added.
- NextJS Config: exportPathMap by Routes.
  • Loading branch information
furcan committed Jul 22, 2021
1 parent 21aca03 commit b03b585
Show file tree
Hide file tree
Showing 17 changed files with 557 additions and 26 deletions.
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,13 @@

# production
/build
/dist
/.build
/dist
/.dist

# development
/dev
/.dev

# misc
.DS_Store
Expand Down
33 changes: 21 additions & 12 deletions next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@
// Dependencies
const path = require('path');
const StylelintPlugin = require('stylelint-webpack-plugin');
const package = require('./package.json');
const { Constants } = require('./.dev/src/constants/Constants');
const { Routes } = require('./.dev/src/routes/Routes');

// Contstants: begin
const appName = 'Notiflix';
const appVersion = (JSON.stringify((package || {}).version) || '').replace(/"/gm, '') || 'v1.0.0';
// Constants: begin
const isDev = process.env.NODE_ENV === 'development';
const isProd = process.env.NODE_ENV === 'production';
const publicUrl = isProd ? (JSON.stringify((package || {}).homepage) || '').replace(/"/gm, '') : '';
// Contstants: end
const appUrl = isProd ? Constants.appUrl : '';
const appName = Constants.appName;
const appVersion = Constants.appVersion;
// Constants: end

// Next Config: begin
const nextConfig = {
Expand All @@ -40,13 +41,13 @@ const nextConfig = {
env: {
isDev,
isProd,
publicUrl,
appUrl,
appName,
appVersion,
},

// assets prefix
assetPrefix: publicUrl,
assetPrefix: appUrl,

// extensions
pageExtensions: ['jsx', 'js', 'ts', 'tsx'],
Expand Down Expand Up @@ -75,15 +76,23 @@ const nextConfig = {
]
},

// TODO:
exportPathMap: async (
defaultPathMap,
{ dev, dir, outDir, distDir, buildId }
) => {
return {

let defaultPaths = {
'/': { page: '/home' },
'/about': { page: '/about' },
}
};

Routes?.filter(route => route.isActive && route.addToNextJSConfig)?.map(route => {
const routePath = {
[route.pathAs]: { page: route.pathPage },
};
defaultPaths = { ...defaultPaths, ...routePath };
});

return defaultPaths;
},

// Build ID
Expand Down
13 changes: 8 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
{
"name": "notiflix-documentation",
"homepage": "https://notiflix.github.io",
"version": "3.0.1-beta.01",
"version": "1.0.0-beta.01",
"private": true,
"scripts": {
"sitemap:dev": "eslint src/constants/Constants.ts src/routes/Routes.ts src/helpers/Sitemap.ts",
"sitemap": "yarn sitemap:dev && tsc --resolveJsonModule --outDir .dev src/helpers/Sitemap.ts && node .dev/src/helpers/Sitemap.js",
"lint": "next lint",
"dev": "next lint && next dev",
"build": "next build",
"start": "next start",
"deploy": "next build && next export -o dist"
"dev": "yarn sitemap && next lint && next dev",
"build": "yarn sitemap && next build",
"start": "yarn sitemap && next start",
"deploy": "yarn build && next export -o dist"
},
"dependencies": {
"next": "11.0.1",
Expand All @@ -27,6 +29,7 @@
"stylelint-config-standard": "^22.0.0",
"stylelint-scss": "^3.19.0",
"stylelint-webpack-plugin": "^2.2.2",
"parse-md": "^2.0.4",
"typescript": "4.3.5"
},
"browserslist": {
Expand Down
27 changes: 27 additions & 0 deletions public/sitemap.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://notiflix.github.io/sitemap.xsl"?>
<urlset xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<url>
<loc>https://notiflix.github.io</loc>
<lastmod>2021-07-22</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<image:image>
<image:loc>https://notiflix.github.io/webapp/notiflix-og.jpg</image:loc>
<image:caption>Notiflix</image:caption>
</image:image>
</url>

<url>
<loc>https://notiflix.github.io/about</loc>
<lastmod>2021-07-22</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<image:image>
<image:loc>https://notiflix.github.io/webapp/notiflix-og.jpg</image:loc>
<image:caption>Notiflix</image:caption>
</image:image>
</url>

</urlset>
212 changes: 212 additions & 0 deletions public/sitemap.xsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="fileType">
<xsl:choose>
<xsl:when test="//sitemap:url">Sitemap</xsl:when>
<xsl:otherwise>SitemapIndex</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
<xsl:choose>
<xsl:when test="$fileType='Sitemap'">Sitemap - Notiflix</xsl:when>
<xsl:otherwise>Sitemap Index - Notiflix</xsl:otherwise>
</xsl:choose>
</title>
<link rel="shortcut icon" href="/favicon.png" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body {
margin: 0;
font-family: sans-serif;
font-size: 15px;
color: #1e1e1e;
}
.notiflix-sitemap-header {
background: #32c682;
padding: 10px 20px;
}
.notiflix-sitemap-header h1 {
color: #1e1e1e;
font-size: 20px;
line-height: 24px;
margin: 10px 0;
}
.notiflix-sitemap-header p,
.notiflix-sitemap-header a {
transition: all 0.25s ease-in-out;
color: #1e1e1e;
margin: 8px 0;
font-size: 13px;
line-height: 16px;
}
.notiflix-sitemap-header a:hover {
color: #1e1e1e;
}
table {
margin: 20px 30px;
border: none;
font-size: 15px;
width: calc(100% - 60px);
border-collapse: collapse;
}
th {
border-bottom: 1px solid #ccc;
text-align: left;
padding: 10px 5px;
font-size: 14px;
}
td {
font-size: 14px;
padding: 10px 5px;
border-left: 3px solid #fff;
}
tr.second {
background: #f7f7f7;
}
table td a {
position: relative;
transition: all .25s ease-in-out;
color: #1e1e1e;
text-decoration: none;
display: inline-block;
}
table td a:before {
content: "";
transition: inherit;
position: absolute;
left: 0;
bottom: -4px;
width: 0;
border-bottom: 2px solid #32c682;
}
table td a:hover {
color: #1e1e1e;
}
table td a:hover:before {
width: 100%;
}
table td a img {
max-height: 30px;
margin: 6px 3px;
}
</style>
</head>
<body>
<div class="notiflix-sitemap-header">
<h1>XML Sitemap</h1>
<p>Generated by <a target="_blank" href="https://notiflix.github.io">Notiflix</a></p>
<p>You can find more information about XML sitemaps at <a href="http://sitemaps.org">sitemaps.org</a></p>
<p>
<xsl:choose>
<xsl:when test="$fileType='Sitemap'">This sitemap contains <xsl:value-of select="count(sitemap:urlset/sitemap:url)"></xsl:value-of> URLs.</xsl:when>
<xsl:otherwise>This Index contains <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"></xsl:value-of> sitemaps.</xsl:otherwise>
</xsl:choose>
</p>
</div>
<xsl:choose>
<xsl:when test="$fileType='Sitemap'">
<xsl:call-template name="sitemapTable"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="siteindexTable"/>
</xsl:otherwise>
</xsl:choose>
</body>
</html>
</xsl:template>
<xsl:template name="siteindexTable">
<table cellpadding="3">
<thead>
<tr>
<th width="50%">URL</th>
<th>LastChange</th>
</tr>
</thead>
<tbody>
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
<tr>
<xsl:if test="position() mod 2 != 1">
<xsl:attribute name="class">second</xsl:attribute>
</xsl:if>
<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(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
<xsl:template name="sitemapTable">
<table cellpadding="3">
<thead>
<tr>
<th width="50%">URL</th>
<th>Images</th>
<th>Priority</th>
<th>Change Frequency</th>
<th>Last Change</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>
<xsl:if test="position() mod 2 != 1">
<xsl:attribute name="class">second</xsl:attribute>
</xsl:if>
<td>
<xsl:variable name="itemURL">
<xsl:value-of select="sitemap:loc"/>
</xsl:variable>
<a href="{$itemURL}">
<xsl:value-of select="sitemap:loc"/>
</a>
<xsl:for-each select="video:video">
<xsl:variable name="thumbURL">
<xsl:value-of select="video:thumbnail_loc"/>
</xsl:variable>
<xsl:variable name="playURL">
<xsl:value-of select="video:player_loc"/>
</xsl:variable>
<xsl:if test="$thumbURL != ''">
<a href="{$playURL}">
<img src="{$thumbURL}" style="max-width:60px;float:right;"/>
</a>
</xsl:if>
</xsl:for-each>
</td>
<td>
<xsl:value-of select="count(image:image)"/>
</td>
<td>
<xsl:if test="string(number(sitemap:priority))!='NaN'">
<xsl:value-of select="concat(sitemap:priority*100,'%')"/>
</xsl:if>
</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>
</xsl:template>
</xsl:stylesheet>
1 change: 1 addition & 0 deletions src/_database/database.i.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ interface IDatabaseSocialMedia {
}

interface IDatabaseMeta {
lastModifiedDate: string;
title: string;
description: string;
robots?: string | null;
Expand Down
1 change: 1 addition & 0 deletions src/_database/pages/about.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
_dbMeta:
lastModifiedDate: "2021-07-22" # YYYY-MM-DD
title: About Us | Notiflix
description: About Us Description
robots: noindex, nofollow, noodp, noydir
Expand Down
1 change: 1 addition & 0 deletions src/_database/pages/home.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
_dbMeta:
lastModifiedDate: "2021-07-22" # YYYY-MM-DD
title: Notiflix | a JavaScript library for client-side non-blocking notifications.
description: Notiflix is a pure JavaScript library for client-side non-blocking notifications, popup boxes, loading indicators, and more to that makes your web projects much better.
robots: noindex, nofollow, noodp, noydir
Expand Down
6 changes: 3 additions & 3 deletions src/components/meta/MetaTags.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ function MetaTags({ meta }: IMetaTags): JSX.Element {
const router = useRouter();

const appName = process.env.appName;
const publicUrl = process.env.publicUrl;
const canonicalUrl = `${publicUrl || ''}${(router?.asPath?.length > 1 ? router.asPath : '')}` || '';
const appUrl = process.env.appUrl;
const canonicalUrl = `${appUrl || ''}${(router?.asPath?.length > 1 ? router.asPath : '')}` || '';
const yearInit = _dbSettings.metaYearInit;
const yearCurrent = new Date().getFullYear() || '';

Expand All @@ -39,7 +39,7 @@ function MetaTags({ meta }: IMetaTags): JSX.Element {
<meta name="robots" content={metaData.robots || metaBase.robots} />
<meta name="googlebot" content={metaData.robots || metaBase.robots} />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<link rel="shortcut icon" href={`${publicUrl}${'/favicon.png'}`} />
<link rel="shortcut icon" href={`${appUrl}${'/favicon.png'}`} />

<link rel="canonical" href={canonicalUrl} />
<link rel="shortlink" href={canonicalUrl} />
Expand Down
Loading

0 comments on commit b03b585

Please sign in to comment.