185 lines
6.3 KiB
JavaScript
185 lines
6.3 KiB
JavaScript
function initPopup() {
|
|
const modeDesktop = document.getElementById("mode-desktop");
|
|
const modeDirect = document.getElementById("mode-direct");
|
|
const btnUploadTab = document.getElementById("btn-upload-tab");
|
|
const btnUploadText = document.getElementById("btn-upload-text");
|
|
const btnUploadUrl = document.getElementById("btn-upload-url");
|
|
const urlInput = document.getElementById("url-input");
|
|
const statusCard = document.getElementById("status-card");
|
|
const statusSpinner = document.getElementById("status-spinner");
|
|
const statusText = document.getElementById("status-text");
|
|
const resultContainer = document.getElementById("result-container");
|
|
const resultLink = document.getElementById("result-link");
|
|
const btnCopyResult = document.getElementById("btn-copy-result");
|
|
const siteBadge = document.getElementById("site-badge");
|
|
const tabTitle = document.getElementById("tab-title");
|
|
const tabUrlPreview = document.getElementById("tab-url-preview");
|
|
|
|
let activeTabUrl = "";
|
|
|
|
// 1. Load settings asynchronously without blocking UI initialization
|
|
try {
|
|
chrome.storage.sync.get({ uploadMode: "desktop" }, (settings) => {
|
|
if (chrome.runtime.lastError || !settings) return;
|
|
if (settings.uploadMode === "direct") {
|
|
if (modeDirect) modeDirect.checked = true;
|
|
} else {
|
|
if (modeDesktop) modeDesktop.checked = true;
|
|
}
|
|
});
|
|
} catch (e) {}
|
|
|
|
if (modeDesktop) {
|
|
modeDesktop.addEventListener("change", () => {
|
|
chrome.storage.sync.set({ uploadMode: "desktop" });
|
|
});
|
|
}
|
|
if (modeDirect) {
|
|
modeDirect.addEventListener("change", () => {
|
|
chrome.storage.sync.set({ uploadMode: "direct" });
|
|
});
|
|
}
|
|
|
|
// 2. Query Tab Info immediately
|
|
try {
|
|
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
|
if (tabs && tabs[0]) {
|
|
populateTabInfo(tabs[0]);
|
|
} else {
|
|
chrome.tabs.query({ active: true, lastFocusedWindow: true }, (tabs2) => {
|
|
if (tabs2 && tabs2[0]) {
|
|
populateTabInfo(tabs2[0]);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} catch (e) {}
|
|
|
|
function populateTabInfo(tab) {
|
|
if (!tab) return;
|
|
activeTabUrl = tab.url || tab.pendingUrl || "";
|
|
if (tabTitle) tabTitle.textContent = tab.title || "Active Page";
|
|
if (tabUrlPreview) tabUrlPreview.textContent = activeTabUrl || "No URL available";
|
|
|
|
const isYouTube = activeTabUrl.includes("youtube.com") || activeTabUrl.includes("youtu.be");
|
|
if (isYouTube) {
|
|
if (siteBadge) {
|
|
siteBadge.textContent = "▶ YouTube";
|
|
siteBadge.classList.add("youtube");
|
|
}
|
|
if (btnUploadText) btnUploadText.textContent = "Upload YouTube Video to f0ckm";
|
|
if (btnUploadTab) btnUploadTab.classList.add("youtube-style");
|
|
} else {
|
|
if (siteBadge) {
|
|
siteBadge.textContent = "🌐 Web Page";
|
|
siteBadge.classList.remove("youtube");
|
|
}
|
|
if (btnUploadText) btnUploadText.textContent = "Upload Page URL to f0ckm";
|
|
if (btnUploadTab) btnUploadTab.classList.remove("youtube-style");
|
|
}
|
|
}
|
|
|
|
// 3. Upload Active Tab Button Click Handler
|
|
if (btnUploadTab) {
|
|
btnUploadTab.addEventListener("click", () => {
|
|
if (activeTabUrl && (activeTabUrl.startsWith("http://") || activeTabUrl.startsWith("https://"))) {
|
|
triggerUpload(activeTabUrl);
|
|
} else {
|
|
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
|
const tab = tabs ? tabs[0] : null;
|
|
const url = tab ? (tab.url || tab.pendingUrl) : "";
|
|
if (url && (url.startsWith("http://") || url.startsWith("https://"))) {
|
|
activeTabUrl = url;
|
|
triggerUpload(url);
|
|
} else {
|
|
showStatus("Could not get active tab URL.", false);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// 4. Custom pasted URL Upload Button Click Handler
|
|
if (btnUploadUrl) {
|
|
btnUploadUrl.addEventListener("click", () => {
|
|
const url = urlInput ? urlInput.value.trim() : "";
|
|
if (url) {
|
|
triggerUpload(url);
|
|
} else {
|
|
showStatus("Please enter a valid URL.", false);
|
|
}
|
|
});
|
|
}
|
|
|
|
if (urlInput) {
|
|
urlInput.addEventListener("keydown", (e) => {
|
|
if (e.key === "Enter" && btnUploadUrl) {
|
|
btnUploadUrl.click();
|
|
}
|
|
});
|
|
}
|
|
|
|
if (btnCopyResult) {
|
|
btnCopyResult.addEventListener("click", () => {
|
|
const linkUrl = resultLink ? resultLink.href : "";
|
|
if (linkUrl && linkUrl !== "#" && !linkUrl.endsWith("#")) {
|
|
navigator.clipboard.writeText(linkUrl);
|
|
btnCopyResult.textContent = "Copied!";
|
|
setTimeout(() => {
|
|
btnCopyResult.textContent = "Copy Link";
|
|
}, 1500);
|
|
}
|
|
});
|
|
}
|
|
|
|
function showStatus(text, loading = false) {
|
|
if (!statusCard) return;
|
|
statusCard.classList.remove("hidden");
|
|
if (statusText) statusText.textContent = text;
|
|
if (loading) {
|
|
if (statusSpinner) statusSpinner.classList.remove("hidden");
|
|
if (resultContainer) resultContainer.classList.add("hidden");
|
|
} else {
|
|
if (statusSpinner) statusSpinner.classList.add("hidden");
|
|
}
|
|
}
|
|
|
|
function showSuccessResult(finalUrl) {
|
|
if (!statusCard) return;
|
|
statusCard.classList.remove("hidden");
|
|
if (statusSpinner) statusSpinner.classList.add("hidden");
|
|
if (statusText) statusText.textContent = "Upload Successful! Click link to open:";
|
|
if (resultLink) {
|
|
resultLink.href = finalUrl;
|
|
resultLink.textContent = finalUrl;
|
|
}
|
|
if (resultContainer) resultContainer.classList.remove("hidden");
|
|
}
|
|
|
|
function triggerUpload(url) {
|
|
const currentMode = (modeDirect && modeDirect.checked) ? "direct" : "desktop";
|
|
|
|
if (currentMode === "desktop") {
|
|
showStatus("Sending URL to f0ckm desktop app...", true);
|
|
chrome.runtime.sendMessage({ action: "upload_url", url: url }, () => {
|
|
showStatus("URL sent to f0ckm app! Check system tray / notifications.", false);
|
|
});
|
|
} else {
|
|
showStatus("Sending URL to f0ckm API...", true);
|
|
chrome.runtime.sendMessage({ action: "upload_url", url: url }, (response) => {
|
|
if (response && response.resultUrl) {
|
|
showSuccessResult(response.resultUrl);
|
|
} else {
|
|
showStatus("URL Upload queued! Link copied to clipboard.", false);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
if (document.readyState === "loading") {
|
|
document.addEventListener("DOMContentLoaded", initPopup);
|
|
} else {
|
|
initPopup();
|
|
}
|