cloudcmd 15.9.9 → 15.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChangeLog +7 -0
- package/HELP.md +3 -4
- package/README.md +1 -1
- package/dist/cloudcmd.js +1 -1
- package/dist/cloudcmd.js.map +1 -1
- package/dist/modules/operation.js +1 -1
- package/dist/modules/operation.js.map +1 -1
- package/dist/sw.js +1 -1
- package/dist-dev/cloudcmd.js +1 -1
- package/dist-dev/modules/operation.js +1 -1
- package/dist-dev/sw.js +1 -1
- package/package.json +2 -2
package/ChangeLog
CHANGED
package/HELP.md
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
# Cloud Commander v15.9.
|
|
1
|
+
# Cloud Commander v15.9.10
|
|
2
2
|
|
|
3
|
-
### [Main][MainURL] [Blog][BlogURL]
|
|
3
|
+
### [Main][MainURL] [Blog][BlogURL]
|
|
4
4
|
|
|
5
5
|
[MainURL]: http://cloudcmd.io "Main"
|
|
6
6
|
[BlogURL]: http://blog.cloudcmd.io "Blog"
|
|
7
|
-
[HerokuURL]: https://cloudcmd.herokuapp.com/ "Heroku"
|
|
8
|
-
[HEROKU_LIVE_IMG]: https://status.cloudcmd.io/host/cloudcmd.herokuapp.com/img/file.png "Heroku"
|
|
9
7
|
[DWORD]: https://github.com/cloudcmd/dword "Editor based on CodeMirror"
|
|
10
8
|
[EDWARD]: https://github.com/cloudcmd/edward "Editor based on Ace"
|
|
11
9
|
[DEEPWORD]: https://github.com/cloudcmd/deepword "Editor based on Monaco"
|
|
@@ -1084,6 +1082,7 @@ There are a lot of ways to be involved in `Cloud Commander` development:
|
|
|
1084
1082
|
|
|
1085
1083
|
## Version history
|
|
1086
1084
|
|
|
1085
|
+
- *2021.12.04*, **[v15.9.10](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.10)**
|
|
1087
1086
|
- *2021.11.22*, **[v15.9.9](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.9)**
|
|
1088
1087
|
- *2021.02.03*, **[v15.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.6.0)**
|
|
1089
1088
|
- *2021.02.02*, **[v15.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v15.5.2)**
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Cloud Commander v15.9.
|
|
1
|
+
# Cloud Commander v15.9.10 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL]
|
|
2
2
|
|
|
3
3
|
### [Main][MainURL] [Blog][BlogURL]
|
|
4
4
|
|
package/dist/cloudcmd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e){function t(t){for(var r,s,i=t[0],l=t[1],c=t[2],d=0,f=[];d<i.length;d++)s=i[d],Object.prototype.hasOwnProperty.call(o,s)&&o[s]&&f.push(o[s][0]),o[s]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(u&&u(t);f.length;)f.shift()();return a.push.apply(a,c||[]),n()}function n(){for(var e,t=0;t<a.length;t++){for(var n=a[t],r=!0,i=1;i<n.length;i++){var l=n[i];0!==o[l]&&(r=!1)}r&&(a.splice(t--,1),e=s(s.s=n[0]))}return e}var r={},o={20:0},a=[];function s(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.m=e,s.c=r,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)s.d(n,r,function(t){return e[t]}.bind(null,r));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="/dist/";var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var c=0;c<i.length;c++)t(i[c]);var u=l;a.push([41,0]),n()}({141:function(e,t){},167:function(e,t){},168:function(e,t){},169:function(e,t){},25:function(e,t,n){"use strict";async function r(e){if(!navigator.serviceWorker)return;const t="https:"===location.protocol,n="localhost"===location.hostname;return t||n?await navigator.serviceWorker.register(e+"/sw.js"):void 0}e.exports.registerSW=r,e.exports.unregisterSW=async function(e){const t=await r(e);null==t||t.unregister(e)},e.exports.listenSW=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];null==e||e.addEventListener(...n)}},34:function(e,t,n){"use strict";const r=DOM.CurrentInfo,o=n(35),a=n(31),s=n(16),i=n(36),l=n(70),c=n(76),{createBinder:u}=n(77),d=n(7)();d([]);const{assign:f}=Object,p=u();function C(e){const{key:t,shift:n,keyCode:r,keyIdentifier:o}=e,a=t||function(e){const t=e.substring(2),n=parseInt(t,16);return String.fromCharCode(n)}(o);return[function(e,t){switch(t){case i.DOT:return".";case i.HYPHEN:return e?"_":"-";case i.EQUAL:return e?"+":"="}return""}(n,r),a]}async function m(e){const{keyCode:t}=e;if(void 0===e.altKey)return;const n=e.altKey,s=e.ctrlKey,u=e.metaKey,f=t>=i.ZERO&&t<=i.Z,m=/Numpad/.test(e.code),[g,h]=C(e);if(!p.isBind())return;(e=>{const{_config:t,config:n}=CloudCmd;e===i.ESC&&t("vim",!n("vim"))})(t);const D=CloudCmd.config("vim");if(!D&&!m&&!n&&!s&&!u&&(f||g))return c(h,d);d([]),await async function(e){let t,n,s,l,c,u=r.element;const{name:d,panel:f,path:p,isDir:C}=r,{Operation:m,loadDir:g,config:h}=CloudCmd,{keyCode:D}=e,w=e.altKey,O=e.shiftKey,y=e.ctrlKey,M=e.metaKey,v=y||M;u&&(s=u.previousSibling,l=u.nextSibling);switch(D){case i.TAB:DOM.changePanel(),e.preventDefault();break;case i.INSERT:case i.INSERT_MAC:DOM.toggleSelectedFile(u).setCurrentFile(l);break;case i.DELETE:O?m.show("delete:silent"):m.show("delete");break;case i.ASTERISK:DOM.toggleAllSelectedFiles(u);break;case i.PLUS:DOM.expandSelection(),e.preventDefault();break;case i.MINUS:DOM.shrinkSelection(),e.preventDefault();break;case i.F1:CloudCmd.Help.show(),e.preventDefault();break;case i.F2:CloudCmd.UserMenu.show();break;case i.F3:e.preventDefault(),r.isDir?await g({path:p}):O?CloudCmd.View.show(null,{raw:!0}):v?CloudCmd.sortPanel("name"):CloudCmd.View.show();break;case i.F4:h("vim")?CloudCmd.EditFileVim.show():CloudCmd.EditFile.show(),e.preventDefault();break;case i.F5:v?CloudCmd.sortPanel("date"):w?m.show("pack"):m.show("copy"),e.preventDefault();break;case i.F6:v?CloudCmd.sortPanel("size"):O?DOM.renameCurrent(u):m.show("move"),e.preventDefault();break;case i.F7:O?DOM.promptNewFile():DOM.promptNewDir(),e.preventDefault();break;case i.F8:m.show("delete"),e.preventDefault();break;case i.F9:w?m.show("extract"):CloudCmd.Menu.show(),e.preventDefault();break;case i.F10:CloudCmd.Config.show(),e.preventDefault();break;case i.TRA:if(e.preventDefault(),O)return CloudCmd.Terminal.show();CloudCmd.Konsole.show();break;case i.BRACKET_CLOSE:CloudCmd.Konsole.show(),e.preventDefault();break;case i.SPACE:e.preventDefault(),n=!C||".."===d||DOM.isSelected(u),n||await DOM.loadCurrentSize(u),DOM.toggleSelectedFile(u);break;case i.U:v&&(DOM.swapPanels(),e.preventDefault());break;case i.UP:O&&DOM.toggleSelectedFile(u),DOM.setCurrentFile(s),e.preventDefault();break;case i.DOWN:O&&DOM.toggleSelectedFile(u),DOM.setCurrentFile(l),e.preventDefault();break;case i.LEFT:if(!w)return;e.preventDefault(),c=r.panel.getAttribute("data-name"),"js-right"===c&&DOM.duplicatePanel();break;case i.RIGHT:if(!w)return;e.preventDefault(),c=r.panel.getAttribute("data-name"),"js-left"===c&&DOM.duplicatePanel();break;case i.HOME:DOM.setCurrentFile(r.first),e.preventDefault();break;case i.END:DOM.setCurrentFile(r.last),e.preventDefault();break;case i.PAGE_DOWN:for(DOM.scrollByPages(f,1),t=0;t<30&&u.nextSibling;t++)u=u.nextSibling;DOM.setCurrentFile(u),e.preventDefault();break;case i.PAGE_UP:for(DOM.scrollByPages(f,-1),t=0;t<30&&u.previousSibling;t++)u=u.previousSibling;DOM.setCurrentFile(u),e.preventDefault();break;case i.ENTER:r.isDir?await g({path:p}):CloudCmd.View.show();break;case i.BACKSPACE:CloudCmd.goToParentDir(),e.preventDefault();break;case i.BACKSLASH:v&&await g({path:"/"});break;case i.A:v&&(DOM.selectAllFiles(),e.preventDefault());break;case i.G:w&&(DOM.goToDirectory(),e.preventDefault());break;case i.M:v&&(h("vim")?CloudCmd.EditNamesVim.show():CloudCmd.EditNames.show(),e.preventDefault());break;case i.P:if(!v)return;e.preventDefault(),o.writeText(r.dirPath).catch(CloudCmd.log);break;case i.R:v&&(CloudCmd.log("reloading page...\n"),CloudCmd.refresh(),e.preventDefault());break;case i.C:v&&a.copy();break;case i.X:v&&a.cut();break;case i.V:v&&a.paste();break;case i.Z:v&&a.clear();break;case i.D:v&&(CloudCmd.log("clearing storage..."),await DOM.Storage.clear(),CloudCmd.log("storage cleared"),e.preventDefault())}}(e),t>=i.F1&&t<=i.F10||D&&l(h,e)}e.exports=f(p,i),e.exports.bind=()=>{s.addKey(m,!0),p.setBind()},e.exports._listener=m},41:function(e,t,n){"use strict";n(141),n(167),n(168),n(169);const r=n(8),o=n(4),{registerSW:a,listenSW:s}=n(25);function i(e){return e?e.indexOf("/")?"/"+e:e:""}window.Emitify=n(20),e.exports=window.CloudCmd=async e=>{window.Util=n(9),window.CloudFunc=n(6);const t=n(10);window.DOM=t,window.CloudCmd=n(67),await async function(e){const{prefix:t}=e,n=await a(t);s(n,"updatefound",l(e))}(e),n(79),n(34),n(82);const r=i(e.prefix);window.CloudCmd.init(r,e)};const l=r(async e=>{const{DOM:t}=window,n=i(e.prefix);await o.js(n+"/dist/cloudcmd.common.js"),await o.js(n+"/dist/cloudcmd.js"),console.log("cloudcmd: sw: updated"),t.Events.removeAll(),window.CloudCmd(e)})},67:function(e,t,n){"use strict";const r=n(20),o=n(30),a=n(12),s=n(4),i=n(3),{addSlashToEnd:l}=n(32),c=n(33),u=n(0),d=n(1),{unregisterSW:f}=n(25),p=n(69),C=n(34),{apiURL:m,formatMsg:g,buildFromJSON:h}=n(6),D=n(78);function w(e){let t;r.call(this);const n=this,o=e.CurrentInfo,{Storage:w,Files:O}=e;this.log=function(){},this.prefix="",this.prefixSocket="",this.prefixURL="",this.DIRCLIENT="/dist/",this.DIRCLIENT_MODULES=this.DIRCLIENT+"modules/",this.MIN_ONE_PANEL_WIDTH=1155,this.HOST=location.origin||location.protocol+"//"+location.host;this.TITLE="Cloud Commander",this.sort={left:"name",right:"name"},this.order={left:"asc",right:"asc"},this.loadDir=async t=>{const r=t,s=r.isRefresh,{panel:i,history:c,noCurrent:u,currentName:f}=r;let p,C;!u&&i&&i!==o.panel&&(e.changePanel(),p=!0),(p||s||!c)&&(C="top"),d.show.load(C,i);const m=l(r.path);await async function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2?arguments[2]:void 0;const{RESTful:i}=e;n.log('reading dir: "'+t+'";');const l=n.config("dirStorage"),c=l&&await w.getJson(t),u=r.currentName||o.name,{noCurrent:d,refresh:f}=r;if(!f&&c)return await b(c,s,r);const p=e.getPanelPosition(s),C=n.sort[p],m=n.order[p],g=a("?sort={{ sort }}&order={{ order }}",{sort:C,order:m}),[,h]=await i.read(t+g,"json");if(!h)return;r.sort=C,r.order=m,await b(h,s,r),f&&!d&&e.setCurrentByName(u);if(!n.config("dirStorage"))return;w.setJson(t,h)}(m,{refresh:s,history:c,noCurrent:u,currentName:f},i)},this.init=async(r,o)=>{n.prefix=r,n.prefixURL=`${r}${m}`,n.prefixSocket=o.prefixSocket,n.config=e=>o[e],n.config.if=u((e,t,n)=>o[e]&&t(n)),n._config=(e,t)=>{"password"!==e&&(o[e]=t)},o.oneFilePanel&&(n.MIN_ONE_PANEL_WIDTH=1/0),document.body.scrollIntoViewIfNeeded||await s.js(r+n.DIRCLIENT_MODULES+"polyfill.js"),await y(),await async function(){const r=e.getFiles();n.on("current-file",e.updateCurrentInfo),n.on("current-name",M);const o=await w.get("current-name"),a=o&&e.getCurrentByName(o)||r[0];r&&e.setCurrentFile(a,{history:!location.hash});const s=e.getCurrentDirPath();t=n.Listeners,t.init();if(v().forEach(t.setOnPanel),t.initKeysPanel(),!n.config("dirStorage"))return;await w.get(s)||await w.setJson(s,p())}(),await async function(){const{prefix:e}=n,t=e+"/dist/cloudcmd.common.css";await s.css(t)}(),n.route(location.hash)},this.route=t=>{const r=t.split("/");if(!t)return;const[o]=r,a=c(o.slice(1)).replace(/.js$/,"");const s=r[1],i=e.getCurrentByName(s);if(!s||i)e.setCurrentFile(i),n.execFromModule(a,"show");else{const e=g("set current file",s,"error");n.log(e)}},this.logOut=async()=>{const t=n.prefix+"/logout",{prefix:r}=n;await e.Storage.clear(),f(r),e.load.ajax({url:t,error:()=>document.location.reload()})};const y=async()=>{n.Key=C,n.Key.bind();const[,e]=await i(O.get,"modules"),t=d.show.load,r={edit:t,menu:t};if(e)for(const t of e.local)D({name:null,path:t,dobefore:r[t]})};async function M(e){await w.set("current-name",e)}function v(){const e=["left"];return n.config("oneFilePanel")?e:[...e,"right"]}async function b(r,a,s){const{history:l,noCurrent:c}=s,[u,[d,f,p,C]]=await i(O.get,["file","path","link","pathLink"]);if(u)return e.Dialog.alert(u.responseText);const m=a||e.getPanel(),{prefix:g}=n,{dir:D,name:w}=o,{childNodes:y}=m;let M=y.length;for(;M--;)m.removeChild(m.lastChild);if(m.innerHTML=h({sort:s.sort,order:s.order,data:r,id:m.id,prefix:g,template:{file:d,path:f,pathLink:C,link:p}}),t.setOnPanel(m),!c){let t;".."===w&&"/"!==D&&(t=e.getCurrentByName(D)),t||([t]=e.getFiles(m)),e.setCurrentFile(t,{history:l}),n.emit("active-dir",o.dirPath)}}this.execFromModule=async function(e,t){await n[e]();const r=n[e][t];for(var o=arguments.length,a=new Array(o>2?o-2:0),s=2;s<o;s++)a[s-2]=arguments[s];r(...a)},this.refresh=async function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{panel:r=o.panel,currentName:a}=t,s=e.getCurrentDirPath(r),i=!0,l=!1,c=!!t&&t.noCurrent;await n.loadDir({path:s,isRefresh:i,history:l,panel:r,noCurrent:c,currentName:a})},this.goToParentDir=async()=>{const{dir:t,dirPath:r,parentDirPath:a,panel:s}=o;if(r===a)return;const i=a;await n.loadDir({path:i});const l=e.getCurrentByName(t),[c]=e.getFiles(s);e.setCurrentFile(l||c,{history:history})}}o(w,r),e.exports=new w(DOM),s.addErrorListener((e,t)=>{const n=`file ${t} could not be loaded`;d.show.error(n)})},69:function(e,t,n){"use strict";const r=DOM.CurrentInfo;e.exports=()=>({path:DOM.getCurrentDirPath(),files:(r.files||[]).filter(e=>".."!==DOM.getCurrentName(e)).map(e=>{const t=DOM.getCurrentName(e),n=DOM.getCurrentSize(e),r=DOM.getCurrentOwner(e);return{name:t,size:n,mode:DOM.getCurrentMode(e),owner:r,date:DOM.getCurrentDate(e),type:DOM.getCurrentType(e)}})})},70:function(e,t,n){"use strict";const r=n(71),o=n(72),a=DOM.CurrentInfo,{Dialog:s}=DOM;e.exports=async(e,t)=>{const n=i(t);await r(e,n)};const i=e=>({escape:DOM.unselectFiles,remove:()=>{CloudCmd.Operation.show("delete")},copy:()=>{DOM.Buffer.copy(),DOM.unselectFiles()},select:()=>{const e=a.element;DOM.toggleSelectedFile(e)},paste:DOM.Buffer.paste,moveNext:e=>{let{count:t,isVisual:n,isDelete:r}=e;c("next",{count:t,isVisual:n,isDelete:r})},movePrevious:e=>{let{count:t,isVisual:n,isDelete:r}=e;c("previous",{count:t,isVisual:n,isDelete:r})},find:async()=>{e.preventDefault();const[,t]=await s.prompt("Find","");if(!t)return;const n=a.files.map(DOM.getCurrentName),[r]=o.find(t,n);DOM.setCurrentByName(r)},findNext:()=>{const e=o.findNext();DOM.setCurrentByName(e)},findPrevious:()=>{const e=o.findPrevious();DOM.setCurrentByName(e)}});function l(e){".."!==DOM.getCurrentName(e)&&DOM.selectFile(e)}function c(e,t){let{count:n,isVisual:r,isDelete:o}=t,s=a.element;const i=r?l:DOM.unselectFile;i(s);const c=e+"Sibling";for(let e=0;e<n;e++){const e=s[c];if(!e)break;s=e,i(s)}DOM.setCurrentFile(s),o&&CloudCmd.Operation.show("delete")}e.exports.selectFile=l},71:function(e,t,n){"use strict";const r=n(7),o=r(""),a=r(!1),s=()=>{a(!1)},i=()=>{o("")},l=()=>{};function c(e){const t="d"===e[0];t&&(a(!0),e=e.split("").slice(1).join(""));var n;return{count:(n=e)?"g"===n?1:parseInt(n):1,isDelete:t,isVisual:a()}}e.exports=(e,t)=>{const n=o(),r=a(),u=o(n.concat(e)),{escape:d=l,moveNext:f=l,movePrevious:p=l,remove:C=l,copy:m=l,paste:g=l,select:h=l,find:D=l,findNext:w=l,findPrevious:O=l}=t;if("Enter"===e)return i();if("Escape"===e)return a(!1),d(),i();if("j"===e||"w"===e){const{count:e,isDelete:t,isVisual:r}=c(n);return!isNaN(e)&&f({count:e,isVisual:r,isDelete:t}),i()}if("k"===e||"b"===e){const{count:e,isDelete:t,isVisual:r}=c(n);return!isNaN(e)&&p({count:e,isVisual:r,isDelete:t}),i()}if("gg"===u||"^"===e){const{isDelete:e,isVisual:t}=c(n);return p({count:1/0,isVisual:t,isDelete:e}),i()}return"d"!==e||!a()&&"d"!==n?"G"===e||"$"===e?(f({count:1/0,isVisual:r}),i()):"y"===e?a()?(s(),m(),i()):i():/^p$/i.test(e)?(g(),i()):/^v$/i.test(e)?(a(!a()),h(),i()):"/"===e?(D(),i()):"n"===e?(w(),i()):"N"===e?(O(),i()):void 0:(s(),C(),i())}},72:function(e,t,n){"use strict";const r=n(7),o=n(73),a=r([]),s=r(0);function i(e,t){return e===t-1?0:++e}function l(e,t){return e?--e:t-1}e.exports.find=(e,t)=>{const n=o(e,t);return a(n),s(0),n},e.exports.findNext=()=>{const e=a(),t=i(s(),e.length);return s(t),e[s()]},e.exports.findPrevious=()=>{const e=a(),t=l(s(),e.length);return s(t),e[t]},e.exports._next=i,e.exports._previous=l},76:function(e,t,n){"use strict";const r=DOM.CurrentInfo,{escapeRegExp:o}=n(9);e.exports=function(e,t){let n,a=0,s=!1,i=0;const l=o(e),c=new RegExp("^"+l+".*$","i"),{files:u}=r,d=t(),f=d.length;for(;i<f&&e===d[i];)i++;i||t([]);const p=a=i;t(t().concat(e));var C;DOM.getFilenames(u).filter(e=>c.test(e)).filter((C=e=>".."===e,e=>!C(e))).some(e=>{const t=DOM.getCurrentByName(e);if(!a)return s=!0,DOM.setCurrentFile(t),!0;p===a&&(n=t),--a}),s||(DOM.setCurrentFile(n),t([e]))}},77:function(e,t,n){"use strict";e.exports.createBinder=()=>{let e=!1;return{isBind:()=>e,setBind(){e=!0},unsetBind(){e=!1}}}},78:function(e,t,n){"use strict";const r=n(5),o=n(3),a=n(4).js,s=n(33);e.exports=function(e){if(!e)return;const{path:t}=e,n=t&&s(t).replace(/.js$/,"");const i=e.dobefore;CloudCmd[n]||(CloudCmd[n]=()=>{r(i);const{prefix:e}=CloudCmd,o=e+CloudCmd.DIRCLIENT_MODULES+t+".js";return a(o).then(async()=>{const e=async e=>e&&e(),t=CloudCmd[n];return Object.assign(e,t),CloudCmd[n]=e,CloudCmd.log("init",n),await t.init(),e})},CloudCmd[n].show=async function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];CloudCmd.log("show",n,t);const a=CloudCmd[n],[s,i]=await o(a);if(s)return console.error(s);await i.show(...t)})}},79:function(e,t,n){"use strict";const r=n(5),o=n(18),a=n(0),s=n(3),i=n(35),l=n(80),c=a(n(81)),u=n(38),{FS:d}=n(6),f=RegExp(String.fromCharCode(160),"g");e.exports.init=async()=>{await Promise.all([b(),x(),void DOM.Events.add(["unload","beforeunload"],e=>{const{Key:t}=CloudCmd,n=null==t?void 0:t.isBind();if(!n)return e.preventDefault(),"Please make sure that you saved all work."}),void m.add("popstate",async e=>{let{state:t}=e;const n=(t||"").replace(d,"");if(!n)return CloudCmd.route(location.hash);await CloudCmd.loadDir({path:n,history:!1})}),void m.add("resize",()=>{const e=window.innerWidth<CloudCmd.MIN_ONE_PANEL_WIDTH;if(!e)return;const{panel:t}=C,n=!t;if(n)return;const r=t.getAttribute("data-name"),o="js-left"===r;o||DOM.changePanel()}),D(),w()])},CloudCmd.Listeners=e.exports;const p=a((e,t)=>{for(const n of e)n(t)}),C=DOM.CurrentInfo,{Events:m}=DOM,g={mousedown:r.with(M,(function(e){const t={alt:e.altKey,ctrl:e.ctrlKey,meta:e.metaKey,shift:e.shiftKey},n=v(e.target),r=C.name;DOM.setCurrentFile(n);const o=C.name;let a=[];t.shift?a=function(e,t){const n=DOM.getAllFiles(),r=DOM.getFilenames(n),o=c(r),a=o(e),s=o(t);return l(a,s,n)}(r,o):a.push(C.element);0===e.button&&function(e,t){const n=/Mac/.test(window.navigator.platform);if(!e)throw Error("key should not be undefined!");const[r]=t;if(n&&e.meta||e.ctrl)return DOM.toggleSelectedFile(r);if(e.shift)t.map(DOM.selectFile)}(t,a)})),click:p([function(e){e.preventDefault(),function(e){const{panel:t}=C,n=DOM.getByDataName("js-files",t);(function(e){for(;"UL"!==e.tagName;)e=e.parentElement;return e})(e)!==n&&DOM.changePanel()}(e.target)},e=>{const t=/Mac/.test(window.navigator.platform),{shiftKey:n,metaKey:r,ctrlKey:o}=e;n||t&&r||o||DOM.unselectFiles()}]),dragstart:r.with(M,(function(e){const{prefixURL:t}=CloudCmd,n=v(e.target),{isDir:r}=C;let o=DOM.getCurrentLink(n),a=DOM.getCurrentName(n);r&&(a+=h,o=document.createElement("a"),o.textContent=a,o.href=t+"/pack"+C.path+h);e.dataTransfer.setData("DownloadURL","application/octet-stream:"+a+":"+o)})),dblclick:r.with(M,(async function(e){e.preventDefault();const t=v(e.target),n=DOM.isCurrentIsDir(t),r=DOM.getCurrentPath(t);if(!n)return CloudCmd.View.show();await CloudCmd.loadDir({path:r})})),touchstart:r.with(M,(async function(e){const t=v(e.target);if(!DOM.isCurrentIsDir(t))return;if(!DOM.isCurrentFile(t))return;await CloudCmd.loadDir({path:DOM.getCurrentPath(t)})}))};let h;function D(){const e=DOM.getFM(),t=e=>e.dataset,n=e=>/^js-(left|right)$/.test(e.dataset.name);m.addClick(e,e=>{const r=e.target;if("js-fm-header"!==r.parentElement.dataset.name)return;const o=(r.dataset.name||"").replace("js-","");if(!/^(name|size|date)$/.test(o))return;const a=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t?e(t.parentElement,n.concat(t)):n}(r).filter(t).filter(n).pop();CloudCmd.sortPanel(o,a)})}async function w(){const[,e]=await s(DOM.Files.get,"config"),t=null==e?void 0:e.packer;h=DOM.getPackerExt(t)}function O(){CloudCmd.UserMenu.show()}e.exports.initKeysPanel=()=>{const e=DOM.getById("js-keyspanel");e&&m.addClick(e,e=>{let{target:t}=e;const{id:n}=t,o=e=>{const{Operation:t}=CloudCmd;return t.show.bind(null,e)},a={f1:CloudCmd.Help.show,f2:O,f3:CloudCmd.View.show,f4:CloudCmd.EditFile.show,f5:o("copy"),f6:o("move"),f7:DOM.promptNewDir,f8:o("delete"),f9:CloudCmd.Menu.show,f10:CloudCmd.Config.show,"~":CloudCmd.Konsole.show,"shift~":CloudCmd.Terminal.show,contact:CloudCmd.Contact.show};r(a[n])})};async function y(e,t){t.preventDefault();const n=t.target,r=n.getAttribute("data-name"),o=function(e){const t=C.panel;return!t||e.getAttribute("data-name")!==t.getAttribute("data-name")}(e);if("js-copy-path"===r)return a=n,void i.writeText(a.parentElement.title).then(CloudCmd.log).catch(CloudCmd.log);var a;if("js-refresh"===r)return CloudCmd.refresh({panel:e,noCurrent:o});if("js-path-link"!==r)return;const{href:s}=n,l=function(e){const t=CloudCmd.HOST,{prefix:n}=CloudCmd,r=RegExp("^"+n+d);return decodeURI(e).replace(t,"").replace(r,"").replace("%%","%25%").replace(f," ")||"/"}(s);await CloudCmd.loadDir({path:l,isRefresh:!1,panel:o?e:C.panel})}function M(e,t){const{target:n}=t,{tagName:r}=n;"UL"!==r&&e(t)}function v(e){if(!e)return e;for(;"LI"!==e.tagName;)e=e.parentElement;return e}function b(){const e=DOM.getFM();m.addOnce("contextmenu",e,e=>{CloudCmd.Menu.show({x:e.clientX,y:e.clientY})}),m.addContextMenu(e,e=>{CloudCmd.Menu.ENABLED||e.preventDefault()})}function x(){const e=DOM.getByClassAll("panel"),t=e=>{let{target:t}=e;t.classList.add("selected-panel")},n=e=>{let{target:t}=e;t.classList.remove("selected-panel")},r=e=>{const{files:t,items:n}=e.dataTransfer,{length:r}=t;if(e.preventDefault(),r&&(!n||!n.length||!n[0].webkitGetAsEntry))return u(t);const o=Array.from(n).filter(e=>"file"===e.kind);if(o.length)return DOM.uploadDirectory(o);const{Operation:a}=CloudCmd,s=e.shiftKey?"move":"copy";return a.show(s)},o=e=>{const{dataTransfer:t}=e,{effectAllowed:n}=t;/move|linkMove/.test(n)?t.dropEffect="move":t.dropEffect="copy",e.preventDefault()};for(const a of e)m.add("dragover",a,o).add("drop",a,r).add("dragenter",t).add(["dragleave","drop"],n)}e.exports.setOnPanel=e=>{const t=(e=>o.string(e)?DOM.getByDataName("js-"+e):e)(e),n=DOM.getByDataName("js-files",t),r=DOM.getByDataName("js-path",t);m.addClick(r,function(e){return y.bind(null,e)}(t)),m.add(n,g)}},80:function(e,t,n){"use strict";e.exports=(e,t,n)=>e<t?n.slice(e,t+1):e>t?n.slice(t,e+1):[n[e]]},81:function(e,t,n){"use strict";e.exports=(e,t)=>{const n=e.indexOf(t);return~n?n:0}},82:function(e,t,n){"use strict";const r=n(10),o=r.CurrentInfo,{sort:a,order:s}=CloudCmd,i=r.getPanelPosition();let l=a[i];const{getPanel:c}=r;CloudCmd.sortPanel=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c();const n=t.dataset.name.replace("js-","");e!==l?s[n]="asc":"asc"===s[n]?s[n]="desc":s[n]="asc",l=a[n]=e;const r=n!==o.panelPosition;CloudCmd.refresh({panel:t,noCurrent:r})}}});
|
|
1
|
+
!function(e){function t(t){for(var r,s,i=t[0],l=t[1],c=t[2],d=0,f=[];d<i.length;d++)s=i[d],Object.prototype.hasOwnProperty.call(o,s)&&o[s]&&f.push(o[s][0]),o[s]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(u&&u(t);f.length;)f.shift()();return a.push.apply(a,c||[]),n()}function n(){for(var e,t=0;t<a.length;t++){for(var n=a[t],r=!0,i=1;i<n.length;i++){var l=n[i];0!==o[l]&&(r=!1)}r&&(a.splice(t--,1),e=s(s.s=n[0]))}return e}var r={},o={20:0},a=[];function s(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.m=e,s.c=r,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)s.d(n,r,function(t){return e[t]}.bind(null,r));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="/dist/";var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var c=0;c<i.length;c++)t(i[c]);var u=l;a.push([41,0]),n()}({141:function(e,t){},167:function(e,t){},168:function(e,t){},169:function(e,t){},25:function(e,t,n){"use strict";async function r(e){if(!navigator.serviceWorker)return;const t="https:"===location.protocol,n="localhost"===location.hostname;return t||n?await navigator.serviceWorker.register(e+"/sw.js"):void 0}e.exports.registerSW=r,e.exports.unregisterSW=async function(e){const t=await r(e);null==t||t.unregister(e)},e.exports.listenSW=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];null==e||e.addEventListener(...n)}},34:function(e,t,n){"use strict";const r=DOM.CurrentInfo,o=n(35),a=n(31),s=n(16),i=n(36),l=n(70),c=n(76),{createBinder:u}=n(77),d=n(7)();d([]);const{assign:f}=Object,p=u();function C(e){const{key:t,shift:n,keyCode:r,keyIdentifier:o}=e,a=t||function(e){const t=e.substring(2),n=parseInt(t,16);return String.fromCharCode(n)}(o);return[function(e,t){switch(t){case i.DOT:return".";case i.HYPHEN:return e?"_":"-";case i.EQUAL:return e?"+":"="}return""}(n,r),a]}async function m(e){const{keyCode:t}=e;if(void 0===e.altKey)return;const n=e.altKey,s=e.ctrlKey,u=e.metaKey,f=t>=i.ZERO&&t<=i.Z,m=/Numpad/.test(e.code),[g,h]=C(e);if(!p.isBind())return;(e=>{const{_config:t,config:n}=CloudCmd;e===i.ESC&&t("vim",!n("vim"))})(t);const D=CloudCmd.config("vim");if(!D&&!m&&!n&&!s&&!u&&(f||g))return c(h,d);d([]),await async function(e){let t,n,s,l,c,u=r.element;const{name:d,panel:f,path:p,isDir:C}=r,{Operation:m,loadDir:g,config:h}=CloudCmd,{keyCode:D}=e,w=e.altKey,O=e.shiftKey,y=e.ctrlKey,M=e.metaKey,v=y||M;u&&(s=u.previousSibling,l=u.nextSibling);switch(D){case i.TAB:DOM.changePanel(),e.preventDefault();break;case i.INSERT:case i.INSERT_MAC:DOM.toggleSelectedFile(u).setCurrentFile(l);break;case i.DELETE:O?m.show("delete:silent"):m.show("delete");break;case i.ASTERISK:DOM.toggleAllSelectedFiles(u);break;case i.PLUS:DOM.expandSelection(),e.preventDefault();break;case i.MINUS:DOM.shrinkSelection(),e.preventDefault();break;case i.F1:CloudCmd.Help.show(),e.preventDefault();break;case i.F2:CloudCmd.UserMenu.show();break;case i.F3:e.preventDefault(),r.isDir?await g({path:p}):O?CloudCmd.View.show(null,{raw:!0}):v?CloudCmd.sortPanel("name"):CloudCmd.View.show();break;case i.F4:h("vim")?CloudCmd.EditFileVim.show():CloudCmd.EditFile.show(),e.preventDefault();break;case i.F5:v?CloudCmd.sortPanel("date"):w?m.show("pack"):m.show("copy"),e.preventDefault();break;case i.F6:v?CloudCmd.sortPanel("size"):O?DOM.renameCurrent(u):m.show("move"),e.preventDefault();break;case i.F7:O?DOM.promptNewFile():DOM.promptNewDir(),e.preventDefault();break;case i.F8:m.show("delete"),e.preventDefault();break;case i.F9:w?m.show("extract"):CloudCmd.Menu.show(),e.preventDefault();break;case i.F10:CloudCmd.Config.show(),e.preventDefault();break;case i.TRA:if(e.preventDefault(),O)return CloudCmd.Terminal.show();CloudCmd.Konsole.show();break;case i.BRACKET_CLOSE:CloudCmd.Konsole.show(),e.preventDefault();break;case i.SPACE:e.preventDefault(),n=!C||".."===d||DOM.isSelected(u),n||await DOM.loadCurrentSize(u),DOM.toggleSelectedFile(u);break;case i.U:v&&(DOM.swapPanels(),e.preventDefault());break;case i.UP:O&&DOM.toggleSelectedFile(u),DOM.setCurrentFile(s),e.preventDefault();break;case i.DOWN:O&&DOM.toggleSelectedFile(u),DOM.setCurrentFile(l),e.preventDefault();break;case i.LEFT:if(!w)return;e.preventDefault(),c=r.panel.getAttribute("data-name"),"js-right"===c&&DOM.duplicatePanel();break;case i.RIGHT:if(!w)return;e.preventDefault(),c=r.panel.getAttribute("data-name"),"js-left"===c&&DOM.duplicatePanel();break;case i.HOME:DOM.setCurrentFile(r.first),e.preventDefault();break;case i.END:DOM.setCurrentFile(r.last),e.preventDefault();break;case i.PAGE_DOWN:for(DOM.scrollByPages(f,1),t=0;t<30&&u.nextSibling;t++)u=u.nextSibling;DOM.setCurrentFile(u),e.preventDefault();break;case i.PAGE_UP:for(DOM.scrollByPages(f,-1),t=0;t<30&&u.previousSibling;t++)u=u.previousSibling;DOM.setCurrentFile(u),e.preventDefault();break;case i.ENTER:r.isDir?await g({path:p}):CloudCmd.View.show();break;case i.BACKSPACE:CloudCmd.goToParentDir(),e.preventDefault();break;case i.BACKSLASH:v&&await g({path:"/"});break;case i.A:v&&(DOM.selectAllFiles(),e.preventDefault());break;case i.G:w&&(DOM.goToDirectory(),e.preventDefault());break;case i.M:v&&(h("vim")?CloudCmd.EditNamesVim.show():CloudCmd.EditNames.show(),e.preventDefault());break;case i.P:if(!v)return;e.preventDefault(),o.writeText(r.dirPath).catch(CloudCmd.log);break;case i.R:v&&(CloudCmd.log("reloading page...\n"),CloudCmd.refresh(),e.preventDefault());break;case i.C:v&&a.copy();break;case i.X:v&&a.cut();break;case i.V:v&&a.paste();break;case i.Z:v&&a.clear();break;case i.D:v&&(CloudCmd.log("clearing storage..."),await DOM.Storage.clear(),CloudCmd.log("storage cleared"),e.preventDefault())}}(e),t>=i.F1&&t<=i.F10||D&&l(h,e)}e.exports=f(p,i),e.exports.bind=()=>{s.addKey(m,!0),p.setBind()},e.exports._listener=m},41:function(e,t,n){"use strict";n(141),n(167),n(168),n(169);const r=n(8),o=n(4),{registerSW:a,listenSW:s}=n(25);function i(e){return e?e.indexOf("/")?"/"+e:e:""}window.Emitify=n(20),e.exports=window.CloudCmd=async e=>{window.Util=n(9),window.CloudFunc=n(6);const t=n(10);window.DOM=t,window.CloudCmd=n(67),await async function(e){const{prefix:t}=e,n=await a(t);s(n,"updatefound",l(e))}(e),n(79),n(34),n(82);const r=i(e.prefix);window.CloudCmd.init(r,e)};const l=r(async e=>{const{DOM:t}=window,n=i(e.prefix);await o.js(n+"/dist/cloudcmd.common.js"),await o.js(n+"/dist/cloudcmd.js"),console.log("cloudcmd: sw: updated"),t.Events.removeAll(),window.CloudCmd(e)})},67:function(e,t,n){"use strict";const r=n(20),o=n(30),a=n(12),s=n(4),i=n(3),{addSlashToEnd:l}=n(32),c=n(33),u=n(0),d=n(1),{unregisterSW:f}=n(25),p=n(69),C=n(34),{apiURL:m,formatMsg:g,buildFromJSON:h}=n(6),D=n(78);function w(e){let t;r.call(this);const n=this,o=e.CurrentInfo,{Storage:w,Files:O}=e;this.log=function(){},this.prefix="",this.prefixSocket="",this.prefixURL="",this.DIRCLIENT="/dist/",this.DIRCLIENT_MODULES=this.DIRCLIENT+"modules/",this.MIN_ONE_PANEL_WIDTH=1155,this.HOST=location.origin||location.protocol+"//"+location.host;this.TITLE="Cloud Commander",this.sort={left:"name",right:"name"},this.order={left:"asc",right:"asc"},this.loadDir=async t=>{const r=t,s=r.isRefresh,{panel:i,history:c,noCurrent:u,currentName:f}=r;let p,C;!u&&i&&i!==o.panel&&(e.changePanel(),p=!0),(p||s||!c)&&(C="top"),d.show.load(C,i);const m=l(r.path);await async function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2?arguments[2]:void 0;const{RESTful:i}=e;n.log('reading dir: "'+t+'";');const l=n.config("dirStorage"),c=l&&await w.getJson(t),u=r.currentName||o.name,{noCurrent:d,refresh:f}=r;if(!f&&c)return await b(c,s,r);const p=e.getPanelPosition(s),C=n.sort[p],m=n.order[p],g=a("?sort={{ sort }}&order={{ order }}",{sort:C,order:m}),[,h]=await i.read(t+g,"json");if(!h)return;r.sort=C,r.order=m,await b(h,s,r),f&&!d&&e.setCurrentByName(u);if(!n.config("dirStorage"))return;w.setJson(t,h)}(m,{refresh:s,history:c,noCurrent:u,currentName:f},i)},this.init=async(r,o)=>{n.prefix=r,n.prefixURL=`${r}${m}`,n.prefixSocket=o.prefixSocket,n.config=e=>o[e],n.config.if=u((e,t,n)=>o[e]&&t(n)),n._config=(e,t)=>{"password"!==e&&(o[e]=t)},o.oneFilePanel&&(n.MIN_ONE_PANEL_WIDTH=1/0),document.body.scrollIntoViewIfNeeded||await s.js(r+n.DIRCLIENT_MODULES+"polyfill.js"),await y(),await async function(){const r=e.getFiles();n.on("current-file",e.updateCurrentInfo),n.on("current-name",M);const o=await w.get("current-name"),a=o&&e.getCurrentByName(o)||r[0];r&&e.setCurrentFile(a,{history:!location.hash});const s=e.getCurrentDirPath();t=n.Listeners,t.init();if(v().forEach(t.setOnPanel),t.initKeysPanel(),!n.config("dirStorage"))return;await w.get(s)||await w.setJson(s,p())}(),await async function(){const{prefix:e}=n,t=e+"/dist/cloudcmd.common.css";await s.css(t)}(),n.route(location.hash)},this.route=t=>{const r=t.split("/");if(!t)return;const[o]=r,a=c(o.slice(1)).replace(/.js$/,"");const s=r[1],i=e.getCurrentByName(s);if(!s||i)e.setCurrentFile(i),n.execFromModule(a,"show");else{const e=g("set current file",s,"error");n.log(e)}},this.logOut=async()=>{const t=n.prefix+"/logout",{prefix:r}=n;await e.Storage.clear(),f(r),e.load.ajax({url:t,error:()=>document.location.reload()})};const y=async()=>{n.Key=C,n.Key.bind();const[,e]=await i(O.get,"modules"),t=d.show.load,r={edit:t,menu:t};if(e)for(const t of e.local)D({name:null,path:t,dobefore:r[t]})};async function M(e){await w.set("current-name",e)}function v(){const e=["left"];return n.config("oneFilePanel")?e:[...e,"right"]}async function b(r,a,s){const{history:l,noCurrent:c}=s,[u,[d,f,p,C]]=await i(O.get,["file","path","link","pathLink"]);if(u)return e.Dialog.alert(u.responseText);const m=a||e.getPanel(),{prefix:g}=n,{dir:D,name:w}=o,{childNodes:y}=m;let M=y.length;for(;M--;)m.removeChild(m.lastChild);if(m.innerHTML=h({sort:s.sort,order:s.order,data:r,id:m.id,prefix:g,template:{file:d,path:f,pathLink:C,link:p}}),t.setOnPanel(m),!c){let t;".."===w&&"/"!==D&&(t=e.getCurrentByName(D)),t||([t]=e.getFiles(m)),e.setCurrentFile(t,{history:l}),n.emit("active-dir",o.dirPath)}}this.execFromModule=async function(e,t){await n[e]();const r=n[e][t];for(var o=arguments.length,a=new Array(o>2?o-2:0),s=2;s<o;s++)a[s-2]=arguments[s];r(...a)},this.refresh=async function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{panel:r=o.panel,currentName:a}=t,s=e.getCurrentDirPath(r),i=!0,l=!1,c=!!t&&t.noCurrent;await n.loadDir({path:s,isRefresh:i,history:l,panel:r,noCurrent:c,currentName:a})},this.goToParentDir=async()=>{const{dir:t,dirPath:r,parentDirPath:a,panel:s}=o;if(r===a)return;const i=a;await n.loadDir({path:i});const l=e.getCurrentByName(t),[c]=e.getFiles(s);e.setCurrentFile(l||c,{history:history})}}o(w,r),e.exports=new w(DOM),s.addErrorListener((e,t)=>{const n=`file ${t} could not be loaded`;d.show.error(n)})},69:function(e,t,n){"use strict";const r=DOM.CurrentInfo;e.exports=()=>({path:DOM.getCurrentDirPath(),files:(r.files||[]).filter(e=>".."!==DOM.getCurrentName(e)).map(e=>{const t=DOM.getCurrentName(e),n=DOM.getCurrentSize(e),r=DOM.getCurrentOwner(e);return{name:t,size:n,mode:DOM.getCurrentMode(e),owner:r,date:DOM.getCurrentDate(e),type:DOM.getCurrentType(e)}})})},70:function(e,t,n){"use strict";const r=n(71),o=n(72),a=DOM.CurrentInfo,{Dialog:s}=DOM;e.exports=async(e,t)=>{const n=i(t);await r(e,n)};const i=e=>({escape:DOM.unselectFiles,remove:()=>{CloudCmd.Operation.show("delete")},copy:()=>{DOM.Buffer.copy(),DOM.unselectFiles()},select:()=>{const e=a.element;DOM.toggleSelectedFile(e)},paste:DOM.Buffer.paste,moveNext:e=>{let{count:t,isVisual:n,isDelete:r}=e;c("next",{count:t,isVisual:n,isDelete:r})},movePrevious:e=>{let{count:t,isVisual:n,isDelete:r}=e;c("previous",{count:t,isVisual:n,isDelete:r})},find:async()=>{e.preventDefault();const[,t]=await s.prompt("Find","");if(!t)return;const n=a.files.map(DOM.getCurrentName),[r]=o.find(t,n);DOM.setCurrentByName(r)},findNext:()=>{const e=o.findNext();DOM.setCurrentByName(e)},findPrevious:()=>{const e=o.findPrevious();DOM.setCurrentByName(e)}});function l(e){".."!==DOM.getCurrentName(e)&&DOM.selectFile(e)}function c(e,t){let{count:n,isVisual:r,isDelete:o}=t,s=a.element;const i=r?l:DOM.unselectFile;i(s);const c=e+"Sibling";for(let e=0;e<n;e++){const e=s[c];if(!e)break;s=e,i(s)}DOM.setCurrentFile(s),o&&CloudCmd.Operation.show("delete")}e.exports.selectFile=l},71:function(e,t,n){"use strict";const r=n(7),o=r(""),a=r(!1),s=()=>{a(!1)},i=()=>{o("")},l=()=>{};function c(e){const t="d"===e[0];t&&(a(!0),e=e.split("").slice(1).join(""));var n;return{count:(n=e)?"g"===n?1:parseInt(n):1,isDelete:t,isVisual:a()}}e.exports=(e,t)=>{const n=o(),r=a(),u=o(n.concat(e)),{escape:d=l,moveNext:f=l,movePrevious:p=l,remove:C=l,copy:m=l,paste:g=l,select:h=l,find:D=l,findNext:w=l,findPrevious:O=l}=t;if("Enter"===e)return i();if("Escape"===e)return a(!1),d(),i();if("j"===e||"w"===e){const{count:e,isDelete:t,isVisual:r}=c(n);return!isNaN(e)&&f({count:e,isVisual:r,isDelete:t}),i()}if("k"===e||"b"===e){const{count:e,isDelete:t,isVisual:r}=c(n);return!isNaN(e)&&p({count:e,isVisual:r,isDelete:t}),i()}if("gg"===u||"^"===e){const{isDelete:e,isVisual:t}=c(n);return p({count:1/0,isVisual:t,isDelete:e}),i()}return"d"!==e||!a()&&"d"!==n?"G"===e||"$"===e?(f({count:1/0,isVisual:r}),i()):"y"===e?a()?(s(),m(),i()):i():/^p$/i.test(e)?(g(),i()):/^v$/i.test(e)?(a(!a()),h(),i()):"/"===e?(D(),i()):"n"===e?(w(),i()):"N"===e?(O(),i()):void 0:(s(),C(),i())}},72:function(e,t,n){"use strict";const r=n(7),o=n(73),a=r([]),s=r(0);function i(e,t){return e===t-1?0:++e}function l(e,t){return e?--e:t-1}e.exports.find=(e,t)=>{const n=o(e,t);return a(n),s(0),n},e.exports.findNext=()=>{const e=a(),t=i(s(),e.length);return s(t),e[s()]},e.exports.findPrevious=()=>{const e=a(),t=l(s(),e.length);return s(t),e[t]},e.exports._next=i,e.exports._previous=l},76:function(e,t,n){"use strict";const r=DOM.CurrentInfo,{escapeRegExp:o}=n(9);e.exports=function(e,t){let n,a=0,s=!1,i=0;const l=o(e),c=new RegExp("^"+l+".*$","i"),{files:u}=r,d=t(),f=d.length;for(;i<f&&e===d[i];)i++;i||t([]);const p=a=i;t(t().concat(e));var C;DOM.getFilenames(u).filter(e=>c.test(e)).filter((C=e=>".."===e,e=>!C(e))).some(e=>{const t=DOM.getCurrentByName(e);if(!a)return s=!0,DOM.setCurrentFile(t),!0;p===a&&(n=t),--a}),s||(DOM.setCurrentFile(n),t([e]))}},77:function(e,t,n){"use strict";e.exports.createBinder=()=>{let e=!1;return{isBind:()=>e,setBind(){e=!0},unsetBind(){e=!1}}}},78:function(e,t,n){"use strict";const r=n(5),o=n(3),a=n(4).js,s=n(33);e.exports=function(e){if(!e)return;const{path:t}=e,n=t&&s(t).replace(/.js$/,"");const i=e.dobefore;CloudCmd[n]||(CloudCmd[n]=()=>{r(i);const{prefix:e}=CloudCmd,o=e+CloudCmd.DIRCLIENT_MODULES+t+".js";return a(o).then(async()=>{const e=async e=>e&&e(),t=CloudCmd[n];return Object.assign(e,t),CloudCmd[n]=e,CloudCmd.log("init",n),await t.init(),e})},CloudCmd[n].show=async function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];CloudCmd.log("show",n,t);const a=CloudCmd[n],[s,i]=await o(a);if(s)return console.error(s);await i.show(...t)})}},79:function(e,t,n){"use strict";const r=n(5),o=n(18),a=n(0),s=n(3),i=n(35),l=n(80),c=a(n(81)),u=n(38),{FS:d}=n(6),f=RegExp(String.fromCharCode(160),"g");e.exports.init=async()=>{await Promise.all([v(),b(),void DOM.Events.add(["unload","beforeunload"],e=>{const{Key:t}=CloudCmd,n=null==t?void 0:t.isBind();if(!n)return e.preventDefault(),"Please make sure that you saved all work."}),void m.add("popstate",async e=>{let{state:t}=e;const n=(t||"").replace(d,"");if(!n)return CloudCmd.route(location.hash);await CloudCmd.loadDir({path:n,history:!1})}),void m.add("resize",()=>{const e=window.innerWidth<CloudCmd.MIN_ONE_PANEL_WIDTH;if(!e)return;const{panel:t}=C,n=!t;if(n)return;const r=t.getAttribute("data-name"),o="js-left"===r;o||DOM.changePanel()}),D(),w()])},CloudCmd.Listeners=e.exports;const p=a((e,t)=>{for(const n of e)n(t)}),C=DOM.CurrentInfo,{Events:m}=DOM,g={mousedown:r.with(y,(function(e){const t={alt:e.altKey,ctrl:e.ctrlKey,meta:e.metaKey,shift:e.shiftKey},n=M(e.target),r=C.name;DOM.setCurrentFile(n);const o=C.name;let a=[];t.shift?a=function(e,t){const n=DOM.getAllFiles(),r=DOM.getFilenames(n),o=c(r),a=o(e),s=o(t);return l(a,s,n)}(r,o):a.push(C.element);0===e.button&&function(e,t){const n=/Mac/.test(window.navigator.platform);if(!e)throw Error("key should not be undefined!");const[r]=t;if(n&&e.meta||e.ctrl)return DOM.toggleSelectedFile(r);if(e.shift)t.map(DOM.selectFile)}(t,a)})),click:p([function(e){e.preventDefault(),function(e){const{panel:t}=C,n=DOM.getByDataName("js-files",t);(function(e){for(;"UL"!==e.tagName;)e=e.parentElement;return e})(e)!==n&&DOM.changePanel()}(e.target)},e=>{const t=/Mac/.test(window.navigator.platform),{shiftKey:n,metaKey:r,ctrlKey:o}=e;n||t&&r||o||DOM.unselectFiles()}]),dragstart:r.with(y,(function(e){const{prefixURL:t}=CloudCmd,n=M(e.target),{isDir:r}=C;let o=DOM.getCurrentLink(n),a=DOM.getCurrentName(n);r&&(a+=h,o=document.createElement("a"),o.textContent=a,o.href=t+"/pack"+C.path+h);e.dataTransfer.setData("DownloadURL","application/octet-stream:"+a+":"+o)})),dblclick:r.with(y,(async function(e){e.preventDefault();const t=M(e.target),n=DOM.isCurrentIsDir(t),r=DOM.getCurrentPath(t);if(!n)return CloudCmd.View.show();await CloudCmd.loadDir({path:r})})),touchstart:r.with(y,(async function(e){const t=M(e.target);if(!DOM.isCurrentIsDir(t))return;if(!DOM.isCurrentFile(t))return;await CloudCmd.loadDir({path:DOM.getCurrentPath(t)})}))};let h;function D(){const e=DOM.getFM(),t=e=>e.dataset,n=e=>/^js-(left|right)$/.test(e.dataset.name);m.addClick(e,e=>{const r=e.target;if("js-fm-header"!==r.parentElement.dataset.name)return;const o=(r.dataset.name||"").replace("js-","");if(!/^(name|size|date)$/.test(o))return;const a=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t?e(t.parentElement,n.concat(t)):n}(r).filter(t).filter(n).pop();CloudCmd.sortPanel(o,a)})}async function w(){const[,e]=await s(DOM.Files.get,"config"),t=null==e?void 0:e.packer;h=DOM.getPackerExt(t)}e.exports.initKeysPanel=()=>{const e=DOM.getById("js-keyspanel");e&&m.addClick(e,e=>{let{target:t}=e;const{id:n}=t,o=e=>{const{Operation:t}=CloudCmd;return t.show.bind(null,e)},a={f1:CloudCmd.Help.show,f2:CloudCmd.UserMenu.show,f3:CloudCmd.View.show,f4:CloudCmd.EditFile.show,f5:o("copy"),f6:o("move"),f7:DOM.promptNewDir,f8:o("delete"),f9:CloudCmd.Menu.show,f10:CloudCmd.Config.show,"~":CloudCmd.Konsole.show,"shift~":CloudCmd.Terminal.show,contact:CloudCmd.Contact.show};r(a[n])})};async function O(e,t){t.preventDefault();const n=t.target,r=n.getAttribute("data-name"),o=function(e){const t=C.panel;return!t||e.getAttribute("data-name")!==t.getAttribute("data-name")}(e);if("js-copy-path"===r)return a=n,void i.writeText(a.parentElement.title).then(CloudCmd.log).catch(CloudCmd.log);var a;if("js-refresh"===r)return CloudCmd.refresh({panel:e,noCurrent:o});if("js-path-link"!==r)return;const{href:s}=n,l=function(e){const t=CloudCmd.HOST,{prefix:n}=CloudCmd,r=RegExp("^"+n+d);return decodeURI(e).replace(t,"").replace(r,"").replace("%%","%25%").replace(f," ")||"/"}(s);await CloudCmd.loadDir({path:l,isRefresh:!1,panel:o?e:C.panel})}function y(e,t){const{target:n}=t,{tagName:r}=n;"UL"!==r&&e(t)}function M(e){if(!e)return e;for(;"LI"!==e.tagName;)e=e.parentElement;return e}function v(){const e=DOM.getFM();m.addOnce("contextmenu",e,e=>{CloudCmd.Menu.show({x:e.clientX,y:e.clientY})}),m.addContextMenu(e,e=>{CloudCmd.Menu.ENABLED||e.preventDefault()})}function b(){const e=DOM.getByClassAll("panel"),t=e=>{let{target:t}=e;t.classList.add("selected-panel")},n=e=>{let{target:t}=e;t.classList.remove("selected-panel")},r=e=>{const{files:t,items:n}=e.dataTransfer,{length:r}=t;if(e.preventDefault(),r&&(!n||!n.length||!n[0].webkitGetAsEntry))return u(t);const o=Array.from(n).filter(e=>"file"===e.kind);if(o.length)return DOM.uploadDirectory(o);const{Operation:a}=CloudCmd,s=e.shiftKey?"move":"copy";return a.show(s)},o=e=>{const{dataTransfer:t}=e,{effectAllowed:n}=t;/move|linkMove/.test(n)?t.dropEffect="move":t.dropEffect="copy",e.preventDefault()};for(const a of e)m.add("dragover",a,o).add("drop",a,r).add("dragenter",t).add(["dragleave","drop"],n)}e.exports.setOnPanel=e=>{const t=(e=>o.string(e)?DOM.getByDataName("js-"+e):e)(e),n=DOM.getByDataName("js-files",t),r=DOM.getByDataName("js-path",t);m.addClick(r,function(e){return O.bind(null,e)}(t)),m.add(n,g)}},80:function(e,t,n){"use strict";e.exports=(e,t,n)=>e<t?n.slice(e,t+1):e>t?n.slice(t,e+1):[n[e]]},81:function(e,t,n){"use strict";e.exports=(e,t)=>{const n=e.indexOf(t);return~n?n:0}},82:function(e,t,n){"use strict";const r=n(10),o=r.CurrentInfo,{sort:a,order:s}=CloudCmd,i=r.getPanelPosition();let l=a[i];const{getPanel:c}=r;CloudCmd.sortPanel=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c();const n=t.dataset.name.replace("js-","");e!==l?s[n]="asc":"asc"===s[n]?s[n]="desc":s[n]="asc",l=a[n]=e;const r=n!==o.panelPosition;CloudCmd.refresh({panel:t,noCurrent:r})}}});
|
|
2
2
|
//# sourceMappingURL=cloudcmd.js.map
|
package/dist/cloudcmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file://cloudcmd/webpack/bootstrap","file://cloudcmd/client/sw/register.js","file://cloudcmd/client/key/index.js","file://cloudcmd/client/cloudcmd.js","file://cloudcmd/client/client.js","file://cloudcmd/client/get-json-from-file-table.js","file://cloudcmd/client/key/vim/index.js","file://cloudcmd/client/key/vim/vim.js","file://cloudcmd/client/key/vim/find.js","file://cloudcmd/client/key/set-current-by-char.js","file://cloudcmd/client/key/binder.js","file://cloudcmd/client/load-module.js","file://cloudcmd/client/listeners/index.js","file://cloudcmd/client/listeners/get-range.js","file://cloudcmd/client/listeners/get-index.js","file://cloudcmd/client/sort.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","20","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","async","registerSW","prefix","navigator","serviceWorker","isHTTPS","location","protocol","isLocalhost","hostname","register","unregisterSW","reg","unregister","listenSW","sw","args","addEventListener","Info","DOM","CurrentInfo","clipboard","require","Buffer","Events","KEY","vim","setCurrentByChar","createBinder","Chars","fullstore","assign","binder","getChar","event","keyCode","keyIdentifier","char","code","substring","hex","parseInt","String","fromCharCode","DOT","HYPHEN","EQUAL","getSymbol","listener","altKey","alt","ctrl","ctrlKey","meta","metaKey","isBetween","ZERO","Z","isNumpad","test","symbol","isBind","_config","config","CloudCmd","ESC","toggleVim","isVim","isSelected","prev","next","dataName","current","element","panel","path","isDir","Operation","loadDir","shiftKey","ctrlMeta","previousSibling","nextSibling","TAB","changePanel","preventDefault","INSERT","INSERT_MAC","toggleSelectedFile","setCurrentFile","DELETE","show","ASTERISK","toggleAllSelectedFiles","PLUS","expandSelection","MINUS","shrinkSelection","F1","Help","F2","UserMenu","F3","View","raw","sortPanel","F4","EditFileVim","EditFile","F5","F6","renameCurrent","F7","promptNewFile","promptNewDir","F8","F9","Menu","F10","Config","TRA","Terminal","Konsole","BRACKET_CLOSE","SPACE","loadCurrentSize","U","swapPanels","UP","DOWN","LEFT","getAttribute","duplicatePanel","RIGHT","HOME","first","END","last","PAGE_DOWN","scrollByPages","PAGE_UP","ENTER","BACKSPACE","goToParentDir","BACKSLASH","A","selectAllFiles","G","goToDirectory","M","EditNamesVim","EditNames","P","writeText","dirPath","catch","log","R","refresh","C","copy","X","cut","V","paste","clear","D","Storage","switchKey","addKey","setBind","_listener","wraptile","load","getPrefix","indexOf","Emitify","Util","CloudFunc","onUpdateFound","init","js","console","removeAll","inherits","rendy","tryToCatch","addSlashToEnd","pascalCase","currify","Images","getJsonFromFileTable","Key","apiURL","formatMsg","buildFromJSON","loadModule","CloudCmdProto","Listeners","this","Files","prefixSocket","prefixURL","DIRCLIENT","DIRCLIENT_MODULES","MIN_ONE_PANEL_WIDTH","HOST","origin","host","TITLE","sort","left","right","order","params","isRefresh","history","noCurrent","currentName","panelChanged","imgPosition","options","RESTful","dirStorage","json","getJson","createFileTable","position","getPanelPosition","query","newObj","read","setCurrentByName","setJson","ajaxLoad","if","fn","a","oneFilePanel","Infinity","document","body","scrollIntoViewIfNeeded","initModules","files","getFiles","on","updateCurrentInfo","saveCurrentName","currentFile","getCurrentByName","hash","getCurrentDirPath","getPanels","forEach","setOnPanel","initKeysPanel","baseInit","css","loadStyle","route","split","kebabModule","replace","file","execFromModule","msg","logOut","url","ajax","error","reload","showLoad","doBefore","edit","menu","local","dobefore","set","panels","panelParam","link","pathLink","Dialog","alert","responseText","getPanel","dir","childNodes","removeChild","lastChild","innerHTML","id","template","emit","moduleName","funcName","func","parentDirPath","addErrorListener","e","src","filter","getCurrentName","map","size","getCurrentSize","owner","getCurrentOwner","getCurrentMode","date","getCurrentDate","type","getCurrentType","finder","operations","getOperations","escape","unselectFiles","remove","select","moveNext","count","isVisual","isDelete","setCurrent","movePrevious","find","prompt","names","findNext","findPrevious","selectFile","sibling","unselectFile","store","visual","stopVisual","end","noop","handleDelete","prevStore","join","concat","isNaN","limier","searchStore","searchIndex","index","previous","_next","_previous","escapeRegExp","charStore","firstByName","skipCount","setted","escapeChar","regExp","RegExp","chars","skipN","f","getFilenames","some","byName","binded","unsetBind","exec","loadJS","pathFull","then","newModule","itype","getRange","getIndex","uploadFiles","FS","NBSP_REG","Promise","all","contextMenu","dragndrop","add","state","is","innerWidth","isEmptyRoot","isLeft","header","execAll","funcs","EventsFiles","mousedown","with","execIfNotUL","getLIElement","target","fromName","toName","from","to","getAllFiles","getNameIndex","indexFrom","indexTo","getFilesRange","button","isMac","platform","Error","toggleSelect","click","getByDataName","tagName","parentElement","getULElement","dragstart","getCurrentLink","EXT","createElement","textContent","href","dataTransfer","setData","dblclick","isCurrentIsDir","getCurrentPath","touchstart","isCurrentFile","fm","getFM","isDataset","el","dataset","isPanel","addClick","getPath","pop","packer","getPackerExt","initF2","keysElement","getById","operation","clickFuncs","Contact","onPathElementClick","attr","infoPanel","isNoCurrent","title","prefixReg","decodeURI","decodePath","callback","addOnce","x","clientX","y","clientY","addContextMenu","ENABLED","getByClassAll","classList","unselect","onDrop","items","filesCount","webkitGetAsEntry","dirFiles","Array","item","kind","uploadDirectory","onDragOver","effectAllowed","dropEffect","side","string","filesElement","pathElement","getPathListener","array","sortPrevious","panelPosition"],"mappings":"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","file":"cloudcmd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t20: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([41,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","'use strict';\n\nmodule.exports.registerSW = registerSW;\nmodule.exports.unregisterSW = unregisterSW;\n\nmodule.exports.listenSW = (sw, ...args) => {\n sw?.addEventListener(...args);\n};\n\nasync function registerSW(prefix) {\n if (!navigator.serviceWorker)\n return;\n \n const isHTTPS = location.protocol === 'https:';\n const isLocalhost = location.hostname === 'localhost';\n \n if (!isHTTPS && !isLocalhost)\n return;\n \n return await navigator.serviceWorker.register(`${prefix}/sw.js`);\n}\nasync function unregisterSW(prefix) {\n const reg = await registerSW(prefix);\n reg?.unregister(prefix);\n}\n\n","'use strict';\n\n/* global CloudCmd, DOM */\n\nconst Info = DOM.CurrentInfo;\n\nconst clipboard = require('@cloudcmd/clipboard');\n\nconst Buffer = require('../dom/buffer');\nconst Events = require('../dom/events');\n\nconst KEY = require('./key');\nconst vim = require('./vim');\nconst setCurrentByChar = require('./set-current-by-char');\nconst {createBinder} = require('./binder');\n\nconst fullstore = require('fullstore');\nconst Chars = fullstore();\n\nconst toggleVim = (keyCode) => {\n const {_config, config} = CloudCmd;\n \n if (keyCode === KEY.ESC) {\n _config('vim', !config('vim'));\n }\n};\n\nChars([]);\n\nconst {assign} = Object;\n\nconst binder = createBinder();\nmodule.exports = assign(binder, KEY);\nmodule.exports.bind = () => {\n Events.addKey(listener, true);\n binder.setBind();\n};\n\nmodule.exports._listener = listener;\n\nfunction getChar(event) {\n /*\n * event.keyIdentifier deprecated in chrome v51\n * but event.key is absent in chrome <= v51\n */\n \n const {\n key,\n shift,\n keyCode,\n keyIdentifier,\n } = event;\n const char = key || fromCharCode(keyIdentifier);\n const symbol = getSymbol(shift, keyCode);\n \n return [symbol, char];\n}\n\nasync function listener(event) {\n const {keyCode} = event;\n \n // strange chrome bug calles listener twice\n // in second time event misses a lot fields\n if (typeof event.altKey === 'undefined')\n return;\n \n const alt = event.altKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const isBetween = keyCode >= KEY.ZERO && keyCode <= KEY.Z;\n const isNumpad = /Numpad/.test(event.code);\n \n const [symbol, char] = getChar(event);\n \n if (!binder.isBind())\n return;\n \n toggleVim(keyCode);\n const isVim = CloudCmd.config('vim');\n \n if (!isVim && !isNumpad && !alt && !ctrl && !meta && (isBetween || symbol))\n return setCurrentByChar(char, Chars);\n \n Chars([]);\n await switchKey(event);\n \n if (keyCode >= KEY.F1 && keyCode <= KEY.F10)\n return;\n \n if (isVim)\n vim(char, event);\n}\n\nfunction getSymbol(shift, keyCode) {\n switch(keyCode) {\n case KEY.DOT:\n return '.';\n \n case KEY.HYPHEN:\n return shift ? '_' : '-';\n \n case KEY.EQUAL:\n return shift ? '+' : '=';\n }\n \n return '';\n}\n\nfunction fromCharCode(keyIdentifier) {\n const code = keyIdentifier.substring(2);\n const hex = parseInt(code, 16);\n const char = String.fromCharCode(hex);\n \n return char;\n}\n\nasync function switchKey(event) {\n let i;\n let isSelected;\n let prev;\n let next;\n let current = Info.element;\n let dataName;\n \n const {\n name,\n panel,\n path,\n isDir,\n } = Info;\n \n const {\n Operation,\n loadDir,\n config,\n } = CloudCmd;\n const {keyCode} = event;\n \n const alt = event.altKey;\n const shift = event.shiftKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const ctrlMeta = ctrl || meta;\n \n if (current) {\n prev = current.previousSibling;\n next = current.nextSibling;\n }\n \n switch(keyCode) {\n case KEY.TAB:\n DOM.changePanel();\n event.preventDefault();\n break;\n \n case KEY.INSERT:\n DOM .toggleSelectedFile(current)\n .setCurrentFile(next);\n break;\n \n case KEY.INSERT_MAC:\n DOM .toggleSelectedFile(current)\n .setCurrentFile(next);\n break;\n \n case KEY.DELETE:\n if (shift)\n Operation.show('delete:silent');\n else\n Operation.show('delete');\n break;\n \n case KEY.ASTERISK:\n DOM.toggleAllSelectedFiles(current);\n break;\n \n case KEY.PLUS:\n DOM.expandSelection();\n event.preventDefault();\n break;\n \n case KEY.MINUS:\n DOM.shrinkSelection();\n event.preventDefault();\n break;\n \n case KEY.F1:\n CloudCmd.Help.show();\n event.preventDefault();\n break;\n \n case KEY.F2:\n CloudCmd.UserMenu.show();\n break;\n \n case KEY.F3:\n event.preventDefault();\n \n if (Info.isDir)\n await loadDir({\n path,\n });\n else if (shift)\n CloudCmd.View.show(null, {\n raw: true,\n });\n else if (ctrlMeta)\n CloudCmd.sortPanel('name');\n else\n CloudCmd.View.show();\n \n break;\n \n case KEY.F4:\n if (config('vim'))\n CloudCmd.EditFileVim.show();\n else\n CloudCmd.EditFile.show();\n \n event.preventDefault();\n break;\n \n case KEY.F5:\n if (ctrlMeta)\n CloudCmd.sortPanel('date');\n else if (alt)\n Operation.show('pack');\n else\n Operation.show('copy');\n \n event.preventDefault();\n break;\n \n case KEY.F6:\n if (ctrlMeta)\n CloudCmd.sortPanel('size');\n else if (shift)\n DOM.renameCurrent(current);\n else\n Operation.show('move');\n \n event.preventDefault();\n break;\n \n case KEY.F7:\n if (shift)\n DOM.promptNewFile();\n else\n DOM.promptNewDir();\n \n event.preventDefault();\n break;\n \n case KEY.F8:\n Operation.show('delete');\n event.preventDefault();\n break;\n \n case KEY.F9:\n if (alt)\n Operation.show('extract');\n else\n CloudCmd.Menu.show();\n \n event.preventDefault();\n break;\n \n case KEY.F10:\n CloudCmd.Config.show();\n event.preventDefault();\n break;\n \n case KEY.TRA:\n event.preventDefault();\n \n if (shift)\n return CloudCmd.Terminal.show();\n \n CloudCmd.Konsole.show();\n break;\n \n case KEY.BRACKET_CLOSE:\n CloudCmd.Konsole.show();\n event.preventDefault();\n break;\n \n case KEY.SPACE:\n event.preventDefault();\n \n if (!isDir || name === '..')\n isSelected = true;\n else\n isSelected = DOM.isSelected(current);\n \n if (!isSelected)\n await DOM.loadCurrentSize(current);\n \n DOM.toggleSelectedFile(current);\n \n break;\n \n case KEY.U:\n if (ctrlMeta) {\n DOM.swapPanels();\n event.preventDefault();\n }\n break;\n \n /* navigation on file table: *\n * in case of pressing button 'up', *\n * select previous row */\n case KEY.UP:\n if (shift)\n DOM.toggleSelectedFile(current);\n \n DOM.setCurrentFile(prev);\n event.preventDefault();\n break;\n \n /* in case of pressing button 'down', *\n * select next row */\n case KEY.DOWN:\n if (shift)\n DOM.toggleSelectedFile(current);\n \n DOM.setCurrentFile(next);\n event.preventDefault();\n break;\n \n case KEY.LEFT:\n if (!alt)\n return;\n \n event.preventDefault();\n \n dataName = Info.panel.getAttribute('data-name');\n \n if (dataName === 'js-right')\n DOM.duplicatePanel();\n \n break;\n \n case KEY.RIGHT:\n if (!alt)\n return;\n \n event.preventDefault();\n \n dataName = Info.panel.getAttribute('data-name');\n \n if (dataName === 'js-left')\n DOM.duplicatePanel();\n \n break;\n \n /* in case of pressing button 'Home', *\n * go to top element */\n case KEY.HOME:\n DOM.setCurrentFile(Info.first);\n event.preventDefault();\n break;\n \n /* in case of pressing button 'End', select last element */\n case KEY.END:\n DOM.setCurrentFile(Info.last);\n event.preventDefault();\n break;\n \n /* если нажали клавишу page down проматываем экран */\n case KEY.PAGE_DOWN:\n DOM.scrollByPages(panel, 1);\n \n for (i = 0; i < 30; i++) {\n if (!current.nextSibling)\n break;\n \n current = current.nextSibling;\n }\n \n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n \n /* если нажали клавишу page up проматываем экран */\n case KEY.PAGE_UP:\n DOM.scrollByPages(panel, -1);\n \n for (i = 0; i < 30; i++) {\n if (!current.previousSibling)\n break;\n \n current = current.previousSibling;\n }\n \n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n \n case KEY.ENTER:\n if (Info.isDir)\n await loadDir({path});\n else\n CloudCmd.View.show();\n break;\n \n case KEY.BACKSPACE:\n CloudCmd.goToParentDir();\n event.preventDefault();\n break;\n \n case KEY.BACKSLASH:\n if (ctrlMeta)\n await loadDir({\n path: '/',\n });\n break;\n \n case KEY.A:\n if (ctrlMeta) {\n DOM.selectAllFiles();\n event.preventDefault();\n }\n \n break;\n \n case KEY.G:\n if (alt) {\n DOM.goToDirectory();\n event.preventDefault();\n }\n \n break;\n \n case KEY.M:\n if (ctrlMeta) {\n if (config('vim'))\n CloudCmd.EditNamesVim.show();\n else\n CloudCmd.EditNames.show();\n \n event.preventDefault();\n }\n \n break;\n \n case KEY.P:\n if (!ctrlMeta)\n return;\n \n event.preventDefault();\n clipboard\n .writeText(Info.dirPath)\n .catch(CloudCmd.log);\n \n break;\n /**\n * обновляем страницу,\n * загружаем содержимое каталога\n * при этом данные берём всегда с\n * сервера, а не из кэша\n * (обновляем кэш)\n */\n case KEY.R:\n if (ctrlMeta) {\n CloudCmd.log('reloading page...\\n');\n CloudCmd.refresh();\n event.preventDefault();\n }\n break;\n \n case KEY.C:\n if (ctrlMeta)\n Buffer.copy();\n break;\n \n case KEY.X:\n if (ctrlMeta)\n Buffer.cut();\n break;\n \n case KEY.V:\n if (ctrlMeta)\n Buffer.paste();\n break;\n \n case KEY.Z:\n if (ctrlMeta)\n Buffer.clear();\n break;\n \n /* чистим хранилище */\n case KEY.D:\n if (ctrlMeta) {\n CloudCmd.log('clearing storage...');\n await DOM.Storage.clear();\n CloudCmd.log('storage cleared');\n event.preventDefault();\n }\n break;\n }\n}\n\n","'use strict';\n\nrequire('../css/main.css');\nrequire('../css/nojs.css');\nrequire('../css/columns/name-size-date.css');\nrequire('../css/columns/name-size.css');\n\nconst wraptile = require('wraptile');\nconst load = require('load.js');\n\nconst isDev = process.env.NODE_ENV === 'development';\n\nconst {\n registerSW,\n listenSW,\n} = require('./sw/register');\n\n// prevent additional loading of emitify\nwindow.Emitify = require('emitify');\n\nmodule.exports = window.CloudCmd = async (config) => {\n window.Util = require('../common/util');\n window.CloudFunc = require('../common/cloudfunc');\n \n const DOM = require('./dom');\n \n window.DOM = DOM;\n window.CloudCmd = require('./client');\n \n await register(config);\n \n require('./listeners');\n require('./key');\n require('./sort');\n \n const prefix = getPrefix(config.prefix);\n \n window.CloudCmd.init(prefix, config);\n};\n\nfunction getPrefix(prefix) {\n if (!prefix)\n return '';\n \n if (!prefix.indexOf('/'))\n return prefix;\n \n return `/${prefix}`;\n}\n\nconst onUpdateFound = wraptile(async (config) => {\n if (isDev)\n return;\n \n const {DOM} = window;\n const prefix = getPrefix(config.prefix);\n \n await load.js(`${prefix}/dist/cloudcmd.common.js`);\n await load.js(`${prefix}/dist/cloudcmd.js`);\n \n console.log('cloudcmd: sw: updated');\n \n DOM.Events.removeAll();\n window.CloudCmd(config);\n});\n\nasync function register(config) {\n const {prefix} = config;\n const sw = await registerSW(prefix);\n \n listenSW(sw, 'updatefound', onUpdateFound(config));\n}\n\n","'use strict';\n\n/* global DOM */\n\nconst Emitify = require('emitify');\nconst inherits = require('inherits');\nconst rendy = require('rendy');\nconst load = require('load.js');\nconst tryToCatch = require('try-to-catch');\nconst {addSlashToEnd} = require('format-io');\nconst pascalCase = require('just-pascal-case');\nconst currify = require('currify');\n\nconst isDev = process.env.NODE_ENV === 'development';\n\nconst Images = require('./dom/images');\nconst {unregisterSW} = require('./sw/register');\nconst getJsonFromFileTable = require('./get-json-from-file-table');\nconst Key = require('./key');\n\nconst noJS = (a) => a.replace(/.js$/, '');\n\nconst {\n apiURL,\n formatMsg,\n buildFromJSON,\n} = require('../common/cloudfunc');\n\nconst loadModule = require('./load-module');\n\ninherits(CloudCmdProto, Emitify);\n\nmodule.exports = new CloudCmdProto(DOM);\n\nload.addErrorListener((e, src) => {\n const msg = `file ${src} could not be loaded`;\n Images.show.error(msg);\n});\n\nfunction CloudCmdProto(DOM) {\n let Listeners;\n \n const log = (...a) => {\n if (!isDev )\n return;\n \n console.log(...a);\n };\n \n Emitify.call(this);\n \n const CloudCmd = this;\n const Info = DOM.CurrentInfo;\n \n const {\n Storage,\n Files,\n } = DOM;\n \n this.log = log;\n this.prefix = '';\n this.prefixSocket = '';\n this.prefixURL = '';\n this.DIRCLIENT = '/dist/';\n this.DIRCLIENT_MODULES = this.DIRCLIENT + 'modules/';\n \n this.MIN_ONE_PANEL_WIDTH = 1155;\n this.HOST = location.origin || location.protocol + '//' + location.host;\n \n const TITLE = 'Cloud Commander';\n this.TITLE = TITLE;\n \n this.sort = {\n left: 'name',\n right: 'name',\n };\n \n this.order = {\n left: 'asc',\n right: 'asc',\n };\n \n /**\n * Функция привязываеться ко всем ссылкам и\n * загружает содержимое каталогов\n *\n * @param params - {\n * paramLink - ссылка\n * needRefresh - необходимость обязательной загрузки данных с сервера\n * panel\n * }\n * @param callback\n */\n this.loadDir = async (params) => {\n const p = params;\n const refresh = p.isRefresh;\n \n const {\n panel,\n history,\n noCurrent,\n currentName,\n } = p;\n \n let panelChanged;\n \n if (!noCurrent && panel && panel !== Info.panel) {\n DOM.changePanel();\n panelChanged = true;\n }\n \n let imgPosition;\n \n if (panelChanged || refresh || !history)\n imgPosition = 'top';\n \n Images.show.load(imgPosition, panel);\n const path = addSlashToEnd(p.path);\n \n /* загружаем содержимое каталога */\n await ajaxLoad(path, {\n refresh,\n history,\n noCurrent,\n currentName,\n }, panel);\n };\n \n /**\n * Конструктор CloudClient, который\n * выполняет весь функционал по\n * инициализации\n */\n this.init = async (prefix, config) => {\n CloudCmd.prefix = prefix;\n CloudCmd.prefixURL = `${prefix}${apiURL}`;\n CloudCmd.prefixSocket = config.prefixSocket;\n \n CloudCmd.config = (key) => config[key];\n CloudCmd.config.if = currify((key, fn, a) => config[key] && fn(a));\n CloudCmd._config = (key, value) => {\n /*\n * should be called from config.js only\n * after successful update on server\n */\n \n if (key === 'password')\n return;\n \n config[key] = value;\n };\n \n if (config.oneFilePanel)\n CloudCmd.MIN_ONE_PANEL_WIDTH = Infinity;\n \n if (!document.body.scrollIntoViewIfNeeded)\n await load.js(prefix + CloudCmd.DIRCLIENT_MODULES + 'polyfill.js');\n \n await initModules();\n await baseInit();\n await loadStyle();\n \n CloudCmd.route(location.hash);\n };\n \n async function loadStyle() {\n const {prefix} = CloudCmd;\n const name = prefix + '/dist/cloudcmd.common.css';\n \n await load.css(name);\n }\n \n this.route = (path) => {\n const query = path.split('/');\n \n if (!path)\n return;\n \n const [kebabModule] = query;\n const module = noJS(pascalCase(kebabModule.slice(1)));\n \n const file = query[1];\n const current = DOM.getCurrentByName(file);\n \n if (file && !current) {\n const msg = formatMsg('set current file', file, 'error');\n CloudCmd.log(msg);\n return;\n }\n \n DOM.setCurrentFile(current);\n CloudCmd.execFromModule(module, 'show');\n };\n \n this.logOut = async () => {\n const url = CloudCmd.prefix + '/logout';\n const error = () => document.location.reload();\n const {prefix} = CloudCmd;\n \n await DOM.Storage.clear();\n unregisterSW(prefix);\n DOM.load.ajax({\n url,\n error,\n });\n };\n \n const initModules = async () => {\n CloudCmd.Key = Key;\n CloudCmd.Key.bind();\n \n const [, modules] = await tryToCatch(Files.get, 'modules');\n const showLoad = Images.show.load;\n \n const doBefore = {\n edit: showLoad,\n menu: showLoad,\n };\n \n const load = (name, path, dobefore) => {\n loadModule({\n name,\n path,\n dobefore,\n });\n };\n \n if (!modules)\n return;\n \n for (const module of modules.local) {\n load(null, module, doBefore[module]);\n }\n };\n \n async function saveCurrentName(currentName) {\n await Storage.set('current-name', currentName);\n }\n \n async function baseInit() {\n const files = DOM.getFiles();\n \n CloudCmd.on('current-file', DOM.updateCurrentInfo);\n CloudCmd.on('current-name', saveCurrentName);\n \n const name = await Storage.get('current-name');\n const currentFile = name && DOM.getCurrentByName(name) || files[0];\n \n /* выделяем строку с первым файлом */\n if (files)\n DOM.setCurrentFile(currentFile, {\n // when hash is present\n // it should be handled with this.route\n // overwre otherwise\n history: !location.hash,\n });\n \n const dirPath = DOM.getCurrentDirPath();\n Listeners = CloudCmd.Listeners;\n Listeners.init();\n \n const panels = getPanels();\n panels.forEach(Listeners.setOnPanel);\n \n Listeners.initKeysPanel();\n \n if (!CloudCmd.config('dirStorage'))\n return;\n \n const data = await Storage.get(dirPath);\n \n if (!data)\n await Storage.setJson(dirPath, getJsonFromFileTable());\n }\n \n function getPanels() {\n const panels = ['left'];\n \n if (CloudCmd.config('oneFilePanel'))\n return panels;\n \n return [\n ...panels,\n 'right',\n ];\n }\n \n this.execFromModule = async (moduleName, funcName, ...args) => {\n await CloudCmd[moduleName]();\n \n const func = CloudCmd[moduleName][funcName];\n func(...args);\n };\n \n this.refresh = async (options = {}) => {\n const {\n panel = Info.panel,\n currentName,\n } = options;\n \n const path = DOM.getCurrentDirPath(panel);\n \n const isRefresh = true;\n const history = false;\n const noCurrent = options ? options.noCurrent : false;\n \n await CloudCmd.loadDir({\n path,\n isRefresh,\n history,\n panel,\n noCurrent,\n currentName,\n });\n };\n \n /**\n * Функция загружает json-данные о Файловой Системе\n * через ajax-запрос.\n * @param path - каталог для чтения\n * @param options\n * { refresh, history } - необходимость обновить данные о каталоге\n * @param panel\n * @param callback\n *\n */\n async function ajaxLoad(path, options = {}, panel) {\n const {RESTful} = DOM;\n \n CloudCmd.log('reading dir: \"' + path + '\";');\n \n const dirStorage = CloudCmd.config('dirStorage');\n const json = dirStorage && await Storage.getJson(path);\n \n const name = options.currentName || Info.name;\n const {\n noCurrent,\n refresh,\n } = options;\n \n if (!refresh && json)\n return await createFileTable(json, panel, options);\n \n const position = DOM.getPanelPosition(panel);\n const sort = CloudCmd.sort[position];\n const order = CloudCmd.order[position];\n \n const query = rendy('?sort={{ sort }}&order={{ order }}', {\n sort,\n order,\n });\n \n const [, newObj] = await RESTful.read(path + query, 'json');\n \n if (!newObj)\n return; // that's OK, error handled by RESTful\n \n options.sort = sort;\n options.order = order;\n \n await createFileTable(newObj, panel, options);\n \n if (refresh && !noCurrent)\n DOM.setCurrentByName(name);\n \n if (!CloudCmd.config('dirStorage'))\n return;\n \n Storage.setJson(path, newObj);\n }\n \n /**\n * Функция строит файловую таблицу\n * @param json - данные о файлах\n * @param panelParam\n * @param history\n * @param callback\n */\n async function createFileTable(data, panelParam, options) {\n const {\n history,\n noCurrent,\n } = options;\n \n const names = [\n 'file',\n 'path',\n 'link',\n 'pathLink',\n ];\n \n const [\n error,\n [file, path, link, pathLink],\n ] = await tryToCatch(Files.get, names);\n \n if (error)\n return DOM.Dialog.alert(error.responseText);\n \n const panel = panelParam || DOM.getPanel();\n const {prefix} = CloudCmd;\n \n const {\n dir,\n name,\n } = Info;\n \n const {childNodes} = panel;\n let i = childNodes.length;\n \n while (i--)\n panel.removeChild(panel.lastChild);\n \n panel.innerHTML = buildFromJSON({\n sort : options.sort,\n order : options.order,\n data,\n id : panel.id,\n prefix,\n template : {\n file,\n path,\n pathLink,\n link,\n },\n });\n \n Listeners.setOnPanel(panel);\n \n if (!noCurrent) {\n let current;\n \n if (name === '..' && dir !== '/')\n current = DOM.getCurrentByName(dir);\n \n if (!current)\n [current] = DOM.getFiles(panel);\n \n DOM.setCurrentFile(current, {\n history,\n });\n \n CloudCmd.emit('active-dir', Info.dirPath);\n }\n }\n \n this.goToParentDir = async () => {\n const {\n dir,\n dirPath,\n parentDirPath,\n panel,\n } = Info;\n \n if (dirPath === parentDirPath)\n return;\n \n const path = parentDirPath;\n \n await CloudCmd.loadDir({\n path,\n });\n \n const current = DOM.getCurrentByName(dir);\n const [first] = DOM.getFiles(panel);\n \n DOM.setCurrentFile(current || first, {\n history,\n });\n };\n}\n\n","'use strict';\n\n/* global DOM */\n\nconst Info = DOM.CurrentInfo;\n\n/**\n * Функция генерирует JSON из html-таблицы файлов и\n * используеться при первом заходе в корень\n */\nmodule.exports = () => {\n const path = DOM.getCurrentDirPath();\n const infoFiles = Info.files || [];\n \n const notParent = (current) => {\n const name = DOM.getCurrentName(current);\n return name !== '..';\n };\n \n const parse = (current) => {\n const name = DOM.getCurrentName(current);\n const size = DOM.getCurrentSize(current);\n const owner = DOM.getCurrentOwner(current);\n const mode = DOM.getCurrentMode(current);\n const date = DOM.getCurrentDate(current);\n const type = DOM.getCurrentType(current);\n \n return {\n name,\n size,\n mode,\n owner,\n date,\n type,\n };\n };\n \n const files = infoFiles\n .filter(notParent)\n .map(parse);\n \n const fileTable = {\n path,\n files,\n };\n \n return fileTable;\n};\n\n","'use strict';\n\n/* global CloudCmd */\n/* global DOM */\n\nconst vim = require('./vim');\nconst finder = require('./find');\n\nconst Info = DOM.CurrentInfo;\nconst {Dialog} = DOM;\n\nmodule.exports = async (key, event) => {\n const operations = getOperations(event);\n await vim(key, operations);\n};\n\nconst getOperations = (event) => ({\n escape: DOM.unselectFiles,\n \n remove: () => {\n CloudCmd.Operation.show('delete');\n },\n \n copy: () => {\n DOM.Buffer.copy();\n DOM.unselectFiles();\n },\n \n select: () => {\n const current = Info.element;\n DOM.toggleSelectedFile(current);\n },\n \n paste: DOM.Buffer.paste,\n \n moveNext: ({count, isVisual, isDelete}) => {\n setCurrent('next', {\n count,\n isVisual,\n isDelete,\n });\n },\n \n movePrevious: ({count, isVisual, isDelete}) => {\n setCurrent('previous', {\n count,\n isVisual,\n isDelete,\n });\n },\n \n find: async () => {\n event.preventDefault();\n const [, value] = await Dialog.prompt('Find', '');\n \n if (!value)\n return;\n \n const names = Info.files.map(DOM.getCurrentName);\n const [result] = finder.find(value, names);\n \n DOM.setCurrentByName(result);\n },\n \n findNext: () => {\n const name = finder.findNext();\n DOM.setCurrentByName(name);\n },\n \n findPrevious: () => {\n const name = finder.findPrevious();\n DOM.setCurrentByName(name);\n },\n});\n\nmodule.exports.selectFile = selectFile;\n\nfunction selectFile(current) {\n const name = DOM.getCurrentName(current);\n \n if (name === '..')\n return;\n \n DOM.selectFile(current);\n}\n\nfunction setCurrent(sibling, {count, isVisual, isDelete}) {\n let current = Info.element;\n const select = isVisual ? selectFile : DOM.unselectFile;\n \n select(current);\n \n const position = `${sibling}Sibling`;\n for (let i = 0; i < count; i++) {\n const next = current[position];\n \n if (!next)\n break;\n \n current = next;\n select(current);\n }\n \n DOM.setCurrentFile(current);\n \n if (isDelete)\n CloudCmd.Operation.show('delete');\n}\n\n","'use strict';\n\nconst fullstore = require('fullstore');\nconst store = fullstore('');\nconst visual = fullstore(false);\n\nconst stopVisual = () => {\n visual(false);\n};\n\nconst end = () => {\n store('');\n};\n\nconst rmFirst = (a) => {\n return a\n .split('')\n .slice(1)\n .join('');\n};\n\nconst noop = () => {};\n\nmodule.exports = (key, operations) => {\n const prevStore = store();\n const isVisual = visual();\n const value = store(prevStore.concat(key));\n const {\n escape = noop,\n moveNext = noop,\n movePrevious = noop,\n remove = noop,\n copy = noop,\n paste = noop,\n select = noop,\n find = noop,\n findNext = noop,\n findPrevious = noop,\n } = operations;\n \n if (key === 'Enter')\n return end();\n \n if (key === 'Escape') {\n visual(false);\n escape();\n return end();\n }\n \n if (key === 'j' || key === 'w') {\n const {\n count,\n isDelete,\n isVisual,\n } = handleDelete(prevStore);\n \n !isNaN(count) && moveNext({\n count,\n isVisual,\n isDelete,\n });\n \n return end();\n }\n \n if (key === 'k' || key === 'b') {\n const {\n count,\n isDelete,\n isVisual,\n } = handleDelete(prevStore);\n \n !isNaN(count) && movePrevious({\n count,\n isVisual,\n isDelete,\n });\n \n return end();\n }\n \n if (value === 'gg' || key === '^') {\n const {\n isDelete,\n isVisual,\n } = handleDelete(prevStore);\n \n movePrevious({\n count: Infinity,\n isVisual,\n isDelete,\n });\n \n return end();\n }\n \n if (key === 'd' && (visual() || prevStore === 'd')) {\n stopVisual();\n remove();\n return end();\n }\n \n if (key === 'G' || key === '$') {\n moveNext({\n count: Infinity,\n isVisual,\n });\n \n return end();\n }\n \n if (key === 'y') {\n if (!visual())\n return end();\n \n stopVisual();\n copy();\n return end();\n }\n \n if (/^p$/i.test(key)) {\n paste();\n return end();\n }\n \n if (/^v$/i.test(key)) {\n visual(!visual());\n select();\n return end();\n }\n \n if (key === '/') {\n find();\n return end();\n }\n \n if (key === 'n') {\n findNext();\n return end();\n }\n \n if (key === 'N') {\n findPrevious();\n return end();\n }\n};\n\nfunction handleDelete(prevStore) {\n const isDelete = prevStore[0] === 'd';\n \n if (isDelete) {\n visual(true);\n prevStore = rmFirst(prevStore);\n }\n \n const count = getNumber(prevStore);\n const isVisual = visual();\n \n return {\n count,\n isDelete,\n isVisual,\n };\n}\n\nfunction getNumber(value) {\n if (!value)\n return 1;\n \n if (value === 'g')\n return 1;\n \n return parseInt(value);\n}\n\n","'use strict';\n\nconst fullstore = require('fullstore');\nconst limier = require('limier');\n\nconst searchStore = fullstore([]);\nconst searchIndex = fullstore(0);\n\nmodule.exports.find = (value, names) => {\n const result = limier(value, names);\n \n searchStore(result);\n searchIndex(0);\n \n return result;\n};\n\nmodule.exports.findNext = () => {\n const names = searchStore();\n const index = next(searchIndex(), names.length);\n \n searchIndex(index);\n return names[searchIndex()];\n};\n\nmodule.exports.findPrevious = () => {\n const names = searchStore();\n const index = previous(searchIndex(), names.length);\n \n searchIndex(index);\n return names[index];\n};\n\nmodule.exports._next = next;\nmodule.exports._previous = previous;\n\nfunction next(index, length) {\n if (index === length - 1)\n return 0;\n \n return ++index;\n}\n\nfunction previous(index, length) {\n if (!index)\n return length - 1;\n \n return --index;\n}\n\n","/* global DOM */\n\n'use strict';\n\nconst Info = DOM.CurrentInfo;\nconst {escapeRegExp} = require('../../common/util');\n\nmodule.exports = function setCurrentByChar(char, charStore) {\n let firstByName;\n let skipCount = 0;\n let setted = false;\n let i = 0;\n \n const escapeChar = escapeRegExp(char);\n const regExp = new RegExp('^' + escapeChar + '.*$', 'i');\n const {files} = Info;\n const chars = charStore();\n const n = chars.length;\n \n while (i < n && char === chars[i])\n i++;\n \n if (!i)\n charStore([]);\n \n const skipN = skipCount = i;\n \n charStore(charStore().concat(char));\n \n const names = DOM.getFilenames(files);\n const isTest = (a) => regExp.test(a);\n const isRoot = (a) => a === '..';\n const not = (f) => (a) => !f(a);\n const setCurrent = (name) => {\n const byName = DOM.getCurrentByName(name);\n \n if (!skipCount) {\n setted = true;\n DOM.setCurrentFile(byName);\n return true;\n }\n \n if (skipN === skipCount)\n firstByName = byName;\n \n --skipCount;\n };\n \n names\n .filter(isTest)\n .filter(not(isRoot))\n .some(setCurrent);\n \n if (!setted) {\n DOM.setCurrentFile(firstByName);\n charStore([char]);\n }\n};\n\n","'use strict';\n\nmodule.exports.createBinder = () => {\n let binded = false;\n \n return {\n isBind() {\n return binded;\n },\n setBind() {\n binded = true;\n },\n unsetBind() {\n binded = false;\n },\n };\n};\n\n","'use strict';\n\n/* global CloudCmd */\n\nconst exec = require('execon');\nconst tryToCatch = require('try-to-catch');\nconst loadJS = require('load.js').js;\n\nconst pascalCase = require('just-pascal-case');\nconst noJS = (a) => a.replace(/.js$/, '');\n\n/**\n * function load modules\n * @params = {name, path, func, dobefore, arg}\n */\nmodule.exports = function loadModule(params) {\n if (!params)\n return;\n \n const {path} = params;\n \n const name = path && noJS(pascalCase(path));\n const doBefore = params.dobefore;\n \n if (CloudCmd[name])\n return;\n \n CloudCmd[name] = () => {\n exec(doBefore);\n const {prefix} = CloudCmd;\n const pathFull = prefix + CloudCmd.DIRCLIENT_MODULES + path + '.js';\n \n return loadJS(pathFull).then(async () => {\n const newModule = async (f) => f && f();\n const module = CloudCmd[name];\n \n Object.assign(newModule, module);\n \n CloudCmd[name] = newModule;\n \n CloudCmd.log('init', name);\n await module.init();\n \n return newModule;\n });\n };\n \n CloudCmd[name].show = async (...args) => {\n CloudCmd.log('show', name, args);\n const m = CloudCmd[name];\n \n const [e, a] = await tryToCatch(m);\n \n if (e)\n return console.error(e);\n \n await a.show(...args);\n };\n};\n\n","/* global DOM, CloudCmd */\n\n'use strict';\n\nconst exec = require('execon');\nconst itype = require('itype');\nconst currify = require('currify');\nconst tryToCatch = require('try-to-catch');\nconst clipboard = require('@cloudcmd/clipboard');\n\nconst getRange = require('./get-range');\nconst getIndex = currify(require('./get-index'));\nconst uploadFiles = require('../dom/upload-files');\n\nconst {FS} = require('../../common/cloudfunc');\n\nconst NBSP_REG = RegExp(String.fromCharCode(160), 'g');\nconst SPACE = ' ';\n\nmodule.exports.init = async () => {\n await Promise.all([\n contextMenu(),\n dragndrop(),\n unload(),\n pop(),\n resize(),\n header(),\n config(),\n ]);\n};\n\nCloudCmd.Listeners = module.exports;\n\nconst unselect = (event) => {\n const isMac = /Mac/.test(window.navigator.platform);\n const {\n shiftKey,\n metaKey,\n ctrlKey,\n } = event;\n \n if (shiftKey || isMac && metaKey || ctrlKey)\n return;\n \n DOM.unselectFiles();\n};\n\nconst execAll = currify((funcs, event) => {\n for (const fn of funcs)\n fn(event);\n});\n\nconst Info = DOM.CurrentInfo;\nconst {Events} = DOM;\nconst EventsFiles = {\n mousedown: exec.with(execIfNotUL, setCurrentFileByEvent),\n click: execAll([\n onClick,\n unselect,\n ]),\n dragstart: exec.with(execIfNotUL, onDragStart),\n dblclick: exec.with(execIfNotUL, onDblClick),\n touchstart: exec.with(execIfNotUL, onTouch),\n};\n\nlet EXT;\n\nfunction header() {\n const fm = DOM.getFM();\n const isDataset = (el) => el.dataset;\n const isPanel = (el) => {\n return /^js-(left|right)$/.test(el.dataset.name);\n };\n \n Events.addClick(fm, (event) => {\n const el = event.target;\n const parent = el.parentElement;\n \n if (parent.dataset.name !== 'js-fm-header')\n return;\n \n const name = (el.dataset.name || '')\n .replace('js-', '');\n \n if (!/^(name|size|date)$/.test(name))\n return;\n \n const panel = getPath(el)\n .filter(isDataset)\n .filter(isPanel)\n .pop();\n \n CloudCmd.sortPanel(name, panel);\n });\n}\n\nfunction getPath(el, path = []) {\n if (!el)\n return path;\n \n return getPath(el.parentElement, path.concat(el));\n}\n\nasync function config() {\n const [, config] = await tryToCatch(DOM.Files.get, 'config');\n const type = config?.packer;\n \n EXT = DOM.getPackerExt(type);\n}\n\nmodule.exports.initKeysPanel = () => {\n const keysElement = DOM.getById('js-keyspanel');\n \n if (!keysElement)\n return;\n \n Events.addClick(keysElement, ({target}) => {\n const {id} = target;\n const operation = (name) => {\n const {Operation} = CloudCmd;\n const fn = Operation.show.bind(null, name);\n \n return fn;\n };\n \n const clickFuncs = {\n 'f1' : CloudCmd.Help.show,\n 'f2' : initF2,\n 'f3' : CloudCmd.View.show,\n 'f4' : CloudCmd.EditFile.show,\n 'f5' : operation('copy'),\n 'f6' : operation('move'),\n 'f7' : DOM.promptNewDir,\n 'f8' : operation('delete'),\n 'f9' : CloudCmd.Menu.show,\n 'f10' : CloudCmd.Config.show,\n '~' : CloudCmd.Konsole.show,\n 'shift~' : CloudCmd.Terminal.show,\n 'contact' : CloudCmd.Contact.show,\n };\n \n exec(clickFuncs[id]);\n });\n};\n\nfunction initF2() {\n CloudCmd.UserMenu.show();\n}\n\nconst getPanel = (side) => {\n if (!itype.string(side))\n return side;\n \n return DOM.getByDataName('js-' + side);\n};\n\nmodule.exports.setOnPanel = (side) => {\n const panel = getPanel(side);\n \n const filesElement = DOM.getByDataName('js-files', panel);\n const pathElement = DOM.getByDataName('js-path', panel);\n \n /* ставим загрузку гифа на клик*/\n Events.addClick(pathElement, getPathListener(panel));\n Events.add(filesElement, EventsFiles);\n};\n\nfunction getPathListener(panel) {\n return onPathElementClick.bind(null, panel);\n}\n\nfunction isNoCurrent(panel) {\n const infoPanel = Info.panel;\n \n if (!infoPanel)\n return true;\n \n const namePanel = panel.getAttribute('data-name');\n const nameInfoPanel = infoPanel.getAttribute('data-name');\n \n return namePanel !== nameInfoPanel;\n}\n\nfunction decodePath(path) {\n const url = CloudCmd.HOST;\n const {prefix} = CloudCmd;\n const prefixReg = RegExp('^' + prefix + FS);\n \n return decodeURI(path)\n .replace(url, '')\n .replace(prefixReg, '')\n // browser doesn't replace % -> %25% do it for him\n .replace('%%', '%25%')\n .replace(NBSP_REG, SPACE) || '/';\n}\n\nasync function onPathElementClick(panel, event) {\n event.preventDefault();\n \n const element = event.target;\n const attr = element.getAttribute('data-name');\n const noCurrent = isNoCurrent(panel);\n \n if (attr === 'js-copy-path')\n return copyPath(element);\n \n if (attr === 'js-refresh')\n return CloudCmd.refresh({\n panel,\n noCurrent,\n });\n \n if (attr !== 'js-path-link')\n return;\n \n const {href} = element;\n const path = decodePath(href);\n \n await CloudCmd.loadDir({\n path,\n isRefresh: false,\n panel: noCurrent ? panel : Info.panel,\n });\n}\n\nfunction copyPath(el) {\n clipboard.writeText(el.parentElement.title)\n .then(CloudCmd.log)\n .catch(CloudCmd.log);\n}\n\nfunction execIfNotUL(callback, event) {\n const {target} = event;\n const {tagName} = target;\n \n if (tagName !== 'UL')\n callback(event);\n}\n\nfunction onClick(event) {\n event.preventDefault();\n changePanel(event.target);\n}\n\nfunction toggleSelect(key, files) {\n const isMac = /Mac/.test(window.navigator.platform);\n \n if (!key)\n throw Error('key should not be undefined!');\n \n const [file] = files;\n \n if (isMac && key.meta || key.ctrl)\n return DOM.toggleSelectedFile(file);\n \n if (key.shift)\n return files.map(DOM.selectFile);\n}\n\nfunction changePanel(element) {\n const {panel} = Info;\n const files = DOM.getByDataName('js-files', panel);\n const ul = getULElement(element);\n \n if (ul !== files)\n DOM.changePanel();\n}\n\nasync function onDblClick(event) {\n event.preventDefault();\n \n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n const path = DOM.getCurrentPath(current);\n \n if (!isDir)\n return CloudCmd.View.show();\n \n await CloudCmd.loadDir({\n path,\n });\n}\n\nasync function onTouch(event) {\n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n \n if (!isDir)\n return;\n \n const isCurrent = DOM.isCurrentFile(current);\n \n if (!isCurrent)\n return;\n \n await CloudCmd.loadDir({\n path: DOM.getCurrentPath(current),\n });\n}\n\n/*\n * download file from browser to desktop\n * in Chrome (HTML5)\n */\nfunction onDragStart(event) {\n const {prefixURL} = CloudCmd;\n const element = getLIElement(event.target);\n const {isDir} = Info;\n let link = DOM.getCurrentLink(element);\n let name = DOM.getCurrentName(element);\n \n /* if it's directory - adding json extension */\n if (isDir) {\n name += EXT;\n link = document.createElement('a');\n link.textContent = name;\n link.href = prefixURL + '/pack' + Info.path + EXT;\n }\n \n event.dataTransfer.setData(\n 'DownloadURL',\n 'application/octet-stream' + ':' +\n name + ':' +\n link,\n );\n}\n\nfunction getLIElement(element) {\n if (!element)\n return element;\n \n while (element.tagName !== 'LI')\n element = element.parentElement;\n \n return element;\n}\n\nfunction getULElement(element) {\n while (element.tagName !== 'UL')\n element = element.parentElement;\n \n return element;\n}\n\nfunction setCurrentFileByEvent(event) {\n const BUTTON_LEFT = 0;\n \n const key = {\n alt: event.altKey,\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey,\n };\n \n const element = getLIElement(event.target);\n \n const fromName = Info.name;\n DOM.setCurrentFile(element);\n const toName = Info.name;\n \n let files = [];\n \n if (key.shift)\n files = getFilesRange(fromName, toName);\n else\n files.push(Info.element);\n \n if (event.button === BUTTON_LEFT)\n toggleSelect(key, files);\n}\n\nfunction getFilesRange(from, to) {\n const files = DOM.getAllFiles();\n const names = DOM.getFilenames(files);\n const getNameIndex = getIndex(names);\n \n const indexFrom = getNameIndex(from);\n const indexTo = getNameIndex(to);\n \n return getRange(indexFrom, indexTo, files);\n}\n\nfunction contextMenu() {\n const fm = DOM.getFM();\n \n Events.addOnce('contextmenu', fm, (event) => {\n CloudCmd.Menu.show({\n x: event.clientX,\n y: event.clientY,\n });\n });\n \n Events.addContextMenu(fm, (event) => {\n CloudCmd.Menu.ENABLED || event.preventDefault();\n });\n}\n\nfunction dragndrop() {\n const panels = DOM.getByClassAll('panel');\n const select = ({target}) => {\n target.classList.add('selected-panel');\n };\n \n const unselect = ({target}) => {\n target.classList.remove('selected-panel');\n };\n \n const onDrop = (event) => {\n const {\n files,\n items,\n } = event.dataTransfer;\n \n const {length: filesCount} = files;\n \n event.preventDefault();\n \n if (filesCount && (!items || !items.length || !items[0].webkitGetAsEntry))\n return uploadFiles(files);\n \n const isFile = (item) => item.kind === 'file';\n const dirFiles = Array.from(items).filter(isFile);\n \n if (dirFiles.length)\n return DOM.uploadDirectory(dirFiles);\n \n const {Operation} = CloudCmd;\n const operation = event.shiftKey ? 'move' : 'copy';\n \n return Operation.show(operation);\n };\n \n /**\n * In Mac OS Chrome dropEffect = 'none'\n * so drop do not firing up when try\n * to upload file from download bar\n */\n const onDragOver = (event) => {\n const {dataTransfer} = event;\n const {effectAllowed} = dataTransfer;\n \n if (/move|linkMove/.test(effectAllowed))\n dataTransfer.dropEffect = 'move';\n else\n dataTransfer.dropEffect = 'copy';\n \n event.preventDefault();\n };\n \n for (const panel of panels)\n Events\n .add('dragover', panel, onDragOver)\n .add('drop', panel, onDrop)\n .add('dragenter', select)\n .add(['dragleave', 'drop'], unselect);\n}\n\nfunction unload() {\n DOM.Events.add(['unload', 'beforeunload'], (event) => {\n const {Key} = CloudCmd;\n const isBind = Key?.isBind();\n \n if (isBind)\n return;\n \n event.preventDefault();\n return 'Please make sure that you saved all work.';\n });\n}\n\nfunction pop() {\n Events.add('popstate', async ({state}) => {\n const path = (state || '').replace(FS, '');\n \n if (!path)\n return CloudCmd.route(location.hash);\n \n const history = false;\n await CloudCmd.loadDir({\n path,\n history,\n });\n });\n}\n\nfunction resize() {\n Events.add('resize', () => {\n const is = window.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH;\n \n if (!is)\n return;\n \n const {panel} = Info;\n const isEmptyRoot = !panel;\n \n if (isEmptyRoot)\n return;\n \n const name = panel.getAttribute('data-name');\n const isLeft = name === 'js-left';\n \n if (isLeft)\n return;\n \n DOM.changePanel();\n });\n}\n\n","'use strict';\n\nmodule.exports = (indexFrom, indexTo, files) => {\n if (indexFrom < indexTo)\n return files.slice(indexFrom, indexTo + 1);\n \n if (indexFrom > indexTo)\n return files.slice(indexTo, indexFrom + 1);\n \n return [files[indexFrom]];\n};\n\n","'use strict';\n\nmodule.exports = (array, item) => {\n const index = array.indexOf(item);\n \n if (!~index)\n return 0;\n \n return index;\n};\n\n","'use strict';\n\n/* global CloudCmd */\nconst DOM = require('./dom');\n\nconst Info = DOM.CurrentInfo;\n\nconst {\n sort,\n order,\n} = CloudCmd;\n\nconst position = DOM.getPanelPosition();\n\nlet sortPrevious = sort[position];\n\nconst {getPanel} = DOM;\n\nCloudCmd.sortPanel = (name, panel = getPanel()) => {\n const position = panel\n .dataset\n .name\n .replace('js-', '');\n \n if (name !== sortPrevious) {\n order[position] = 'asc';\n } else {\n if (order[position] === 'asc')\n order[position] = 'desc';\n else\n order[position] = 'asc';\n }\n \n sortPrevious =\n sort[position] = name;\n \n const noCurrent = position !== Info.panelPosition;\n \n CloudCmd.refresh({\n panel,\n noCurrent,\n });\n};\n\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["file://cloudcmd/webpack/bootstrap","file://cloudcmd/client/sw/register.js","file://cloudcmd/client/key/index.js","file://cloudcmd/client/cloudcmd.js","file://cloudcmd/client/client.js","file://cloudcmd/client/get-json-from-file-table.js","file://cloudcmd/client/key/vim/index.js","file://cloudcmd/client/key/vim/vim.js","file://cloudcmd/client/key/vim/find.js","file://cloudcmd/client/key/set-current-by-char.js","file://cloudcmd/client/key/binder.js","file://cloudcmd/client/load-module.js","file://cloudcmd/client/listeners/index.js","file://cloudcmd/client/listeners/get-range.js","file://cloudcmd/client/listeners/get-index.js","file://cloudcmd/client/sort.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","20","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","async","registerSW","prefix","navigator","serviceWorker","isHTTPS","location","protocol","isLocalhost","hostname","register","unregisterSW","reg","unregister","listenSW","sw","args","addEventListener","Info","DOM","CurrentInfo","clipboard","require","Buffer","Events","KEY","vim","setCurrentByChar","createBinder","Chars","fullstore","assign","binder","getChar","event","keyCode","keyIdentifier","char","code","substring","hex","parseInt","String","fromCharCode","DOT","HYPHEN","EQUAL","getSymbol","listener","altKey","alt","ctrl","ctrlKey","meta","metaKey","isBetween","ZERO","Z","isNumpad","test","symbol","isBind","_config","config","CloudCmd","ESC","toggleVim","isVim","isSelected","prev","next","dataName","current","element","panel","path","isDir","Operation","loadDir","shiftKey","ctrlMeta","previousSibling","nextSibling","TAB","changePanel","preventDefault","INSERT","INSERT_MAC","toggleSelectedFile","setCurrentFile","DELETE","show","ASTERISK","toggleAllSelectedFiles","PLUS","expandSelection","MINUS","shrinkSelection","F1","Help","F2","UserMenu","F3","View","raw","sortPanel","F4","EditFileVim","EditFile","F5","F6","renameCurrent","F7","promptNewFile","promptNewDir","F8","F9","Menu","F10","Config","TRA","Terminal","Konsole","BRACKET_CLOSE","SPACE","loadCurrentSize","U","swapPanels","UP","DOWN","LEFT","getAttribute","duplicatePanel","RIGHT","HOME","first","END","last","PAGE_DOWN","scrollByPages","PAGE_UP","ENTER","BACKSPACE","goToParentDir","BACKSLASH","A","selectAllFiles","G","goToDirectory","M","EditNamesVim","EditNames","P","writeText","dirPath","catch","log","R","refresh","C","copy","X","cut","V","paste","clear","D","Storage","switchKey","addKey","setBind","_listener","wraptile","load","getPrefix","indexOf","Emitify","Util","CloudFunc","onUpdateFound","init","js","console","removeAll","inherits","rendy","tryToCatch","addSlashToEnd","pascalCase","currify","Images","getJsonFromFileTable","Key","apiURL","formatMsg","buildFromJSON","loadModule","CloudCmdProto","Listeners","this","Files","prefixSocket","prefixURL","DIRCLIENT","DIRCLIENT_MODULES","MIN_ONE_PANEL_WIDTH","HOST","origin","host","TITLE","sort","left","right","order","params","isRefresh","history","noCurrent","currentName","panelChanged","imgPosition","options","RESTful","dirStorage","json","getJson","createFileTable","position","getPanelPosition","query","newObj","read","setCurrentByName","setJson","ajaxLoad","if","fn","a","oneFilePanel","Infinity","document","body","scrollIntoViewIfNeeded","initModules","files","getFiles","on","updateCurrentInfo","saveCurrentName","currentFile","getCurrentByName","hash","getCurrentDirPath","getPanels","forEach","setOnPanel","initKeysPanel","baseInit","css","loadStyle","route","split","kebabModule","replace","file","execFromModule","msg","logOut","url","ajax","error","reload","showLoad","doBefore","edit","menu","local","dobefore","set","panels","panelParam","link","pathLink","Dialog","alert","responseText","getPanel","dir","childNodes","removeChild","lastChild","innerHTML","id","template","emit","moduleName","funcName","func","parentDirPath","addErrorListener","e","src","filter","getCurrentName","map","size","getCurrentSize","owner","getCurrentOwner","getCurrentMode","date","getCurrentDate","type","getCurrentType","finder","operations","getOperations","escape","unselectFiles","remove","select","moveNext","count","isVisual","isDelete","setCurrent","movePrevious","find","prompt","names","findNext","findPrevious","selectFile","sibling","unselectFile","store","visual","stopVisual","end","noop","handleDelete","prevStore","join","concat","isNaN","limier","searchStore","searchIndex","index","previous","_next","_previous","escapeRegExp","charStore","firstByName","skipCount","setted","escapeChar","regExp","RegExp","chars","skipN","f","getFilenames","some","byName","binded","unsetBind","exec","loadJS","pathFull","then","newModule","itype","getRange","getIndex","uploadFiles","FS","NBSP_REG","Promise","all","contextMenu","dragndrop","add","state","is","innerWidth","isEmptyRoot","isLeft","header","execAll","funcs","EventsFiles","mousedown","with","execIfNotUL","getLIElement","target","fromName","toName","from","to","getAllFiles","getNameIndex","indexFrom","indexTo","getFilesRange","button","isMac","platform","Error","toggleSelect","click","getByDataName","tagName","parentElement","getULElement","dragstart","getCurrentLink","EXT","createElement","textContent","href","dataTransfer","setData","dblclick","isCurrentIsDir","getCurrentPath","touchstart","isCurrentFile","fm","getFM","isDataset","el","dataset","isPanel","addClick","getPath","pop","packer","getPackerExt","keysElement","getById","operation","clickFuncs","Contact","onPathElementClick","attr","infoPanel","isNoCurrent","title","prefixReg","decodeURI","decodePath","callback","addOnce","x","clientX","y","clientY","addContextMenu","ENABLED","getByClassAll","classList","unselect","onDrop","items","filesCount","webkitGetAsEntry","dirFiles","Array","item","kind","uploadDirectory","onDragOver","effectAllowed","dropEffect","side","string","filesElement","pathElement","getPathListener","array","sortPrevious","panelPosition"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrBiB,GAAI,GAGDZ,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU8B,QAGnC,IAAIC,EAASH,EAAiB5B,GAAY,CACzCK,EAAGL,EACHgC,GAAG,EACHF,QAAS,IAUV,OANAhB,EAAQd,GAAUW,KAAKoB,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAG/DK,EAAOC,GAAI,EAGJD,EAAOD,QAKfJ,EAAoBO,EAAInB,EAGxBY,EAAoBQ,EAAIN,EAGxBF,EAAoBS,EAAI,SAASL,EAASM,EAAMC,GAC3CX,EAAoBY,EAAER,EAASM,IAClC5B,OAAO+B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEX,EAAoBgB,EAAI,SAASZ,GACX,oBAAXa,QAA0BA,OAAOC,aAC1CpC,OAAO+B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DrC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKzC,OAAO0C,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBzC,OAAO+B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBS,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAL,EAAoBS,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRX,EAAoBY,EAAI,SAASgB,EAAQC,GAAY,OAAO/C,OAAOC,UAAUC,eAAeC,KAAK2C,EAAQC,IAGzG7B,EAAoB8B,EAAI,SAExB,IAAIC,EAAaC,OAAqB,aAAIA,OAAqB,cAAK,GAChEC,EAAmBF,EAAW5C,KAAKuC,KAAKK,GAC5CA,EAAW5C,KAAOf,EAClB2D,EAAaA,EAAWG,QACxB,IAAI,IAAIvD,EAAI,EAAGA,EAAIoD,EAAWlD,OAAQF,IAAKP,EAAqB2D,EAAWpD,IAC3E,IAAIU,EAAsB4C,EAI1B1C,EAAgBJ,KAAK,CAAC,GAAG,IAElBM,I,kHC9IT0C,eAAeC,EAAWC,GACtB,IAAKC,UAAUC,cACX,OAEJ,MAAMC,EAAgC,WAAtBC,SAASC,SACnBC,EAAoC,cAAtBF,SAASG,SAE7B,OAAKJ,GAAYG,QAGJL,UAAUC,cAAcM,SAAYR,EAAF,eAH/C,EAdJhC,EAAOD,QAAQgC,WAAaA,EAC5B/B,EAAOD,QAAQ0C,aAkBfX,eAA4BE,GACxB,MAAMU,QAAYX,EAAWC,GAC7BU,WAAKC,WAAWX,IAlBpBhC,EAAOD,QAAQ6C,SAAW,SAACC,GAAgB,2BAATC,EAAS,iCAATA,EAAS,kBACvCD,WAAIE,oBAAoBD,K,gCCF5B,MAAME,EAAOC,IAAIC,YAEXC,EAAYC,EAAQ,IAEpBC,EAASD,EAAQ,IACjBE,EAASF,EAAQ,IAEjBG,EAAMH,EAAQ,IACdI,EAAMJ,EAAQ,IACdK,EAAmBL,EAAQ,KAC3B,aAACM,GAAgBN,EAAQ,IAGzBO,EADYP,EAAQ,EACZQ,GAUdD,EAAM,IAEN,MAAM,OAACE,GAAUpF,OAEXqF,EAASJ,IASf,SAASK,EAAQC,GAMb,MAAM,IACF5C,EADE,MAEFnC,EAFE,QAGFgF,EAHE,cAIFC,GACAF,EACEG,EAAO/C,GAwDjB,SAAsB8C,GAClB,MAAME,EAAOF,EAAcG,UAAU,GAC/BC,EAAMC,SAASH,EAAM,IAG3B,OAFaI,OAAOC,aAAaH,GA3DbG,CAAaP,GAGjC,MAAO,CAsCX,SAAmBjF,EAAOgF,GACtB,OAAOA,GACP,KAAKV,EAAImB,IACL,MAAO,IAEX,KAAKnB,EAAIoB,OACL,OAAO1F,EAAQ,IAAM,IAEzB,KAAKsE,EAAIqB,MACL,OAAO3F,EAAQ,IAAM,IAGzB,MAAO,GApDQ4F,CAAU5F,EAAOgF,GAEhBE,GAGpBrC,eAAegD,EAASd,GACpB,MAAM,QAACC,GAAWD,EAIlB,QAA4B,IAAjBA,EAAMe,OACb,OAEJ,MAAMC,EAAMhB,EAAMe,OACZE,EAAOjB,EAAMkB,QACbC,EAAOnB,EAAMoB,QACbC,EAAYpB,GAAWV,EAAI+B,MAAQrB,GAAWV,EAAIgC,EAClDC,EAAW,SAASC,KAAKzB,EAAMI,OAE9BsB,EAAQvB,GAAQJ,EAAQC,GAE/B,IAAKF,EAAO6B,SACR,OAxDW1B,KACf,MAAM,QAAC2B,EAAD,OAAUC,GAAUC,SAEtB7B,IAAYV,EAAIwC,KAChBH,EAAQ,OAAQC,EAAO,SAsD3BG,CAAU/B,GACV,MAAMgC,EAAQH,SAASD,OAAO,OAE9B,IAAKI,IAAUT,IAAaR,IAAQC,IAASE,IAASE,GAAaK,GAC/D,OAAOjC,EAAiBU,EAAMR,GAElCA,EAAM,UAiCV7B,eAAyBkC,GACrB,IAAI1F,EACA4H,EACAC,EACAC,EAEAC,EADAC,EAAUtD,EAAKuD,QAGnB,MAAM,KACFlG,EADE,MAEFmG,EAFE,KAGFC,EAHE,MAIFC,GACA1D,GAEE,UACF2D,EADE,QAEFC,EAFE,OAGFf,GACAC,UACE,QAAC7B,GAAWD,EAEZgB,EAAMhB,EAAMe,OACZ9F,EAAQ+E,EAAM6C,SACd5B,EAAOjB,EAAMkB,QACbC,EAAOnB,EAAMoB,QACb0B,EAAW7B,GAAQE,EAErBmB,IACAH,EAAOG,EAAQS,gBACfX,EAAOE,EAAQU,aAGnB,OAAO/C,GACP,KAAKV,EAAI0D,IACLhE,IAAIiE,cACJlD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAI6D,OAKT,KAAK7D,EAAI8D,WACLpE,IAAKqE,mBAAmBhB,GACnBiB,eAAenB,GACpB,MAEJ,KAAK7C,EAAIiE,OACDvI,EACA0H,EAAUc,KAAK,iBAEfd,EAAUc,KAAK,UACnB,MAEJ,KAAKlE,EAAImE,SACLzE,IAAI0E,uBAAuBrB,GAC3B,MAEJ,KAAK/C,EAAIqE,KACL3E,IAAI4E,kBACJ7D,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIuE,MACL7E,IAAI8E,kBACJ/D,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIyE,GACLlC,SAASmC,KAAKR,OACdzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAI2E,GACLpC,SAASqC,SAASV,OAClB,MAEJ,KAAKlE,EAAI6E,GACLpE,EAAMmD,iBAEFnE,EAAK0D,YACCE,EAAQ,CACVH,SAECxH,EACL6G,SAASuC,KAAKZ,KAAK,KAAM,CACrBa,KAAK,IAEJxB,EACLhB,SAASyC,UAAU,QAEnBzC,SAASuC,KAAKZ,OAElB,MAEJ,KAAKlE,EAAIiF,GACD3C,EAAO,OACPC,SAAS2C,YAAYhB,OAErB3B,SAAS4C,SAASjB,OAEtBzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIoF,GACD7B,EACAhB,SAASyC,UAAU,QACdvD,EACL2B,EAAUc,KAAK,QAEfd,EAAUc,KAAK,QAEnBzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIqF,GACD9B,EACAhB,SAASyC,UAAU,QACdtJ,EACLgE,IAAI4F,cAAcvC,GAElBK,EAAUc,KAAK,QAEnBzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIuF,GACD7J,EACAgE,IAAI8F,gBAEJ9F,IAAI+F,eAERhF,EAAMmD,iBACN,MAEJ,KAAK5D,EAAI0F,GACLtC,EAAUc,KAAK,UACfzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAI2F,GACDlE,EACA2B,EAAUc,KAAK,WAEf3B,SAASqD,KAAK1B,OAElBzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAI6F,IACLtD,SAASuD,OAAO5B,OAChBzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAI+F,IAGL,GAFAtF,EAAMmD,iBAEFlI,EACA,OAAO6G,SAASyD,SAAS9B,OAE7B3B,SAAS0D,QAAQ/B,OACjB,MAEJ,KAAKlE,EAAIkG,cACL3D,SAAS0D,QAAQ/B,OACjBzD,EAAMmD,iBACN,MAEJ,KAAK5D,EAAImG,MACL1F,EAAMmD,iBAKFjB,GAHCQ,GAAkB,OAATrG,GAGG4C,IAAIiD,WAAWI,GAE3BJ,SACKjD,IAAI0G,gBAAgBrD,GAE9BrD,IAAIqE,mBAAmBhB,GAEvB,MAEJ,KAAK/C,EAAIqG,EACD9C,IACA7D,IAAI4G,aACJ7F,EAAMmD,kBAEV,MAKJ,KAAK5D,EAAIuG,GACD7K,GACAgE,IAAIqE,mBAAmBhB,GAE3BrD,IAAIsE,eAAepB,GACnBnC,EAAMmD,iBACN,MAIJ,KAAK5D,EAAIwG,KACD9K,GACAgE,IAAIqE,mBAAmBhB,GAE3BrD,IAAIsE,eAAenB,GACnBpC,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIyG,KACL,IAAKhF,EACD,OAEJhB,EAAMmD,iBAENd,EAAWrD,EAAKwD,MAAMyD,aAAa,aAElB,aAAb5D,GACApD,IAAIiH,iBAER,MAEJ,KAAK3G,EAAI4G,MACL,IAAKnF,EACD,OAEJhB,EAAMmD,iBAENd,EAAWrD,EAAKwD,MAAMyD,aAAa,aAElB,YAAb5D,GACApD,IAAIiH,iBAER,MAIJ,KAAK3G,EAAI6G,KACLnH,IAAIsE,eAAevE,EAAKqH,OACxBrG,EAAMmD,iBACN,MAGJ,KAAK5D,EAAI+G,IACLrH,IAAIsE,eAAevE,EAAKuH,MACxBvG,EAAMmD,iBACN,MAGJ,KAAK5D,EAAIiH,UAGL,IAFAvH,IAAIwH,cAAcjE,EAAO,GAEpBlI,EAAI,EAAGA,EAAI,IACPgI,EAAQU,YADG1I,IAIhBgI,EAAUA,EAAQU,YAGtB/D,IAAIsE,eAAejB,GACnBtC,EAAMmD,iBACN,MAGJ,KAAK5D,EAAImH,QAGL,IAFAzH,IAAIwH,cAAcjE,GAAQ,GAErBlI,EAAI,EAAGA,EAAI,IACPgI,EAAQS,gBADGzI,IAIhBgI,EAAUA,EAAQS,gBAGtB9D,IAAIsE,eAAejB,GACnBtC,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIoH,MACD3H,EAAK0D,YACCE,EAAQ,CAACH,SAEfX,SAASuC,KAAKZ,OAClB,MAEJ,KAAKlE,EAAIqH,UACL9E,SAAS+E,gBACT7G,EAAMmD,iBACN,MAEJ,KAAK5D,EAAIuH,UACDhE,SACMF,EAAQ,CACVH,KAAM,MAEd,MAEJ,KAAKlD,EAAIwH,EACDjE,IACA7D,IAAI+H,iBACJhH,EAAMmD,kBAGV,MAEJ,KAAK5D,EAAI0H,EACDjG,IACA/B,IAAIiI,gBACJlH,EAAMmD,kBAGV,MAEJ,KAAK5D,EAAI4H,EACDrE,IACIjB,EAAO,OACPC,SAASsF,aAAa3D,OAEtB3B,SAASuF,UAAU5D,OAEvBzD,EAAMmD,kBAGV,MAEJ,KAAK5D,EAAI+H,EACL,IAAKxE,EACD,OAEJ9C,EAAMmD,iBACNhE,EACKoI,UAAUvI,EAAKwI,SACfC,MAAM3F,SAAS4F,KAEpB,MAQJ,KAAKnI,EAAIoI,EACD7E,IACAhB,SAAS4F,IAAI,uBACb5F,SAAS8F,UACT5H,EAAMmD,kBAEV,MAEJ,KAAK5D,EAAIsI,EACD/E,GACAzD,EAAOyI,OACX,MAEJ,KAAKvI,EAAIwI,EACDjF,GACAzD,EAAO2I,MACX,MAEJ,KAAKzI,EAAI0I,EACDnF,GACAzD,EAAO6I,QACX,MAEJ,KAAK3I,EAAIgC,EACDuB,GACAzD,EAAO8I,QACX,MAGJ,KAAK5I,EAAI6I,EACDtF,IACAhB,SAAS4F,IAAI,6BACPzI,IAAIoJ,QAAQF,QAClBrG,SAAS4F,IAAI,mBACb1H,EAAMmD,mBA5ZRmF,CAAUtI,GAEZC,GAAWV,EAAIyE,IAAM/D,GAAWV,EAAI6F,KAGpCnD,GACAzC,EAAIW,EAAMH,GA1DlBhE,EAAOD,QAAU8D,EAAOC,EAAQP,GAChCvD,EAAOD,QAAQsB,KAAO,KAClBiC,EAAOiJ,OAAOzH,GAAU,GACxBhB,EAAO0I,WAGXxM,EAAOD,QAAQ0M,UAAY3H,G,gCCpC3B1B,EAAQ,KACRA,EAAQ,KACRA,EAAQ,KACRA,EAAQ,KAER,MAAMsJ,EAAWtJ,EAAQ,GACnBuJ,EAAOvJ,EAAQ,IAIf,WACFrB,EADE,SAEFa,GACAQ,EAAQ,IAyBZ,SAASwJ,EAAU5K,GACf,OAAKA,EAGAA,EAAO6K,QAAQ,KAGZ,IAAG7K,EAFAA,EAHA,GAxBfL,OAAOmL,QAAU1J,EAAQ,IAEzBpD,EAAOD,QAAU4B,OAAOmE,SAAWhE,UAC/BH,OAAOoL,KAAO3J,EAAQ,GACtBzB,OAAOqL,UAAY5J,EAAQ,GAE3B,MAAMH,EAAMG,EAAQ,IAEpBzB,OAAOsB,IAAMA,EACbtB,OAAOmE,SAAW1C,EAAQ,UAuC9BtB,eAAwB+D,GACpB,MAAM,OAAC7D,GAAU6D,EACXhD,QAAWd,EAAWC,GAE5BY,EAASC,EAAI,cAAeoK,EAAcpH,IAzCpCrD,CAASqD,GAEfzC,EAAQ,IACRA,EAAQ,IACRA,EAAQ,IAER,MAAMpB,EAAS4K,EAAU/G,EAAO7D,QAEhCL,OAAOmE,SAASoH,KAAKlL,EAAQ6D,IAajC,MAAMoH,EAAgBP,EAAS5K,UAI3B,MAAM,IAACmB,GAAOtB,OACRK,EAAS4K,EAAU/G,EAAO7D,cAE1B2K,EAAKQ,GAAMnL,EAAF,kCACT2K,EAAKQ,GAAMnL,EAAF,qBAEfoL,QAAQ1B,IAAI,yBAEZzI,EAAIK,OAAO+J,YACX1L,OAAOmE,SAASD,M,gCC3DpB,MAAMiH,EAAU1J,EAAQ,IAClBkK,EAAWlK,EAAQ,IACnBmK,EAAQnK,EAAQ,IAChBuJ,EAAOvJ,EAAQ,GACfoK,EAAapK,EAAQ,IACrB,cAACqK,GAAiBrK,EAAQ,IAC1BsK,EAAatK,EAAQ,IACrBuK,EAAUvK,EAAQ,GAIlBwK,EAASxK,EAAQ,IACjB,aAACX,GAAgBW,EAAQ,IACzByK,EAAuBzK,EAAQ,IAC/B0K,EAAM1K,EAAQ,KAId,OACF2K,EADE,UAEFC,EAFE,cAGFC,GACA7K,EAAQ,GAEN8K,EAAa9K,EAAQ,IAW3B,SAAS+K,EAAclL,GACnB,IAAImL,EASJtB,EAAQlO,KAAKyP,MAEb,MAAMvI,EAAWuI,KACXrL,EAAOC,EAAIC,aAEX,QACFmJ,EADE,MAEFiC,GACArL,EAEJoL,KAAK3C,IAjBO,aAkBZ2C,KAAKrM,OAAS,GACdqM,KAAKE,aAAe,GACpBF,KAAKG,UAAY,GACjBH,KAAKI,UAAY,SACjBJ,KAAKK,kBAAoBL,KAAKI,UAAY,WAE1CJ,KAAKM,oBAAsB,KAC3BN,KAAKO,KAAOxM,SAASyM,QAAUzM,SAASC,SAAW,KAAOD,SAAS0M,KAGnET,KAAKU,MADS,kBAGdV,KAAKW,KAAO,CACRC,KAAM,OACNC,MAAO,QAGXb,KAAKc,MAAQ,CACTF,KAAM,MACNC,MAAO,OAcXb,KAAKzH,QAAU9E,UACX,MAAML,EAAI2N,EACJxD,EAAUnK,EAAE4N,WAEZ,MACF7I,EADE,QAEF8I,EAFE,UAGFC,EAHE,YAIFC,GACA/N,EAEJ,IAAIgO,EAOAC,GALCH,GAAa/I,GAASA,IAAUxD,EAAKwD,QACtCvD,EAAIiE,cACJuI,GAAe,IAKfA,GAAgB7D,IAAY0D,KAC5BI,EAAc,OAElB9B,EAAOnG,KAAKkF,KAAK+C,EAAalJ,GAC9B,MAAMC,EAAOgH,EAAchM,EAAEgF,YAiNjC3E,eAAwB2E,GAA2B,IAArBkJ,EAAqB,uDAAX,GAAInJ,EAAO,uCAC/C,MAAM,QAACoJ,GAAW3M,EAElB6C,EAAS4F,IAAI,iBAAmBjF,EAAO,MAEvC,MAAMoJ,EAAa/J,EAASD,OAAO,cAC7BiK,EAAOD,SAAoBxD,EAAQ0D,QAAQtJ,GAE3CpG,EAAOsP,EAAQH,aAAexM,EAAK3C,MACnC,UACFkP,EADE,QAEF3D,GACA+D,EAEJ,IAAK/D,GAAWkE,EACZ,aAAaE,EAAgBF,EAAMtJ,EAAOmJ,GAE9C,MAAMM,EAAWhN,EAAIiN,iBAAiB1J,GAChCwI,EAAOlJ,EAASkJ,KAAKiB,GACrBd,EAAQrJ,EAASqJ,MAAMc,GAEvBE,EAAQ5C,EAAM,qCAAsC,CACtDyB,OACAG,WAGG,CAAEiB,SAAgBR,EAAQS,KAAK5J,EAAO0J,EAAO,QAEpD,IAAKC,EACD,OAEJT,EAAQX,KAAOA,EACfW,EAAQR,MAAQA,QAEVa,EAAgBI,EAAQ5J,EAAOmJ,GAEjC/D,IAAY2D,GACZtM,EAAIqN,iBAAiBjQ,GAEzB,IAAKyF,EAASD,OAAO,cACjB,OAEJwG,EAAQkE,QAAQ9J,EAAM2J,GAxPhBI,CAAS/J,EAAM,CACjBmF,UACA0D,UACAC,YACAC,eACDhJ,IAQP6H,KAAKnB,KAAOpL,MAAOE,EAAQ6D,KACvBC,EAAS9D,OAASA,EAClB8D,EAAS0I,UAAa,GAAExM,IAAS+L,IACjCjI,EAASyI,aAAe1I,EAAO0I,aAE/BzI,EAASD,OAAUzE,GAAQyE,EAAOzE,GAClC0E,EAASD,OAAO4K,GAAK9C,EAAQ,CAACvM,EAAKsP,EAAIC,IAAM9K,EAAOzE,IAAQsP,EAAGC,IAC/D7K,EAASF,QAAU,CAACxE,EAAKN,KAMT,aAARM,IAGJyE,EAAOzE,GAAON,IAGd+E,EAAO+K,eACP9K,EAAS6I,oBAAsBkC,KAE9BC,SAASC,KAAKC,8BACTrE,EAAKQ,GAAGnL,EAAS8D,EAAS4I,kBAAoB,qBAElDuC,UAiFVnP,iBACI,MAAMoP,EAAQjO,EAAIkO,WAElBrL,EAASsL,GAAG,eAAgBnO,EAAIoO,mBAChCvL,EAASsL,GAAG,eAAgBE,GAE5B,MAAMjR,QAAagM,EAAQ3L,IAAI,gBACzB6Q,EAAclR,GAAQ4C,EAAIuO,iBAAiBnR,IAAS6Q,EAAM,GAG5DA,GACAjO,EAAIsE,eAAegK,EAAa,CAI5BjC,SAAUlN,SAASqP,OAG3B,MAAMjG,EAAUvI,EAAIyO,oBACpBtD,EAAYtI,EAASsI,UACrBA,EAAUlB,OAOV,GALeyE,IACRC,QAAQxD,EAAUyD,YAEzBzD,EAAU0D,iBAELhM,EAASD,OAAO,cACjB,aAEewG,EAAQ3L,IAAI8K,UAGrBa,EAAQkE,QAAQ/E,EAASqC,KAjH7BkE,SAMVjQ,iBACI,MAAM,OAACE,GAAU8D,EACXzF,EAAO2B,EAAS,kCAEhB2K,EAAKqF,IAAI3R,GATT4R,GAENnM,EAASoM,MAAM9P,SAASqP,OAU5BpD,KAAK6D,MAASzL,IACV,MAAM0J,EAAQ1J,EAAK0L,MAAM,KAEzB,IAAK1L,EACD,OAEJ,MAAO2L,GAAejC,EAChBnQ,EAAc0N,EAAW0E,EAAYvQ,MAAM,IA/JnCwQ,QAAQ,OAAQ,IAiK9B,MAAMC,EAAOnC,EAAM,GACb7J,EAAUrD,EAAIuO,iBAAiBc,GAErC,IAAIA,GAAShM,EAMbrD,EAAIsE,eAAejB,GACnBR,EAASyM,eAAevS,EAAQ,YAPhC,CACI,MAAMwS,EAAMxE,EAAU,mBAAoBsE,EAAM,SAChDxM,EAAS4F,IAAI8G,KAQrBnE,KAAKoE,OAAS3Q,UACV,MAAM4Q,EAAM5M,EAAS9D,OAAS,WAExB,OAACA,GAAU8D,QAEX7C,EAAIoJ,QAAQF,QAClB1J,EAAaT,GACbiB,EAAI0J,KAAKgG,KAAK,CACVD,MACAE,MAPU,IAAM9B,SAAS1O,SAASyQ,YAW1C,MAAM5B,EAAcnP,UAChBgE,EAASgI,IAAMA,EACfhI,EAASgI,IAAIzM,OAEb,MAAO,CAAEtC,SAAiByO,EAAWc,EAAM5N,IAAK,WAC1CoS,EAAWlF,EAAOnG,KAAKkF,KAEvBoG,EAAW,CACbC,KAAMF,EACNG,KAAMH,GAWV,GAAK/T,EAGL,IAAK,MAAMiB,KAAUjB,EAAQmU,MAVzBhF,EAAW,CACP7N,KAUC,KATDoG,KASOzG,EARPmT,SAQeJ,EAAS/S,MAIpC8B,eAAewP,EAAgB9B,SACrBnD,EAAQ+G,IAAI,eAAgB5D,GAuCtC,SAASmC,IACL,MAAM0B,EAAS,CAAC,QAEhB,OAAIvN,EAASD,OAAO,gBACTwN,EAEJ,IACAA,EACH,SA+FRvR,eAAekO,EAAgBhS,EAAMsV,EAAY3D,GAC7C,MAAM,QACFL,EADE,UAEFC,GACAI,GAUAiD,GACCN,EAAM7L,EAAM8M,EAAMC,UACbhG,EAAWc,EAAM5N,IAVb,CACV,OACA,OACA,OACA,aAQJ,GAAIkS,EACA,OAAO3P,EAAIwQ,OAAOC,MAAMd,EAAMe,cAElC,MAAMnN,EAAQ8M,GAAcrQ,EAAI2Q,YAC1B,OAAC5R,GAAU8D,GAEX,IACF+N,EADE,KAEFxT,GACA2C,GAEE,WAAC8Q,GAActN,EACrB,IAAIlI,EAAIwV,EAAWtV,OAEnB,KAAOF,KACHkI,EAAMuN,YAAYvN,EAAMwN,WAkB5B,GAhBAxN,EAAMyN,UAAYhG,EAAc,CAC5Be,KAAcW,EAAQX,KACtBG,MAAcQ,EAAQR,MACtBnR,OACAkW,GAAc1N,EAAM0N,GACpBlS,SACAmS,SAAc,CACV7B,OACA7L,OACA+M,WACAD,UAIRnF,EAAUyD,WAAWrL,IAEhB+I,EAAW,CACZ,IAAIjJ,EAES,OAATjG,GAAyB,MAARwT,IACjBvN,EAAUrD,EAAIuO,iBAAiBqC,IAE9BvN,KACAA,GAAWrD,EAAIkO,SAAS3K,IAE7BvD,EAAIsE,eAAejB,EAAS,CACxBgJ,YAGJxJ,EAASsO,KAAK,aAAcpR,EAAKwI,UA3JzC6C,KAAKkE,eAAiBzQ,eAAOuS,EAAYC,SAC/BxO,EAASuO,KAEf,MAAME,EAAOzO,EAASuO,GAAYC,GAHyB,2BAATxR,EAAS,iCAATA,EAAS,kBAI3DyR,KAAQzR,IAGZuL,KAAKzC,QAAU9J,iBAAwB,IAAjB6N,EAAiB,uDAAP,GAC5B,MAAM,MACFnJ,EAAQxD,EAAKwD,MADX,YAEFgJ,GACAG,EAEElJ,EAAOxD,EAAIyO,kBAAkBlL,GAE7B6I,GAAY,EACZC,GAAU,EACVC,IAAYI,GAAUA,EAAQJ,gBAE9BzJ,EAASc,QAAQ,CACnBH,OACA4I,YACAC,UACA9I,QACA+I,YACAC,iBAsIRnB,KAAKxD,cAAgB/I,UACjB,MAAM,IACF+R,EADE,QAEFrI,EAFE,cAGFgJ,EAHE,MAIFhO,GACAxD,EAEJ,GAAIwI,IAAYgJ,EACZ,OAEJ,MAAM/N,EAAO+N,QAEP1O,EAASc,QAAQ,CACnBH,SAGJ,MAAMH,EAAUrD,EAAIuO,iBAAiBqC,IAC9BxJ,GAASpH,EAAIkO,SAAS3K,GAE7BvD,EAAIsE,eAAejB,GAAW+D,EAAO,CACjCiF,mBArbZhC,EAASa,EAAerB,GAExB9M,EAAOD,QAAU,IAAIoO,EAAclL,KAEnC0J,EAAK8H,iBAAiB,CAACC,EAAGC,KACtB,MAAMnC,EAAO,QAAOmC,wBACpB/G,EAAOnG,KAAKmL,MAAMJ,M,gCChCtB,MAAMxP,EAAOC,IAAIC,YAMjBlD,EAAOD,QAAU,KA+BK,CACd0G,KA/BSxD,IAAIyO,oBAgCbR,OA/BclO,EAAKkO,OAAS,IA0B3B0D,OAxBctO,GAEC,OADHrD,IAAI4R,eAAevO,IAwB/BwO,IApBUxO,IACX,MAAMjG,EAAO4C,IAAI4R,eAAevO,GAC1ByO,EAAO9R,IAAI+R,eAAe1O,GAC1B2O,EAAQhS,IAAIiS,gBAAgB5O,GAKlC,MAAO,CACHjG,OACA0U,OACA/T,KAPSiC,IAAIkS,eAAe7O,GAQ5B2O,QACAG,KARSnS,IAAIoS,eAAe/O,GAS5BgP,KARSrS,IAAIsS,eAAejP,S,gCCpBxC,MAAM9C,EAAMJ,EAAQ,IACdoS,EAASpS,EAAQ,IAEjBJ,EAAOC,IAAIC,aACX,OAACuQ,GAAUxQ,IAEjBjD,EAAOD,QAAU+B,MAAOV,EAAK4C,KACzB,MAAMyR,EAAaC,EAAc1R,SAC3BR,EAAIpC,EAAKqU,IAGnB,MAAMC,EAAiB1R,IAAD,CAClB2R,OAAQ1S,IAAI2S,cAEZC,OAAQ,KACJ/P,SAASa,UAAUc,KAAK,WAG5BqE,KAAM,KACF7I,IAAII,OAAOyI,OACX7I,IAAI2S,iBAGRE,OAAQ,KACJ,MAAMxP,EAAUtD,EAAKuD,QACrBtD,IAAIqE,mBAAmBhB,IAG3B4F,MAAOjJ,IAAII,OAAO6I,MAElB6J,SAAU,IAAiC,IAAhC,MAACC,EAAD,SAAQC,EAAR,SAAkBC,GAAc,EACvCC,EAAW,OAAQ,CACfH,QACAC,WACAC,cAIRE,aAAc,IAAiC,IAAhC,MAACJ,EAAD,SAAQC,EAAR,SAAkBC,GAAc,EAC3CC,EAAW,WAAY,CACnBH,QACAC,WACAC,cAIRG,KAAMvU,UACFkC,EAAMmD,iBACN,MAAO,CAAErG,SAAe2S,EAAO6C,OAAO,OAAQ,IAE9C,IAAKxV,EACD,OAEJ,MAAMyV,EAAQvT,EAAKkO,MAAM4D,IAAI7R,IAAI4R,iBAC1BxV,GAAUmW,EAAOa,KAAKvV,EAAOyV,GAEpCtT,IAAIqN,iBAAiBjR,IAGzBmX,SAAU,KACN,MAAMnW,EAAOmV,EAAOgB,WACpBvT,IAAIqN,iBAAiBjQ,IAGzBoW,aAAc,KACV,MAAMpW,EAAOmV,EAAOiB,eACpBxT,IAAIqN,iBAAiBjQ,MAM7B,SAASqW,EAAWpQ,GAGH,OAFArD,IAAI4R,eAAevO,IAKhCrD,IAAIyT,WAAWpQ,GAGnB,SAAS6P,EAAWQ,EAApB,GAA0D,IAA7B,MAACX,EAAD,SAAQC,EAAR,SAAkBC,GAAW,EAClD5P,EAAUtD,EAAKuD,QACnB,MAAMuP,EAASG,EAAWS,EAAazT,IAAI2T,aAE3Cd,EAAOxP,GAEP,MAAM2J,EAAc0G,EAAF,UAClB,IAAK,IAAIrY,EAAI,EAAGA,EAAI0X,EAAO1X,IAAK,CAC5B,MAAM8H,EAAOE,EAAQ2J,GAErB,IAAK7J,EACD,MAEJE,EAAUF,EACV0P,EAAOxP,GAGXrD,IAAIsE,eAAejB,GAEf4P,GACApQ,SAASa,UAAUc,KAAK,UA/BhCzH,EAAOD,QAAQ2W,WAAaA,G,gCCzE5B,MAAM9S,EAAYR,EAAQ,GACpByT,EAAQjT,EAAU,IAClBkT,EAASlT,GAAU,GAEnBmT,EAAa,KACfD,GAAO,IAGLE,EAAM,KACRH,EAAM,KAUJI,EAAO,OA8Hb,SAASC,EAAaC,GAClB,MAAMjB,EAA4B,MAAjBiB,EAAU,GAEvBjB,IACAY,GAAO,GACPK,EAAoBA,EAxInBhF,MAAM,IACNtQ,MAAM,GACNuV,KAAK,KAmJd,IAAmBtW,EAPf,MAAO,CACHkV,OAMWlV,EAVSqW,GAcV,MAAVrW,EACO,EAEJyD,SAASzD,GALL,EAPPoV,WACAD,SALaa,KArIrB9W,EAAOD,QAAU,CAACqB,EAAKqU,KACnB,MAAM0B,EAAYN,IACZZ,EAAWa,IACXhW,EAAQ+V,EAAMM,EAAUE,OAAOjW,KAC/B,OACFuU,EAASsB,EADP,SAEFlB,EAAWkB,EAFT,aAGFb,EAAea,EAHb,OAIFpB,EAASoB,EAJP,KAKFnL,EAAOmL,EALL,MAMF/K,EAAQ+K,EANN,OAOFnB,EAASmB,EAPP,KAQFZ,EAAOY,EARL,SASFT,EAAWS,EATT,aAUFR,EAAeQ,GACfxB,EAEJ,GAAY,UAARrU,EACA,OAAO4V,IAEX,GAAY,WAAR5V,EAGA,OAFA0V,GAAO,GACPnB,IACOqB,IAGX,GAAY,MAAR5V,GAAuB,MAARA,EAAa,CAC5B,MAAM,MACF4U,EADE,SAEFE,EAFE,SAGFD,GACAiB,EAAaC,GAQjB,OANCG,MAAMtB,IAAUD,EAAS,CACtBC,QACAC,WACAC,aAGGc,IAGX,GAAY,MAAR5V,GAAuB,MAARA,EAAa,CAC5B,MAAM,MACF4U,EADE,SAEFE,EAFE,SAGFD,GACAiB,EAAaC,GAQjB,OANCG,MAAMtB,IAAUI,EAAa,CAC1BJ,QACAC,WACAC,aAGGc,IAGX,GAAc,OAAVlW,GAA0B,MAARM,EAAa,CAC/B,MAAM,SACF8U,EADE,SAEFD,GACAiB,EAAaC,GAQjB,OANAf,EAAa,CACTJ,MAAOnF,IACPoF,WACAC,aAGGc,IAGX,MAAY,MAAR5V,IAAgB0V,KAA0B,MAAdK,EAMpB,MAAR/V,GAAuB,MAARA,GACf2U,EAAS,CACLC,MAAOnF,IACPoF,aAGGe,KAGC,MAAR5V,EACK0V,KAGLC,IACAjL,IACOkL,KAJIA,IAOX,OAAOvR,KAAKrE,IACZ8K,IACO8K,KAGP,OAAOvR,KAAKrE,IACZ0V,GAAQA,KACRhB,IACOkB,KAGC,MAAR5V,GACAiV,IACOW,KAGC,MAAR5V,GACAoV,IACOQ,KAGC,MAAR5V,GACAqV,IACOO,UAFX,GA5CID,IACAlB,IACOmB,O,gCCjGf,MAAMpT,EAAYR,EAAQ,GACpBmU,EAASnU,EAAQ,IAEjBoU,EAAc5T,EAAU,IACxB6T,EAAc7T,EAAU,GA8B9B,SAASwC,EAAKsR,EAAOlZ,GACjB,OAAIkZ,IAAUlZ,EAAS,EACZ,IAEFkZ,EAGb,SAASC,EAASD,EAAOlZ,GACrB,OAAKkZ,IAGIA,EAFElZ,EAAS,EArCxBwB,EAAOD,QAAQsW,KAAO,CAACvV,EAAOyV,KAC1B,MAAMlX,EAASkY,EAAOzW,EAAOyV,GAK7B,OAHAiB,EAAYnY,GACZoY,EAAY,GAELpY,GAGXW,EAAOD,QAAQyW,SAAW,KACtB,MAAMD,EAAQiB,IACRE,EAAQtR,EAAKqR,IAAelB,EAAM/X,QAGxC,OADAiZ,EAAYC,GACLnB,EAAMkB,MAGjBzX,EAAOD,QAAQ0W,aAAe,KAC1B,MAAMF,EAAQiB,IACRE,EAAQC,EAASF,IAAelB,EAAM/X,QAG5C,OADAiZ,EAAYC,GACLnB,EAAMmB,IAGjB1X,EAAOD,QAAQ6X,MAAQxR,EACvBpG,EAAOD,QAAQ8X,UAAYF,G,gCC9B3B,MAAM3U,EAAOC,IAAIC,aACX,aAAC4U,GAAgB1U,EAAQ,GAE/BpD,EAAOD,QAAU,SAA0BoE,EAAM4T,GAC7C,IAAIC,EACAC,EAAY,EACZC,GAAS,EACT5Z,EAAI,EAER,MAAM6Z,EAAaL,EAAa3T,GAC1BiU,EAAS,IAAIC,OAAO,IAAMF,EAAa,MAAO,MAC9C,MAACjH,GAASlO,EACVsV,EAAQP,IACRzW,EAAIgX,EAAM9Z,OAEhB,KAAOF,EAAIgD,GAAK6C,IAASmU,EAAMha,IAC3BA,IAECA,GACDyZ,EAAU,IAEd,MAAMQ,EAAQN,EAAY3Z,EAE1ByZ,EAAUA,IAAYV,OAAOlT,IAKhBqU,MAHCvV,IAAIwV,aAAavH,GAoB1B0D,OAnBWjE,GAAMyH,EAAO3S,KAAKkL,IAoB7BiE,QAlBQ4D,EADG7H,GAAY,OAANA,EACFA,IAAO6H,EAAE7H,KAmBxB+H,KAlBerY,IAChB,MAAMsY,EAAS1V,IAAIuO,iBAAiBnR,GAEpC,IAAK4X,EAGD,OAFAC,GAAS,EACTjV,IAAIsE,eAAeoR,IACZ,EAGPJ,IAAUN,IACVD,EAAcW,KAEhBV,IAQDC,IACDjV,IAAIsE,eAAeyQ,GACnBD,EAAU,CAAC5T,O,gCCrDnBnE,EAAOD,QAAQ2D,aAAe,KAC1B,IAAIkV,GAAS,EAEb,MAAO,CACHjT,OAAM,IACKiT,EAEXpM,UACIoM,GAAS,GAEbC,YACID,GAAS,M,gCCTrB,MAAME,EAAO1V,EAAQ,GACfoK,EAAapK,EAAQ,GACrB2V,EAAS3V,EAAQ,GAAW+J,GAE5BO,EAAatK,EAAQ,IAO3BpD,EAAOD,QAAU,SAAoBqP,GACjC,IAAKA,EACD,OAEJ,MAAM,KAAC3I,GAAQ2I,EAET/O,EAAOoG,GAAaiH,EAAWjH,GAZnB4L,QAAQ,OAAQ,IAalC,MAAMU,EAAW3D,EAAO+D,SAEpBrN,SAASzF,KAGbyF,SAASzF,GAAQ,KACbyY,EAAK/F,GACL,MAAM,OAAC/Q,GAAU8D,SACXkT,EAAWhX,EAAS8D,SAAS4I,kBAAoBjI,EAAO,MAE9D,OAAOsS,EAAOC,GAAUC,KAAKnX,UACzB,MAAMoX,EAAYpX,SAAa0W,GAAKA,IAC9BxY,EAAS8F,SAASzF,GASxB,OAPA5B,OAAOoF,OAAOqV,EAAWlZ,GAEzB8F,SAASzF,GAAQ6Y,EAEjBpT,SAAS4F,IAAI,OAAQrL,SACfL,EAAOkN,OAENgM,KAIfpT,SAASzF,GAAMoH,KAAO3F,iBAAmB,2BAATgB,EAAS,yBAATA,EAAS,gBACrCgD,SAAS4F,IAAI,OAAQrL,EAAMyC,GAC3B,MAAM5C,EAAI4F,SAASzF,IAEZqU,EAAG/D,SAAWnD,EAAWtN,GAEhC,GAAIwU,EACA,OAAOtH,QAAQwF,MAAM8B,SAEnB/D,EAAElJ,QAAQ3E,O,gCCpDxB,MAAMgW,EAAO1V,EAAQ,GACf+V,EAAQ/V,EAAQ,IAChBuK,EAAUvK,EAAQ,GAClBoK,EAAapK,EAAQ,GACrBD,EAAYC,EAAQ,IAEpBgW,EAAWhW,EAAQ,IACnBiW,EAAW1L,EAAQvK,EAAQ,KAC3BkW,EAAclW,EAAQ,KAEtB,GAACmW,GAAMnW,EAAQ,GAEfoW,EAAWnB,OAAO7T,OAAOC,aAAa,KAAM,KAGlDzE,EAAOD,QAAQmN,KAAOpL,gBACZ2X,QAAQC,IAAI,CACdC,IACAC,SAgbJ3W,IAAIK,OAAOuW,IAAI,CAAC,SAAU,gBAAkB7V,IACxC,MAAM,IAAC8J,GAAOhI,SACRH,EAASmI,aAAH,EAAGA,EAAKnI,SAEpB,IAAIA,EAIJ,OADA3B,EAAMmD,iBACC,mDAKX7D,EAAOuW,IAAI,WAAY/X,UAAmB,IAAZ,MAACgY,GAAW,EACtC,MAAMrT,GAAQqT,GAAS,IAAIzH,QAAQkH,EAAI,IAEvC,IAAK9S,EACD,OAAOX,SAASoM,MAAM9P,SAASqP,YAG7B3L,SAASc,QAAQ,CACnBH,OACA6I,SAHY,WASpBhM,EAAOuW,IAAI,SAAU,KACjB,MAAME,EAAKpY,OAAOqY,WAAalU,SAAS6I,oBAExC,IAAKoL,EACD,OAEJ,MAAM,MAACvT,GAASxD,EACViX,GAAezT,EAErB,GAAIyT,EACA,OAEJ,MAAM5Z,EAAOmG,EAAMyD,aAAa,aAC1BiQ,EAAkB,YAAT7Z,EAEX6Z,GAGJjX,IAAIiE,gBA1dJiT,IACAtU,OAIRC,SAASsI,UAAYpO,EAAOD,QAE5B,MAcMqa,EAAUzM,EAAQ,CAAC0M,EAAOrW,KAC5B,IAAK,MAAM0M,KAAM2J,EACb3J,EAAG1M,KAGLhB,EAAOC,IAAIC,aACX,OAACI,GAAUL,IACXqX,EAAc,CAChBC,UAAWzB,EAAK0B,KAAKC,GA6RzB,SAA+BzW,GAC3B,MAEM5C,EAAM,CACR4D,IAAKhB,EAAMe,OACXE,KAAMjB,EAAMkB,QACZC,KAAMnB,EAAMoB,QACZnG,MAAO+E,EAAM6C,UAGXN,EAAUmU,EAAa1W,EAAM2W,QAE7BC,EAAW5X,EAAK3C,KACtB4C,IAAIsE,eAAehB,GACnB,MAAMsU,EAAS7X,EAAK3C,KAEpB,IAAI6Q,EAAQ,GAER9P,EAAInC,MACJiS,EAQR,SAAuB4J,EAAMC,GACzB,MAAM7J,EAAQjO,IAAI+X,cACZzE,EAAQtT,IAAIwV,aAAavH,GACzB+J,EAAe5B,EAAS9C,GAExB2E,EAAYD,EAAaH,GACzBK,EAAUF,EAAaF,GAE7B,OAAO3B,EAAS8B,EAAWC,EAASjK,GAhBxBkK,CAAcR,EAAUC,GAEhC3J,EAAMpS,KAAKkE,EAAKuD,SApBA,IAsBhBvC,EAAMqX,QA3Hd,SAAsBja,EAAK8P,GACvB,MAAMoK,EAAQ,MAAM7V,KAAK9D,OAAOM,UAAUsZ,UAE1C,IAAKna,EACD,MAAMoa,MAAM,gCAEhB,MAAOlJ,GAAQpB,EAEf,GAAIoK,GAASla,EAAI+D,MAAQ/D,EAAI6D,KACzB,OAAOhC,IAAIqE,mBAAmBgL,GAElC,GAAIlR,EAAInC,MACGiS,EAAM4D,IAAI7R,IAAIyT,YAgHrB+E,CAAara,EAAK8P,MApTtBwK,MAAOtB,EAAQ,CAmLnB,SAAiBpW,GACbA,EAAMmD,iBAmBV,SAAqBZ,GACjB,MAAM,MAACC,GAASxD,EACVkO,EAAQjO,IAAI0Y,cAAc,WAAYnV,IA4EhD,SAAsBD,GAClB,KAA2B,OAApBA,EAAQqV,SACXrV,EAAUA,EAAQsV,cAEtB,OAAOtV,GA/EIuV,CAAavV,KAEb2K,GACPjO,IAAIiE,cAxBRA,CAAYlD,EAAM2W,SA5MJ3W,IACd,MAAMsX,EAAQ,MAAM7V,KAAK9D,OAAOM,UAAUsZ,WACpC,SACF1U,EADE,QAEFzB,EAFE,QAGFF,GACAlB,EAEA6C,GAAYyU,GAASlW,GAAWF,GAGpCjC,IAAI2S,mBAgBJmG,UAAWjD,EAAK0B,KAAKC,GAgPzB,SAAqBzW,GACjB,MAAM,UAACwK,GAAa1I,SACdS,EAAUmU,EAAa1W,EAAM2W,SAC7B,MAACjU,GAAS1D,EAChB,IAAIuQ,EAAOtQ,IAAI+Y,eAAezV,GAC1BlG,EAAO4C,IAAI4R,eAAetO,GAG1BG,IACArG,GAAQ4b,EACR1I,EAAOzC,SAASoL,cAAc,KAC9B3I,EAAK4I,YAAc9b,EACnBkT,EAAK6I,KAAO5N,EAAY,QAAUxL,EAAKyD,KAAOwV,GAGlDjY,EAAMqY,aAAaC,QACf,cACA,4BACAjc,EAAO,IACPkT,MAlQJgJ,SAAUzD,EAAK0B,KAAKC,GA2MxB3Y,eAA0BkC,GACtBA,EAAMmD,iBAEN,MAAMb,EAAUoU,EAAa1W,EAAM2W,QAC7BjU,EAAQzD,IAAIuZ,eAAelW,GAC3BG,EAAOxD,IAAIwZ,eAAenW,GAEhC,IAAKI,EACD,OAAOZ,SAASuC,KAAKZ,aAEnB3B,SAASc,QAAQ,CACnBH,YArNJiW,WAAY5D,EAAK0B,KAAKC,GAyN1B3Y,eAAuBkC,GACnB,MAAMsC,EAAUoU,EAAa1W,EAAM2W,QAGnC,IAFc1X,IAAIuZ,eAAelW,GAG7B,OAIJ,IAFkBrD,IAAI0Z,cAAcrW,GAGhC,aAEER,SAASc,QAAQ,CACnBH,KAAMxD,IAAIwZ,eAAenW,SAnOjC,IAAI2V,EAEJ,SAAS9B,IACL,MAAMyC,EAAK3Z,IAAI4Z,QACTC,EAAaC,GAAOA,EAAGC,QACvBC,EAAWF,GACN,oBAAoBtX,KAAKsX,EAAGC,QAAQ3c,MAG/CiD,EAAO4Z,SAASN,EAAK5Y,IACjB,MAAM+Y,EAAK/Y,EAAM2W,OAGjB,GAA4B,iBAFboC,EAAGlB,cAEPmB,QAAQ3c,KACf,OAEJ,MAAMA,GAAQ0c,EAAGC,QAAQ3c,MAAQ,IAC5BgS,QAAQ,MAAO,IAEpB,IAAK,qBAAqB5M,KAAKpF,GAC3B,OAEJ,MAAMmG,EASd,SAAS2W,EAAQJ,GAAe,IAAXtW,EAAW,uDAAJ,GACxB,OAAKsW,EAGEI,EAAQJ,EAAGlB,cAAepV,EAAK4Q,OAAO0F,IAFlCtW,EAXO0W,CAAQJ,GACjBnI,OAAOkI,GACPlI,OAAOqI,GACPG,MAELtX,SAASyC,UAAUlI,EAAMmG,KAWjC1E,eAAe+D,IACX,MAAO,CAAEA,SAAgB2H,EAAWvK,IAAIqL,MAAM5N,IAAK,UAC7C4U,EAAOzP,aAAH,EAAGA,EAAQwX,OAErBpB,EAAMhZ,IAAIqa,aAAahI,GAG3BtV,EAAOD,QAAQ+R,cAAgB,KAC3B,MAAMyL,EAActa,IAAIua,QAAQ,gBAE3BD,GAGLja,EAAO4Z,SAASK,EAAa,IAAc,IAAb,OAAC5C,GAAY,EACvC,MAAM,GAACzG,GAAMyG,EACP8C,EAAapd,IACf,MAAM,UAACsG,GAAab,SAGpB,OAFWa,EAAUc,KAAKpG,KAAK,KAAMhB,IAKnCqd,EAAa,CACf,GAAc5X,SAASmC,KAAKR,KAC5B,GAAc3B,SAASqC,SAASV,KAChC,GAAc3B,SAASuC,KAAKZ,KAC5B,GAAc3B,SAAS4C,SAASjB,KAChC,GAAcgW,EAAU,QACxB,GAAcA,EAAU,QACxB,GAAcxa,IAAI+F,aAClB,GAAcyU,EAAU,UACxB,GAAc3X,SAASqD,KAAK1B,KAC5B,IAAc3B,SAASuD,OAAO5B,KAC9B,IAAc3B,SAAS0D,QAAQ/B,KAC/B,SAAc3B,SAASyD,SAAS9B,KAChC,QAAc3B,SAAS6X,QAAQlW,MAGnCqR,EAAK4E,EAAWxJ,OAmDxBpS,eAAe8b,EAAmBpX,EAAOxC,GACrCA,EAAMmD,iBAEN,MAAMZ,EAAUvC,EAAM2W,OAChBkD,EAAOtX,EAAQ0D,aAAa,aAC5BsF,EA9BV,SAAqB/I,GACjB,MAAMsX,EAAY9a,EAAKwD,MAEvB,OAAKsX,GAGatX,EAAMyD,aAAa,eACf6T,EAAU7T,aAAa,aAuB3B8T,CAAYvX,GAE9B,GAAa,iBAATqX,EACA,OAqBUd,EArBMxW,OAsBpBpD,EAAUoI,UAAUwR,EAAGlB,cAAcmC,OAChC/E,KAAKnT,SAAS4F,KACdD,MAAM3F,SAAS4F,KAHxB,IAAkBqR,EAnBd,GAAa,eAATc,EACA,OAAO/X,SAAS8F,QAAQ,CACpBpF,QACA+I,cAGR,GAAa,iBAATsO,EACA,OAEJ,MAAM,KAACzB,GAAQ7V,EACTE,EAjCV,SAAoBA,GAChB,MAAMiM,EAAM5M,SAAS8I,MACf,OAAC5M,GAAU8D,SACXmY,EAAY5F,OAAO,IAAMrW,EAASuX,GAExC,OAAO2E,UAAUzX,GACZ4L,QAAQK,EAAK,IACbL,QAAQ4L,EAAW,IAEnB5L,QAAQ,KAAM,QACdA,QAAQmH,EA5KH,MA4KuB,IAuBpB2E,CAAW/B,SAElBtW,SAASc,QAAQ,CACnBH,OACA4I,WAAW,EACX7I,MAAO+I,EAAY/I,EAAQxD,EAAKwD,QAUxC,SAASiU,EAAY2D,EAAUpa,GAC3B,MAAM,OAAC2W,GAAU3W,GACX,QAAC4X,GAAWjB,EAEF,OAAZiB,GACAwC,EAASpa,GA2FjB,SAAS0W,EAAanU,GAClB,IAAKA,EACD,OAAOA,EAEX,KAA2B,OAApBA,EAAQqV,SACXrV,EAAUA,EAAQsV,cAEtB,OAAOtV,EAgDX,SAASoT,IACL,MAAMiD,EAAK3Z,IAAI4Z,QAEfvZ,EAAO+a,QAAQ,cAAezB,EAAK5Y,IAC/B8B,SAASqD,KAAK1B,KAAK,CACf6W,EAAGta,EAAMua,QACTC,EAAGxa,EAAMya,YAIjBnb,EAAOob,eAAe9B,EAAK5Y,IACvB8B,SAASqD,KAAKwV,SAAW3a,EAAMmD,mBAIvC,SAASyS,IACL,MAAMvG,EAASpQ,IAAI2b,cAAc,SAC3B9I,EAAS,IAAc,IAAb,OAAC6E,GAAY,EACzBA,EAAOkE,UAAUhF,IAAI,mBAGnBiF,EAAW,IAAc,IAAb,OAACnE,GAAY,EAC3BA,EAAOkE,UAAUhJ,OAAO,mBAGtBkJ,EAAU/a,IACZ,MAAM,MACFkN,EADE,MAEF8N,GACAhb,EAAMqY,cAEH7d,OAAQygB,GAAc/N,EAI7B,GAFAlN,EAAMmD,iBAEF8X,KAAgBD,IAAUA,EAAMxgB,SAAWwgB,EAAM,GAAGE,kBACpD,OAAO5F,EAAYpI,GAEvB,MACMiO,EAAWC,MAAMtE,KAAKkE,GAAOpK,OADnByK,GAAuB,SAAdA,EAAKC,MAG9B,GAAIH,EAAS3gB,OACT,OAAOyE,IAAIsc,gBAAgBJ,GAE/B,MAAM,UAACxY,GAAab,SACd2X,EAAYzZ,EAAM6C,SAAW,OAAS,OAE5C,OAAOF,EAAUc,KAAKgW,IAQpB+B,EAAcxb,IAChB,MAAM,aAACqY,GAAgBrY,GACjB,cAACyb,GAAiBpD,EAEpB,gBAAgB5W,KAAKga,GACrBpD,EAAaqD,WAAa,OAE1BrD,EAAaqD,WAAa,OAE9B1b,EAAMmD,kBAGV,IAAK,MAAMX,KAAS6M,EAChB/P,EACKuW,IAAI,WAAYrT,EAAOgZ,GACvB3F,IAAI,OAAQrT,EAAOuY,GACnBlF,IAAI,YAAa/D,GACjB+D,IAAI,CAAC,YAAa,QAASiF,GA1SxC9e,EAAOD,QAAQ8R,WAAc8N,IACzB,MAAMnZ,EARQmZ,IACTxG,EAAMyG,OAAOD,GAGX1c,IAAI0Y,cAAc,MAAQgE,GAFtBA,EAMG/L,CAAS+L,GAEjBE,EAAe5c,IAAI0Y,cAAc,WAAYnV,GAC7CsZ,EAAc7c,IAAI0Y,cAAc,UAAWnV,GAGjDlD,EAAO4Z,SAAS4C,EAIpB,SAAyBtZ,GACrB,OAAOoX,EAAmBvc,KAAK,KAAMmF,GALRuZ,CAAgBvZ,IAC7ClD,EAAOuW,IAAIgG,EAAcvF,K,gCC9J7Bta,EAAOD,QAAU,CAACmb,EAAWC,EAASjK,IAC9BgK,EAAYC,EACLjK,EAAMrP,MAAMqZ,EAAWC,EAAU,GAExCD,EAAYC,EACLjK,EAAMrP,MAAMsZ,EAASD,EAAY,GAErC,CAAChK,EAAMgK,K,gCCPlBlb,EAAOD,QAAU,CAACigB,EAAOX,KACrB,MAAM3H,EAAQsI,EAAMnT,QAAQwS,GAE5B,OAAM3H,EAGCA,EAFI,I,gCCHf,MAAMzU,EAAMG,EAAQ,IAEdJ,EAAOC,EAAIC,aAEX,KACF8L,EADE,MAEFG,GACArJ,SAEEmK,EAAWhN,EAAIiN,mBAErB,IAAI+P,EAAejR,EAAKiB,GAExB,MAAM,SAAC2D,GAAY3Q,EAEnB6C,SAASyC,UAAY,SAAClI,GAA6B,IAAvBmG,EAAuB,uDAAfoN,IAChC,MAAM3D,EAAWzJ,EACZwW,QACA3c,KACAgS,QAAQ,MAAO,IAEhBhS,IAAS4f,EACT9Q,EAAMc,GAAY,MAEM,QAApBd,EAAMc,GACNd,EAAMc,GAAY,OAElBd,EAAMc,GAAY,MAG1BgQ,EACAjR,EAAKiB,GAAY5P,EAEjB,MAAMkP,EAAYU,IAAajN,EAAKkd,cAEpCpa,SAAS8F,QAAQ,CACbpF,QACA+I","file":"cloudcmd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t20: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([41,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","'use strict';\n\nmodule.exports.registerSW = registerSW;\nmodule.exports.unregisterSW = unregisterSW;\n\nmodule.exports.listenSW = (sw, ...args) => {\n sw?.addEventListener(...args);\n};\n\nasync function registerSW(prefix) {\n if (!navigator.serviceWorker)\n return;\n \n const isHTTPS = location.protocol === 'https:';\n const isLocalhost = location.hostname === 'localhost';\n \n if (!isHTTPS && !isLocalhost)\n return;\n \n return await navigator.serviceWorker.register(`${prefix}/sw.js`);\n}\nasync function unregisterSW(prefix) {\n const reg = await registerSW(prefix);\n reg?.unregister(prefix);\n}\n\n","'use strict';\n\n/* global CloudCmd, DOM */\n\nconst Info = DOM.CurrentInfo;\n\nconst clipboard = require('@cloudcmd/clipboard');\n\nconst Buffer = require('../dom/buffer');\nconst Events = require('../dom/events');\n\nconst KEY = require('./key');\nconst vim = require('./vim');\nconst setCurrentByChar = require('./set-current-by-char');\nconst {createBinder} = require('./binder');\n\nconst fullstore = require('fullstore');\nconst Chars = fullstore();\n\nconst toggleVim = (keyCode) => {\n const {_config, config} = CloudCmd;\n \n if (keyCode === KEY.ESC) {\n _config('vim', !config('vim'));\n }\n};\n\nChars([]);\n\nconst {assign} = Object;\n\nconst binder = createBinder();\nmodule.exports = assign(binder, KEY);\nmodule.exports.bind = () => {\n Events.addKey(listener, true);\n binder.setBind();\n};\n\nmodule.exports._listener = listener;\n\nfunction getChar(event) {\n /*\n * event.keyIdentifier deprecated in chrome v51\n * but event.key is absent in chrome <= v51\n */\n \n const {\n key,\n shift,\n keyCode,\n keyIdentifier,\n } = event;\n const char = key || fromCharCode(keyIdentifier);\n const symbol = getSymbol(shift, keyCode);\n \n return [symbol, char];\n}\n\nasync function listener(event) {\n const {keyCode} = event;\n \n // strange chrome bug calles listener twice\n // in second time event misses a lot fields\n if (typeof event.altKey === 'undefined')\n return;\n \n const alt = event.altKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const isBetween = keyCode >= KEY.ZERO && keyCode <= KEY.Z;\n const isNumpad = /Numpad/.test(event.code);\n \n const [symbol, char] = getChar(event);\n \n if (!binder.isBind())\n return;\n \n toggleVim(keyCode);\n const isVim = CloudCmd.config('vim');\n \n if (!isVim && !isNumpad && !alt && !ctrl && !meta && (isBetween || symbol))\n return setCurrentByChar(char, Chars);\n \n Chars([]);\n await switchKey(event);\n \n if (keyCode >= KEY.F1 && keyCode <= KEY.F10)\n return;\n \n if (isVim)\n vim(char, event);\n}\n\nfunction getSymbol(shift, keyCode) {\n switch(keyCode) {\n case KEY.DOT:\n return '.';\n \n case KEY.HYPHEN:\n return shift ? '_' : '-';\n \n case KEY.EQUAL:\n return shift ? '+' : '=';\n }\n \n return '';\n}\n\nfunction fromCharCode(keyIdentifier) {\n const code = keyIdentifier.substring(2);\n const hex = parseInt(code, 16);\n const char = String.fromCharCode(hex);\n \n return char;\n}\n\nasync function switchKey(event) {\n let i;\n let isSelected;\n let prev;\n let next;\n let current = Info.element;\n let dataName;\n \n const {\n name,\n panel,\n path,\n isDir,\n } = Info;\n \n const {\n Operation,\n loadDir,\n config,\n } = CloudCmd;\n const {keyCode} = event;\n \n const alt = event.altKey;\n const shift = event.shiftKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const ctrlMeta = ctrl || meta;\n \n if (current) {\n prev = current.previousSibling;\n next = current.nextSibling;\n }\n \n switch(keyCode) {\n case KEY.TAB:\n DOM.changePanel();\n event.preventDefault();\n break;\n \n case KEY.INSERT:\n DOM .toggleSelectedFile(current)\n .setCurrentFile(next);\n break;\n \n case KEY.INSERT_MAC:\n DOM .toggleSelectedFile(current)\n .setCurrentFile(next);\n break;\n \n case KEY.DELETE:\n if (shift)\n Operation.show('delete:silent');\n else\n Operation.show('delete');\n break;\n \n case KEY.ASTERISK:\n DOM.toggleAllSelectedFiles(current);\n break;\n \n case KEY.PLUS:\n DOM.expandSelection();\n event.preventDefault();\n break;\n \n case KEY.MINUS:\n DOM.shrinkSelection();\n event.preventDefault();\n break;\n \n case KEY.F1:\n CloudCmd.Help.show();\n event.preventDefault();\n break;\n \n case KEY.F2:\n CloudCmd.UserMenu.show();\n break;\n \n case KEY.F3:\n event.preventDefault();\n \n if (Info.isDir)\n await loadDir({\n path,\n });\n else if (shift)\n CloudCmd.View.show(null, {\n raw: true,\n });\n else if (ctrlMeta)\n CloudCmd.sortPanel('name');\n else\n CloudCmd.View.show();\n \n break;\n \n case KEY.F4:\n if (config('vim'))\n CloudCmd.EditFileVim.show();\n else\n CloudCmd.EditFile.show();\n \n event.preventDefault();\n break;\n \n case KEY.F5:\n if (ctrlMeta)\n CloudCmd.sortPanel('date');\n else if (alt)\n Operation.show('pack');\n else\n Operation.show('copy');\n \n event.preventDefault();\n break;\n \n case KEY.F6:\n if (ctrlMeta)\n CloudCmd.sortPanel('size');\n else if (shift)\n DOM.renameCurrent(current);\n else\n Operation.show('move');\n \n event.preventDefault();\n break;\n \n case KEY.F7:\n if (shift)\n DOM.promptNewFile();\n else\n DOM.promptNewDir();\n \n event.preventDefault();\n break;\n \n case KEY.F8:\n Operation.show('delete');\n event.preventDefault();\n break;\n \n case KEY.F9:\n if (alt)\n Operation.show('extract');\n else\n CloudCmd.Menu.show();\n \n event.preventDefault();\n break;\n \n case KEY.F10:\n CloudCmd.Config.show();\n event.preventDefault();\n break;\n \n case KEY.TRA:\n event.preventDefault();\n \n if (shift)\n return CloudCmd.Terminal.show();\n \n CloudCmd.Konsole.show();\n break;\n \n case KEY.BRACKET_CLOSE:\n CloudCmd.Konsole.show();\n event.preventDefault();\n break;\n \n case KEY.SPACE:\n event.preventDefault();\n \n if (!isDir || name === '..')\n isSelected = true;\n else\n isSelected = DOM.isSelected(current);\n \n if (!isSelected)\n await DOM.loadCurrentSize(current);\n \n DOM.toggleSelectedFile(current);\n \n break;\n \n case KEY.U:\n if (ctrlMeta) {\n DOM.swapPanels();\n event.preventDefault();\n }\n break;\n \n /* navigation on file table: *\n * in case of pressing button 'up', *\n * select previous row */\n case KEY.UP:\n if (shift)\n DOM.toggleSelectedFile(current);\n \n DOM.setCurrentFile(prev);\n event.preventDefault();\n break;\n \n /* in case of pressing button 'down', *\n * select next row */\n case KEY.DOWN:\n if (shift)\n DOM.toggleSelectedFile(current);\n \n DOM.setCurrentFile(next);\n event.preventDefault();\n break;\n \n case KEY.LEFT:\n if (!alt)\n return;\n \n event.preventDefault();\n \n dataName = Info.panel.getAttribute('data-name');\n \n if (dataName === 'js-right')\n DOM.duplicatePanel();\n \n break;\n \n case KEY.RIGHT:\n if (!alt)\n return;\n \n event.preventDefault();\n \n dataName = Info.panel.getAttribute('data-name');\n \n if (dataName === 'js-left')\n DOM.duplicatePanel();\n \n break;\n \n /* in case of pressing button 'Home', *\n * go to top element */\n case KEY.HOME:\n DOM.setCurrentFile(Info.first);\n event.preventDefault();\n break;\n \n /* in case of pressing button 'End', select last element */\n case KEY.END:\n DOM.setCurrentFile(Info.last);\n event.preventDefault();\n break;\n \n /* если нажали клавишу page down проматываем экран */\n case KEY.PAGE_DOWN:\n DOM.scrollByPages(panel, 1);\n \n for (i = 0; i < 30; i++) {\n if (!current.nextSibling)\n break;\n \n current = current.nextSibling;\n }\n \n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n \n /* если нажали клавишу page up проматываем экран */\n case KEY.PAGE_UP:\n DOM.scrollByPages(panel, -1);\n \n for (i = 0; i < 30; i++) {\n if (!current.previousSibling)\n break;\n \n current = current.previousSibling;\n }\n \n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n \n case KEY.ENTER:\n if (Info.isDir)\n await loadDir({path});\n else\n CloudCmd.View.show();\n break;\n \n case KEY.BACKSPACE:\n CloudCmd.goToParentDir();\n event.preventDefault();\n break;\n \n case KEY.BACKSLASH:\n if (ctrlMeta)\n await loadDir({\n path: '/',\n });\n break;\n \n case KEY.A:\n if (ctrlMeta) {\n DOM.selectAllFiles();\n event.preventDefault();\n }\n \n break;\n \n case KEY.G:\n if (alt) {\n DOM.goToDirectory();\n event.preventDefault();\n }\n \n break;\n \n case KEY.M:\n if (ctrlMeta) {\n if (config('vim'))\n CloudCmd.EditNamesVim.show();\n else\n CloudCmd.EditNames.show();\n \n event.preventDefault();\n }\n \n break;\n \n case KEY.P:\n if (!ctrlMeta)\n return;\n \n event.preventDefault();\n clipboard\n .writeText(Info.dirPath)\n .catch(CloudCmd.log);\n \n break;\n /**\n * обновляем страницу,\n * загружаем содержимое каталога\n * при этом данные берём всегда с\n * сервера, а не из кэша\n * (обновляем кэш)\n */\n case KEY.R:\n if (ctrlMeta) {\n CloudCmd.log('reloading page...\\n');\n CloudCmd.refresh();\n event.preventDefault();\n }\n break;\n \n case KEY.C:\n if (ctrlMeta)\n Buffer.copy();\n break;\n \n case KEY.X:\n if (ctrlMeta)\n Buffer.cut();\n break;\n \n case KEY.V:\n if (ctrlMeta)\n Buffer.paste();\n break;\n \n case KEY.Z:\n if (ctrlMeta)\n Buffer.clear();\n break;\n \n /* чистим хранилище */\n case KEY.D:\n if (ctrlMeta) {\n CloudCmd.log('clearing storage...');\n await DOM.Storage.clear();\n CloudCmd.log('storage cleared');\n event.preventDefault();\n }\n break;\n }\n}\n\n","'use strict';\n\nrequire('../css/main.css');\nrequire('../css/nojs.css');\nrequire('../css/columns/name-size-date.css');\nrequire('../css/columns/name-size.css');\n\nconst wraptile = require('wraptile');\nconst load = require('load.js');\n\nconst isDev = process.env.NODE_ENV === 'development';\n\nconst {\n registerSW,\n listenSW,\n} = require('./sw/register');\n\n// prevent additional loading of emitify\nwindow.Emitify = require('emitify');\n\nmodule.exports = window.CloudCmd = async (config) => {\n window.Util = require('../common/util');\n window.CloudFunc = require('../common/cloudfunc');\n \n const DOM = require('./dom');\n \n window.DOM = DOM;\n window.CloudCmd = require('./client');\n \n await register(config);\n \n require('./listeners');\n require('./key');\n require('./sort');\n \n const prefix = getPrefix(config.prefix);\n \n window.CloudCmd.init(prefix, config);\n};\n\nfunction getPrefix(prefix) {\n if (!prefix)\n return '';\n \n if (!prefix.indexOf('/'))\n return prefix;\n \n return `/${prefix}`;\n}\n\nconst onUpdateFound = wraptile(async (config) => {\n if (isDev)\n return;\n \n const {DOM} = window;\n const prefix = getPrefix(config.prefix);\n \n await load.js(`${prefix}/dist/cloudcmd.common.js`);\n await load.js(`${prefix}/dist/cloudcmd.js`);\n \n console.log('cloudcmd: sw: updated');\n \n DOM.Events.removeAll();\n window.CloudCmd(config);\n});\n\nasync function register(config) {\n const {prefix} = config;\n const sw = await registerSW(prefix);\n \n listenSW(sw, 'updatefound', onUpdateFound(config));\n}\n\n","'use strict';\n\n/* global DOM */\n\nconst Emitify = require('emitify');\nconst inherits = require('inherits');\nconst rendy = require('rendy');\nconst load = require('load.js');\nconst tryToCatch = require('try-to-catch');\nconst {addSlashToEnd} = require('format-io');\nconst pascalCase = require('just-pascal-case');\nconst currify = require('currify');\n\nconst isDev = process.env.NODE_ENV === 'development';\n\nconst Images = require('./dom/images');\nconst {unregisterSW} = require('./sw/register');\nconst getJsonFromFileTable = require('./get-json-from-file-table');\nconst Key = require('./key');\n\nconst noJS = (a) => a.replace(/.js$/, '');\n\nconst {\n apiURL,\n formatMsg,\n buildFromJSON,\n} = require('../common/cloudfunc');\n\nconst loadModule = require('./load-module');\n\ninherits(CloudCmdProto, Emitify);\n\nmodule.exports = new CloudCmdProto(DOM);\n\nload.addErrorListener((e, src) => {\n const msg = `file ${src} could not be loaded`;\n Images.show.error(msg);\n});\n\nfunction CloudCmdProto(DOM) {\n let Listeners;\n \n const log = (...a) => {\n if (!isDev )\n return;\n \n console.log(...a);\n };\n \n Emitify.call(this);\n \n const CloudCmd = this;\n const Info = DOM.CurrentInfo;\n \n const {\n Storage,\n Files,\n } = DOM;\n \n this.log = log;\n this.prefix = '';\n this.prefixSocket = '';\n this.prefixURL = '';\n this.DIRCLIENT = '/dist/';\n this.DIRCLIENT_MODULES = this.DIRCLIENT + 'modules/';\n \n this.MIN_ONE_PANEL_WIDTH = 1155;\n this.HOST = location.origin || location.protocol + '//' + location.host;\n \n const TITLE = 'Cloud Commander';\n this.TITLE = TITLE;\n \n this.sort = {\n left: 'name',\n right: 'name',\n };\n \n this.order = {\n left: 'asc',\n right: 'asc',\n };\n \n /**\n * Функция привязываеться ко всем ссылкам и\n * загружает содержимое каталогов\n *\n * @param params - {\n * paramLink - ссылка\n * needRefresh - необходимость обязательной загрузки данных с сервера\n * panel\n * }\n * @param callback\n */\n this.loadDir = async (params) => {\n const p = params;\n const refresh = p.isRefresh;\n \n const {\n panel,\n history,\n noCurrent,\n currentName,\n } = p;\n \n let panelChanged;\n \n if (!noCurrent && panel && panel !== Info.panel) {\n DOM.changePanel();\n panelChanged = true;\n }\n \n let imgPosition;\n \n if (panelChanged || refresh || !history)\n imgPosition = 'top';\n \n Images.show.load(imgPosition, panel);\n const path = addSlashToEnd(p.path);\n \n /* загружаем содержимое каталога */\n await ajaxLoad(path, {\n refresh,\n history,\n noCurrent,\n currentName,\n }, panel);\n };\n \n /**\n * Конструктор CloudClient, который\n * выполняет весь функционал по\n * инициализации\n */\n this.init = async (prefix, config) => {\n CloudCmd.prefix = prefix;\n CloudCmd.prefixURL = `${prefix}${apiURL}`;\n CloudCmd.prefixSocket = config.prefixSocket;\n \n CloudCmd.config = (key) => config[key];\n CloudCmd.config.if = currify((key, fn, a) => config[key] && fn(a));\n CloudCmd._config = (key, value) => {\n /*\n * should be called from config.js only\n * after successful update on server\n */\n \n if (key === 'password')\n return;\n \n config[key] = value;\n };\n \n if (config.oneFilePanel)\n CloudCmd.MIN_ONE_PANEL_WIDTH = Infinity;\n \n if (!document.body.scrollIntoViewIfNeeded)\n await load.js(prefix + CloudCmd.DIRCLIENT_MODULES + 'polyfill.js');\n \n await initModules();\n await baseInit();\n await loadStyle();\n \n CloudCmd.route(location.hash);\n };\n \n async function loadStyle() {\n const {prefix} = CloudCmd;\n const name = prefix + '/dist/cloudcmd.common.css';\n \n await load.css(name);\n }\n \n this.route = (path) => {\n const query = path.split('/');\n \n if (!path)\n return;\n \n const [kebabModule] = query;\n const module = noJS(pascalCase(kebabModule.slice(1)));\n \n const file = query[1];\n const current = DOM.getCurrentByName(file);\n \n if (file && !current) {\n const msg = formatMsg('set current file', file, 'error');\n CloudCmd.log(msg);\n return;\n }\n \n DOM.setCurrentFile(current);\n CloudCmd.execFromModule(module, 'show');\n };\n \n this.logOut = async () => {\n const url = CloudCmd.prefix + '/logout';\n const error = () => document.location.reload();\n const {prefix} = CloudCmd;\n \n await DOM.Storage.clear();\n unregisterSW(prefix);\n DOM.load.ajax({\n url,\n error,\n });\n };\n \n const initModules = async () => {\n CloudCmd.Key = Key;\n CloudCmd.Key.bind();\n \n const [, modules] = await tryToCatch(Files.get, 'modules');\n const showLoad = Images.show.load;\n \n const doBefore = {\n edit: showLoad,\n menu: showLoad,\n };\n \n const load = (name, path, dobefore) => {\n loadModule({\n name,\n path,\n dobefore,\n });\n };\n \n if (!modules)\n return;\n \n for (const module of modules.local) {\n load(null, module, doBefore[module]);\n }\n };\n \n async function saveCurrentName(currentName) {\n await Storage.set('current-name', currentName);\n }\n \n async function baseInit() {\n const files = DOM.getFiles();\n \n CloudCmd.on('current-file', DOM.updateCurrentInfo);\n CloudCmd.on('current-name', saveCurrentName);\n \n const name = await Storage.get('current-name');\n const currentFile = name && DOM.getCurrentByName(name) || files[0];\n \n /* выделяем строку с первым файлом */\n if (files)\n DOM.setCurrentFile(currentFile, {\n // when hash is present\n // it should be handled with this.route\n // overwre otherwise\n history: !location.hash,\n });\n \n const dirPath = DOM.getCurrentDirPath();\n Listeners = CloudCmd.Listeners;\n Listeners.init();\n \n const panels = getPanels();\n panels.forEach(Listeners.setOnPanel);\n \n Listeners.initKeysPanel();\n \n if (!CloudCmd.config('dirStorage'))\n return;\n \n const data = await Storage.get(dirPath);\n \n if (!data)\n await Storage.setJson(dirPath, getJsonFromFileTable());\n }\n \n function getPanels() {\n const panels = ['left'];\n \n if (CloudCmd.config('oneFilePanel'))\n return panels;\n \n return [\n ...panels,\n 'right',\n ];\n }\n \n this.execFromModule = async (moduleName, funcName, ...args) => {\n await CloudCmd[moduleName]();\n \n const func = CloudCmd[moduleName][funcName];\n func(...args);\n };\n \n this.refresh = async (options = {}) => {\n const {\n panel = Info.panel,\n currentName,\n } = options;\n \n const path = DOM.getCurrentDirPath(panel);\n \n const isRefresh = true;\n const history = false;\n const noCurrent = options ? options.noCurrent : false;\n \n await CloudCmd.loadDir({\n path,\n isRefresh,\n history,\n panel,\n noCurrent,\n currentName,\n });\n };\n \n /**\n * Функция загружает json-данные о Файловой Системе\n * через ajax-запрос.\n * @param path - каталог для чтения\n * @param options\n * { refresh, history } - необходимость обновить данные о каталоге\n * @param panel\n * @param callback\n *\n */\n async function ajaxLoad(path, options = {}, panel) {\n const {RESTful} = DOM;\n \n CloudCmd.log('reading dir: \"' + path + '\";');\n \n const dirStorage = CloudCmd.config('dirStorage');\n const json = dirStorage && await Storage.getJson(path);\n \n const name = options.currentName || Info.name;\n const {\n noCurrent,\n refresh,\n } = options;\n \n if (!refresh && json)\n return await createFileTable(json, panel, options);\n \n const position = DOM.getPanelPosition(panel);\n const sort = CloudCmd.sort[position];\n const order = CloudCmd.order[position];\n \n const query = rendy('?sort={{ sort }}&order={{ order }}', {\n sort,\n order,\n });\n \n const [, newObj] = await RESTful.read(path + query, 'json');\n \n if (!newObj)\n return; // that's OK, error handled by RESTful\n \n options.sort = sort;\n options.order = order;\n \n await createFileTable(newObj, panel, options);\n \n if (refresh && !noCurrent)\n DOM.setCurrentByName(name);\n \n if (!CloudCmd.config('dirStorage'))\n return;\n \n Storage.setJson(path, newObj);\n }\n \n /**\n * Функция строит файловую таблицу\n * @param json - данные о файлах\n * @param panelParam\n * @param history\n * @param callback\n */\n async function createFileTable(data, panelParam, options) {\n const {\n history,\n noCurrent,\n } = options;\n \n const names = [\n 'file',\n 'path',\n 'link',\n 'pathLink',\n ];\n \n const [\n error,\n [file, path, link, pathLink],\n ] = await tryToCatch(Files.get, names);\n \n if (error)\n return DOM.Dialog.alert(error.responseText);\n \n const panel = panelParam || DOM.getPanel();\n const {prefix} = CloudCmd;\n \n const {\n dir,\n name,\n } = Info;\n \n const {childNodes} = panel;\n let i = childNodes.length;\n \n while (i--)\n panel.removeChild(panel.lastChild);\n \n panel.innerHTML = buildFromJSON({\n sort : options.sort,\n order : options.order,\n data,\n id : panel.id,\n prefix,\n template : {\n file,\n path,\n pathLink,\n link,\n },\n });\n \n Listeners.setOnPanel(panel);\n \n if (!noCurrent) {\n let current;\n \n if (name === '..' && dir !== '/')\n current = DOM.getCurrentByName(dir);\n \n if (!current)\n [current] = DOM.getFiles(panel);\n \n DOM.setCurrentFile(current, {\n history,\n });\n \n CloudCmd.emit('active-dir', Info.dirPath);\n }\n }\n \n this.goToParentDir = async () => {\n const {\n dir,\n dirPath,\n parentDirPath,\n panel,\n } = Info;\n \n if (dirPath === parentDirPath)\n return;\n \n const path = parentDirPath;\n \n await CloudCmd.loadDir({\n path,\n });\n \n const current = DOM.getCurrentByName(dir);\n const [first] = DOM.getFiles(panel);\n \n DOM.setCurrentFile(current || first, {\n history,\n });\n };\n}\n\n","'use strict';\n\n/* global DOM */\n\nconst Info = DOM.CurrentInfo;\n\n/**\n * Функция генерирует JSON из html-таблицы файлов и\n * используеться при первом заходе в корень\n */\nmodule.exports = () => {\n const path = DOM.getCurrentDirPath();\n const infoFiles = Info.files || [];\n \n const notParent = (current) => {\n const name = DOM.getCurrentName(current);\n return name !== '..';\n };\n \n const parse = (current) => {\n const name = DOM.getCurrentName(current);\n const size = DOM.getCurrentSize(current);\n const owner = DOM.getCurrentOwner(current);\n const mode = DOM.getCurrentMode(current);\n const date = DOM.getCurrentDate(current);\n const type = DOM.getCurrentType(current);\n \n return {\n name,\n size,\n mode,\n owner,\n date,\n type,\n };\n };\n \n const files = infoFiles\n .filter(notParent)\n .map(parse);\n \n const fileTable = {\n path,\n files,\n };\n \n return fileTable;\n};\n\n","'use strict';\n\n/* global CloudCmd */\n/* global DOM */\n\nconst vim = require('./vim');\nconst finder = require('./find');\n\nconst Info = DOM.CurrentInfo;\nconst {Dialog} = DOM;\n\nmodule.exports = async (key, event) => {\n const operations = getOperations(event);\n await vim(key, operations);\n};\n\nconst getOperations = (event) => ({\n escape: DOM.unselectFiles,\n \n remove: () => {\n CloudCmd.Operation.show('delete');\n },\n \n copy: () => {\n DOM.Buffer.copy();\n DOM.unselectFiles();\n },\n \n select: () => {\n const current = Info.element;\n DOM.toggleSelectedFile(current);\n },\n \n paste: DOM.Buffer.paste,\n \n moveNext: ({count, isVisual, isDelete}) => {\n setCurrent('next', {\n count,\n isVisual,\n isDelete,\n });\n },\n \n movePrevious: ({count, isVisual, isDelete}) => {\n setCurrent('previous', {\n count,\n isVisual,\n isDelete,\n });\n },\n \n find: async () => {\n event.preventDefault();\n const [, value] = await Dialog.prompt('Find', '');\n \n if (!value)\n return;\n \n const names = Info.files.map(DOM.getCurrentName);\n const [result] = finder.find(value, names);\n \n DOM.setCurrentByName(result);\n },\n \n findNext: () => {\n const name = finder.findNext();\n DOM.setCurrentByName(name);\n },\n \n findPrevious: () => {\n const name = finder.findPrevious();\n DOM.setCurrentByName(name);\n },\n});\n\nmodule.exports.selectFile = selectFile;\n\nfunction selectFile(current) {\n const name = DOM.getCurrentName(current);\n \n if (name === '..')\n return;\n \n DOM.selectFile(current);\n}\n\nfunction setCurrent(sibling, {count, isVisual, isDelete}) {\n let current = Info.element;\n const select = isVisual ? selectFile : DOM.unselectFile;\n \n select(current);\n \n const position = `${sibling}Sibling`;\n for (let i = 0; i < count; i++) {\n const next = current[position];\n \n if (!next)\n break;\n \n current = next;\n select(current);\n }\n \n DOM.setCurrentFile(current);\n \n if (isDelete)\n CloudCmd.Operation.show('delete');\n}\n\n","'use strict';\n\nconst fullstore = require('fullstore');\nconst store = fullstore('');\nconst visual = fullstore(false);\n\nconst stopVisual = () => {\n visual(false);\n};\n\nconst end = () => {\n store('');\n};\n\nconst rmFirst = (a) => {\n return a\n .split('')\n .slice(1)\n .join('');\n};\n\nconst noop = () => {};\n\nmodule.exports = (key, operations) => {\n const prevStore = store();\n const isVisual = visual();\n const value = store(prevStore.concat(key));\n const {\n escape = noop,\n moveNext = noop,\n movePrevious = noop,\n remove = noop,\n copy = noop,\n paste = noop,\n select = noop,\n find = noop,\n findNext = noop,\n findPrevious = noop,\n } = operations;\n \n if (key === 'Enter')\n return end();\n \n if (key === 'Escape') {\n visual(false);\n escape();\n return end();\n }\n \n if (key === 'j' || key === 'w') {\n const {\n count,\n isDelete,\n isVisual,\n } = handleDelete(prevStore);\n \n !isNaN(count) && moveNext({\n count,\n isVisual,\n isDelete,\n });\n \n return end();\n }\n \n if (key === 'k' || key === 'b') {\n const {\n count,\n isDelete,\n isVisual,\n } = handleDelete(prevStore);\n \n !isNaN(count) && movePrevious({\n count,\n isVisual,\n isDelete,\n });\n \n return end();\n }\n \n if (value === 'gg' || key === '^') {\n const {\n isDelete,\n isVisual,\n } = handleDelete(prevStore);\n \n movePrevious({\n count: Infinity,\n isVisual,\n isDelete,\n });\n \n return end();\n }\n \n if (key === 'd' && (visual() || prevStore === 'd')) {\n stopVisual();\n remove();\n return end();\n }\n \n if (key === 'G' || key === '$') {\n moveNext({\n count: Infinity,\n isVisual,\n });\n \n return end();\n }\n \n if (key === 'y') {\n if (!visual())\n return end();\n \n stopVisual();\n copy();\n return end();\n }\n \n if (/^p$/i.test(key)) {\n paste();\n return end();\n }\n \n if (/^v$/i.test(key)) {\n visual(!visual());\n select();\n return end();\n }\n \n if (key === '/') {\n find();\n return end();\n }\n \n if (key === 'n') {\n findNext();\n return end();\n }\n \n if (key === 'N') {\n findPrevious();\n return end();\n }\n};\n\nfunction handleDelete(prevStore) {\n const isDelete = prevStore[0] === 'd';\n \n if (isDelete) {\n visual(true);\n prevStore = rmFirst(prevStore);\n }\n \n const count = getNumber(prevStore);\n const isVisual = visual();\n \n return {\n count,\n isDelete,\n isVisual,\n };\n}\n\nfunction getNumber(value) {\n if (!value)\n return 1;\n \n if (value === 'g')\n return 1;\n \n return parseInt(value);\n}\n\n","'use strict';\n\nconst fullstore = require('fullstore');\nconst limier = require('limier');\n\nconst searchStore = fullstore([]);\nconst searchIndex = fullstore(0);\n\nmodule.exports.find = (value, names) => {\n const result = limier(value, names);\n \n searchStore(result);\n searchIndex(0);\n \n return result;\n};\n\nmodule.exports.findNext = () => {\n const names = searchStore();\n const index = next(searchIndex(), names.length);\n \n searchIndex(index);\n return names[searchIndex()];\n};\n\nmodule.exports.findPrevious = () => {\n const names = searchStore();\n const index = previous(searchIndex(), names.length);\n \n searchIndex(index);\n return names[index];\n};\n\nmodule.exports._next = next;\nmodule.exports._previous = previous;\n\nfunction next(index, length) {\n if (index === length - 1)\n return 0;\n \n return ++index;\n}\n\nfunction previous(index, length) {\n if (!index)\n return length - 1;\n \n return --index;\n}\n\n","/* global DOM */\n\n'use strict';\n\nconst Info = DOM.CurrentInfo;\nconst {escapeRegExp} = require('../../common/util');\n\nmodule.exports = function setCurrentByChar(char, charStore) {\n let firstByName;\n let skipCount = 0;\n let setted = false;\n let i = 0;\n \n const escapeChar = escapeRegExp(char);\n const regExp = new RegExp('^' + escapeChar + '.*$', 'i');\n const {files} = Info;\n const chars = charStore();\n const n = chars.length;\n \n while (i < n && char === chars[i])\n i++;\n \n if (!i)\n charStore([]);\n \n const skipN = skipCount = i;\n \n charStore(charStore().concat(char));\n \n const names = DOM.getFilenames(files);\n const isTest = (a) => regExp.test(a);\n const isRoot = (a) => a === '..';\n const not = (f) => (a) => !f(a);\n const setCurrent = (name) => {\n const byName = DOM.getCurrentByName(name);\n \n if (!skipCount) {\n setted = true;\n DOM.setCurrentFile(byName);\n return true;\n }\n \n if (skipN === skipCount)\n firstByName = byName;\n \n --skipCount;\n };\n \n names\n .filter(isTest)\n .filter(not(isRoot))\n .some(setCurrent);\n \n if (!setted) {\n DOM.setCurrentFile(firstByName);\n charStore([char]);\n }\n};\n\n","'use strict';\n\nmodule.exports.createBinder = () => {\n let binded = false;\n \n return {\n isBind() {\n return binded;\n },\n setBind() {\n binded = true;\n },\n unsetBind() {\n binded = false;\n },\n };\n};\n\n","'use strict';\n\n/* global CloudCmd */\n\nconst exec = require('execon');\nconst tryToCatch = require('try-to-catch');\nconst loadJS = require('load.js').js;\n\nconst pascalCase = require('just-pascal-case');\nconst noJS = (a) => a.replace(/.js$/, '');\n\n/**\n * function load modules\n * @params = {name, path, func, dobefore, arg}\n */\nmodule.exports = function loadModule(params) {\n if (!params)\n return;\n \n const {path} = params;\n \n const name = path && noJS(pascalCase(path));\n const doBefore = params.dobefore;\n \n if (CloudCmd[name])\n return;\n \n CloudCmd[name] = () => {\n exec(doBefore);\n const {prefix} = CloudCmd;\n const pathFull = prefix + CloudCmd.DIRCLIENT_MODULES + path + '.js';\n \n return loadJS(pathFull).then(async () => {\n const newModule = async (f) => f && f();\n const module = CloudCmd[name];\n \n Object.assign(newModule, module);\n \n CloudCmd[name] = newModule;\n \n CloudCmd.log('init', name);\n await module.init();\n \n return newModule;\n });\n };\n \n CloudCmd[name].show = async (...args) => {\n CloudCmd.log('show', name, args);\n const m = CloudCmd[name];\n \n const [e, a] = await tryToCatch(m);\n \n if (e)\n return console.error(e);\n \n await a.show(...args);\n };\n};\n\n","/* global DOM, CloudCmd */\n\n'use strict';\n\nconst exec = require('execon');\nconst itype = require('itype');\nconst currify = require('currify');\nconst tryToCatch = require('try-to-catch');\nconst clipboard = require('@cloudcmd/clipboard');\n\nconst getRange = require('./get-range');\nconst getIndex = currify(require('./get-index'));\nconst uploadFiles = require('../dom/upload-files');\n\nconst {FS} = require('../../common/cloudfunc');\n\nconst NBSP_REG = RegExp(String.fromCharCode(160), 'g');\nconst SPACE = ' ';\n\nmodule.exports.init = async () => {\n await Promise.all([\n contextMenu(),\n dragndrop(),\n unload(),\n pop(),\n resize(),\n header(),\n config(),\n ]);\n};\n\nCloudCmd.Listeners = module.exports;\n\nconst unselect = (event) => {\n const isMac = /Mac/.test(window.navigator.platform);\n const {\n shiftKey,\n metaKey,\n ctrlKey,\n } = event;\n \n if (shiftKey || isMac && metaKey || ctrlKey)\n return;\n \n DOM.unselectFiles();\n};\n\nconst execAll = currify((funcs, event) => {\n for (const fn of funcs)\n fn(event);\n});\n\nconst Info = DOM.CurrentInfo;\nconst {Events} = DOM;\nconst EventsFiles = {\n mousedown: exec.with(execIfNotUL, setCurrentFileByEvent),\n click: execAll([\n onClick,\n unselect,\n ]),\n dragstart: exec.with(execIfNotUL, onDragStart),\n dblclick: exec.with(execIfNotUL, onDblClick),\n touchstart: exec.with(execIfNotUL, onTouch),\n};\n\nlet EXT;\n\nfunction header() {\n const fm = DOM.getFM();\n const isDataset = (el) => el.dataset;\n const isPanel = (el) => {\n return /^js-(left|right)$/.test(el.dataset.name);\n };\n \n Events.addClick(fm, (event) => {\n const el = event.target;\n const parent = el.parentElement;\n \n if (parent.dataset.name !== 'js-fm-header')\n return;\n \n const name = (el.dataset.name || '')\n .replace('js-', '');\n \n if (!/^(name|size|date)$/.test(name))\n return;\n \n const panel = getPath(el)\n .filter(isDataset)\n .filter(isPanel)\n .pop();\n \n CloudCmd.sortPanel(name, panel);\n });\n}\n\nfunction getPath(el, path = []) {\n if (!el)\n return path;\n \n return getPath(el.parentElement, path.concat(el));\n}\n\nasync function config() {\n const [, config] = await tryToCatch(DOM.Files.get, 'config');\n const type = config?.packer;\n \n EXT = DOM.getPackerExt(type);\n}\n\nmodule.exports.initKeysPanel = () => {\n const keysElement = DOM.getById('js-keyspanel');\n \n if (!keysElement)\n return;\n \n Events.addClick(keysElement, ({target}) => {\n const {id} = target;\n const operation = (name) => {\n const {Operation} = CloudCmd;\n const fn = Operation.show.bind(null, name);\n \n return fn;\n };\n \n const clickFuncs = {\n 'f1' : CloudCmd.Help.show,\n 'f2' : CloudCmd.UserMenu.show,\n 'f3' : CloudCmd.View.show,\n 'f4' : CloudCmd.EditFile.show,\n 'f5' : operation('copy'),\n 'f6' : operation('move'),\n 'f7' : DOM.promptNewDir,\n 'f8' : operation('delete'),\n 'f9' : CloudCmd.Menu.show,\n 'f10' : CloudCmd.Config.show,\n '~' : CloudCmd.Konsole.show,\n 'shift~' : CloudCmd.Terminal.show,\n 'contact' : CloudCmd.Contact.show,\n };\n \n exec(clickFuncs[id]);\n });\n};\n\nconst getPanel = (side) => {\n if (!itype.string(side))\n return side;\n \n return DOM.getByDataName('js-' + side);\n};\n\nmodule.exports.setOnPanel = (side) => {\n const panel = getPanel(side);\n \n const filesElement = DOM.getByDataName('js-files', panel);\n const pathElement = DOM.getByDataName('js-path', panel);\n \n /* ставим загрузку гифа на клик*/\n Events.addClick(pathElement, getPathListener(panel));\n Events.add(filesElement, EventsFiles);\n};\n\nfunction getPathListener(panel) {\n return onPathElementClick.bind(null, panel);\n}\n\nfunction isNoCurrent(panel) {\n const infoPanel = Info.panel;\n \n if (!infoPanel)\n return true;\n \n const namePanel = panel.getAttribute('data-name');\n const nameInfoPanel = infoPanel.getAttribute('data-name');\n \n return namePanel !== nameInfoPanel;\n}\n\nfunction decodePath(path) {\n const url = CloudCmd.HOST;\n const {prefix} = CloudCmd;\n const prefixReg = RegExp('^' + prefix + FS);\n \n return decodeURI(path)\n .replace(url, '')\n .replace(prefixReg, '')\n // browser doesn't replace % -> %25% do it for him\n .replace('%%', '%25%')\n .replace(NBSP_REG, SPACE) || '/';\n}\n\nasync function onPathElementClick(panel, event) {\n event.preventDefault();\n \n const element = event.target;\n const attr = element.getAttribute('data-name');\n const noCurrent = isNoCurrent(panel);\n \n if (attr === 'js-copy-path')\n return copyPath(element);\n \n if (attr === 'js-refresh')\n return CloudCmd.refresh({\n panel,\n noCurrent,\n });\n \n if (attr !== 'js-path-link')\n return;\n \n const {href} = element;\n const path = decodePath(href);\n \n await CloudCmd.loadDir({\n path,\n isRefresh: false,\n panel: noCurrent ? panel : Info.panel,\n });\n}\n\nfunction copyPath(el) {\n clipboard.writeText(el.parentElement.title)\n .then(CloudCmd.log)\n .catch(CloudCmd.log);\n}\n\nfunction execIfNotUL(callback, event) {\n const {target} = event;\n const {tagName} = target;\n \n if (tagName !== 'UL')\n callback(event);\n}\n\nfunction onClick(event) {\n event.preventDefault();\n changePanel(event.target);\n}\n\nfunction toggleSelect(key, files) {\n const isMac = /Mac/.test(window.navigator.platform);\n \n if (!key)\n throw Error('key should not be undefined!');\n \n const [file] = files;\n \n if (isMac && key.meta || key.ctrl)\n return DOM.toggleSelectedFile(file);\n \n if (key.shift)\n return files.map(DOM.selectFile);\n}\n\nfunction changePanel(element) {\n const {panel} = Info;\n const files = DOM.getByDataName('js-files', panel);\n const ul = getULElement(element);\n \n if (ul !== files)\n DOM.changePanel();\n}\n\nasync function onDblClick(event) {\n event.preventDefault();\n \n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n const path = DOM.getCurrentPath(current);\n \n if (!isDir)\n return CloudCmd.View.show();\n \n await CloudCmd.loadDir({\n path,\n });\n}\n\nasync function onTouch(event) {\n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n \n if (!isDir)\n return;\n \n const isCurrent = DOM.isCurrentFile(current);\n \n if (!isCurrent)\n return;\n \n await CloudCmd.loadDir({\n path: DOM.getCurrentPath(current),\n });\n}\n\n/*\n * download file from browser to desktop\n * in Chrome (HTML5)\n */\nfunction onDragStart(event) {\n const {prefixURL} = CloudCmd;\n const element = getLIElement(event.target);\n const {isDir} = Info;\n let link = DOM.getCurrentLink(element);\n let name = DOM.getCurrentName(element);\n \n /* if it's directory - adding json extension */\n if (isDir) {\n name += EXT;\n link = document.createElement('a');\n link.textContent = name;\n link.href = prefixURL + '/pack' + Info.path + EXT;\n }\n \n event.dataTransfer.setData(\n 'DownloadURL',\n 'application/octet-stream' + ':' +\n name + ':' +\n link,\n );\n}\n\nfunction getLIElement(element) {\n if (!element)\n return element;\n \n while (element.tagName !== 'LI')\n element = element.parentElement;\n \n return element;\n}\n\nfunction getULElement(element) {\n while (element.tagName !== 'UL')\n element = element.parentElement;\n \n return element;\n}\n\nfunction setCurrentFileByEvent(event) {\n const BUTTON_LEFT = 0;\n \n const key = {\n alt: event.altKey,\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey,\n };\n \n const element = getLIElement(event.target);\n \n const fromName = Info.name;\n DOM.setCurrentFile(element);\n const toName = Info.name;\n \n let files = [];\n \n if (key.shift)\n files = getFilesRange(fromName, toName);\n else\n files.push(Info.element);\n \n if (event.button === BUTTON_LEFT)\n toggleSelect(key, files);\n}\n\nfunction getFilesRange(from, to) {\n const files = DOM.getAllFiles();\n const names = DOM.getFilenames(files);\n const getNameIndex = getIndex(names);\n \n const indexFrom = getNameIndex(from);\n const indexTo = getNameIndex(to);\n \n return getRange(indexFrom, indexTo, files);\n}\n\nfunction contextMenu() {\n const fm = DOM.getFM();\n \n Events.addOnce('contextmenu', fm, (event) => {\n CloudCmd.Menu.show({\n x: event.clientX,\n y: event.clientY,\n });\n });\n \n Events.addContextMenu(fm, (event) => {\n CloudCmd.Menu.ENABLED || event.preventDefault();\n });\n}\n\nfunction dragndrop() {\n const panels = DOM.getByClassAll('panel');\n const select = ({target}) => {\n target.classList.add('selected-panel');\n };\n \n const unselect = ({target}) => {\n target.classList.remove('selected-panel');\n };\n \n const onDrop = (event) => {\n const {\n files,\n items,\n } = event.dataTransfer;\n \n const {length: filesCount} = files;\n \n event.preventDefault();\n \n if (filesCount && (!items || !items.length || !items[0].webkitGetAsEntry))\n return uploadFiles(files);\n \n const isFile = (item) => item.kind === 'file';\n const dirFiles = Array.from(items).filter(isFile);\n \n if (dirFiles.length)\n return DOM.uploadDirectory(dirFiles);\n \n const {Operation} = CloudCmd;\n const operation = event.shiftKey ? 'move' : 'copy';\n \n return Operation.show(operation);\n };\n \n /**\n * In Mac OS Chrome dropEffect = 'none'\n * so drop do not firing up when try\n * to upload file from download bar\n */\n const onDragOver = (event) => {\n const {dataTransfer} = event;\n const {effectAllowed} = dataTransfer;\n \n if (/move|linkMove/.test(effectAllowed))\n dataTransfer.dropEffect = 'move';\n else\n dataTransfer.dropEffect = 'copy';\n \n event.preventDefault();\n };\n \n for (const panel of panels)\n Events\n .add('dragover', panel, onDragOver)\n .add('drop', panel, onDrop)\n .add('dragenter', select)\n .add(['dragleave', 'drop'], unselect);\n}\n\nfunction unload() {\n DOM.Events.add(['unload', 'beforeunload'], (event) => {\n const {Key} = CloudCmd;\n const isBind = Key?.isBind();\n \n if (isBind)\n return;\n \n event.preventDefault();\n return 'Please make sure that you saved all work.';\n });\n}\n\nfunction pop() {\n Events.add('popstate', async ({state}) => {\n const path = (state || '').replace(FS, '');\n \n if (!path)\n return CloudCmd.route(location.hash);\n \n const history = false;\n await CloudCmd.loadDir({\n path,\n history,\n });\n });\n}\n\nfunction resize() {\n Events.add('resize', () => {\n const is = window.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH;\n \n if (!is)\n return;\n \n const {panel} = Info;\n const isEmptyRoot = !panel;\n \n if (isEmptyRoot)\n return;\n \n const name = panel.getAttribute('data-name');\n const isLeft = name === 'js-left';\n \n if (isLeft)\n return;\n \n DOM.changePanel();\n });\n}\n\n","'use strict';\n\nmodule.exports = (indexFrom, indexTo, files) => {\n if (indexFrom < indexTo)\n return files.slice(indexFrom, indexTo + 1);\n \n if (indexFrom > indexTo)\n return files.slice(indexTo, indexFrom + 1);\n \n return [files[indexFrom]];\n};\n\n","'use strict';\n\nmodule.exports = (array, item) => {\n const index = array.indexOf(item);\n \n if (!~index)\n return 0;\n \n return index;\n};\n\n","'use strict';\n\n/* global CloudCmd */\nconst DOM = require('./dom');\n\nconst Info = DOM.CurrentInfo;\n\nconst {\n sort,\n order,\n} = CloudCmd;\n\nconst position = DOM.getPanelPosition();\n\nlet sortPrevious = sort[position];\n\nconst {getPanel} = DOM;\n\nCloudCmd.sortPanel = (name, panel = getPanel()) => {\n const position = panel\n .dataset\n .name\n .replace('js-', '');\n \n if (name !== sortPrevious) {\n order[position] = 'asc';\n } else {\n if (order[position] === 'asc')\n order[position] = 'desc';\n else\n order[position] = 'asc';\n }\n \n sortPrevious =\n sort[position] = name;\n \n const noCurrent = position !== Info.panelPosition;\n \n CloudCmd.refresh({\n panel,\n noCurrent,\n });\n};\n\n"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e){function t(t){for(var o,a,c=t[0],s=t[1],l=t[2],f=0,p=[];f<c.length;f++)a=c[f],Object.prototype.hasOwnProperty.call(r,a)&&r[a]&&p.push(r[a][0]),r[a]=0;for(o in s)Object.prototype.hasOwnProperty.call(s,o)&&(e[o]=s[o]);for(u&&u(t);p.length;)p.shift()();return i.push.apply(i,l||[]),n()}function n(){for(var e,t=0;t<i.length;t++){for(var n=i[t],o=!0,c=1;c<n.length;c++){var s=n[c];0!==r[s]&&(o=!1)}o&&(i.splice(t--,1),e=a(a.s=n[0]))}return e}var o={},r={13:0},i=[];function a(t){if(o[t])return o[t].exports;var n=o[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=e,a.c=o,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)a.d(n,o,function(t){return e[t]}.bind(null,o));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/dist/";var c=window.webpackJsonp=window.webpackJsonp||[],s=c.push.bind(c);c.push=t,c=c.slice();for(var l=0;l<c.length;l++)t(c[l]);var u=s;i.push([107,0]),n()}({107:function(e,t,n){"use strict";const o=n(0),r=n(8),{promisify:i}=n(15),a=n(5),c=n(4),s=n(3),{encode:l}=n(17),u=n(108),f=n(109),p=n(112);CloudCmd.Operation=t;const{config:m}=CloudCmd,{Dialog:d,Images:g}=DOM,h=r((function(e,t){const n=r(t),o=r(d.alert);e.on("accept",n(e)),e.on("reject",o("Wrong credentials!")),e.emit("auth",m("username"),m("password"))})),y={};let O,v,C,b,M,D,x;const w=DOM.CurrentInfo,k=g.show.load.bind(null,"top"),P=o((async function(e,t){let n,o,r,i,a,c="",s="",u=[];t?(c=t.from,s=t.to,u=t.names,r=w.panel):(c=w.dirPath,s=DOM.getNotCurrentDirPath(),n=DOM.getSelectedFiles(),u=DOM.getFilenames(n),t={},i=!0,r=w.panelPassive);u.length||u.push(DOM.getCurrentName());const[f]=u,p=DOM.getCurrentByName(f,r);if(!t&&j())return;const{type:g}=e,h="copy"===g,y=h?"confirmCopy":"confirmMove",O=h?"Copy":"Rename/Move",b=h?v:C;if(i&&m(y)){const[e,t]=function(e,t,n){const o=n.length,[r]=n;e+=" ",n.length>1?e+=o+" file(s)":e+='"'+r+'"';return e+=" to",d.prompt(e,t)}(O,s,u.map(l));return void(e||M(t))}function M(e){if(a=c!==e&&e,a&&!i||!p)return r();const n=`"${f}" already exist. Overwrite?`;function r(){k(),o={from:c,to:e,names:u},b(o,async()=>{await DOM.Storage.remove(c);const{panel:e,panelPassive:n}=w;w.isOnePanel||CloudCmd.refresh({panel:n,noCurrent:!0}),CloudCmd.refresh({panel:e},()=>{const e=f||t.names[0];DOM.setCurrentByName(e)})})}d.confirm(n,{cancel:!1}).then(r)}M(s)})),j=()=>{const{length:e}=DOM.getActiveFiles(),t=Boolean(!e);return t?d.alert.noFiles():t};e.exports.init=i(e=>{k(),a.series([DOM.loadSocket,async e=>{if(m("dropbox"))return e();const{prefix:t,prefixSocket:n}=CloudCmd;await async function(){const{prefix:e}=CloudCmd,t=e+"/fileop/fileop.js",[n]=await s(c.js,t);n&&d.alert(n.message);O=!0}(),await async function(e,t,n){t+="/fileop";const o=await fileop({prefix:e,socketPrefix:t});o.on("connect",h(o,F(n)))}(t,n,e)},e=>{O=!0,g.hide(),e()}],e)});const F=o((e,t)=>{!function(e){x=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Tar",callback:n,noContinue:!0,from:o,to:r});e.tar(o,r,i).then(a)},D=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Zip",callback:n,noContinue:!0,from:o,to:r});e.zip(o,r,i).then(a)},b=(t,n,o)=>{t=t.replace(/\?.*/,"");const r=f({operation:"Delete",callback:o,from:t});e.remove(t,n).then(r)},v=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Copy",callback:n,from:o,to:r,names:i});e.copy(o,r,i).then(a)},C=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Move",callback:n,from:o,to:r});e.move(o,r,i).then(a)},M=(t,n)=>{let{from:o,to:r}=t;const i=f({operation:"Extract",callback:n,noContinue:!0,from:o,to:r});e.extract(o,r).then(i)}}(t),e()});function S(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:DOM.getActiveFiles();const t="?files",n=w.dirPath;if(j())return;k();const o=DOM.getFilenames(e),r=DOM.CurrentInfo.files.map(DOM.getCurrentName),i=DOM.getCurrentName(),a=p(i,r,o);b(n+t,o,async()=>{await CloudCmd.refresh();const e=w.files.map(DOM.getCurrentName).includes(i)?i:a;DOM.setCurrentByName(e)})}function N(e,t){let n,o,r=w.name;const{path:i,dirPath:a}=w,c=DOM.getActiveFiles(),s=DOM.getFilenames(c);if(function(e,t){if(!t)throw Error(e+" could not be empty!")}("operation",e),!s.length)return d.alert.noFiles();switch(e){case"extract":n=M,o={from:i,to:a},r=u(r);break;case"pack":n=function(e){return"zip"===e?D:x}(t),s.length>1&&(r=w.dir),r+=DOM.getPackerExt(t),o={from:a,to:a+r,names:s}}k(),n(o,e=>{!e&&CloudCmd.refresh({currentName:r})})}e.exports.hide=()=>{CloudCmd.View.hide()},e.exports.show=(e,t)=>{if(O)return"copy"===e?y.copy(t):"move"===e?y.move(t):"delete"===e?y.delete():"delete:silent"===e?y.deleteSilent():"pack"===e?y.pack():"extract"===e?y.extract():void 0},y.copy=P({type:"copy"}),y.move=P({type:"move"}),y.delete=async function(){if(j())return;const e="Do you really want to delete the ",t=DOM.getActiveFiles(),n=DOM.getFilenames(t),o=n.length;let r;if(o){let t="";for(let e=0;e<5&&e<o;e++)t+="\n"+n[e];o>=5&&(t+="\n..."),r=e+"selected "+o+" files/directories?\n"+l(t)}else{const t=DOM.getCurrentFile(),n=DOM.isCurrentIsDir(t),o=(e=>e?"directory":"file")(n)+" ",i=DOM.getCurrentName(t);r=e+"selected "+o+i+"?"}const[i]=await d.confirm(r);if(i)return;S(t)},y.deleteSilent=S,y.pack=()=>{N("pack","zip"===m("packer")?"zip":"tar")},y.extract=()=>{N("extract")}},108:function(e,t,n){"use strict";const{getExt:o}=n(9);e.exports=e=>{const t=function(e){return/\.tar\.gz$/.test(e)?".tar.gz":/\.tar\.bz2$/.test(e)?".tar.bz2":o(e)}(e);return e.replace(t,"")}},109:function(e,t,n){"use strict";const{Dialog:o,Images:r}=DOM,i=n(110),a=n(8),c=n(111);e.exports=e=>t=>{const{operation:n,callback:s,noContinue:l,from:u,to:f}=e;let p,m;const d=a(e=>{let{emitter:t,operation:n}=e;t.abort();const r=n+" aborted";m=!0,o.alert(r,{cancel:!1})}),g=t.removeListener.bind(t),h=t.on.bind(t),y=c(n,u,f),O=o.progress(y);O.catch(d({emitter:t,operation:n}));const v={progress:e=>{p=100===e,O.setProgress(e)},end:()=>{r.hide(),i(g,v),O.remove(),(m||p)&&s()},error:async e=>{if(m=e,l)return v.end(e),o.alert(e),void O.remove();const[n]=await o.confirm(e+"\n Continue?");if(!p&&!n)return t.continue();t.abort(),O.remove()}};i(h,v)}},111:function(e,t,n){"use strict";e.exports=(e,t,n)=>n?`${e} ${t} -> ${n}`:`${e} ${t}`},112:function(e,t,n){"use strict";const o=n(0),r=o((e,t)=>!e.includes(t)),i=o((e,t)=>e.filter(r(t)));e.exports=(e,t,n)=>{const o=t.indexOf(e),r=i(t,n),{length:a}=r;return r[o]?r[o]:r[a-1]}}});
|
|
1
|
+
!function(e){function t(t){for(var o,a,c=t[0],s=t[1],l=t[2],f=0,p=[];f<c.length;f++)a=c[f],Object.prototype.hasOwnProperty.call(r,a)&&r[a]&&p.push(r[a][0]),r[a]=0;for(o in s)Object.prototype.hasOwnProperty.call(s,o)&&(e[o]=s[o]);for(u&&u(t);p.length;)p.shift()();return i.push.apply(i,l||[]),n()}function n(){for(var e,t=0;t<i.length;t++){for(var n=i[t],o=!0,c=1;c<n.length;c++){var s=n[c];0!==r[s]&&(o=!1)}o&&(i.splice(t--,1),e=a(a.s=n[0]))}return e}var o={},r={13:0},i=[];function a(t){if(o[t])return o[t].exports;var n=o[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=e,a.c=o,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)a.d(n,o,function(t){return e[t]}.bind(null,o));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/dist/";var c=window.webpackJsonp=window.webpackJsonp||[],s=c.push.bind(c);c.push=t,c=c.slice();for(var l=0;l<c.length;l++)t(c[l]);var u=s;i.push([107,0]),n()}({107:function(e,t,n){"use strict";const o=n(0),r=n(8),{promisify:i}=n(15),a=n(5),c=n(4),s=n(3),{encode:l}=n(17),u=n(108),f=n(109),p=n(112);CloudCmd.Operation=t;const{config:m}=CloudCmd,{Dialog:d,Images:g}=DOM,h=r((function(e,t){const n=r(t),o=r(d.alert);e.on("accept",n(e)),e.on("reject",o("Wrong credentials!")),e.emit("auth",m("username"),m("password"))})),y={};let O,v,C,b,M,D,x;const w=DOM.CurrentInfo,k=g.show.load.bind(null,"top"),P=o((async function(e,t){let n,o,r,i,a,c="",s="",u=[];t?(c=t.from,s=t.to,u=t.names,r=w.panel):(c=w.dirPath,s=DOM.getNotCurrentDirPath(),n=DOM.getSelectedFiles(),u=DOM.getFilenames(n),t={},i=!0,r=w.panelPassive);u.length||u.push(DOM.getCurrentName());const[f]=u,p=DOM.getCurrentByName(f,r);if(!t&&j())return;const{type:g}=e,h="copy"===g,y=h?"confirmCopy":"confirmMove",O=h?"Copy":"Rename/Move",b=h?v:C;if(i&&m(y)){const[e,t]=await async function(e,t,n){const o=n.length,[r]=n;e+=" ",n.length>1?e+=o+" file(s)":e+='"'+r+'"';return e+=" to",await d.prompt(e,t)}(O,s,u.map(l));return void(e||M(t))}function M(e){if(a=c!==e&&e,a&&!i||!p)return r();const n=`"${f}" already exist. Overwrite?`;function r(){k(),o={from:c,to:e,names:u},b(o,async()=>{await DOM.Storage.remove(c);const{panel:e,panelPassive:n}=w;w.isOnePanel||CloudCmd.refresh({panel:n,noCurrent:!0}),CloudCmd.refresh({panel:e},()=>{const e=f||t.names[0];DOM.setCurrentByName(e)})})}d.confirm(n,{cancel:!1}).then(r)}M(s)})),j=()=>{const{length:e}=DOM.getActiveFiles(),t=Boolean(!e);return t?d.alert.noFiles():t};e.exports.init=i(e=>{k(),a.series([DOM.loadSocket,async e=>{if(m("dropbox"))return e();const{prefix:t,prefixSocket:n}=CloudCmd;await async function(){const{prefix:e}=CloudCmd,t=e+"/fileop/fileop.js",[n]=await s(c.js,t);n&&d.alert(n.message);O=!0}(),await async function(e,t,n){t+="/fileop";const o=await fileop({prefix:e,socketPrefix:t});o.on("connect",h(o,F(n)))}(t,n,e)},e=>{O=!0,g.hide(),e()}],e)});const F=o((e,t)=>{!function(e){x=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Tar",callback:n,noContinue:!0,from:o,to:r});e.tar(o,r,i).then(a)},D=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Zip",callback:n,noContinue:!0,from:o,to:r});e.zip(o,r,i).then(a)},b=(t,n,o)=>{t=t.replace(/\?.*/,"");const r=f({operation:"Delete",callback:o,from:t});e.remove(t,n).then(r)},v=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Copy",callback:n,from:o,to:r,names:i});e.copy(o,r,i).then(a)},C=(t,n)=>{let{from:o,to:r,names:i}=t;const a=f({operation:"Move",callback:n,from:o,to:r});e.move(o,r,i).then(a)},M=(t,n)=>{let{from:o,to:r}=t;const i=f({operation:"Extract",callback:n,noContinue:!0,from:o,to:r});e.extract(o,r).then(i)}}(t),e()});function S(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:DOM.getActiveFiles();const t="?files",n=w.dirPath;if(j())return;k();const o=DOM.getFilenames(e),r=DOM.CurrentInfo.files.map(DOM.getCurrentName),i=DOM.getCurrentName(),a=p(i,r,o);b(n+t,o,async()=>{await CloudCmd.refresh();const e=w.files.map(DOM.getCurrentName).includes(i)?i:a;DOM.setCurrentByName(e)})}function N(e,t){let n,o,r=w.name;const{path:i,dirPath:a}=w,c=DOM.getActiveFiles(),s=DOM.getFilenames(c);if(function(e,t){if(!t)throw Error(e+" could not be empty!")}("operation",e),!s.length)return d.alert.noFiles();switch(e){case"extract":n=M,o={from:i,to:a},r=u(r);break;case"pack":n=function(e){return"zip"===e?D:x}(t),s.length>1&&(r=w.dir),r+=DOM.getPackerExt(t),o={from:a,to:a+r,names:s}}k(),n(o,e=>{!e&&CloudCmd.refresh({currentName:r})})}e.exports.hide=()=>{CloudCmd.View.hide()},e.exports.show=(e,t)=>{if(O)return"copy"===e?y.copy(t):"move"===e?y.move(t):"delete"===e?y.delete():"delete:silent"===e?y.deleteSilent():"pack"===e?y.pack():"extract"===e?y.extract():void 0},y.copy=P({type:"copy"}),y.move=P({type:"move"}),y.delete=async function(){if(j())return;const e="Do you really want to delete the ",t=DOM.getActiveFiles(),n=DOM.getFilenames(t),o=n.length;let r;if(o){let t="";for(let e=0;e<5&&e<o;e++)t+="\n"+n[e];o>=5&&(t+="\n..."),r=e+"selected "+o+" files/directories?\n"+l(t)}else{const t=DOM.getCurrentFile(),n=DOM.isCurrentIsDir(t),o=(e=>e?"directory":"file")(n)+" ",i=DOM.getCurrentName(t);r=e+"selected "+o+i+"?"}const[i]=await d.confirm(r);if(i)return;S(t)},y.deleteSilent=S,y.pack=()=>{N("pack","zip"===m("packer")?"zip":"tar")},y.extract=()=>{N("extract")}},108:function(e,t,n){"use strict";const{getExt:o}=n(9);e.exports=e=>{const t=function(e){return/\.tar\.gz$/.test(e)?".tar.gz":/\.tar\.bz2$/.test(e)?".tar.bz2":o(e)}(e);return e.replace(t,"")}},109:function(e,t,n){"use strict";const{Dialog:o,Images:r}=DOM,i=n(110),a=n(8),c=n(111);e.exports=e=>t=>{const{operation:n,callback:s,noContinue:l,from:u,to:f}=e;let p,m;const d=a(e=>{let{emitter:t,operation:n}=e;t.abort();const r=n+" aborted";m=!0,o.alert(r,{cancel:!1})}),g=t.removeListener.bind(t),h=t.on.bind(t),y=c(n,u,f),O=o.progress(y);O.catch(d({emitter:t,operation:n}));const v={progress:e=>{p=100===e,O.setProgress(e)},end:()=>{r.hide(),i(g,v),O.remove(),(m||p)&&s()},error:async e=>{if(m=e,l)return v.end(e),o.alert(e),void O.remove();const[n]=await o.confirm(e+"\n Continue?");if(!p&&!n)return t.continue();t.abort(),O.remove()}};i(h,v)}},111:function(e,t,n){"use strict";e.exports=(e,t,n)=>n?`${e} ${t} -> ${n}`:`${e} ${t}`},112:function(e,t,n){"use strict";const o=n(0),r=o((e,t)=>!e.includes(t)),i=o((e,t)=>e.filter(r(t)));e.exports=(e,t,n)=>{const o=t.indexOf(e),r=i(t,n),{length:a}=r;return r[o]?r[o]:r[a-1]}}});
|
|
2
2
|
//# sourceMappingURL=operation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file://cloudcmd/modules/operation.js"],"names":["modules","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","13","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","107","currify","wraptile","promisify","exec","load","tryToCatch","encode","removeExtension","setListeners","getNextCurrentName","CloudCmd","config","Dialog","Images","DOM","authCheck","spawn","ok","accept","alertDialog","alert","on","emit","Operation","Loaded","copyFn","moveFn","deleteFn","extractFn","packZipFn","packTarFn","Info","CurrentInfo","showLoad","show","processFiles","async","options","selFiles","files","panel","shouldAsk","from","to","names","dirPath","getNotCurrentDirPath","getSelectedFiles","getFilenames","panelPassive","getCurrentName","sameName","getCurrentByName","noFilesCheck","type","isCopy","option","title","operation","cancel","newTo","msg","prompt","map","ask","go","str","Storage","remove","isOnePanel","refresh","noCurrent","currentName","setCurrentByName","confirm","then","getActiveFiles","is","Boolean","noFiles","init","callback","series","loadSocket","prefix","prefixSocket","file","error","js","message","loadAll","socketPrefix","fn","operator","fileop","onConnect","initOperations","hide","_ref","listen","noContinue","tar","_ref2","zip","replace","_ref3","copy","_ref4","move","_ref5","extract","setOperations","deleteSilent","arguments","undefined","query","path","removedNames","nextCurrentName","includes","twopack","op","fileFrom","activeFiles","Error","checkEmpty","getPacker","dir","getPackerExt","View","delete","pack","msgAsk","current","getCurrentFile","isDir","isCurrentIsDir","getType","108","getExt","ext","test","getExtension","109","forEachKey","format","emitter","done","lastError","onAbort","abort","removeListener","progress","catch","listeners","setProgress","end","continue","111","112","not","array","notOneOf","a","b","filter","indexOf","nextNames"],"mappings":"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","file":"./modules/operation.js","sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["file://cloudcmd/modules/operation.js"],"names":["modules","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","13","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","107","currify","wraptile","promisify","exec","load","tryToCatch","encode","removeExtension","setListeners","getNextCurrentName","CloudCmd","config","Dialog","Images","DOM","authCheck","spawn","ok","accept","alertDialog","alert","on","emit","Operation","Loaded","copyFn","moveFn","deleteFn","extractFn","packZipFn","packTarFn","Info","CurrentInfo","showLoad","show","processFiles","async","options","selFiles","files","panel","shouldAsk","from","to","names","dirPath","getNotCurrentDirPath","getSelectedFiles","getFilenames","panelPassive","getCurrentName","sameName","getCurrentByName","noFilesCheck","type","isCopy","option","title","operation","cancel","newTo","msg","prompt","map","ask","go","str","Storage","remove","isOnePanel","refresh","noCurrent","currentName","setCurrentByName","confirm","then","getActiveFiles","is","Boolean","noFiles","init","callback","series","loadSocket","prefix","prefixSocket","file","error","js","message","loadAll","socketPrefix","fn","operator","fileop","onConnect","initOperations","hide","_ref","listen","noContinue","tar","_ref2","zip","replace","_ref3","copy","_ref4","move","_ref5","extract","setOperations","deleteSilent","arguments","undefined","query","path","removedNames","nextCurrentName","includes","twopack","op","fileFrom","activeFiles","Error","checkEmpty","getPacker","dir","getPackerExt","View","delete","pack","msgAsk","current","getCurrentFile","isDir","isCurrentIsDir","getType","108","getExt","ext","test","getExtension","109","forEachKey","format","emitter","done","lastError","onAbort","abort","removeListener","progress","catch","listeners","setProgress","end","continue","111","112","not","array","notOneOf","a","b","filter","indexOf","nextNames"],"mappings":"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","file":"./modules/operation.js","sourceRoot":""}
|
package/dist/sw.js
CHANGED
|
@@ -5,5 +5,5 @@ var serviceWorkerOption = {
|
|
|
5
5
|
]
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
!function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/dist/",n(n.s=0)}([function(t,e,n){"use strict";const r=n(1),o=n(2),i=o((t,e)=>e.waitUntil(t())),c=o((t,e)=>{const{request:n}=e,{url:r}=n,o=u(r);/\/$/.test(r)||/\^\/fs/.test(o)||"GET"===n.method&&(t=>"basic"===t.type)(n)&&(/^\/api/.test(o)||/^socket.io/.test(o)||e.respondWith(t(e)))}),u=t=>new URL(t).pathname,a="cloudcmd:
|
|
8
|
+
!function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/dist/",n(n.s=0)}([function(t,e,n){"use strict";const r=n(1),o=n(2),i=o((t,e)=>e.waitUntil(t())),c=o((t,e)=>{const{request:n}=e,{url:r}=n,o=u(r);/\/$/.test(r)||/\^\/fs/.test(o)||"GET"===n.method&&(t=>"basic"===t.type)(n)&&(/^\/api/.test(o)||/^socket.io/.test(o)||e.respondWith(t(e)))}),u=t=>new URL(t).pathname,a="cloudcmd: Sat Dec 04 2021 01:17:25 GMT+0200 (Eastern European Standard Time)",s=(t,e)=>"/"!==t?e:(t=>new Request(t,{credentials:"same-origin"}))("/");self.addEventListener("install",i((async function(){console.info("cloudcmd: sw: install: "+a),await self.skipWaiting()}))),self.addEventListener("fetch",c((async function(t){const{request:e}=t,{url:n}=e,o=u(n),i=s(o,t.request),c=await caches.open(a),f=await c.match(e);if(f)return f;const[l,d]=await r(fetch,i,{credentials:"same-origin"});return l?new Response(l.message):(await async function(t,e){return(await caches.open(a)).put(t,e)}(e,d.clone()),d)}))),self.addEventListener("activate",i((async function(){console.info("cloudcmd: sw: activate: "+a),await self.clients.claim();const t=await caches.keys(),e=caches.delete.bind(caches);await Promise.all(t.map(e))})))},function(t,e,n){"use strict";t.exports=async(t,...e)=>{!function(t){if("function"!=typeof t)throw Error("fn should be a function!")}(t);try{return[null,await t(...e)]}catch(t){return[t]}}},function(t,e,n){"use strict";const r=(t,...e)=>{if(function(t){if("function"!=typeof t)throw Error("fn should be function!")}(t),e.length>=t.length)return t(...e);const n=(...n)=>r(t,...e,...n),o=t.length-e.length-1;return(t=>[function(e){return t(...arguments)},function(e,n){return t(...arguments)},function(e,n,r){return t(...arguments)},function(e,n,r,o){return t(...arguments)},function(e,n,r,o,i){return t(...arguments)}])(n)[o]||n};t.exports=r}]);
|
|
9
9
|
//# sourceMappingURL=sw.js.map
|
package/dist-dev/cloudcmd.js
CHANGED
|
@@ -295,7 +295,7 @@ eval("\n\nmodule.exports = (indexFrom, indexTo, files) => {\n if (indexFrom < i
|
|
|
295
295
|
/***/ (function(module, exports, __webpack_require__) {
|
|
296
296
|
|
|
297
297
|
"use strict";
|
|
298
|
-
eval("/* global DOM, CloudCmd */\n\n\nconst exec = __webpack_require__(/*! execon */ \"./node_modules/execon/lib/exec.js\");\n\nconst itype = __webpack_require__(/*! itype */ \"./node_modules/itype/lib/itype.js\");\n\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n\nconst clipboard = __webpack_require__(/*! @cloudcmd/clipboard */ \"./node_modules/@cloudcmd/clipboard/lib/clipboard.js\");\n\nconst getRange = __webpack_require__(/*! ./get-range */ \"./client/listeners/get-range.js\");\n\nconst getIndex = currify(__webpack_require__(/*! ./get-index */ \"./client/listeners/get-index.js\"));\n\nconst uploadFiles = __webpack_require__(/*! ../dom/upload-files */ \"./client/dom/upload-files.js\");\n\nconst {\n FS\n} = __webpack_require__(/*! ../../common/cloudfunc */ \"./common/cloudfunc.js\");\n\nconst NBSP_REG = RegExp(String.fromCharCode(160), 'g');\nconst SPACE = ' ';\n\nmodule.exports.init = async () => {\n await Promise.all([contextMenu(), dragndrop(), unload(), pop(), resize(), header(), config()]);\n};\n\nCloudCmd.Listeners = module.exports;\n\nconst unselect = event => {\n const isMac = /Mac/.test(window.navigator.platform);\n const {\n shiftKey,\n metaKey,\n ctrlKey\n } = event;\n if (shiftKey || isMac && metaKey || ctrlKey) return;\n DOM.unselectFiles();\n};\n\nconst execAll = currify((funcs, event) => {\n for (const fn of funcs) fn(event);\n});\nconst Info = DOM.CurrentInfo;\nconst {\n Events\n} = DOM;\nconst EventsFiles = {\n mousedown: exec.with(execIfNotUL, setCurrentFileByEvent),\n click: execAll([onClick, unselect]),\n dragstart: exec.with(execIfNotUL, onDragStart),\n dblclick: exec.with(execIfNotUL, onDblClick),\n touchstart: exec.with(execIfNotUL, onTouch)\n};\nlet EXT;\n\nfunction header() {\n const fm = DOM.getFM();\n\n const isDataset = el => el.dataset;\n\n const isPanel = el => {\n return /^js-(left|right)$/.test(el.dataset.name);\n };\n\n Events.addClick(fm, event => {\n const el = event.target;\n const parent = el.parentElement;\n if (parent.dataset.name !== 'js-fm-header') return;\n const name = (el.dataset.name || '').replace('js-', '');\n if (!/^(name|size|date)$/.test(name)) return;\n const panel = getPath(el).filter(isDataset).filter(isPanel).pop();\n CloudCmd.sortPanel(name, panel);\n });\n}\n\nfunction getPath(el) {\n let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n if (!el) return path;\n return getPath(el.parentElement, path.concat(el));\n}\n\nasync function config() {\n const [, config] = await tryToCatch(DOM.Files.get, 'config');\n const type = config === null || config === void 0 ? void 0 : config.packer;\n EXT = DOM.getPackerExt(type);\n}\n\nmodule.exports.initKeysPanel = () => {\n const keysElement = DOM.getById('js-keyspanel');\n if (!keysElement) return;\n Events.addClick(keysElement, _ref => {\n let {\n target\n } = _ref;\n const {\n id\n } = target;\n\n const operation = name => {\n const {\n Operation\n } = CloudCmd;\n const fn = Operation.show.bind(null, name);\n return fn;\n };\n\n const clickFuncs = {\n 'f1': CloudCmd.Help.show,\n 'f2': initF2,\n 'f3': CloudCmd.View.show,\n 'f4': CloudCmd.EditFile.show,\n 'f5': operation('copy'),\n 'f6': operation('move'),\n 'f7': DOM.promptNewDir,\n 'f8': operation('delete'),\n 'f9': CloudCmd.Menu.show,\n 'f10': CloudCmd.Config.show,\n '~': CloudCmd.Konsole.show,\n 'shift~': CloudCmd.Terminal.show,\n 'contact': CloudCmd.Contact.show\n };\n exec(clickFuncs[id]);\n });\n};\n\nfunction initF2() {\n CloudCmd.UserMenu.show();\n}\n\nconst getPanel = side => {\n if (!itype.string(side)) return side;\n return DOM.getByDataName('js-' + side);\n};\n\nmodule.exports.setOnPanel = side => {\n const panel = getPanel(side);\n const filesElement = DOM.getByDataName('js-files', panel);\n const pathElement = DOM.getByDataName('js-path', panel);\n /* ставим загрузку гифа на клик*/\n\n Events.addClick(pathElement, getPathListener(panel));\n Events.add(filesElement, EventsFiles);\n};\n\nfunction getPathListener(panel) {\n return onPathElementClick.bind(null, panel);\n}\n\nfunction isNoCurrent(panel) {\n const infoPanel = Info.panel;\n if (!infoPanel) return true;\n const namePanel = panel.getAttribute('data-name');\n const nameInfoPanel = infoPanel.getAttribute('data-name');\n return namePanel !== nameInfoPanel;\n}\n\nfunction decodePath(path) {\n const url = CloudCmd.HOST;\n const {\n prefix\n } = CloudCmd;\n const prefixReg = RegExp('^' + prefix + FS);\n return decodeURI(path).replace(url, '').replace(prefixReg, '') // browser doesn't replace % -> %25% do it for him\n .replace('%%', '%25%').replace(NBSP_REG, SPACE) || '/';\n}\n\nasync function onPathElementClick(panel, event) {\n event.preventDefault();\n const element = event.target;\n const attr = element.getAttribute('data-name');\n const noCurrent = isNoCurrent(panel);\n if (attr === 'js-copy-path') return copyPath(element);\n if (attr === 'js-refresh') return CloudCmd.refresh({\n panel,\n noCurrent\n });\n if (attr !== 'js-path-link') return;\n const {\n href\n } = element;\n const path = decodePath(href);\n await CloudCmd.loadDir({\n path,\n isRefresh: false,\n panel: noCurrent ? panel : Info.panel\n });\n}\n\nfunction copyPath(el) {\n clipboard.writeText(el.parentElement.title).then(CloudCmd.log).catch(CloudCmd.log);\n}\n\nfunction execIfNotUL(callback, event) {\n const {\n target\n } = event;\n const {\n tagName\n } = target;\n if (tagName !== 'UL') callback(event);\n}\n\nfunction onClick(event) {\n event.preventDefault();\n changePanel(event.target);\n}\n\nfunction toggleSelect(key, files) {\n const isMac = /Mac/.test(window.navigator.platform);\n if (!key) throw Error('key should not be undefined!');\n const [file] = files;\n if (isMac && key.meta || key.ctrl) return DOM.toggleSelectedFile(file);\n if (key.shift) return files.map(DOM.selectFile);\n}\n\nfunction changePanel(element) {\n const {\n panel\n } = Info;\n const files = DOM.getByDataName('js-files', panel);\n const ul = getULElement(element);\n if (ul !== files) DOM.changePanel();\n}\n\nasync function onDblClick(event) {\n event.preventDefault();\n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n const path = DOM.getCurrentPath(current);\n if (!isDir) return CloudCmd.View.show();\n await CloudCmd.loadDir({\n path\n });\n}\n\nasync function onTouch(event) {\n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n if (!isDir) return;\n const isCurrent = DOM.isCurrentFile(current);\n if (!isCurrent) return;\n await CloudCmd.loadDir({\n path: DOM.getCurrentPath(current)\n });\n}\n/*\n * download file from browser to desktop\n * in Chrome (HTML5)\n */\n\n\nfunction onDragStart(event) {\n const {\n prefixURL\n } = CloudCmd;\n const element = getLIElement(event.target);\n const {\n isDir\n } = Info;\n let link = DOM.getCurrentLink(element);\n let name = DOM.getCurrentName(element);\n /* if it's directory - adding json extension */\n\n if (isDir) {\n name += EXT;\n link = document.createElement('a');\n link.textContent = name;\n link.href = prefixURL + '/pack' + Info.path + EXT;\n }\n\n event.dataTransfer.setData('DownloadURL', 'application/octet-stream' + ':' + name + ':' + link);\n}\n\nfunction getLIElement(element) {\n if (!element) return element;\n\n while (element.tagName !== 'LI') element = element.parentElement;\n\n return element;\n}\n\nfunction getULElement(element) {\n while (element.tagName !== 'UL') element = element.parentElement;\n\n return element;\n}\n\nfunction setCurrentFileByEvent(event) {\n const BUTTON_LEFT = 0;\n const key = {\n alt: event.altKey,\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey\n };\n const element = getLIElement(event.target);\n const fromName = Info.name;\n DOM.setCurrentFile(element);\n const toName = Info.name;\n let files = [];\n if (key.shift) files = getFilesRange(fromName, toName);else files.push(Info.element);\n if (event.button === BUTTON_LEFT) toggleSelect(key, files);\n}\n\nfunction getFilesRange(from, to) {\n const files = DOM.getAllFiles();\n const names = DOM.getFilenames(files);\n const getNameIndex = getIndex(names);\n const indexFrom = getNameIndex(from);\n const indexTo = getNameIndex(to);\n return getRange(indexFrom, indexTo, files);\n}\n\nfunction contextMenu() {\n const fm = DOM.getFM();\n Events.addOnce('contextmenu', fm, event => {\n CloudCmd.Menu.show({\n x: event.clientX,\n y: event.clientY\n });\n });\n Events.addContextMenu(fm, event => {\n CloudCmd.Menu.ENABLED || event.preventDefault();\n });\n}\n\nfunction dragndrop() {\n const panels = DOM.getByClassAll('panel');\n\n const select = _ref2 => {\n let {\n target\n } = _ref2;\n target.classList.add('selected-panel');\n };\n\n const unselect = _ref3 => {\n let {\n target\n } = _ref3;\n target.classList.remove('selected-panel');\n };\n\n const onDrop = event => {\n const {\n files,\n items\n } = event.dataTransfer;\n const {\n length: filesCount\n } = files;\n event.preventDefault();\n if (filesCount && (!items || !items.length || !items[0].webkitGetAsEntry)) return uploadFiles(files);\n\n const isFile = item => item.kind === 'file';\n\n const dirFiles = Array.from(items).filter(isFile);\n if (dirFiles.length) return DOM.uploadDirectory(dirFiles);\n const {\n Operation\n } = CloudCmd;\n const operation = event.shiftKey ? 'move' : 'copy';\n return Operation.show(operation);\n };\n /**\n * In Mac OS Chrome dropEffect = 'none'\n * so drop do not firing up when try\n * to upload file from download bar\n */\n\n\n const onDragOver = event => {\n const {\n dataTransfer\n } = event;\n const {\n effectAllowed\n } = dataTransfer;\n if (/move|linkMove/.test(effectAllowed)) dataTransfer.dropEffect = 'move';else dataTransfer.dropEffect = 'copy';\n event.preventDefault();\n };\n\n for (const panel of panels) Events.add('dragover', panel, onDragOver).add('drop', panel, onDrop).add('dragenter', select).add(['dragleave', 'drop'], unselect);\n}\n\nfunction unload() {\n DOM.Events.add(['unload', 'beforeunload'], event => {\n const {\n Key\n } = CloudCmd;\n const isBind = Key === null || Key === void 0 ? void 0 : Key.isBind();\n if (isBind) return;\n event.preventDefault();\n return 'Please make sure that you saved all work.';\n });\n}\n\nfunction pop() {\n Events.add('popstate', async _ref4 => {\n let {\n state\n } = _ref4;\n const path = (state || '').replace(FS, '');\n if (!path) return CloudCmd.route(location.hash);\n const history = false;\n await CloudCmd.loadDir({\n path,\n history\n });\n });\n}\n\nfunction resize() {\n Events.add('resize', () => {\n const is = window.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH;\n if (!is) return;\n const {\n panel\n } = Info;\n const isEmptyRoot = !panel;\n if (isEmptyRoot) return;\n const name = panel.getAttribute('data-name');\n const isLeft = name === 'js-left';\n if (isLeft) return;\n DOM.changePanel();\n });\n}\n\n//# sourceURL=file://cloudcmd/client/listeners/index.js");
|
|
298
|
+
eval("/* global DOM, CloudCmd */\n\n\nconst exec = __webpack_require__(/*! execon */ \"./node_modules/execon/lib/exec.js\");\n\nconst itype = __webpack_require__(/*! itype */ \"./node_modules/itype/lib/itype.js\");\n\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n\nconst clipboard = __webpack_require__(/*! @cloudcmd/clipboard */ \"./node_modules/@cloudcmd/clipboard/lib/clipboard.js\");\n\nconst getRange = __webpack_require__(/*! ./get-range */ \"./client/listeners/get-range.js\");\n\nconst getIndex = currify(__webpack_require__(/*! ./get-index */ \"./client/listeners/get-index.js\"));\n\nconst uploadFiles = __webpack_require__(/*! ../dom/upload-files */ \"./client/dom/upload-files.js\");\n\nconst {\n FS\n} = __webpack_require__(/*! ../../common/cloudfunc */ \"./common/cloudfunc.js\");\n\nconst NBSP_REG = RegExp(String.fromCharCode(160), 'g');\nconst SPACE = ' ';\n\nmodule.exports.init = async () => {\n await Promise.all([contextMenu(), dragndrop(), unload(), pop(), resize(), header(), config()]);\n};\n\nCloudCmd.Listeners = module.exports;\n\nconst unselect = event => {\n const isMac = /Mac/.test(window.navigator.platform);\n const {\n shiftKey,\n metaKey,\n ctrlKey\n } = event;\n if (shiftKey || isMac && metaKey || ctrlKey) return;\n DOM.unselectFiles();\n};\n\nconst execAll = currify((funcs, event) => {\n for (const fn of funcs) fn(event);\n});\nconst Info = DOM.CurrentInfo;\nconst {\n Events\n} = DOM;\nconst EventsFiles = {\n mousedown: exec.with(execIfNotUL, setCurrentFileByEvent),\n click: execAll([onClick, unselect]),\n dragstart: exec.with(execIfNotUL, onDragStart),\n dblclick: exec.with(execIfNotUL, onDblClick),\n touchstart: exec.with(execIfNotUL, onTouch)\n};\nlet EXT;\n\nfunction header() {\n const fm = DOM.getFM();\n\n const isDataset = el => el.dataset;\n\n const isPanel = el => {\n return /^js-(left|right)$/.test(el.dataset.name);\n };\n\n Events.addClick(fm, event => {\n const el = event.target;\n const parent = el.parentElement;\n if (parent.dataset.name !== 'js-fm-header') return;\n const name = (el.dataset.name || '').replace('js-', '');\n if (!/^(name|size|date)$/.test(name)) return;\n const panel = getPath(el).filter(isDataset).filter(isPanel).pop();\n CloudCmd.sortPanel(name, panel);\n });\n}\n\nfunction getPath(el) {\n let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n if (!el) return path;\n return getPath(el.parentElement, path.concat(el));\n}\n\nasync function config() {\n const [, config] = await tryToCatch(DOM.Files.get, 'config');\n const type = config === null || config === void 0 ? void 0 : config.packer;\n EXT = DOM.getPackerExt(type);\n}\n\nmodule.exports.initKeysPanel = () => {\n const keysElement = DOM.getById('js-keyspanel');\n if (!keysElement) return;\n Events.addClick(keysElement, _ref => {\n let {\n target\n } = _ref;\n const {\n id\n } = target;\n\n const operation = name => {\n const {\n Operation\n } = CloudCmd;\n const fn = Operation.show.bind(null, name);\n return fn;\n };\n\n const clickFuncs = {\n 'f1': CloudCmd.Help.show,\n 'f2': CloudCmd.UserMenu.show,\n 'f3': CloudCmd.View.show,\n 'f4': CloudCmd.EditFile.show,\n 'f5': operation('copy'),\n 'f6': operation('move'),\n 'f7': DOM.promptNewDir,\n 'f8': operation('delete'),\n 'f9': CloudCmd.Menu.show,\n 'f10': CloudCmd.Config.show,\n '~': CloudCmd.Konsole.show,\n 'shift~': CloudCmd.Terminal.show,\n 'contact': CloudCmd.Contact.show\n };\n exec(clickFuncs[id]);\n });\n};\n\nconst getPanel = side => {\n if (!itype.string(side)) return side;\n return DOM.getByDataName('js-' + side);\n};\n\nmodule.exports.setOnPanel = side => {\n const panel = getPanel(side);\n const filesElement = DOM.getByDataName('js-files', panel);\n const pathElement = DOM.getByDataName('js-path', panel);\n /* ставим загрузку гифа на клик*/\n\n Events.addClick(pathElement, getPathListener(panel));\n Events.add(filesElement, EventsFiles);\n};\n\nfunction getPathListener(panel) {\n return onPathElementClick.bind(null, panel);\n}\n\nfunction isNoCurrent(panel) {\n const infoPanel = Info.panel;\n if (!infoPanel) return true;\n const namePanel = panel.getAttribute('data-name');\n const nameInfoPanel = infoPanel.getAttribute('data-name');\n return namePanel !== nameInfoPanel;\n}\n\nfunction decodePath(path) {\n const url = CloudCmd.HOST;\n const {\n prefix\n } = CloudCmd;\n const prefixReg = RegExp('^' + prefix + FS);\n return decodeURI(path).replace(url, '').replace(prefixReg, '') // browser doesn't replace % -> %25% do it for him\n .replace('%%', '%25%').replace(NBSP_REG, SPACE) || '/';\n}\n\nasync function onPathElementClick(panel, event) {\n event.preventDefault();\n const element = event.target;\n const attr = element.getAttribute('data-name');\n const noCurrent = isNoCurrent(panel);\n if (attr === 'js-copy-path') return copyPath(element);\n if (attr === 'js-refresh') return CloudCmd.refresh({\n panel,\n noCurrent\n });\n if (attr !== 'js-path-link') return;\n const {\n href\n } = element;\n const path = decodePath(href);\n await CloudCmd.loadDir({\n path,\n isRefresh: false,\n panel: noCurrent ? panel : Info.panel\n });\n}\n\nfunction copyPath(el) {\n clipboard.writeText(el.parentElement.title).then(CloudCmd.log).catch(CloudCmd.log);\n}\n\nfunction execIfNotUL(callback, event) {\n const {\n target\n } = event;\n const {\n tagName\n } = target;\n if (tagName !== 'UL') callback(event);\n}\n\nfunction onClick(event) {\n event.preventDefault();\n changePanel(event.target);\n}\n\nfunction toggleSelect(key, files) {\n const isMac = /Mac/.test(window.navigator.platform);\n if (!key) throw Error('key should not be undefined!');\n const [file] = files;\n if (isMac && key.meta || key.ctrl) return DOM.toggleSelectedFile(file);\n if (key.shift) return files.map(DOM.selectFile);\n}\n\nfunction changePanel(element) {\n const {\n panel\n } = Info;\n const files = DOM.getByDataName('js-files', panel);\n const ul = getULElement(element);\n if (ul !== files) DOM.changePanel();\n}\n\nasync function onDblClick(event) {\n event.preventDefault();\n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n const path = DOM.getCurrentPath(current);\n if (!isDir) return CloudCmd.View.show();\n await CloudCmd.loadDir({\n path\n });\n}\n\nasync function onTouch(event) {\n const current = getLIElement(event.target);\n const isDir = DOM.isCurrentIsDir(current);\n if (!isDir) return;\n const isCurrent = DOM.isCurrentFile(current);\n if (!isCurrent) return;\n await CloudCmd.loadDir({\n path: DOM.getCurrentPath(current)\n });\n}\n/*\n * download file from browser to desktop\n * in Chrome (HTML5)\n */\n\n\nfunction onDragStart(event) {\n const {\n prefixURL\n } = CloudCmd;\n const element = getLIElement(event.target);\n const {\n isDir\n } = Info;\n let link = DOM.getCurrentLink(element);\n let name = DOM.getCurrentName(element);\n /* if it's directory - adding json extension */\n\n if (isDir) {\n name += EXT;\n link = document.createElement('a');\n link.textContent = name;\n link.href = prefixURL + '/pack' + Info.path + EXT;\n }\n\n event.dataTransfer.setData('DownloadURL', 'application/octet-stream' + ':' + name + ':' + link);\n}\n\nfunction getLIElement(element) {\n if (!element) return element;\n\n while (element.tagName !== 'LI') element = element.parentElement;\n\n return element;\n}\n\nfunction getULElement(element) {\n while (element.tagName !== 'UL') element = element.parentElement;\n\n return element;\n}\n\nfunction setCurrentFileByEvent(event) {\n const BUTTON_LEFT = 0;\n const key = {\n alt: event.altKey,\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey\n };\n const element = getLIElement(event.target);\n const fromName = Info.name;\n DOM.setCurrentFile(element);\n const toName = Info.name;\n let files = [];\n if (key.shift) files = getFilesRange(fromName, toName);else files.push(Info.element);\n if (event.button === BUTTON_LEFT) toggleSelect(key, files);\n}\n\nfunction getFilesRange(from, to) {\n const files = DOM.getAllFiles();\n const names = DOM.getFilenames(files);\n const getNameIndex = getIndex(names);\n const indexFrom = getNameIndex(from);\n const indexTo = getNameIndex(to);\n return getRange(indexFrom, indexTo, files);\n}\n\nfunction contextMenu() {\n const fm = DOM.getFM();\n Events.addOnce('contextmenu', fm, event => {\n CloudCmd.Menu.show({\n x: event.clientX,\n y: event.clientY\n });\n });\n Events.addContextMenu(fm, event => {\n CloudCmd.Menu.ENABLED || event.preventDefault();\n });\n}\n\nfunction dragndrop() {\n const panels = DOM.getByClassAll('panel');\n\n const select = _ref2 => {\n let {\n target\n } = _ref2;\n target.classList.add('selected-panel');\n };\n\n const unselect = _ref3 => {\n let {\n target\n } = _ref3;\n target.classList.remove('selected-panel');\n };\n\n const onDrop = event => {\n const {\n files,\n items\n } = event.dataTransfer;\n const {\n length: filesCount\n } = files;\n event.preventDefault();\n if (filesCount && (!items || !items.length || !items[0].webkitGetAsEntry)) return uploadFiles(files);\n\n const isFile = item => item.kind === 'file';\n\n const dirFiles = Array.from(items).filter(isFile);\n if (dirFiles.length) return DOM.uploadDirectory(dirFiles);\n const {\n Operation\n } = CloudCmd;\n const operation = event.shiftKey ? 'move' : 'copy';\n return Operation.show(operation);\n };\n /**\n * In Mac OS Chrome dropEffect = 'none'\n * so drop do not firing up when try\n * to upload file from download bar\n */\n\n\n const onDragOver = event => {\n const {\n dataTransfer\n } = event;\n const {\n effectAllowed\n } = dataTransfer;\n if (/move|linkMove/.test(effectAllowed)) dataTransfer.dropEffect = 'move';else dataTransfer.dropEffect = 'copy';\n event.preventDefault();\n };\n\n for (const panel of panels) Events.add('dragover', panel, onDragOver).add('drop', panel, onDrop).add('dragenter', select).add(['dragleave', 'drop'], unselect);\n}\n\nfunction unload() {\n DOM.Events.add(['unload', 'beforeunload'], event => {\n const {\n Key\n } = CloudCmd;\n const isBind = Key === null || Key === void 0 ? void 0 : Key.isBind();\n if (isBind) return;\n event.preventDefault();\n return 'Please make sure that you saved all work.';\n });\n}\n\nfunction pop() {\n Events.add('popstate', async _ref4 => {\n let {\n state\n } = _ref4;\n const path = (state || '').replace(FS, '');\n if (!path) return CloudCmd.route(location.hash);\n const history = false;\n await CloudCmd.loadDir({\n path,\n history\n });\n });\n}\n\nfunction resize() {\n Events.add('resize', () => {\n const is = window.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH;\n if (!is) return;\n const {\n panel\n } = Info;\n const isEmptyRoot = !panel;\n if (isEmptyRoot) return;\n const name = panel.getAttribute('data-name');\n const isLeft = name === 'js-left';\n if (isLeft) return;\n DOM.changePanel();\n });\n}\n\n//# sourceURL=file://cloudcmd/client/listeners/index.js");
|
|
299
299
|
|
|
300
300
|
/***/ }),
|
|
301
301
|
|
|
@@ -187,7 +187,7 @@ eval("\n\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/cu
|
|
|
187
187
|
/***/ (function(module, exports, __webpack_require__) {
|
|
188
188
|
|
|
189
189
|
"use strict";
|
|
190
|
-
eval("/* global CloudCmd */\n\n/* global Util */\n\n/* global DOM */\n\n/* global fileop */\n\n\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\nconst wraptile = __webpack_require__(/*! wraptile */ \"./node_modules/wraptile/lib/wraptile.js\");\n\nconst {\n promisify\n} = __webpack_require__(/*! es6-promisify */ \"./node_modules/es6-promisify/dist/promisify.mjs\");\n\nconst exec = __webpack_require__(/*! execon */ \"./node_modules/execon/lib/exec.js\");\n\nconst load = __webpack_require__(/*! load.js */ \"./node_modules/load.js/lib/load.js\");\n\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n\nconst {\n encode\n} = __webpack_require__(/*! ../../../common/entity */ \"./common/entity.js\");\n\nconst removeExtension = __webpack_require__(/*! ./remove-extension */ \"./client/modules/operation/remove-extension.js\");\n\nconst setListeners = __webpack_require__(/*! ./set-listeners */ \"./client/modules/operation/set-listeners.js\");\n\nconst getNextCurrentName = __webpack_require__(/*! ./get-next-current-name */ \"./client/modules/operation/get-next-current-name.js\");\n\nconst removeQuery = a => a.replace(/\\?.*/, '');\n\nconst Name = 'Operation';\nCloudCmd[Name] = exports;\nconst {\n config\n} = CloudCmd;\nconst {\n Dialog,\n Images\n} = DOM;\nconst authCheck = wraptile(_authCheck);\nconst Operation = {};\nlet Loaded;\nlet copyFn;\nlet moveFn;\nlet deleteFn;\nlet extractFn;\nlet packZipFn;\nlet packTarFn;\nconst Info = DOM.CurrentInfo;\nconst showLoad = Images.show.load.bind(null, 'top');\nconst processFiles = currify(_processFiles);\n\nconst noFilesCheck = () => {\n const {\n length\n } = DOM.getActiveFiles();\n const is = Boolean(!length);\n if (is) return Dialog.alert.noFiles();\n return is;\n};\n\nmodule.exports.init = promisify(callback => {\n showLoad();\n exec.series([DOM.loadSocket, async callback => {\n if (config('dropbox')) return callback();\n const {\n prefix,\n prefixSocket\n } = CloudCmd;\n await loadAll();\n await initOperations(prefix, prefixSocket, callback);\n }, callback => {\n Loaded = true;\n Images.hide();\n callback();\n }], callback);\n});\n\nfunction _authCheck(spawn, ok) {\n const accept = wraptile(ok);\n const alertDialog = wraptile(Dialog.alert);\n spawn.on('accept', accept(spawn));\n spawn.on('reject', alertDialog('Wrong credentials!'));\n spawn.emit('auth', config('username'), config('password'));\n}\n\nconst onConnect = currify((fn, operator) => {\n setOperations(operator);\n fn();\n});\n\nasync function initOperations(prefix, socketPrefix, fn) {\n socketPrefix = `${socketPrefix}/fileop`;\n const operator = await fileop({\n prefix,\n socketPrefix\n });\n operator.on('connect', authCheck(operator, onConnect(fn)));\n}\n\nfunction setOperations(operator) {\n packTarFn = (_ref, callback) => {\n let {\n from,\n to,\n names\n } = _ref;\n const operation = 'Tar';\n const listen = setListeners({\n operation,\n callback,\n noContinue: true,\n from,\n to\n });\n operator.tar(from, to, names).then(listen);\n };\n\n packZipFn = (_ref2, callback) => {\n let {\n from,\n to,\n names\n } = _ref2;\n const operation = 'Zip';\n const listen = setListeners({\n operation,\n callback,\n noContinue: true,\n from,\n to\n });\n operator.zip(from, to, names).then(listen);\n };\n\n deleteFn = (from, files, callback) => {\n from = removeQuery(from);\n const operation = 'Delete';\n const listen = setListeners({\n operation,\n callback,\n from\n });\n operator.remove(from, files).then(listen);\n };\n\n copyFn = (_ref3, callback) => {\n let {\n from,\n to,\n names\n } = _ref3;\n const operation = 'Copy';\n const listen = setListeners({\n operation,\n callback,\n from,\n to,\n names\n });\n operator.copy(from, to, names).then(listen);\n };\n\n moveFn = (_ref4, callback) => {\n let {\n from,\n to,\n names\n } = _ref4;\n const operation = 'Move';\n const listen = setListeners({\n operation,\n callback,\n from,\n to\n });\n operator.move(from, to, names).then(listen);\n };\n\n extractFn = (_ref5, callback) => {\n let {\n from,\n to\n } = _ref5;\n const operation = 'Extract';\n const listen = setListeners({\n operation,\n callback,\n noContinue: true,\n from,\n to\n });\n operator.extract(from, to).then(listen);\n };\n}\n\nfunction getPacker(type) {\n if (type === 'zip') return packZipFn;\n return packTarFn;\n}\n\nmodule.exports.hide = () => {\n CloudCmd.View.hide();\n};\n\nmodule.exports.show = (operation, data) => {\n if (!Loaded) return;\n if (operation === 'copy') return Operation.copy(data);\n if (operation === 'move') return Operation.move(data);\n if (operation === 'delete') return Operation.delete();\n if (operation === 'delete:silent') return Operation.deleteSilent();\n if (operation === 'pack') return Operation.pack();\n if (operation === 'extract') return Operation.extract();\n};\n\nOperation.copy = processFiles({\n type: 'copy'\n});\nOperation.move = processFiles({\n type: 'move'\n});\nOperation.delete = promptDelete;\nOperation.deleteSilent = deleteSilent;\n\nOperation.pack = () => {\n const isZip = config('packer') === 'zip';\n twopack('pack', isZip ? 'zip' : 'tar');\n};\n\nOperation.extract = () => {\n twopack('extract');\n};\n/**\n * prompt and delete current file or selected files\n *\n * @currentFile\n */\n\n\nasync function promptDelete() {\n if (noFilesCheck()) return;\n const msgAsk = 'Do you really want to delete the ';\n const msgSel = 'selected ';\n const files = DOM.getActiveFiles();\n const names = DOM.getFilenames(files);\n const n = names.length;\n let msg;\n\n if (n) {\n let name = '';\n\n for (let i = 0; i < 5 && i < n; i++) name += '\\n' + names[i];\n\n if (n >= 5) name += '\\n...';\n msg = msgAsk + msgSel + n + ' files/directories?\\n' + encode(name);\n } else {\n const current = DOM.getCurrentFile();\n const isDir = DOM.isCurrentIsDir(current);\n\n const getType = isDir => isDir ? 'directory' : 'file';\n\n const type = getType(isDir) + ' ';\n const name = DOM.getCurrentName(current);\n msg = msgAsk + msgSel + type + name + '?';\n }\n\n const [cancel] = await Dialog.confirm(msg);\n if (cancel) return;\n deleteSilent(files);\n}\n/**\n * delete current or selected files\n *\n * @files\n */\n\n\nfunction deleteSilent() {\n let files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DOM.getActiveFiles();\n const query = '?files';\n const path = Info.dirPath;\n if (noFilesCheck()) return;\n showLoad();\n const removedNames = DOM.getFilenames(files);\n const names = DOM.CurrentInfo.files.map(DOM.getCurrentName);\n const currentName = DOM.getCurrentName();\n const nextCurrentName = getNextCurrentName(currentName, names, removedNames);\n deleteFn(path + query, removedNames, async () => {\n await CloudCmd.refresh();\n const names = Info.files.map(DOM.getCurrentName);\n const isCurrent = names.includes(currentName);\n const name = isCurrent ? currentName : nextCurrentName;\n DOM.setCurrentByName(name);\n });\n}\n/*\n * process files (copy or move)\n * @param data\n * @param operation\n */\n\n\nasync function _processFiles(options, data) {\n let selFiles;\n let files;\n let panel;\n let shouldAsk;\n let ok;\n let from = '';\n let to = '';\n let names = [];\n /* eslint no-multi-spaces: 0 */\n\n if (data) {\n from = data.from;\n to = data.to;\n names = data.names;\n panel = Info.panel;\n } else {\n from = Info.dirPath;\n to = DOM.getNotCurrentDirPath();\n selFiles = DOM.getSelectedFiles();\n names = DOM.getFilenames(selFiles);\n data = {};\n shouldAsk = true;\n panel = Info.panelPassive;\n }\n\n if (!names.length) names.push(DOM.getCurrentName());\n const [name] = names;\n const sameName = DOM.getCurrentByName(name, panel);\n if (!data && noFilesCheck()) return;\n const {\n type\n } = options;\n const isCopy = type === 'copy';\n const option = isCopy ? 'confirmCopy' : 'confirmMove';\n const title = isCopy ? 'Copy' : 'Rename/Move';\n const operation = isCopy ? copyFn : moveFn;\n\n if (shouldAsk && config(option)) {\n const [cancel, newTo] = prompt(title, to, names.map(encode));\n if (!cancel) ask(newTo);\n return;\n }\n\n ask(to);\n\n function ask(to) {\n ok = from !== to && to;\n if (ok && !shouldAsk || !sameName) return go();\n const str = `\"${name}\" already exist. Overwrite?`;\n const cancel = false;\n Dialog.confirm(str, {\n cancel\n }).then(go);\n\n function go() {\n showLoad();\n files = {\n from,\n to,\n names\n };\n operation(files, async () => {\n await DOM.Storage.remove(from);\n const {\n panel,\n panelPassive\n } = Info;\n\n const setCurrent = () => {\n const currentName = name || data.names[0];\n DOM.setCurrentByName(currentName);\n };\n\n if (!Info.isOnePanel) CloudCmd.refresh({\n panel: panelPassive,\n noCurrent: true\n });\n CloudCmd.refresh({\n panel\n }, setCurrent);\n });\n }\n }\n}\n\nfunction checkEmpty(name, operation) {\n if (!operation) throw Error(name + ' could not be empty!');\n}\n\nfunction twopack(operation, type) {\n let op;\n let fileFrom;\n let currentName = Info.name;\n const {\n path,\n dirPath\n } = Info;\n const activeFiles = DOM.getActiveFiles();\n const names = DOM.getFilenames(activeFiles);\n checkEmpty('operation', operation);\n if (!names.length) return Dialog.alert.noFiles();\n\n switch (operation) {\n case 'extract':\n op = extractFn;\n fileFrom = {\n from: path,\n to: dirPath\n };\n currentName = removeExtension(currentName);\n break;\n\n case 'pack':\n op = getPacker(type);\n if (names.length > 1) currentName = Info.dir;\n currentName += DOM.getPackerExt(type);\n fileFrom = {\n from: dirPath,\n to: dirPath + currentName,\n names\n };\n break;\n }\n\n showLoad();\n op(fileFrom, error => {\n !error && CloudCmd.refresh({\n currentName\n });\n });\n}\n\nfunction prompt(msg, to, names) {\n const n = names.length;\n const [name] = names;\n msg += ' ';\n if (names.length > 1) msg += n + ' file(s)';else msg += '\"' + name + '\"';\n msg += ' to';\n return Dialog.prompt(msg, to);\n}\n\nasync function loadAll() {\n const {\n prefix\n } = CloudCmd;\n const file = `${prefix}/fileop/fileop.js`;\n const [error] = await tryToCatch(load.js, file);\n if (error) Dialog.alert(error.message);\n Loaded = true;\n}\n\n//# sourceURL=file://cloudcmd/client/modules/operation/index.js");
|
|
190
|
+
eval("/* global CloudCmd */\n\n/* global Util */\n\n/* global DOM */\n\n/* global fileop */\n\n\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\nconst wraptile = __webpack_require__(/*! wraptile */ \"./node_modules/wraptile/lib/wraptile.js\");\n\nconst {\n promisify\n} = __webpack_require__(/*! es6-promisify */ \"./node_modules/es6-promisify/dist/promisify.mjs\");\n\nconst exec = __webpack_require__(/*! execon */ \"./node_modules/execon/lib/exec.js\");\n\nconst load = __webpack_require__(/*! load.js */ \"./node_modules/load.js/lib/load.js\");\n\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n\nconst {\n encode\n} = __webpack_require__(/*! ../../../common/entity */ \"./common/entity.js\");\n\nconst removeExtension = __webpack_require__(/*! ./remove-extension */ \"./client/modules/operation/remove-extension.js\");\n\nconst setListeners = __webpack_require__(/*! ./set-listeners */ \"./client/modules/operation/set-listeners.js\");\n\nconst getNextCurrentName = __webpack_require__(/*! ./get-next-current-name */ \"./client/modules/operation/get-next-current-name.js\");\n\nconst removeQuery = a => a.replace(/\\?.*/, '');\n\nconst Name = 'Operation';\nCloudCmd[Name] = exports;\nconst {\n config\n} = CloudCmd;\nconst {\n Dialog,\n Images\n} = DOM;\nconst authCheck = wraptile(_authCheck);\nconst Operation = {};\nlet Loaded;\nlet copyFn;\nlet moveFn;\nlet deleteFn;\nlet extractFn;\nlet packZipFn;\nlet packTarFn;\nconst Info = DOM.CurrentInfo;\nconst showLoad = Images.show.load.bind(null, 'top');\nconst processFiles = currify(_processFiles);\n\nconst noFilesCheck = () => {\n const {\n length\n } = DOM.getActiveFiles();\n const is = Boolean(!length);\n if (is) return Dialog.alert.noFiles();\n return is;\n};\n\nmodule.exports.init = promisify(callback => {\n showLoad();\n exec.series([DOM.loadSocket, async callback => {\n if (config('dropbox')) return callback();\n const {\n prefix,\n prefixSocket\n } = CloudCmd;\n await loadAll();\n await initOperations(prefix, prefixSocket, callback);\n }, callback => {\n Loaded = true;\n Images.hide();\n callback();\n }], callback);\n});\n\nfunction _authCheck(spawn, ok) {\n const accept = wraptile(ok);\n const alertDialog = wraptile(Dialog.alert);\n spawn.on('accept', accept(spawn));\n spawn.on('reject', alertDialog('Wrong credentials!'));\n spawn.emit('auth', config('username'), config('password'));\n}\n\nconst onConnect = currify((fn, operator) => {\n setOperations(operator);\n fn();\n});\n\nasync function initOperations(prefix, socketPrefix, fn) {\n socketPrefix = `${socketPrefix}/fileop`;\n const operator = await fileop({\n prefix,\n socketPrefix\n });\n operator.on('connect', authCheck(operator, onConnect(fn)));\n}\n\nfunction setOperations(operator) {\n packTarFn = (_ref, callback) => {\n let {\n from,\n to,\n names\n } = _ref;\n const operation = 'Tar';\n const listen = setListeners({\n operation,\n callback,\n noContinue: true,\n from,\n to\n });\n operator.tar(from, to, names).then(listen);\n };\n\n packZipFn = (_ref2, callback) => {\n let {\n from,\n to,\n names\n } = _ref2;\n const operation = 'Zip';\n const listen = setListeners({\n operation,\n callback,\n noContinue: true,\n from,\n to\n });\n operator.zip(from, to, names).then(listen);\n };\n\n deleteFn = (from, files, callback) => {\n from = removeQuery(from);\n const operation = 'Delete';\n const listen = setListeners({\n operation,\n callback,\n from\n });\n operator.remove(from, files).then(listen);\n };\n\n copyFn = (_ref3, callback) => {\n let {\n from,\n to,\n names\n } = _ref3;\n const operation = 'Copy';\n const listen = setListeners({\n operation,\n callback,\n from,\n to,\n names\n });\n operator.copy(from, to, names).then(listen);\n };\n\n moveFn = (_ref4, callback) => {\n let {\n from,\n to,\n names\n } = _ref4;\n const operation = 'Move';\n const listen = setListeners({\n operation,\n callback,\n from,\n to\n });\n operator.move(from, to, names).then(listen);\n };\n\n extractFn = (_ref5, callback) => {\n let {\n from,\n to\n } = _ref5;\n const operation = 'Extract';\n const listen = setListeners({\n operation,\n callback,\n noContinue: true,\n from,\n to\n });\n operator.extract(from, to).then(listen);\n };\n}\n\nfunction getPacker(type) {\n if (type === 'zip') return packZipFn;\n return packTarFn;\n}\n\nmodule.exports.hide = () => {\n CloudCmd.View.hide();\n};\n\nmodule.exports.show = (operation, data) => {\n if (!Loaded) return;\n if (operation === 'copy') return Operation.copy(data);\n if (operation === 'move') return Operation.move(data);\n if (operation === 'delete') return Operation.delete();\n if (operation === 'delete:silent') return Operation.deleteSilent();\n if (operation === 'pack') return Operation.pack();\n if (operation === 'extract') return Operation.extract();\n};\n\nOperation.copy = processFiles({\n type: 'copy'\n});\nOperation.move = processFiles({\n type: 'move'\n});\nOperation.delete = promptDelete;\nOperation.deleteSilent = deleteSilent;\n\nOperation.pack = () => {\n const isZip = config('packer') === 'zip';\n twopack('pack', isZip ? 'zip' : 'tar');\n};\n\nOperation.extract = () => {\n twopack('extract');\n};\n/**\n * prompt and delete current file or selected files\n *\n * @currentFile\n */\n\n\nasync function promptDelete() {\n if (noFilesCheck()) return;\n const msgAsk = 'Do you really want to delete the ';\n const msgSel = 'selected ';\n const files = DOM.getActiveFiles();\n const names = DOM.getFilenames(files);\n const n = names.length;\n let msg;\n\n if (n) {\n let name = '';\n\n for (let i = 0; i < 5 && i < n; i++) name += '\\n' + names[i];\n\n if (n >= 5) name += '\\n...';\n msg = msgAsk + msgSel + n + ' files/directories?\\n' + encode(name);\n } else {\n const current = DOM.getCurrentFile();\n const isDir = DOM.isCurrentIsDir(current);\n\n const getType = isDir => isDir ? 'directory' : 'file';\n\n const type = getType(isDir) + ' ';\n const name = DOM.getCurrentName(current);\n msg = msgAsk + msgSel + type + name + '?';\n }\n\n const [cancel] = await Dialog.confirm(msg);\n if (cancel) return;\n deleteSilent(files);\n}\n/**\n * delete current or selected files\n *\n * @files\n */\n\n\nfunction deleteSilent() {\n let files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DOM.getActiveFiles();\n const query = '?files';\n const path = Info.dirPath;\n if (noFilesCheck()) return;\n showLoad();\n const removedNames = DOM.getFilenames(files);\n const names = DOM.CurrentInfo.files.map(DOM.getCurrentName);\n const currentName = DOM.getCurrentName();\n const nextCurrentName = getNextCurrentName(currentName, names, removedNames);\n deleteFn(path + query, removedNames, async () => {\n await CloudCmd.refresh();\n const names = Info.files.map(DOM.getCurrentName);\n const isCurrent = names.includes(currentName);\n const name = isCurrent ? currentName : nextCurrentName;\n DOM.setCurrentByName(name);\n });\n}\n/*\n * process files (copy or move)\n * @param data\n * @param operation\n */\n\n\nasync function _processFiles(options, data) {\n let selFiles;\n let files;\n let panel;\n let shouldAsk;\n let ok;\n let from = '';\n let to = '';\n let names = [];\n /* eslint no-multi-spaces: 0 */\n\n if (data) {\n from = data.from;\n to = data.to;\n names = data.names;\n panel = Info.panel;\n } else {\n from = Info.dirPath;\n to = DOM.getNotCurrentDirPath();\n selFiles = DOM.getSelectedFiles();\n names = DOM.getFilenames(selFiles);\n data = {};\n shouldAsk = true;\n panel = Info.panelPassive;\n }\n\n if (!names.length) names.push(DOM.getCurrentName());\n const [name] = names;\n const sameName = DOM.getCurrentByName(name, panel);\n if (!data && noFilesCheck()) return;\n const {\n type\n } = options;\n const isCopy = type === 'copy';\n const option = isCopy ? 'confirmCopy' : 'confirmMove';\n const title = isCopy ? 'Copy' : 'Rename/Move';\n const operation = isCopy ? copyFn : moveFn;\n\n if (shouldAsk && config(option)) {\n const [cancel, newTo] = await prompt(title, to, names.map(encode));\n if (!cancel) ask(newTo);\n return;\n }\n\n ask(to);\n\n function ask(to) {\n ok = from !== to && to;\n if (ok && !shouldAsk || !sameName) return go();\n const str = `\"${name}\" already exist. Overwrite?`;\n const cancel = false;\n Dialog.confirm(str, {\n cancel\n }).then(go);\n\n function go() {\n showLoad();\n files = {\n from,\n to,\n names\n };\n operation(files, async () => {\n await DOM.Storage.remove(from);\n const {\n panel,\n panelPassive\n } = Info;\n\n const setCurrent = () => {\n const currentName = name || data.names[0];\n DOM.setCurrentByName(currentName);\n };\n\n if (!Info.isOnePanel) CloudCmd.refresh({\n panel: panelPassive,\n noCurrent: true\n });\n CloudCmd.refresh({\n panel\n }, setCurrent);\n });\n }\n }\n}\n\nfunction checkEmpty(name, operation) {\n if (!operation) throw Error(name + ' could not be empty!');\n}\n\nfunction twopack(operation, type) {\n let op;\n let fileFrom;\n let currentName = Info.name;\n const {\n path,\n dirPath\n } = Info;\n const activeFiles = DOM.getActiveFiles();\n const names = DOM.getFilenames(activeFiles);\n checkEmpty('operation', operation);\n if (!names.length) return Dialog.alert.noFiles();\n\n switch (operation) {\n case 'extract':\n op = extractFn;\n fileFrom = {\n from: path,\n to: dirPath\n };\n currentName = removeExtension(currentName);\n break;\n\n case 'pack':\n op = getPacker(type);\n if (names.length > 1) currentName = Info.dir;\n currentName += DOM.getPackerExt(type);\n fileFrom = {\n from: dirPath,\n to: dirPath + currentName,\n names\n };\n break;\n }\n\n showLoad();\n op(fileFrom, error => {\n !error && CloudCmd.refresh({\n currentName\n });\n });\n}\n\nasync function prompt(msg, to, names) {\n const n = names.length;\n const [name] = names;\n msg += ' ';\n if (names.length > 1) msg += n + ' file(s)';else msg += '\"' + name + '\"';\n msg += ' to';\n return await Dialog.prompt(msg, to);\n}\n\nasync function loadAll() {\n const {\n prefix\n } = CloudCmd;\n const file = `${prefix}/fileop/fileop.js`;\n const [error] = await tryToCatch(load.js, file);\n if (error) Dialog.alert(error.message);\n Loaded = true;\n}\n\n//# sourceURL=file://cloudcmd/client/modules/operation/index.js");
|
|
191
191
|
|
|
192
192
|
/***/ }),
|
|
193
193
|
|
package/dist-dev/sw.js
CHANGED
|
@@ -101,7 +101,7 @@ var serviceWorkerOption = {
|
|
|
101
101
|
/***/ (function(module, exports, __webpack_require__) {
|
|
102
102
|
|
|
103
103
|
"use strict";
|
|
104
|
-
eval("\n\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\nconst isDev = \"development\" === 'development';\n\nconst isGet = a => a.method === 'GET';\n\nconst isBasic = a => a.type === 'basic';\n\nconst wait = currify((f, e) => e.waitUntil(f()));\nconst respondWith = currify((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (/\\/$/.test(url) || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (/^\\/api/.test(pathname)) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\n\nconst getPathName = url => new URL(url).pathname;\n\nconst date = \"
|
|
104
|
+
eval("\n\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\nconst isDev = \"development\" === 'development';\n\nconst isGet = a => a.method === 'GET';\n\nconst isBasic = a => a.type === 'basic';\n\nconst wait = currify((f, e) => e.waitUntil(f()));\nconst respondWith = currify((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (/\\/$/.test(url) || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (/^\\/api/.test(pathname)) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\n\nconst getPathName = url => new URL(url).pathname;\n\nconst date = \"Sat Dec 04 2021 01:17:38 GMT+0200 (Eastern European Standard Time)\";\nconst NAME = `cloudcmd: ${date}`;\n\nconst createRequest = a => new Request(a, {\n credentials: 'same-origin'\n});\n\nconst getRequest = (a, request) => {\n if (a !== '/') return request;\n return createRequest('/');\n};\n\nself.addEventListener('install', wait(onInstall));\nself.addEventListener('fetch', respondWith(onFetch));\nself.addEventListener('activate', wait(onActivate));\n\nasync function onActivate() {\n console.info(`cloudcmd: sw: activate: ${NAME}`);\n await self.clients.claim();\n const keys = await caches.keys();\n const deleteCache = caches.delete.bind(caches);\n await Promise.all(keys.map(deleteCache));\n}\n\nasync function onInstall() {\n console.info(`cloudcmd: sw: install: ${NAME}`);\n await self.skipWaiting();\n}\n\nasync function onFetch(event) {\n const {\n request\n } = event;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n const newRequest = getRequest(pathname, event.request);\n const cache = await caches.open(NAME);\n const response = await cache.match(request);\n if (!isDev && response) return response;\n const [e, resp] = await tryToCatch(fetch, newRequest, {\n credentials: 'same-origin'\n });\n if (e) return new Response(e.message);\n await addToCache(request, resp.clone());\n return resp;\n}\n\nasync function addToCache(request, response) {\n const cache = await caches.open(NAME);\n return cache.put(request, response);\n}\n\n//# sourceURL=file://cloudcmd/client/sw/sw.js");
|
|
105
105
|
|
|
106
106
|
/***/ }),
|
|
107
107
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloudcmd",
|
|
3
|
-
"version": "15.9.
|
|
3
|
+
"version": "15.9.10",
|
|
4
4
|
"author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
|
|
5
5
|
"description": "File manager for the web with console and editor",
|
|
6
6
|
"homepage": "http://cloudcmd.io",
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
"emitify": "^4.0.1",
|
|
165
165
|
"eslint": "^8.0.1",
|
|
166
166
|
"eslint-plugin-node": "^11.0.0",
|
|
167
|
-
"eslint-plugin-putout": "^
|
|
167
|
+
"eslint-plugin-putout": "^12.2.0",
|
|
168
168
|
"extract-text-webpack-plugin": "^4.0.0-alpha.0",
|
|
169
169
|
"gritty": "^6.0.0",
|
|
170
170
|
"gunzip-maybe": "^1.3.1",
|