diff --git a/front/package.json b/front/package.json
index 9801d2245..e81081611 100644
--- a/front/package.json
+++ b/front/package.json
@@ -73,6 +73,7 @@
"eslint-config-standard": "17.0.0",
"eslint-plugin-html": "6.2.0",
"eslint-plugin-import": "2.26.0",
+ "eslint-plugin-n": "^15.2.4",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "6.0.0",
"eslint-plugin-vue": "9.2.0",
diff --git a/front/src/components/About.vue b/front/src/components/About.vue
index 05fe12b49..36c66ae56 100644
--- a/front/src/components/About.vue
+++ b/front/src/components/About.vue
@@ -23,7 +23,7 @@ const shortDescription = computed(() => get(nodeinfo.value, 'metadata.shortDescr
const stats = computed(() => {
const users = get(nodeinfo.value, 'usage.users.activeMonth', null)
const hours = get(nodeinfo.value, 'metadata.library.music.hours', 0)
-
+
if (users === null) {
return null
}
@@ -39,8 +39,8 @@ const headerStyle = computed(() => {
return ''
}
- return {
- backgroundImage: `url(${store.getters['instance/absoluteUrl'](banner.value)})`
+ return {
+ backgroundImage: `url(${store.getters['instance/absoluteUrl'](banner.value)})`
}
})
diff --git a/front/src/components/AboutPod.vue b/front/src/components/AboutPod.vue
index cb5847f93..21e29f5aa 100644
--- a/front/src/components/AboutPod.vue
+++ b/front/src/components/AboutPod.vue
@@ -53,8 +53,8 @@ const headerStyle = computed(() => {
return ''
}
- return {
- backgroundImage: `url(${store.getters['instance/absoluteUrl'](banner.value)})`
+ return {
+ backgroundImage: `url(${store.getters['instance/absoluteUrl'](banner.value)})`
}
})
@@ -138,7 +138,7 @@ const headerStyle = computed(() => {
About this pod
-
diff --git a/front/src/components/Home.vue b/front/src/components/Home.vue
index 027f5d4bb..3a09cbc7f 100644
--- a/front/src/components/Home.vue
+++ b/front/src/components/Home.vue
@@ -35,7 +35,7 @@ const defaultUploadQuota = computed(() => get(nodeinfo.value, 'metadata.defaultU
const stats = computed(() => {
const users = get(nodeinfo.value, 'usage.users.activeMonth', null)
const hours = get(nodeinfo.value, 'metadata.library.music.hours', 0)
-
+
if (users === null) {
return null
}
@@ -48,8 +48,8 @@ const headerStyle = computed(() => {
return ''
}
- return {
- backgroundImage: `url(${store.getters['instance/absoluteUrl'](banner.value)})`
+ return {
+ backgroundImage: `url(${store.getters['instance/absoluteUrl'](banner.value)})`
}
})
diff --git a/front/src/components/PageNotFound.vue b/front/src/components/PageNotFound.vue
index c0fa64e4b..60c7121e3 100644
--- a/front/src/components/PageNotFound.vue
+++ b/front/src/components/PageNotFound.vue
@@ -5,7 +5,7 @@ import { useGettext } from 'vue3-gettext'
const path = window.location.href
const { $pgettext } = useGettext()
-const labels = computed(() => ({
+const labels = computed(() => ({
title: $pgettext('Head/*/Title', 'Page Not Found')
}))
diff --git a/front/src/components/Queue.vue b/front/src/components/Queue.vue
index 55739de92..8a6f748b7 100644
--- a/front/src/components/Queue.vue
+++ b/front/src/components/Queue.vue
@@ -8,7 +8,7 @@ import TrackFavoriteIcon from '~/components/favorites/TrackFavoriteIcon.vue'
import TrackPlaylistIcon from '~/components/playlists/TrackPlaylistIcon.vue'
import Draggable from 'vuedraggable'
import { whenever, useTimeoutFn, useWindowScroll, useWindowSize } from '@vueuse/core'
-import { useGettext } from "vue3-gettext"
+import { useGettext } from 'vue3-gettext'
import useQueue from '~/composables/audio/useQueue'
import usePlayer from '~/composables/audio/usePlayer'
@@ -42,8 +42,8 @@ onMounted(async () => {
const { $pgettext } = useGettext()
-const {
- playing,
+const {
+ playing,
loading: isLoadingAudio,
errored,
focused: playerFocused,
@@ -54,10 +54,10 @@ const {
bufferProgress,
currentTime,
pause,
- resume,
+ resume
} = usePlayer()
-const {
+const {
focused: queueFocused,
currentTrack,
hasNext,
diff --git a/front/src/components/RemoteSearchForm.vue b/front/src/components/RemoteSearchForm.vue
index 7847ca934..d20e0a653 100644
--- a/front/src/components/RemoteSearchForm.vue
+++ b/front/src/components/RemoteSearchForm.vue
@@ -29,16 +29,15 @@ const type = ref(props.initialType)
const id = ref(props.initialId)
const errors = ref([] as string[])
-
const { $pgettext } = useGettext()
const labels = computed(() => ({
- title: type.value === 'rss'
+ title: type.value === 'rss'
? $pgettext('Head/Fetch/Title', 'Subscribe to a podcast RSS feed')
: $pgettext('Head/Fetch/Title', 'Subscribe to a podcast hosted on the Fediverse'),
- fieldLabel: type.value === 'rss'
+ fieldLabel: type.value === 'rss'
? $pgettext('*/*/*', 'RSS feed location')
: $pgettext('*/*/*', 'Fediverse object'),
- fieldPlaceholder: type.value === 'rss'
+ fieldPlaceholder: type.value === 'rss'
? $pgettext('Head/Fetch/Field.Placeholder', 'https://website.example.com/rss.xml')
: $pgettext('Head/Fetch/Field.Placeholder', '@username@example.com')
}))
diff --git a/front/src/components/SanitizedHtml.vue b/front/src/components/SanitizedHtml.vue
index 65ca4358e..374bd4b33 100644
--- a/front/src/components/SanitizedHtml.vue
+++ b/front/src/components/SanitizedHtml.vue
@@ -8,7 +8,7 @@ interface Props {
}
const props = withDefaults(defineProps(), {
- tag: 'div'
+ tag: 'div'
})
const html = computed(() => DOMPurify.sanitize(props.html))
@@ -17,4 +17,4 @@ const root = () => h(props.tag, { innerHTML: html.value })
-
\ No newline at end of file
+
diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue
index f8aecc373..a6696ad41 100644
--- a/front/src/components/Sidebar.vue
+++ b/front/src/components/Sidebar.vue
@@ -39,7 +39,7 @@ const labels = computed(() => ({
selectTrack: $pgettext('Sidebar/Player/Hidden text', 'Play this track'),
pendingFollows: $pgettext('Sidebar/Notifications/Hidden text', 'Pending follow requests'),
pendingReviewEdits: $pgettext('Sidebar/Moderation/Hidden text', 'Pending review edits'),
- pendingReviewReports: $pgettext('Sidebar/Moderation/Hidden text', 'Pending review reports'),
+ pendingReviewReports: $pgettext('Sidebar/Moderation/Hidden text', 'Pending review reports'),
language: $pgettext('Sidebar/Settings/Dropdown.Label/Short, Verb', 'Language'),
theme: $pgettext('Sidebar/Settings/Dropdown.Label/Short, Verb', 'Theme'),
addContent: $pgettext('*/Library/*/Verb', 'Add content'),
@@ -51,11 +51,11 @@ const expanded = ref('explore')
const ROUTE_MAPPINGS: Record = {
explore: [
- 'search',
- 'library.index',
- 'library.podcasts.browse',
- 'library.albums.browse',
- 'library.albums.detail',
+ 'search',
+ 'library.index',
+ 'library.podcasts.browse',
+ 'library.albums.browse',
+ 'library.albums.detail',
'library.artists.browse',
'library.artists.detail',
'library.tracks.detail',
@@ -88,10 +88,10 @@ watchEffect(() => {
expanded.value = store.state.auth.authenticated ? 'myLibrary' : 'explore'
})
-const moderationNotifications = computed(() =>
- store.state.ui.notifications.pendingReviewEdits
- + store.state.ui.notifications.pendingReviewReports
- + store.state.ui.notifications.pendingReviewRequests
+const moderationNotifications = computed(() =>
+ store.state.ui.notifications.pendingReviewEdits +
+ store.state.ui.notifications.pendingReviewReports +
+ store.state.ui.notifications.pendingReviewRequests
)
Promise.resolve().then(async () => {
diff --git a/front/src/components/admin/SettingsGroup.vue b/front/src/components/admin/SettingsGroup.vue
index 33f9bfce1..fc7df1802 100644
--- a/front/src/components/admin/SettingsGroup.vue
+++ b/front/src/components/admin/SettingsGroup.vue
@@ -53,7 +53,7 @@ const save = async () => {
let contentType = 'application/json'
if (fileSettings.value.length > 0) {
- const fileSettingsIDs = fileSettings.value.map((setting) => setting.identifier)
+ const fileSettingsIDs = fileSettings.value.map((setting) => setting.identifier)
const data = settings.value.reduce((data, setting) => {
if (fileSettingsIDs.includes(setting.identifier)) {
const input = fileRefs[setting.identifier]
@@ -69,7 +69,7 @@ const save = async () => {
}
return data
- }, {} as Record)
+ }, {} as Record)
contentType = 'multipart/form-data'
postData = useFormData(data)
diff --git a/front/src/components/audio/ChannelEntryCard.vue b/front/src/components/audio/ChannelEntryCard.vue
index 0d5959bdb..cbe9abeae 100644
--- a/front/src/components/audio/ChannelEntryCard.vue
+++ b/front/src/components/audio/ChannelEntryCard.vue
@@ -7,7 +7,6 @@ import useQueue from '~/composables/audio/useQueue'
import usePlayer from '~/composables/audio/usePlayer'
import { computed } from 'vue'
-
interface Props {
// TODO (wvffle): Is it correct type?
entry: Track
diff --git a/front/src/components/audio/ChannelSeries.vue b/front/src/components/audio/ChannelSeries.vue
index d41f9cc39..587de6f99 100644
--- a/front/src/components/audio/ChannelSeries.vue
+++ b/front/src/components/audio/ChannelSeries.vue
@@ -90,7 +90,7 @@ export default {
const params = clone(this.filters)
params.page_size = this.limit
params.include_channels = true
- axios.get(url, { params: params }).then((response) => {
+ axios.get(url, { params }).then((response) => {
self.nextPage = response.data.next
self.isLoading = false
self.objects = self.objects.concat(response.data.results)
diff --git a/front/src/components/audio/ChannelsWidget.vue b/front/src/components/audio/ChannelsWidget.vue
index 70b85a62d..146461e39 100644
--- a/front/src/components/audio/ChannelsWidget.vue
+++ b/front/src/components/audio/ChannelsWidget.vue
@@ -71,7 +71,7 @@ export default {
const params = clone(this.filters)
params.page_size = this.limit
params.include_channels = true
- axios.get(url, { params: params }).then((response) => {
+ axios.get(url, { params }).then((response) => {
self.nextPage = response.data.next
self.isLoading = false
self.objects = self.objects.concat(response.data.results)
diff --git a/front/src/components/audio/EmbedWizard.vue b/front/src/components/audio/EmbedWizard.vue
index 3e217d7f7..76ae11120 100644
--- a/front/src/components/audio/EmbedWizard.vue
+++ b/front/src/components/audio/EmbedWizard.vue
@@ -32,7 +32,7 @@ const iframeSrc = computed(() => {
const bParam = !window.location.href.startsWith(instanceUrl)
? `&b=${instanceUrl}`
: ''
-
+
return `${base}embed.html?&type=${props.type}&id=${props.id}${bParam}`
})
diff --git a/front/src/components/audio/PlayButton.vue b/front/src/components/audio/PlayButton.vue
index f046a0a68..035967139 100644
--- a/front/src/components/audio/PlayButton.vue
+++ b/front/src/components/audio/PlayButton.vue
@@ -51,10 +51,10 @@ const props = withDefaults(defineProps(), {
paused: () => false
})
-const {
- playable,
- filterableArtist,
- filterArtist,
+const {
+ playable,
+ filterableArtist,
+ filterArtist,
enqueue,
enqueueNext,
replacePlay,
@@ -75,14 +75,14 @@ const labels = computed(() => ({
addToPlaylist: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Add to playlist…'),
hideArtist: $pgettext('*/Queue/Dropdown/Button/Label/Short', 'Hide content from this artist'),
replacePlay: props.track
- ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play track')
- : props.album
- ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play album')
- : props.artist
- ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play artist')
- : props.playlist
- ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play playlist')
- : $pgettext('*/Queue/Dropdown/Button/Title', 'Play tracks')
+ ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play track')
+ : props.album
+ ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play album')
+ : props.artist
+ ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play artist')
+ : props.playlist
+ ? $pgettext('*/Queue/Dropdown/Button/Title', 'Play playlist')
+ : $pgettext('*/Queue/Dropdown/Button/Title', 'Play tracks')
}))
const title = computed(() => {
diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue
index 486ab46b4..7fca3d0fe 100644
--- a/front/src/components/audio/Player.vue
+++ b/front/src/components/audio/Player.vue
@@ -284,7 +284,7 @@ const switchTab = () => {
>
{{ currentTimeFormatted }}
- |
+ |
{{ durationFormatted }}
diff --git a/front/src/components/audio/Search.vue b/front/src/components/audio/Search.vue
index 0e6eee80c..bcc414586 100644
--- a/front/src/components/audio/Search.vue
+++ b/front/src/components/audio/Search.vue
@@ -125,7 +125,7 @@ export default {
query: this.query
}
axios.get('search', {
- params: params
+ params
}).then((response) => {
self.results = self.castResults(response.data)
self.isLoading = false
diff --git a/front/src/components/audio/VolumeControl.vue b/front/src/components/audio/VolumeControl.vue
index e1354a46d..1bb7ae64f 100644
--- a/front/src/components/audio/VolumeControl.vue
+++ b/front/src/components/audio/VolumeControl.vue
@@ -17,7 +17,7 @@ const sliderVolume = computed({
})
const { $pgettext } = useGettext()
-const labels = computed(() => ({
+const labels = computed(() => ({
unmute: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Unmute'),
mute: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Mute'),
slider: $pgettext('Sidebar/Player/Icon.Tooltip/Verb', 'Adjust volume')
diff --git a/front/src/components/audio/album/Widget.vue b/front/src/components/audio/album/Widget.vue
index 15246c83f..5e61c2631 100644
--- a/front/src/components/audio/album/Widget.vue
+++ b/front/src/components/audio/album/Widget.vue
@@ -107,7 +107,7 @@ export default {
const params = { q: this.query, ...this.filters }
params.page_size = this.limit
params.offset = this.offset
- axios.get(url, { params: params }).then((response) => {
+ axios.get(url, { params }).then((response) => {
self.previousPage = response.data.previous
self.nextPage = response.data.next
self.isLoading = false
diff --git a/front/src/components/audio/artist/Widget.vue b/front/src/components/audio/artist/Widget.vue
index eade31314..13128e9d9 100644
--- a/front/src/components/audio/artist/Widget.vue
+++ b/front/src/components/audio/artist/Widget.vue
@@ -103,7 +103,7 @@ export default {
const params = { q: this.query, ...this.filters }
params.page_size = this.limit
params.offset = this.offset
- axios.get(url, { params: params }).then((response) => {
+ axios.get(url, { params }).then((response) => {
self.previousPage = response.data.previous
self.nextPage = response.data.next
self.isLoading = false
diff --git a/front/src/components/audio/podcast/Modal.vue b/front/src/components/audio/podcast/Modal.vue
index 7533257e0..f846f2137 100644
--- a/front/src/components/audio/podcast/Modal.vue
+++ b/front/src/components/audio/podcast/Modal.vue
@@ -47,22 +47,22 @@ const store = useStore()
const isFavorite = computed(() => store.getters['favorites/isFavorite'](props.track.id))
const { $pgettext } = useGettext()
-const favoriteButton = computed(() => isFavorite.value
+const favoriteButton = computed(() => isFavorite.value
? $pgettext('Content/Track/Icon.Tooltip/Verb', 'Remove from favorites')
: $pgettext('Content/Track/*/Verb', 'Add to favorites')
)
-const trackDetailsButton = computed(() => props.track.artist?.content_category === 'podcast'
+const trackDetailsButton = computed(() => props.track.artist?.content_category === 'podcast'
? $pgettext('*/Queue/Dropdown/Button/Label/Short', 'Episode details')
: $pgettext('*/Queue/Dropdown/Button/Label/Short', 'Track details')
)
-const albumDetailsButton = computed(() => props.track.artist?.content_category === 'podcast'
+const albumDetailsButton = computed(() => props.track.artist?.content_category === 'podcast'
? $pgettext('*/Queue/Dropdown/Button/Label/Short', 'View series')
: $pgettext('*/Queue/Dropdown/Button/Label/Short', 'View album')
)
-const artistDetailsButton = computed(() => props.track.artist?.content_category === 'podcast'
+const artistDetailsButton = computed(() => props.track.artist?.content_category === 'podcast'
? $pgettext('*/Queue/Dropdown/Button/Label/Short', 'View channel')
: $pgettext('*/Queue/Dropdown/Button/Label/Short', 'View artist')
)
diff --git a/front/src/components/audio/podcast/Row.vue b/front/src/components/audio/podcast/Row.vue
index 15c7a1604..9c46e2320 100644
--- a/front/src/components/audio/podcast/Row.vue
+++ b/front/src/components/audio/podcast/Row.vue
@@ -1,7 +1,6 @@
diff --git a/front/src/components/playlists/PlaylistModal.vue b/front/src/components/playlists/PlaylistModal.vue
index 34069ef76..538b29d7c 100644
--- a/front/src/components/playlists/PlaylistModal.vue
+++ b/front/src/components/playlists/PlaylistModal.vue
@@ -26,7 +26,7 @@ const playlists = computed(() => store.state.playlists.playlists)
const track = computed(() => store.state.playlists.modalTrack)
const { $pgettext } = useGettext()
-const labels = computed(() => ({
+const labels = computed(() => ({
addToPlaylist: $pgettext('Popup/Playlist/Table.Button.Tooltip/Verb', 'Add to this playlist'),
filterPlaylistField: $pgettext('Popup/Playlist/Form/Placeholder', 'Enter playlist name')
}))
@@ -51,7 +51,7 @@ const duplicateTrackAddInfo = ref({} as { playlist_name?: string })
const addToPlaylist = async (playlistId: number, allowDuplicates: boolean) => {
lastSelectedPlaylist.value = playlistId
- try {
+ try {
await axios.post(`playlists/${playlistId}/add/`, {
tracks: [track.value?.id].filter(i => i),
allow_duplicates: allowDuplicates
@@ -106,7 +106,10 @@ store.dispatch('playlists/fetchOwn')