invert order
Massimo Melina committed
Jan 10, 2022 at 20:35 UTC
3e6f9b3b1b1306d39c851f89220ba0ce3e1f2faa
4 files changed
+14
-6
frontend/src/options.ts
+6
@@ -18,6 +18,12 @@ export function showOptions (){
18
close(state.sortBy = x)
19
}
20
}, x, ' ', snap.sortBy===x && hIcon('check'))),
21
+ h(Checkbox, {
22
+ value: snap.invertOrder,
23
+ onChange(v) {
24
+ state.invertOrder = v
25
+ }
26
+ }, 'Invert order'),
27
h(Checkbox, {
28
value: snap.foldersFirst,
29
onChange(v) {
frontend/src/state.ts
+2
@@ -11,6 +11,7 @@ export const state = proxy<{
11
remoteSearch: string,
12
filteredEntries: number,
13
sortBy: string,
14
+ invertOrder: boolean,
15
foldersFirst: boolean,
16
theme: string,
17
}>({
@@ -20,6 +21,7 @@ export const state = proxy<{
21
remoteSearch: '',
22
filteredEntries: -1,
23
sortBy: 'name',
24
+ invertOrder: false,
25
foldersFirst: true,
26
theme: '',
27
})
frontend/src/useFetchList.ts
+5
-4
@@ -15,10 +15,10 @@ export default function useFetchList() {
15
const [reload, forcer] = useForceUpdate()
16
17
// reorder in case sort criteria change
18
- const { sortBy, foldersFirst } = snap
18
+ const { sortBy, invertOrder, foldersFirst } = snap
19
useEffect(()=>{
20
setList(sort(list))
21
- }, [sortBy, foldersFirst])
21
+ }, [sortBy, invertOrder, foldersFirst])
22
23
useEffect(()=>{
24
const loc = window.location
@@ -96,14 +96,15 @@ function sort(list: DirList) {
96
const bySize = sortBy === 'size'
97
const byExt = sortBy === 'extension'
98
const byTime = sortBy === 'time'
99
+ const invert = state.invertOrder ? -1 : 1
100
return list.sort((a,b) =>
101
foldersFirst && -compare(a.isFolder, b.isFolder)
101
- || (bySize ? compare(a.s||0, b.s||0)
102
+ || invert*(bySize ? compare(a.s||0, b.s||0)
103
: byExt ? localCompare(a.ext, b.ext)
104
: byTime ? compare(a.t, b.t)
105
: 0
106
)
106
- || localCompare(a.n, b.n) // fallback to name/path
107
+ || invert*localCompare(a.n, b.n) // fallback to name/path
108
)
109
}
110
todo.md
+1
-2
@@ -1,6 +1,5 @@
1
# To do
2
-- inverted order
3
-- download counter
2
+- download counter (as plugin?)
3
- update tests to SRP login
4
- anti-csrf
5
- upload