1
0
mirror of https://github.com/flarum/core.git synced 2025-07-25 18:51:40 +02:00

Combine route/query params in route construction

One params object is passed, and then route params are extracted into
the route and the rest are appended as query params.
This commit is contained in:
Toby Zerner
2015-05-02 08:21:40 +09:30
parent 72be607a17
commit 68c0cdb1a9
10 changed files with 20 additions and 17 deletions

View File

@@ -62,7 +62,7 @@ export default class ComposerDiscussion extends ComposerBody {
app.store.createRecord('discussions').save(data).then(discussion => { app.store.createRecord('discussions').save(data).then(discussion => {
app.composer.hide(); app.composer.hide();
app.cache.discussionList.discussions().unshift(discussion); app.cache.discussionList.discussions().unshift(discussion);
m.route(app.route('discussion', discussion)); m.route(app.route('discussion', { id: discussion.id(), slug: discussion.slug() }));
}, response => { }, response => {
this.loading(false); this.loading(false);
m.redraw(); m.redraw();

View File

@@ -115,7 +115,7 @@ export default class DiscussionList extends Component {
var controls = this.controlItems(discussion).toArray(); 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; var active = m.route().substr(0, discussionRoute.length) === discussionRoute;
return m('li.discussion-summary'+(isUnread ? '.unread' : '')+(active ? '.active' : ''), {key: discussion.id()}, [ 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' menuClass: 'pull-right'
}) : '', }) : '',
m('a.author', { m('a.author', {
href: app.route('user', startUser), href: app.route('user', { username: startUser.username() }),
config: function(element, isInitialized, context) { config: function(element, isInitialized, context) {
$(element).tooltip({ placement: 'right' }) $(element).tooltip({ placement: 'right' })
m.route.call(this, element) m.route.call(this, element)

View File

@@ -103,7 +103,7 @@ export default class DiscussionPage extends Component {
// stream to jump to the new 'near' param. // stream to jump to the new 'near' param.
var discussion = this.discussion(); var discussion = this.discussion();
if (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) { if (m.route().substr(0, discussionRoute.length) === discussionRoute) {
e.preventDefault(); e.preventDefault();
if (m.route.param('near') != this.currentNear) { if (m.route.param('near') != this.currentNear) {

View File

@@ -143,7 +143,7 @@ export default class IndexPage extends Component {
items.add('allDiscussions', items.add('allDiscussions',
NavItem.component({ NavItem.component({
href: app.route('index', {}, params), href: app.route('index', params),
label: 'All Discussions', label: 'All Discussions',
icon: 'comments-o' icon: 'comments-o'
}) })

View File

@@ -33,7 +33,7 @@ export default class PostDiscussionRenamed extends Component {
}) : '', }) : '',
icon('pencil post-icon'), icon('pencil post-icon'),
m('div.post-activity-info', [ 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), '.' ' changed the title from ', m('strong.old-title', oldTitle), ' to ', m('strong.new-title', newTitle), '.'
]), ]),
m('div.post-activity-time', humanTime(post.time())) m('div.post-activity-time', humanTime(post.time()))

View File

@@ -21,7 +21,7 @@ export default class PostHeaderUser extends Component {
return m('div.post-user', {config: this.onload.bind(this)}, [ return m('div.post-user', {config: this.onload.bind(this)}, [
m('h3', m('h3',
user ? [ 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), avatar(user),
username(user) username(user)
]), ]),

View File

@@ -27,7 +27,7 @@ export default class UserCard extends Component {
m('div.user-profile', [ m('div.user-profile', [
m('h2.user-identity', this.props.editable m('h2.user-identity', this.props.editable
? [AvatarEditor.component({user, className: 'user-avatar'}), username(user)] ? [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'}), avatar(user, {className: 'user-avatar'}),
username(user) username(user)
]) ])

View File

@@ -26,7 +26,7 @@ export default class UserDropdown extends Component {
ActionButton.component({ ActionButton.component({
icon: 'user', icon: 'user',
label: 'Profile', label: 'Profile',
href: app.route('user', user), href: app.route('user', {username: user.username()}),
config: m.route config: m.route
}) })
); );

View File

@@ -86,7 +86,7 @@ export default class UserPage extends Component {
items.add('activity', items.add('activity',
NavItem.component({ NavItem.component({
href: app.route('user.activity', user), href: app.route('user.activity', {username: user.username()}),
label: 'Activity', label: 'Activity',
icon: 'user' icon: 'user'
}) })
@@ -94,7 +94,7 @@ export default class UserPage extends Component {
items.add('discussions', items.add('discussions',
NavItem.component({ NavItem.component({
href: app.route('user.discussions', user), href: app.route('user.discussions', {username: user.username()}),
label: 'Discussions', label: 'Discussions',
icon: 'reorder', icon: 'reorder',
badge: user.discussionsCount() badge: user.discussionsCount()
@@ -103,7 +103,7 @@ export default class UserPage extends Component {
items.add('posts', items.add('posts',
NavItem.component({ NavItem.component({
href: app.route('user.posts', user), href: app.route('user.posts', {username: user.username()}),
label: 'Posts', label: 'Posts',
icon: 'comment-o', icon: 'comment-o',
badge: user.commentsCount() badge: user.commentsCount()

View File

@@ -10,11 +10,14 @@ class App {
this.initializers.toArray().forEach((initializer) => initializer(this)); this.initializers.toArray().forEach((initializer) => initializer(this));
} }
route(name, args, queryParams) { route(name, params) {
var queryString = m.route.buildQueryString(queryParams); var url = this.routes[name][0].replace(/:([^\/]+)/g, function(m, t) {
return this.routes[name][0].replace(/:([^\/]+)/g, function(m, t) { var value = params[t];
return typeof args[t] === 'function' ? args[t]() : args[t]; delete params[t];
}) + (queryString ? '?'+queryString : ''); return value;
});
var queryString = m.route.buildQueryString(params);
return url+(queryString ? '?'+queryString : '');
} }
} }