diff --git a/src/commands/clearSeach.ts b/src/commands/clearSearch.ts similarity index 100% rename from src/commands/clearSeach.ts rename to src/commands/clearSearch.ts diff --git a/src/commands/previewAsset.ts b/src/commands/previewAsset.ts index f402bcd..ab11e77 100644 --- a/src/commands/previewAsset.ts +++ b/src/commands/previewAsset.ts @@ -111,6 +111,25 @@ function registerPreview(context: vscode.ExtensionContext) { a:hover { text-decoration: underline; } + + .copy-btn { + background-color: var(--vscode-button-background); + color: var(--vscode-button-foreground); + border: none; + padding: 0.25rem 0.5rem; + border-radius: 4px; + cursor: pointer; + font-size: 0.85rem; + margin-left: 0.5rem; + } + + .copy-btn:hover { + background-color: var(--vscode-button-hoverBackground); + } + + .copy-btn:active { + background-color: var(--vscode-button-activeBackground); + } @@ -125,7 +144,7 @@ function registerPreview(context: vscode.ExtensionContext) {
-

Public ID: ${asset.public_id}

+

Public ID: ${asset.public_id}

Original filename: ${asset.filename}

Dimensions: ${asset.width} x ${asset.height}

Size: ${(asset.bytes / 1024).toFixed(2)} KB

@@ -156,8 +175,8 @@ function registerPreview(context: vscode.ExtensionContext) {
-

Original URL: ${asset.secure_url}

-

Optimized URL: ${asset.optimized_url}

+

Original URL: ${asset.secure_url}

+

Optimized URL: ${asset.optimized_url}

@@ -175,6 +194,21 @@ function registerPreview(context: vscode.ExtensionContext) { if (target) target.classList.add("active"); }); }); + + // Copy button functionality + const copyButtons = document.querySelectorAll(".copy-btn"); + copyButtons.forEach((btn) => { + btn.addEventListener("click", () => { + const textToCopy = btn.getAttribute("data-copy"); + navigator.clipboard.writeText(textToCopy).then(() => { + const originalText = btn.textContent; + btn.textContent = "Copied!"; + setTimeout(() => { + btn.textContent = originalText; + }, 2000); + }); + }); + }); diff --git a/src/commands/registerCommands.ts b/src/commands/registerCommands.ts index 6e2690b..0e8ec58 100644 --- a/src/commands/registerCommands.ts +++ b/src/commands/registerCommands.ts @@ -6,7 +6,7 @@ import registerLoadMore from "./loadMoreAssets"; import registerUpload from "./uploadWidget"; import registerClipboard from "./copyCommands"; import registerSwitchEnv from "./switchEnvironment"; -import registerClearSearch from "./clearSeach"; +import registerClearSearch from "./clearSearch"; import registerWelcomeScreen from "./welcomeScreen"; import { CloudinaryTreeDataProvider } from "../tree/treeDataProvider"; diff --git a/src/tree/cloudinaryItem.ts b/src/tree/cloudinaryItem.ts index 48e17c2..30eba59 100644 --- a/src/tree/cloudinaryItem.ts +++ b/src/tree/cloudinaryItem.ts @@ -66,7 +66,10 @@ class CloudinaryItem extends vscode.TreeItem { : cloudinary.url(data.public_id, { resource_type: assetType, type: data.type, - transformation: [{ fetch_format: 'auto' }, { quality: 'auto' }], + transformation: [ + { fetch_format: assetType === 'video' ? 'auto:video' : 'auto' }, + { quality: 'auto' } + ], }); data.optimized_url = optimizedUrl; @@ -130,7 +133,7 @@ class CloudinaryItem extends vscode.TreeItem { } function truncateLabel(label: string, maxLength: number = 20): string { - if (label.length <= maxLength) {return label;} + if (label.length <= maxLength) { return label; } const extension = label.includes('.') ? label.split('.').pop() : ''; const nameWithoutExt = extension ? label.slice(0, -(extension.length + 1)) : label; const truncatedName = nameWithoutExt.slice(0, maxLength - 3) + '...'; @@ -138,7 +141,7 @@ function truncateLabel(label: string, maxLength: number = 20): string { } function formatFileSize(bytes: number): string { - if (bytes === 0) {return '0 B';} + if (bytes === 0) { return '0 B'; } const k = 1024; const sizes = ['B', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(bytes) / Math.log(k));