>>=y,p-=y),p<15&&(c+=z[i++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(c&(1<>>=y,p-=y,(y=s-a)>3,c&=(1<<(p-=w<<3))-1,t.next_in=i,t.next_out=s,t.avail_in=i>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=P,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new I.Buf32(i),e.distcode=e.distdyn=new I.Buf32(n),e.sane=1,e.back=-1,N):U}function o(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,a(t)):U}function h(t,e){var r,i;return t&&t.state?(i=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=s.wsize?(I.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(n=s.wsize-s.wnext)&&(n=i),I.arraySet(s.window,e,r-i,n,s.wnext),(i-=n)?(I.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){t.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(c=r.length)&&(c=o),c&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,i,s,c,k)),512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,r.length-=c),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&c>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break t;o--,u+=i[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==e)break;u>>>=2,l-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break t;o--,u+=i[s++]<>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(c=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],c=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+c>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;c--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,R(t,d),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){t.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(c=d-h,r.offset>c){if((c=r.offset-c)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}p=c>r.wnext?(c-=r.wnext,r.wsize-c):r.wnext-c,c>r.length&&(c=r.length),m=r.window}else m=n,p=a-r.offset,c=r.length;for(hc?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=e[r+a[v]]}if(k>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function P(t,e,r){t.bi_valid>c-r?(t.bi_buf|=e<>c-t.bi_valid,t.bi_valid+=r-c):(t.bi_buf|=e<>>=1,r<<=1,0<--e;);return r>>>1}function Z(t,e,r){var i,n,s=new Array(g+1),a=0;for(i=1;i<=g;i++)s[i]=a=a+r[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=j(s[o]++,o))}}function W(t){var e;for(e=0;e>1;1<=r;r--)G(t,s,r);for(n=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],G(t,s,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,s[2*n]=s[2*r]+s[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,s[2*r+1]=s[2*i+1]=n,t.heap[1]=n++,G(t,s,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,i,n,s,a,o,h=e.dyn_tree,u=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(s=0;s<=g;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r<_;r++)p<(s=h[2*h[2*(i=t.heap[r])+1]+1]+1)&&(s=p,m++),h[2*i+1]=s,u>=7;i>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return h;for(e=32;e>>3,(s=t.static_len+3+7>>>3)<=n&&(n=s)):n=s=r+5,r+4<=n&&-1!==e?J(t,e,r,i):4===t.strategy||s===n?(P(t,2+(i?1:0),3),K(t,z,C)):(P(t,4+(i?1:0),3),function(t,e,r,i){var n;for(P(t,e-257,5),P(t,r-1,5),P(t,i-4,4),n=0;n>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(A[r]+u+1)]++,t.dyn_dtree[2*N(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){P(t,2,3),L(t,m,z),function(t){16===t.bi_valid?(U(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{"../utils/common":41}],53:[function(t,e,r){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,e,r){"use strict";e.exports="function"==typeof setImmediate?setImmediate:function(){var t=[].slice.apply(arguments);t.splice(1,0,0),setTimeout.apply(null,t)}},{}]},{},[10])(10)});
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 9d3ea445..1cb0fd42 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,9 @@
"@wasmer/wasmfs": "^0.12.0",
"binaryen": "^101.0.0",
"chokidar": "^3.5.0",
+ "clipboard": "^2.0.6",
"jquery": "^3.6.0",
+ "jszip": "^3.7.0",
"localforage": "^1.9.0",
"mousetrap": "^1.6.5",
"reflect-metadata": "^0.1.13",
@@ -24,7 +26,7 @@
"devDependencies": {
"@types/bootbox": "^5.1.3",
"@types/bootstrap": "^3.4.0",
- "@types/file-saver": "^2.0.1",
+ "@types/file-saver": "^2.0.3",
"@types/jquery": "^3.5.5",
"@types/node": "^14.14.20",
"atob": "^2.1.x",
@@ -32,7 +34,6 @@
"bootstrap-tourist": "^0.2.1",
"btoa": "^1.2.x",
"chromedriver": "^92.0.0",
- "clipboard": "^2.0.6",
"command-exists": "^1.2.9",
"electron": "^9.4.0",
"electron-builder": "^22.11.7",
@@ -42,7 +43,6 @@
"heapdump": "^0.3.15",
"jsdom": "^12.2.0",
"jsfuzz": "^1.0.14",
- "jszip": "^3.5.0",
"lzg": "^1.0.x",
"mocha": "^7.2.0",
"mocha-simple-html-reporter": "^2.0.0",
@@ -686,8 +686,9 @@
"dev": true
},
"node_modules/@types/file-saver": {
- "version": "2.0.2",
- "integrity": "sha512-xbqnZmGrCEqi/KUzOkeUSe77p7APvLuyellGaAoeww3CHJ1AbjQWjPSCFtKIzZn8L7LpEax4NXnC+gfa6nM7IA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.3.tgz",
+ "integrity": "sha512-MBIou8pd/41jkff7s97B47bc9+p0BszqqDJsO51yDm49uUxeKzrfuNl5fSLC6BpLEWKA8zlwyqALVmXrFwoBHQ==",
"dev": true
},
"node_modules/@types/fs-extra": {
@@ -2053,7 +2054,6 @@
"node_modules/clipboard": {
"version": "2.0.8",
"integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==",
- "dev": true,
"dependencies": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
@@ -2525,8 +2525,7 @@
},
"node_modules/delegate": {
"version": "3.2.0",
- "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
- "dev": true
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
},
"node_modules/depd": {
"version": "1.1.2",
@@ -4229,7 +4228,6 @@
"node_modules/good-listener": {
"version": "1.2.2",
"integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
- "dev": true,
"dependencies": {
"delegate": "^3.1.2"
}
@@ -5296,9 +5294,9 @@
}
},
"node_modules/jszip": {
- "version": "3.6.0",
- "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==",
- "dev": true,
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.0.tgz",
+ "integrity": "sha512-Y2OlFIzrDOPWUnpU0LORIcDn2xN7rC9yKffFM/7pGhQuhO+SUhfm2trkJ/S5amjFvem0Y+1EALz/MEPkvHXVNw==",
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
@@ -5352,7 +5350,6 @@
"node_modules/lie": {
"version": "3.3.0",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
- "dev": true,
"dependencies": {
"immediate": "~3.0.5"
}
@@ -7692,8 +7689,7 @@
},
"node_modules/select": {
"version": "1.1.2",
- "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
- "dev": true
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
},
"node_modules/semver": {
"version": "6.3.0",
@@ -7751,7 +7747,6 @@
"node_modules/set-immediate-shim": {
"version": "1.0.1",
"integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -8259,8 +8254,7 @@
},
"node_modules/tiny-emitter": {
"version": "2.1.0",
- "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
- "dev": true
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"node_modules/tmp": {
"version": "0.2.1",
@@ -9691,8 +9685,9 @@
"dev": true
},
"@types/file-saver": {
- "version": "2.0.2",
- "integrity": "sha512-xbqnZmGrCEqi/KUzOkeUSe77p7APvLuyellGaAoeww3CHJ1AbjQWjPSCFtKIzZn8L7LpEax4NXnC+gfa6nM7IA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.3.tgz",
+ "integrity": "sha512-MBIou8pd/41jkff7s97B47bc9+p0BszqqDJsO51yDm49uUxeKzrfuNl5fSLC6BpLEWKA8zlwyqALVmXrFwoBHQ==",
"dev": true
},
"@types/fs-extra": {
@@ -10726,7 +10721,6 @@
"clipboard": {
"version": "2.0.8",
"integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==",
- "dev": true,
"requires": {
"good-listener": "^1.2.2",
"select": "^1.1.2",
@@ -11104,8 +11098,7 @@
},
"delegate": {
"version": "3.2.0",
- "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
- "dev": true
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
},
"depd": {
"version": "1.1.2",
@@ -12416,7 +12409,6 @@
"good-listener": {
"version": "1.2.2",
"integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
- "dev": true,
"requires": {
"delegate": "^3.1.2"
}
@@ -13178,9 +13170,9 @@
}
},
"jszip": {
- "version": "3.6.0",
- "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==",
- "dev": true,
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.0.tgz",
+ "integrity": "sha512-Y2OlFIzrDOPWUnpU0LORIcDn2xN7rC9yKffFM/7pGhQuhO+SUhfm2trkJ/S5amjFvem0Y+1EALz/MEPkvHXVNw==",
"requires": {
"lie": "~3.3.0",
"pako": "~1.0.2",
@@ -13225,7 +13217,6 @@
"lie": {
"version": "3.3.0",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
- "dev": true,
"requires": {
"immediate": "~3.0.5"
}
@@ -15040,8 +15031,7 @@
},
"select": {
"version": "1.1.2",
- "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
- "dev": true
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
},
"semver": {
"version": "6.3.0",
@@ -15082,8 +15072,7 @@
},
"set-immediate-shim": {
"version": "1.0.1",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
},
"setprototypeof": {
"version": "1.1.1",
@@ -15487,8 +15476,7 @@
},
"tiny-emitter": {
"version": "2.1.0",
- "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
- "dev": true
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"tmp": {
"version": "0.2.1",
diff --git a/package.json b/package.json
index 86be2cc5..a32dede5 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,9 @@
"@wasmer/wasmfs": "^0.12.0",
"binaryen": "^101.0.0",
"chokidar": "^3.5.0",
+ "clipboard": "^2.0.6",
"jquery": "^3.6.0",
+ "jszip": "^3.7.0",
"localforage": "^1.9.0",
"mousetrap": "^1.6.5",
"reflect-metadata": "^0.1.13",
@@ -26,7 +28,7 @@
"devDependencies": {
"@types/bootbox": "^5.1.3",
"@types/bootstrap": "^3.4.0",
- "@types/file-saver": "^2.0.1",
+ "@types/file-saver": "^2.0.3",
"@types/jquery": "^3.5.5",
"@types/node": "^14.14.20",
"atob": "^2.1.x",
@@ -34,7 +36,6 @@
"bootstrap-tourist": "^0.2.1",
"btoa": "^1.2.x",
"chromedriver": "^92.0.0",
- "clipboard": "^2.0.6",
"command-exists": "^1.2.9",
"electron": "^9.4.0",
"electron-builder": "^22.11.7",
@@ -44,7 +45,6 @@
"heapdump": "^0.3.15",
"jsdom": "^12.2.0",
"jsfuzz": "^1.0.14",
- "jszip": "^3.5.0",
"lzg": "^1.0.x",
"mocha": "^7.2.0",
"mocha-simple-html-reporter": "^2.0.0",
diff --git a/src/ide/embedui.ts b/src/ide/embedui.ts
index 6b94d648..895cc73c 100644
--- a/src/ide/embedui.ts
+++ b/src/ide/embedui.ts
@@ -1,6 +1,7 @@
window['Javatari'].AUTO_START = false;
+import { lzgmini } from "../common/util";
import { PLATFORMS } from "../common/emu";
import { Platform } from "../common/baseplatform";
import { stringToByteArray, getWithBinary, loadScript, getRootBasePlatform } from "../common/util";
@@ -12,7 +13,7 @@ export var platform : Platform; // platform object
export var stateRecorder : StateRecorderImpl;
// external libs (TODO)
-declare var ga, lzgmini, GIF, saveAs;
+declare var ga, GIF;
var _qs = (function (a) {
if (!a || a.length == 0)
diff --git a/src/ide/ui.ts b/src/ide/ui.ts
index 8bea583d..4d860061 100644
--- a/src/ide/ui.ts
+++ b/src/ide/ui.ts
@@ -16,7 +16,7 @@ import Split = require('split.js');
import { importPlatform } from "../platform/_index";
// external libs (TODO)
-declare var Tour, GIF, saveAs, JSZip, firebase;
+declare var Tour, GIF, firebase;
declare var ga;
// in index.html
declare var exports;
@@ -855,8 +855,10 @@ function _shareEmbedLink(e) {
}
function loadClipboardLibrary() {
- loadScript('lib/clipboard.min.js').then( () => {
- var ClipboardJS = exports['ClipboardJS'];
+ // can happen in background because it won't be used until user clicks
+ console.log('clipboard');
+ import('clipboard').then( (clipmod) => {
+ let ClipboardJS = clipmod.default;
new ClipboardJS(".btn");
});
}
@@ -1045,40 +1047,41 @@ function _downloadSourceFile(e) {
saveAs(blob, getCurrentEditorFilename(), {autoBom:false});
}
-function _downloadProjectZipFile(e) {
- loadScript('lib/jszip.min.js').then( () => {
- var zip = new JSZip();
- current_project.iterateFiles( (id, data) => {
- if (data) {
- zip.file(getFilenameForPath(id), data);
- }
- });
- zip.generateAsync({type:"blob"}).then( (content) => {
- saveAs(content, getCurrentMainFilename() + "-" + getBasePlatform(platform_id) + ".zip");
- });
+async function newJSZip() {
+ let JSZip = (await import('jszip')).default;
+ return new JSZip();
+}
+
+async function _downloadProjectZipFile(e) {
+ var zip = await newJSZip();
+ current_project.iterateFiles( (id, data) => {
+ if (data) {
+ zip.file(getFilenameForPath(id), data);
+ }
+ });
+ zip.generateAsync({type:"blob"}).then( (content) => {
+ saveAs(content, getCurrentMainFilename() + "-" + getBasePlatform(platform_id) + ".zip");
});
}
-function _downloadAllFilesZipFile(e) {
- loadScript('lib/jszip.min.js').then( () => {
- var zip = new JSZip();
- store.keys( (err, keys : string[]) => {
- setWaitDialog(true);
- var i = 0;
- return Promise.all(keys.map( (path) => {
- return store.getItem(path).then( (text) => {
- setWaitProgress(i++/(keys.length+1));
- if (text) {
- zip.file(path, text);
- }
- });
- })).then(() => {
- return zip.generateAsync({type:"blob"});
- }).then( (content) => {
- return saveAs(content, getBasePlatform(platform_id) + "-all.zip");
- }).finally(() => setWaitDialog(false));
- });
- })
+async function _downloadAllFilesZipFile(e) {
+ var zip = await newJSZip();
+ store.keys( (err, keys : string[]) => {
+ setWaitDialog(true);
+ var i = 0;
+ return Promise.all(keys.map( (path) => {
+ return store.getItem(path).then( (text) => {
+ setWaitProgress(i++/(keys.length+1));
+ if (text) {
+ zip.file(path, text as any);
+ }
+ });
+ })).then(() => {
+ return zip.generateAsync({type:"blob"});
+ }).then( (content) => {
+ return saveAs(content, getBasePlatform(platform_id) + "-all.zip");
+ }).finally(() => setWaitDialog(false));
+ });
}
function populateExamples(sel) {