@ -4,18 +4,14 @@ import {convertImage} from '../utils.js';
const { i18n } = window . config ;
async function doCopy ( content , btn ) {
const success = await clippie ( content ) ;
showTemporaryTooltip ( btn , success ? i18n . copy _success : i18n . copy _error ) ;
}
export function initCopyContent ( ) {
const btn = document . getElementById ( 'copy-content' ) ;
if ( ! btn || btn . classList . contains ( 'disabled' ) ) return ;
btn . addEventListener ( 'click' , async ( ) => {
if ( btn . classList . contains ( 'is-loading' ) ) return ;
let content , isImage ;
let content ;
let isRasterImage = false ;
const link = btn . getAttribute ( 'data-link' ) ;
// when data-link is present, we perform a fetch. this is either because
@ -28,7 +24,7 @@ export function initCopyContent() {
const contentType = res . headers . get ( 'content-type' ) ;
if ( contentType . startsWith ( 'image/' ) && ! contentType . startsWith ( 'image/svg' ) ) {
isImage = true ;
isRaster Image = true ;
content = await res . blob ( ) ;
} else {
content = await res . text ( ) ;
@ -43,15 +39,14 @@ export function initCopyContent() {
content = Array . from ( lineEls ) . map ( ( el ) => el . textContent ) . join ( '' ) ;
}
try {
await doCopy ( content , btn ) ;
} catch {
if ( isImage ) { // convert image to png as last-resort as some browser only support png copy
try {
await doCopy ( await convertImage ( content , 'image/png' ) , btn ) ;
} catch {
showTemporaryTooltip ( btn , i18n . copy _error ) ;
}
// try copy original first, if that fails and it's an image, convert it to png
const success = await clippie ( content ) ;
if ( success ) {
showTemporaryTooltip ( btn , i18n . copy _success ) ;
} else {
if ( isRasterImage ) {
const success = await clippie ( await convertImage ( content , 'image/png' ) ) ;
showTemporaryTooltip ( btn , success ? i18n . copy _success : i18n . copy _error ) ;
} else {
showTemporaryTooltip ( btn , i18n . copy _error ) ;
}