Files
orion/app/templates/shared/includes/optional-libs.html
Samir Boulahtit 3ce9468397
Some checks failed
CI / ruff (push) Successful in 17s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has been cancelled
fix(cache-bust): close FE-024 gaps so every JS/CSS gets ?v=<sha>
The 2026-05-18 cache-busting system was only catching a fraction of
includes because:

1. FE-024 anti-pattern only matched `'<module>_static'` mount names
   (e.g. `'core_static'`, `'billing_static'`). The bare `'static'`
   mount — which is what every persona base.html uses for shared JS,
   CSS, and Tailwind output — never matched.
2. The rule explicitly excluded `base.html` files, which are exactly
   where most of the shared JS/CSS includes live.

User reported only a handful of files had `?v=` in their Network tab.
Swept 5 persona base.html + 15 standalone templates (login/register/
forgot/reset password, error pages, onboarding, invitation-accept,
admin module-info/config, etc.) — 53 url_for('static', ...) refs for
.js/.css converted to static_v(request, 'static', ...).

Then tightened FE-024:
- Added an anti-pattern for the bare `'static'` mount.
- Dropped `base.html` from exceptions (kept `partials/`).

Re-running the validator: same 126-warning baseline, 0 FE-024 hits.

Now every deploy flips the `?v=<sha>` query string on every shared
asset; browsers refetch automatically without a hard refresh.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 21:01:44 +02:00

106 lines
2.9 KiB
HTML

{#
Optional Libraries with CDN Fallback
=====================================
Include these blocks in pages that need Chart.js or Flatpickr.
Usage in a page template:
{% extends "admin/base.html" %}
{# For Flatpickr CSS (in head) #}
{% block flatpickr_css %}
{% include 'shared/includes/optional-libs.html' with context %}
{{ flatpickr_css_loader() }}
{% endblock %}
{# For Chart.js #}
{% block chartjs_script %}
{% include 'shared/includes/optional-libs.html' with context %}
{{ chartjs_loader() }}
{% endblock %}
{# For Flatpickr JS #}
{% block flatpickr_script %}
{% include 'shared/includes/optional-libs.html' with context %}
{{ flatpickr_loader() }}
{% endblock %}
#}
{#
Chart.js Loader with CDN Fallback
=================================
Loads Chart.js from CDN, falls back to local copy if CDN fails.
#}
{% macro chartjs_loader() %}
<script>
(function() {
var script = document.createElement('script');
script.src = 'https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js';
script.onerror = function() {
console.warn('Chart.js CDN failed, loading local copy...');
var fallbackScript = document.createElement('script');
fallbackScript.src = '{{ url_for("static", path="shared/js/lib/chart.umd.min.js") }}';
document.head.appendChild(fallbackScript);
};
document.head.appendChild(script);
})();
</script>
{% endmacro %}
{#
Flatpickr CSS Loader with CDN Fallback
======================================
Loads Flatpickr CSS from CDN, falls back to local copy if CDN fails.
#}
{% macro flatpickr_css_loader() %}
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/flatpickr.min.css"
onerror="this.onerror=null; this.href='{{ static_v(request, 'static', path='shared/css/store/flatpickr.min.css') }}';"
/>
{% endmacro %}
{#
Flatpickr JS Loader with CDN Fallback
=====================================
Loads Flatpickr JS from CDN, falls back to local copy if CDN fails.
#}
{% macro flatpickr_loader() %}
<script>
(function() {
var script = document.createElement('script');
script.src = 'https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/flatpickr.min.js';
script.onerror = function() {
console.warn('Flatpickr CDN failed, loading local copy...');
var fallbackScript = document.createElement('script');
fallbackScript.src = '{{ url_for("static", path="shared/js/lib/flatpickr.min.js") }}';
document.head.appendChild(fallbackScript);
};
document.head.appendChild(script);
})();
</script>
{% endmacro %}
{#
Combined Loaders
================
Convenience macros to load multiple libraries at once.
#}
{# Load Chart.js + Flatpickr together #}
{% macro all_optional_libs_css() %}
{{ flatpickr_css_loader() }}
{% endmacro %}
{% macro all_optional_libs_js() %}
{{ chartjs_loader() }}
{{ flatpickr_loader() }}
{% endmacro %}