{% extends layout|default('base.html', true) %} {% block style %} {% endblock %} {% block content %} {% if data.datasource %}
{# 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. #}
{# 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". #}
{% endif %} {% endblock %}