Skip to content

Commit f2df991

Browse files
author
topboy
committed
history navigation when ui.is_touch
1 parent b2172de commit f2df991

File tree

3 files changed

+89
-27
lines changed

3 files changed

+89
-27
lines changed

src/components/App.vue

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
'kiwi-workspace--disconnected': network && network.state !== 'connected'
2121
}"
2222
class="kiwi-workspace"
23-
@click="stateBrowserDrawOpen = false"
23+
@click="hideStateBrowser()"
2424
>
2525
<div class="kiwi-workspace-background" />
2626

@@ -225,15 +225,40 @@ export default {
225225
this.$state.clearNickColours();
226226
});
227227
},
228+
hideStateBrowser() {
229+
if (!this.stateBrowserDrawOpen) return;
230+
if (this.$state.ui.is_touch) {
231+
this.$state.history.go(-1);
232+
} else {
233+
this.stateBrowserDrawOpen = false;
234+
}
235+
this.$state.stateBrowserDrawOpen = this.stateBrowserDrawOpen;
236+
},
237+
showStateBrowser() {
238+
if (this.stateBrowserDrawOpen) return;
239+
if (this.$state.ui.is_touch) {
240+
this.$state.history.push({
241+
enter: () => { this.stateBrowserDrawOpen = true; },
242+
leave: () => { this.stateBrowserDrawOpen = false; },
243+
query: {
244+
statebrowser: 'open',
245+
},
246+
});
247+
} else {
248+
this.stateBrowserDrawOpen = true;
249+
}
250+
this.$state.stateBrowserDrawOpen = this.stateBrowserDrawOpen;
251+
},
228252
initStateBrowser() {
229253
this.listen(this.$state, 'statebrowser.toggle', () => {
230-
this.stateBrowserDrawOpen = !this.stateBrowserDrawOpen;
254+
const setting = !this.stateBrowserDrawOpen;
255+
setting ? this.showStateBrowser() : this.hideStateBrowser();
231256
});
232257
this.listen(this.$state, 'statebrowser.show', () => {
233-
this.stateBrowserDrawOpen = true;
258+
this.showStateBrowser();
234259
});
235260
this.listen(this.$state, 'statebrowser.hide', () => {
236-
this.stateBrowserDrawOpen = false;
261+
this.hideStateBrowser();
237262
});
238263
},
239264
initMediaviewer() {

src/libs/History.js

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,13 @@ export class History {
1515
}
1616

1717
go(n) {
18+
if (this.currentPage + n <= 0) {
19+
this.setPage(0, true);
20+
return;
21+
}
1822
this.log('go', n);
19-
return this.history.go(n);
23+
this.log('source', new Error().stack);
24+
this.history.go(n);
2025
}
2126

2227
log(...args) {
@@ -28,37 +33,42 @@ export class History {
2833
// eslint-disable-next-line
2934
window.addEventListener('popstate', (e) => {
3035
const page = e?.state?.page;
31-
this.log('popstate', e);
32-
if (page === undefined) {
33-
this.currentPage = 0;
34-
this.history.replaceState({}, '', this.baseUrl + '/');
35-
const state = getState();
36-
const net = state.getActiveNetwork();
37-
const buf = state.getActiveBuffer();
38-
const serverBuffer = net.serverBuffer();
39-
if (!state.activeComponent && buf === serverBuffer) {
40-
this.history.go();
41-
return;
42-
}
43-
state.$emit('active.component');
44-
state.setActiveBuffer(net.id, serverBuffer.name || '*', false);
45-
// e.preventDefault();
36+
if (page === 0 && this.currentPage === 0) {
37+
this.history.go();
4638
return;
4739
}
40+
this.log('popstate', e);
41+
const state = getState();
42+
const net = state.getActiveNetwork();
43+
const buf = state.getActiveBuffer();
44+
const serverBuffer = net.serverBuffer();
45+
if (
46+
!state.stateBrowserDrawOpen &&
47+
!state.activeComponent &&
48+
buf === serverBuffer
49+
) {
50+
this.history.go();
51+
} else if (page === undefined) {
52+
this.setPage(0, true);
53+
}
4854
this.setPage(page);
4955
});
5056
this.prepared = true;
5157
}
5258
}
5359

54-
setPage(page) {
60+
setPage(page, setUrl = false) {
5561
this.prepare();
62+
this.log('source', new Error().stack);
5663
this.log('setting page', page);
5764
const previousHandler = this.handlers[this.currentPage];
5865
const handler = this.handlers[page];
5966
if (page !== undefined) {
6067
this.currentPage = page;
6168
}
69+
if (setUrl) {
70+
this.doReplace(handler);
71+
}
6272
previousHandler && previousHandler.leave();
6373
handler && handler.enter();
6474
}
@@ -101,7 +111,7 @@ export class History {
101111
this.history.pushState({
102112
page,
103113
}, '', url);
104-
this.handlers.push({ enter, leave, path: '' + url });
114+
this.handlers.push({ enter, leave, url });
105115
this.setPage(page);
106116
}
107117

@@ -148,7 +158,7 @@ export class History {
148158
page,
149159
}, '', url);
150160
const previousHandler = this.handlers[page];
151-
const handler = { enter, leave, path: '' + url };
161+
const handler = { enter, leave, url };
152162
this.handlers[page] = handler;
153163
previousHandler && previousHandler.leave();
154164
handler.enter();

src/libs/SidebarState.js

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,37 @@ export default function useSidebarState() {
2121
const api = GlobalApi.singleton();
2222
api.on('sidebar.component', (component, props) => {
2323
resetSidebarState();
24-
sidebarOpen.value = !!component;
25-
activeComponent.value = component;
26-
activeComponentProps.value = props || {};
27-
sidebarSection.value = sidebarOpen.value ? 'component' : '';
24+
const open = !!component;
25+
const state = getState();
26+
if (state.ui.is_touch) {
27+
const leave = () => {
28+
sidebarOpen.value = false;
29+
activeComponent.value = null;
30+
activeComponentProps.value = {};
31+
sidebarSection.value = '';
32+
};
33+
if (open) {
34+
state.history.push({
35+
enter: () => {
36+
sidebarOpen.value = true;
37+
activeComponent.value = component;
38+
activeComponentProps.value = props;
39+
sidebarSection.value = 'component';
40+
},
41+
leave,
42+
query: {
43+
sidebar: 'open',
44+
},
45+
});
46+
} else {
47+
state.history.go(-1);
48+
}
49+
} else {
50+
sidebarOpen.value = open;
51+
activeComponent.value = component;
52+
activeComponentProps.value = props || {};
53+
sidebarSection.value = sidebarOpen.value ? 'component' : '';
54+
}
2855
});
2956

3057
// Allow forcing the sidebar open at startup

0 commit comments

Comments
 (0)