improve cases series handling in collection
This commit is contained in:
@@ -14,13 +14,54 @@
|
||||
<form method="POST" class="post-form">
|
||||
{% csrf_token %}
|
||||
{% crispy form form.helper %}
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<strong>Series Visibility</strong>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="small text-muted mb-3">Choose how each series is shown for this case in this collection.</p>
|
||||
{% if series_visibility_rows %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm align-middle">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Series</th>
|
||||
<th>Visibility</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in series_visibility_rows %}
|
||||
<tr>
|
||||
<td>
|
||||
<div class="fw-semibold">Series {{ forloop.counter }}</div>
|
||||
<div class="small text-muted">{{ row.series }}</div>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-select form-select-sm" name="series_visibility_{{ row.series.pk }}">
|
||||
{% for value, label in visibility_choices %}
|
||||
<option value="{{ value }}" {% if row.value == value %}selected{% endif %}>{{ label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="text-muted">No series linked to this case.</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" value="answer" name="submit" class="btn btn-primary">Save Changes</button>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script>
|
||||
</script>
|
||||
<style></style>
|
||||
<script>
|
||||
</script>
|
||||
<style></style>
|
||||
{% endblock %}
|
||||
@@ -101,6 +101,18 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if casedetail.learner_comment %}
|
||||
<div class="alert alert-info small">
|
||||
<strong>Collection note:</strong> {{ casedetail.learner_comment|linebreaks }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if question_completed and casedetail.learner_review_comment %}
|
||||
<div class="alert alert-secondary small">
|
||||
<strong>Review note:</strong> {{ casedetail.learner_review_comment|linebreaks }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if collection.show_ohif_viewer or collection.show_ohif_viewer_link or collection.show_built_in_viewer %}
|
||||
<div id="viewer-panel" class="mb-3">
|
||||
{% if collection.show_built_in_viewer %}
|
||||
@@ -118,7 +130,7 @@
|
||||
<div id="viewer-container" class="viewer-resizable-container">
|
||||
<div id="main_viewer" class="dicom-viewer-root viewer-frame-standard"
|
||||
data-auto-cache-stack="false"
|
||||
data-named-stacks='{{casedetail.get_case_named_stacks}}'
|
||||
data-named-stacks='{{ named_stacks_json }}'
|
||||
></div>
|
||||
</div>
|
||||
<div id="viewer-resize-handle" class="viewer-resize-handle" title="Drag to resize viewer">
|
||||
|
||||
@@ -4,6 +4,16 @@
|
||||
{% block content %}
|
||||
|
||||
<h2>Case: {{ case.title }}</h2>
|
||||
{% if casedetail.learner_comment %}
|
||||
<div class="alert alert-info small">
|
||||
<strong>Collection note:</strong> {{ casedetail.learner_comment|linebreaks }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if casedetail.learner_review_comment %}
|
||||
<div class="alert alert-secondary small">
|
||||
<strong>Review note:</strong> {{ casedetail.learner_review_comment|linebreaks }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ casedetail.question_schema }}
|
||||
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<details class="series-detail">
|
||||
<summary class="fw-semibold">Series</summary>
|
||||
<div class="mt-2 d-flex flex-column gap-2">
|
||||
{% for series in case.prefetched_series %}
|
||||
{% for series in case.visible_prefetched_series %}
|
||||
<div class="border rounded p-2 bg-body-tertiary">
|
||||
<div class="d-flex flex-wrap justify-content-between align-items-center gap-2">
|
||||
<div class="small">
|
||||
@@ -375,6 +375,11 @@
|
||||
$('#open-viewer-local').click(function() {
|
||||
$("#open-viewer-local").removeClass("flash-button");
|
||||
viewerConnected = false;
|
||||
try {
|
||||
localStorage.removeItem('rad_local_viewer_popout_state');
|
||||
} catch (e) {
|
||||
console.warn('Unable to clear previous viewer state', e);
|
||||
}
|
||||
const opened = openSecondaryWindow("{% url 'atlas:collection_viewer_local_progressive' %}");
|
||||
if (!opened) {
|
||||
showUserMessage('Unable to open viewer window. Please allow pop-ups for this site and try again.', 'danger');
|
||||
|
||||
@@ -16,6 +16,14 @@
|
||||
</div>
|
||||
|
||||
<p class="card-text small text-muted mb-2">Relation: <span class="fw-medium">{{ relation }}</span></p>
|
||||
<p class="card-text small text-muted mb-2">
|
||||
Study date:
|
||||
{% if case.study_date %}
|
||||
<span class="fw-medium">{{ case.study_date }}</span>
|
||||
{% else %}
|
||||
<span class="fw-medium">Unknown</span>
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
<div class="mb-3 small">{{case.get_series_blocks|safe}}</div>
|
||||
|
||||
@@ -37,6 +45,12 @@
|
||||
<div class="col-12">
|
||||
<input class="form-control form-control-sm" type="text" name="relation" value="{{relation}}" placeholder="Relation to case" />
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="use_study_date_relation" value="1" id="prior_use_date_{{case.id}}" />
|
||||
<label class="form-check-label small" for="prior_use_date_{{case.id}}">Use study dates to generate relation text</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<select class="form-select form-select-sm" name="prior_visibility" id="prior_visibility_{{case.id}}">
|
||||
<option value="AL" {% if visibility == 'AL' %}selected{% endif %}>Always</option>
|
||||
|
||||
@@ -175,10 +175,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
var savedPayload = readPersistedViewerPayload();
|
||||
if (savedPayload) {
|
||||
applyViewerPayload(savedPayload);
|
||||
}
|
||||
// Intentionally do not auto-load persisted payload on startup.
|
||||
// The local viva launcher should open to an empty state and wait
|
||||
// for an explicit "open" message from the controller page.
|
||||
|
||||
window.addEventListener('storage', function (event) {
|
||||
if (event.key !== POPOUT_STATE_KEY || !event.newValue) {
|
||||
|
||||
Reference in New Issue
Block a user