diff --git a/framework/core/js/forum/src/components/composer-discussion.js b/framework/core/js/forum/src/components/composer-discussion.js index 244f35b06..f6f31d0d5 100644 --- a/framework/core/js/forum/src/components/composer-discussion.js +++ b/framework/core/js/forum/src/components/composer-discussion.js @@ -62,7 +62,7 @@ export default class ComposerDiscussion extends ComposerBody { app.store.createRecord('discussions').save(data).then(discussion => { app.composer.hide(); app.cache.discussionList.discussions().unshift(discussion); - m.route(app.route('discussion', discussion)); + m.route(app.route('discussion', { id: discussion.id(), slug: discussion.slug() })); }, response => { this.loading(false); m.redraw(); diff --git a/framework/core/js/forum/src/components/discussion-list.js b/framework/core/js/forum/src/components/discussion-list.js index cff6a7ead..deb456076 100644 --- a/framework/core/js/forum/src/components/discussion-list.js +++ b/framework/core/js/forum/src/components/discussion-list.js @@ -115,7 +115,7 @@ export default class DiscussionList extends Component { var controls = this.controlItems(discussion).toArray(); - var discussionRoute = app.route('discussion', discussion); + var discussionRoute = app.route('discussion', { id: discussion.id(), slug: discussion.slug() }); var active = m.route().substr(0, discussionRoute.length) === discussionRoute; return m('li.discussion-summary'+(isUnread ? '.unread' : '')+(active ? '.active' : ''), {key: discussion.id()}, [ @@ -126,7 +126,7 @@ export default class DiscussionList extends Component { menuClass: 'pull-right' }) : '', m('a.author', { - href: app.route('user', startUser), + href: app.route('user', { username: startUser.username() }), config: function(element, isInitialized, context) { $(element).tooltip({ placement: 'right' }) m.route.call(this, element) diff --git a/framework/core/js/forum/src/components/discussion-page.js b/framework/core/js/forum/src/components/discussion-page.js index e49c90214..12ec4e96c 100644 --- a/framework/core/js/forum/src/components/discussion-page.js +++ b/framework/core/js/forum/src/components/discussion-page.js @@ -103,7 +103,7 @@ export default class DiscussionPage extends Component { // stream to jump to the new 'near' param. var discussion = this.discussion(); if (discussion) { - var discussionRoute = app.route('discussion', discussion); + var discussionRoute = app.route('discussion', { id: discussion.id(), slug: discussion.slug() }); if (m.route().substr(0, discussionRoute.length) === discussionRoute) { e.preventDefault(); if (m.route.param('near') != this.currentNear) { diff --git a/framework/core/js/forum/src/components/index-page.js b/framework/core/js/forum/src/components/index-page.js index 99d38f2f0..baa79fce4 100644 --- a/framework/core/js/forum/src/components/index-page.js +++ b/framework/core/js/forum/src/components/index-page.js @@ -143,7 +143,7 @@ export default class IndexPage extends Component { items.add('allDiscussions', NavItem.component({ - href: app.route('index', {}, params), + href: app.route('index', params), label: 'All Discussions', icon: 'comments-o' }) diff --git a/framework/core/js/forum/src/components/post-discussion-renamed.js b/framework/core/js/forum/src/components/post-discussion-renamed.js index eb7457429..8d372f1b1 100644 --- a/framework/core/js/forum/src/components/post-discussion-renamed.js +++ b/framework/core/js/forum/src/components/post-discussion-renamed.js @@ -33,7 +33,7 @@ export default class PostDiscussionRenamed extends Component { }) : '', icon('pencil post-icon'), m('div.post-activity-info', [ - m('a.post-user', {href: app.route('user', post.user()), config: m.route}, username(post.user())), + m('a.post-user', {href: app.route('user', { username: post.user().username() }), config: m.route}, username(post.user())), ' changed the title from ', m('strong.old-title', oldTitle), ' to ', m('strong.new-title', newTitle), '.' ]), m('div.post-activity-time', humanTime(post.time())) diff --git a/framework/core/js/forum/src/components/post-header-user.js b/framework/core/js/forum/src/components/post-header-user.js index e92fca14a..4ec2dfa47 100644 --- a/framework/core/js/forum/src/components/post-header-user.js +++ b/framework/core/js/forum/src/components/post-header-user.js @@ -21,7 +21,7 @@ export default class PostHeaderUser extends Component { return m('div.post-user', {config: this.onload.bind(this)}, [ m('h3', user ? [ - m('a', {href: app.route('user', user), config: m.route}, [ + m('a', {href: app.route('user', {username: user.username()}), config: m.route}, [ avatar(user), username(user) ]), diff --git a/framework/core/js/forum/src/components/user-card.js b/framework/core/js/forum/src/components/user-card.js index 4a25a3e19..6536d62b8 100644 --- a/framework/core/js/forum/src/components/user-card.js +++ b/framework/core/js/forum/src/components/user-card.js @@ -27,7 +27,7 @@ export default class UserCard extends Component { m('div.user-profile', [ m('h2.user-identity', this.props.editable ? [AvatarEditor.component({user, className: 'user-avatar'}), username(user)] - : m('a', {href: app.route('user', user), config: m.route}, [ + : m('a', {href: app.route('user', {username: user.username()}), config: m.route}, [ avatar(user, {className: 'user-avatar'}), username(user) ]) diff --git a/framework/core/js/forum/src/components/user-dropdown.js b/framework/core/js/forum/src/components/user-dropdown.js index c475183f8..bef7b0769 100644 --- a/framework/core/js/forum/src/components/user-dropdown.js +++ b/framework/core/js/forum/src/components/user-dropdown.js @@ -26,7 +26,7 @@ export default class UserDropdown extends Component { ActionButton.component({ icon: 'user', label: 'Profile', - href: app.route('user', user), + href: app.route('user', {username: user.username()}), config: m.route }) ); diff --git a/framework/core/js/forum/src/components/user-page.js b/framework/core/js/forum/src/components/user-page.js index 919335a16..8f62c65f1 100644 --- a/framework/core/js/forum/src/components/user-page.js +++ b/framework/core/js/forum/src/components/user-page.js @@ -86,7 +86,7 @@ export default class UserPage extends Component { items.add('activity', NavItem.component({ - href: app.route('user.activity', user), + href: app.route('user.activity', {username: user.username()}), label: 'Activity', icon: 'user' }) @@ -94,7 +94,7 @@ export default class UserPage extends Component { items.add('discussions', NavItem.component({ - href: app.route('user.discussions', user), + href: app.route('user.discussions', {username: user.username()}), label: 'Discussions', icon: 'reorder', badge: user.discussionsCount() @@ -103,7 +103,7 @@ export default class UserPage extends Component { items.add('posts', NavItem.component({ - href: app.route('user.posts', user), + href: app.route('user.posts', {username: user.username()}), label: 'Posts', icon: 'comment-o', badge: user.commentsCount() diff --git a/framework/core/js/lib/utils/app.js b/framework/core/js/lib/utils/app.js index 46200f2ca..e51ed4a18 100644 --- a/framework/core/js/lib/utils/app.js +++ b/framework/core/js/lib/utils/app.js @@ -10,11 +10,14 @@ class App { this.initializers.toArray().forEach((initializer) => initializer(this)); } - route(name, args, queryParams) { - var queryString = m.route.buildQueryString(queryParams); - return this.routes[name][0].replace(/:([^\/]+)/g, function(m, t) { - return typeof args[t] === 'function' ? args[t]() : args[t]; - }) + (queryString ? '?'+queryString : ''); + route(name, params) { + var url = this.routes[name][0].replace(/:([^\/]+)/g, function(m, t) { + var value = params[t]; + delete params[t]; + return value; + }); + var queryString = m.route.buildQueryString(params); + return url+(queryString ? '?'+queryString : ''); } }