From 0b7b8cea39486a2dee5ed7605aa7a4cf984d083e Mon Sep 17 00:00:00 2001 From: Keep Creating Online <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Sat, 11 Jan 2025 23:42:39 -0500 Subject: [PATCH] update --- src/components/video-modal.html | 94 +++++++++++++++++++ src/index.html | 66 +------------- src/js/app.js | 155 ++++++++++++++++++++++++-------- 3 files changed, 212 insertions(+), 103 deletions(-) create mode 100644 src/components/video-modal.html diff --git a/src/components/video-modal.html b/src/components/video-modal.html new file mode 100644 index 0000000..05e0351 --- /dev/null +++ b/src/components/video-modal.html @@ -0,0 +1,94 @@ + + diff --git a/src/index.html b/src/index.html index 81710a0..5bfe819 100644 --- a/src/index.html +++ b/src/index.html @@ -226,71 +226,9 @@ - -

seed. zap. subscribe. diff --git a/src/js/app.js b/src/js/app.js index 0ac86bc..0367998 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -29,27 +29,21 @@ class bitvidApp { this.speed = document.getElementById("speed"); this.downloaded = document.getElementById("downloaded"); - // Modal Elements - this.playerModal = document.getElementById("playerModal"); - this.modalVideo = document.getElementById("modalVideo"); - this.modalStatus = document.getElementById("modalStatus"); - this.modalProgress = document.getElementById("modalProgress"); - this.modalPeers = document.getElementById("modalPeers"); - this.modalSpeed = document.getElementById("modalSpeed"); - this.modalDownloaded = document.getElementById("modalDownloaded"); - this.closePlayerBtn = document.getElementById("closePlayer"); - - // Video Info Elements - this.videoTitle = document.getElementById("videoTitle"); - this.videoDescription = document.getElementById("videoDescription"); - this.videoTimestamp = document.getElementById("videoTimestamp"); - - // Creator Info Elements - this.creatorAvatar = document - .getElementById("creatorAvatar") - .querySelector("img"); - this.creatorName = document.getElementById("creatorName"); - this.creatorNpub = document.getElementById("creatorNpub"); + // Initialize these as null - they'll be set after modal loads + this.playerModal = null; + this.modalVideo = null; + this.modalStatus = null; + this.modalProgress = null; + this.modalPeers = null; + this.modalSpeed = null; + this.modalDownloaded = null; + this.closePlayerBtn = null; + this.videoTitle = null; + this.videoDescription = null; + this.videoTimestamp = null; + this.creatorAvatar = null; + this.creatorName = null; + this.creatorNpub = null; // Notification Containers this.errorContainer = document.getElementById("errorContainer"); @@ -58,21 +52,22 @@ class bitvidApp { this.pubkey = null; this.currentMagnetUri = null; - // ADDED FOR VERSIONING/PRIVATE/DELETE: - // If you created an in your HTML form: + // Private Video Checkbox this.isPrivateCheckbox = document.getElementById("isPrivate"); } - /** - * Initializes the application by setting up the Nostr client and loading videos. - */ - // app.js async init() { try { // Hide and reset player states - this.playerSection.style.display = "none"; - this.playerModal.style.display = "none"; - this.currentMagnetUri = null; + if (this.playerSection) { + this.playerSection.style.display = "none"; + } + + // Initialize modal first + await this.initModal(); + + // Then update modal element references + this.updateModalElements(); // Initialize Nostr and check login await nostrClient.init(); @@ -82,7 +77,7 @@ class bitvidApp { } this.setupEventListeners(); - disclaimerModal.show(); // Add this line here + disclaimerModal.show(); await this.loadVideos(); } catch (error) { console.error("Init failed:", error); @@ -90,6 +85,87 @@ class bitvidApp { } } + async initModal() { + try { + console.log("Starting modal initialization..."); + const response = await fetch("components/video-modal.html"); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const html = await response.text(); + console.log("Modal HTML loaded successfully"); + + const modalContainer = document.getElementById("modalContainer"); + if (!modalContainer) { + throw new Error("Modal container element not found!"); + } + + modalContainer.innerHTML = html; + console.log("Modal HTML inserted into DOM"); + + // Set up modal close handler + const closeButton = document.getElementById("closeModal"); + if (!closeButton) { + throw new Error("Close button element not found!"); + } + + closeButton.addEventListener("click", () => { + this.hideModal(); + }); + + // Set up scroll handler for nav show/hide + let lastScrollY = 0; + const modalNav = document.getElementById("modalNav"); + const playerModal = document.getElementById("playerModal"); + + if (!modalNav || !playerModal) { + throw new Error("Modal navigation elements not found!"); + } + + playerModal.addEventListener("scroll", (e) => { + const currentScrollY = e.target.scrollTop; + const shouldShowNav = + currentScrollY <= lastScrollY || currentScrollY < 50; + modalNav.style.transform = shouldShowNav + ? "translateY(0)" + : "translateY(-100%)"; + lastScrollY = currentScrollY; + }); + + console.log("Modal initialization completed successfully"); + return true; + } catch (error) { + console.error("Modal initialization failed:", error); + // You might want to show this error to the user + this.showError(`Failed to initialize video player: ${error.message}`); + return false; + } + } + + updateModalElements() { + // Update Modal Elements + this.playerModal = document.getElementById("playerModal"); + this.modalVideo = document.getElementById("modalVideo"); + this.modalStatus = document.getElementById("modalStatus"); + this.modalProgress = document.getElementById("modalProgress"); + this.modalPeers = document.getElementById("modalPeers"); + this.modalSpeed = document.getElementById("modalSpeed"); + this.modalDownloaded = document.getElementById("modalDownloaded"); + this.closePlayerBtn = document.getElementById("closeModal"); + + // Update Video Info Elements + this.videoTitle = document.getElementById("videoTitle"); + this.videoDescription = document.getElementById("videoDescription"); + this.videoTimestamp = document.getElementById("videoTimestamp"); + + // Update Creator Info Elements + this.creatorAvatar = document.getElementById("creatorAvatar"); + this.creatorName = document.getElementById("creatorName"); + this.creatorNpub = document.getElementById("creatorNpub"); + } + /** * Formats a timestamp into a "time ago" format. */ @@ -324,9 +400,10 @@ class bitvidApp { * Loads and displays videos from Nostr. */ async loadVideos() { + console.log("Starting loadVideos..."); try { const videos = await nostrClient.fetchVideos(); - this.log("Fetched videos (raw):", videos); + console.log("Raw videos from nostrClient:", videos); if (!videos) { this.log("No videos received"); @@ -351,9 +428,9 @@ class bitvidApp { if (displayedVideos.length === 0) { this.log("No valid videos found after filtering."); this.videoList.innerHTML = ` -

- No public videos available yet. Be the first to upload one! -

`; +

+ No public videos available yet. Be the first to upload one! +

`; return; } @@ -371,7 +448,7 @@ class bitvidApp { }); // Now render only the displayedVideos - this.renderVideoList(displayedVideos); + await this.renderVideoList(displayedVideos); this.log(`Rendered ${displayedVideos.length} videos successfully`); } catch (error) { this.log("Failed to fetch videos:", error); @@ -379,9 +456,9 @@ class bitvidApp { "An error occurred while loading videos. Please try again later." ); this.videoList.innerHTML = ` -

- No videos available at the moment. Please try again later. -

`; +

+ No videos available at the moment. Please try again later. +

`; } }