Basic setup

This commit is contained in:
Stefan Imhoff
2021-04-28 18:07:37 +02:00
commit 6bdc7366b7
36 changed files with 22222 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js').catch((registrationError) => {
console.error('SW registration failed: ', registrationError);
});
});

View File

@@ -0,0 +1,42 @@
(function () {
const root = document.getElementsByTagName('html')[0];
function setTheme(newTheme) {
window.__theme = newTheme;
preferredTheme = newTheme;
const currentTheme = newTheme === 'light' ? 'dark' : 'light';
root.classList.add(newTheme);
root.classList.remove(currentTheme);
}
let preferredTheme;
try {
preferredTheme = localStorage.getItem('theme');
} catch (err) {
console.error(err);
}
window.__setPreferredTheme = function (newTheme) {
setTheme(newTheme);
try {
localStorage.setItem('theme', newTheme);
} catch (err) {
console.error(err);
}
};
window.__toggleTheme = function () {
const currentTheme = window.__theme;
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
window.__setPreferredTheme(newTheme);
};
const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');
darkQuery.addEventListener('change', function (e) {
window.__setPreferredTheme(e.matches ? 'dark' : 'light');
});
setTheme(preferredTheme || (darkQuery.matches ? 'dark' : 'light'));
})();

View File

@@ -0,0 +1 @@
console.log('Hello, world');

View File

View File

9
src/data/site.js Normal file
View File

@@ -0,0 +1,9 @@
module.exports = {
isProduction: process.env.ELEVENTY_ENV === 'production',
buildTime: new Date(),
title: '',
description: '',
url: 'https://www.kogakure.de',
author: 'Stefan Imhoff',
twitter: '@kogakure',
};

View File

@@ -0,0 +1,4 @@
<link rel="icon" href="/favicon.ico" />
<link rel="icon" href="{{ site.faviconPath }}favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="{{ site.faviconPath }}apple-touch-icon.png" />
<link rel="manifest" href="/manifest.webmanifest" />

1
src/includes/feeds.njk Normal file
View File

