Corp/backend/templates/auth/logout.html
Игорь Надеин 2cc14bc208 refactor: Extract post form textarea autogrow styles
- Created: static/css/components/post-form.css (textarea.autogrow with min/max height, overflow control)
- Modified: templates/feed/post_form.html (replaced inline styles with CSS import)
- Description: Extracted 13-line style block for autogrow textarea behavior
- Result: Post form now uses reusable component CSS
2025-10-28 10:10:07 +03:00

88 lines
3.1 KiB
HTML

{# templates/registration/logout.html #}
{% extends "base.html" %}
{% load static %}
{% block title %}Выход{% endblock %}
{% block extra_css %}
<link rel="stylesheet" href="{% static 'css/components/logout-modal.css' %}">
{% endblock %}
{% block content %}
{# Перекрываем основной контент полноэкранным диалогом #}
<div class="ios-overlay" role="dialog" aria-modal="true" aria-labelledby="logoutTitle" aria-describedby="logoutText">
<div class="ios-sheet">
<div class="ios-grip" aria-hidden="true"></div>
<div class="ios-body">
{# аватар если есть, иначе красивая иконка выхода #}
{% if user.avatar %}
<div class="ios-ava">
<img src="{{ user.avatar.url }}" alt="">
</div>
{% else %}
<div class="ios-ico">
<i class="bi-box-arrow-right fs-3"></i>
</div>
{% endif %}
<h1 id="logoutTitle" class="ios-title">Выйти из аккаунта?</h1>
<p id="logoutText" class="ios-sub">
{{ user.get_short_name|default:"Вы" }}, вы уверены, что хотите завершить сеанс?<br>
Вы всегда можете войти снова — данные не удаляются.
</p>
<form method="post" class="ios-actions" autocomplete="off">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next|default:'' }}">
<button type="submit" class="btn ios-btn ios-btn-danger" id="confirmBtn">
Выйти
</button>
<a href="javascript:void(0)" class="btn ios-btn ios-btn-ghost text-decoration-none text-center" id="cancelBtn">
Отмена
</a>
</form>
</div>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script>
// UX: ESC = отмена, Enter на «Выйти», тап по фону = отмена
(function(){
const cancel = document.getElementById('cancelBtn');
const confirm = document.getElementById('confirmBtn');
const overlay = document.querySelector('.ios-overlay');
function goBack(){
// если есть referer/next — туда, иначе на главную
const params = new URLSearchParams(location.search);
const next = (params.get('next') || '').trim();
if (next) { location.href = next; return; }
if (document.referrer) { history.back(); return; }
location.href = "{% url 'auth_front:login' %}";
}
cancel?.addEventListener('click', goBack);
// клик по фону закрывает (но не по самой карточке)
overlay?.addEventListener('click', (e)=>{
if (e.target === overlay) goBack();
});
addEventListener('keydown', (e)=>{
if (e.key === 'Escape'){ e.preventDefault(); goBack(); }
if (e.key === 'Enter' && document.activeElement !== cancel){
// даём нативной форме отправиться
}
});
// автофокус на «Выйти»
setTimeout(()=> confirm?.focus(), 10);
})();
</script>
{% endblock %}