Start migration to vite

This commit is contained in:
Georg Krause 2022-02-21 15:07:07 +01:00
parent 593cff4316
commit e9c4bfe947
No known key found for this signature in database
GPG Key ID: FD479B9A4D48E632
36 changed files with 601 additions and 5643 deletions

View File

@ -14,7 +14,6 @@ module.exports = {
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
parser: '@babel/eslint-parser'
},
plugins: [
'vue'

View File

@ -6,8 +6,9 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="generator" content="Funkwhale">
<link rel="icon" href="<%= BASE_URL %>favicon.png">
<link rel="icon" href="/favicon.png">
<title>Funkwhale</title>
<script type="module" src="/src/main.js"></script>
<style>
#fake-app {
width: 100vw;

View File

@ -5,8 +5,9 @@
"description": "Funkwhale front-end",
"author": "Funkwhale Collective <contact@funkwhale.audio>",
"scripts": {
"serve": "[ ! -d src/translations ] && npm run i18n-compile; vue-cli-service serve --port ${VUE_PORT:-8080} --host ${VUE_HOST:-0.0.0.0}",
"build": "scripts/i18n-compile.sh && vue-cli-service build",
"dev": "vite",
"build": "vite build",
"serve": "vite preview",
"test:unit": "vue-cli-service test:unit --reporter mocha-junit-reporter",
"lint": "eslint --ext .js,.vue src",
"fix-fomantic-css": "scripts/fix-fomantic-css.sh",
@ -17,7 +18,6 @@
"dependencies": {
"axios": "0.26.0",
"axios-auth-refresh": "2.2.8",
"core-js": "3.21.1",
"diff": "5.0.0",
"django-channels": "2.1.3",
"focus-trap": "6.7.3",
@ -44,12 +44,9 @@
"vuex-router-sync": "5.0.0"
},
"devDependencies": {
"@babel/eslint-parser": "7.17.0",
"@vue/cli-plugin-babel": "~5.0.1",
"@vue/cli-plugin-pwa": "~5.0.1",
"@vue/cli-plugin-unit-mocha": "~5.0.1",
"@vue/cli-service": "~5.0.1",
"@vitejs/plugin-vue": "^2.2.2",
"@vue/test-utils": "1.3.0",
"autoprefixer": "^10.4.2",
"chai": "4.3.6",
"easygettext": "2.17.0",
"eslint": "8.9.0",
@ -63,12 +60,10 @@
"mocha": "9.2.1",
"mocha-junit-reporter": "2.0.2",
"moxios": "0.4.0",
"preload-webpack-plugin": "3.0.0-beta.4",
"purgecss-webpack-plugin": "4.1.3",
"sass-loader": "10.2.1",
"sinon": "13.0.1",
"vue-template-compiler": "2.6.14",
"webpack-bundle-size-analyzer": "3.1.0"
"vite": "^2.8.4",
"vite-plugin-vue2": "^1.9.3",
"vue-template-compiler": "^2.6.14"
},
"eslintConfig": {
"root": true,

View File

@ -2,7 +2,8 @@
<div
id="app"
:key="String($store.state.instance.instanceUrl)"
:class="[$store.state.ui.queueFocused ? 'queue-focused' : '', {'has-bottom-player': $store.state.queue.tracks.length > 0}, `is-${ $store.getters['ui/windowSize']}`]"
:class="[$store.state.ui.queueFocused ? 'queue-focused' : '',
{'has-bottom-player': $store.state.queue.tracks.length > 0}]"
>
<!-- here, we display custom stylesheets, if any -->
<link
@ -51,23 +52,23 @@ import axios from 'axios'
import _ from '@/lodash'
import { mapState, mapGetters } from 'vuex'
import { WebSocketBridge } from 'django-channels'
import GlobalEvents from '@/components/utils/global-events'
import GlobalEvents from '@/components/utils/global-events.vue'
import locales from './locales'
import { getClientOnlyRadio } from '@/radios'
export default {
name: 'App',
components: {
Player: () => import(/* webpackChunkName: "audio" */ '@/components/audio/Player'),
Queue: () => import(/* webpackChunkName: "audio" */ '@/components/Queue'),
PlaylistModal: () => import(/* webpackChunkName: "auth-audio" */ '@/components/playlists/PlaylistModal'),
ChannelUploadModal: () => import(/* webpackChunkName: "auth-audio" */ '@/components/channels/UploadModal'),
Sidebar: () => import(/* webpackChunkName: "core" */ '@/components/Sidebar'),
ServiceMessages: () => import(/* webpackChunkName: "core" */ '@/components/ServiceMessages'),
SetInstanceModal: () => import(/* webpackChunkName: "core" */ '@/components/SetInstanceModal'),
ShortcutsModal: () => import(/* webpackChunkName: "core" */ '@/components/ShortcutsModal'),
FilterModal: () => import(/* webpackChunkName: "moderation" */ '@/components/moderation/FilterModal'),
ReportModal: () => import(/* webpackChunkName: "moderation" */ '@/components/moderation/ReportModal'),
Player: () => import('@/components/audio/Player.vue'),
Queue: () => import('@/components/Queue.vue'),
PlaylistModal: () => import('@/components/playlists/PlaylistModal.vue'),
ChannelUploadModal: () => import('@/components/channels/UploadModal.vue'),
Sidebar: () => import('@/components/Sidebar.vue'),
ServiceMessages: () => import('@/components/ServiceMessages.vue'),
SetInstanceModal: () => import('@/components/SetInstanceModal.vue'),
ShortcutsModal: () => import('@/components/ShortcutsModal.vue'),
FilterModal: () => import('@/components/moderation/FilterModal.vue'),
ReportModal: () => import('@/components/moderation/ReportModal.vue'),
GlobalEvents
},
data () {
@ -179,7 +180,7 @@ export default {
self.$language.current = newValue
return self.$store.commit('ui/momentLocale', 'en')
}
import(/* webpackChunkName: "locale-[request]" */ `./translations/${newValue}.json`).then((response) => {
import('./translations/en_GB.json').then((response) => {
Vue.$translations[newValue] = response.default[newValue]
}).finally(() => {
// set current language twice, otherwise we seem to have a cache somewhere
@ -188,12 +189,12 @@ export default {
self.$language.current = newValue
})
const momentLocale = newValue.replace('_', '-').toLowerCase()
import(/* webpackChunkName: "moment-locale-[request]" */ `moment/locale/${momentLocale}.js`).then(() => {
import('moment/locale/en-gb.js').then(() => {
self.$store.commit('ui/momentLocale', momentLocale)
}).catch(() => {
console.log('No momentjs locale available for', momentLocale)
const shortLocale = momentLocale.split('-')[0]
import(/* webpackChunkName: "moment-locale-[request]" */ `moment/locale/${shortLocale}.js`).then(() => {
import('moment/locale/en-gb.js').then(() => {
self.$store.commit('ui/momentLocale', shortLocale)
}).catch(() => {
console.log('No momentjs locale available for', shortLocale)
@ -279,7 +280,9 @@ export default {
// 1. use the url provided in settings.json, if any
// 2. use the url specified when building via VUE_APP_INSTANCE_URL
// 3. use the current url
const defaultInstanceUrl = this.$store.state.instance.frontSettings.defaultServerUrl || process.env.VUE_APP_INSTANCE_URL || this.$store.getters['instance/defaultUrl']()
const defaultInstanceUrl =
this.$store.state.instance.frontSettings.defaultServerUrl ||
import.meta.env.VUE_APP_INSTANCE_URL || this.$store.getters['instance/defaultUrl']()
this.$store.commit('instance/instanceUrl', defaultInstanceUrl)
} else {
// needed to trigger initialization of axios / service worker
@ -423,7 +426,8 @@ export default {
// let token = 'test'
const bridge = new WebSocketBridge()
this.bridge = bridge
let url = this.$store.getters['instance/absoluteUrl'](`api/v1/activity?token=${token}`)
let url =
this.$store.getters['instance/absoluteUrl']('api/v1/activity?token=${token}')
url = url.replace('http://', 'ws://')
url = url.replace('https://', 'wss://')
bridge.connect(
@ -442,7 +446,7 @@ export default {
const albumArtist = (track.album) ? track.album.artist.name : null
const artistName = (
(track.artist) ? track.artist.name : albumArtist)
const text = `${trackTitle} ${artistName}`
const text = '♫ ${trackTitle} ${artistName} ♫'
return text
},
updateDocumentTitle () {
@ -474,8 +478,8 @@ export default {
},
setTheme (theme) {
const oldTheme = (theme === 'light') ? 'dark' : 'light'
document.body.classList.remove(`theme-${oldTheme}`)
document.body.classList.add(`theme-${theme}`)
document.body.classList.remove('theme-${oldTheme}')
document.body.classList.add('theme-${theme}')
}
}
}

View File

@ -254,8 +254,8 @@ import _ from '@/lodash'
import showdown from 'showdown'
import { humanSize } from '@/filters'
import SignupForm from '@/components/auth/SignupForm'
import LogoText from '@/components/LogoText'
import SignupForm from '@/components/auth/SignupForm.vue'
import LogoText from '@/components/LogoText.vue'
export default {
components: {

View File

@ -328,10 +328,10 @@
import _ from '@/lodash'
import { mapState } from 'vuex'
import showdown from 'showdown'
import AlbumWidget from '@/components/audio/album/Widget'
import ChannelsWidget from '@/components/audio/ChannelsWidget'
import LoginForm from '@/components/auth/LoginForm'
import SignupForm from '@/components/auth/SignupForm'
import AlbumWidget from '@/components/audio/album/Widget.vue'
import ChannelsWidget from '@/components/audio/ChannelsWidget.vue'
import LoginForm from '@/components/auth/LoginForm.vue'
import SignupForm from '@/components/auth/SignupForm.vue'
import { humanSize } from '@/filters'
export default {

View File

@ -351,9 +351,11 @@ import { createFocusTrap } from 'focus-trap'
export default {
components: {
TrackFavoriteIcon: () => import(/* webpackChunkName: "auth-audio" */ '@/components/favorites/TrackFavoriteIcon'),
TrackPlaylistIcon: () => import(/* webpackChunkName: "auth-audio" */ '@/components/playlists/TrackPlaylistIcon'),
draggable: () => import(/* webpackChunkName: "draggable" */ 'vuedraggable')
TrackFavoriteIcon: () =>
import('@/components/favorites/TrackFavoriteIcon.vue'),
TrackPlaylistIcon: () =>
import('@/components/playlists/TrackPlaylistIcon.vue'),
draggable: () => import('vuedraggable')
},
data () {
return {

View File

@ -105,7 +105,7 @@
</template>
<script>
import Modal from '@/components/semantic/Modal'
import Modal from '@/components/semantic/Modal.vue'
import axios from 'axios'
import _ from '@/lodash'

View File

@ -62,7 +62,7 @@
export default {
components: {
Modal: () => import(/* webpackChunkName: "modal" */ '@/components/semantic/Modal')
Modal: () => import('@/components/semantic/Modal.vue')
},
props: { show: { type: Boolean, required: true } },
computed: {

View File

@ -472,12 +472,12 @@
<script>
import { mapState, mapActions, mapGetters } from 'vuex'
import UserModal from '@/components/common/UserModal'
import Logo from '@/components/Logo'
import SearchBar from '@/components/audio/SearchBar'
import ThemesMixin from '@/components/mixins/Themes'
import UserMenu from '@/components/common/UserMenu'
import Modal from '@/components/semantic/Modal'
import UserModal from '@/components/common/UserModal.vue'
import Logo from '@/components/Logo.vue'
import SearchBar from '@/components/audio/SearchBar.vue'
import ThemesMixin from '@/components/mixins/Themes.vue'
import UserMenu from '@/components/common/UserMenu.vue'
import Modal from '@/components/semantic/Modal.vue'
import $ from 'jquery'

View File

@ -342,8 +342,8 @@
<script>
import { mapState, mapGetters, mapActions } from 'vuex'
import GlobalEvents from '@/components/utils/global-events'
import { toLinearVolumeScale } from '@/audio/volume'
import GlobalEvents from '@/components/utils/global-events.vue'
import { toLinearVolumeScale } from '@/audio/volume.js'
import { Howl, Howler } from 'howler'
import _ from '@/lodash'
import url from '@/utils/url'
@ -351,9 +351,11 @@ import axios from 'axios'
export default {
components: {
VolumeControl: () => import(/* webpackChunkName: "audio" */ './VolumeControl'),
TrackFavoriteIcon: () => import(/* webpackChunkName: "auth-audio" */ '@/components/favorites/TrackFavoriteIcon'),
TrackPlaylistIcon: () => import(/* webpackChunkName: "auth-audio" */ '@/components/playlists/TrackPlaylistIcon'),
VolumeControl: () => import('./VolumeControl.vue'),
TrackFavoriteIcon: () =>
import('@/components/favorites/TrackFavoriteIcon.vue'),
TrackPlaylistIcon: () =>
import('@/components/playlists/TrackPlaylistIcon.vue'),
GlobalEvents
},
data () {

View File

@ -56,7 +56,7 @@
<script>
import axios from 'axios'
import AlbumCard from '@/components/audio/album/Card'
import AlbumCard from '@/components/audio/album/Card.vue'
export default {
components: {

View File

@ -87,7 +87,7 @@
</template>
<script>
import PasswordInput from '@/components/forms/PasswordInput'
import PasswordInput from '@/components/forms/PasswordInput.vue'
export default {
components: {

View File

@ -142,8 +142,8 @@
</template>
<script>
import Modal from '@/components/semantic/Modal'
import ChannelUploadForm from '@/components/channels/UploadForm'
import Modal from '@/components/semantic/Modal.vue'
import ChannelUploadForm from '@/components/channels/UploadForm.vue'
import { humanSize } from '@/filters'
export default {

View File

@ -1,23 +1,23 @@
import Vue from 'vue'
Vue.component('HumanDate', () => import(/* webpackChunkName: "common" */ '@/components/common/HumanDate'))
Vue.component('HumanDuration', () => import(/* webpackChunkName: "common" */ '@/components/common/HumanDuration'))
Vue.component('Username', () => import(/* webpackChunkName: "common" */ '@/components/common/Username'))
Vue.component('UserLink', () => import(/* webpackChunkName: "common" */ '@/components/common/UserLink'))
Vue.component('ActorLink', () => import(/* webpackChunkName: "common" */ '@/components/common/ActorLink'))
Vue.component('ActorAvatar', () => import(/* webpackChunkName: "common" */ '@/components/common/ActorAvatar'))
Vue.component('Duration', () => import(/* webpackChunkName: "common" */ '@/components/common/Duration'))
Vue.component('DangerousButton', () => import(/* webpackChunkName: "common" */ '@/components/common/DangerousButton'))
Vue.component('Message', () => import(/* webpackChunkName: "common" */ '@/components/common/Message'))
Vue.component('CopyInput', () => import(/* webpackChunkName: "common" */ '@/components/common/CopyInput'))
Vue.component('AjaxButton', () => import(/* webpackChunkName: "common" */ '@/components/common/AjaxButton'))
Vue.component('Tooltip', () => import(/* webpackChunkName: "common" */ '@/components/common/Tooltip'))
Vue.component('EmptyState', () => import(/* webpackChunkName: "common" */ '@/components/common/EmptyState'))
Vue.component('ExpandableDiv', () => import(/* webpackChunkName: "common" */ '@/components/common/ExpandableDiv'))
Vue.component('CollapseLink', () => import(/* webpackChunkName: "common" */ '@/components/common/CollapseLink'))
Vue.component('ActionFeedback', () => import(/* webpackChunkName: "common" */ '@/components/common/ActionFeedback'))
Vue.component('RenderedDescription', () => import(/* webpackChunkName: "common" */ '@/components/common/RenderedDescription'))
Vue.component('ContentForm', () => import(/* webpackChunkName: "common" */ '@/components/common/ContentForm'))
Vue.component('InlineSearchBar', () => import(/* webpackChunkName: "common" */ '@/components/common/InlineSearchBar'))
Vue.component('HumanDate', () => import('@/components/common/HumanDate.vue'))
Vue.component('HumanDuration', () => import('@/components/common/HumanDuration.vue'))
Vue.component('Username', () => import('@/components/common/Username.vue'))
Vue.component('UserLink', () => import('@/components/common/UserLink.vue'))
Vue.component('ActorLink', () => import('@/components/common/ActorLink.vue'))
Vue.component('ActorAvatar', () => import('@/components/common/ActorAvatar.vue'))
Vue.component('Duration', () => import('@/components/common/Duration.vue'))
Vue.component('DangerousButton', () => import('@/components/common/DangerousButton.vue'))
Vue.component('Message', () => import('@/components/common/Message.vue'))
Vue.component('CopyInput', () => import('@/components/common/CopyInput.vue'))
Vue.component('AjaxButton', () => import('@/components/common/AjaxButton.vue'))
Vue.component('Tooltip', () => import('@/components/common/Tooltip.vue'))
Vue.component('EmptyState', () => import('@/components/common/EmptyState.vue'))
Vue.component('ExpandableDiv', () => import('@/components/common/ExpandableDiv.vue'))
Vue.component('CollapseLink', () => import('@/components/common/CollapseLink.vue'))
Vue.component('ActionFeedback', () => import('@/components/common/ActionFeedback.vue'))
Vue.component('RenderedDescription', () => import('@/components/common/RenderedDescription.vue'))
Vue.component('ContentForm', () => import('@/components/common/ContentForm.vue'))
Vue.component('InlineSearchBar', () => import('@/components/common/InlineSearchBar.vue'))
export default {}

View File

@ -250,10 +250,10 @@
<script>
import axios from 'axios'
import lodash from '@/lodash'
import PlayButton from '@/components/audio/PlayButton'
import TagsList from '@/components/tags/List'
import ArtistLabel from '@/components/audio/ArtistLabel'
import AlbumDropdown from './AlbumDropdown'
import PlayButton from '@/components/audio/PlayButton.vue'
import TagsList from '@/components/tags/List.vue'
import ArtistLabel from '@/components/audio/ArtistLabel.vue'
import AlbumDropdown from './AlbumDropdown.vue'
function groupByDisc (initial) {
function inner (acc, track) {

View File

@ -92,11 +92,11 @@
<script>
import time from '@/utils/time'
import LibraryWidget from '@/components/federation/LibraryWidget'
import ChannelEntries from '@/components/audio/ChannelEntries'
import TrackTable from '@/components/audio/track/Table'
import PlayButton from '@/components/audio/PlayButton'
import time from '@/utils/time.vue'
import LibraryWidget from '@/components/federation/LibraryWidget.vue'
import ChannelEntries from '@/components/audio/ChannelEntries.vue'
import TrackTable from '@/components/audio/track/Table.vue'
import PlayButton from '@/components/audio/PlayButton.vue'
export default {
components: {

View File

@ -153,12 +153,12 @@ import $ from 'jquery'
import logger from '@/logging'
import OrderingMixin from '@/components/mixins/Ordering'
import PaginationMixin from '@/components/mixins/Pagination'
import TranslationsMixin from '@/components/mixins/Translations'
import AlbumCard from '@/components/audio/album/Card'
import Pagination from '@/components/Pagination'
import TagsSelector from '@/components/library/TagsSelector'
import OrderingMixin from '@/components/mixins/Ordering.vue'
import PaginationMixin from '@/components/mixins/Pagination.vue'
import TranslationsMixin from '@/components/mixins/Translations.vue'
import AlbumCard from '@/components/audio/album/Card.vue'
import Pagination from '@/components/Pagination.vue'
import TagsSelector from '@/components/library/TagsSelector.vue'
const FETCH_URL = 'albums/'

View File

@ -169,12 +169,12 @@ import $ from 'jquery'
import logger from '@/logging'
import OrderingMixin from '@/components/mixins/Ordering'
import PaginationMixin from '@/components/mixins/Pagination'
import TranslationsMixin from '@/components/mixins/Translations'
import ArtistCard from '@/components/audio/artist/Card'
import Pagination from '@/components/Pagination'
import TagsSelector from '@/components/library/TagsSelector'
import OrderingMixin from '@/components/mixins/Ordering.vue'
import PaginationMixin from '@/components/mixins/Pagination.vue'
import TranslationsMixin from '@/components/mixins/Translations.vue'
import ArtistCard from '@/components/audio/artist/Card.vue'
import Pagination from '@/components/Pagination.vue'
import TagsSelector from '@/components/library/TagsSelector.vue'
const FETCH_URL = 'artists/'

View File

@ -201,14 +201,14 @@ import $ from 'jquery'
import logger from '@/logging'
import OrderingMixin from '@/components/mixins/Ordering'
import PaginationMixin from '@/components/mixins/Pagination'
import TranslationsMixin from '@/components/mixins/Translations'
import ArtistCard from '@/components/audio/artist/Card'
import Pagination from '@/components/Pagination'
import TagsSelector from '@/components/library/TagsSelector'
import Modal from '@/components/semantic/Modal'
import RemoteSearchForm from '@/components/RemoteSearchForm'
import OrderingMixin from '@/components/mixins/Ordering.vue'
import PaginationMixin from '@/components/mixins/Pagination.vue'
import TranslationsMixin from '@/components/mixins/Translations.vue'
import ArtistCard from '@/components/audio/artist/Card.vue'
import Pagination from '@/components/Pagination.vue'
import TagsSelector from '@/components/library/TagsSelector.vue'
import Modal from '@/components/semantic/Modal.vue'
import RemoteSearchForm from '@/components/RemoteSearchForm.vue'
const FETCH_URL = 'artists/'

View File

@ -179,11 +179,11 @@ import $ from 'jquery'
import logger from '@/logging'
import OrderingMixin from '@/components/mixins/Ordering'
import PaginationMixin from '@/components/mixins/Pagination'
import TranslationsMixin from '@/components/mixins/Translations'
import RadioCard from '@/components/radios/Card'
import Pagination from '@/components/Pagination'
import OrderingMixin from '@/components/mixins/Ordering.vue'
import PaginationMixin from '@/components/mixins/Pagination.vue'
import TranslationsMixin from '@/components/mixins/Translations.vue'
import RadioCard from '@/components/radios/Card.vue'
import Pagination from '@/components/Pagination.vue'
const FETCH_URL = 'radios/radios/'

View File

@ -187,9 +187,9 @@
import axios from 'axios'
import $ from 'jquery'
import _ from '@/lodash'
import BuilderFilter from './Filter'
import TrackTable from '@/components/audio/track/Table'
import RadioButton from '@/components/radios/Button'
import BuilderFilter from './Filter.vue'
import TrackTable from '@/components/audio/track/Table.vue'
import RadioButton from '@/components/radios/Button.vue'
export default {
components: {

View File

@ -109,8 +109,8 @@ import axios from 'axios'
import $ from 'jquery'
import _ from '@/lodash'
import Modal from '@/components/semantic/Modal'
import TrackTable from '@/components/audio/track/Table'
import Modal from '@/components/semantic/Modal.vue'
import TrackTable from '@/components/audio/track/Table.vue'
export default {
components: {

View File

@ -93,7 +93,7 @@ import axios from 'axios'
import { mapState } from 'vuex'
import logger from '@/logging'
import Modal from '@/components/semantic/Modal'
import Modal from '@/components/semantic/Modal.vue'
export default {
components: {

View File

@ -165,8 +165,9 @@ function urlDomain (data) {
export default {
components: {
ReportCategoryDropdown: () => import(/* webpackChunkName: "reports" */ '@/components/moderation/ReportCategoryDropdown'),
Modal: () => import(/* webpackChunkName: "modal" */ '@/components/semantic/Modal')
ReportCategoryDropdown: () =>
import('@/components/moderation/ReportCategoryDropdown.vue'),
Modal: () => import('@/components/semantic/Modal.vue')
},
data () {
return {

View File

@ -200,8 +200,8 @@ import axios from 'axios'
import { mapState } from 'vuex'
import logger from '@/logging'
import Modal from '@/components/semantic/Modal'
import PlaylistForm from '@/components/playlists/Form'
import Modal from '@/components/semantic/Modal.vue'
import PlaylistForm from '@/components/playlists/Form.vue'
export default {
components: {

View File

@ -61,7 +61,7 @@
<script>
import _ from '@/lodash'
import axios from 'axios'
import PlaylistCard from '@/components/playlists/Card'
import PlaylistCard from '@/components/playlists/Card.vue'
export default {
components: {

View File

@ -5,7 +5,7 @@ import jQuery from 'jquery'
import Vue from 'vue'
import moment from 'moment'
import App from './App'
import App from './App.vue'
import router from './router'
import axios from 'axios'
import VueLazyload from 'vue-lazyload'
@ -20,8 +20,8 @@ import { parseAPIErrors } from '@/utils'
import globals from '@/components/globals' // eslint-disable-line
import './registerServiceWorker'
logger.default.info('Loading environment:', process.env.NODE_ENV)
logger.default.debug('Environment variables:', process.env)
logger.default.info('Loading environment:', import.meta.env.NODE_ENV)
logger.default.debug('Environment variables:', import.meta.env)
sync(store, router)
@ -59,7 +59,6 @@ Vue.use(GetTextPlugin, {
})
Vue.use(VueLazyload)
Vue.config.productionTip = false
Vue.directive('title', function (el, binding) {
store.commit('ui/pageTitle', binding.value)
})

View File

@ -31,11 +31,11 @@ function libraryPermissions (to, from, next) {
}
}
console.log('PROCESS', process.env)
console.log('PROCESS', import.meta.env)
export default new Router({
mode: 'history',
linkActiveClass: 'active',
base: process.env.VUE_APP_ROUTER_BASE_URL || '/',
base: import.meta.env.VUE_APP_ROUTER_BASE_URL || '/',
scrollBehavior (to, from, savedPosition) {
if (to.meta.preserveScrollPosition) {
return savedPosition
@ -55,7 +55,7 @@ export default new Router({
path: '/',
name: 'index',
component: () =>
import(/* webpackChunkName: "core" */ '@/components/Home')
import('@/components/Home.vue')
},
{
path: '/front',
@ -69,32 +69,32 @@ export default new Router({
path: '/about',
name: 'about',
component: () =>
import(/* webpackChunkName: "about" */ '@/components/About')
import('@/components/About.vue')
},
{
path: '/about/pod',
name: 'about-pod',
component: () =>
import(/* webpackChunkName: "about" */ '@/components/AboutPod')
import('@/components/AboutPod.vue')
},
{
path: '/login',
name: 'login',
component: () =>
import(/* webpackChunkName: "login" */ '@/views/auth/Login'),
import('@/views/auth/Login.vue'),
props: route => ({ next: route.query.next || '/library' })
},
{
path: '/notifications',
name: 'notifications',
component: () =>
import(/* webpackChunkName: "notifications" */ '@/views/Notifications')
import('@/views/Notifications.vue')
},
{
path: '/auth/password/reset',
name: 'auth.password-reset',
component: () =>
import(/* webpackChunkName: "password-reset" */ '@/views/auth/PasswordReset'),
import('@/views/auth/PasswordReset.vue'),
props: route => ({
defaultEmail: route.query.email
})
@ -103,7 +103,7 @@ export default new Router({
path: '/auth/callback',
name: 'auth.callback',
component: () =>
import(/* webpackChunkName: "auth-callback" */ '@/views/auth/Callback'),
import('@/views/auth/Callback.vue'),
props: route => ({
code: route.query.code,
state: route.query.state
@ -113,7 +113,7 @@ export default new Router({
path: '/auth/email/confirm',
name: 'auth.email-confirm',
component: () =>
import(/* webpackChunkName: "signup" */ '@/views/auth/EmailConfirm'),
import('@/views/auth/EmailConfirm.vue'),
props: route => ({
defaultKey: route.query.key
})
@ -122,7 +122,7 @@ export default new Router({
path: '/search',
name: 'search',
component: () =>
import(/* webpackChunkName: "core" */ '@/views/Search'),
import('@/views/Search.vue'),
props: route => ({
initialId: route.query.id,
initialType: route.query.type || 'artists',
@ -135,7 +135,7 @@ export default new Router({
name: 'auth.password-reset-confirm',
component: () =>
import(
/* webpackChunkName: "password-reset" */ '@/views/auth/PasswordResetConfirm'
'@/views/auth/PasswordResetConfirm.vue'
),
props: route => ({
defaultUid: route.query.uid,
@ -146,7 +146,7 @@ export default new Router({
path: '/authorize',
name: 'authorize',
component: () =>
import(/* webpackChunkName: "settings" */ '@/components/auth/Authorize'),
import('@/components/auth/Authorize.vue'),
props: route => ({
clientId: route.query.client_id,
redirectUri: route.query.redirect_uri,
@ -160,7 +160,7 @@ export default new Router({
path: '/signup',
name: 'signup',
component: () =>
import(/* webpackChunkName: "signup" */ '@/views/auth/Signup'),
import('@/views/auth/Signup.vue'),
props: route => ({
defaultInvitation: route.query.invitation
})
@ -169,13 +169,13 @@ export default new Router({
path: '/logout',
name: 'logout',
component: () =>
import(/* webpackChunkName: "login" */ '@/components/auth/Logout')
import('@/components/auth/Logout.vue')
},
{
path: '/settings',
name: 'settings',
component: () =>
import(/* webpackChunkName: "settings" */ '@/components/auth/Settings')
import('@/components/auth/Settings.vue')
},
{
path: '/settings/applications/new',
@ -187,7 +187,7 @@ export default new Router({
}),
component: () =>
import(
/* webpackChunkName: "settings" */ '@/components/auth/ApplicationNew'
'@/components/auth/ApplicationNew.vue'
)
},
{
@ -195,7 +195,7 @@ export default new Router({
name: 'settings.plugins',
component: () =>
import(
/* webpackChunkName: "settings" */ '@/views/auth/Plugins'
'@/views/auth/Plugins.vue'
)
},
{
@ -203,7 +203,7 @@ export default new Router({
name: 'settings.applications.edit',
component: () =>
import(
/* webpackChunkName: "settings" */ '@/components/auth/ApplicationEdit'
'@/components/auth/ApplicationEdit.vue'
),
props: true
},
@ -212,7 +212,7 @@ export default new Router({
path: route.path,
name: `profile${route.suffix}`,
component: () =>
import(/* webpackChunkName: "core" */ '@/views/auth/ProfileBase'),
import('@/views/auth/ProfileBase.vue'),
props: true,
children: [
{
@ -220,7 +220,7 @@ export default new Router({
name: `profile${route.suffix}.overview`,
component: () =>
import(
/* webpackChunkName: "core" */ '@/views/auth/ProfileOverview'
'@/views/auth/ProfileOverview.vue'
)
},
{
@ -228,7 +228,7 @@ export default new Router({
name: `profile${route.suffix}.activity`,
component: () =>
import(
/* webpackChunkName: "core" */ '@/views/auth/ProfileActivity'
'@/views/auth/ProfileActivity.vue'
)
}
]
@ -238,7 +238,7 @@ export default new Router({
path: '/favorites',
name: 'favorites',
component: () =>
import(/* webpackChunkName: "favorites" */ '@/components/favorites/List'),
import('@/components/favorites/List.vue'),
props: route => ({
defaultOrdering: route.query.ordering,
defaultPage: route.query.page,
@ -248,27 +248,27 @@ export default new Router({
{
path: '/content',
component: () =>
import(/* webpackChunkName: "core" */ '@/views/content/Base'),
import('@/views/content/Base.vue'),
children: [
{
path: '',
name: 'content.index',
component: () =>
import(/* webpackChunkName: "core" */ '@/views/content/Home')
import('@/views/content/Home.vue')
}
]
},
{
path: '/content/libraries/tracks',
component: () =>
import(/* webpackChunkName: "auth-libraries" */ '@/views/content/Base'),
import('@/views/content/Base.vue'),
children: [
{
path: '',
name: 'content.libraries.files',
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ '@/views/content/libraries/Files'
'@/views/content/libraries/Files.vue'
),
props: route => ({
query: route.query.q
@ -279,14 +279,14 @@ export default new Router({
{
path: '/content/libraries',
component: () =>
import(/* webpackChunkName: "auth-libraries" */ '@/views/content/Base'),
import('@/views/content/Base.vue'),
children: [
{
path: '',
name: 'content.libraries.index',
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ '@/views/content/libraries/Home'
'@/views/content/libraries/Home.vue'
)
}
]
@ -294,13 +294,13 @@ export default new Router({
{
path: '/content/remote',
component: () =>
import(/* webpackChunkName: "auth-libraries" */ '@/views/content/Base'),
import('@/views/content/Base.vue'),
children: [
{
path: '',
name: 'content.remote.index',
component: () =>
import(/* webpackChunkName: "auth-libraries" */ '@/views/content/remote/Home')
import('@/views/content/remote/Home.vue')
}
]
},
@ -309,20 +309,20 @@ export default new Router({
name: 'manage.settings',
beforeEnter: adminPermissions,
component: () =>
import(/* webpackChunkName: "admin" */ '@/views/admin/Settings')
import('@/views/admin/Settings.vue')
},
{
path: '/manage/library',
beforeEnter: libraryPermissions,
component: () =>
import(/* webpackChunkName: "admin" */ '@/views/admin/library/Base'),
import('@/views/admin/library/Base.vue'),
children: [
{
path: 'edits',
name: 'manage.library.edits',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/EditsList'
'@/views/admin/library/EditsList.vue'
),
props: route => {
return {
@ -335,7 +335,7 @@ export default new Router({
name: 'manage.library.artists',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/ArtistsList'
'@/views/admin/library/ArtistsList.vue'
),
props: route => {
return {
@ -348,7 +348,7 @@ export default new Router({
name: 'manage.library.artists.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/ArtistDetail'
'@/views/admin/library/ArtistDetail.vue'
),
props: true
},
@ -357,7 +357,7 @@ export default new Router({
name: 'manage.channels',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/ChannelsList'
'@/views/admin/ChannelsList.vue'
),
props: route => {
return {
@ -370,7 +370,7 @@ export default new Router({
name: 'manage.channels.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/ChannelDetail'
'@/views/admin/ChannelDetail.vue'
),
props: true
},
@ -379,7 +379,7 @@ export default new Router({
name: 'manage.library.albums',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/AlbumsList'
'@/views/admin/library/AlbumsList.vue'
),
props: route => {
return {
@ -392,7 +392,7 @@ export default new Router({
name: 'manage.library.albums.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/AlbumDetail'
'@/views/admin/library/AlbumDetail.vue'
),
props: true
},
@ -401,7 +401,7 @@ export default new Router({
name: 'manage.library.tracks',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/TracksList'
'@/views/admin/library/TracksList.vue'
),
props: route => {
return {
@ -414,7 +414,7 @@ export default new Router({
name: 'manage.library.tracks.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/TrackDetail'
'@/views/admin/library/TrackDetail.vue'
),
props: true
},
@ -423,7 +423,7 @@ export default new Router({
name: 'manage.library.libraries',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/LibrariesList'
'@/views/admin/library/LibrariesList.vue'
),
props: route => {
return {
@ -436,7 +436,7 @@ export default new Router({
name: 'manage.library.libraries.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/LibraryDetail'
'@/views/admin/library/LibraryDetail.vue'
),
props: true
},
@ -445,7 +445,7 @@ export default new Router({
name: 'manage.library.uploads',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/UploadsList'
'@/views/admin/library/UploadsList.vue'
),
props: route => {
return {
@ -458,7 +458,7 @@ export default new Router({
name: 'manage.library.uploads.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/UploadDetail'
'@/views/admin/library/UploadDetail.vue'
),
props: true
},
@ -467,7 +467,7 @@ export default new Router({
name: 'manage.library.tags',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/TagsList'
'@/views/admin/library/TagsList.vue'
),
props: route => {
return {
@ -480,7 +480,7 @@ export default new Router({
name: 'manage.library.tags.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/library/TagDetail'
'@/views/admin/library/TagDetail.vue'
),
props: true
}
@ -490,14 +490,14 @@ export default new Router({
path: '/manage/users',
beforeEnter: adminPermissions,
component: () =>
import(/* webpackChunkName: "admin" */ '@/views/admin/users/Base'),
import('@/views/admin/users/Base.vue'),
children: [
{
path: 'users',
name: 'manage.users.users.list',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/users/UsersList'
'@/views/admin/users/UsersList.vue'
)
},
{
@ -505,7 +505,7 @@ export default new Router({
name: 'manage.users.invitations.list',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/users/InvitationsList'
'@/views/admin/users/InvitationsList.vue'
)
}
]
@ -514,14 +514,14 @@ export default new Router({
path: '/manage/moderation',
beforeEnter: moderatorPermissions,
component: () =>
import(/* webpackChunkName: "admin" */ '@/views/admin/moderation/Base'),
import('@/views/admin/moderation/Base.vue'),
children: [
{
path: 'domains',
name: 'manage.moderation.domains.list',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/DomainsList'
'@/views/admin/moderation/DomainsList.vue'
)
},
{
@ -529,7 +529,7 @@ export default new Router({
name: 'manage.moderation.domains.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/DomainsDetail'
'@/views/admin/moderation/DomainsDetail.vue'
),
props: true
},
@ -538,7 +538,7 @@ export default new Router({
name: 'manage.moderation.accounts.list',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/AccountsList'
'@/views/admin/moderation/AccountsList.vue'
),
props: route => {
return {
@ -551,7 +551,7 @@ export default new Router({
name: 'manage.moderation.accounts.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/AccountsDetail'
'@/views/admin/moderation/AccountsDetail.vue'
),
props: true
},
@ -560,7 +560,7 @@ export default new Router({
name: 'manage.moderation.reports.list',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/ReportsList'
'@/views/admin/moderation/ReportsList.vue'
),
props: route => {
return {
@ -574,7 +574,7 @@ export default new Router({
name: 'manage.moderation.reports.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/ReportDetail'
'@/views/admin/moderation/ReportDetail.vue'
),
props: true
},
@ -583,7 +583,7 @@ export default new Router({
name: 'manage.moderation.requests.list',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/RequestsList'
'@/views/admin/moderation/RequestsList.vue'
),
props: route => {
return {
@ -597,7 +597,7 @@ export default new Router({
name: 'manage.moderation.requests.detail',
component: () =>
import(
/* webpackChunkName: "admin" */ '@/views/admin/moderation/RequestDetail'
'@/views/admin/moderation/RequestDetail.vue'
),
props: true
}
@ -606,18 +606,18 @@ export default new Router({
{
path: '/library',
component: () =>
import(/* webpackChunkName: "core" */ '@/components/library/Library'),
import('@/components/library/Library.vue'),
children: [
{
path: '',
component: () =>
import(/* webpackChunkName: "core" */ '@/components/library/Home'),
import('@/components/library/Home.vue'),
name: 'library.index'
},
{
path: 'me',
component: () =>
import(/* webpackChunkName: "core" */ '@/components/library/Home'),
import('@/components/library/Home.vue'),
name: 'library.me',
props: route => ({
scope: 'me'
@ -628,7 +628,7 @@ export default new Router({
name: 'library.artists.browse',
component: () =>
import(
/* webpackChunkName: "artists" */ '@/components/library/Artists'
'@/components/library/Artists.vue'
),
props: route => ({
defaultOrdering: route.query.ordering,
@ -645,7 +645,7 @@ export default new Router({
name: 'library.artists.me',
component: () =>
import(
/* webpackChunkName: "artists" */ '@/components/library/Artists'
'@/components/library/Artists.vue'
),
props: route => ({
scope: 'me',
@ -663,7 +663,7 @@ export default new Router({
name: 'library.albums.browse',
component: () =>
import(
/* webpackChunkName: "albums" */ '@/components/library/Albums'
'@/components/library/Albums.vue'
),
props: route => ({
defaultOrdering: route.query.ordering,
@ -680,7 +680,7 @@ export default new Router({
name: 'library.podcasts.browse',
component: () =>
import(
/* webpackChunkName: "podcasts" */ '@/components/library/Podcasts'
'@/components/library/Podcasts.vue'
),
props: route => ({
defaultOrdering: route.query.ordering,
@ -697,7 +697,7 @@ export default new Router({
name: 'library.albums.me',
component: () =>
import(
/* webpackChunkName: "albums" */ '@/components/library/Albums'
'@/components/library/Albums.vue'
),
props: route => ({
scope: 'me',
@ -715,7 +715,7 @@ export default new Router({
name: 'library.radios.browse',
component: () =>
import(
/* webpackChunkName: "radios" */ '@/components/library/Radios'
'@/components/library/Radios.vue'
),
props: route => ({
defaultOrdering: route.query.ordering,
@ -729,7 +729,7 @@ export default new Router({
name: 'library.radios.me',
component: () =>
import(
/* webpackChunkName: "radios" */ '@/components/library/Radios'
'@/components/library/Radios.vue'
),
props: route => ({
scope: 'me',
@ -744,7 +744,7 @@ export default new Router({
name: 'library.radios.build',
component: () =>
import(
/* webpackChunkName: "radios" */ '@/components/library/radios/Builder'
'@/components/library/radios/Builder.vue'
),
props: true
},
@ -753,7 +753,7 @@ export default new Router({
name: 'library.radios.edit',
component: () =>
import(
/* webpackChunkName: "radios" */ '@/components/library/radios/Builder'
'@/components/library/radios/Builder.vue'
),
props: true
},
@ -761,14 +761,14 @@ export default new Router({
path: 'radios/:id',
name: 'library.radios.detail',
component: () =>
import(/* webpackChunkName: "radios" */ '@/views/radios/Detail'),
import('@/views/radios/Detail.vue'),
props: true
},
{
path: 'playlists/',
name: 'library.playlists.browse',
component: () =>
import(/* webpackChunkName: "playlists" */ '@/views/playlists/List'),
import('@/views/playlists/List.vue'),
props: route => ({
defaultOrdering: route.query.ordering,
defaultQuery: route.query.query,
@ -780,7 +780,7 @@ export default new Router({
path: 'me/playlists/',
name: 'library.playlists.me',
component: () =>
import(/* webpackChunkName: "playlists" */ '@/views/playlists/List'),
import('@/views/playlists/List.vue'),
props: route => ({
scope: 'me',
defaultOrdering: route.query.ordering,
@ -793,7 +793,7 @@ export default new Router({
path: 'playlists/:id',
name: 'library.playlists.detail',
component: () =>
import(/* webpackChunkName: "playlists" */ '@/views/playlists/Detail'),
import('@/views/playlists/Detail.vue'),
props: route => ({
id: route.params.id,
defaultEdit: route.query.mode === 'edit'
@ -804,7 +804,7 @@ export default new Router({
name: 'library.tags.detail',
component: () =>
import(
/* webpackChunkName: "tags" */ '@/components/library/TagDetail'
'@/components/library/TagDetail.vue'
),
props: true
},
@ -812,7 +812,7 @@ export default new Router({
path: 'artists/:id',
component: () =>
import(
/* webpackChunkName: "artists" */ '@/components/library/ArtistBase'
'@/components/library/ArtistBase.vue'
),
props: true,
children: [
@ -821,7 +821,7 @@ export default new Router({
name: 'library.artists.detail',
component: () =>
import(
/* webpackChunkName: "artists" */ '@/components/library/ArtistDetail'
'@/components/library/ArtistDetail.vue'
)
},
{
@ -829,7 +829,7 @@ export default new Router({
name: 'library.artists.edit',
component: () =>
import(
/* webpackChunkName: "edits" */ '@/components/library/ArtistEdit'
'@/components/library/ArtistEdit.vue'
)
},
{
@ -837,7 +837,7 @@ export default new Router({
name: 'library.artists.edit.detail',
component: () =>
import(
/* webpackChunkName: "edits" */ '@/components/library/EditDetail'
'@/components/library/EditDetail.vue'
),
props: true
}
@ -847,7 +847,7 @@ export default new Router({
path: 'albums/:id',
component: () =>
import(
/* webpackChunkName: "albums" */ '@/components/library/AlbumBase'
'@/components/library/AlbumBase.vue'
),
props: true,
children: [
@ -856,7 +856,7 @@ export default new Router({
name: 'library.albums.detail',
component: () =>
import(
/* webpackChunkName: "albums" */ '@/components/library/AlbumDetail'
'@/components/library/AlbumDetail.vue'
)
},
{
@ -864,7 +864,7 @@ export default new Router({
name: 'library.albums.edit',
component: () =>
import(
/* webpackChunkName: "edits" */ '@/components/library/AlbumEdit'
'@/components/library/AlbumEdit.vue'
)
},
{
@ -872,7 +872,7 @@ export default new Router({
name: 'library.albums.edit.detail',
component: () =>
import(
/* webpackChunkName: "edits" */ '@/components/library/EditDetail'
'@/components/library/EditDetail.vue'
),
props: true
}
@ -882,7 +882,7 @@ export default new Router({
path: 'tracks/:id',
component: () =>
import(
/* webpackChunkName: "tracks" */ '@/components/library/TrackBase'
'@/components/library/TrackBase.vue'
),
props: true,
children: [
@ -891,7 +891,7 @@ export default new Router({
name: 'library.tracks.detail',
component: () =>
import(
/* webpackChunkName: "tracks" */ '@/components/library/TrackDetail'
'@/components/library/TrackDetail.vue'
)
},
{
@ -899,7 +899,7 @@ export default new Router({
name: 'library.tracks.edit',
component: () =>
import(
/* webpackChunkName: "edits" */ '@/components/library/TrackEdit'
'@/components/library/TrackEdit.vue'
)
},
{
@ -907,7 +907,7 @@ export default new Router({
name: 'library.tracks.edit.detail',
component: () =>
import(
/* webpackChunkName: "edits" */ '@/components/library/EditDetail'
'@/components/library/EditDetail.vue'
),
props: true
}
@ -919,7 +919,7 @@ export default new Router({
props: true,
component: () =>
import(
/* webpackChunkName: "uploads" */ '@/components/library/UploadDetail'
'@/components/library/UploadDetail.vue'
)
},
{
@ -928,7 +928,7 @@ export default new Router({
props: true,
component: () =>
import(
/* webpackChunkName: "library" */ '@/views/library/DetailBase'
'@/views/library/DetailBase.vue'
),
children: [
{
@ -936,7 +936,7 @@ export default new Router({
name: 'library.detail',
component: () =>
import(
/* webpackChunkName: "library" */ '@/views/library/DetailOverview'
'@/views/library/DetailOverview.vue'
)
},
{
@ -944,7 +944,7 @@ export default new Router({
name: 'library.detail.albums',
component: () =>
import(
/* webpackChunkName: "library" */ '@/views/library/DetailAlbums'
'@/views/library/DetailAlbums.vue'
)
},
{
@ -952,7 +952,7 @@ export default new Router({
name: 'library.detail.tracks',
component: () =>
import(
/* webpackChunkName: "library" */ '@/views/library/DetailTracks'
'@/views/library/DetailTracks.vue'
)
},
{
@ -960,7 +960,7 @@ export default new Router({
name: 'library.detail.edit',
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ '@/views/library/Edit'
'@/views/library/Edit.vue'
)
},
{
@ -968,20 +968,12 @@ export default new Router({
name: 'library.detail.upload',
component: () =>
import(
/* webpackChunkName: "auth-libraries" */ '@/views/library/Upload'
'@/views/library/Upload.vue'
),
props: route => ({
defaultImportReference: route.query.import
})
}
// {
// path: "episodes",
// name: "library.detail.episodes",
// component: () =>
// import(
// /* webpackChunkName: "library" */ "@/views/library/DetailEpisodes"
// )
// },
]
}
]
@ -991,7 +983,7 @@ export default new Router({
props: true,
component: () =>
import(
/* webpackChunkName: "channels" */ '@/views/channels/DetailBase'
'@/views/channels/DetailBase.vue'
),
children: [
{
@ -999,7 +991,7 @@ export default new Router({
name: 'channels.detail',
component: () =>
import(
/* webpackChunkName: "channels" */ '@/views/channels/DetailOverview'
'@/views/channels/DetailOverview.vue'
)
},
{
@ -1007,7 +999,7 @@ export default new Router({
name: 'channels.detail.episodes',
component: () =>
import(
/* webpackChunkName: "channels" */ '@/views/channels/DetailEpisodes'
'@/views/channels/DetailEpisodes.vue'
)
}
]
@ -1022,7 +1014,7 @@ export default new Router({
},
component: () =>
import(
/* webpackChunkName: "channels-auth" */ '@/views/channels/SubscriptionsList'
'@/views/channels/SubscriptionsList.vue'
)
},
{
@ -1033,7 +1025,7 @@ export default new Router({
path: '*',
name: '404',
component: () =>
import(/* webpackChunkName: "core" */ '@/components/PageNotFound')
import('@/components/PageNotFound.vue')
}
]
})

View File

@ -15,59 +15,59 @@
// under a class namespace
/* Global */
@import "~fomantic-ui-css/tweaked/reset.css";
@import "~fomantic-ui-css/tweaked/site.css";
@import "fomantic-ui-css/tweaked/reset.css";
@import "fomantic-ui-css/tweaked/site.css";
/* Elements */
@import "~fomantic-ui-css/tweaked/button.css";
@import "~fomantic-ui-css/tweaked/container.css";
@import "~fomantic-ui-css/tweaked/divider.css";
// @import "~fomantic-ui-css/tweaked/flag.css";
@import "~fomantic-ui-css/tweaked/header.css";
@import "~fomantic-ui-css/tweaked/icon.css";
@import "~fomantic-ui-css/tweaked/image.css";
@import "~fomantic-ui-css/tweaked/input.css";
@import "~fomantic-ui-css/tweaked/label.css";
@import "~fomantic-ui-css/tweaked/list.css";
@import "~fomantic-ui-css/tweaked/loader.css";
@import "~fomantic-ui-css/tweaked/placeholder.css";
// @import "~fomantic-ui-css/tweaked/rail.css";
// @import "~fomantic-ui-css/tweaked/reveal.css";
@import "~fomantic-ui-css/tweaked/segment.css";
@import "~fomantic-ui-css/tweaked/step.css";
@import "fomantic-ui-css/tweaked/button.css";
@import "fomantic-ui-css/tweaked/container.css";
@import "fomantic-ui-css/tweaked/divider.css";
// @import "fomantic-ui-css/tweaked/flag.css";
@import "fomantic-ui-css/tweaked/header.css";
@import "fomantic-ui-css/tweaked/icon.css";
@import "fomantic-ui-css/tweaked/image.css";
@import "fomantic-ui-css/tweaked/input.css";
@import "fomantic-ui-css/tweaked/label.css";
@import "fomantic-ui-css/tweaked/list.css";
@import "fomantic-ui-css/tweaked/loader.css";
@import "fomantic-ui-css/tweaked/placeholder.css";
// @import "fomantic-ui-css/tweaked/rail.css";
// @import "fomantic-ui-css/tweaked/reveal.css";
@import "fomantic-ui-css/tweaked/segment.css";
@import "fomantic-ui-css/tweaked/step.css";
/* Collections */
// @import "~fomantic-ui-css/tweaked/breadcrumb.css";
@import "~fomantic-ui-css/tweaked/form.css";
@import "~fomantic-ui-css/tweaked/grid.css";
@import "~fomantic-ui-css/tweaked/menu.css";
@import "~fomantic-ui-css/tweaked/message.css";
@import "~fomantic-ui-css/tweaked/table.css";
// @import "fomantic-ui-css/tweaked/breadcrumb.css";
@import "fomantic-ui-css/tweaked/form.css";
@import "fomantic-ui-css/tweaked/grid.css";
@import "fomantic-ui-css/tweaked/menu.css";
@import "fomantic-ui-css/tweaked/message.css";
@import "fomantic-ui-css/tweaked/table.css";
/* Views */
// @import "~fomantic-ui-css/tweaked/ad.css";
@import "~fomantic-ui-css/tweaked/card.css";
// @import "~fomantic-ui-css/tweaked/comment.css";
@import "~fomantic-ui-css/tweaked/feed.css";
@import "~fomantic-ui-css/tweaked/item.css";
@import "~fomantic-ui-css/tweaked/statistic.css";
// @import "fomantic-ui-css/tweaked/ad.css";
@import "fomantic-ui-css/tweaked/card.css";
// @import "fomantic-ui-css/tweaked/comment.css";
@import "fomantic-ui-css/tweaked/feed.css";
@import "fomantic-ui-css/tweaked/item.css";
@import "fomantic-ui-css/tweaked/statistic.css";
/* Modules */
// @import "~fomantic-ui-css/tweaked/accordion.css";
@import "~fomantic-ui-css/tweaked/checkbox.css";
@import "~fomantic-ui-css/tweaked/dimmer.css";
@import "~fomantic-ui-css/tweaked/dropdown.css";
// @import "~fomantic-ui-css/tweaked/embed.css";
@import "~fomantic-ui-css/tweaked/modal.css";
// @import "~fomantic-ui-css/tweaked/nag.css";
@import "~fomantic-ui-css/tweaked/popup.css";
@import "~fomantic-ui-css/tweaked/progress.css";
// @import "~fomantic-ui-css/tweaked/rating.css";
@import "~fomantic-ui-css/tweaked/search.css";
// @import "~fomantic-ui-css/tweaked/shape.css";
@import "~fomantic-ui-css/tweaked/sidebar.css";
@import "~fomantic-ui-css/tweaked/sticky.css";
@import "~fomantic-ui-css/tweaked/tab.css";
@import "~fomantic-ui-css/tweaked/text.css";
@import "~fomantic-ui-css/tweaked/toast.css";
@import "~fomantic-ui-css/tweaked/transition.css";
// @import "fomantic-ui-css/tweaked/accordion.css";
@import "fomantic-ui-css/tweaked/checkbox.css";
@import "fomantic-ui-css/tweaked/dimmer.css";
@import "fomantic-ui-css/tweaked/dropdown.css";
// @import "fomantic-ui-css/tweaked/embed.css";
@import "fomantic-ui-css/tweaked/modal.css";
// @import "fomantic-ui-css/tweaked/nag.css";
@import "fomantic-ui-css/tweaked/popup.css";
@import "fomantic-ui-css/tweaked/progress.css";
// @import "fomantic-ui-css/tweaked/rating.css";
@import "fomantic-ui-css/tweaked/search.css";
// @import "fomantic-ui-css/tweaked/shape.css";
@import "fomantic-ui-css/tweaked/sidebar.css";
@import "fomantic-ui-css/tweaked/sticky.css";
@import "fomantic-ui-css/tweaked/tab.css";
@import "fomantic-ui-css/tweaked/text.css";
@import "fomantic-ui-css/tweaked/toast.css";
@import "fomantic-ui-css/tweaked/transition.css";

View File

@ -17,7 +17,7 @@
</template>
<script>
import LoginForm from '@/components/auth/LoginForm'
import LoginForm from '@/components/auth/LoginForm.vue'
export default {
components: {

View File

@ -5,7 +5,7 @@
</template>
<script>
import LibraryFilesTable from './FilesTable'
import LibraryFilesTable from './FilesTable.vue'
export default {
components: {

View File

@ -66,9 +66,9 @@
<script>
import axios from 'axios'
import LibraryForm from './Form'
import LibraryCard from './Card'
import Quota from './Quota'
import LibraryForm from './Form.vue'
import LibraryCard from './Card.vue'
import Quota from './Quota.vue'
export default {
components: {

View File

@ -66,8 +66,8 @@
<script>
import axios from 'axios'
import ScanForm from './ScanForm'
import LibraryCard from './Card'
import ScanForm from './ScanForm.vue'
import LibraryCard from './Card.vue'
export default {
components: {

16
front/vite.config.js Normal file
View File

@ -0,0 +1,16 @@
// vite.config.js
import { defineConfig } from 'vite'
import { createVuePlugin as vue } from "vite-plugin-vue2";
const path = require("path");
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
})

File diff suppressed because it is too large Load Diff