Skip to content
This repository was archived by the owner on Oct 22, 2021. It is now read-only.

Commit 7fa92d2

Browse files
committed
✨ Optional list view in fsDisp
* Add optional list view in file browser, which also displays file type, size and last accessed timestamp * Add Ctrl+Shift+L keyboard shortcut to toggle list view * Add fsListView setting - defaults to false
1 parent 77899c1 commit 7fa92d2

File tree

4 files changed

+115
-6
lines changed

4 files changed

+115
-6
lines changed

src/_boot.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ if (!fs.existsSync(settingsFile)) {
7878
allowWindowed: false,
7979
excludeThreadsFromToplist: true,
8080
hideDotfiles: false,
81+
fsListView: false,
8182
experimentalGlobeFeatures: false,
8283
experimentalFeatures: false
8384
}, 4));

src/_renderer.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ async function initUI() {
337337

338338
document.getElementById("main_shell").setAttribute("style", "opacity: 0;");
339339
document.body.innerHTML += `
340-
<section id="filesystem" style="width: 0px;" class="${window.settings.hideDotfiles ? "hideDotfiles" : ""}">
340+
<section id="filesystem" style="width: 0px;" class="${window.settings.hideDotfiles ? "hideDotfiles" : ""} ${window.settings.fsListView ? "list-view" : ""}">
341341
</section>
342342
<section id="keyboard" style="opacity:0;">
343343
</section>`;
@@ -705,6 +705,14 @@ window.openSettings = async () => {
705705
<option>${!window.settings.hideDotfiles}</option>
706706
</select></td>
707707
</tr>
708+
<tr>
709+
<td>fsListView</td>
710+
<td>Show files in a more detailed list instead of an icon grid</td>
711+
<td><select id="settingsEditor-fsListView">
712+
<option>${window.settings.fsListView}</option>
713+
<option>${!window.settings.fsListView}</option>
714+
</select></td>
715+
</tr>
708716
<tr>
709717
<td>experimentalGlobeFeatures</td>
710718
<td>Toggle experimental features for the network globe</td>
@@ -758,6 +766,7 @@ window.writeSettingsFile = () => {
758766
allowWindowed: (document.getElementById("settingsEditor-allowWindowed").value === "true"),
759767
excludeThreadsFromToplist: (document.getElementById("settingsEditor-excludeThreadsFromToplist").value === "true"),
760768
hideDotfiles: (document.getElementById("settingsEditor-hideDotfiles").value === "true"),
769+
fsListView: (document.getElementById("settingsEditor-fsListView").value === "true"),
761770
experimentalGlobeFeatures: (document.getElementById("settingsEditor-experimentalGlobeFeatures").value === "true"),
762771
experimentalFeatures: (document.getElementById("settingsEditor-experimentalFeatures").value === "true")
763772
};
@@ -924,6 +933,11 @@ function registerKeyboardShortcuts() {
924933
window.fsDisp.toggleHidedotfiles();
925934
});
926935

936+
// Toggle list view in fsDisp
937+
globalShortcut.register("Control+Shift+L", () => {
938+
window.fsDisp.toggleListview();
939+
});
940+
927941
// Hide on-screen keyboard visual feedback (#394)
928942
globalShortcut.register("Control+Shift+P", () => {
929943
window.keyboard.togglePasswordMode();

src/assets/css/filesystem.css

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,52 @@ div#fs_disp_container > * > h3 {
9797
overflow: hidden;
9898
}
9999

100+
section#filesystem:not(.list-view) > div#fs_disp_container > div > h4 {
101+
display: none;
102+
}
103+
104+
section#filesystem.list-view > div#fs_disp_container {
105+
grid-template-columns: 1fr;
106+
grid-auto-rows: 2vh;
107+
grid-gap: 0.5vh;
108+
padding-right: 0.5vh;
109+
}
110+
111+
section#filesystem.list-view > div#fs_disp_container:not(.disks) > * {
112+
width: auto;
113+
height: 2vh;
114+
flex-direction: row;
115+
justify-content: flex-start;
116+
}
117+
118+
section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > svg {
119+
height: 2vh;
120+
margin: 0;
121+
width: auto;
122+
margin-right: 2%;
123+
}
124+
125+
section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h3 {
126+
max-height: unset;
127+
padding-top: .2vh;
128+
text-align: left;
129+
width: 32%;
130+
}
131+
132+
section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4 {
133+
font-size: 1.3vh;
134+
font-weight: normal;
135+
padding-top: .2vh;
136+
text-align: right;
137+
overflow: hidden;
138+
}
139+
140+
section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4:nth-of-type(1) { width: 15%; }
141+
142+
section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4:nth-of-type(2) { width: 10%; }
143+
144+
section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4:nth-of-type(3) { width: 38%; }
145+
100146
div#fs_disp_container.disks {
101147
display: flex;
102148
align-items: center;
@@ -108,7 +154,7 @@ div#fs_disp_container.disks > * {
108154
max-width: 8vw;
109155
}
110156

