xref: /plugin/copy2clipboard/script.js (revision f20dc62b9dac85a43b880fddd8c94dcc4f634856)
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é  };
20eeae6715SSchplurtz le Déboulonné  var response=async function(event) {
21eeae6715SSchplurtz le Déboulonné    try {
22eeae6715SSchplurtz le Déboulonné      let text=''
23eeae6715SSchplurtz le Déboulonné      let lis=event.target.parentElement.getElementsByTagName('li');
24eeae6715SSchplurtz le Déboulonné      if( lis.length ) {
25eeae6715SSchplurtz le Déboulonné        for( let li of lis ) {
26eeae6715SSchplurtz le Déboulonné          text += li.textContent + '\n';
27eeae6715SSchplurtz le Déboulonné        }
28eeae6715SSchplurtz le Déboulonné      }
29eeae6715SSchplurtz le Déboulonné      else {
30eeae6715SSchplurtz le Déboulonné        text = event.target.parentElement.textContent;
31eeae6715SSchplurtz le Déboulonné      }
32eeae6715SSchplurtz le Déboulonné      // Why replace ??? geshi adds an NBSP on each empty line. This is an issue
33eeae6715SSchplurtz le Déboulonné      // with python, perl... when you want to run copied code, you get a
34eeae6715SSchplurtz le Déboulonné      // syntax error "unexpected \xC2 character" or similar... So remove this
35eeae6715SSchplurtz le Déboulonné      // crap. And yes it could remove a legitimate NBSP ; chances are low though.
36eeae6715SSchplurtz le Déboulonné      text = text.replace(/^\u00A0$/gm, "");
37eeae6715SSchplurtz le Déboulonné      await navigator.clipboard.writeText(text);
38*f20dc62bSSchplurtz le Déboulonné      // console.log( "copié >>>" + text + "<<<" );
39eeae6715SSchplurtz le Déboulonné      messageBox('cp2clipok', LANG.plugins.copy2clipboard.copied);
40eeae6715SSchplurtz le Déboulonné    } catch (err) {
41*f20dc62bSSchplurtz le Déboulonné      // console.error('Failed to copy!', err);
42eeae6715SSchplurtz le Déboulonné      messageBox('cp2clipnok', LANG.plugins.copy2clipboard.error);
43eeae6715SSchplurtz le Déboulonné    }
44eeae6715SSchplurtz le Déboulonné  };
45eeae6715SSchplurtz le Déboulonné
464a476730SSchplurtz le Déboulonné  document.querySelectorAll('pre.code,pre.file').forEach(function(elem) {
474a476730SSchplurtz le Déboulonné    elem.classList.add('cp2clip');
484a476730SSchplurtz le Déboulonné    let cp = document.createElement('button');
494a476730SSchplurtz le Déboulonné    cp.setAttribute( 'title', LANG.plugins.copy2clipboard.title);
504a476730SSchplurtz le Déboulonné    //cp.appendChild(document.createTextNode('Copy to clipboard')) ;
514a476730SSchplurtz le Déboulonné    cp.classList.add('cp2clip');
524a476730SSchplurtz le Déboulonné    elem.appendChild(cp); // pre.appendChild
53eeae6715SSchplurtz le Déboulonné    cp.addEventListener('click', response)
544a476730SSchplurtz le Déboulonné  })
5595208031SSchplurtz le Déboulonné});
564a476730SSchplurtz le Déboulonné
57