diff --git a/client/js/controllers/post_controller.js b/client/js/controllers/post_controller.js index a9c6dd20..a9683f22 100644 --- a/client/js/controllers/post_controller.js +++ b/client/js/controllers/post_controller.js @@ -1,5 +1,6 @@ 'use strict'; +const router = require('../router.js'); const api = require('../api.js'); const misc = require('../util/misc.js'); const settings = require('../models/settings.js'); @@ -11,9 +12,10 @@ const PostView = require('../views/post_view.js'); const EmptyView = require('../views/empty_view.js'); class PostController { - constructor(id, editMode, parameters) { + constructor(id, editMode, ctx) { topNavigation.activate('posts'); + let parameters = ctx.parameters; Promise.all([ Post.get(id), PostList.getAround( @@ -21,6 +23,14 @@ class PostController { parameters ? parameters.query : '')), ]).then(responses => { const [post, aroundResponse] = responses; + + // remove junk from query, but save it into history so that it can + // be still accessed after history navigation / page refresh + if (parameters.query) { + ctx.state.parameters = parameters; + router.replace('/post/' + id, ctx.state, false); + } + this._post = post; this._view = new PostView({ post: post, @@ -159,7 +169,10 @@ module.exports = router => { '/post/:id/:parameters?', (ctx, next) => { misc.parseUrlParametersRoute(ctx, next); }, (ctx, next) => { - ctx.controller = new PostController( - ctx.parameters.id, false, ctx.parameters); + // restore parameters from history state + if (ctx.state.parameters) { + Object.assign(ctx.parameters, ctx.state.parameters); + } + ctx.controller = new PostController(ctx.parameters.id, false, ctx); }); }; diff --git a/client/js/router.js b/client/js/router.js index 490b804d..cfe405f1 100644 --- a/client/js/router.js +++ b/client/js/router.js @@ -5,6 +5,7 @@ // - refactored to classes // - simplified method chains // - added ability to call .save() in .exit() without side effects +// - page refresh recovers state from history const pathToRegexp = require('path-to-regexp'); const clickEvent = document.ontouchstart ? 'touchstart' : 'click'; @@ -121,7 +122,7 @@ class Router { window.addEventListener('popstate', this._onPopState, false); document.addEventListener(clickEvent, this._onClick, false); const url = location.pathname + location.search + location.hash; - return this.replace(url, null, true); + return this.replace(url, history.state, true); } stop() {