Compare commits

...

19 Commits

  1. 1
      index.html
  2. 1
      json/changelogs/1.6.3.json
  3. 1
      json/changelogs/1.6.4.json
  4. 1
      json/changelogs/1.7.0.json
  5. 1
      json/changelogs/1.7.1.json
  6. 5
      json/ctx.json
  7. 18
      package-lock.json
  8. 3
      package.json
  9. 5
      scripts/contextmenu/compress-selected.js
  10. 105
      scripts/contextmenu/compress.js
  11. 13
      scripts/contextmenu/createcontext.js
  12. 105
      scripts/contextmenu/decompress.js
  13. 79
      scripts/contextmenu/delete-folder.js
  14. 1
      scripts/contextmenu/hidecontext.js
  15. 5
      scripts/contextmenu/newfolder.js
  16. 2
      scripts/contextmenu/rename-folder.js
  17. 1
      scripts/fileview/load/load.js
  18. 21
      scripts/fileview/load/render.js
  19. 12
      scripts/fileview/selectfolder.js
  20. 10
      scripts/modal/post.js
  21. 3
      scripts/startup/setbuttons.js
  22. 11
      styles/modal.css
  23. 10
      styles/styles.css

@ -3,6 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="./styles/styles.css" rel="stylesheet"> <link href="./styles/styles.css" rel="stylesheet">
<link href='./styles/files.css' rel='stylesheet'> <link href='./styles/files.css' rel='stylesheet'>

@ -0,0 +1 @@
{"log":{"Folder Deletion":["You can now delete folders by right clicking on them","Includes an obligatory confirmation to make sure you're sure you want to delete the folder :)"],"Bugs":["Error modals are actually closable now kekw","Right click will only show folder options on folders now"]},"version":{"name":"Alpha","semver":" 1.6.3"}}

@ -0,0 +1 @@
{"log":{"Misc":["Small update here","Cleaned up a few bugs too small to really talk about here","Fixed a really nasty bug where the app would try to delete a folder a whole bunch of times","Clicking on the same file again won't make it visibly un-click","A folder will select itself after it's created"]},"version":{"name":"Alpha","semver":"1.6.4"}}

@ -0,0 +1 @@
{"log":{"File opening":["Files now open!!","I know right, a file explorer that opens files. Revolutionary.","This feature is dependent on you being on a version of Windows where PowerShell exists. Whether or not it works every single time is a bit untested, so it could cause some twitchy stuff to happen. This has not been written for Linux or Mac yet."]},"version":{"name":"Alpha","semver":"1.7.0"}}

@ -0,0 +1 @@
{"log":{"Zipping":["You can now zip folders!","So far, this only applies to the directory you're currently viewing. It will not *yet* zip the directory you have selected"]},"version":{"name":"Alpha","semver":"1.7.1"}}

