feat: integrate openinary and migrate partner logos
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
'use client'
|
||||
|
||||
export default function openinaryLoader({ src, width, quality }: { src: string, width: number, quality?: number }) {
|
||||
// Handle already absolute openinary URLs
|
||||
let path = src;
|
||||
if (src.startsWith('https://media.ayris.tech/t/')) {
|
||||
// format: https://media.ayris.tech/t/w_800,h_800/{project_name}/img.jpg
|
||||
const parts = src.split('/');
|
||||
path = parts.slice(5).join('/');
|
||||
} else if (src.startsWith('https://media.ayris.tech/upload/')) {
|
||||
// format: https://media.ayris.tech/upload/{project_name}/img.jpg
|
||||
const parts = src.split('/');
|
||||
path = parts.slice(4).join('/');
|
||||
} else if (src.includes('res.cloudinary.com')) {
|
||||
// Correctly apply width & quality for unmigrated Cloudinary URLs
|
||||
// e.g. https://res.cloudinary.com/domain/image/upload/v1234/path.jpg
|
||||
// becomes: https://res.cloudinary.com/domain/image/upload/w_800,f_webp,q_75/v1234/path.jpg
|
||||
const parts = src.split('/upload/');
|
||||
if (parts.length === 2) {
|
||||
return `${parts[0]}/upload/w_${width},f_webp,q_${quality || 75}/${parts[1]}`;
|
||||
}
|
||||
return src;
|
||||
} else if (src.startsWith('http')) {
|
||||
// For other external URLs, we append the width as a query parameter to satisfy Next.js.
|
||||
const url = new URL(src);
|
||||
url.searchParams.set('w', width.toString());
|
||||
if (quality) {
|
||||
url.searchParams.set('q', quality.toString());
|
||||
}
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
// Clean up any leading slash
|
||||
if (path.startsWith('/')) {
|
||||
path = path.substring(1);
|
||||
}
|
||||
|
||||
return `https://media.ayris.tech/t/w_${width},f_webp,q_${quality || 75}/${path}`
|
||||
}
|
||||
Reference in New Issue
Block a user