Implement fingerprinting site and page resources
This will keep browsers from caching files that have changed. I've also added SRI information to the <script> and <link> elements for browsers to verify resources. Squashed commit of the following: commitf3fcb16388Author: Eryn Wells <eryn@erynwells.me> Date: Tue Nov 8 17:47:42 2022 -0800 Remove static/styles/root.css commit53a30624a0Author: Eryn Wells <eryn@erynwells.me> Date: Tue Nov 8 17:47:26 2022 -0800 Add back the basic table styles that got ditched when root.css was moved to assets/styles commit294fa8343bAuthor: Eryn Wells <eryn@erynwells.me> Date: Tue Nov 8 17:45:38 2022 -0800 Get all the fingerprinting done! - Add partials in the resources folder for each of the major resources of my site - Consolidate .css and .js files via resources.Concat where possible commitd0b223fa33Author: Eryn Wells <eryn@erynwells.me> Date: Mon Nov 7 08:36:39 2022 -0800 All the template updates for fingerprinting commit1751abadacAuthor: Eryn Wells <eryn@erynwells.me> Date: Mon Nov 7 08:36:27 2022 -0800 Add secure_asset.html template commit94ea8068c9Author: Eryn Wells <eryn@erynwells.me> Date: Mon Nov 7 08:35:48 2022 -0800 Move a bunch of scripts and CSS to assets so they can be processed with Hugo Pipes Use Pipes to fingerprint and add SLI information to <script> and <link> tags.
This commit is contained in:
		
							parent
							
								
									f8174ab27c
								
							
						
					
					
						commit
						9601e1e283
					
				
					 24 changed files with 106327 additions and 55 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
public/
 | 
					public/
 | 
				
			||||||
resources/
 | 
					/resources/
 | 
				
			||||||
.hugo_build.lock
 | 
					.hugo_build.lock
 | 
				
			||||||
*.log
 | 
					*.log
 | 
				
			||||||
*.orig
 | 
					*.orig
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										106247
									
								
								assets/scripts/lib/p5-1.5.0.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										106247
									
								
								assets/scripts/lib/p5-1.5.0.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -1,4 +1,8 @@
 | 
				
			||||||
