|
|
@@ -7,7 +7,7 @@
|
|
|
<div>
|
|
|
<p class="text-xs text-gray-400">管理你的所有科目</p>
|
|
|
</div>
|
|
|
- <button onclick="openModal()" class="inline-flex items-center gap-2 bg-primary text-white px-5 py-2.5 rounded-xl text-sm font-medium hover:bg-indigo-600 transition shadow-sm">
|
|
|
+ <button id="btnCreate" class="inline-flex items-center gap-2 bg-primary text-white px-5 py-2.5 rounded-xl text-sm font-medium hover:bg-indigo-600 transition shadow-sm">
|
|
|
<i class="fa-solid fa-plus"></i>新建科目
|
|
|
</button>
|
|
|
</div>
|
|
|
@@ -42,18 +42,18 @@
|
|
|
<div class="bg-white rounded-2xl border border-gray-100 p-16 text-center">
|
|
|
<div class="text-6xl text-gray-200 mb-4"><i class="fa-solid fa-folder-open"></i></div>
|
|
|
<p class="text-gray-400 mb-6">还没有科目,先创建一个吧</p>
|
|
|
- <button onclick="openModal()" class="inline-flex items-center gap-2 bg-primary text-white px-6 py-3 rounded-xl text-sm font-medium hover:bg-indigo-600 transition">
|
|
|
+ <button id="btnCreateEmpty" class="inline-flex items-center gap-2 bg-primary text-white px-6 py-3 rounded-xl text-sm font-medium hover:bg-indigo-600 transition">
|
|
|
<i class="fa-solid fa-plus"></i>新建第一个科目
|
|
|
</button>
|
|
|
</div>
|
|
|
{% endif %}
|
|
|
|
|
|
<!-- Create modal -->
|
|
|
-<div id="createModal" class="fixed inset-0 z-50 items-center justify-center modal-overlay bg-black/40" style="display:none">
|
|
|
- <div class="bg-white rounded-2xl w-full max-w-md mx-4 shadow-2xl">
|
|
|
+<div id="createModal" class="fixed inset-0 z-50 hidden items-center justify-center modal-overlay bg-black/40">
|
|
|
+ <div class="bg-white rounded-2xl w-full max-w-md mx-4 shadow-2xl max-h-[90vh] overflow-y-auto">
|
|
|
<div class="px-6 py-5 border-b border-gray-100 flex items-center justify-between sticky top-0 bg-white z-10 rounded-t-2xl">
|
|
|
<h3 class="font-bold text-gray-800">新建科目</h3>
|
|
|
- <button onclick="closeModal()" class="text-gray-400 hover:text-gray-600"><i class="fa-solid fa-xmark text-lg"></i></button>
|
|
|
+ <button id="btnCloseModal" class="text-gray-400 hover:text-gray-600"><i class="fa-solid fa-xmark text-lg"></i></button>
|
|
|
</div>
|
|
|
<form method="POST" action="/subjects/create" class="p-6">
|
|
|
<div class="mb-5">
|
|
|
@@ -66,15 +66,15 @@
|
|
|
<div class="flex gap-2 flex-wrap">
|
|
|
{% for c in colors %}
|
|
|
<label class="cursor-pointer">
|
|
|
- <input type="radio" name="color" value="{{ c }}" {% if loop.first %}checked{% endif %} class="hidden peer">
|
|
|
- <span class="w-8 h-8 rounded-full block peer-checked:ring-2 peer-checked:ring-offset-2 peer-checked:ring-gray-400 transition hover:scale-110"
|
|
|
+ <input type="radio" name="color" value="{{ c }}" {% if loop.first %}checked{% endif %} class="hidden peer" data-color="{{ c }}">
|
|
|
+ <span class="w-8 h-8 rounded-full block peer-checked:ring-2 peer-checked:ring-offset-2 peer-checked:ring-gray-400 transition hover:scale-110 ring-transparent"
|
|
|
style="background-color:{{ c }};"></span>
|
|
|
</label>
|
|
|
{% endfor %}
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="flex gap-3">
|
|
|
- <button type="button" onclick="closeModal()" class="flex-1 border border-gray-200 text-gray-600 py-2.5 rounded-xl text-sm font-medium hover:bg-gray-50 transition">取消</button>
|
|
|
+ <button type="button" id="btnCancel" class="flex-1 border border-gray-200 text-gray-600 py-2.5 rounded-xl text-sm font-medium hover:bg-gray-50 transition">取消</button>
|
|
|
<button type="submit" class="flex-1 bg-primary text-white py-2.5 rounded-xl text-sm font-medium hover:bg-indigo-600 transition">创建</button>
|
|
|
</div>
|
|
|
</form>
|
|
|
@@ -84,15 +84,29 @@
|
|
|
|
|
|
{% block extra_js %}
|
|
|
<script>
|
|
|
-function openModal(){const m=document.getElementById('createModal');m.style.display='flex';}
|
|
|
-function closeModal(){const m=document.getElementById('createModal');m.style.display='none';}
|
|
|
-document.querySelectorAll('input[name="color"]').forEach(r=>{
|
|
|
- r.addEventListener('change',function(){
|
|
|
- document.querySelectorAll('input[name="color"]~span').forEach(s=>s.style.boxShadow='none');
|
|
|
- this.nextElementSibling.style.boxShadow='0 0 0 3px '+this.value+'40';
|
|
|
+(function(){
|
|
|
+ var modal = document.getElementById('createModal');
|
|
|
+ function openModal(){ if(modal) modal.classList.remove('hidden'); }
|
|
|
+ function closeModal(){ if(modal) modal.classList.add('hidden'); }
|
|
|
+ var btns = document.querySelectorAll('#btnCreate, #btnCreateEmpty');
|
|
|
+ var closeBtns = document.querySelectorAll('#btnCloseModal, #btnCancel');
|
|
|
+ btns.forEach(function(b){ b.addEventListener('click', openModal); });
|
|
|
+ closeBtns.forEach(function(b){ b.addEventListener('click', closeModal); });
|
|
|
+ if(modal){
|
|
|
+ modal.addEventListener('click', function(e){
|
|
|
+ if(e.target === modal) closeModal();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ document.querySelectorAll('input[name="color"]').forEach(function(r){
|
|
|
+ r.addEventListener('change', function(){
|
|
|
+ document.querySelectorAll('input[name="color"]').forEach(function(el){
|
|
|
+ el.nextElementSibling.classList.add('ring-transparent');
|
|
|
+ el.nextElementSibling.classList.remove('ring-2','ring-offset-2','ring-gray-400');
|
|
|
+ });
|
|
|
+ this.nextElementSibling.classList.remove('ring-transparent');
|
|
|
+ this.nextElementSibling.classList.add('ring-2','ring-offset-2','ring-gray-400');
|
|
|
+ });
|
|
|
});
|
|
|
-});
|
|
|
-// Init color ring
|
|
|
-document.querySelector('input[name="color"]:checked')?.nextElementSibling.style.boxShadow='0 0 0 3px '+document.querySelector('input[name="color"]:checked').value+'40';
|
|
|
+})();
|
|
|
</script>
|
|
|
{% endblock %}
|