From fcb540e067eb43ec05eedbccefe05b6c5e94aba3 Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Mon, 20 Apr 2026 18:33:03 -0700 Subject: [PATCH] feat: in webui add bucket favorites and direct-navigation to explorer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Users may have access to buckets that don't appear in their owned-bucket list. Previously there was no way to reach those buckets from the explorer without knowing and manually editing the URL. This adds a "go to bucket by name" input to the buckets view. Typing a name and pressing Enter (or clicking Open) navigates to the bucket if the user has permissions to allow it. To avoid re-typing bucket names on every visit, users can now save buckets to a favorites panel that persists in localStorage. Favorites are keyed by access key so different users sharing the same browser each see only their own list. Any bucket in the owned list can be starred directly from its row. Favorites chips are clickable with the same access check, and a hover × removes them. The panel hides itself automatically when the list is empty. --- webui/web/explorer.html | 183 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 175 insertions(+), 8 deletions(-) diff --git a/webui/web/explorer.html b/webui/web/explorer.html index 310d3b47..b2bc6a37 100644 --- a/webui/web/explorer.html +++ b/webui/web/explorer.html @@ -192,14 +192,50 @@ under the License.
- -
- + +
+
+ + + +
+ +
+ +
+
+ + +
@@ -1225,11 +1261,14 @@ under the License. if (createdCol) createdCol.style.display = 'none'; } + const favoritesSet = new Set(loadFavorites()); + bucketsList.forEach(bucket => { const name = bucket.name || bucket.Name; const creationDate = bucket.creationdate || bucket.CreationDate; const versioningStatus = bucketsVersioningCache[name] || ''; const objectLockConfig = bucketsObjectLockCache[name] || { enabled: false }; + const starred = favoritesSet.has(name); const row = document.createElement('tr'); row.className = 'file-row border-b border-gray-50'; row.innerHTML = ` @@ -1250,6 +1289,11 @@ under the License. ${hasAnyCreationDate ? `${creationDate ? new Date(creationDate).toLocaleDateString() : '-'}` : ''}
+ + +
+ `).join(''); + } + function refresh() { if (currentBucket) { loadObjects();