Merge pull request #4 from mattdecamp/v2

Eleventonia version 2 merge to main
This commit is contained in:
Matt DeCamp 2023-06-08 15:24:26 -04:00 committed by GitHub
commit 0c23be1f8b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 2303 additions and 9208 deletions

View file

@ -1,9 +1,17 @@
// const { DateTime } = require("luxon");
const pluginRss = require("@11ty/eleventy-plugin-rss");
const svgSprite = require("eleventy-plugin-svg-sprite");
const dateFilter = require('./src/filters/dateFilter.js');
const dateFilter = require("./src/filters/dateFilter.js");
const cleanCSS = require("clean-css");
module.exports = function (config) {
config.setServerOptions({
// Whether the live reload snippet is used
liveReload: true,
port: 3456,
watch: ["dist/**/*.css"],
showAllHosts: true,
});
// PASSTHROUGHS
config.addPassthroughCopy("src/assets/images/");
@ -12,7 +20,12 @@ module.exports = function (config) {
config.addLayoutAlias("post", "layouts/post.njk");
// FILTERS //
config.addFilter('dateFilter', dateFilter);
// date filter
config.addFilter("dateFilter", dateFilter);
// clean and inline CSS
config.addFilter("cssmin", function (code) {
return new cleanCSS({}).minify(code).styles;
});
// TRANSFORMS //
// minify HTML

1
.gitignore vendored
View file

@ -2,3 +2,4 @@ node_modules
dist
.DS_Store
.prettierrc
*.css.map

View file

@ -7,7 +7,8 @@ A mildly opinionated [Eleventy](https://11ty.dev) starter project.
## Features
* HTML Minification
* CSS Pipeline (Sass > CleanCSS)
* CSS Pipline (SCSS > CleanCSS > Inline)
* Eleventy Dev Server
* Eleventy SVG Icon Sprites
* Eleventy RSS
* Date Formatting Filter
@ -24,20 +25,39 @@ npm install
To run the development environment:
```
npm run eleventy:dev
npm run dev
```
To build for production:
```
npm run eleventy:prod
npm run build
```
For additional eleventy commands, visit the [Eleventy command line usage page](https://www.11ty.dev/docs/usage/).
## Credits and Thanks To
## Editing Styles
Edit and amend as needed. The main Sass files are under the `/assets` folder.
### Sass Folder Structure
```
src
/assets
/styles
/scss
/base
/components
/utility
main.scss
```
The development environment watches for changes to the Sass files and pushes changes to `main.css` in the `/includes` folder. Eleventy then pushes the styles inline in the `<head>` of the base page template.
## Prodution Build
At build time, all the html files are minified.
## Thanks To
* [Zach Leatherman](https://11ty.dev)
* [Max Böck](https://github.com/maxboeck/eleventastic)
* [Andy Bell](https://github.com/hankchizljaw/hylia)
* [Max Böck](https://github.com/maxboeck/eleventastic)
* [Phil Hawksworth](https://github.com/philhawksworth/eleventyone)
* [Zach Leatherman](https://11ty.dev)
* [Thomas Semmler](https://helloyes.dev)

10708
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,21 +1,31 @@
{
"name": "eleventonia",
"version": "1.0.0",
"version": "2.0.0",
"description": "A mildly opinionated Eleventy starter kit",
"scripts": {
"eleventy:dev": "cross-env ELEVENTY_ENV=development npx @11ty/eleventy --serve",
"eleventy:prod": "cross-env ELEVENTY_ENV=production npx @11ty/eleventy --serve"
"eleventy:serve": "cross-env ELEVENTY_ENV=development eleventy --serve --quiet",
"eleventy:build": "cross-env ELEVENTY_ENV=production eleventy",
"sass:test": "sass src/includes/styles/scss:src/includes/styles",
"sass:watch": "sass src/assets/styles/scss:src/includes/styles --watch --color",
"sass:build": "sass src/assets/styles/scss:src/assets/styles --no-source-map --style=compressed",
"dev": "run-p -l sass:build sass:watch eleventy:serve",
"build": "run-s -l eleventy:build sass:build"
},
"author": {
"name": "Matt DeCamp",
"email": "matt@mattdecamp.com",
"url": "https://mattdecamp.com"
},
"author": "Matt DeCamp",
"license": "MIT",
"dependencies": {
"@11ty/eleventy": "^0.12.1",
"@11ty/eleventy": "^2.0.0",
"@11ty/eleventy-plugin-rss": "^1.1.1",
"clean-css": "^5.1.5",
"cross-env": "^7.0.3",
"eleventy-plugin-svg-sprite": "^1.2.1",
"eleventy-plugin-svg-sprite": "^2.4.0",
"html-minifier": "^4.0.0",
"luxon": "^1.28.0",
"node-sass": "^6.0.1"
"luxon": "^3.3.0",
"npm-run-all": "^4.1.5",
"sass": "^1.62.1"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "",
"short_name": "",
"name": "Eleventonia",
"short_name": "Eleventonia",
"icons": [
{
"src": "/assets/images/android-chrome-192x192.png",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,5 @@
:root {
--test-var: #909090;
// COLORS
--background-color: #ffffff;
--background-color-secondary: #301e4e;

View file

@ -1,70 +0,0 @@
// Based on Max Bock's scripts on eleventastic https://github.com/maxboeck/eleventastic
// This runs the CSS file build
// Converts Sass and compiles all files defined in main file
const MAIN_FILE_NAME = "main.scss";
const path = require("path");
const sass = require("node-sass");
const CleanCSS = require("clean-css");
const isProd = process.env.ELEVENTY_ENV === "production";
module.exports = class {
async data() {
const entryPath = path.join(__dirname, `/${MAIN_FILE_NAME}`);
return {
permalink: "assets/styles/main.css",
eleventyExcludeFromCollection: true,
entryPath,
};
}
// Compile Sass to CSS
// Embed source map in dev
async compile(config) {
return new Promise((resolve, reject) => {
if (!isProd) {
config.sourceMap = true;
config.sourceMapEmbed = true;
config.outputStyle = "expanded";
}
return sass.render(config, (err, result) => {
if (err) {
return reject(err);
}
resolve(result.css.toString());
});
});
}
// Minify/Optimize with CleanCSS in Production
async minify(css) {
return new Promise((resolve, reject) => {
if (!isProd) {
resolve(css);
}
const minified = new CleanCSS().minify(css);
if (!minified.styles) {
return reject(minified.error);
}
resolve(minified.styles);
});
}
async render({ entryPath }) {
try {
const css = await this.compile({ file: entryPath });
const result = await this.minify(css);
return result;
} catch (err) {
// if things go wrong
if (isProd) {
// throw and abort in production
throw new Error(err);
} else {
// otherwise display the error overlay
console.error(err);
const msg = err.formatted || err.message;
return this.renderError(msg);
}
}
}
};

View file

@ -1,7 +0,0 @@
{
"title": "{{ site.name }}",
"description": "A Mildly Opinionated Eleventy Starter",
"url": "",
"lang": "en",
"locale": "en_us"
}

View file

@ -1,7 +1,8 @@
{
"name": "Eleventonia",
"description": "A mildly opinionated Eleventy starter",
"url": "",
"url": "https://eleventonia.mattdecamp.com",
"locale": "en_us",
"lang": "en",
"githubUrl": "https://github.com/mattdecamp/eleventonia",
"authorName": "Matt DeCamp",

View file

@ -5,7 +5,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>{{ title }} | {{ site.name }}</title>
{% include "partials/meta.njk" %}
<link rel="stylesheet" href="{{ '/assets/styles/main.css' | url }}">
{% set css %}
{% include "styles/main.css" | url %}
{% endset %}
<style>
{{ css | cssmin | safe }}
</style>
</head>
<body>
<div id="layout">

View file

@ -1,14 +1,13 @@
{%- set absolutePageUrl -%}{{ page.url | url | absoluteUrl(meta.url) }}{%- endset -%}
{# General #}
<meta name="description" content="{{ meta.description }}" />
<link rel="canonical" href="{{ absolutePageUrl }}" />
<meta name="description" content="{{ site.description }}" />
<link rel="canonical" href="{{ site.url }}" />
{# Open Graph #}
<meta property="og:type" content="website" />
<meta property="og:url" content="{{ absolutePageUrl }}" />
<meta property="og:locale" content="{{ meta.locale }}" />
<meta property="og:site_name" content="{{ meta.title }}" />
<meta property="og:title" content="{{ site.name }} | {{ title }}" />
<meta property="og:description" content="{{ meta.description }}" />
<meta property="og:url" content="{{ site.url }}" />
<meta property="og:locale" content="{{ site.locale }}" />
<meta property="og:site_name" content="{{ site.name }}" />
<meta property="og:title" content="{{ site.name }}" />
<meta property="og:description" content="{{ site.description }}" />
<meta property="og:image:alt" content="Page image for {{ site.name }}" />
<meta name="twitter:card" content="summary" />
{# Favicon #}
@ -22,4 +21,4 @@
<meta name="msapplication-config" content="/assets/images/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
{# RSS #}
<link type="application/atom+xml" rel="alternate" href="{{ meta.url }}/feed.xml" title="{{ meta.title }}">
<link type="application/atom+xml" rel="alternate" href="/feed.xml" title="{{ site.name }}">

View file

@ -0,0 +1,592 @@
@charset "UTF-8";
/*---------------
Main Style Sheet
----------------*/
:root {
--test-var: #909090;
--background-color: #ffffff;
--background-color-secondary: #301e4e;
--background-color-tertiary: #ff6e6c;
--primary: #1f1135;
--secondary: #ff6e6c;
--text-primary: #1f1135;
--text-secondary: #ffffff;
--text-tertiary: #301e4e;
--link-color: #301e4e;
--tag-color: #301e4e;
--button-color: #ff636c;
--ratio: 1.2;
--s-5: calc(var(--s-4) / var(--ratio));
--s-4: calc(var(--s-3) / var(--ratio));
--s-3: calc(var(--s-2) / var(--ratio));
--s-2: calc(var(--s-1) / var(--ratio));
--s-1: calc(var(--s0) / var(--ratio));
--s0: 1rem;
--s1: calc(var(--s0) * var(--ratio));
--s2: calc(var(--s1) * var(--ratio));
--s3: calc(var(--s2) * var(--ratio));
--s4: calc(var(--s3) * var(--ratio));
--s5: calc(var(--s4) * var(--ratio));
--max-width: 1000px;
}
/* Box sizing rules */
*,
*::before,
*::after {
box-sizing: border-box;
}
/* Remove default margin */
body,
h1,
h2,
h3,
h4,
p,
figure,
blockquote,
dl,
dd {
margin: 0;
}
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
ul[role=list],
ol[role=list] {
list-style: none;
}
/* Set core root defaults */
html {
scroll-behavior: smooth;
}
/* Set core body defaults */
body {
min-height: 100vh;
text-rendering: optimizeSpeed;
line-height: 1.5;
}
/* A elements that don't have a class get default styles */
a:not([class]) {
text-decoration-skip-ink: auto;
}
/* Make images easier to work with */
img,
picture {
max-width: 100%;
display: block;
}
/* Inherit fonts for inputs and buttons */
input,
button,
textarea,
select {
font: inherit;
}
/* Remove all animations and transitions for people that prefer not to see them */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type=button]::-moz-focus-inner,
[type=reset]::-moz-focus-inner,
[type=submit]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type=button]:-moz-focusring,
[type=reset]:-moz-focusring,
[type=submit]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type=checkbox],
[type=radio] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type=number]::-webkit-inner-spin-button,
[type=number]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type=search] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type=search]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}
#layout {
display: flex;
flex-direction: column;
min-height: 100vh;
overflow: hidden;
background: linear-gradient(310deg, var(--background-color-tertiary), var(--background-color-tertiary) 20%, var(--background-color) 20%);
}
#main-container {
width: 90%;
max-width: var(--max-width);
margin: 0 auto;
padding-bottom: var(--s1);
flex: 1 0 auto;
overflow: hidden;
}
#main-container main {
max-width: 65ch;
}
h1 {
font-size: clamp(var(--s3), 3vw, var(--s4));
margin: 0 0 var(--s0);
}
h2 {
font-size: clamp(var(--s2), 3vw, var(--s3));
}
h3 {
font-size: clamp(var(--s1), 3vw, var(--s2));
margin: 0 0 var(--s-1);
font-style: italic;
}
h4 {
margin: var(--s-2) 0;
font-size: clamp(var(--s-0), 3vw, var(--s1));
text-transform: uppercase;
}
p {
margin-bottom: var(--s1);
}
ul {
margin-top: var(--s0);
margin-bottom: var(--s0);
}
a {
color: var(--link-color);
}
* {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
}
h1, h2, h3, h4, h5, h6 {
font-family: "Bitter", "Bookman Old Style", serif;
}
header {
min-width: 100%;
}
#header--container {
width: 90%;
max-width: var(--max-width);
padding: var(--s1) 0;
margin: 0 auto;
display: flex;
flex-direction: column;
flex-wrap: wrap;
align-items: left;
color: var(--text-primary);
}
#header--title a {
font-size: clamp(var(--s3), 3vw, var(--s4));
font-weight: 200;
background: linear-gradient(to right, var(--primary), var(--primary) 63%, var(--secondary) 63%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-decoration: none;
}
@media screen and (min-width: 48rem) {
#header--container {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
}
footer {
width: 100%;
max-width: 100vw;
background: var(--background-color-secondary);
color: var(--text-secondary);
}
footer a {
color: var(--text-secondary);
text-decoration: none;
}
footer a:hover {
text-decoration: underline;
}
#footer--container {
width: 90%;
max-width: var(--max-width);
margin: 0 auto;
padding: var(--s2) 0;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
}
nav ul {
padding: 0;
display: block;
display: flex;
flex-direction: row;
flex-wrap: wrap;
list-style-type: none;
gap: var(--s0) var(--s2);
font-size: var(--s0);
}
nav ul li::before {
content: "";
}
nav ul li a {
color: var(--text-primary);
text-decoration: none;
}
nav ul li a:hover {
text-decoration: underline;
}
.nav--active {
text-decoration: underline;
}
@media screen and (min-width: 48rem) {
nav ul {
font-size: var(--s1);
}
}
#posts--list article {
margin-bottom: var(--s2);
}
.post--time {
font-size: clamp(var(--s-1), 3vw, var(--s0));
font-weight: 200;
}
.tags--container {
padding: var(--s-1) 0;
display: flex;
flex-wrap: wrap;
gap: var(--s0);
}
.tag a {
padding: var(--s-2) var(--s-1);
color: var(--text-secondary);
text-decoration: none;
background: var(--background-color-secondary);
}
.icon {
fill: var(--text-secondary);
width: var(--s2);
height: var(--s2);
}
/*# sourceMappingURL=main.css.map */

View file

@ -4,3 +4,6 @@ eleventyExcludeFromCollections: true
---
Sitemap: {{ site.url }}/sitemap.xml
User-agent: *
Disallow:

13
src/sitemap.njk Normal file
View file

@ -0,0 +1,13 @@
---
permalink: /sitemap.xml
eleventyExcludeFromCollections: true
---
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in collections.all %}
<url>
<loc>{{ site.url }}{{ page.url | url }}</loc>
<lastmod>{{ page.date.toISOString() }}</lastmod>
</url>
{% endfor %}
</urlset>