Skip to content

Commit f21661f

Browse files
sarg3ntclaude
andcommitted
fix: disable native browser drag on links during sidebar edit mode
Browser natively makes <a> tags draggable, which competes with SortableJS drag handling and causes sporadic behavior — sometimes the browser's native link drag activates instead of SortableJS. Fix: set draggable="false" and prevent dragstart events on nav links when entering edit mode, restoring defaults when exiting. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 11d3085 commit f21661f

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

  • gearbox/internal/framework/templates/layouts

gearbox/internal/framework/templates/layouts/base.templ

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,10 +477,13 @@ templ Base(title string, user *models.User, currentPath ...string) {
477477
let sidebarEditMode = false;
478478
let sidebarSortable = null;
479479

480-
// Prevent navigation when in edit mode
480+
// Prevent navigation and native browser drag when in edit mode
481481
function preventNavClick(e) {
482482
e.preventDefault();
483483
}
484+
function preventNativeDrag(e) {
485+
e.preventDefault();
486+
}
484487

485488
function toggleSidebarEditMode() {
486489
sidebarEditMode = !sidebarEditMode;
@@ -497,9 +500,12 @@ templ Base(title string, user *models.User, currentPath ...string) {
497500
// Show drag handles
498501
dragHandles.forEach(handle => handle.classList.remove('hidden'));
499502

500-
// Prevent link navigation but keep pointer events active for drag handles
503+
// Prevent link navigation and disable native browser drag
504+
// (browser natively drags <a> tags, which conflicts with SortableJS)
501505
navLinks.forEach(link => {
502506
link.addEventListener('click', preventNavClick);
507+
link.addEventListener('dragstart', preventNativeDrag);
508+
link.setAttribute('draggable', 'false');
503509
link.style.cursor = 'grab';
504510
});
505511

@@ -513,9 +519,11 @@ templ Base(title string, user *models.User, currentPath ...string) {
513519
// Hide drag handles
514520
dragHandles.forEach(handle => handle.classList.add('hidden'));
515521

516-
// Re-enable link clicks
522+
// Restore link behavior
517523
navLinks.forEach(link => {
518524
link.removeEventListener('click', preventNavClick);
525+
link.removeEventListener('dragstart', preventNativeDrag);
526+
link.removeAttribute('draggable');
519527
link.style.cursor = '';
520528
});
521529

0 commit comments

Comments
 (0)