add optimised svgs and do some aria labelling
@ -11,6 +11,8 @@ A list of things to check once in a while to make sure I haven't broken them ina
|
|||||||
- Check the rss feed https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fthomashodson.com%2Ffeed.xml
|
- Check the rss feed https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fthomashodson.com%2Ffeed.xml
|
||||||
|
|
||||||
## Todo
|
## Todo
|
||||||
|
- add svgo https://github.com/svg/svgo
|
||||||
|
- Figure out a JS bundling script so that I don't have to include node_modules in the deployed site
|
||||||
- change the OG image used for the landing page so it's not just my face.
|
- change the OG image used for the landing page so it's not just my face.
|
||||||
- add humans.txt https://humanstxt.org/
|
- add humans.txt https://humanstxt.org/
|
||||||
- fix the OG tags so that https://cards-dev.twitter.com/validator works
|
- fix the OG tags so that https://cards-dev.twitter.com/validator works
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!-- See https://microformats.org/wiki/h-card for meaning of h-card, u-photo etc classes -->
|
<!-- See https://microformats.org/wiki/h-card for meaning of h-card, u-photo etc classes -->
|
||||||
<header class = "h-card">
|
<header class = "h-card">
|
||||||
<div class = "profile-pic-name">
|
<div class = "profile-pic-name">
|
||||||
<img src="/assets/images/avatar.jpeg" class = "u-photo avatar" alt = "A picture of me.">
|
<img src="/assets/images/avatar.jpeg" class = "u-photo avatar" alt = "A picture of me." height="175" width="175">
|
||||||
<a class="p-name u-url u-uid" href="https://thomashodson.com"><h1>Tom Hodson</h1></a>
|
<a class="p-name u-url u-uid" href="https://thomashodson.com"><h1>Tom Hodson</h1></a>
|
||||||
</div>
|
</div>
|
||||||
<p class="p-note bio">
|
<p class="p-note bio">
|
||||||
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
<div class="user-toggle">
|
<div class="user-toggle">
|
||||||
<div role="status" class="visually-hidden js-mode-status"></div>
|
<div role="status" class="visually-hidden js-mode-status"></div>
|
||||||
<button class="toggle-button js-mode-toggle">
|
<button class="toggle-button js-mode-toggle" aria-label="Night Mode Toggle">
|
||||||
<span class="toggle-button__icon" aria-hidden="true"></span>
|
<span class="toggle-button__icon" aria-hidden="true"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,12 +11,14 @@
|
|||||||
|
|
||||||
<article class="h-entry blogroll {% if is_draft %}draft{%endif%}">
|
<article class="h-entry blogroll {% if is_draft %}draft{%endif%}">
|
||||||
|
|
||||||
<a class="u-uid u-url" href="{{ post.url }}">
|
<a class="u-uid u-url" href="{{ post.url }}" aria-label="Blog Post: {{ post.title }}">
|
||||||
<figure>
|
<figure>
|
||||||
<img class="u-photo"
|
<img class="u-photo"
|
||||||
src = "{{ post.thumbnail | default: post.image}}"
|
src = "{{ post.thumbnail | default: post.image}}"
|
||||||
class = "{{ post.image_class }}"
|
class = "{{ post.image_class }}"
|
||||||
alt="{{post.alt | smartify}}">
|
alt="{{post.alt | smartify}}"
|
||||||
|
width=128 height=128
|
||||||
|
>
|
||||||
</figure>
|
</figure>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<article class="h-entry project">
|
<article class="h-entry project">
|
||||||
<a class="u-uid u-url photo" href="{{ post.url }}">
|
<a class="u-uid u-url photo" href="{{ post.url }}" aria-label="Project: {{ post.title }}">
|
||||||
|
{% assign default_thumbnail = post.assets | append: '/thumbnail.min.svg' %}
|
||||||
<img class="u-photo {{post.img.class}}"
|
<img class="u-photo {{post.img.class}}"
|
||||||
src = "{{post.img.src}}"
|
src = "{{post.img.src | default: default_thumbnail}}"
|
||||||
alt="{{post.img.alt | smartify}}">
|
alt="{{post.img.alt | smartify}}"
|
||||||
|
width=128 height=128>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html class = "no-js">
|
<html class = "no-js" lang="en">
|
||||||
<head>
|
<head>
|
||||||
{% include default_head_tags.html%}
|
{% include default_head_tags.html%}
|
||||||
</head>
|
</head>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html class = "no-js">
|
<html class = "no-js" lang="en">
|
||||||
<head>
|
<head>
|
||||||
{% include default_head_tags.html%}
|
{% include default_head_tags.html%}
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Bathroom Shelf
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: A little modification to an IKEA thingy.
|
excerpt: A little modification to an IKEA thingy.
|
||||||
permalink: /projects/bathroom_shelf
|
permalink: /projects/bathroom_shelf
|
||||||
|
assets: /assets/projects/bathroom_shelf
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/bathroom_shelf/thumbnail.svg
|
|
||||||
alt: A small bathroom shelf.
|
alt: A small bathroom shelf.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Bike Lights
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: Making a custom 3W dynamo light for a bike.
|
excerpt: Making a custom 3W dynamo light for a bike.
|
||||||
permalink: /projects/bike_lights
|
permalink: /projects/bike_lights
|
||||||
|
assets: /assets/projects/bike_lights
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/bike_lights/thumbnail.svg
|
|
||||||
alt: A CAD model of a 3D printable mount for a common LED light onto a bike handlebar.
|
alt: A CAD model of a 3D printable mount for a common LED light onto a bike handlebar.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Ceramics
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: Ongoing explorations in making pots!
|
excerpt: Ongoing explorations in making pots!
|
||||||
permalink: /projects/ceramics
|
permalink: /projects/ceramics
|
||||||
|
assets: /assets/projects/ceramics
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/ceramics/thumbnail.svg
|
|
||||||
alt:
|
alt:
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Helmet Lights
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: A few different custom mounts to attach lights to bike helmets.
|
excerpt: A few different custom mounts to attach lights to bike helmets.
|
||||||
permalink: /projects/helmet_lights
|
permalink: /projects/helmet_lights
|
||||||
|
assets: /assets/projects/helmet_lights
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/helmet_lights/thumbnail.svg
|
|
||||||
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
|
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Lamps
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: 3D Printed Lamp Shades
|
excerpt: 3D Printed Lamp Shades
|
||||||
permalink: /projects/lamps
|
permalink: /projects/lamps
|
||||||
|
assets: /assets/projects/lamps
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/lamps/thumbnail.svg
|
|
||||||
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
|
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Lasercut Stool
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: A lasercut hexagonal wooden stool.
|
excerpt: A lasercut hexagonal wooden stool.
|
||||||
permalink: /projects/lasercut_stool
|
permalink: /projects/lasercut_stool
|
||||||
|
assets: /assets/projects/lasercut_stool
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/lasercut_stool/thumbnail.svg
|
|
||||||
alt: A CAD model of the this hexagonal lasercut stool.
|
alt: A CAD model of the this hexagonal lasercut stool.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: 3D Printed Lego Motor Adapters
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: Adapters to use common components with lego technic.
|
excerpt: Adapters to use common components with lego technic.
|
||||||
permalink: /projects/lego_adapters
|
permalink: /projects/lego_adapters
|
||||||
|
assets: /assets/projects/lego_adapters
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/lego_adapters/thumbnail.svg
|
|
||||||
alt:
|
alt:
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Projector Shelf Mount
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: A mount for a projector underneath a shelf with a tilt swivel joint.
|
excerpt: A mount for a projector underneath a shelf with a tilt swivel joint.
|
||||||
permalink: /projects/projector_mount
|
permalink: /projects/projector_mount
|
||||||
|
assets: /assets/projects/projector_mount
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/projector_mount/thumbnail.svg
|
|
||||||
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
|
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ title: Toothbrush Shelf
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: A shelf to put your toothbrush charger on.
|
excerpt: A shelf to put your toothbrush charger on.
|
||||||
permalink: /projects/toothbrush_shelf
|
permalink: /projects/toothbrush_shelf
|
||||||
|
assets: /assets/projects/toothbrush_shelf
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/toothbrush_shelf/thumbnail.svg
|
|
||||||
alt: A CAD model of a small shelf to put a toothbrush right above the charging socket so that the cabling can be hidden inside the shelf.
|
alt: A CAD model of a small shelf to put a toothbrush right above the charging socket so that the cabling can be hidden inside the shelf.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@ title: USB-C Power Station
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: One charging station to rule them all!
|
excerpt: One charging station to rule them all!
|
||||||
permalink: /projects/usbc_charging_station
|
permalink: /projects/usbc_charging_station
|
||||||
|
assets: /assets/projects/usbc_power_supply
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/usbc_power_supply/thumbnail.svg
|
alt: A line rendered CAD model of a laser-cut, book shaped device with exposed internal parts. It wouldn't be obvious without reading the description but it's a USB-C power supply.
|
||||||
alt:
|
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
social_image: /assets/projects/usbc_power_supply/thumbnail.png
|
social_image: /assets/projects/usbc_power_supply/thumbnail.png
|
||||||
|
@ -3,9 +3,9 @@ title: Vector Magnet
|
|||||||
layout: post
|
layout: post
|
||||||
excerpt: Make your magnetic fields all 3D like.
|
excerpt: Make your magnetic fields all 3D like.
|
||||||
permalink: /projects/vector_magnet
|
permalink: /projects/vector_magnet
|
||||||
|
assets: /assets/projects/vector_magnet
|
||||||
|
|
||||||
img:
|
img:
|
||||||
src: /assets/projects/vector_magnet/thumbnail.svg
|
|
||||||
alt: A line drawn CAD model of vector magnet.
|
alt: A line drawn CAD model of vector magnet.
|
||||||
class: invertable
|
class: invertable
|
||||||
|
|
||||||
|
1
assets/projects/bathroom_shelf/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 30 KiB |
1
assets/projects/bike_lights/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 16 KiB |
1
assets/projects/ceramics/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 583 KiB |
1
assets/projects/helmet_lights/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 39 KiB |
1
assets/projects/lamps/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 8.7 KiB |
1
assets/projects/lasercut_stool/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 17 KiB |
1
assets/projects/lego_adapters/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 54 KiB |
1
assets/projects/projector_mount/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 16 KiB |
1
assets/projects/toothbrush_shelf/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 23 KiB |
1
assets/projects/usbc_power_supply/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 61 KiB |
1
assets/projects/vector_magnet/thumbnail.min.svg
Normal file
After Width: | Height: | Size: 126 KiB |
35
package-lock.json
generated
@ -9,6 +9,7 @@
|
|||||||
"es-module-shims": "^1.8.1",
|
"es-module-shims": "^1.8.1",
|
||||||
"lil-gui": "^0.19.1",
|
"lil-gui": "^0.19.1",
|
||||||
"mathjax": "^3.2.2",
|
"mathjax": "^3.2.2",
|
||||||
|
"svgo": "^3.3.2",
|
||||||
"three": "^0.158.0"
|
"three": "^0.158.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@ -1246,7 +1247,6 @@
|
|||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
|
||||||
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
|
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.13.0"
|
"node": ">=10.13.0"
|
||||||
}
|
}
|
||||||
@ -1355,8 +1355,7 @@
|
|||||||
"node_modules/boolbase": {
|
"node_modules/boolbase": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||||
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
|
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"node_modules/braces": {
|
"node_modules/braces": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
@ -1622,7 +1621,6 @@
|
|||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
|
||||||
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
|
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"boolbase": "^1.0.0",
|
"boolbase": "^1.0.0",
|
||||||
"css-what": "^6.1.0",
|
"css-what": "^6.1.0",
|
||||||
@ -1638,7 +1636,6 @@
|
|||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
|
||||||
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
|
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mdn-data": "2.0.30",
|
"mdn-data": "2.0.30",
|
||||||
"source-map-js": "^1.0.1"
|
"source-map-js": "^1.0.1"
|
||||||
@ -1651,7 +1648,6 @@
|
|||||||
"version": "6.1.0",
|
"version": "6.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
|
||||||
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
|
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 6"
|
"node": ">= 6"
|
||||||
},
|
},
|
||||||
@ -1663,7 +1659,6 @@
|
|||||||
"version": "5.0.5",
|
"version": "5.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
|
||||||
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
|
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"css-tree": "~2.2.0"
|
"css-tree": "~2.2.0"
|
||||||
},
|
},
|
||||||
@ -1676,7 +1671,6 @@
|
|||||||
"version": "2.2.1",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
|
||||||
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
|
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mdn-data": "2.0.28",
|
"mdn-data": "2.0.28",
|
||||||
"source-map-js": "^1.0.1"
|
"source-map-js": "^1.0.1"
|
||||||
@ -1689,8 +1683,7 @@
|
|||||||
"node_modules/csso/node_modules/mdn-data": {
|
"node_modules/csso/node_modules/mdn-data": {
|
||||||
"version": "2.0.28",
|
"version": "2.0.28",
|
||||||
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
|
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
|
||||||
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
|
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"node_modules/deepmerge": {
|
"node_modules/deepmerge": {
|
||||||
"version": "4.3.1",
|
"version": "4.3.1",
|
||||||
@ -1729,7 +1722,6 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
|
||||||
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
|
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"domelementtype": "^2.3.0",
|
"domelementtype": "^2.3.0",
|
||||||
"domhandler": "^5.0.2",
|
"domhandler": "^5.0.2",
|
||||||
@ -1743,7 +1735,6 @@
|
|||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
|
||||||
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
|
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
|
||||||
"dev": true,
|
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "github",
|
"type": "github",
|
||||||
@ -1755,7 +1746,6 @@
|
|||||||
"version": "5.0.3",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
|
||||||
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
|
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"domelementtype": "^2.3.0"
|
"domelementtype": "^2.3.0"
|
||||||
},
|
},
|
||||||
@ -1770,7 +1760,6 @@
|
|||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
|
||||||
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
|
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dom-serializer": "^2.0.0",
|
"dom-serializer": "^2.0.0",
|
||||||
"domelementtype": "^2.3.0",
|
"domelementtype": "^2.3.0",
|
||||||
@ -1825,7 +1814,6 @@
|
|||||||
"version": "4.5.0",
|
"version": "4.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.12"
|
"node": ">=0.12"
|
||||||
},
|
},
|
||||||
@ -2479,8 +2467,7 @@
|
|||||||
"node_modules/mdn-data": {
|
"node_modules/mdn-data": {
|
||||||
"version": "2.0.30",
|
"version": "2.0.30",
|
||||||
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
|
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
|
||||||
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
|
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"node_modules/merge2": {
|
"node_modules/merge2": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
@ -2560,7 +2547,6 @@
|
|||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
||||||
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
|
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"boolbase": "^1.0.0"
|
"boolbase": "^1.0.0"
|
||||||
},
|
},
|
||||||
@ -2710,8 +2696,7 @@
|
|||||||
"node_modules/picocolors": {
|
"node_modules/picocolors": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||||
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
|
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"node_modules/picomatch": {
|
"node_modules/picomatch": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
@ -3134,7 +3119,6 @@
|
|||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
|
||||||
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
|
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
@ -3235,10 +3219,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/svgo": {
|
"node_modules/svgo": {
|
||||||
"version": "3.2.0",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
|
||||||
"integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==",
|
"integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
|
||||||
"dev": true,
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@trysound/sax": "0.2.0",
|
"@trysound/sax": "0.2.0",
|
||||||
"commander": "^7.2.0",
|
"commander": "^7.2.0",
|
||||||
@ -3263,7 +3247,6 @@
|
|||||||
"version": "7.2.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
|
||||||
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
|
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 10"
|
"node": ">= 10"
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
"es-module-shims": "^1.8.1",
|
"es-module-shims": "^1.8.1",
|
||||||
"lil-gui": "^0.19.1",
|
"lil-gui": "^0.19.1",
|
||||||
"mathjax": "^3.2.2",
|
"mathjax": "^3.2.2",
|
||||||
|
"svgo": "^3.3.2",
|
||||||
"three": "^0.158.0"
|
"three": "^0.158.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
11
scripts/optimise_svgs.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import subprocess as sb
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
svgs = Path("assets/projects/").rglob("*.svg")
|
||||||
|
|
||||||
|
for svg_path in svgs:
|
||||||
|
minified_name = svg_path.with_suffix(".min.svg")
|
||||||
|
print(svg_path, minified_name)
|
||||||
|
sb.run(
|
||||||
|
["svgo", str(svg_path), "-o", str(minified_name)]
|
||||||
|
)
|