JAVASCRIPT   15

clip js

Guest on 4th July 2022 07:23:02 PM

  1. 'use strict';
  2.  
  3. class Main
  4.   {
  5.   constructor()
  6.     {
  7.       this.err  = E('err');
  8.       this.main = E('main').clr();
  9.     }
  10.  
  11.   run()
  12.     {
  13.       this.show();
  14.     }
  15.   show()
  16.     {
  17.       const e = this.main.clr();
  18.       const b = e.DIV;
  19.       b.BUTTON.text('STORE').on('click', _ => this.copy(_));
  20.       b.text('following does not work yet: ');
  21.       b.BUTTON.text('STAR').on('click', _ => 0);
  22.       b.BUTTON.text('DEL').on('click', _ => 0);
  23.       const j = localStorage.getItem('clip');
  24.       this.clips = j ? fromJ(j) : {};
  25.       if (!this.clips.b) this.clips.b=[];
  26.       if (!this.clips.c) this.clips.c=[];
  27.       this.dump(this.star = e.DIV, this.clips.b);
  28.       this.dump(this.clip = e.DIV, this.clips.c);
  29.     }
  30.   dump(e, l)
  31.     {
  32.       if (!l) return;
  33.       for (const c of l)
  34.         e.add(this.mk(c));
  35.     }
  36.   mk(c)
  37.     {
  38.       const e = E.SPAN;
  39.       e
  40.       .BUTTON
  41.       .pre()
  42.       .text(this.short(c))
  43.       .on('click', () =>
  44.         copyTextToClip(c)
  45.         .then(_ =>
  46.           setTimeout(_ => _.remove(), 1500, e.SPAN.text(_))
  47.         )
  48.       );
  49.       return e;
  50.     }
  51.   async copy()
  52.     {
  53.       const t = await copyTextFromClip();
  54.       this.clips.c.unshift(t);
  55.       this.put();
  56.       this.clip.prep(this.mk(t));
  57.     }
  58.   put()
  59.     {
  60.       localStorage.setItem('clip', JSON.stringify(this.clips));
  61.     }
  62.   short(s)
  63.     {
  64.       if (s.length<42) return s;
  65.       s = s.trim();
  66.       const l = s.length;
  67.       if (l<42) return s;
  68.       return `${s.substring(0,19)}...${s.substring(l-19)}`;
  69.     }
  70.   };
  71.  
  72. new Main().run();

Raw Paste


Login or Register to edit or fork this paste. It's free.