Refactor question detail view for improved layout and styling

This commit is contained in:
Ross
2025-10-20 16:26:59 +01:00
parent 33b6d0d935
commit b157fe8b00
+149 -124
View File
@@ -1,132 +1,157 @@
{% extends 'sbas/base.html' %}
{% block content %}
<div class="question">
<a href="{% url 'sbas:question_update' question.id %}" title="Edit the Question">Edit</a>
<a href="{% url 'sbas:question_clone' question.id %}" title="Clone the Question">Clone</a>
<a href="{% url 'sbas:question_delete' pk=question.pk %}" title="Delete the Question">Delete</a>
<a href="{% url 'admin:sbas_question_change' question.id %}"
title="Edit the Question using the admin interface">Admin Edit</a>
<a href="#" onclick="return window.create_popup_window('{% url 'feedback_create' question_type='sbas' pk=question.pk %}')"> Add Note</a>
<div class="date">
Created: {{ question.created_date|date:"d/m/Y"}}
</div>
<div>
<h2>Title: {{ question.title|default:"(No title set)" }}</h2>
</div>
{% autoescape off %}
<span>{{question.stem}}</span>
<div>
<ol class="abcde">
<li><strong>{{ question.a_answer }}</strong>
{% if question.a_feedback %}<p>Feedback:<i>{{ question.a_feedback|default:''|safe }}</i> </p>{% endif %}
</li>
<li><strong>{{ question.b_answer }}</strong>
{% if question.b_feedback %}<p>Feedback:<i>{{ question.b_feedback|default:''|safe }}</i> </p>{% endif %}
</li>
<li><strong>{{ question.c_answer }}</strong>
{% if question.c_feedback %}<p>Feedback:<i>{{ question.c_feedback|default:''|safe }}</i> </p>{% endif %}
</li>
<li><strong>{{ question.d_answer }}</strong>
{% if question.d_feedback %}<p>Feedback:<i>{{ question.d_feedback|default:''|safe }}</i> </p>{% endif %}
</li>
<li><strong>{{ question.e_answer }}</strong>
{% if question.e_feedback %}<p>Feedback:<i>{{ question.e_feedback|default:''|safe }}</i> </p>{% endif %}
</li>
</ol>
Best answer: {{ question.best_answer }} ({{question.get_correct_answer_stripped}})
<div class="card mb-4">
<div class="card-body">
<div class="d-flex justify-content-between align-items-start mb-3 flex-column flex-md-row">
<div>
<h2 class="h4 mb-1">{{ question.title|default:"(No title set)" }}</h2>
<div class="text-muted small">Created: {{ question.created_date|date:"d/m/Y" }}</div>
</div>
<div class="btn-group mt-3 mt-md-0" role="group" aria-label="Actions">
<a class="btn btn-sm btn-outline-primary" href="{% url 'sbas:question_update' question.id %}">Edit</a>
<a class="btn btn-sm btn-outline-secondary" href="{% url 'sbas:question_clone' question.id %}">Clone</a>
<a class="btn btn-sm btn-outline-danger" href="{% url 'sbas:question_delete' pk=question.pk %}">Delete</a>
<a class="btn btn-sm btn-outline-light" href="{% url 'admin:sbas_question_change' question.id %}">Admin</a>
<button class="btn btn-sm btn-outline-info" onclick="return window.create_popup_window('{% url 'feedback_create' question_type='sbas' pk=question.pk %}')">Add Note</button>
</div>
</div>
{% endautoescape %}
<div>
Feedback: {{ question.feedback|linebreaks }}
</div>
<div>
Sources:
{% if question.sources %}
<ul>
{% for source in question.sources %}
<li>{{ source }}</li>
{% endfor %}
</ul>
{% else %}
None
{% endif %}
<div>
Examinations: {% for exam in question.exams.all %}
<a href="{% url 'sbas:exam_overview' pk=exam.pk %}">{{ exam }}</a>
{% endfor %}
</div>
<div>
Findings: {% if question.finding.exists %}
<ul>
{% for f in question.finding.all %}
<li>{{ f.get_link|safe }}</li>
{% endfor %}
</ul>
{% else %}
None
{% endif %}
</div>
<div>
Structures: {% if question.structure.exists %}
<ul>
{% for s in question.structure.all %}
<li>{{ s.get_link|safe }}</li>
{% endfor %}
</ul>
{% else %}
None
{% endif %}
</div>
<div>
Conditions: {% if question.condition.exists %}
<ul>
{% for c in question.condition.all %}
<li>{{ c.get_link|safe }}</li>
{% endfor %}
</ul>
{% else %}
None
{% endif %}
</div>
<div>
Presentations: {% if question.presentation.exists %}
<ul>
{% for p in question.presentation.all %}
<li>{{ p.get_link|safe }}</li>
{% endfor %}
</ul>
{% else %}
None
{% endif %}
</div>
<div>
Subspecialties: {% if question.subspecialty.exists %}
<ul>
{% for ss in question.subspecialty.all %}
<li>{{ ss.get_link|safe }}</li>
{% endfor %}
</ul>
{% else %}
None
{% endif %}
</div>
<div>
Category: {{ question.category }}
</div>
<div>
Author(s):
{% if question.author.exists %}
{% for u in question.author.all %}
{{ u.get_full_name|default:u.username }}{% if not forloop.last %}, {% endif %}
{% endfor %}
{% else %}
Unknown
{% endif %}
<div class="row">
<div class="col-12 col-lg-8">
<div class="mb-3">
{% autoescape off %}
<div class="card p-3 bg-body-secondary">{{ question.stem }}</div>
<ol class="abcde list-group list-group-numbered mt-3">
<li class="list-group-item"><strong>{{ question.a_answer }}</strong>
{% if question.a_feedback %}<div class="small text-muted mt-1">Feedback: <em>{{ question.a_feedback|safe }}</em></div>{% endif %}
</li>
<li class="list-group-item"><strong>{{ question.b_answer }}</strong>
{% if question.b_feedback %}<div class="small text-muted mt-1">Feedback: <em>{{ question.b_feedback|safe }}</em></div>{% endif %}
</li>
<li class="list-group-item"><strong>{{ question.c_answer }}</strong>
{% if question.c_feedback %}<div class="small text-muted mt-1">Feedback: <em>{{ question.c_feedback|safe }}</em></div>{% endif %}
</li>
<li class="list-group-item"><strong>{{ question.d_answer }}</strong>
{% if question.d_feedback %}<div class="small text-muted mt-1">Feedback: <em>{{ question.d_feedback|safe }}</em></div>{% endif %}
</li>
<li class="list-group-item"><strong>{{ question.e_answer }}</strong>
{% if question.e_feedback %}<div class="small text-muted mt-1">Feedback: <em>{{ question.e_feedback|safe }}</em></div>{% endif %}
</li>
</ol>
<div class="mt-2">Correct: <span class="badge bg-success">{{ question.get_correct_answer_stripped }}</span></div>
{% endautoescape %}
</div>
<div class="mb-3">
<h5 class="h6">Feedback</h5>
<div>{{ question.feedback|linebreaks }}</div>
</div>
<div class="mb-3">
<h5 class="h6">Sources</h5>
{% if question.sources %}
<ul class="list-unstyled">
{% for source in question.sources %}
<li class="small">{{ source }}</li>
{% endfor %}
</ul>
{% else %}
<div class="small text-muted">None</div>
{% endif %}
</div>
{% include 'question_notes.html' %}
</div>
<div class="col-12 col-lg-4">
<div class="mb-3">
<h5 class="h6">Metadata</h5>
<div class="mb-2"><strong>Category:</strong> {{ question.category }}</div>
<div class="mb-2"><strong>Examinations:</strong>
<div>
{% for exam in question.exams.all %}
<a class="d-inline-block badge bg-secondary text-decoration-none mb-1 me-1" href="{% url 'sbas:exam_overview' pk=exam.pk %}">{{ exam }}</a>
{% empty %}
<span class="small text-muted">None</span>
{% endfor %}
</div>
</div>
<div class="mb-2"><strong>Authors:</strong>
<div>
{% if question.author.all %}
{% for u in question.author.all %}
<span class="d-inline-block small">{{ u.get_full_name|default:u.username }}</span>{% if not forloop.last %}, {% endif %}
{% endfor %}
{% else %}
<span class="small text-muted">Unknown</span>
{% endif %}
</div>
</div>
<div class="mb-2"><strong>Findings</strong>
<div>
{% if question.finding.exists %}
{% for f in question.finding.all %}
<a class="badge bg-info text-dark text-decoration-none mb-1 me-1" href="{{ f.get_absolute_url }}">{{ f.name }}</a>
{% endfor %}
{% else %}
<div class="small text-muted">None</div>
{% endif %}
</div>
</div>
<div class="mb-2"><strong>Structures</strong>
<div>
{% if question.structure.exists %}
{% for s in question.structure.all %}
<a class="badge bg-warning text-dark text-decoration-none mb-1 me-1" href="{{ s.get_absolute_url }}">{{ s.name }}</a>
{% endfor %}
{% else %}
<div class="small text-muted">None</div>
{% endif %}
</div>
</div>
<div class="mb-2"><strong>Conditions</strong>
<div>
{% if question.condition.exists %}
{% for c in question.condition.all %}
<a class="badge bg-primary text-decoration-none mb-1 me-1" href="{{ c.get_absolute_url }}">{{ c.name }}</a>
{% endfor %}
{% else %}
<div class="small text-muted">None</div>
{% endif %}
</div>
</div>
<div class="mb-2"><strong>Presentations</strong>
<div>
{% if question.presentation.exists %}
{% for p in question.presentation.all %}
<a class="badge bg-secondary text-decoration-none mb-1 me-1" href="{{ p.get_absolute_url }}">{{ p.name }}</a>
{% endfor %}
{% else %}
<div class="small text-muted">None</div>
{% endif %}
</div>
</div>
<div class="mb-2"><strong>Subspecialties</strong>
<div>
{% if question.subspecialty.exists %}
{% for ss in question.subspecialty.all %}
<a class="badge bg-dark text-decoration-none mb-1 me-1" href="{{ ss.get_absolute_url }}">{{ ss.name }}</a>
{% endfor %}
{% else %}
<div class="small text-muted">None</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
{% include 'question_notes.html' %}
</div>
{% endblock %}