From d703cb8ffd2d365e847555a342315c7ed53cf873 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 10 Oct 2026 17:15:12 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=EB=93=9C=EB=9E=98?= =?UTF-8?q?=EA=B7=B8=20=EC=95=A4=20=EB=93=9C=EB=A1=AD=20=EC=98=81=EC=97=AD?= =?UTF-8?q?=EC=97=90=20dropEffect=20=EC=8B=9C=EA=B0=81=EC=A0=81=20?= =?UTF-8?q?=ED=94=BC=EB=93=9C=EB=B0=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit πŸ’‘ What: λ“œλž˜κ·Έ 이벀트 μ‹œ DataTransfer 객체의 dropEffectλ₯Ό 'copy'둜 λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. 🎯 Why: λ“œλž˜κ·Έ μ‹œ 마우슀 μ»€μ„œκ°€ κΈ°λ³Έ μƒνƒœμ΄κ±°λ‚˜ κΈˆμ§€ μƒνƒœλ‘œ ν‘œμ‹œλ˜μ–΄ μ‚¬μš©μžμ—κ²Œ λ“œλ‘­ κ°€λŠ₯ μ—¬λΆ€λ₯Ό μ§κ΄€μ μœΌλ‘œ μ „λ‹¬ν•˜μ§€ λͺ»ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. πŸ“Έ Before/After: λ“œλž˜κ·Έ μ‹œ 운영 체제 κΈ°λ³Έ '볡사' μ»€μ„œκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€. β™Ώ Accessibility: μ‹œκ°μ  ν”Όλ“œλ°±μ΄ ν–₯μƒλ˜μ–΄ λ“œλž˜κ·Έ μ•€ λ“œλ‘­ μΈν„°νŽ˜μ΄μŠ€μ˜ μ‚¬μš©μ„±μ΄ κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. --- .jules/palette.md | 3 +++ saas_web.py | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.jules/palette.md b/.jules/palette.md index 2dcd639e..76e7e894 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -81,3 +81,6 @@ ## 2024-08-04 - 숫자 μž…λ ₯ ν•„λ“œ 빈 λ¬Έμžμ—΄ μƒνƒœ μ΄ˆκΈ°ν™” 처리 **ν•™μŠ΅:** 숫자 μž…λ ₯ ν•„λ“œμ—μ„œ 빈 λ¬Έμžμ—΄('')을 μž…λ ₯ν•  λ•Œ λΈŒλΌμš°μ €λŠ” μ΄μ „μ˜ μœ νš¨ν•˜μ§€ μ•Šμ€ μƒνƒœλ₯Ό μ•”μ‹œμ μœΌλ‘œ μœ μ§€ν•˜λ―€λ‘œ, μ‚¬μš©μž μ •μ˜ 검증을 λͺ…μ‹œμ μœΌλ‘œ μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠμœΌλ©΄ λ„€μ΄ν‹°λΈŒ HTML5 μœ νš¨μ„± 검사가 정상 μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆμŒμ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. **μ‹€ν–‰:** 인라인 검증 슀크립트 μž‘μ„± μ‹œ 빈 λ¬Έμžμ—΄ μƒνƒœλ₯Ό λ³„λ„λ‘œ ν™•μΈν•˜μ—¬ this.setCustomValidity('') 및 this.removeAttribute('aria-invalid')λ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. +## 2024-08-16 - Add explicit dropEffect to drag and drop zones +**Learning:** Adding `.dragover` CSS classes provides good visual feedback for drop zones, but the OS cursor often remains as the default pointer or indicates "not allowed" unless `e.dataTransfer.dropEffect` is explicitly set during the `dragover` event. +**Action:** Always set `e.dataTransfer.dropEffect = 'copy'` (or another appropriate effect) during `dragenter`/`dragover` events to provide clear, native cursor feedback to the user that the drop action is supported. diff --git a/saas_web.py b/saas_web.py index 63265e94..6de5a0fc 100644 --- a/saas_web.py +++ b/saas_web.py @@ -372,7 +372,12 @@ async def add_security_headers(request: Request, call_next): zone.addEventListener(eventName, preventDefaults, false); }); ['dragenter', 'dragover'].forEach(eventName => { - zone.addEventListener(eventName, () => zone.classList.add('dragover'), false); + zone.addEventListener(eventName, (e) => { + zone.classList.add('dragover'); + if (e.dataTransfer) { + e.dataTransfer.dropEffect = 'copy'; + } + }, false); }); ['dragleave', 'drop'].forEach(eventName => { zone.addEventListener(eventName, () => zone.classList.remove('dragover'), false);