kaauh_ats/templates/messages/application_message_form.html

158 lines
5.5 KiB
HTML

{% extends "portal_base.html" %}
{% load static crispy_forms_tags %}
{% load i18n %}
{% block title %}{% if form.instance.pk %}{% trans "Reply to Message" %}{% else %}{% trans "Compose Message" %}{% endif %}{% endblock %}
{% block content %}
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="mb-0">
{% if form.instance.pk %}
<i class="fas fa-reply"></i> {% trans "Reply to Message" %}
{% else %}
<i class="fas fa-envelope"></i> {% trans "Compose Message" %}
{% endif %}
</h5>
</div>
<div class="card-body">
{% if form.instance.parent_message %}
<div class="alert alert-info mb-4">
<strong>{% trans "Replying to:" %}</strong> {{ form.instance.parent_message.subject }}
<br>
<small class="text-muted">
{% trans "From" %} {{ form.instance.parent_message.sender.get_full_name|default:form.instance.parent_message.sender.username }}
{% trans "on" %} {{ form.instance.parent_message.created_at|date:"M d, Y H:i" }}
</small>
<div class="mt-2">
<strong>{% trans "Original message:" %}</strong>
<div class="border-start ps-3 mt-2">
{{ form.instance.parent_message.content|linebreaks }}
</div>
</div>
</div>
{% endif %}
<form method="post" id="messageForm">
{% csrf_token %}
{{form|crispy}}
<div class="d-flex justify-content-between">
<a href="{% url 'message_list' %}" class="btn btn-outline-primary">
<i class="fas fa-times"></i> {% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-main-action">
<i class="fas fa-paper-plane"></i>
{% if form.instance.pk %}
{% trans "Send Reply" %}
{% else %}
{% trans "Send Message" %}
{% endif %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block extra_css %}
<style>
#id_content {
min-height: 200px;
resize: vertical;
}
.form-select {
{% if form.recipient.field.widget.attrs.disabled %}
background-color: #f8f9fa;
{% endif %}
}
.border-start {
border-left: 3px solid #0d6efd;
}
.ps-3 {
padding-left: 1rem;
}
</style>
{% endblock %}
{% block extra_js %}
<script>
document.addEventListener('DOMContentLoaded', function() {
// Auto-resize textarea based on content
const textarea = document.getElementById('id_content');
if (textarea) {
textarea.addEventListener('input', function() {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
});
// Set initial height
textarea.style.height = 'auto';
textarea.style.height = (textarea.scrollHeight) + 'px';
}
// Character counter for subject
const subjectField = document.getElementById('id_subject');
const maxLength = 200;
const charsLabel = "{% trans 'characters' %}";
if (subjectField) {
// Add character counter display
const counter = document.createElement('small');
counter.className = 'text-muted';
counter.style.float = 'right';
subjectField.parentNode.appendChild(counter);
function updateCounter() {
const remaining = maxLength - subjectField.value.length;
counter.textContent = `${subjectField.value.length}/${maxLength} ${charsLabel}`;
if (remaining < 20) {
counter.className = 'text-warning';
} else {
counter.className = 'text-muted';
}
}
subjectField.addEventListener('input', updateCounter);
updateCounter();
}
// Form validation before submit
const form = document.getElementById('messageForm');
if (form) {
form.addEventListener('submit', function(e) {
const content = document.getElementById('id_content').value.trim();
const subject = document.getElementById('id_subject').value.trim();
const recipient = document.getElementById('id_recipient').value;
if (!recipient) {
e.preventDefault();
alert("{% trans 'Please select a recipient.' %}");
return false;
}
if (!subject) {
e.preventDefault();
alert("{% trans 'Please enter a subject.' %}");
return false;
}
if (!content) {
e.preventDefault();
alert("{% trans 'Please enter a message.' %}");
return false;
}
});
}
});
</script>
{% endblock %}