mirror of
https://github.com/discourse/discourse.git
synced 2025-03-25 14:55:48 +08:00
UX: Default user facing routes to /g
instead of /groups
. (#7042)
This commit is contained in:
parent
07b856700d
commit
46e62c0d22
@ -48,7 +48,7 @@ export default Ember.Controller.extend(CanCheckEmails, {
|
||||
return automaticGroups
|
||||
.map(group => {
|
||||
const name = Ember.String.htmlSafe(group.name);
|
||||
return `<a href="/groups/${name}">${name}</a>`;
|
||||
return `<a href="/g/${name}">${name}</a>`;
|
||||
})
|
||||
.join(", ");
|
||||
},
|
||||
|
@ -35,7 +35,7 @@ export default Ember.Component.extend(CardContentsBase, CleansUp, {
|
||||
|
||||
@computed("group")
|
||||
groupPath(group) {
|
||||
return `${Discourse.BaseUri}/groups/${group.name}`;
|
||||
return `${Discourse.BaseUri}/g/${group.name}`;
|
||||
},
|
||||
|
||||
_showCallback(username, $target) {
|
||||
|
@ -547,18 +547,19 @@ export default Ember.Controller.extend({
|
||||
) {
|
||||
groups.forEach(group => {
|
||||
let body;
|
||||
const groupLink = Discourse.getURL(`/g/${group.name}/members`);
|
||||
|
||||
if (group.max_mentions < group.user_count) {
|
||||
body = I18n.t("composer.group_mentioned_limit", {
|
||||
group: "@" + group.name,
|
||||
max: group.max_mentions,
|
||||
group_link: Discourse.getURL(`/groups/${group.name}/members`)
|
||||
group_link: groupLink
|
||||
});
|
||||
} else {
|
||||
body = I18n.t("composer.group_mentioned", {
|
||||
group: "@" + group.name,
|
||||
count: group.user_count,
|
||||
group_link: Discourse.getURL(`/groups/${group.name}/members`)
|
||||
group_link: groupLink
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,8 @@ export default {
|
||||
// URL rewrites (usually due to refactoring)
|
||||
DiscourseURL.rewrite(/^\/category\//, "/c/");
|
||||
DiscourseURL.rewrite(/^\/group\//, "/groups/");
|
||||
DiscourseURL.rewrite(/^\/groups$/, "/g");
|
||||
DiscourseURL.rewrite(/^\/groups\//, "/g/");
|
||||
DiscourseURL.rewrite(/\/private-messages\/$/, "/messages/");
|
||||
DiscourseURL.rewrite(/^\/users$/, "/u");
|
||||
DiscourseURL.rewrite(/^\/users\//, "/u/");
|
||||
|
@ -16,7 +16,7 @@ function replaceSpan($e, username, opts) {
|
||||
extraClass = "notify";
|
||||
}
|
||||
$e.replaceWith(
|
||||
`<a href='${Discourse.getURL("/groups/") +
|
||||
`<a href='${Discourse.getURL("/g/") +
|
||||
username}' class='mention-group ${extraClass}' ${extra}>@${username}</a>`
|
||||
);
|
||||
} else {
|
||||
|
@ -60,36 +60,32 @@ export default function() {
|
||||
this.route("categoryWithID", { path: "/c/:parentSlug/:slug/:id" });
|
||||
});
|
||||
|
||||
this.route("groups", { resetNamespace: true }, function() {
|
||||
this.route("groups", { resetNamespace: true, path: "/g" }, function() {
|
||||
this.route("new", { path: "custom/new" });
|
||||
});
|
||||
|
||||
this.route(
|
||||
"group",
|
||||
{ path: "/groups/:name", resetNamespace: true },
|
||||
function() {
|
||||
this.route("group", { path: "/g/:name", resetNamespace: true }, function() {
|
||||
this.route("members");
|
||||
|
||||
this.route("activity", function() {
|
||||
this.route("posts");
|
||||
this.route("topics");
|
||||
this.route("mentions");
|
||||
});
|
||||
|
||||
this.route("manage", function() {
|
||||
this.route("profile");
|
||||
this.route("membership");
|
||||
this.route("interaction");
|
||||
this.route("members");
|
||||
this.route("logs");
|
||||
});
|
||||
|
||||
this.route("activity", function() {
|
||||
this.route("posts");
|
||||
this.route("topics");
|
||||
this.route("mentions");
|
||||
});
|
||||
|
||||
this.route("manage", function() {
|
||||
this.route("profile");
|
||||
this.route("membership");
|
||||
this.route("interaction");
|
||||
this.route("members");
|
||||
this.route("logs");
|
||||
});
|
||||
|
||||
this.route("messages", function() {
|
||||
this.route("inbox");
|
||||
this.route("archive");
|
||||
});
|
||||
}
|
||||
);
|
||||
this.route("messages", function() {
|
||||
this.route("inbox");
|
||||
this.route("archive");
|
||||
});
|
||||
});
|
||||
|
||||
// User routes
|
||||
this.route("users", { resetNamespace: true, path: "/u" });
|
||||
|
@ -26,7 +26,7 @@ createWidget("topic-header-participant", {
|
||||
url = user.get("path");
|
||||
} else {
|
||||
content = [iconNode("users")];
|
||||
url = Discourse.getURL(`/groups/${group.name}`);
|
||||
url = Discourse.getURL(`/g/${group.name}`);
|
||||
content.push(h("span", group.name));
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ export function actionDescriptionHtml(actionCode, createdAt, username) {
|
||||
var who = "";
|
||||
if (username) {
|
||||
if (actionCode === "invited_group" || actionCode === "removed_group") {
|
||||
who = `<a class="mention-group" href="/groups/${username}">@${username}</a>`;
|
||||
who = `<a class="mention-group" href="/g/${username}">@${username}</a>`;
|
||||
} else {
|
||||
who = `<a class="mention" href="${userPath(username)}">@${username}</a>`;
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ createWidget("poster-name-title", {
|
||||
html(attrs) {
|
||||
let titleContents = attrs.title;
|
||||
if (attrs.primaryGroupName) {
|
||||
const href = Discourse.getURL(`/groups/${attrs.primaryGroupName}`);
|
||||
const href = Discourse.getURL(`/g/${attrs.primaryGroupName}`);
|
||||
titleContents = h(
|
||||
"a.user-group",
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ createWidget("pm-map-user-group", {
|
||||
tagName: "div.user.group",
|
||||
|
||||
transform(attrs) {
|
||||
return { href: Discourse.getURL(`/groups/${attrs.group.name}`) };
|
||||
return { href: Discourse.getURL(`/g/${attrs.group.name}`) };
|
||||
},
|
||||
|
||||
template: hbs`
|
||||
|
@ -34,7 +34,7 @@ export default ComboBoxComponent.extend({
|
||||
(this.currentUser && this.currentUser.get("staff"))
|
||||
) {
|
||||
return `
|
||||
<a href="${Discourse.getURL("/groups")}" class="group-dropdown-filter">
|
||||
<a href="${Discourse.getURL("/g")}" class="group-dropdown-filter">
|
||||
${I18n.t("groups.index.all").toLowerCase()}
|
||||
</a>
|
||||
`.htmlSafe();
|
||||
@ -43,7 +43,7 @@ export default ComboBoxComponent.extend({
|
||||
|
||||
actions: {
|
||||
onSelect(groupName) {
|
||||
DiscourseURL.routeTo(Discourse.getURL(`/groups/${groupName}`));
|
||||
DiscourseURL.routeTo(Discourse.getURL(`/g/${groupName}`));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -482,45 +482,47 @@ Discourse::Application.routes.draw do
|
||||
get "posts/:username/deleted" => "posts#deleted_posts", constraints: { username: RouteFormat.username }
|
||||
get "posts/:username/flagged" => "posts#flagged_posts", constraints: { username: RouteFormat.username }
|
||||
|
||||
resources :groups, id: RouteFormat.username do
|
||||
get "posts.rss" => "groups#posts_feed", format: :rss
|
||||
get "mentions.rss" => "groups#mentions_feed", format: :rss
|
||||
%w{groups g}.each do |root_path|
|
||||
resources :groups, id: RouteFormat.username, path: root_path do
|
||||
get "posts.rss" => "groups#posts_feed", format: :rss
|
||||
get "mentions.rss" => "groups#mentions_feed", format: :rss
|
||||
|
||||
get 'members'
|
||||
get 'posts'
|
||||
get 'mentions'
|
||||
get 'counts'
|
||||
get 'mentionable'
|
||||
get 'messageable'
|
||||
get 'logs' => 'groups#histories'
|
||||
get 'members'
|
||||
get 'posts'
|
||||
get 'mentions'
|
||||
get 'counts'
|
||||
get 'mentionable'
|
||||
get 'messageable'
|
||||
get 'logs' => 'groups#histories'
|
||||
|
||||
collection do
|
||||
get "check-name" => 'groups#check_name'
|
||||
get 'custom/new' => 'groups#new', constraints: AdminConstraint.new
|
||||
get "search" => "groups#search"
|
||||
end
|
||||
|
||||
member do
|
||||
%w{
|
||||
activity
|
||||
activity/:filter
|
||||
messages
|
||||
messages/inbox
|
||||
messages/archive
|
||||
manage
|
||||
manage/profile
|
||||
manage/members
|
||||
manage/membership
|
||||
manage/interaction
|
||||
manage/logs
|
||||
}.each do |path|
|
||||
get path => 'groups#show'
|
||||
collection do
|
||||
get "check-name" => 'groups#check_name'
|
||||
get 'custom/new' => 'groups#new', constraints: AdminConstraint.new
|
||||
get "search" => "groups#search"
|
||||
end
|
||||
|
||||
put "members" => "groups#add_members"
|
||||
delete "members" => "groups#remove_member"
|
||||
post "request_membership" => "groups#request_membership"
|
||||
post "notifications" => "groups#set_notifications"
|
||||
member do
|
||||
%w{
|
||||
activity
|
||||
activity/:filter
|
||||
messages
|
||||
messages/inbox
|
||||
messages/archive
|
||||
manage
|
||||
manage/profile
|
||||
manage/members
|
||||
manage/membership
|
||||
manage/interaction
|
||||
manage/logs
|
||||
}.each do |path|
|
||||
get path => 'groups#show'
|
||||
end
|
||||
|
||||
put "members" => "groups#add_members"
|
||||
delete "members" => "groups#remove_member"
|
||||
post "request_membership" => "groups#request_membership"
|
||||
post "notifications" => "groups#set_notifications"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -3,7 +3,7 @@ import { acceptance, logIn, replaceCurrentUser } from "helpers/qunit-helpers";
|
||||
acceptance("Group Members");
|
||||
|
||||
QUnit.test("Viewing Members as anon user", async assert => {
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
|
||||
assert.ok(
|
||||
count(".avatar-flair .d-icon-adjust") === 1,
|
||||
@ -28,7 +28,7 @@ QUnit.test("Viewing Members as a group owner", async assert => {
|
||||
Discourse.reset();
|
||||
replaceCurrentUser({ admin: false, staff: false });
|
||||
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
await click(".group-members-add");
|
||||
|
||||
assert.equal(
|
||||
@ -42,7 +42,7 @@ QUnit.test("Viewing Members as an admin user", async assert => {
|
||||
logIn();
|
||||
Discourse.reset();
|
||||
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
|
||||
assert.ok(
|
||||
count(".group-member-dropdown") > 0,
|
||||
|
@ -8,7 +8,7 @@ acceptance("Managing Group Interaction Settings", {
|
||||
});
|
||||
|
||||
QUnit.test("As an admin", async assert => {
|
||||
await visit("/groups/discourse/manage/interaction");
|
||||
await visit("/g/discourse/manage/interaction");
|
||||
|
||||
assert.equal(
|
||||
find(".groups-form-visibility-level").length,
|
||||
@ -43,7 +43,7 @@ QUnit.test("As an admin", async assert => {
|
||||
|
||||
QUnit.test("As a group owner", async assert => {
|
||||
replaceCurrentUser({ admin: false, staff: false });
|
||||
await visit("/groups/discourse/manage/interaction");
|
||||
await visit("/g/discourse/manage/interaction");
|
||||
|
||||
assert.equal(
|
||||
find(".groups-form-visibility-level").length,
|
||||
|
@ -94,7 +94,7 @@ acceptance("Group logs", {
|
||||
});
|
||||
|
||||
QUnit.test("Browsing group logs", async assert => {
|
||||
await visit("/groups/snorlax/manage/logs");
|
||||
await visit("/g/snorlax/manage/logs");
|
||||
assert.ok(
|
||||
find("tr.group-manage-logs-row").length === 2,
|
||||
"it should display the right number of logs"
|
||||
|
@ -5,7 +5,7 @@ acceptance("Managing Group Membership", {
|
||||
});
|
||||
|
||||
QUnit.test("As an admin", async assert => {
|
||||
await visit("/groups/discourse/manage/membership");
|
||||
await visit("/g/discourse/manage/membership");
|
||||
|
||||
assert.ok(
|
||||
find('label[for="automatic_membership"]').length === 1,
|
||||
@ -70,7 +70,7 @@ QUnit.test("As an admin", async assert => {
|
||||
QUnit.test("As a group owner", async assert => {
|
||||
replaceCurrentUser({ staff: false, admin: false });
|
||||
|
||||
await visit("/groups/discourse/manage/membership");
|
||||
await visit("/g/discourse/manage/membership");
|
||||
|
||||
assert.ok(
|
||||
find('label[for="automatic_membership"]').length === 0,
|
||||
|
@ -6,7 +6,7 @@ QUnit.test("As an admin", async assert => {
|
||||
logIn();
|
||||
Discourse.reset();
|
||||
|
||||
await visit("/groups/discourse/manage/profile");
|
||||
await visit("/g/discourse/manage/profile");
|
||||
|
||||
assert.ok(
|
||||
find(".group-flair-inputs").length === 1,
|
||||
@ -31,7 +31,7 @@ QUnit.test("As a group owner", async assert => {
|
||||
Discourse.reset();
|
||||
replaceCurrentUser({ staff: false, admin: false });
|
||||
|
||||
await visit("/groups/discourse/manage/profile");
|
||||
await visit("/g/discourse/manage/profile");
|
||||
|
||||
assert.equal(
|
||||
find(".group-form-name").length,
|
||||
@ -41,7 +41,7 @@ QUnit.test("As a group owner", async assert => {
|
||||
});
|
||||
|
||||
QUnit.test("As an anonymous user", async assert => {
|
||||
await visit("/groups/discourse/manage/profile");
|
||||
await visit("/g/discourse/manage/profile");
|
||||
|
||||
assert.ok(
|
||||
count(".group-members tr") > 0,
|
||||
|
@ -18,7 +18,7 @@ const response = object => {
|
||||
};
|
||||
|
||||
QUnit.test("Anonymous Viewing Group", async assert => {
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
|
||||
assert.equal(
|
||||
count(".nav-pills li a[title='Messages']"),
|
||||
@ -30,12 +30,12 @@ QUnit.test("Anonymous Viewing Group", async assert => {
|
||||
|
||||
assert.ok(count(".user-stream-item") > 0, "it lists stream items");
|
||||
|
||||
await click(".activity-nav li a[href='/groups/discourse/activity/topics']");
|
||||
await click(".activity-nav li a[href='/g/discourse/activity/topics']");
|
||||
|
||||
assert.ok(find(".topic-list"), "it shows the topic list");
|
||||
assert.equal(count(".topic-list-item"), 2, "it lists stream items");
|
||||
|
||||
await click(".activity-nav li a[href='/groups/discourse/activity/mentions']");
|
||||
await click(".activity-nav li a[href='/g/discourse/activity/mentions']");
|
||||
|
||||
assert.ok(count(".user-stream-item") > 0, "it lists stream items");
|
||||
assert.ok(
|
||||
@ -68,8 +68,8 @@ QUnit.test("Anonymous Viewing Group", async assert => {
|
||||
|
||||
Discourse.SiteSettings.enable_group_directory = false;
|
||||
|
||||
await visit("/groups");
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g");
|
||||
await visit("/g/discourse");
|
||||
await expandSelectKit(".group-dropdown");
|
||||
|
||||
assert.equal(
|
||||
@ -80,7 +80,7 @@ QUnit.test("Anonymous Viewing Group", async assert => {
|
||||
});
|
||||
|
||||
QUnit.test("Anonymous Viewing Automatic Group", async assert => {
|
||||
await visit("/groups/moderators");
|
||||
await visit("/g/moderators");
|
||||
|
||||
assert.equal(
|
||||
count(".nav-pills li a[title='Manage']"),
|
||||
@ -93,7 +93,7 @@ QUnit.test("User Viewing Group", async assert => {
|
||||
logIn();
|
||||
Discourse.reset();
|
||||
|
||||
await visit("/groups");
|
||||
await visit("/g");
|
||||
await click(".group-index-request");
|
||||
|
||||
assert.equal(
|
||||
@ -117,7 +117,7 @@ QUnit.test("User Viewing Group", async assert => {
|
||||
"Internationalization / localization"
|
||||
);
|
||||
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
|
||||
await click(".group-message-button");
|
||||
|
||||
@ -140,7 +140,7 @@ QUnit.test(
|
||||
logIn();
|
||||
Discourse.reset();
|
||||
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
|
||||
await click(".nav-pills li a[title='Messages']");
|
||||
|
||||
@ -240,7 +240,7 @@ QUnit.test("Admin viewing group messages", async assert => {
|
||||
logIn();
|
||||
Discourse.reset();
|
||||
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
await click(".nav-pills li a[title='Messages']");
|
||||
|
||||
assert.equal(
|
||||
@ -256,7 +256,7 @@ QUnit.test("Admin Viewing Group", async assert => {
|
||||
logIn();
|
||||
Discourse.reset();
|
||||
|
||||
await visit("/groups/discourse");
|
||||
await visit("/g/discourse");
|
||||
|
||||
assert.ok(
|
||||
find(".nav-pills li a[title='Manage']").length === 1,
|
||||
|
@ -3,11 +3,11 @@ import { acceptance } from "helpers/qunit-helpers";
|
||||
acceptance("Groups");
|
||||
|
||||
QUnit.test("Browsing Groups", async assert => {
|
||||
await visit("/groups?username=eviltrout");
|
||||
await visit("/g?username=eviltrout");
|
||||
|
||||
assert.equal(count(".groups-table-row"), 1, "it displays user's groups");
|
||||
|
||||
await visit("/groups");
|
||||
await visit("/g");
|
||||
|
||||
assert.equal(count(".groups-table-row"), 2, "it displays visible groups");
|
||||
assert.equal(
|
||||
@ -33,7 +33,7 @@ QUnit.test("Browsing Groups", async assert => {
|
||||
|
||||
assert.ok(exists(".modal.login-modal"), "it shows the login modal");
|
||||
|
||||
await click("a[href='/groups/discourse/members']");
|
||||
await click("a[href='/g/discourse/members']");
|
||||
|
||||
assert.equal(
|
||||
find(".group-info-name")
|
||||
|
@ -3,7 +3,7 @@ import { acceptance, logIn } from "helpers/qunit-helpers";
|
||||
acceptance("New Group");
|
||||
|
||||
QUnit.test("As an anon user", async assert => {
|
||||
await visit("/groups");
|
||||
await visit("/g");
|
||||
|
||||
assert.equal(
|
||||
find(".groups-header-new").length,
|
||||
@ -16,7 +16,7 @@ QUnit.test("Creating a new group", async assert => {
|
||||
logIn();
|
||||
Discourse.reset();
|
||||
|
||||
await visit("/groups");
|
||||
await visit("/g");
|
||||
|
||||
await click(".groups-header-new");
|
||||
|
||||
|
@ -114,7 +114,7 @@ export default {
|
||||
id: 116,
|
||||
name: "Tester",
|
||||
description:
|
||||
'Reported 10 bugs that were liked by the <a href="https://meta.discourse.org/groups/discourse">Discourse team</a>',
|
||||
'Reported 10 bugs that were liked by the <a href="https://meta.discourse.org/g/discourse">Discourse team</a>',
|
||||
grant_count: 9,
|
||||
allow_title: true,
|
||||
multiple_grant: false,
|
||||
@ -157,7 +157,7 @@ export default {
|
||||
id: 114,
|
||||
name: "Bug Reporter",
|
||||
description:
|
||||
'Reported a bug that was liked by the <a href="https://meta.discourse.org/groups/discourse">Discourse team</a>',
|
||||
'Reported a bug that was liked by the <a href="https://meta.discourse.org/g/discourse">Discourse team</a>',
|
||||
grant_count: 183,
|
||||
allow_title: false,
|
||||
multiple_grant: false,
|
||||
|
@ -4589,7 +4589,7 @@ export default {
|
||||
uploaded_avatar_id: 9,
|
||||
created_at: "2015-08-13T14:49:11.840Z",
|
||||
cooked:
|
||||
'<p>This is the first post. <a class="mention-group" href="/groups/discourse">@discourse</a></p>',
|
||||
'<p>This is the first post. <a class="mention-group" href="/g/discourse">@discourse</a></p>',
|
||||
post_number: 1,
|
||||
post_type: 1,
|
||||
updated_at: "2015-08-13T14:49:11.840Z",
|
||||
|
Loading…
x
Reference in New Issue
Block a user