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