Shift+click on column Back button to return to last pinable column

This commit is contained in:
Thibaut Girka 2019-04-15 22:23:05 +02:00 committed by ThibG
parent 8d57c0e70e
commit e3c1472040
11 changed files with 61 additions and 20 deletions

View File

@ -8,10 +8,15 @@ export default class ColumnBackButton extends React.PureComponent {
router: PropTypes.object, router: PropTypes.object,
}; };
handleClick = () => { handleClick = (event) => {
// if history is exhausted, or we would leave mastodon, just go to root. // if history is exhausted, or we would leave mastodon, just go to root.
if (window.history.state) { if (window.history.state) {
this.context.router.history.goBack(); const state = this.context.router.history.location.state;
if (event.shiftKey && state && state.mastodonBackSteps) {
this.context.router.history.go(-state.mastodonBackSteps);
} else {
this.context.router.history.goBack();
}
} else { } else {
this.context.router.history.push('/'); this.context.router.history.push('/');
} }

View File

@ -8,10 +8,15 @@ export default class ColumnBackButtonSlim extends React.PureComponent {
router: PropTypes.object, router: PropTypes.object,
}; };
handleClick = () => { handleClick = (event) => {
// if history is exhausted, or we would leave mastodon, just go to root. // if history is exhausted, or we would leave mastodon, just go to root.
if (window.history.state) { if (window.history.state) {
this.context.router.history.goBack(); const state = this.context.router.history.location.state;
if (event.shiftKey && state && state.mastodonBackSteps) {
this.context.router.history.go(-state.mastodonBackSteps);
} else {
this.context.router.history.goBack();
}
} else { } else {
this.context.router.history.push('/'); this.context.router.history.push('/');
} }

View File

@ -47,10 +47,15 @@ export default class ColumnHeader extends React.PureComponent {
animatingNCD: false, animatingNCD: false,
}; };
historyBack = () => { historyBack = (skip) => {
// if history is exhausted, or we would leave mastodon, just go to root. // if history is exhausted, or we would leave mastodon, just go to root.
if (window.history.state) { if (window.history.state) {
this.context.router.history.goBack(); const state = this.context.router.history.location.state;
if (skip && state && state.mastodonBackSteps) {
this.context.router.history.go(-state.mastodonBackSteps);
} else {
this.context.router.history.goBack();
}
} else { } else {
this.context.router.history.push('/'); this.context.router.history.push('/');
} }
@ -73,8 +78,8 @@ export default class ColumnHeader extends React.PureComponent {
this.props.onMove(1); this.props.onMove(1);
} }
handleBackClick = () => { handleBackClick = (event) => {
this.historyBack(); this.historyBack(event.shiftKey);
} }
handleTransitionEnd = () => { handleTransitionEnd = () => {

View File

@ -24,7 +24,9 @@ export default class Permalink extends React.PureComponent {
if (this.context.router) { if (this.context.router) {
e.preventDefault(); e.preventDefault();
this.context.router.history.push(this.props.to); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(this.props.to, state);
} }
} }
} }

View File

@ -295,7 +295,11 @@ export default class Status extends ImmutablePureComponent {
else if (e.shiftKey) { else if (e.shiftKey) {
this.setCollapsed(true); this.setCollapsed(true);
document.getSelection().removeAllRanges(); document.getSelection().removeAllRanges();
} else router.history.push(destination); } else {
let state = {...router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
router.history.push(destination, state);
}
e.preventDefault(); e.preventDefault();
} }
} }
@ -304,7 +308,9 @@ export default class Status extends ImmutablePureComponent {
if (this.context.router && e.button === 0) { if (this.context.router && e.button === 0) {
const id = e.currentTarget.getAttribute('data-id'); const id = e.currentTarget.getAttribute('data-id');
e.preventDefault(); e.preventDefault();
this.context.router.history.push(`/accounts/${id}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/accounts/${id}`, state);
} }
} }
@ -337,11 +343,15 @@ export default class Status extends ImmutablePureComponent {
} }
handleHotkeyOpen = () => { handleHotkeyOpen = () => {
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`, state);
} }
handleHotkeyOpenProfile = () => { handleHotkeyOpenProfile = () => {
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);
} }
handleHotkeyMoveUp = e => { handleHotkeyMoveUp = e => {

View File

@ -150,7 +150,9 @@ export default class StatusActionBar extends ImmutablePureComponent {
} }
handleOpen = () => { handleOpen = () => {
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`, state);
} }
handleEmbed = () => { handleEmbed = () => {

View File

@ -20,7 +20,9 @@ export default class MovedNote extends ImmutablePureComponent {
handleAccountClick = e => { handleAccountClick = e => {
if (e.button === 0) { if (e.button === 0) {
e.preventDefault(); e.preventDefault();
this.context.router.history.push(`/accounts/${this.props.to.get('id')}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/accounts/${this.props.to.get('id')}`, state);
} }
e.stopPropagation(); e.stopPropagation();

View File

@ -42,7 +42,9 @@ export default class DetailedStatus extends ImmutablePureComponent {
handleAccountClick = (e) => { handleAccountClick = (e) => {
if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) { if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {
e.preventDefault(); e.preventDefault();
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);
} }
e.stopPropagation(); e.stopPropagation();
@ -51,7 +53,9 @@ export default class DetailedStatus extends ImmutablePureComponent {
parseClick = (e, destination) => { parseClick = (e, destination) => {
if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) { if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {
e.preventDefault(); e.preventDefault();
this.context.router.history.push(destination); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(destination, state);
} }
e.stopPropagation(); e.stopPropagation();

View File

@ -331,7 +331,9 @@ export default class Status extends ImmutablePureComponent {
} }
handleHotkeyOpenProfile = () => { handleHotkeyOpenProfile = () => {
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);
} }
handleMoveUp = id => { handleMoveUp = id => {

View File

@ -40,7 +40,9 @@ export default class BoostModal extends ImmutablePureComponent {
if (e.button === 0) { if (e.button === 0) {
e.preventDefault(); e.preventDefault();
this.props.onClose(); this.props.onClose();
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);
} }
} }

View File

@ -40,7 +40,9 @@ export default class FavouriteModal extends ImmutablePureComponent {
if (e.button === 0) { if (e.button === 0) {
e.preventDefault(); e.preventDefault();
this.props.onClose(); this.props.onClose();
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`); let state = {...this.context.router.history.location.state};
state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;
this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`, state);
} }
} }