declare let $: any; /** * Copies text to clipboard then displays feedback to user. * Depends on Jquery. * * HTML *
* Text to be copied *
* * Javascript: * $('.mm-copy-wrapper').each( * function (){ * let triggerNode = $(this).find('.mm-copy-trigger'); * let textNode = $(this).find('.mm-copy-content'); * triggerNode.click(() => { * copyText(textNode.text(), true, triggerNode); * }); * } * ); * * @param text The text to be copied. * @param popover Boolean that indicates whether a popover is used as feedback. * @param timeout The time in millisecond =s to display feedback popover. * @returns {Function} A handler function. */ export function copyText( text, popover = true, triggerSelector = null, timeout = 750 ) { copyToClipboard(text); if (popover) { $(triggerSelector).popover({ template: '', content: 'Copied', placement: 'top', }); $(triggerSelector).popover('show'); setTimeout(() => { $(triggerSelector).popover('dispose'); }, timeout); } } /** * Copies text to the clipboard only. * @param text */ export function copyToClipboard(text) { const buffer = document.createElement('textarea'); buffer.value = text; buffer.setAttribute('readonly', ''); buffer.style.position = 'absolute'; buffer.style.left = '-99999px'; document.body.appendChild(buffer); buffer.select(); document.execCommand('copy'); document.body.removeChild(buffer); }