1*add26278SSchplurtz le Déboulonné/* 2*add26278SSchplurtz le Déboulonné * Copy2clipboard - copy <pre> text to clipboard. 3*add26278SSchplurtz le Déboulonné * Copyright (C) 2020, 2021 Schplurtz le Déboulonné <Schplurtz@laposte.net> 4*add26278SSchplurtz le Déboulonné * 5*add26278SSchplurtz le Déboulonné * This program is free software; you can redistribute it and/or modify 6*add26278SSchplurtz le Déboulonné * it under the terms of the CECILL 2.1 free license. See files 7*add26278SSchplurtz le Déboulonné * LICENSE and LICENSE-fr for the details in the distribution directory or 8*add26278SSchplurtz le Déboulonné * http://cecill.info/licences/Licence_CeCILL_V2.1-en.html 9*add26278SSchplurtz le Déboulonné */ 104a476730SSchplurtz le DéboulonnéjQuery(function() { 114a476730SSchplurtz le Déboulonné if(!navigator.clipboard) 124a476730SSchplurtz le Déboulonné return; 134a476730SSchplurtz le Déboulonné var messageBox=function( id, txt ) { 144a476730SSchplurtz le Déboulonné const body=document.getElementsByTagName('body')[0]; 154a476730SSchplurtz le Déboulonné const msg=document.createElement('div'); 164a476730SSchplurtz le Déboulonné msg.setAttribute('id', id ); 174a476730SSchplurtz le Déboulonné msg.classList.add('cp2clipmsg'); 184a476730SSchplurtz le Déboulonné const content = document.createTextNode(txt); 194a476730SSchplurtz le Déboulonné msg.appendChild(content); 204a476730SSchplurtz le Déboulonné body.appendChild(msg); 214a476730SSchplurtz le Déboulonné window.setTimeout(function() { 224a476730SSchplurtz le Déboulonné jQuery("#"+id).fadeTo(500, 0).slideUp(500, function(){ 234a476730SSchplurtz le Déboulonné jQuery(this).remove(); 244a476730SSchplurtz le Déboulonné }); 254a476730SSchplurtz le Déboulonné }, 1500); 2695208031SSchplurtz le Déboulonné }; 27eeae6715SSchplurtz le Déboulonné var response=async function(event) { 28eeae6715SSchplurtz le Déboulonné try { 29eeae6715SSchplurtz le Déboulonné let text='' 30eeae6715SSchplurtz le Déboulonné let lis=event.target.parentElement.getElementsByTagName('li'); 31eeae6715SSchplurtz le Déboulonné if( lis.length ) { 32eeae6715SSchplurtz le Déboulonné for( let li of lis ) { 33eeae6715SSchplurtz le Déboulonné text += li.textContent + '\n'; 34eeae6715SSchplurtz le Déboulonné } 35eeae6715SSchplurtz le Déboulonné } 36eeae6715SSchplurtz le Déboulonné else { 37eeae6715SSchplurtz le Déboulonné text = event.target.parentElement.textContent; 38eeae6715SSchplurtz le Déboulonné } 39eeae6715SSchplurtz le Déboulonné // Why replace ??? geshi adds an NBSP on each empty line. This is an issue 40eeae6715SSchplurtz le Déboulonné // with python, perl... when you want to run copied code, you get a 41eeae6715SSchplurtz le Déboulonné // syntax error "unexpected \xC2 character" or similar... So remove this 42eeae6715SSchplurtz le Déboulonné // crap. And yes it could remove a legitimate NBSP ; chances are low though. 43eeae6715SSchplurtz le Déboulonné text = text.replace(/^\u00A0$/gm, ""); 44eeae6715SSchplurtz le Déboulonné await navigator.clipboard.writeText(text); 45f20dc62bSSchplurtz le Déboulonné // console.log( "copié >>>" + text + "<<<" ); 46eeae6715SSchplurtz le Déboulonné messageBox('cp2clipok', LANG.plugins.copy2clipboard.copied); 47eeae6715SSchplurtz le Déboulonné } catch (err) { 48f20dc62bSSchplurtz le Déboulonné // console.error('Failed to copy!', err); 49eeae6715SSchplurtz le Déboulonné messageBox('cp2clipnok', LANG.plugins.copy2clipboard.error); 50eeae6715SSchplurtz le Déboulonné } 51eeae6715SSchplurtz le Déboulonné }; 52eeae6715SSchplurtz le Déboulonné 534a476730SSchplurtz le Déboulonné document.querySelectorAll('pre.code,pre.file').forEach(function(elem) { 544a476730SSchplurtz le Déboulonné elem.classList.add('cp2clip'); 554a476730SSchplurtz le Déboulonné let cp = document.createElement('button'); 564a476730SSchplurtz le Déboulonné cp.setAttribute( 'title', LANG.plugins.copy2clipboard.title); 574a476730SSchplurtz le Déboulonné //cp.appendChild(document.createTextNode('Copy to clipboard')) ; 584a476730SSchplurtz le Déboulonné cp.classList.add('cp2clip'); 594a476730SSchplurtz le Déboulonné elem.appendChild(cp); // pre.appendChild 60eeae6715SSchplurtz le Déboulonné cp.addEventListener('click', response) 614a476730SSchplurtz le Déboulonné }) 6295208031SSchplurtz le Déboulonné}); 634a476730SSchplurtz le Déboulonné 64