Numerous performance fixes.

- Refactored themes to always load with just a single file. This avoids
  a round trip on each request.
- Locally load "Fira Code" when available on the system, then try to
  load the woff2 file, then fall back to regular woff.
- Update markup to use relative urls where it is safe. RSS feeds still
  use absolute URLs.
- Only set og:image:(height/width) when using the standard color icon.
- Fixed styles on the pagination buttons.
This commit is contained in:
quest 2022-09-10 12:35:00 -10:00
parent e65726ee5a
commit 451e4da378
No known key found for this signature in database
GPG Key ID: E49B7E0000228DDD
32 changed files with 54 additions and 88 deletions

View File

@ -1,10 +1,4 @@
@import '../main.css'; @import '../style.css';
@import '../header.css';
@import '../logo.css';
@import '../pagination.css';
@import '../post.css';
@import '../syntax.css';
@import '../variables.css';
:root { :root {
--accent: #23B0FF; --accent: #23B0FF;

View File

@ -1,10 +1,4 @@
@import '../main.css'; @import '../style.css';
@import '../header.css';
@import '../logo.css';
@import '../pagination.css';
@import '../post.css';
@import '../syntax.css';
@import '../variables.css';
:root { :root {
--accent: #78E2A0; --accent: #78E2A0;

View File

@ -0,0 +1 @@
@import '../style.css';

View File

@ -1,10 +1,4 @@
@import '../main.css'; @import '../style.css';
@import '../header.css';
@import '../logo.css';
@import '../pagination.css';
@import '../post.css';
@import '../syntax.css';
@import '../variables.css';
:root { :root {
--accent: #EE72F1; --accent: #EE72F1;

View File

@ -1,10 +1,4 @@
@import '../main.css'; @import '../style.css';
@import '../header.css';
@import '../logo.css';
@import '../pagination.css';
@import '../post.css';
@import '../syntax.css';
@import '../variables.css';
:root { :root {
--accent: #FF6266; --accent: #FF6266;

View File

@ -1,17 +1,17 @@
@font-face { @font-face {
font-display: swap; font-display: swap;
font-family: 'Fira Code'; font-family: 'Fira Code';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url("../fonts/FiraCode-Regular.woff") format("woff"); src: local("Fira Code") url("/assets/fonts/FiraCode-Regular.woff2") format("woff2") url("/assets/fonts/FiraCode-Regular.woff") format("woff");
font-display: swap; font-display: swap;
} }
@font-face { @font-face {
font-display: swap; font-display: swap;
font-family: 'Fira Code'; font-family: 'Fira Code';
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
src: url("../fonts/FiraCode-Bold.woff") format("woff"); src: local("Fira Code") url("/assets/fonts/FiraCode-Bold.woff2") format("woff2") url("/assets/fonts/FiraCode-Bold.woff") format("woff");
font-display: swap; font-display: swap;
} }

Binary file not shown.

Binary file not shown.

View File

@ -3,7 +3,7 @@
<h1 class="post-title">404 — {{ $.Site.Params.missingContentMessage | default "Page not found..." }}</h1> <h1 class="post-title">404 — {{ $.Site.Params.missingContentMessage | default "Page not found..." }}</h1>
<div class="post-content"> <div class="post-content">
<a href="{{ "/" | absURL }}">{{ $.Site.Params.missingBackButtonLabel | default "Back to home page" }}&nbsp;</a> <a href="{{ "/" | relURL }}">{{ $.Site.Params.missingBackButtonLabel | default "Back to home page" }}&nbsp;</a>
</div> </div>
</div> </div>

View File

@ -17,7 +17,7 @@
{{ range $paginator.Pages }} {{ range $paginator.Pages }}
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"> <h1 class="post-title">
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a> <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
</h1> </h1>
<div class="post-meta"> <div class="post-meta">
<span class="post-date"> <span class="post-date">
@ -31,7 +31,7 @@
{{ if .Params.tags }} {{ if .Params.tags }}
<span class="post-tags"> <span class="post-tags">
{{ range .Params.tags }} {{ range .Params.tags }}
#<a href="{{ (urlize (printf "tags/%s/" . )) | absLangURL }}"> #<a href="{{ (urlize (printf "tags/%s/" . )) | relLangURL }}">
{{- . -}} {{- . -}}
</a>&nbsp; </a>&nbsp;
{{ end }} {{ end }}

View File

@ -8,7 +8,7 @@
{{ range .Paginator.Pages }} {{ range .Paginator.Pages }}
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"> <h1 class="post-title">
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a> <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
</h1> </h1>
<div class="post-meta"> <div class="post-meta">
<span class="post-date"> <span class="post-date">
@ -22,7 +22,7 @@
{{ if .Params.tags }} {{ if .Params.tags }}
<span class="post-tags"> <span class="post-tags">
{{ range .Params.tags }} {{ range .Params.tags }}
#<a href="{{ (urlize (printf "tags/%s/" . )) | absLangURL }}"> #<a href="{{ (urlize (printf "tags/%s/" . )) | relLangURL }}">
{{- . -}} {{- . -}}
</a>&nbsp; </a>&nbsp;
{{ end }} {{ end }}

View File

@ -1,7 +1,7 @@
{{ define "main" }} {{ define "main" }}
<div class="post"> <div class="post">
<h1 class="post-title"> <h1 class="post-title">
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a></h1> <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a></h1>
<div class="post-meta"> <div class="post-meta">
{{ if .Params.Date }} {{ if .Params.Date }}
<span class="post-date"> <span class="post-date">
@ -22,7 +22,7 @@
{{ if .Params.tags }} {{ if .Params.tags }}
<span class="post-tags"> <span class="post-tags">
{{ range .Params.tags }} {{ range .Params.tags }}
#<a href="{{ (urlize (printf "tags/%s/" .)) | absLangURL }}">{{ . }}</a>&nbsp; #<a href="{{ (urlize (printf "tags/%s/" .)) | relLangURL }}">{{ . }}</a>&nbsp;
{{ end }} {{ end }}
</span> </span>
{{ end }} {{ end }}

View File

@ -8,7 +8,7 @@
{{ $count := .Count }} {{ $count := .Count }}
{{ with $.Site.GetPage (printf "/%s/%s" $type $name) }} {{ with $.Site.GetPage (printf "/%s/%s" $type $name) }}
<li> <li>
<a class="terms-title" href="{{ .Permalink }}">{{ .Name }} ({{ $count }})</a> <a class="terms-title" href="{{ .RelPermalink }}">{{ .Name }} ({{ $count }})</a>
</li> </li>
{{ end }} {{ end }}
{{ end }} {{ end }}

View File

@ -5,7 +5,7 @@
{{- if .Resources.GetMatch .Params.Cover }} {{- if .Resources.GetMatch .Params.Cover }}
{{- $cover = (.Resources.GetMatch .Params.Cover).RelPermalink -}} {{- $cover = (.Resources.GetMatch .Params.Cover).RelPermalink -}}
{{- else -}} {{- else -}}
{{- $cover = absURL .Params.Cover -}} {{- $cover = relURL .Params.Cover -}}
{{- end -}} {{- end -}}
{{- else if $.Site.Params.AutoCover -}} {{- else if $.Site.Params.AutoCover -}}
{{- if (not .Params.Cover) -}} {{- if (not .Params.Cover) -}}

View File

@ -12,11 +12,11 @@
</div> </div>
</footer> </footer>
<script src="{{ "assets/main.js" | absURL }}"></script> <script defer src="{{ "assets/main.js" | relURL }}"></script>
<script src="{{ "assets/prism.js" | absURL }}"></script> <script defer src="{{ "assets/prism.js" | relURL }}"></script>
{{ if $.Site.Params.showLanguageSelector }} {{ if $.Site.Params.showLanguageSelector }}
<script src="{{ "assets/languageSelector.js" | absURL }}"></script> <script src="{{ "assets/languageSelector.js" | relURL }}"></script>
{{ end }} {{ end }}
<!-- Extended footer section--> <!-- Extended footer section-->

View File

@ -8,24 +8,25 @@
{{ template "_internal/google_analytics.html" . }} {{ template "_internal/google_analytics.html" . }}
<!-- Theme CSS --> <!-- Theme CSS -->
<link rel="stylesheet" href="{{ "assets/style.css" | absURL }}">
{{ if (isset .Params "color") }} {{ if (isset .Params "color") }}
<link rel="stylesheet" href="{{ (printf "assets/%s.css" .Params.color) | absURL }}"> <link rel="stylesheet" href="{{ (printf "assets/%s.css" .Params.color) | relURL }}">
{{ else if and (ne $.Site.Params.ThemeColor "orange") (ne $.Site.Params.ThemeColor "color" "") }} {{ else if and (ne $.Site.Params.ThemeColor "orange") (ne $.Site.Params.ThemeColor "color" "") }}
<link rel="stylesheet" href="{{ (printf "assets/%s.css" $.Site.Params.ThemeColor) | absURL }}"> <link rel="stylesheet" href="{{ (printf "assets/%s.css" $.Site.Params.ThemeColor) | relURL }}">
{{ else }}
<link rel="stylesheet" href="{{ "assets/orange.css" | relURL }}">
{{ end }} {{ end }}
<!-- Custom CSS to override theme properties (/static/style.css) --> <!-- Custom CSS to override theme properties (/static/style.css) -->
{{ if (fileExists "static/style.css") -}} {{ if (fileExists "static/style.css") -}}
<link rel="stylesheet" href="{{ "style.css" | absURL }}"> <link rel="stylesheet" href="{{ "style.css" | relURL }}">
{{- end }} {{- end }}
<!-- Icons --> <!-- Icons -->
<link rel="apple-touch-icon" href="{{ "img/apple-touch-icon-192x192.png" | absURL }}"> <link rel="apple-touch-icon" href="{{ "img/apple-touch-icon-192x192.png" | relURL }}">
{{ if isset $.Site.Params "favicon" }} {{ if isset $.Site.Params "favicon" }}
<link rel="shortcut icon" href="{{ $.Site.Params.favicon | absURL }}"> <link rel="shortcut icon" href="{{ $.Site.Params.favicon | relURL }}">
{{ else }} {{ else }}
<link rel="shortcut icon" href="{{ printf "img/favicon/%s.png" ($.Site.Params.ThemeColor | default "orange") | absURL }}"> <link rel="shortcut icon" href="{{ printf "img/favicon/%s.png" ($.Site.Params.ThemeColor | default "orange") | relURL }}">
{{ end }} {{ end }}
<!-- Twitter Card --> <!-- Twitter Card -->
@ -51,10 +52,10 @@
<meta property="og:image" content="{{ $.Site.Params.favicon | absURL }}"> <meta property="og:image" content="{{ $.Site.Params.favicon | absURL }}">
{{ else }} {{ else }}
<meta property="og:image" content="{{ printf "img/favicon/%s.png" $.Site.Params.ThemeColor | absURL }}"> <meta property="og:image" content="{{ printf "img/favicon/%s.png" $.Site.Params.ThemeColor | absURL }}">
<meta property="og:image:width" content="2048">
<meta property="og:image:height" content="1024">
{{ end }} {{ end }}
{{ end }} {{ end }}
<meta property="og:image:width" content="2048">
<meta property="og:image:height" content="1024">
{{ range .Params.categories }} {{ range .Params.categories }}
<meta property="article:section" content="{{ . }}" /> <meta property="article:section" content="{{ . }}" />
{{ end }} {{ end }}

View File

@ -35,7 +35,7 @@
</ul> </ul>
<ul class="language-selector__more hidden"> <ul class="language-selector__more hidden">
{{ range $.Site.Home.AllTranslations }} {{ range $.Site.Home.AllTranslations }}
<li><a href="{{ .Permalink }}">{{ .Language.LanguageName }}</a></li> <li><a href="{{ .RelPermalink }}">{{ .Language.LanguageName }}</a></li>
{{ end }} {{ end }}
</ul> </ul>
</ul> </ul>
@ -52,7 +52,7 @@
<hr /> <hr />
{{ range $.Site.Home.AllTranslations }} {{ range $.Site.Home.AllTranslations }}
<li> <li>
<a href="{{ .Permalink }}">{{ .Language.LanguageName }}</a> <a href="{{ .RelPermalink }}">{{ .Language.LanguageName }}</a>
</li> </li>
{{ end }} {{ end }}
{{ end }} {{ end }}

View File

@ -6,20 +6,16 @@
</div> </div>
<div class="pagination__buttons"> <div class="pagination__buttons">
{{ if .NextInSection }} {{ if .NextInSection }}
<span class="button previous"> <a class="button previous" href="{{ .NextInSection.RelPermalink }}">
<a href="{{ .NextInSection.Permalink }}"> <span class="button__icon"></span>
<span class="button__icon"></span> <span class="button__text">{{ .NextInSection.Title }}</span>
<span class="button__text">{{ .NextInSection.Title }}</span> </a>
</a>
</span>
{{ end }} {{ end }}
{{ if .PrevInSection }} {{ if .PrevInSection }}
<span class="button next"> <a class="button next" href="{{ .PrevInSection.RelPermalink }}">
<a href="{{ .PrevInSection.Permalink }}"> <span class="button__text">{{ .PrevInSection.Title }}</span>
<span class="button__text">{{ .PrevInSection.Title }}</span> <span class="button__icon"></span>
<span class="button__icon"></span> </a>
</a>
</span>
{{ end }} {{ end }}
</div> </div>
</div> </div>

View File

@ -11,5 +11,5 @@
<pre {{ if .Get "language" }}class="language-{{ .Get "language" }}" {{ end }}><code>{{ .Inner | string }}</code></pre> <pre {{ if .Get "language" }}class="language-{{ .Get "language" }}" {{ end }}><code>{{ .Inner | string }}</code></pre>
</div> </div>
{{ else }} {{ else }}
{{ errorf "If you want to use the \"collapsable code\" shortcode, you need to pass a mandatory \"language\" param. The issue occured in %q (%q)" .Page.File .Page.Permalink }} {{ errorf "If you want to use the \"collapsable code\" shortcode, you need to pass a mandatory \"language\" param. The issue occured in %q (%q)" .Page.File .Page.RelPermalink }}
{{ end }} {{ end }}

View File

@ -55,6 +55,6 @@
"webpack-cli": "^4.5.0" "webpack-cli": "^4.5.0"
}, },
"dependencies": { "dependencies": {
"yarn": "^1.22.10" "yarn": "^1.22.19"
} }
} }

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1 @@
(function(){var __webpack_modules__={"./assets/js/languageSelector.js": !function(){var e=getComputedStyle(document.body).getPropertyValue("--phoneWidth"),t=function(){return window.matchMedia(e).matches},n=document.querySelector(".language-selector-current"),o=document.querySelector(".language-selector__more");document.body.addEventListener("click",(function(){t()||!o||o.classList.contains("hidden")||o.classList.add("hidden")})),n&&n.addEventListener("click",(function(e){t()||(e.stopPropagation(),o.classList.toggle("hidden"))}))}();
/*!***************************************!*\
!*** ./assets/js/languageSelector.js ***!
\***************************************/function(){eval('var mobileQuery = getComputedStyle(document.body).getPropertyValue("--phoneWidth");\n\nvar isMobile = function isMobile() {\n return window.matchMedia(mobileQuery).matches;\n};\n\nvar languageSelector = document.querySelector(".language-selector-current");\nvar moreLanguagesContainer = document.querySelector(".language-selector__more");\ndocument.body.addEventListener("click", function () {\n if (!isMobile() && moreLanguagesContainer && !moreLanguagesContainer.classList.contains("hidden")) {\n moreLanguagesContainer.classList.add("hidden");\n }\n});\nlanguageSelector && languageSelector.addEventListener("click", function (e) {\n if (!isMobile()) {\n e.stopPropagation();\n moreLanguagesContainer.classList.toggle("hidden");\n }\n});\n\n//# sourceURL=webpack://terminal/./assets/js/languageSelector.js?')}},__webpack_exports__={};__webpack_modules__["./assets/js/languageSelector.js"]()})();

View File

@ -1,4 +1 @@
(function(){var __webpack_modules__={"./assets/js/menu.js": !function(){var e=document.querySelector(".container"),t=document.querySelector(".menu"),n=document.querySelector(".menu-trigger"),i=(document.querySelector(".menu__inner--desktop"),document.querySelector(".menu__sub-inner-more-trigger")),o=document.querySelector(".menu__sub-inner-more"),d=getComputedStyle(document.body).getPropertyValue("--phoneWidth"),c=function(){return window.matchMedia(d).matches},s=function(){n&&n.classList.toggle("hidden",!c()),t&&t.classList.toggle("hidden",c()),o&&o.classList.toggle("hidden",!c())};t&&t.addEventListener("click",(function(e){return e.stopPropagation()})),o&&o.addEventListener("click",(function(e){return e.stopPropagation()})),s(),document.body.addEventListener("click",(function(){c()||!o||o.classList.contains("hidden")?c()&&!t.classList.contains("hidden")&&t.classList.add("hidden"):o.classList.add("hidden")})),window.addEventListener("resize",s),n&&n.addEventListener("click",(function(e){e.stopPropagation(),t&&t.classList.toggle("hidden")})),i&&i.addEventListener("click",(function(t){t.stopPropagation(),o&&o.classList.toggle("hidden"),o.getBoundingClientRect().right>e.getBoundingClientRect().right&&(o.style.left="auto",o.style.right=0)}))}();
/*!***************************!*\
!*** ./assets/js/menu.js ***!
\***************************/function(){eval('var container = document.querySelector(".container");\nvar menu = document.querySelector(".menu");\nvar mobileMenuTrigger = document.querySelector(".menu-trigger");\nvar desktopMenu = document.querySelector(".menu__inner--desktop");\nvar desktopMenuTrigger = document.querySelector(".menu__sub-inner-more-trigger");\nvar menuMore = document.querySelector(".menu__sub-inner-more");\nvar mobileQuery = getComputedStyle(document.body).getPropertyValue("--phoneWidth");\n\nvar isMobile = function isMobile() {\n return window.matchMedia(mobileQuery).matches;\n};\n\nvar handleMenuClasses = function handleMenuClasses() {\n mobileMenuTrigger && mobileMenuTrigger.classList.toggle("hidden", !isMobile());\n menu && menu.classList.toggle("hidden", isMobile());\n menuMore && menuMore.classList.toggle("hidden", !isMobile());\n}; // Common\n\n\nmenu && menu.addEventListener("click", function (e) {\n return e.stopPropagation();\n});\nmenuMore && menuMore.addEventListener("click", function (e) {\n return e.stopPropagation();\n});\nhandleMenuClasses();\ndocument.body.addEventListener("click", function () {\n if (!isMobile() && menuMore && !menuMore.classList.contains("hidden")) {\n menuMore.classList.add("hidden");\n } else if (isMobile() && !menu.classList.contains("hidden")) {\n menu.classList.add("hidden");\n }\n});\nwindow.addEventListener("resize", handleMenuClasses); // Mobile menu\n\nmobileMenuTrigger && mobileMenuTrigger.addEventListener("click", function (e) {\n e.stopPropagation();\n menu && menu.classList.toggle("hidden");\n}); // Desktop menu\n\ndesktopMenuTrigger && desktopMenuTrigger.addEventListener("click", function (e) {\n e.stopPropagation();\n menuMore && menuMore.classList.toggle("hidden");\n\n if (menuMore.getBoundingClientRect().right > container.getBoundingClientRect().right) {\n menuMore.style.left = "auto";\n menuMore.style.right = 0;\n }\n});\n\n//# sourceURL=webpack://terminal/./assets/js/menu.js?')}},__webpack_exports__={};__webpack_modules__["./assets/js/menu.js"]()})();

1
static/assets/orange.css Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -15,10 +15,10 @@ module.exports = (env, { mode }) => ({
main: join("assets", "js", "menu.js"), main: join("assets", "js", "menu.js"),
languageSelector: join("assets", "js", "languageSelector.js"), languageSelector: join("assets", "js", "languageSelector.js"),
prism: join("assets", "js", "prism.js"), prism: join("assets", "js", "prism.js"),
style: join("assets", "css", "style.css"),
red: join("assets", "css", "color", "red.css"), red: join("assets", "css", "color", "red.css"),
blue: join("assets", "css", "color", "blue.css"), blue: join("assets", "css", "color", "blue.css"),
green: join("assets", "css", "color", "green.css"), green: join("assets", "css", "color", "green.css"),
orange: join("assets", "css", "color", "orange.css"),
pink: join("assets", "css", "color", "pink.css"), pink: join("assets", "css", "color", "pink.css"),
}, },
output: { output: {
@ -93,6 +93,7 @@ module.exports = (env, { mode }) => ({
join("static/assets/green.js"), join("static/assets/green.js"),
join("static/assets/red.js"), join("static/assets/red.js"),
join("static/assets/pink.js"), join("static/assets/pink.js"),
join("static/assets/orange.js"),
], ],
verbose: true, verbose: true,
}), }),