111-
div.fs_disp_showDisks > svg, div.fs_disp_up > svg {
157+
section#filesystem:not(.list-view) div.fs_disp_showDisks > svg, section#filesystem:not(.list-view) div.fs_disp_up > svg {
112158
width: 4vh !important;
113159
margin-bottom: 0.5vh;
114160
margin-top: 0.5vh;

src/classes/filesystem.class.js

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class FilesystemDisplay {
66
const path = require("path");
77
this.cwd = [];
88
this.iconcolor = `rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b})`;
9+
this._formatBytes = (a,b) => {if(0==a)return"0 Bytes";var c=1024,d=b||2,e=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],f=Math.floor(Math.log(a)/Math.log(c));return parseFloat((a/Math.pow(c,f)).toFixed(d))+" "+e[f]};
910
this.fileIconsMatcher = require("./assets/misc/file-icons-match.js");
1011
this.icons = require("./assets/icons/file-icons.json");
1112
this.edexIcons = {
@@ -127,14 +128,24 @@ class FilesystemDisplay {
127128

128129
this.toggleHidedotfiles = () => {
129130
if (window.settings.hideDotfiles) {
130-
container.setAttribute("class", "");
131+
container.classList.remove("hideDotfiles");
131132
window.settings.hideDotfiles = false;
132133
} else {
133-
container.setAttribute("class", "hideDotfiles");
134+
container.classList.add("hideDotfiles");
134135
window.settings.hideDotfiles = true;
135136
}
136137
};
137138

139+
this.toggleListview = () => {
140+
if (window.settings.fsListView) {
141+
container.classList.remove("list-view");
142+
window.settings.fsListView = false;
143+
} else {
144+
container.classList.add("list-view");
145+
window.settings.fsListView = true;
146+
}
147+
};
148+
138149
this.readFS = async dir => {
139150
if (this.failed === true || this._reading) return false;
140151
this._reading = true;
@@ -182,6 +193,8 @@ class FilesystemDisplay {
182193
};
183194

184195
if (typeof fstat !== "undefined") {
196+
e.lastAccessed = fstat.mtime;
197+
185198
if (fstat.isDirectory()) {
186199
e.category = "dir";
187200
e.type = "dir";
@@ -197,6 +210,7 @@ class FilesystemDisplay {
197210
if (fstat.isFile()) {
198211
e.category = "file";
199212
e.type = "file";
213+
e.size = fstat.size;
200214
}
201215
} else {
202216
e.type = "system";
@@ -332,12 +346,17 @@ class FilesystemDisplay {
332346
}
333347

334348
let icon = "";
349+
let type = "";
335350
switch(e.type) {
336351
case "showDisks":
337352
icon = this.icons.showDisks;
353+
type = "--";
354+
e.category = "showDisks";
338355
break;
339356
case "up":
340357
icon = this.icons.up;
358+
type = "--";
359+
e.category = "up";
341360
break;
342361
case "symlink":
343362
icon = this.icons.symlink;
@@ -353,35 +372,64 @@ class FilesystemDisplay {
353372
break;
354373
case "edex-theme":
355374
icon = this.edexIcons.theme;
375+
type = "eDEX-UI theme";
356376
break;
357377
case "edex-kblayout":
358378
icon = this.edexIcons.kblayout;
379+
type = "eDEX-UI keyboard layout";
359380
break;
360381
case "edex-settings":
382+
icon = this.edexIcons.settings;
383+
type = "eDEX-UI config file";
384+
break;
361385
case "system":
362386
icon = this.edexIcons.settings;
363387
break;
364388
case "edex-themesDir":
365389
icon = this.edexIcons.themesDir;
390+
type = "eDEX-UI themes folder";
366391
break;
367392
case "edex-kblayoutsDir":
368393
icon = this.edexIcons.kblayoutsDir;
394+
type = "eDEX-UI keyboards folder";
369395
break;
370396
default:
371-
icon = this.icons[this.fileIconsMatcher(e.name)];
397+
if (e.type === "dir") type = "folder";
398+
let iconName = this.fileIconsMatcher(e.name);
399+
icon = this.icons[iconName];
372400
if (typeof icon === "undefined") {
373401
if (e.type === "file") icon = this.icons.file;
374-
if (e.type === "dir") icon = this.icons.dir;
402+
if (e.type === "dir") {
403+
icon = this.icons.dir;
404+
}
375405
if (typeof icon === "undefined") icon = this.icons.other;
406+
} else {
407+
type = iconName.replace("icon-", "");
376408
}
377409
break;
378410
}
379411

412+
if (type === "") type = e.type;
413+
414+
if (typeof e.size === "number") {
415+
e.size = this._formatBytes(e.size);
416+
} else {
417+
e.size = "--";
418+
}
419+
if (typeof e.lastAccessed === "object") {
420+
e.lastAccessed = e.lastAccessed.toString().substr(0, e.lastAccessed.toString().indexOf(" ("));
421+
} else {
422+
e.lastAccessed = "--";
423+
}
424+
380425
filesDOM += `<div class="fs_disp_${e.type}${hidden} animationWait" onclick="${cmd}">
381426
<svg viewBox="0 0 ${icon.width} ${icon.height}" fill="${this.iconcolor}">
382427
${icon.svg}
383428
</svg>
384429
<h3>${e.name}</h3>
430+
<h4>${type}</h4>
431+
<h4>${e.size}</h4>
432+
<h4>${e.lastAccessed}</h4>
385433
</div>`;
386434
});
387435
this.filesContainer.innerHTML = filesDOM;

0 commit comments

Comments
 (0)