client/posts: strip junk from post permalinks
Thanks for inspiration, StackExchange
This commit is contained in:
		
							parent
							
								
									5ac5eb5503
								
							
						
					
					
						commit
						8901658c17
					
				@ -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);
 | 
			
		||||
        });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -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() {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user