@@ -0,0 +1 @@
<link rel="alternate" type="application/rss+xml" title="" href="{{ site.url }}/index.xml" />

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="0" height="0">
{# {% include "icons.svg" %} #}
</svg>

After

Width:  |  Height:  |  Size: 123 B

View File

@@ -0,0 +1,45 @@
{%- set ogTitle -%}
{%- if page.url === "/" -%}
{{ site.author }} · {{ site.description }}
{%- else -%}
{{ title }} · {{ site.author }}
{%- endif -%}
{%- endset -%}
{%- set ogDescription -%}
{%- if page.url === "/" -%}
{{ site.tagline }}
{%- else -%}
{{ description or title }}
{%- endif -%}
{%- endset -%}
{%- set ogImage -%}
{%- if og -%}
{{ site.url }}/assets/images/branding/og/{{ og }}
{%- else -%}
{{ site.url }}/assets/images/branding/og/banner.png
{%- endif -%}
{%- endset -%}
<!-- Meta -->
<meta name="author" content="{{ site.author }}" />
<meta name="description" content="{{ ogDescription }}" />
<meta name="theme-color" content="#e7e6e4" />
<!-- Open graph -->
<meta property="og:title" content="{{ ogTitle }}" />
<meta property="og:url" content="{{ site.url }}{{ page.url }}" />
<meta property="og:description" content="{{ ogDescription }}" />
<meta property="og:type" content="article" />
<meta property="og:image" content="{{ ogImage }}"/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="675" />
<!-- Twitter -->
<meta name="twitter:title" content="{{ ogTitle }}" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="{{ site.twitter }}" />
<meta name="twitter:description" content="{{ ogDescription }}" />
<meta name="twitter:image" content="{{ ogImage }}" />
<meta name="twitter:creator" content="{{ site.twitter }}" />

3
src/includes/preload.njk Normal file
View File

@@ -0,0 +1,3 @@
<link rel="preload" href="{{ '/assets/fonts/xyz1.woff2' | url }}" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="{{ '/assets/fonts/xyz2.woff2' | url }}" as="font" type="font/woff2" crossorigin />

5
src/includes/robots.njk Normal file
View File

@@ -0,0 +1,5 @@
{% if robots %}
<meta name="robots" content="{{ robots }}" />
{% else %}
<meta name="robots" content="all" />
{% endif %}

7
src/includes/scripts.njk Normal file
View File

@@ -0,0 +1,7 @@
{% set js %}
{% include "../assets/scripts/embedded/theme-switcher.js" %}
{% if site.isProduction %}
{% include "../assets/scripts/embedded/register-serviceworker.js" %}
{% endif %}
{% endset %}
<script>{{ js | jsmin | safe }}</script>

28
src/includes/styles.njk Normal file
View File

@@ -0,0 +1,28 @@
{% if site.isProduction %}
{% set criticalCSS %}
{% include "critical/base.css" %}
{% if css %}
{% include "critical/" + css %}
{% endif %}
{% endset %}
<style>
{{ criticalCSS | safe }}
</style>
{% else %}
<link rel="stylesheet" href="{{ '/assets/styles/base.css' | url }}" />
{% if css %}
<link rel="stylesheet" href="{{ '/assets/styles/' + css | url }}" />
{% endif %}
{% endif %}
<link rel="stylesheet" href="{{ '/assets/styles/main.css' | url }}" media="print" onload="this.media='all'" />
<link rel="stylesheet" href="{{ '/assets/styles/print.css' | url }}" media="print" />
<noscript>
<link rel="stylesheet" href="{{ '/assets/styles/main.css' | url }}" />
</noscript>

35
src/layouts/base.njk Normal file
View File

@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
{%- if page.url === "/" -%}
{{ site.author }} · {{ site.description }}
{%- else -%}
{{ title }} · {{ site.author }}
{%- endif -%}
</title>
<link rel="canonical" href="{{ site.url }}{{ page.url }}" />
<script type="module">
document.documentElement.classList.remove('no-js');
document.documentElement.classList.add('js');
</script>
{% include "scripts.njk" %}
{% include "styles.njk" %}
{% include "favicons.njk" %}
{% include "meta-tags.njk" %}
{% include "preload.njk" %}
{% include "robots.njk" %}
{% include "feeds.njk" %}
</head>
<body {% if bodyClass %}class="{{ bodyClass }}"{% endif %}>
{% include "icon-sprites.njk" %}
{{ content | safe }}
<script src="/assets/scripts/main.js" async></script>
</body>
</html>

7
src/pages/homepage.njk Normal file
View File

@@ -0,0 +1,7 @@
---
layout: base
title: Home
permalink: /
---
Hello, world!

1
src/utils/collections.js Normal file
View File

@@ -0,0 +1 @@
module.exports = {};

10
src/utils/filters.js Normal file
View File

@@ -0,0 +1,10 @@
const moment = require('moment');
module.exports = {
dateToFormat: function (date, format = 'MMMM Do, YYYY') {
return moment(date).format(format);
},
dateToISO: function (date) {
return moment(date).format();
},
};

15
src/utils/minify-html.js Normal file
View File

@@ -0,0 +1,15 @@
const htmlmin = require('html-minifier');
module.exports = function (content, outputPath) {
if (outputPath.endsWith('.html')) {
let minified = htmlmin.minify(content, {
useShortDoctype: true,
removeComments: true,
collapseWhitespace: true,
});
return minified;
}
return content;
};

12
src/utils/minify-js.js Normal file
View File

@@ -0,0 +1,12 @@
const UglifyJS = require('uglify-js');
module.exports = function (code) {
let minified = UglifyJS.minify(code);
if (minified.error) {
console.log('UglifyJS error: ', minified.error);
return code;
}
return minified.code;
};

10
src/utils/shortcodes.js Normal file
View File

@@ -0,0 +1,10 @@
const outdent = require('outdent')({ newline: ' ' });
module.exports = {
test: function () {
const html = outdent`
<div>Hello, World</div>`;
return html;
},
};