2022-08-09 15:37:34 +03:00
import { showTemporaryTooltip } from '../modules/tippy.js' ;
2023-02-06 21:09:18 +03:00
import { toAbsoluteUrl } from '../utils.js' ;
2023-04-02 12:25:36 +03:00
import { clippie } from 'clippie' ;
2022-01-29 00:00:11 +03:00
2021-11-16 11:16:05 +03:00
const { copy _success , copy _error } = window . config . i18n ;
2020-02-08 02:03:42 +03:00
2023-10-18 18:16:06 +03:00
// Enable clipboard copy from HTML attributes. These properties are supported:
2024-02-25 07:17:11 +03:00
// - data-clipboard-text: Direct text to copy
2023-10-18 18:16:06 +03:00
// - data-clipboard-target: Holds a selector for a <input> or <textarea> whose content is copied
// - data-clipboard-text-type: When set to 'url' will convert relative to absolute urls
2022-12-23 19:03:11 +03:00
export function initGlobalCopyToClipboardListener ( ) {
2024-02-25 07:17:11 +03:00
document . addEventListener ( 'click' , async ( e ) => {
const target = e . target . closest ( '[data-clipboard-text], [data-clipboard-target]' ) ;
if ( ! target ) return ;
2023-10-18 18:16:06 +03:00
2024-02-25 07:17:11 +03:00
e . preventDefault ( ) ;
2023-10-18 18:16:06 +03:00
2024-03-15 05:38:13 +03:00
let text = target . getAttribute ( 'data-clipboard-text' ) ;
if ( ! text ) {
2024-02-25 07:17:11 +03:00
text = document . querySelector ( target . getAttribute ( 'data-clipboard-target' ) ) ? . value ;
}
2021-11-12 15:37:45 +03:00
2024-02-25 07:17:11 +03:00
if ( text && target . getAttribute ( 'data-clipboard-text-type' ) === 'url' ) {
text = toAbsoluteUrl ( text ) ;
}
2023-10-18 18:16:06 +03:00
2024-02-25 07:17:11 +03:00
if ( text ) {
const success = await clippie ( text ) ;
showTemporaryTooltip ( target , success ? copy _success : copy _error ) ;
2021-10-16 20:28:04 +03:00
}
} ) ;
2020-02-08 02:03:42 +03:00
}