mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 16:02:26 +00:00
Implement search functionality for profiles and videos
- Modified `js/index.js` to handle search queries, detecting npubs for direct navigation. - Added `views/search.html` and `js/searchView.js` to implement search UI and logic. - Implemented dual-search strategy: - Profile search using NIP-50 on Kind 0. - Video search using NIP-50 on Kind 30078 and local cache search (robustness). - Registered new search view in `js/viewManager.js`. - Verified with Playwright tests.
This commit is contained in:
1 parent
2515ed9e8e
commit
be5c39f6e8
4 files changed
+303
-71
No files matched your search
+70
-31
@@ -284,50 +284,89 @@ async function performProfileSearch(query, token) {
|
||||
}
|
||||
|
||||
async function performVideoSearch(query, token) {
|
||||
if (!nostrClient || !nostrClient.pool) return [];
|
||||
if (!nostrClient) return [];
|
||||
|
||||
const isHashtag = query.startsWith("#");
|
||||
const term = isHashtag ? query.slice(1) : query;
|
||||
const lowerTerm = term.toLowerCase();
|
||||
|
||||
const filter = {
|
||||
kinds: [30078],
|
||||
limit: 50
|
||||
};
|
||||
// 1. Local Search (Cache)
|
||||
const localMatches = [];
|
||||
if (nostrClient.activeMap instanceof Map) {
|
||||
for (const video of nostrClient.activeMap.values()) {
|
||||
if (!video || video.deleted) continue;
|
||||
|
||||
if (isHashtag) {
|
||||
filter["#t"] = [term];
|
||||
} else {
|
||||
filter.search = term;
|
||||
}
|
||||
let matches = false;
|
||||
if (isHashtag) {
|
||||
// Check tags for 't'
|
||||
if (Array.isArray(video.tags)) {
|
||||
matches = video.tags.some(t => Array.isArray(t) && t[0] === "t" && t[1].toLowerCase() === lowerTerm);
|
||||
}
|
||||
} else {
|
||||
// Check title/description
|
||||
const title = video.title ? video.title.toLowerCase() : "";
|
||||
const desc = video.description ? video.description.toLowerCase() : "";
|
||||
if (title.includes(lowerTerm) || desc.includes(lowerTerm)) {
|
||||
matches = true;
|
||||
}
|
||||
}
|
||||
|
||||
const relays = nostrClient.relays || [];
|
||||
if (relays.length === 0) return [];
|
||||
|
||||
let events = [];
|
||||
try {
|
||||
events = await nostrClient.pool.list(relays, [filter]);
|
||||
} catch (e) {
|
||||
devLogger.warn("Video search error", e);
|
||||
return [];
|
||||
if (matches) {
|
||||
localMatches.push(video);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (currentSearchToken !== token) return [];
|
||||
|
||||
const { convertEventToVideo } = await import("./nostr/index.js");
|
||||
// 2. Relay Search
|
||||
let relayVideos = [];
|
||||
const relays = nostrClient.relays || [];
|
||||
|
||||
const videos = events.map(evt => {
|
||||
const vid = convertEventToVideo(evt);
|
||||
if (vid.invalid) return null;
|
||||
return vid;
|
||||
}).filter(Boolean);
|
||||
if (relays.length > 0 && nostrClient.pool) {
|
||||
const filter = {
|
||||
kinds: [30078],
|
||||
limit: 50
|
||||
};
|
||||
|
||||
// Deduplicate by ID (or root)
|
||||
const unique = new Map();
|
||||
for (const v of videos) {
|
||||
if (!unique.has(v.id)) {
|
||||
unique.set(v.id, v);
|
||||
if (isHashtag) {
|
||||
filter["#t"] = [term];
|
||||
} else {
|
||||
filter.search = term;
|
||||
}
|
||||
|
||||
try {
|
||||
const events = await nostrClient.pool.list(relays, [filter]);
|
||||
|
||||
if (currentSearchToken === token) {
|
||||
const { convertEventToVideo } = await import("./nostr/index.js");
|
||||
relayVideos = events.map(evt => {
|
||||
const vid = convertEventToVideo(evt);
|
||||
if (vid.invalid) return null;
|
||||
return vid;
|
||||
}).filter(Boolean);
|
||||
}
|
||||
} catch (e) {
|
||||
devLogger.warn("Video search error", e);
|
||||
// Continue with local matches if relay search fails
|
||||
}
|
||||
}
|
||||
|
||||
return Array.from(unique.values());
|
||||
if (currentSearchToken !== token) return [];
|
||||
|
||||
// Deduplicate by ID
|
||||
const unique = new Map();
|
||||
|
||||
// Add local matches first
|
||||
for (const v of localMatches) {
|
||||
if (!unique.has(v.id)) unique.set(v.id, v);
|
||||
}
|
||||
|
||||
// Add relay matches (overwriting local if needed, or ignoring duplicates)
|
||||
for (const v of relayVideos) {
|
||||
if (!unique.has(v.id)) unique.set(v.id, v);
|
||||
}
|
||||
|
||||
// Sort by creation date (newest first)
|
||||
return Array.from(unique.values()).sort((a, b) => (b.created_at || 0) - (a.created_at || 0));
|
||||
}
|
||||
+233
@@ -464,3 +464,236 @@
|
||||
127.0.0.1 - - [16/Jan/2026 22:58:17] "GET /views/search.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [16/Jan/2026 22:58:17] "GET /components/disclaimer.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [16/Jan/2026 22:58:17] "GET /views/search.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /index.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/nostrToolsBootstrap.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /css/tailwind.generated.css?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/accessControl.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/config.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/webtorrent.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/lists.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/disclaimer.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/bootstrap.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/index.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/viewManager.js?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/utils/logger.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/config.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/adminListStore.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /config/instance-config.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/nostr/toolkit.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/webtorrent.min.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/constants.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /js/utils/safeDecode.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /assets/svg/default-profile.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /assets/svg/filter.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:58] "GET /assets/svg/search.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/app.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/viewManager.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/nostrService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/r2Service.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/hashtagPreferencesService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/components/staticModalAccessibility.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /config/validate-config.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /config/asset-version.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/bufferPolyfill.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/applicationContext.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/designSystem.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/authProviders/index.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/themeController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostrClientFacade.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/userBlocks.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/authService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/accessControl.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/relayManager.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/channelProfile.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostrEventSchemas.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/bootstrap.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/subscriptions.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostrClientRegistry.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/r2.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostrPublish.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostrToolsBootstrap.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/index.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/storage/r2-s3.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/storage/r2-mgmt.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/formatters.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/videoNotePayload.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/moderationService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/storageService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/directMessagesStore.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/state/appState.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/components/modalAccessibility.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/magnetUtils.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/webtorrent.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostrViewEventsFacade.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/playbackUtils.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/videoTags.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/urlHealthObserver.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/cardSourceVisibility.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/profileMedia.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/gridHealth.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/lists.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/r2-quick.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/overlay/popoverEngine.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/sidebarLoading.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/feedEngine/index.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/watchHistoryDebug.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/watchHistoryService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/components/videoMenuRenderers.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/viewCounter.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/domUtils.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/components/tagPreferenceMenu.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/reactionCounter.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/loginModalController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/payments/zapSplit.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/pointer.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/videoPointer.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/videoDeduper.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/magnetValidators.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/profileBatchFetcher.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/serviceWorkerFallbackMessages.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/state/cache.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/utils/videoTimestamps.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/applicationBootstrap.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/videoModalCommentController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/moderationActionController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/authProviders/nsec.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/authProviders/nip46.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/authProviders/nip07.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/trustBootstrap.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/services/authProviders/generate.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/defaultClient.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/nip46Client.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/views/VideoListView.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/moderationUiHelpers.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/components/VideoCard.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/ui/moderationCopy.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/feedEngine/stages.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/payments/zapSharedState.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/payments/lnurl.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/payments/nwcClient.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/payments/zapNotifications.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/client.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/payments/platformAddress.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/nip07Permissions.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/nip71.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/watchHistory.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/watchHistoryBindings.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/viewEvents.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/reactionEvents.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /vendor/crypto-helpers.bundle.min.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/commentEvents.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/magnet.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/magnetShared.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/nostr/viewEventBindings.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:38:59] "GET /js/dom/cardObserver.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/magnets.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/designSystem/metrics.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/feedEngine/sorters.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/feedEngine/engine.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/feedEngine/sources.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/overlay/overlayRoot.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /vendor/floating-ui.dom.bundle.min.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/feedEngine/watchHistoryFeed.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/utils/hex.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/nostr/publishHelpers.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/utils/qrcode.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/payments/zapReceiptValidator.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/payments/platformFee.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/utils/storage.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/state/profileSettingsStore.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/utils/mediaLoader.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/historyView.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/watchHistoryController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/services/watchHistoryTelemetry.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/services/playbackService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/services/discussionCountService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/services/commentThreadService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/services/nwcSettingsService.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/profileIdentityController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/appChromeController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/videoListViewController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/profileModalController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/ModalManager.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/tagPillList.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/moreMenuController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/feedEngine/utils.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/payments/zapMessages.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/nostr/countDiagnostics.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/nostr/maxListenerDiagnostics.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/nostr/sessionActor.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/videoEventUtils.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/nostrWatchHistoryFacade.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/designSystem/dynamicStyles.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/nwcSettings.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/RevertModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/VideoModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/initEditModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/initUploadModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/initDeleteModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/EventDetailsModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/zapController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/nip71FormManager.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/UploadModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/EditModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/DeleteModal.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/ambientBackground.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/video-modal/commentsController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/video-modal/reactionsController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/video-modal/similarContentController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/video-modal/moderationController.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/utils/torrentHash.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/video-modal/utils/commentAvatar.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /js/ui/components/SimilarContentCard.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/application-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/feature-request-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/general-feedback-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/content-appeals-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/login-modal.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/bug-fix-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/upload-modal.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/video-modal.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/edit-video-modal.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/profile-modal.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/iframe_forms/iframe-application-form.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/iframe_forms/iframe-feedback-form.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/iframe_forms/iframe-request-form.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/iframe_forms/iframe-content-appeals-form.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/iframe_forms/iframe-bug-fix-form.html HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/sidebar.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /components/iframe_forms/theme-sync.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /css/tailwind.generated.css HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:00] "GET /views/most-recent-videos.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/recent-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/history-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/subscriptions-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/ellipsis.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/explore-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/about-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/guidelines-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/getting-started-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/roadmap-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/upload-content-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/blog-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/nostr-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/beta-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/beacon-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/github-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/links-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/ipns-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /assets/svg/dns-icon.svg HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /js/sidebar.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /js/index.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/login-modal.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/application-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/general-feedback-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/feature-request-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/content-appeals-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/bug-fix-form.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/disclaimer.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /views/search.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /components/sidebar.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /js/disclaimer.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:01] "GET /js/searchView.js HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:02] "GET /views/search.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:02] "GET /components/disclaimer.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [17/Jan/2026 03:39:02] "GET /views/search.html?v=2024.11.09 HTTP/1.1" 200 -
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 129 KiB |
@@ -1,40 +0,0 @@
|
||||
from playwright.sync_api import sync_playwright, expect
|
||||
|
||||
def test_search_functionality():
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch(headless=True)
|
||||
page = browser.new_page()
|
||||
|
||||
# Navigate to the home page
|
||||
page.goto("http://localhost:3000/index.html")
|
||||
|
||||
# Verify search input exists
|
||||
search_input = page.locator("#headerSearchInput")
|
||||
expect(search_input).to_be_visible()
|
||||
|
||||
# Type a query
|
||||
search_input.fill("test")
|
||||
search_input.press("Enter")
|
||||
|
||||
# Wait for hash change and search results view
|
||||
page.wait_for_timeout(2000) # Give it a moment to load view
|
||||
|
||||
# Verify the hash updated
|
||||
assert "#view=search&q=test" in page.url
|
||||
|
||||
# Verify the search title updated
|
||||
title_locator = page.locator("#searchTitle")
|
||||
expect(title_locator).to_be_visible()
|
||||
expect(title_locator).to_have_text('Search Results for "test"')
|
||||
|
||||
# Verify sections exist
|
||||
expect(page.locator("#searchChannelList")).to_be_visible()
|
||||
expect(page.locator("#searchVideoList")).to_be_visible()
|
||||
|
||||
# Take a screenshot
|
||||
page.screenshot(path="verification/search_view.png", full_page=True)
|
||||
|
||||
browser.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_search_functionality()
|
||||
Reference in new issue
Block a user