{# The one place the viewer's ground colour is not the app's. A
transmitted-light image IS its white background, and the dark
shell behind it reads as a shadow the scanner never recorded. #}
Channels
{% if data.active_tool_panels.tool_panel_legacy_slot %}
{% include data.active_tool_panels.tool_panel_legacy_slot %}
{% endif %}
{# Before main.js and deferred like it, so it is defined by the time init()
sees a pending mask job. Loaded here rather than in base.html because the
pending state belongs to a viewer looking at the project whose mask is
converting -- every other page would carry a listener with nothing to
listen for. #}
{# Brightfield display adjustments. Deferred like main.js and loaded
unconditionally: it does nothing at all when the section is absent, and
gating the tag on image_kind would put a second thing in this page that has
to agree with the section above. #}
{# Here rather than base.html for the same reason: the channel list is the only
thing that opens it, and the channel list is the viewer's. Only has to exist
by the time the user clicks the sidebar's upload icon, so deferred is ample.
#}
{% else %}
Plexora
Take a Quick Look
Open an image locally no setup required.
Click here to open an image
Opens a file browser on this machine.
{# Not hidden any more. It used to appear only once the native dialog
had failed, which made sense while every image was on this machine
-- but the Local/Remote switch mounts into `.quick-view-path-row`,
and a control nobody can see is a choice nobody is offered. The
dropzone above is still the fast path for the ordinary case. #}
{# Secondary: Load is the action this row is for, and two
accent-filled buttons side by side give it no primary. #}
{# One button, taking a file or an OME-Zarr folder alike --
there used to be a second for the folder case, because no
file dialog can pick one. See native_dialog.py's mode
"any". #}
Need segmentation, gating, or a feature table? Use the full import wizard instead.