experiments in a post-browser web
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(drag): remove data-no-drag from extension window bodies to restore hold-to-drag

Commit szmkrrrvqlos added data-no-drag to all extension home.html <body>
elements to fix a click handling issue. However, the preload.js universal
drag system (initWindowDrag) checks target.closest('[data-no-drag]') to
decide whether to block drag — with data-no-drag on <body>, every click
inside the window matches, completely disabling hold-to-drag for all
extension windows (tags, groups, entities, editor, etc.).

Page windows (peek://page) correctly keep data-no-drag because they have
their own canvas-based drag system in page.js. Extension windows rely on
the preload.js drag system, so they must NOT have data-no-drag on body.

The preload drag system already handles interactive elements properly:
focused inputs/textareas and contentEditable elements block drag, and
click suppression only fires after an actual drag (80ms hold + movement).

+7 -9
-2
app/page/page.js
··· 454 454 if (isNaN(screenX) || isNaN(screenY)) return; 455 455 456 456 // If actively dragging, update window position from webview mouse coords. 457 - // The drag overlay may not capture events from the webview's compositor 458 - // surface, so we must handle drag movement here as well. 459 457 if (isDragging) { 460 458 const dx = screenX - dragStartScreenX; 461 459 const dy = screenY - dragStartScreenY;
+1 -1
extensions/editor/home.html
··· 36 36 </script> 37 37 <link rel="stylesheet" type="text/css" href="home.css"> 38 38 </head> 39 - <body data-no-drag> 39 + <body> 40 40 <div id="editor-root"></div> 41 41 <script type="module" src="home.js"></script> 42 42 </body>
+1 -1
extensions/entities/home.html
··· 33 33 import 'peek://app/components/peek-grid-toolbar.js'; 34 34 </script> 35 35 </head> 36 - <body data-no-drag> 36 + <body> 37 37 <header class="header"> 38 38 <div class="header-left"> 39 39 <h1 class="header-title">Entities <span class="header-count" id="entityCount"></span></h1>
+1 -1
extensions/groups/home.html
··· 32 32 import 'peek://app/components/peek-grid-toolbar.js'; 33 33 </script> 34 34 </head> 35 - <body data-no-drag> 35 + <body> 36 36 <div class="search-container"> 37 37 <div class="search-row"> 38 38 <peek-input
+1 -1
extensions/localsearch/home.html
··· 29 29 import 'peek://app/components/peek-input.js'; 30 30 </script> 31 31 </head> 32 - <body data-no-drag> 32 + <body> 33 33 <div class="search-container"> 34 34 <peek-input 35 35 id="search-input"
+1 -1
extensions/pagestream/home.html
··· 29 29 import 'peek://app/components/peek-input.js'; 30 30 </script> 31 31 </head> 32 - <body data-no-drag> 32 + <body> 33 33 <div class="search-container"> 34 34 <peek-input 35 35 class="search-input"
+1 -1
extensions/tags/home.html
··· 56 56 import 'peek://app/components/peek-grid-toolbar.js'; 57 57 </script> 58 58 </head> 59 - <body data-no-drag> 59 + <body> 60 60 <header class="header"> 61 61 <div class="header-left"> 62 62 <h1 class="header-title">Tags</h1>
+1 -1
extensions/websearch/home.html
··· 28 28 import 'peek://app/components/peek-input.js'; 29 29 </script> 30 30 </head> 31 - <body data-no-drag> 31 + <body> 32 32 <div class="search-container"> 33 33 <div class="engine-indicator" id="engine-indicator"> 34 34 <img id="engine-icon" class="engine-icon" src="" alt="">