37dc96b71b
So far, glitch-soc used history.length to decide whether to call `goBack()` or go to / in order to not leave the webUI. This made clicking the “Back” button go to the “Getting started” column instead of going back in the browser's history when such an action would leave the web UI, but also when: - The WebUI is refreshed (F5) - A tab is restored - The history length reaches its maximum (e.g., 50 in Firefox) This commit fixes these shortcomings by checking `window.history.state`. Indeed, we only want to go back in the browser's history when the current location has been reached from within the WebUI, which only happens via `pushState` as far as I know. Since browser store the serialized state in the browser history, this also survives page reload and session restoration.
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
import * as registerPushNotifications from 'flavours/glitch/actions/push_notifications';
|
|
import { default as Mastodon, store } from 'flavours/glitch/containers/mastodon';
|
|
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
import ready from './ready';
|
|
|
|
const perf = require('./performance');
|
|
|
|
function main() {
|
|
perf.start('main()');
|
|
|
|
if (window.history && history.replaceState) {
|
|
const { pathname, search, hash } = window.location;
|
|
const path = pathname + search + hash;
|
|
if (!(/^\/web[$/]/).test(path)) {
|
|
history.replaceState(null, document.title, `/web${path}`);
|
|
}
|
|
}
|
|
|
|
ready(() => {
|
|
const mountNode = document.getElementById('mastodon');
|
|
const props = JSON.parse(mountNode.getAttribute('data-props'));
|
|
|
|
ReactDOM.render(<Mastodon {...props} />, mountNode);
|
|
if (process.env.NODE_ENV === 'production') {
|
|
// avoid offline in dev mode because it's harder to debug
|
|
require('offline-plugin/runtime').install();
|
|
store.dispatch(registerPushNotifications.register());
|
|
}
|
|
perf.stop('main()');
|
|
});
|
|
}
|
|
|
|
export default main;
|