funkwhale/front/src/router/index.js

797 wiersze
23 KiB
JavaScript

import Vue from "vue"
import Router from "vue-router"
Vue.use(Router)
console.log('PROCESS', process.env)
export default new Router({
mode: "history",
linkActiveClass: "active",
base: process.env.VUE_APP_ROUTER_BASE_URL || "/",
scrollBehavior(to, from, savedPosition) {
return new Promise(resolve => {
setTimeout(() => {
if (to.hash) {
resolve({ selector: to.hash });
}
let pos = savedPosition || { x: 0, y: 0 };
resolve(pos);
}, 100);
});
},
routes: [
{
path: "/",
name: "index",
component: () =>
import(/* webpackChunkName: "core" */ "@/components/Home")
},
{
path: "/front",
name: "front",
redirect: to => {
const { hash, params, query } = to
return { name: 'index', hash, query }
}
},
{
path: "/about",
name: "about",
component: () =>
import(/* webpackChunkName: "about" */ "@/components/About")
},
{
path: "/login",
name: "login",
component: () =>
import(/* webpackChunkName: "login" */ "@/views/auth/Login"),
props: route => ({ next: route.query.next || "/library" })
},
{
path: "/notifications",
name: "notifications",
component: () =>
import(/* webpackChunkName: "notifications" */ "@/views/Notifications")
},
{
path: "/auth/password/reset",
name: "auth.password-reset",
component: () =>
import(/* webpackChunkName: "password-reset" */ "@/views/auth/PasswordReset"),
props: route => ({
defaultEmail: route.query.email
})
},
{
path: "/auth/email/confirm",
name: "auth.email-confirm",
component: () =>
import(/* webpackChunkName: "signup" */ "@/views/auth/EmailConfirm"),
props: route => ({
defaultKey: route.query.key
})
},
{
path: "/auth/password/reset/confirm",
name: "auth.password-reset-confirm",
component: () =>
import(
/* webpackChunkName: "password-reset" */ "@/views/auth/PasswordResetConfirm"
),
props: route => ({
defaultUid: route.query.uid,
defaultToken: route.query.token
})
},
{
path: "/authorize",
name: "authorize",
component: () =>
import(/* webpackChunkName: "settings" */ "@/components/auth/Authorize"),
props: route => ({
clientId: route.query.client_id,
redirectUri: route.query.redirect_uri,
scope: route.query.scope,
responseType: route.query.response_type,
nonce: route.query.nonce,
state: route.query.state
})
},
{
path: "/signup",
name: "signup",
component: () =>
import(/* webpackChunkName: "signup" */ "@/views/auth/Signup"),
props: route => ({
defaultInvitation: route.query.invitation
})
},
{
path: "/logout",
name: "logout",
component: () =>
import(/* webpackChunkName: "login" */ "@/components/auth/Logout")
},
{
path: "/settings",
name: "settings",
component: () =>
import(/* webpackChunkName: "settings" */ "@/components/auth/Settings")
},
{
path: "/settings/applications/new",
name: "settings.applications.new",
props: route => ({
scopes: route.query.scopes,
name: route.query.name,
redirect_uris: route.query.redirect_uris
}),
component: () =>
import(
/* webpackChunkName: "settings" */ "@/components/auth/ApplicationNew"
)
},
{
path: "/settings/applications/:id/edit",
name: "settings.applications.edit",
component: () =>
import(
/* webpackChunkName: "settings" */ "@/components/auth/ApplicationEdit"
),
props: true
},
{
path: "/@:username",
name: "profile",
component: () =>
import(/* webpackChunkName: "core" */ "@/components/auth/Profile"),
props: true
},
{
path: "/favorites",
name: "favorites",
component: () =>
import(/* webpackChunkName: "favorites" */ "@/components/favorites/List"),
props: route => ({
defaultOrdering: route.query.ordering,
defaultPage: route.query.page,
defaultPaginateBy: route.query.paginateBy
})
},
{
path: "/content",
component: () =>
import(/* webpackChunkName: "core" */ "@/views/content/Base"),
children: [
{
path: "",
name: "content.index",
component: () =>
import(/* webpackChunkName: "core" */ "@/views/content/Home")
}
]
},
{
path: "/content/libraries/tracks",
component: () =>
import(/* webpackChunkName: "auth-libraries" */ "@/views/content/Base"),
children: [
{
path: "",
name: "content.libraries.files",
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ "@/views/content/libraries/Files"
),
props: route => ({
query: route.query.q
})
}
]
},
{
path: "/content/libraries",
component: () =>
import(/* webpackChunkName: "auth-libraries" */ "@/views/content/Base"),
children: [
{
path: "",
name: "content.libraries.index",
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ "@/views/content/libraries/Home"
)
},
{
path: ":id/upload",
name: "content.libraries.detail.upload",
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ "@/views/content/libraries/Upload"
),
props: route => ({
id: route.params.id,
defaultImportReference: route.query.import
})
},
{
path: ":id",
name: "content.libraries.detail",
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ "@/views/content/libraries/Detail"
),
props: true
}
]
},
{
path: "/content/remote",
component: () =>
import(/* webpackChunkName: "auth-libraries" */ "@/views/content/Base"),
children: [
{
path: "",
name: "content.remote.index",
component: () =>
import(/* webpackChunkName: "auth-libraries" */ "@/views/content/remote/Home")
}
]
},
{
path: "/manage/settings",
name: "manage.settings",
component: () =>
import(/* webpackChunkName: "admin" */ "@/views/admin/Settings")
},
{
path: "/manage/library",
component: () =>
import(/* webpackChunkName: "admin" */ "@/views/admin/library/Base"),
children: [
{
path: "edits",
name: "manage.library.edits",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/EditsList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "artists",
name: "manage.library.artists",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/ArtistsList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "artists/:id",
name: "manage.library.artists.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/ArtistDetail"
),
props: true
},
{
path: "albums",
name: "manage.library.albums",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/AlbumsList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "albums/:id",
name: "manage.library.albums.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/AlbumDetail"
),
props: true
},
{
path: "tracks",
name: "manage.library.tracks",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/TracksList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "tracks/:id",
name: "manage.library.tracks.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/TrackDetail"
),
props: true
},
{
path: "libraries",
name: "manage.library.libraries",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/LibrariesList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "libraries/:id",
name: "manage.library.libraries.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/LibraryDetail"
),
props: true
},
{
path: "uploads",
name: "manage.library.uploads",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/UploadsList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "uploads/:id",
name: "manage.library.uploads.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/UploadDetail"
),
props: true
},
{
path: "tags",
name: "manage.library.tags",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/TagsList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "tags/:id",
name: "manage.library.tags.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/library/TagDetail"
),
props: true
}
]
},
{
path: "/manage/users",
component: () =>
import(/* webpackChunkName: "admin" */ "@/views/admin/users/Base"),
children: [
{
path: "users",
name: "manage.users.users.list",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/users/UsersList"
)
},
{
path: "invitations",
name: "manage.users.invitations.list",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/users/InvitationsList"
)
}
]
},
{
path: "/manage/moderation",
component: () =>
import(/* webpackChunkName: "admin" */ "@/views/admin/moderation/Base"),
children: [
{
path: "domains",
name: "manage.moderation.domains.list",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/moderation/DomainsList"
)
},
{
path: "domains/:id",
name: "manage.moderation.domains.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/moderation/DomainsDetail"
),
props: true
},
{
path: "accounts",
name: "manage.moderation.accounts.list",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/moderation/AccountsList"
),
props: route => {
return {
defaultQuery: route.query.q
}
}
},
{
path: "accounts/:id",
name: "manage.moderation.accounts.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/moderation/AccountsDetail"
),
props: true
},
{
path: "reports",
name: "manage.moderation.reports.list",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/moderation/ReportsList"
),
props: route => {
return {
defaultQuery: route.query.q,
updateUrl: true
}
}
},
{
path: "reports/:id",
name: "manage.moderation.reports.detail",
component: () =>
import(
/* webpackChunkName: "admin" */ "@/views/admin/moderation/ReportDetail"
),
props: true
},
]
},
{
path: "/library",
component: () =>
import(/* webpackChunkName: "core" */ "@/components/library/Library"),
children: [
{
path: "",
component: () =>
import(/* webpackChunkName: "core" */ "@/components/library/Home"),
name: "library.index"
},
{
path: "me",
component: () =>
import(/* webpackChunkName: "core" */ "@/components/library/Home"),
name: "library.me",
props: route => ({
scope: 'me',
})
},
{
path: "artists/",
name: "library.artists.browse",
component: () =>
import(
/* webpackChunkName: "artists" */ "@/components/library/Artists"
),
props: route => ({
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultTags: Array.isArray(route.query.tag || [])
? route.query.tag
: [route.query.tag],
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "me/artists",
name: "library.artists.me",
component: () =>
import(
/* webpackChunkName: "artists" */ "@/components/library/Artists"
),
props: route => ({
scope: 'me',
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultTags: Array.isArray(route.query.tag || [])
? route.query.tag
: [route.query.tag],
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "albums/",
name: "library.albums.browse",
component: () =>
import(
/* webpackChunkName: "albums" */ "@/components/library/Albums"
),
props: route => ({
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultTags: Array.isArray(route.query.tag || [])
? route.query.tag
: [route.query.tag],
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "me/albums",
name: "library.albums.me",
component: () =>
import(
/* webpackChunkName: "albums" */ "@/components/library/Albums"
),
props: route => ({
scope: 'me',
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultTags: Array.isArray(route.query.tag || [])
? route.query.tag
: [route.query.tag],
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "radios/",
name: "library.radios.browse",
component: () =>
import(
/* webpackChunkName: "radios" */ "@/components/library/Radios"
),
props: route => ({
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "me/radios/",
name: "library.radios.me",
component: () =>
import(
/* webpackChunkName: "radios" */ "@/components/library/Radios"
),
props: route => ({
scope: 'me',
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "radios/build",
name: "library.radios.build",
component: () =>
import(
/* webpackChunkName: "radios" */ "@/components/library/radios/Builder"
),
props: true
},
{
path: "radios/build/:id",
name: "library.radios.edit",
component: () =>
import(
/* webpackChunkName: "radios" */ "@/components/library/radios/Builder"
),
props: true
},
{
path: "radios/:id",
name: "library.radios.detail",
component: () =>
import(/* webpackChunkName: "radios" */ "@/views/radios/Detail"),
props: true
},
{
path: "playlists/",
name: "library.playlists.browse",
component: () =>
import(/* webpackChunkName: "playlists" */ "@/views/playlists/List"),
props: route => ({
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "me/playlists/",
name: "library.playlists.me",
component: () =>
import(/* webpackChunkName: "playlists" */ "@/views/playlists/List"),
props: route => ({
scope: 'me',
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
defaultPaginateBy: route.query.paginateBy,
defaultPage: route.query.page
})
},
{
path: "playlists/:id",
name: "library.playlists.detail",
component: () =>
import(/* webpackChunkName: "playlists" */ "@/views/playlists/Detail"),
props: route => ({
id: route.params.id,
defaultEdit: route.query.mode === "edit"
})
},
{
path: "tags/:id",
name: "library.tags.detail",
component: () =>
import(
/* webpackChunkName: "tags" */ "@/components/library/TagDetail"
),
props: true
},
{
path: "artists/:id",
component: () =>
import(
/* webpackChunkName: "artists" */ "@/components/library/ArtistBase"
),
props: true,
children: [
{
path: "",
name: "library.artists.detail",
component: () =>
import(
/* webpackChunkName: "artists" */ "@/components/library/ArtistDetail"
)
},
{
path: "edit",
name: "library.artists.edit",
component: () =>
import(
/* webpackChunkName: "edits" */ "@/components/library/ArtistEdit"
)
},
{
path: "edit/:editId",
name: "library.artists.edit.detail",
component: () =>
import(
/* webpackChunkName: "edits" */ "@/components/library/EditDetail"
),
props: true
}
]
},
{
path: "albums/:id",
component: () =>
import(
/* webpackChunkName: "albums" */ "@/components/library/AlbumBase"
),
props: true,
children: [
{
path: "",
name: "library.albums.detail",
component: () =>
import(
/* webpackChunkName: "albums" */ "@/components/library/AlbumDetail"
)
},
{
path: "edit",
name: "library.albums.edit",
component: () =>
import(
/* webpackChunkName: "edits" */ "@/components/library/AlbumEdit"
)
},
{
path: "edit/:editId",
name: "library.albums.edit.detail",
component: () =>
import(
/* webpackChunkName: "edits" */ "@/components/library/EditDetail"
),
props: true
}
]
},
{
path: "tracks/:id",
component: () =>
import(
/* webpackChunkName: "tracks" */ "@/components/library/TrackBase"
),
props: true,
children: [
{
path: "",
name: "library.tracks.detail",
component: () =>
import(
/* webpackChunkName: "tracks" */ "@/components/library/TrackDetail"
)
},
{
path: "edit",
name: "library.tracks.edit",
component: () =>
import(
/* webpackChunkName: "edits" */ "@/components/library/TrackEdit"
)
},
{
path: "edit/:editId",
name: "library.tracks.edit.detail",
component: () =>
import(
/* webpackChunkName: "edits" */ "@/components/library/EditDetail"
),
props: true
}
]
}
]
},
{
path: "*/index.html",
redirect: "/"
},
{
path: "*",
component: () =>
import(/* webpackChunkName: "core" */ "@/components/PageNotFound")
}
]
})