diff --git a/README.md b/README.md index 529bc5d..3817dd1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# LnMe - your friendly ⚡ payment page +





+

LnMe - your friendly payment page



LnMe is a personal Bitcoin Lightning payment page/widget and self-hosted [Lightning Address](https://lightningaddress.com/) server. diff --git a/files/assets/favicon.svg b/files/assets/favicon.svg new file mode 100644 index 0000000..4f1990f --- /dev/null +++ b/files/assets/favicon.svg @@ -0,0 +1,20 @@ + + + lnme-icon-no-padding + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/files/assets/icon.svg b/files/assets/icon.svg new file mode 100644 index 0000000..930b4f3 --- /dev/null +++ b/files/assets/icon.svg @@ -0,0 +1,27 @@ + + + lnme-icon-rect + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/files/assets/zap.svg b/files/assets/zap.svg deleted file mode 100644 index 5103032..0000000 --- a/files/assets/zap.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/files/root/index.html b/files/root/index.html index 722e815..c6efd29 100644 --- a/files/root/index.html +++ b/files/root/index.html @@ -6,9 +6,9 @@ - + - ⚡ Send me some Sats + Send me some Sats +
diff --git a/icon/lnme-icon-bnw.png b/icon/lnme-icon-bnw.png new file mode 100644 index 0000000..58d2899 Binary files /dev/null and b/icon/lnme-icon-bnw.png differ diff --git a/icon/lnme-icon-bnw.svg b/icon/lnme-icon-bnw.svg new file mode 100644 index 0000000..840306b --- /dev/null +++ b/icon/lnme-icon-bnw.svg @@ -0,0 +1,27 @@ + + + lnme-icon-bnw + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icon/lnme-icon-bnw@2x.png b/icon/lnme-icon-bnw@2x.png new file mode 100644 index 0000000..0fe12f5 Binary files /dev/null and b/icon/lnme-icon-bnw@2x.png differ diff --git a/icon/lnme-icon-no-padding.png b/icon/lnme-icon-no-padding.png new file mode 100644 index 0000000..aca72e7 Binary files /dev/null and b/icon/lnme-icon-no-padding.png differ diff --git a/icon/lnme-icon-no-padding.svg b/icon/lnme-icon-no-padding.svg new file mode 100644 index 0000000..4f1990f --- /dev/null +++ b/icon/lnme-icon-no-padding.svg @@ -0,0 +1,20 @@ + + + lnme-icon-no-padding + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icon/lnme-icon-no-padding@2x.png b/icon/lnme-icon-no-padding@2x.png new file mode 100644 index 0000000..e721ad9 Binary files /dev/null and b/icon/lnme-icon-no-padding@2x.png differ diff --git a/icon/lnme-icon-rect.png b/icon/lnme-icon-rect.png new file mode 100644 index 0000000..591bdfb Binary files /dev/null and b/icon/lnme-icon-rect.png differ diff --git a/icon/lnme-icon-rect.svg b/icon/lnme-icon-rect.svg new file mode 100644 index 0000000..930b4f3 --- /dev/null +++ b/icon/lnme-icon-rect.svg @@ -0,0 +1,27 @@ + + + lnme-icon-rect + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icon/lnme-icon-rect@2x.png b/icon/lnme-icon-rect@2x.png new file mode 100644 index 0000000..180aeac Binary files /dev/null and b/icon/lnme-icon-rect@2x.png differ diff --git a/icon/lnme-icon-rrect.png b/icon/lnme-icon-rrect.png new file mode 100644 index 0000000..e747a7b Binary files /dev/null and b/icon/lnme-icon-rrect.png differ diff --git a/icon/lnme-icon-rrect.svg b/icon/lnme-icon-rrect.svg new file mode 100644 index 0000000..de11e55 --- /dev/null +++ b/icon/lnme-icon-rrect.svg @@ -0,0 +1,27 @@ + + + lnme-icon-rrect + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icon/lnme-icon-rrect@2x.png b/icon/lnme-icon-rrect@2x.png new file mode 100644 index 0000000..cbf9662 Binary files /dev/null and b/icon/lnme-icon-rrect@2x.png differ diff --git a/icon/lnme-icon.png b/icon/lnme-icon.png new file mode 100644 index 0000000..8221d4e Binary files /dev/null and b/icon/lnme-icon.png differ diff --git a/icon/lnme-icon.sketch b/icon/lnme-icon.sketch new file mode 100644 index 0000000..25aa1c3 Binary files /dev/null and b/icon/lnme-icon.sketch differ diff --git a/icon/lnme-icon.svg b/icon/lnme-icon.svg new file mode 100644 index 0000000..63fe0d7 --- /dev/null +++ b/icon/lnme-icon.svg @@ -0,0 +1,20 @@ + + + lnme-icon + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icon/lnme-icon@2x.png b/icon/lnme-icon@2x.png new file mode 100644 index 0000000..9735ab4 Binary files /dev/null and b/icon/lnme-icon@2x.png differ diff --git a/rice-box.go b/rice-box.go index e867df9..31c08af 100644 --- a/rice-box.go +++ b/rice-box.go @@ -12,15 +12,15 @@ func init() { // define files file2 := &embedded.EmbeddedFile{ Filename: "index.html", - FileModTime: time.Unix(1630056291, 0), + FileModTime: time.Unix(1638532473, 0), - Content: string("\n\n \n \n\n \n \n\n \n\n ⚡ Send me some Sats\n \n \n \n
\n
\n

\n Send me
\n Sats\n
\n for\n
\n \n

\n\n \n\n

\n Prefer onchain Bitcoin? Click here!\n

\n\n
\n
\n
\n \n
\n \n
\n
\n
\n\n
\n \n \n \n \n \n
\n
\n
\n\n \n \n \n\n"), + Content: string("\n\n \n \n\n \n \n\n \n\n Send me some Sats\n \n \n \n \n
\n
\n

\n Send me
\n Sats\n
\n for\n
\n \n

\n\n \n\n

\n Prefer onchain Bitcoin? Click here!\n

\n\n
\n
\n
\n \n
\n \n
\n
\n
\n\n
\n \n \n \n \n \n
\n
\n
\n\n \n \n \n\n"), } // define dirs dir1 := &embedded.EmbeddedDir{ Filename: "", - DirModTime: time.Unix(1630056291, 0), + DirModTime: time.Unix(1637488994, 0), ChildFiles: []*embedded.EmbeddedFile{ file2, // "index.html" @@ -33,7 +33,7 @@ func init() { // register embeddedBox embedded.RegisterEmbeddedBox(`files/root`, &embedded.EmbeddedBox{ Name: `files/root`, - Time: time.Unix(1630056291, 0), + Time: time.Unix(1637488994, 0), Dirs: map[string]*embedded.EmbeddedDir{ "": dir1, }, @@ -47,32 +47,39 @@ func init() { // define files file4 := &embedded.EmbeddedFile{ + Filename: "favicon.svg", + FileModTime: time.Unix(1637526634, 0), + + Content: string("\n\n lnme-icon-no-padding\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"), + } + file5 := &embedded.EmbeddedFile{ + Filename: "icon.svg", + FileModTime: time.Unix(1638532495, 0), + + Content: string("\n\n lnme-icon-rect\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"), + } + file6 := &embedded.EmbeddedFile{ Filename: "lnme.css", - FileModTime: time.Unix(1625995607, 0), + FileModTime: time.Unix(1637488994, 0), Content: string("@keyframes slideIn{0%{opacity:0;transform:scale(.85)}70%{opacity:1;transform:scale(1.03)}100%{transform:scale(1)}}@keyframes slideOut{from{opacity:1}to{opacity:0}}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(180deg)}}.jPopup{position:absolute;top:0;right:0;bottom:0;left:0;z-index:9999;max-width:100%;padding:50px 15px 15px;box-sizing:border-box}.jPopup:after{content:'';position:fixed;top:0;right:0;bottom:0;left:0;z-index:9998;background:#fff}.jPopup>.jCloseBtn{position:absolute;right:1rem;top:1rem;z-index:9999;outline:0;border:0;box-sizing:border-box;cursor:pointer;width:5rem;height:5rem;background:#f2f2f2;border-radius:50%}.jPopup>.jCloseBtn>.graphicIcon{width:2rem;height:2rem;position:relative;margin:0 auto}.jPopup>.jCloseBtn>.graphicIcon:after,.jPopup>.jCloseBtn>.graphicIcon:before{position:absolute;left:.9rem;content:'';height:2rem;width:.3rem;background-color:#adadad;border-radius:.5rem}.jPopup>.jCloseBtn>.graphicIcon:before{-ms-transform:rotate(45deg);transform:rotate(45deg)}.jPopup>.jCloseBtn>.graphicIcon:after{-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.jPopup>.jCloseBtn:hover>.graphicIcon{animation:rotate 250ms ease-in}.jPopup>.jCloseBtn:active{-ms-transform:scale(.95);transform:scale(.95)}.jPopup>.content{top:50%;left:1.5rem;right:1.5rem;position:absolute;z-index:9999;-ms-transform:translateY(-50%);transform:translateY(-50%)}@media screen and (min-width:680px){.jPopup{padding:8rem 3rem 3rem}.jPopup>.jCloseBtn{width:6rem;height:6rem;right:2rem;top:2rem}.jPopup>.jCloseBtn:after{content:'(esc)';position:absolute;top:6.5rem;left:50%;font-size:1.1rem;-ms-transform:translateX(-50%);transform:translateX(-50%);color:#adadad;pointer-events:none}.jPopup>.jCloseBtn>.graphicIcon{width:3rem;height:3rem}.jPopup>.jCloseBtn>.graphicIcon:after,.jPopup>.jCloseBtn>.graphicIcon:before{left:1.4rem;height:3rem}.jPopup>.content{left:3rem;right:3rem}}.jPopupOpen,.jPopupOpen body{overflow:hidden}.jPopupOpen .jPopup{animation:slideIn .5s cubic-bezier(.34,.34,.26,.99)}.jPopupClosed .jPopup{animation:slideOut 250ms ease-in}\n\n.jPopup > .jCloseBtn {\n z-index:10000;\n}\n\n.jPopup .lnme-payment-request {\n width: 220px;\n margin: 0 auto;\n text-align: center;\n}\n.jPopup .lnme-payment-request h1, .jPopup .lnme-payment-request h2 {\n text-align: center;\n}\n\n.jPopup .lnme-details {\n width: 200px;\n overflow: hidden;\n}\n\n.jPopup .lnme-copy {\n cursor: pointer;\n display: inline;\n}\n"), } - file5 := &embedded.EmbeddedFile{ + file7 := &embedded.EmbeddedFile{ Filename: "lnme.js", - FileModTime: time.Unix(1630015385, 0), + FileModTime: time.Unix(1637701040, 0), Content: string("'use strict';\n/*! https://github.com/robiveli/jpopup */\n!function(e,n){void 0===e&&void 0!==window&&(e=window),\"function\"==typeof define&&define.amd?define([],function(){return e.jPopup=n()}):\"object\"==typeof module&&module.exports?module.exports=n():e.jPopup=n()}(this,function(){\"use strict\";var n,o,t=function(){var e=0\\n \\n
'.concat(e,\"
\\n
\")))},s=function(e){1==e?window.location.hash=o:window.history.back()},d=function(e){27==e.keyCode&&t.prototype.close(!0)},c=function(){window.location.hash!==o&&t.prototype.close(!1)},a=function(){document.getElementsByClassName(\"jCloseBtn\")[0].addEventListener(\"click\",function(){t.prototype.close(!0)}),window.addEventListener(\"keydown\",d),1==n&&window.addEventListener(\"hashchange\",c)},u=document.querySelector(\"html\");return t.prototype={close:function(e){u.classList.add(\"jPopupClosed\"),1==n&&(e&&s(!1),window.removeEventListener(\"hashchange\",c)),window.removeEventListener(\"keydown\",d),document.getElementsByClassName(\"jPopup\")[0].addEventListener(\"animationend\",function(e){e.target.parentNode.removeChild(this),u.classList.remove(\"jPopupClosed\"),u.classList.remove(\"jPopupOpen\")})},open:function(e){t(e)}},t});\n\n/*\n https://github.com/nimiq/qr-creator\n jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */\n'use strict';let G=null;class H{}H.render=function(w,B){G(w,B)};self.QrCreator=H;\n(function(w){function B(t,c,a,e){var b={},h=w(a,c);h.u(t);h.J();e=e||0;var r=h.h(),d=h.h()+2*e;b.text=t;b.level=c;b.version=a;b.O=d;b.a=function(b,a){b-=e;a-=e;return 0>b||b>=r||0>a||a>=r?!1:h.a(b,a)};return b}function C(t,c,a,e,b,h,r,d,g,x){function u(b,a,f,c,d,r,g){b?(t.lineTo(a+r,f+g),t.arcTo(a,f,c,d,h)):t.lineTo(a,f)}r?t.moveTo(c+h,a):t.moveTo(c,a);u(d,e,a,e,b,-h,0);u(g,e,b,c,b,0,-h);u(x,c,b,c,a,h,0);u(r,c,a,e,a,0,h)}function z(t,c,a,e,b,h,r,d,g,x){function u(b,a,c,d){t.moveTo(b+c,a);t.lineTo(b,\na);t.lineTo(b,a+d);t.arcTo(b,a,b+c,a,h)}r&&u(c,a,h,h);d&&u(e,a,-h,h);g&&u(e,b,-h,-h);x&&u(c,b,h,-h)}function A(t,c){var a=c.fill;if(\"string\"===typeof a)t.fillStyle=a;else{var e=a.type,b=a.colorStops;a=a.position.map((b)=>Math.round(b*c.size));if(\"linear-gradient\"===e)var h=t.createLinearGradient.apply(t,a);else if(\"radial-gradient\"===e)h=t.createRadialGradient.apply(t,a);else throw Error(\"Unsupported fill\");b.forEach(([b,a])=>{h.addColorStop(b,a)});t.fillStyle=h}}function y(t,c){a:{var a=c.text,e=\nc.v,b=c.N,h=c.K,r=c.P;b=Math.max(1,b||1);for(h=Math.min(40,h||40);b<=h;b+=1)try{var d=B(a,e,b,r);break a}catch(J){}d=void 0}if(!d)return null;a=t.getContext(\"2d\");c.background&&(a.fillStyle=c.background,a.fillRect(c.left,c.top,c.size,c.size));e=d.O;h=c.size/e;a.beginPath();for(r=0;r>>7-b%8&1)},put:function(b,h){for(var a=0;a>>h-a-1&1))},f:function(){return a},m:function(b){var h=Math.floor(a/8);c.length<=h&&c.push(0);b&&(c[h]|=128>>>a%8);a+=1}};return e}function C(c,a){function e(b,h){for(var a=-1;7>=a;a+=1)if(!(-1>=b+a||d<=b+a))for(var c=-1;7>=c;c+=1)-1>=h+c||d<=h+c||(r[b+a][h+c]=0<=a&&6>=a&&(0==c||6==c)||0<=c&&6>=c&&(0==a||6==a)||2<=a&&4>=a&&2<=c&&4>=c?!0:!1)}function b(b,a){for(var f=d=4*c+17,k=Array(f),m=0;m<\nf;m+=1){k[m]=Array(f);for(var p=0;p=n;n+=1)for(var l=-2;2>=l;l+=1)r[p+n][q+l]=-2==n||2==n||-2==l||2==l||0==n&&0==l}for(f=8;fk;k+=1)m=!b&&1==(f>>k&1),r[6>k?k:8>k?k+1:d-15+k][8]=m,r[8][8>k?d-k-1:9>k?15-k:14-k]=m;r[d-8][8]=!b;if(7<=\nc){f=y.A(c);for(k=0;18>k;k+=1)m=!b&&1==(f>>k&1),r[Math.floor(k/3)][k%3+d-8-3]=m;for(k=0;18>k;k+=1)m=!b&&1==(f>>k&1),r[k%3+d-8-3][Math.floor(k/3)]=m}if(null==g){b=t.I(c,h);f=B();for(k=0;k8*m)throw Error(\"code length overflow. (\"+f.f()+\">\"+8*m+\")\");for(f.f()+4<=8*m&&f.put(0,4);0!=f.f()%8;)f.m(!1);for(;!(f.f()>=8*m);){f.put(236,8);if(f.f()>=8*m)break;f.put(17,8)}var u=0;m=k=0;p=Array(b.length);\nq=Array(b.length);for(n=0;nn;n+=1)null==r[k][q-n]&&(l=!1,p>>m&1)),a(k,q-n)&&(l=!l),r[k][q-n]=l,--m,-1==m&&(p+=1,m=7));k+=f;if(0>k||d<=k){k-=f;f=-f;break}}}var h=A[a],r=null,d=0,g=null,x=[],u={u:function(b){b=w(b);x.push(b);g=null},a:function(b,a){if(0>b||d<=b||0>a||d<=a)throw Error(b+\",\"+a);return r[b][a]},h:function(){return d},J:function(){for(var a=0,h=0,c=0;8>c;c+=1){b(!0,c);var d=y.D(u);if(0==c||a>d)a=d,h=c}b(!1,h)}};return u}\nfunction z(c,a){if(\"undefined\"==typeof c.length)throw Error(c.length+\"/\"+a);var e=function(){for(var b=0;bb.b()-a.b())return b;for(var c=v.g(b.c(0))-v.g(a.c(0)),h=Array(b.b()),\ng=0;gb?a.push(b):2048>b?a.push(192|b>>6,128|b&63):55296>b||57344<=b?a.push(224|b>>12,128|b>>6&63,128|b&63):(e++,b=65536+((b&1023)<<10|c.charCodeAt(e)&1023),a.push(240|b>>18,128|b>>12&63,128|b>>6&63,128|b&63))}return a};var A={L:1,M:0,Q:3,H:2},y=function(){function c(b){for(var a=0;0!=b;)a+=1,b>>>=1;return a}var a=[[],[6,18],\n[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],\n[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],e={w:function(b){for(var a=b<<10;0<=c(a)-c(1335);)a^=1335<a||40a?8:16},D:function(b){for(var a=b.h(),c=0,\nd=0;d=p;p+=1)if(!(0>d+p||a<=d+p))for(var q=-1;1>=q;q+=1)0>g+q||a<=g+q||(0!=p||0!=q)&&t==b.a(d+p,g+q)&&(e+=1);5e;e+=1)c[e]=1<e;e+=1)c[e]=c[e-4]^c[e-5]^c[e-6]^c[e-8];for(e=0;255>e;e+=1)a[c[e]]=e;return{g:function(b){if(1>b)throw Error(\"glog(\"+b+\")\");return a[b]},i:function(b){for(;0>b;)b+=255;for(;256<=b;)b-=255;return c[b]}}}(),t=function(){function c(b,c){switch(c){case A.L:return a[4*\n(b-1)];case A.M:return a[4*(b-1)+1];case A.Q:return a[4*(b-1)+2];case A.H:return a[4*(b-1)+3]}}var a=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,\n2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,\n45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,\n151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],\n[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],\n[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],e={I:function(b,a){var e=c(b,a);if(\"undefined\"==\ntypeof e)throw Error(\"bad rs block @ typeNumber:\"+b+\"/errorCorrectLevel:\"+a);b=e.length/3;a=[];for(var d=0;d\n

\n

Sats

\n
\n
\n \n
\n \n
\n
\n `;\nvar LnMePaymentConfirmationTemplate = `

Payment sent!

`;\n\nclass LnMe {\n\n constructor(options) {\n options = options || {};\n this.script = document.querySelector(\"[src*='lnme.js']\");\n if (options.baseURL) {\n this.baseURL = options.baseURL;\n } else if (this.script && this.script.dataset.lnmeBaseUrl) {\n this.baseURL = this.script.dataset.lnmeBaseUrl;\n } else {\n this.baseURL = `${document.location.protocol}//${document.location.host}`;\n }\n if (options.watchPaymentUrl) {\n this.watchPaymentUrl = options.watchPaymentUrl.bind(this);\n }\n if (options.createInvoiceUrl) {\n this.createInvoiceUrl = options.createInvoiceUrl.bind(this);\n }\n if (options.newAddressUrl) {\n this.newAddressUrl = options.newAddressUrl.bind(this);\n }\n this.value = parseInt(options.value || 0);\n this.memo = options.memo || '';\n this.target = options.target;\n this.loadStylesheet(); // load it early that styles are ready when the popup is opened\n }\n\n watchPaymentUrl() {\n return `${this.baseURL}/v1/invoice/${this.invoice.payment_hash}`;\n }\n\n createInvoiceUrl() {\n return `${this.baseURL}/v1/invoices`;\n }\n\n newAddressUrl() {\n return `${this.baseURL}/v1/newaddress`;\n }\n\n loadStylesheet() {\n if (document.getElementById('lnme-style')) { return; }\n // get the CSS file from the same source as the JS widget file\n let source = `${this.baseURL}/lnme/lnme.css`;\n let head = document.getElementsByTagName('head')[0];\n let css = document.createElement('link');\n css.id = \"lnme-style\";\n css.rel = \"stylesheet\";\n css.type = \"text/css\";\n css.href = source\n head.appendChild(css);\n }\n\n watchPayment() {\n if (this.paymentWatcher) { window.clearInterval(this.paymentWatcher) }\n\n return new Promise((resolve, reject) => {\n this.paymentWatcher = window.setInterval(() => {\n this._fetch(this.watchPaymentUrl())\n .then((invoice) => {\n if (invoice.settled) {\n this.invoice.settled = true;\n this.stopWatchingPayment();\n resolve(this.invoice);\n }\n });\n }, 2000);\n });\n }\n\n stopWatchingPayment() {\n window.clearInterval(this.paymentWatcher);\n this.paymentWatcher = null;\n }\n\n payWithWebln() {\n if (!webln.isEnabled) {\n webln.enable().then((weblnResponse) => {\n return webln.sendPayment(this.invoice.payment_request);\n }).catch((e) => {\n return this.showPaymentRequest();\n })\n } else {\n return webln.sendPayment(this.invoice.payment_request);\n }\n }\n\n populatePaymentRequest() {\n document.querySelectorAll('.lnme-memo').forEach(e => {\n e.innerHTML = this.memo;\n });\n document.querySelectorAll('.lnme-value').forEach(e => {\n e.innerHTML = this.value;\n });\n document.querySelectorAll('.lnme-payment-request').forEach(e => {\n e.innerHTML = this.invoice.payment_request;\n });\n document.querySelectorAll('.lnme-link').forEach(e => {\n e.setAttribute('href', `lightning:${this.invoice.payment_request}`);\n });\n QrCreator.render({ text: this.invoice.payment_request, size: 128}, this.target.querySelector('.lnme-qrcode'));\n this.target.querySelectorAll('.lnme-copy').forEach(element => {\n element.addEventListener('click', (e) => {\n navigator.clipboard.writeText(this.invoice.payment_request).then(() => {\n alert('Copied to clipboad');\n });\n });\n });\n }\n\n showPaymentRequest() {\n this.render(LnMePaymentRequestTemplate);\n this.populatePaymentRequest()\n return Promise.resolve(); // be compatible to payWithWebln()\n }\n\n addInvoice() {\n let args = {\n method: 'POST',\n mode: 'cors',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ memo: this.memo, value: this.value })\n };\n return this._fetch(\n this.createInvoiceUrl(),\n args\n ).then((invoice) => {\n this.invoice = invoice;\n return invoice;\n });\n }\n\n newAddress() {\n let args = {\n method: 'POST',\n mode: 'cors',\n header: { 'Content-Type': 'application/json' }\n };\n return this._fetch(this.newAddressUrl(), args)\n .then(address => {\n this.address = address;\n return address;\n });\n }\n\n requestPayment() {\n return this.addInvoice().then((invoice) => {\n if (typeof webln !== 'undefined') {\n return this.payWithWebln();\n } else {\n return this.showPaymentRequest();\n }\n });\n }\n\n request() {\n return this.requestPayment().then(() => {\n this.watchPayment().then((invoice) => {\n this.thanks();\n });\n });\n }\n\n _fetch(url, args) {\n return fetch(url, args).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n throw new Error(response);\n }\n });\n }\n\n closePopup() {\n if (this.popup) {\n this.popup.close();\n this.popup = null;\n }\n }\n\n render(content) {\n this.closePopup();\n this.popup = new jPopup({\n content: content,\n shouldSetHash: false\n });\n this.target = document.querySelector('.jPopup .content').firstElementChild;\n\n // When popup is closed, we stop watching the payment.\n document.querySelector('.jCloseBtn').addEventListener('click', (e) => {\n this.stopWatchingPayment();\n });\n }\n\n thanks() {\n this.target.innerHTML = LnMePaymentConfirmationTemplate;\n }\n}\n"), } - file6 := &embedded.EmbeddedFile{ - Filename: "zap.svg", - FileModTime: time.Unix(1630056291, 0), - - Content: string("\n \n"), - } // define dirs dir3 := &embedded.EmbeddedDir{ Filename: "", - DirModTime: time.Unix(1630056291, 0), + DirModTime: time.Unix(1638532495, 0), ChildFiles: []*embedded.EmbeddedFile{ - file4, // "lnme.css" - file5, // "lnme.js" - file6, // "zap.svg" + file4, // "favicon.svg" + file5, // "icon.svg" + file6, // "lnme.css" + file7, // "lnme.js" }, } @@ -83,14 +90,15 @@ func init() { // register embeddedBox embedded.RegisterEmbeddedBox(`files/assets`, &embedded.EmbeddedBox{ Name: `files/assets`, - Time: time.Unix(1630056291, 0), + Time: time.Unix(1638532495, 0), Dirs: map[string]*embedded.EmbeddedDir{ "": dir3, }, Files: map[string]*embedded.EmbeddedFile{ - "lnme.css": file4, - "lnme.js": file5, - "zap.svg": file6, + "favicon.svg": file4, + "icon.svg": file5, + "lnme.css": file6, + "lnme.js": file7, }, }) }