@ -1,6 +1,9 @@
[ [
[ [
{"name": "New Folder", "id": "ctx-new-folder", "onclick": "newfolder"} {"name": "New Folder", "id": "ctx-new-folder", "onclick": "newfolder"},
{"name": "Compress", "id": "ctx-compress", "onclick": "compress"},
{"name": "Compress Selected", "id": "ctx-compress-selected", "onclick": "compress-selected"},
{"name": "Decompress", "id": "ctx-decompress", "onclick": "decompress"}
], ],
[ [
{"name": "Sort by: Name", "id": "ctx-sort-by", "onclick": "changesort"}, {"name": "Sort by: Name", "id": "ctx-sort-by", "onclick": "changesort"},

18
package-lock.json generated

@ -1,14 +1,15 @@
{ {
"name": "filekade", "name": "filekade",
"version": "1.6.2", "version": "1.7.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "filekade", "name": "filekade",
"version": "1.6.2", "version": "1.7.1",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"adm-zip": "^0.5.9",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"electron-squirrel-startup": "^1.0.0", "electron-squirrel-startup": "^1.0.0",
"generator-code": "^1.6.5" "generator-code": "^1.6.5"
@ -1993,6 +1994,14 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true "dev": true
}, },
"node_modules/adm-zip": {
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
"integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==",
"engines": {
"node": ">=6.0"
}
},
"node_modules/agent-base": { "node_modules/agent-base": {
"version": "6.0.2", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@ -15218,6 +15227,11 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true "dev": true
}, },
"adm-zip": {
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
"integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg=="
},
"agent-base": { "agent-base": {
"version": "6.0.2", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",

@ -1,6 +1,6 @@
{ {
"name": "filekade", "name": "filekade",
"version": "1.6.2", "version": "1.7.1",
"description": "A file explorer (primarily a learning experience for me)", "description": "A file explorer (primarily a learning experience for me)",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
@ -14,6 +14,7 @@
"author": "WubzyGD", "author": "WubzyGD",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"adm-zip": "^0.5.9",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"electron-squirrel-startup": "^1.0.0", "electron-squirrel-startup": "^1.0.0",
"generator-code": "^1.6.5" "generator-code": "^1.6.5"

@ -0,0 +1,5 @@
const path = require('path');
module.exports = () => {
return require('./compress')(undefined, path.join(window.kade.cpath, window.kade.currentFolder));
};

@ -0,0 +1,105 @@
const fs = require('fs');
const path = require('path');
const az = require('adm-zip');
const Mousetrap = require('../dep/mousetrap');
const lightRefresh = require('../fileview/lightrefresh');
const preModal = require('../modal/pre');
const postModal = require('../modal/post');
const showError = require('../modal/common/error');
const clearModals = require('../modal/clearmodals');
const newToast = require('../toast/createtoast');
const refresh = require('../fileview/refresh');
module.exports = (event, pathToCompress) => {
let zip = new az();
if (!pathToCompress) {pathToCompress = window.kade.cpath;}
if (window.kade.modal) {return;}
preModal('compress-folder-modal-container');
let modalOut = document.createElement('div');
modalOut.className = 'modal';
modalOut.id = 'compress-folder-modal-container';
document.body.appendChild(modalOut);
let modal = document.createElement('div');
modal.className = 'modal-wrapper';
modalOut.appendChild(modal);
let title = document.createElement('h2');
title.innerHTML = 'Compress Folder';
modal.appendChild(title);
let text = document.createElement('p');
text.innerHTML = "Please name the zip you'd like to compress to.";
modal.appendChild(text);
let cont = document.createElement('div');
cont.className = 'button-container';
modal.appendChild(cont);
let input = document.createElement('input');
input.placeholder = pathToCompress.split(/\\+|\/+/gm).reverse()[0];
input.value = input.placeholder;
input.id = 'compress-folder-input';
let lastIn = '';
input.oninput = () => {
if (!input.value.match(/^[a-zA-Z0-9-_() ]*$/gm)) {input.value = lastIn;}
else {lastIn = input.value;}
};
cont.appendChild(input);
let conf = document.createElement('button');
conf.innerHTML = 'Create';
conf.onclick = () => {
try {
input.value = input.value.trim();
if (input.value.endsWith('.zip')) {input.value = input.value.slice(0, input.value.length - 4);}
if (!input.value.length) {return;}
if (fs.existsSync(path.join(window.kade.cpath, `${input.value}.zip`))) {
if (!input.value.match(/^.+\(\d\)$/gm)) {input.value += ' (1)';}
else {
let tempstr = input.value.split('');
tempstr[input.value.length - 2] = `${Number(input.value.charAt(input.value.length - 2)) + 1}`;
input.value = tempstr.join('');
}
return;
}
input.style.display = 'none';
conf.style.display = 'none';
cont.style.display = 'none';
text.innerHTML = "Please wait a moment...";
closeWrap.style.display = 'none';
zip.addLocalFolderPromise(pathToCompress).then(() => {
title.innerHTML += " - In Progress..."
text.innerHTML = "Your folder is being compressed. Please wait a moment.<br><br>This may take some time...";
let bar = document.createElement('div');
bar.className = "loading-bar";
modal.appendChild(bar);
zip.writeZipPromise(`${window.kade.cpath}/${input.value}${input.value.endsWith('.zip') ? '' : '.zip'}`, {overwrite: true}).then(() => {
newToast("Folder compressed", [`The current folder was compressed into "${input.value}" successfully`, `<em>${window.kade.cpath}/${input.value}</em>`], undefined, false, 5);
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
});
});
} catch {
newToast("Folder not Compressed", "An error caused that folder to not be compressed.", "#b24355", false, 5, () => {showError("Folder Creation", "There was an unknown error while trying to compress that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");});
clearModals();
postModal(modalOut.id);
}
};
cont.appendChild(conf);
input.focus();
let msm = new Mousetrap(modal);
msm.bind('esc', () => {
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
});
msm.bind('enter', () => {conf.click();});
let close = document.createElement('a');
close.className = 'close-button';
close.onclick = () => {
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
};
let closeWrap = document.createElement('div');
closeWrap.className = 'close-button-wrapper';
modal.appendChild(closeWrap);
closeWrap.appendChild(close);
};

@ -4,14 +4,27 @@ module.exports = (e, target, window) => {
let ctx = document.getElementById('ctx'); let ctx = document.getElementById('ctx');
ctx.style.display = 'block'; ctx.style.display = 'block';
const ctxf = document.getElementById('ctx-folder'); const ctxf = document.getElementById('ctx-folder');
const compress = document.getElementById('ctx-compress');
const compsel = document.getElementById('ctx-compress-selected');
if (target.classList.contains('folder') || (target.parentElement && target.parentElement.classList.contains('folder'))) { if (target.classList.contains('folder') || (target.parentElement && target.parentElement.classList.contains('folder'))) {
ctxf.style.display = 'block'; ctxf.style.display = 'block';
ctxf.previousElementSibling.style.display = 'block'; ctxf.previousElementSibling.style.display = 'block';
if (target.classList.contains('folder')) {window.kade.currentFolder = target.children[1].innerHTML.trim();} if (target.classList.contains('folder')) {window.kade.currentFolder = target.children[1].innerHTML.trim();}
else {window.kade.currentFolder = target.parentElement.children[1].innerHTML.trim();} else {window.kade.currentFolder = target.parentElement.children[1].innerHTML.trim();}
compress.style.display = 'none';
compsel.style.display = 'block';
} else { } else {
ctxf.style.display = 'none'; ctxf.style.display = 'none';
ctxf.previousElementSibling.style.display = 'none'; ctxf.previousElementSibling.style.display = 'none';
compress.style.display = 'block';
compsel.style.display = 'none';
}
if (target.classList.contains('zip') || (target.parentElement && target.parentElement.classList.contains('zip'))) {
if (target.classList.contains('zip')) {window.kade.currentFolder = target.children[1].innerHTML.trim();}
else {window.kade.currentFolder = target.parentElement.children[1].innerHTML.trim();}
document.getElementById('ctx-decompress').style.display = 'block';
} else {
document.getElementById('ctx-decompress').style.display = 'none';
} }
ctx.style.left = `${Math.min(e.pageX, (window.innerWidth - (ctx.clientWidth + 2)))}px`; ctx.style.left = `${Math.min(e.pageX, (window.innerWidth - (ctx.clientWidth + 2)))}px`;
ctx.style.top = `${Math.min(e.pageY, ((window.innerHeight + window.scrollY) - (ctx.clientHeight + 2)))}px`; ctx.style.top = `${Math.min(e.pageY, ((window.innerHeight + window.scrollY) - (ctx.clientHeight + 2)))}px`;

@ -0,0 +1,105 @@
const fs = require('fs');
const path = require('path');
const az = require('adm-zip');
const Mousetrap = require('../dep/mousetrap');
const lightRefresh = require('../fileview/lightrefresh');
const preModal = require('../modal/pre');
const postModal = require('../modal/post');
const showError = require('../modal/common/error');
const clearModals = require('../modal/clearmodals');
const newToast = require('../toast/createtoast');
const refresh = require('../fileview/refresh');
module.exports = (event, pathToCompress) => {
if (!fs.existsSync(path.join(window.kade.cpath, window.kade.currentFolder))) {
return newToast("Decompression failed", "For some reason, that zip archive could not be found.");
}
let zip = new az(path.join(window.kade.cpath, window.kade.currentFolder));
if (!pathToCompress) {pathToCompress = window.kade.currentFolder;}
if (window.kade.modal) {return;}
preModal('decompress-folder-modal-container');
let modalOut = document.createElement('div');
modalOut.className = 'modal';
modalOut.id = 'decompress-folder-modal-container';
document.body.appendChild(modalOut);
let modal = document.createElement('div');
modal.className = 'modal-wrapper';
modalOut.appendChild(modal);
let title = document.createElement('h2');
title.innerHTML = 'Decompress Archive';
modal.appendChild(title);
let text = document.createElement('p');
text.innerHTML = "Please name the zip you'd like to decompress to.";
modal.appendChild(text);
let cont = document.createElement('div');
cont.className = 'button-container';
modal.appendChild(cont);
let input = document.createElement('input');
input.placeholder = pathToCompress.split(/\\+|\/+/gm).reverse()[0];
input.placeholder = input.placeholder.slice(0, input.placeholder.length - 4);
input.value = input.placeholder;
input.id = 'decompress-folder-input';
let lastIn = '';
input.oninput = () => {
if (!input.value.match(/^[a-zA-Z0-9-_() ]*$/gm)) {input.value = lastIn;}
else {lastIn = input.value;}
};
cont.appendChild(input);
let conf = document.createElement('button');
conf.innerHTML = 'Create';
conf.onclick = () => {
try {
input.value = input.value.trim();
if (!input.value.length) {return;}
if (fs.existsSync(path.join(window.kade.cpath, input.value))) {
if (!input.value.match(/^.+\(\d\)$/gm)) {input.value += ' (1)';}
else {
let tempstr = input.value.split('');
tempstr[input.value.length - 2] = `${Number(input.value.charAt(input.value.length - 2)) + 1}`;
input.value = tempstr.join('');
}
return;
}
input.style.display = 'none';
conf.style.display = 'none';
cont.style.display = 'none';
closeWrap.style.display = 'none';
title.innerHTML += " - In Progress..."
text.innerHTML = "Your arhive is being decompressed. Please wait a moment.<br><br>This may take some time...";
let bar = document.createElement('div');
bar.className = "loading-bar";
modal.appendChild(bar);
zip.extractAllToAsync(path.join(window.kade.cpath, input.value), undefined, undefined, () => {
newToast("Archive decompressed", [`The current folder was decompressed into "${input.value}" successfully`, `<em>${window.kade.cpath}/${input.value}</em>`], undefined, false, 5, () => refresh(`${window.kade.cpath}/${input.value}`));
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
});
} catch {
newToast("Archive not Decompressed", "An error caused that folder to not be decompressed.", "#b24355", false, 5, () => {showError("Folder Creation", "There was an unknown error while trying to decompress that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");});
clearModals();
postModal(modalOut.id);
}
};
cont.appendChild(conf);
input.focus();
let msm = new Mousetrap(modal);
msm.bind('esc', () => {
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
});
msm.bind('enter', () => {conf.click();});
let close = document.createElement('a');
close.className = 'close-button';
close.onclick = () => {
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
};
let closeWrap = document.createElement('div');
closeWrap.className = 'close-button-wrapper';
modal.appendChild(closeWrap);
closeWrap.appendChild(close);
};

@ -0,0 +1,79 @@
const fs = require('fs');
const path = require('path');
const Mousetrap = require('../dep/mousetrap');
const lightRefresh = require('../fileview/lightrefresh');
const preModal = require('../modal/pre');
const postModal = require('../modal/post');
const showError = require('../modal/common/error');
const clearModals = require('../modal/clearmodals');
const newToast = require('../toast/createtoast');
module.exports = () => {
if (window.kade.modal) {return;}
preModal('delete-folder-modal-container');
let modalOut = document.createElement('div');
modalOut.className = 'modal';
modalOut.id = 'delete-folder-modal-container';
document.body.appendChild(modalOut);
let modal = document.createElement('div');
modal.className = 'modal-wrapper';
modalOut.appendChild(modal);
let title = document.createElement('h2');
title.innerHTML = 'Delete Folder';
modal.appendChild(title);
let text = document.createElement('p');
text.innerHTML = "Are you sure you'd like to delete this folder? Remember, this <b>cannot be undone</b>.";
modal.appendChild(text);
let cont = document.createElement('div');
cont.className = 'button-container';
modal.appendChild(cont);
let conf = document.createElement('button');
conf.innerHTML = 'Delete it!';
let cxl = document.createElement('button');
cxl.innerHTML = "Nevermind";
cxl.onclick = () => {
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
};
conf.onclick = () => {
try {
fs.rmdirSync(path.join(window.kade.cpath, window.kade.currentFolder));
postModal(modalOut.id);
modalOut.remove();
lightRefresh(window.kade.cpath);
newToast("Folder Deleted", "Your folder has been deleted successfully.");
} catch {
newToast("Folder not Deleted", "An error caused that folder to not be deleted.", "#b24355", false, 5, () => {showError("Folder Deletion", "There was an unknown error while trying to delete that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");});
clearModals();
try {modalOut.remove();} catch {}
postModal(modalOut.id);
}
};
cont.appendChild(conf);
cont.appendChild(cxl);
let iin = document.createElement('input');
iin.className = 'invis';
iin.classList.add('nosel');
cont.appendChild(iin);
iin.focus();
let msm = new Mousetrap(modal);
msm.bind('esc', () => {
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
});
msm.bind('enter', () => {conf.click();});
let close = document.createElement('a');
close.className = 'close-button';
close.onclick = () => {
lightRefresh();
modalOut.remove();
postModal(modalOut.id);
};
let closeWrap = document.createElement('div');
closeWrap.className = 'close-button-wrapper';
modal.appendChild(closeWrap);
closeWrap.appendChild(close);
};

@ -1,4 +1,5 @@
module.exports = (window) => { module.exports = (window) => {
document.getElementById('ctx').style.display = 'none'; document.getElementById('ctx').style.display = 'none';
if (!window) {return;}
window.kade.context = false; window.kade.context = false;
}; };

@ -9,6 +9,7 @@ const showError = require('../modal/common/error');
const clearModals = require('../modal/clearmodals'); const clearModals = require('../modal/clearmodals');
const newToast = require('../toast/createtoast'); const newToast = require('../toast/createtoast');
const refresh = require('../fileview/refresh'); const refresh = require('../fileview/refresh');
const selectFolder = require('../fileview/selectfolder');
module.exports = () => { module.exports = () => {
if (window.kade.modal) {return;} if (window.kade.modal) {return;}
@ -64,6 +65,10 @@ module.exports = () => {
newToast("Copied!", "<em>The folder's path has been copied to your clipboard.</em>", "#19df46"); newToast("Copied!", "<em>The folder's path has been copied to your clipboard.</em>", "#19df46");
} }
); );
setTimeout(() => {
selectFolder(input.value);
setTimeout(() => window.kade.cl.click(), 100);
}, 100);
} catch { } catch {
newToast("Folder not Created", "An error caused that folder to not be created.", "#b24355", false, 5, () => {showError("Folder Creation", "There was an unknown error while trying to create that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");}); newToast("Folder not Created", "An error caused that folder to not be created.", "#b24355", false, 5, () => {showError("Folder Creation", "There was an unknown error while trying to create that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");});
clearModals(); clearModals();

@ -66,7 +66,7 @@ module.exports = () => {
} }
); );
} catch { } catch {
newToast("Folder not Renamed", "An error caused that folder to not be renamed.", "#b24355", false, 5, () => {showError("Folder Creation", "There was an unknown error while trying to create that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");}); newToast("Folder not Renamed", "An error caused that folder to not be renamed.", "#b24355", false, 5, () => {showError("Folder Renaming", "There was an unknown error while trying to rename that folder. It may be a permissions issue, or the host folder doesn't exist anymore.");});
clearModals(); clearModals();
} }
postModal(modalOut.id); postModal(modalOut.id);

@ -16,6 +16,7 @@ module.exports = (check=false) => {
for (const file of ldir) { for (const file of ldir) {
let ofile = {}; let ofile = {};
ofile.icon = fileIcon(`${dir}/${file}`, file); ofile.icon = fileIcon(`${dir}/${file}`, file);
ofile.trueName = file;
ofile.name = trimext.includes(path.extname(file)) ? file.slice(0, file.length - path.extname(file).length) : file; ofile.name = trimext.includes(path.extname(file)) ? file.slice(0, file.length - path.extname(file).length) : file;
try {ofile.type = fs.lstatSync(`${dir}/${file}`).isDirectory() ? "File Folder" : (extensions[(file.startsWith('.') ? file : path.extname(file)).slice(1)] || "File");} try {ofile.type = fs.lstatSync(`${dir}/${file}`).isDirectory() ? "File Folder" : (extensions[(file.startsWith('.') ? file : path.extname(file)).slice(1)] || "File");}
catch {ofile.type = `${path.extname(file)} File`.trim();} catch {ofile.type = `${path.extname(file)} File`.trim();}

@ -1,4 +1,8 @@
const cp = require('child_process');
const path = require('path');
const loadHierarchy = require("../hierarchy"); const loadHierarchy = require("../hierarchy");
const newToast = require('../../toast/createtoast');
const isOverflowing = require('../../dep/overflowing'); const isOverflowing = require('../../dep/overflowing');
@ -13,18 +17,27 @@ module.exports = (dir, options) => {
let cfc = document.createElement("div"); let cfc = document.createElement("div");
cfc.className = 'file'; cfc.className = 'file';
if (options.animate) {cfc.classList.add('rise');} if (options.animate) {cfc.classList.add('rise');}
if (file.type.toLowerCase().includes('folder')) {cfc.classList.add('folder');} if (file.dir) {cfc.classList.add('folder');}
if (!file.dir && path.extname(path.join(window.kade.cpath, file.trueName)) === '.zip') {cfc.classList.add('zip');}
cfc.onclick = function () { cfc.onclick = function () {
window.kade.elc = true; window.kade.elc = true;
if (cfc.classList.contains('file-active')) {if (file.dir) {refresh(`${window.kade.cpath}/${file.name}`);}} if (cfc.classList.contains('file-active')) {
if (file.dir) {refresh(`${window.kade.cpath}/${file.name}`);}
else {
try {cp.exec(`${window.kade.cpath}/${file.trueName}`, {shell: 'powershell.exe'}, (error) => {
if (error) {newToast("Error", "Unable to open file.", "#a4052b");}
});}
catch {newToast("Error", "Unable to open file.", "#a4052b");}
}
}
cfc.classList.add('file-active'); cfc.classList.add('file-active');
if (window.kade.cl) {window.kade.cl.classList.remove('file-active');} if (window.kade.cl && !cfc.isSameNode(window.kade.cl)) {window.kade.cl.classList.remove('file-active');}
window.kade.cl = cfc; window.kade.cl = cfc;
}; };
cfc.oncontextmenu = function () { cfc.oncontextmenu = function () {
window.kade.elc = true; window.kade.elc = true;
if (!cfc.classList.contains('file-active')) {cfc.classList.add('file-active');} if (!cfc.classList.contains('file-active')) {cfc.classList.add('file-active');}
if (window.kade.cl) {window.kade.cl.classList.remove('file-active');} if (window.kade.cl && !cfc.isSameNode(window.kade.cl)) {window.kade.cl.classList.remove('file-active');}
window.kade.cl = cfc; window.kade.cl = cfc;
window.kade.ctxel = cfc; window.kade.ctxel = cfc;
}; };

@ -0,0 +1,12 @@
module.exports = (name) => {
let folders = document.getElementById('files').getElementsByClassName('folder');
let folder = 1;
for (let i = 0; i < folders.length; i++) {
if (folders.item(i).children.item(1).innerHTML === name) {
folder = folders.item(i);
folder.click();
break;
}
}
return folder;
};

@ -1,8 +1,10 @@
const transit = require("./transit"); const transit = require("./transit");
module.exports = (id) => { module.exports = (id) => {
document.getElementById('modal-block').remove(); try {
window.kade.modal = false; try {document.getElementById('modal-block').remove();} catch {}
document.body.style.overflowY = 'overlay'; window.kade.modal = false;
transit(id, false); document.body.style.overflowY = 'overlay';
transit(id, false);
} catch {}
}; };

@ -11,6 +11,7 @@ module.exports = () => {
backb.innerHTML = 'Go Back'; backb.innerHTML = 'Go Back';
backb.setAttribute('id', 'back-button'); backb.setAttribute('id', 'back-button');
backb.className = 'header-button'; backb.className = 'header-button';
backb.classList.add('nosel');
backb.onclick = () => { backb.onclick = () => {
if (window.kade.cpath !== 'C:\\' && window.kade.cpath !== '\\') {refresh(path.join(window.kade.cpath, '..'));} if (window.kade.cpath !== 'C:\\' && window.kade.cpath !== '\\') {refresh(path.join(window.kade.cpath, '..'));}
}; };
@ -19,6 +20,7 @@ module.exports = () => {
let sb = document.createElement('p'); let sb = document.createElement('p');
sb.innerHTML = 'Sort by: Name'; sb.innerHTML = 'Sort by: Name';
sb.className = 'header-button'; sb.className = 'header-button';
sb.classList.add("nosel");
sb.onclick = () => {changesort();}; sb.onclick = () => {changesort();};
sb.setAttribute('id', 'sort-button'); sb.setAttribute('id', 'sort-button');
hb.appendChild(sb); hb.appendChild(sb);
@ -26,6 +28,7 @@ module.exports = () => {
let ob = document.createElement('p'); let ob = document.createElement('p');
ob.innerHTML = 'Ascending'; ob.innerHTML = 'Ascending';
ob.className = 'header-button'; ob.className = 'header-button';
ob.classList.add("nosel");
ob.onclick = () => {changeascend();}; ob.onclick = () => {changeascend();};
ob.setAttribute('id', 'order-button'); ob.setAttribute('id', 'order-button');
hb.appendChild(ob); hb.appendChild(ob);

@ -135,3 +135,14 @@
} }
#changelog-modal {max-height: 70vh;} #changelog-modal {max-height: 70vh;}
.loading-bar {
width: 90%;
margin: 12px auto 10px auto;
border-radius: 3px;
padding: 0 0;
height: 5px;
animation: 12s linear infinite, moving-stripes 10s linear infinite;
background-image: repeating-linear-gradient(-45deg, #a172a6 10px, #5d60ca98, #a172a6 30px);
background-size: 200%;
}

@ -110,3 +110,13 @@ body {
} }
::-webkit-scrollbar-thumb:hover {background-image: linear-gradient(to bottom, #af2188ff 0%, #af2188ff 10%, #fa59cfff 75%, #fa59cfff 100%);} ::-webkit-scrollbar-thumb:hover {background-image: linear-gradient(to bottom, #af2188ff 0%, #af2188ff 10%, #fa59cfff 75%, #fa59cfff 100%);}
.invis {
position: relative;
left: -1000px;
width: 0;
height: 0;
padding: 0 0;
margin: 0 0;
opacity: 0;
}
Loading…
Cancel
Save