Add minification of html, css, & js and brotli compression to reduce page size

This commit is contained in:
Peter Stockings
2026-03-14 23:55:01 +11:00
parent f7ce1c3fd6
commit 25aa7de043
7 changed files with 89 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ from flask_migrate import Migrate
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_compress import Compress
from flask_minify import Minify
# Initialize Flask extensions
db = SQLAlchemy()
@@ -12,6 +13,7 @@ migrate = Migrate()
bcrypt = Bcrypt()
login_manager = LoginManager()
compress = Compress()
minify = Minify(html=True, js=True, cssless=True, fail_safe=True)
login_manager.login_view = 'auth.login'
login_manager.login_message_category = 'info'
@@ -29,6 +31,8 @@ def create_app():
bcrypt.init_app(app)
login_manager.init_app(app)
compress.init_app(app)
minify.init_app(app)
# Import models here to avoid circular imports
from app.models import User # Import the User model

1
app/static/js/diy-turbo.min.js vendored Normal file
View File

@@ -0,0 +1 @@
document.addEventListener("click",async t=>{const e=t.target.closest("a");if(!e)return;const o=e.getAttribute("href");if(o&&!o.startsWith("#")&&!o.startsWith("javascript:")&&e.origin===window.location.origin&&!("_blank"===e.target||e.hasAttribute("download")||t.ctrlKey||t.shiftKey||t.metaKey||t.altKey||"false"===e.getAttribute("data-turbo"))){t.preventDefault(),document.body.style.cursor="wait";try{const t=await fetch(o);if(!t.ok)throw new Error("Fetch failed");const e=await t.text(),r=(new DOMParser).parseFromString(e,"text/html");document.title=r.title,document.body.innerHTML=r.body.innerHTML,document.body.className=r.body.className,document.body.style.cursor="default",window.history.pushState({},"",o),window.scrollTo(0,0),document.dispatchEvent(new Event("diy-turbo:load"))}catch(t){console.error("DIY Turbo navigation error:",t),window.location.href=o}}}),window.addEventListener("popstate",async()=>{document.body.style.cursor="wait";try{const t=await fetch(window.location.href);if(!t.ok)throw new Error("Fetch failed");const e=await t.text(),o=(new DOMParser).parseFromString(e,"text/html");document.title=o.title,document.body.innerHTML=o.body.innerHTML,document.body.className=o.body.className,document.body.style.cursor="default",document.dispatchEvent(new Event("diy-turbo:load"))}catch(t){console.error("DIY Turbo popstate error:",t),window.location.reload()}});

View File

@@ -7,7 +7,7 @@
<title>{% block title %}BP Tracker{% endblock %}</title>
<link rel="icon" type="image/svg+xml" sizes="any" href="{{ url_for('static', filename='images/favicon.svg') }}">
<link href="/static/css/tailwind.css" rel="stylesheet">
<script src="{{ url_for('static', filename='js/diy-turbo.js') }}"></script>
<script src="{{ url_for('static', filename='js/diy-turbo.min.js') }}"></script>
</head>
<body class="bg-gray-50 text-gray-800 font-sans antialiased">