import rr from "./railroad.js";
 | 
					{{ with resources.Get "scripts/lib/railroad.js" | fingerprint "sha512" }}
 | 
				
			||||||
 | 
					import rr from "{{ .RelPermalink }}";
 | 
				
			||||||
 | 
					{{ else }}
 | 
				
			||||||
 | 
					  {{ errorf "Unable to get railroad.js resource" }}
 | 
				
			||||||
 | 
					{{ end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RailroadDiagramManager {
 | 
					class RailroadDiagramManager {
 | 
				
			||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
| 
						 | 
					@ -93,6 +93,14 @@
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					    font-family: "Museo_Slab";
 | 
				
			||||||
 | 
					    src: url("{{ `/fonts/Museo_Slab_500.woff2` | relURL }}") format("woff2"),
 | 
				
			||||||
 | 
					        url("{{ `/fonts/Museo_Slab_500.woff` | relURL }}") format("woff");
 | 
				
			||||||
 | 
					    font-weight: normal;
 | 
				
			||||||
 | 
					    font-style: normal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@layer reset {
 | 
					@layer reset {
 | 
				
			||||||
    body, button, h1, h2, h3, h4, h5, h6, input, ol, ul, p, pre, textarea {
 | 
					    body, button, h1, h2, h3, h4, h5, h6, input, ol, ul, p, pre, textarea {
 | 
				
			||||||
        padding: 0; margin: 0;
 | 
					        padding: 0; margin: 0;
 | 
				
			||||||
| 
						 | 
					@ -3,50 +3,30 @@
 | 
				
			||||||
  {{ partial "head.html" . }}
 | 
					  {{ partial "head.html" . }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
    {{ block "body" . }}
 | 
					    {{ block "body" . -}}
 | 
				
			||||||
    {{ block "header" . }}{{ end }}
 | 
					    {{ block "header" . }}{{ end }}
 | 
				
			||||||
    <main class="{{ .Type }} {{ .Kind }}{{ if gt (len .Pages) 0 }} list{{ end }}">
 | 
					    <main class="{{ .Type }} {{ .Kind }}{{ if gt (len .Pages) 0 }} list{{ end }}">
 | 
				
			||||||
      {{ block "main" . }}{{ end }}
 | 
					      {{ block "main" . }}{{ end }}
 | 
				
			||||||
    </main>
 | 
					    </main>
 | 
				
			||||||
    {{ partial "development/page_info.html" . }}
 | 
					    {{- partial "development/page_info.html" . -}}
 | 
				
			||||||
    {{ block "footer" . }}{{ end }}
 | 
					    {{- block "footer" . -}}{{- end -}}
 | 
				
			||||||
    {{ end }}
 | 
					    {{- end -}}
 | 
				
			||||||
  </body>
 | 
					  </body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <style>
 | 
					  {{ with partial "resources/root_css.html" . -}}
 | 
				
			||||||
    @font-face {
 | 
					  <link rel="stylesheet" as="style" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}">
 | 
				
			||||||
      font-family: "Museo_Slab";
 | 
					 | 
				
			||||||
      src: url("{{ `/fonts/Museo_Slab_500.woff2` | relURL }}") format("woff2"),
 | 
					 | 
				
			||||||
           url("{{ `/fonts/Museo_Slab_500.woff` | relURL }}") format("woff");
 | 
					 | 
				
			||||||
      font-weight: normal;
 | 
					 | 
				
			||||||
      font-style: normal;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  </style>
 | 
					 | 
				
			||||||
  <link rel="stylesheet" as="style" href="{{ `/styles/root.css` | relURL }}">
 | 
					 | 
				
			||||||
  {{- if not hugo.IsProduction -}}
 | 
					 | 
				
			||||||
    <link rel="stylesheet" as="style" href="{{ `/styles/development.css` | relURL }}">
 | 
					 | 
				
			||||||
  {{- end -}}
 | 
					  {{- end -}}
 | 
				
			||||||
 | 
					  {{- with partial "resources/section_css.html" . -}}
 | 
				
			||||||
  {{- $includedCSS := slice -}}
 | 
					  <link rel="stylesheet" as="style" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}">
 | 
				
			||||||
  {{- if not .FirstSection.IsHome -}}
 | 
					 | 
				
			||||||
    {{- range .FirstSection.Resources.Match "*.css" -}}
 | 
					 | 
				
			||||||
      {{- if not (in $includedCSS .Permalink) -}}
 | 
					 | 
				
			||||||
        {{- $includedCSS = $includedCSS | append .Permalink -}}
 | 
					 | 
				
			||||||
        <link rel="stylesheet" as="style" href="{{ .RelPermalink }}">
 | 
					 | 
				
			||||||
      {{- end -}}
 | 
					 | 
				
			||||||
    {{- end -}}
 | 
					 | 
				
			||||||
  {{- end -}}
 | 
					  {{- end -}}
 | 
				
			||||||
 | 
					  {{- with partial "resources/page_css.html" . -}}
 | 
				
			||||||
  {{- range .Resources.Match "*.css" -}}
 | 
					  <link rel="stylesheet" as="style" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}">
 | 
				
			||||||
    {{- if not (in $includedCSS .Permalink) -}}
 | 
					 | 
				
			||||||
      {{- $includedCSS = $includedCSS | append .Permalink -}}
 | 
					 | 
				
			||||||
      <link rel="stylesheet" as="style" href="{{ .RelPermalink }}">
 | 
					 | 
				
			||||||
    {{- end -}}
 | 
					 | 
				
			||||||
  {{- end -}}
 | 
					  {{- end -}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {{ block "styles" . }}{{ end }}
 | 
					  {{ block "styles" . }}{{ end }}
 | 
				
			||||||
 | 
					 | 
				
			||||||
  {{ block "scripts" . }}{{ end }}
 | 
					  {{ block "scripts" . }}{{ end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <script src="{{ `scripts/site.js` | relURL }}"></script>
 | 
					  {{- with partial "resources/site_js.html" . -}}
 | 
				
			||||||
 | 
					  <script type="module" src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}"></script>
 | 
				
			||||||
 | 
					  {{ end }}
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,27 +6,25 @@
 | 
				
			||||||
  {{ partial "single_main.html" . }}
 | 
					  {{ partial "single_main.html" . }}
 | 
				
			||||||
{{ end }}
 | 
					{{ end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{ define "styles" }}
 | 
					 | 
				
			||||||
  {{- if .HasShortcode "figures/railroad" -}}
 | 
					 | 
				
			||||||
    <link rel="preload stylesheet" as="style" href="{{ `styles/railroad.css` | absURL }}">
 | 
					 | 
				
			||||||
  {{- end -}}
 | 
					 | 
				
			||||||
  <link rel="preload stylesheet" as="style" href="{{ `styles/monokai.css` | absURL }}">
 | 
					 | 
				
			||||||
{{ end }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{{ define "scripts" }}
 | 
					{{ define "scripts" }}
 | 
				
			||||||
  {{- if .HasShortcode "figures/railroad" -}}
 | 
					  {{- if .HasShortcode "figures/railroad" -}}
 | 
				
			||||||
    <script defer type="module" src="{{ `scripts/railroad.js` | absURL }}"></script>
 | 
					  {{- with partial "resources/railroad_utils.html" . -}}
 | 
				
			||||||
    <script defer type="module" src="{{ `scripts/railroad-utils.js` | absURL }}"></script>
 | 
					  <script defer type="module" src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}"></script>
 | 
				
			||||||
 | 
					  {{- end -}}
 | 
				
			||||||
  {{- end -}}
 | 
					  {{- end -}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {{- if .HasShortcode "figures/p5" -}}
 | 
					  {{- if .HasShortcode "figures/p5" -}}
 | 
				
			||||||
    <script defer src="{{ `scripts/p5-1.4.1.min.js` | absURL }}"></script>
 | 
					  {{- with partial "secure_asset.html" "scripts/lib/p5-1.5.0.js" -}}
 | 
				
			||||||
    <script defer src="{{ `scripts/sketch-utils.js` | absURL }}"></script>
 | 
					  <script defer src="{{ .Secure.Permalink }}" integrity="{{ .Secure.Data.Integrity }}"></script>
 | 
				
			||||||
 | 
					  {{- end -}}
 | 
				
			||||||
 | 
					  {{- with partial "secure_asset.html" "scripts/sketch-utils.js" -}}
 | 
				
			||||||
 | 
					  <script defer src="{{ .Secure.Permalink }}" integrity="{{ .Secure.Data.Integrity }}"></script>
 | 
				
			||||||
 | 
					  {{- end -}}
 | 
				
			||||||
  {{- end -}}
 | 
					  {{- end -}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {{- range $script := .Resources.Match "*.js" -}}
 | 
					  {{- range $script := .Resources.Match "*.js" -}}
 | 
				
			||||||
    {{- $isModule := default true $script.Params.is_module -}}
 | 
					  {{- $isModule := default true $script.Params.is_module -}}
 | 
				
			||||||
    <script defer {{ if $isModule }}type="module"{{ end }} src="{{ $script.Permalink | relURL }}"></script>
 | 
					  <script defer {{ if $isModule }}type="module"{{ end }} src="{{ $script.Permalink | relURL }}"></script>
 | 
				
			||||||
  {{- end -}}
 | 
					  {{- end -}}
 | 
				
			||||||
{{ end }}
 | 
					{{ end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										5
									
								
								layouts/partials/resources/page_css.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								layouts/partials/resources/page_css.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					{{ $pageCSS := dict }}
 | 
				
			||||||
 | 
					{{ with .Resources.Match "*.css" }}
 | 
				
			||||||
 | 
					  {{ $pageCSS = . | resources.Concat "page.css" | fingerprint "sha512" }}
 | 
				
			||||||
 | 
					{{ end }}
 | 
				
			||||||
 | 
					{{ return $pageCSS }}
 | 
				
			||||||
							
								
								
									
										4
									
								
								layouts/partials/resources/railroad_utils.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								layouts/partials/resources/railroad_utils.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					{{- $railroadUtilsJS := resources.Get "scripts/railroad-utils.js"
 | 
				
			||||||
 | 
					                      | resources.ExecuteAsTemplate "scripts/railroad_utils.js" .
 | 
				
			||||||
 | 
					                      | resources.Fingerprint "sha512" -}}
 | 
				
			||||||
 | 
					{{ return $railroadUtilsJS }}
 | 
				
			||||||
							
								
								
									
										11
									
								
								layouts/partials/resources/root_css.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								layouts/partials/resources/root_css.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					{{ $allStylesheets := slice (resources.Get "styles/root.css")
 | 
				
			||||||
 | 
					                            (resources.Get "styles/railroad.css")
 | 
				
			||||||
 | 
					                            (resources.Get "styles/monokai.css") }}
 | 
				
			||||||
 | 
					{{ if not hugo.IsProduction }}
 | 
				
			||||||
 | 
					    {{ $allStylesheets = $allStylesheets | append (resources.Get "styles/development.css") }}
 | 
				
			||||||
 | 
					{{ end }}
 | 
				
			||||||
 | 
					{{ $rootCSS := $allStylesheets
 | 
				
			||||||
 | 
					             | resources.Concat "styles/root.css"
 | 
				
			||||||
 | 
					             | resources.ExecuteAsTemplate "styles/root.css" .
 | 
				
			||||||
 | 
					             | fingerprint "sha512" }}
 | 
				
			||||||
 | 
					{{ return $rootCSS }}
 | 
				
			||||||
							
								
								
									
										11
									
								
								layouts/partials/resources/section_css.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								layouts/partials/resources/section_css.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					{{ $sectionCSS := dict }}
 | 
				
			||||||
 | 
					{{ $sectionStylesheet := "" }}
 | 
				
			||||||
 | 
					{{ if .IsHome }}
 | 
				
			||||||
 | 
					  {{ $sectionStylesheet = printf "styles/home.css" }}
 | 
				
			||||||
 | 
					{{ else }}
 | 
				
			||||||
 | 
					  {{ $sectionStylesheet = printf "styles/%s.css" .Section }}
 | 
				
			||||||
 | 
					{{ end }}
 | 
				
			||||||
 | 
					{{ with  resources.Get $sectionStylesheet }}
 | 
				
			||||||
 | 
					  {{ $sectionCSS = . | fingerprint "sha512" }}
 | 
				
			||||||
 | 
					{{ end }}
 | 
				
			||||||
 | 
					{{ return $sectionCSS }}
 | 
				
			||||||
							
								
								
									
										2
									
								
								layouts/partials/resources/site_js.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								layouts/partials/resources/site_js.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					{{ $siteJS := resources.Get "scripts/site.js" | fingerprint "sha512" }}
 | 
				
			||||||
 | 
					{{ return $siteJS }}
 | 
				
			||||||
							
								
								
									
										5
									
								
								layouts/partials/secure_asset.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								layouts/partials/secure_asset.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					{{ $asset := dict }}
 | 
				
			||||||
 | 
					{{ with resources.Get . }}
 | 
				
			||||||
 | 
					  {{ $asset = dict "Resource" . "Secure" (. | resources.Fingerprint "sha512") }}
 | 
				
			||||||
 | 
					{{ end }}
 | 
				
			||||||
 | 
					{{ return $asset }}
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
{{- $parentID := .Parent.Get "id" -}}
 | 
					{{ $parentID := .Parent.Get "id" -}}
 | 
				
			||||||
{{- $narrowOnly := .Get "narrow" }}
 | 
					{{ $narrowOnly := not (not (.Get "narrow")) | default false }}
 | 
				
			||||||
<script defer type="module">
 | 
					<script defer type="module">
 | 
				
			||||||
    import { railroadDiagram } from {{ `/scripts/railroad-utils.js` | relURL }};
 | 
					    import { railroadDiagram } from {{ (partial "resources/railroad_utils.html" .).RelPermalink }};
 | 
				
			||||||
    railroadDiagram(rr => {
 | 
					    railroadDiagram(rr => {
 | 
				
			||||||
        {{ .Inner | safeJS }}
 | 
					        {{ .Inner | safeJS }}
 | 
				
			||||||
    }, "{{ $parentID }}", {{ if $narrowOnly }}true{{ else }}false{{ end }});
 | 
					    }, "{{ $parentID }}", {{ cond $narrowOnly "true" "false" | safeJS }});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								static/scripts/p5-1.4.1.min.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								static/scripts/p5-1.4.1.min.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue