xref: /plugin/copy2clipboard/script.js (revision eeae671557fe39eccade887add274f3a5a51b5fa)
14a476730SSchplurtz le DéboulonnéjQuery(function() {
24a476730SSchplurtz le Déboulonné  // Copyright (C) 2020 Schplurtz le Déboulonné.
34a476730SSchplurtz le Déboulonné  // Free to use for any purpose except dismantle the sky.
44a476730SSchplurtz le Déboulonné  if(!navigator.clipboard)
54a476730SSchplurtz le Déboulonné    return;
64a476730SSchplurtz le Déboulonné  var messageBox=function( id, txt ) {
74a476730SSchplurtz le Déboulonné    const body=document.getElementsByTagName('body')[0];
84a476730SSchplurtz le Déboulonné    const msg=document.createElement('div');
94a476730SSchplurtz le Déboulonné    msg.setAttribute('id', id );
104a476730SSchplurtz le Déboulonné    msg.classList.add('cp2clipmsg');
114a476730SSchplurtz le Déboulonné    const content = document.createTextNode(txt);
124a476730SSchplurtz le Déboulonné    msg.appendChild(content);
134a476730SSchplurtz le Déboulonné    body.appendChild(msg);
144a476730SSchplurtz le Déboulonné    window.setTimeout(function() {
154a476730SSchplurtz le Déboulonné        jQuery("#"+id).fadeTo(500, 0).slideUp(500, function(){
164a476730SSchplurtz le Déboulonné            jQuery(this).remove();
174a476730SSchplurtz le Déboulonné        });
184a476730SSchplurtz le Déboulonné    }, 1500);
1995208031SSchplurtz le Déboulonné  };
20*eeae6715SSchplurtz le Déboulonné  var response=async function(event) {
21*eeae6715SSchplurtz le Déboulonné    try {
22*eeae6715SSchplurtz le Déboulonné      let text=''
23*eeae6715SSchplurtz le Déboulonné      let lis=event.target.parentElement.getElementsByTagName('li');
24*eeae6715SSchplurtz le Déboulonné      if( lis.length ) {
25*eeae6715SSchplurtz le Déboulonné        for( let li of lis ) {
26*eeae6715SSchplurtz le Déboulonné          text += li.textContent + '\n';
27*eeae6715SSchplurtz le Déboulonné        }
28*eeae6715SSchplurtz le Déboulonné      }
29*eeae6715SSchplurtz le Déboulonné      else {
30*eeae6715SSchplurtz le Déboulonné        text = event.target.parentElement.textContent;
31*eeae6715SSchplurtz le Déboulonné      }
32*eeae6715SSchplurtz le Déboulonné      // Why replace ??? geshi adds an NBSP on each empty line. This is an issue
33*eeae6715SSchplurtz le Déboulonné      // with python, perl... when you want to run copied code, you get a
34*eeae6715SSchplurtz le Déboulonné      // syntax error "unexpected \xC2 character" or similar... So remove this
35*eeae6715SSchplurtz le Déboulonné      // crap. And yes it could remove a legitimate NBSP ; chances are low though.
36*eeae6715SSchplurtz le Déboulonné      text = text.replace(/^\u00A0$/gm, "");
37*eeae6715SSchplurtz le Déboulonné      await navigator.clipboard.writeText(text);
38*eeae6715SSchplurtz le Déboulonné      // event.target.textContent = 'Copied to clipboard'
39*eeae6715SSchplurtz le Déboulonné      console.log( "copié >>>" + text + "<<<" );
40*eeae6715SSchplurtz le Déboulonné      messageBox('cp2clipok', LANG.plugins.copy2clipboard.copied);
41*eeae6715SSchplurtz le Déboulonné    } catch (err) {
42*eeae6715SSchplurtz le Déboulonné      console.error('Failed to copy!', err);
43*eeae6715SSchplurtz le Déboulonné      messageBox('cp2clipnok', LANG.plugins.copy2clipboard.error);
44*eeae6715SSchplurtz le Déboulonné    }
45*eeae6715SSchplurtz le Déboulonné  };
46*eeae6715SSchplurtz le Déboulonné
474a476730SSchplurtz le Déboulonné  document.querySelectorAll('pre.code,pre.file').forEach(function(elem) {
484a476730SSchplurtz le Déboulonné    elem.classList.add('cp2clip');
494a476730SSchplurtz le Déboulonné    let cp = document.createElement('button');
504a476730SSchplurtz le Déboulonné    cp.setAttribute( 'title', LANG.plugins.copy2clipboard.title);
514a476730SSchplurtz le Déboulonné    //cp.appendChild(document.createTextNode('Copy to clipboard')) ;
524a476730SSchplurtz le Déboulonné    cp.classList.add('cp2clip');
534a476730SSchplurtz le Déboulonné    elem.appendChild(cp); // pre.appendChild
54*eeae6715SSchplurtz le Déboulonné    cp.addEventListener('click', response)
554a476730SSchplurtz le Déboulonné  })
5695208031SSchplurtz le Déboulonné});
574a476730SSchplurtz le Déboulonné
58