2022-08-09 14:37:34 +02:00
import { showTemporaryTooltip } from '../modules/tippy.js' ;
2023-02-07 02:09:18 +08:00
import { toAbsoluteUrl } from '../utils.js' ;
2023-04-02 11:25:36 +02:00
import { clippie } from 'clippie' ;
2022-01-28 13:00:11 -08:00
2021-11-16 09:16:05 +01:00
const { copy _success , copy _error } = window . config . i18n ;
2020-02-08 00:03:42 +01:00
2023-10-18 17:16:06 +02:00
// Enable clipboard copy from HTML attributes. These properties are supported:
// - data-clipboard-text: Direct text to copy, has highest precedence
// - 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 17:03:11 +01:00
export function initGlobalCopyToClipboardListener ( ) {
2021-11-12 20:37:45 +08:00
document . addEventListener ( 'click' , ( e ) => {
2021-10-17 01:28:04 +08:00
let target = e . target ;
2023-10-18 17:16:06 +02:00
// In case <button data-clipboard-text><svg></button>, so we just search
2021-11-16 09:16:05 +01:00
// up to 3 levels for performance
2021-10-17 01:28:04 +08:00
for ( let i = 0 ; i < 3 && target ; i ++ ) {
2023-10-18 17:16:06 +02:00
let text = target . getAttribute ( 'data-clipboard-text' ) ;
if ( ! text && target . getAttribute ( 'data-clipboard-target' ) ) {
text = document . querySelector ( target . getAttribute ( 'data-clipboard-target' ) ) ? . value ;
}
if ( text && target . getAttribute ( 'data-clipboard-text-type' ) === 'url' ) {
text = toAbsoluteUrl ( text ) ;
2023-02-07 02:09:18 +08:00
}
2021-11-22 09:19:01 +01:00
2021-10-17 01:28:04 +08:00
if ( text ) {
e . preventDefault ( ) ;
2021-11-12 20:37:45 +08:00
( async ( ) => {
2023-04-02 11:25:36 +02:00
const success = await clippie ( text ) ;
2022-08-09 14:37:34 +02:00
showTemporaryTooltip ( target , success ? copy _success : copy _error ) ;
2021-11-12 20:37:45 +08:00
} ) ( ) ;
2021-10-17 01:28:04 +08:00
break ;
2021-05-30 21:15:57 +02:00
}
2023-10-18 17:16:06 +02:00
2021-10-17 01:28:04 +08:00
target = target . parentElement ;
}
} ) ;
2020-02-08 00:03:42 +01:00
}