fix(web): load the three widget scripts store plugins already declare

time-picker.js, file-upload-single.js and plugin-file-manager.js
register widgets that installed store plugins reference in their config
schemas (countdown uses x-widget: time-picker and file-upload-single;
of-the-day uses plugin-file-manager), but base.html never included the
scripts. plugin_config.html renders such fields as an empty container
that polls LEDMatrixWidgets.get(...) on a 50ms loop forever, so those
plugin config fields appeared permanently blank. The audit initially
flagged these files as dead code; the monorepo cross-check proved the
opposite — they were unreachable, not unused.

example-color-picker.js (the documented custom-widget example) gains an
explicit warning that including it in base.html would shadow the
built-in color-picker widget.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SXb4mKcAkVaxkeTb3YnAdr
This commit is contained in:
Claude
2026-08-06 00:02:51 +00:00
parent 5ae1a2b7c4
commit e1efbaf6a2
2 changed files with 7 additions and 0 deletions
@@ -9,6 +9,10 @@
* 2. Reference it in your config_schema.json with "x-widget": "color-picker" * 2. Reference it in your config_schema.json with "x-widget": "color-picker"
* 3. The widget will be automatically loaded when the plugin config form is rendered * 3. The widget will be automatically loaded when the plugin config form is rendered
* *
* Do NOT add this file to base.html's widget script list: it registers
* under the name 'color-picker' and would shadow the built-in
* color-picker.js widget.
*
* @module ColorPickerWidget * @module ColorPickerWidget
*/ */
+3
View File
@@ -989,6 +989,9 @@
<script src="{{ url_for('static', filename='v3/js/widgets/google-calendar-picker.js') }}" defer></script> <script src="{{ url_for('static', filename='v3/js/widgets/google-calendar-picker.js') }}" defer></script>
<script src="{{ url_for('static', filename='v3/js/widgets/day-selector.js') }}" defer></script> <script src="{{ url_for('static', filename='v3/js/widgets/day-selector.js') }}" defer></script>
<script src="{{ url_for('static', filename='v3/js/widgets/time-range.js') }}" defer></script> <script src="{{ url_for('static', filename='v3/js/widgets/time-range.js') }}" defer></script>
<script src="{{ url_for('static', filename='v3/js/widgets/time-picker.js') }}" defer></script>
<script src="{{ url_for('static', filename='v3/js/widgets/file-upload-single.js') }}" defer></script>
<script src="{{ url_for('static', filename='v3/js/widgets/plugin-file-manager.js') }}" defer></script>
<script src="{{ url_for('static', filename='v3/js/widgets/schedule-picker.js') }}" defer></script> <script src="{{ url_for('static', filename='v3/js/widgets/schedule-picker.js') }}" defer></script>
<!-- Basic input widgets --> <!-- Basic input widgets -->
<script src="{{ url_for('static', filename='v3/js/widgets/text-input.js') }}" defer></script> <script src="{{ url_for('static', filename='v3/js/widgets/text-input.js') }}" defer></script>