mirror of
https://github.com/owntone/owntone-server.git
synced 2025-04-12 23:42:32 -04:00
[web] Avoid styling at page level
This commit is contained in:
parent
3cb26a8b77
commit
2e38df1c40
18
web-src/src/components/ListOptions.vue
Normal file
18
web-src/src/components/ListOptions.vue
Normal file
@ -0,0 +1,18 @@
|
||||
<template>
|
||||
<div class="columns">
|
||||
<div v-if="$slots.filter" class="column">
|
||||
<div class="is-size-7 is-uppercase" v-text="$t('options.filter.title')" />
|
||||
<slot name="filter" />
|
||||
</div>
|
||||
<div v-if="$slots.sort" class="column">
|
||||
<div class="is-size-7 is-uppercase" v-text="$t('options.sort.title')" />
|
||||
<slot name="sort" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'ListOptions'
|
||||
}
|
||||
</script>
|
@ -4,12 +4,8 @@
|
||||
<content-with-heading>
|
||||
<template #options>
|
||||
<index-button-list :indices="albums.indices" />
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.filter.title')"
|
||||
/>
|
||||
<list-options>
|
||||
<template #filter>
|
||||
<control-switch v-model="uiStore.hideSingles">
|
||||
<template #label>
|
||||
<span v-text="$t('options.filter.hide-singles')" />
|
||||
@ -29,18 +25,14 @@
|
||||
<span v-text="$t('options.filter.hide-spotify-help')" />
|
||||
</template>
|
||||
</control-switch>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.sort.title')"
|
||||
/>
|
||||
</template>
|
||||
<template #sort>
|
||||
<control-dropdown
|
||||
v-model:value="uiStore.albumsSort"
|
||||
:options="groupings"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</list-options>
|
||||
</template>
|
||||
<template #heading-left>
|
||||
<heading-title :content="heading" />
|
||||
@ -60,6 +52,7 @@ import { GroupedList } from '@/lib/GroupedList'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import IndexButtonList from '@/components/IndexButtonList.vue'
|
||||
import ListAlbums from '@/components/ListAlbums.vue'
|
||||
import ListOptions from '@/components/ListOptions.vue'
|
||||
import TabsMusic from '@/components/TabsMusic.vue'
|
||||
import { useServicesStore } from '@/stores/services'
|
||||
import { useUIStore } from '@/stores/ui'
|
||||
@ -83,6 +76,7 @@ export default {
|
||||
HeadingTitle,
|
||||
IndexButtonList,
|
||||
ListAlbums,
|
||||
ListOptions,
|
||||
TabsMusic
|
||||
},
|
||||
beforeRouteEnter(to, from, next) {
|
||||
|
@ -2,12 +2,8 @@
|
||||
<div>
|
||||
<content-with-heading>
|
||||
<template #options>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('page.artist.filter.title')"
|
||||
/>
|
||||
<list-options>
|
||||
<template #filter>
|
||||
<control-switch
|
||||
v-if="servicesStore.isSpotifyEnabled"
|
||||
v-model="uiStore.hideSpotify"
|
||||
@ -19,18 +15,14 @@
|
||||
<span v-text="$t('page.artist.filter.hide-spotify-help')" />
|
||||
</template>
|
||||
</control-switch>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('page.artist.sort.title')"
|
||||
/>
|
||||
</template>
|
||||
<template #sort>
|
||||
<control-dropdown
|
||||
v-model:value="uiStore.artistAlbumsSort"
|
||||
:options="groupings"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</list-options>
|
||||
</template>
|
||||
<template #heading-left>
|
||||
<heading-title :content="heading" />
|
||||
@ -61,8 +53,9 @@ import ControlButton from '@/components/ControlButton.vue'
|
||||
import ControlDropdown from '@/components/ControlDropdown.vue'
|
||||
import ControlSwitch from '@/components/ControlSwitch.vue'
|
||||
import { GroupedList } from '@/lib/GroupedList'
|
||||
import HeadingTitle from '../components/HeadingTitle.vue'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import ListAlbums from '@/components/ListAlbums.vue'
|
||||
import ListOptions from '@/components/ListOptions.vue'
|
||||
import ModalDialogArtist from '@/components/ModalDialogArtist.vue'
|
||||
import { useServicesStore } from '@/stores/services'
|
||||
import { useUIStore } from '@/stores/ui'
|
||||
@ -90,6 +83,7 @@ export default {
|
||||
ControlSwitch,
|
||||
HeadingTitle,
|
||||
ListAlbums,
|
||||
ListOptions,
|
||||
ModalDialogArtist
|
||||
},
|
||||
beforeRouteEnter(to, from, next) {
|
||||
|
@ -3,12 +3,8 @@
|
||||
<content-with-heading>
|
||||
<template #options>
|
||||
<index-button-list :indices="tracks.indices" />
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<p
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.filter.title')"
|
||||
/>
|
||||
<list-options>
|
||||
<template #filter>
|
||||
<control-switch
|
||||
v-if="servicesStore.isSpotifyEnabled"
|
||||
v-model="uiStore.hideSpotify"
|
||||
@ -20,18 +16,14 @@
|
||||
<span v-text="$t('options.filter.hide-spotify-help')" />
|
||||
</template>
|
||||
</control-switch>
|
||||
</div>
|
||||
<div class="column">
|
||||
<p
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.sort.title')"
|
||||
/>
|
||||
</template>
|
||||
<template #sort>
|
||||
<control-dropdown
|
||||
v-model:value="uiStore.artistTracksSort"
|
||||
:options="groupings"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</list-options>
|
||||
</template>
|
||||
<template #heading-left>
|
||||
<heading-title :content="heading" />
|
||||
@ -64,6 +56,7 @@ import ControlSwitch from '@/components/ControlSwitch.vue'
|
||||
import { GroupedList } from '@/lib/GroupedList'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import IndexButtonList from '@/components/IndexButtonList.vue'
|
||||
import ListOptions from '@/components/ListOptions.vue'
|
||||
import ListTracks from '@/components/ListTracks.vue'
|
||||
import ModalDialogArtist from '@/components/ModalDialogArtist.vue'
|
||||
import { useServicesStore } from '@/stores/services'
|
||||
@ -92,6 +85,7 @@ export default {
|
||||
ControlSwitch,
|
||||
HeadingTitle,
|
||||
IndexButtonList,
|
||||
ListOptions,
|
||||
ListTracks,
|
||||
ModalDialogArtist
|
||||
},
|
||||
|
@ -4,12 +4,8 @@
|
||||
<content-with-heading>
|
||||
<template #options>
|
||||
<index-button-list :indices="artists.indices" />
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.filter.title')"
|
||||
/>
|
||||
<list-options>
|
||||
<template #filter>
|
||||
<control-switch v-model="uiStore.hideSingles">
|
||||
<template #label>
|
||||
<span v-text="$t('options.filter.hide-singles')" />
|
||||
@ -18,28 +14,25 @@
|
||||
<span v-text="$t('options.filter.hide-singles-help')" />
|
||||
</template>
|
||||
</control-switch>
|
||||
<div v-if="servicesStore.isSpotifyEnabled" class="field">
|
||||
<control-switch v-model="uiStore.hideSpotify">
|
||||
<template #label>
|
||||
<span v-text="$t('options.filter.hide-spotify')" />
|
||||
</template>
|
||||
<template #help>
|
||||
<span v-text="$t('options.filter.hide-spotify-help')" />
|
||||
</template>
|
||||
</control-switch>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.sort.title')"
|
||||
/>
|
||||
<control-switch
|
||||
v-if="servicesStore.isSpotifyEnabled"
|
||||
v-model="uiStore.hideSpotify"
|
||||
>
|
||||
<template #label>
|
||||
<span v-text="$t('options.filter.hide-spotify')" />
|
||||
</template>
|
||||
<template #help>
|
||||
<span v-text="$t('options.filter.hide-spotify-help')" />
|
||||
</template>
|
||||
</control-switch>
|
||||
</template>
|
||||
<template #sort>
|
||||
<control-dropdown
|
||||
v-model:value="uiStore.artistsSort"
|
||||
:options="groupings"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</list-options>
|
||||
</template>
|
||||
<template #heading-left>
|
||||
<heading-title :content="heading" />
|
||||
@ -59,6 +52,7 @@ import { GroupedList } from '@/lib/GroupedList'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import IndexButtonList from '@/components/IndexButtonList.vue'
|
||||
import ListArtists from '@/components/ListArtists.vue'
|
||||
import ListOptions from '@/components/ListOptions.vue'
|
||||
import TabsMusic from '@/components/TabsMusic.vue'
|
||||
import { useServicesStore } from '@/stores/services'
|
||||
import { useUIStore } from '@/stores/ui'
|
||||
@ -82,6 +76,7 @@ export default {
|
||||
HeadingTitle,
|
||||
IndexButtonList,
|
||||
ListArtists,
|
||||
ListOptions,
|
||||
TabsMusic
|
||||
},
|
||||
beforeRouteEnter(to, from, next) {
|
||||
|
@ -3,18 +3,14 @@
|
||||
<content-with-heading>
|
||||
<template #options>
|
||||
<index-button-list :indices="tracks.indices" />
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.sort.title')"
|
||||
/>
|
||||
<list-options>
|
||||
<template #sort>
|
||||
<control-dropdown
|
||||
v-model:value="uiStore.composerTracksSort"
|
||||
:options="groupings"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</list-options>
|
||||
</template>
|
||||
<template #heading-left>
|
||||
<heading-title :content="heading" />
|
||||
@ -46,6 +42,7 @@ import ControlDropdown from '@/components/ControlDropdown.vue'
|
||||
import { GroupedList } from '@/lib/GroupedList'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import IndexButtonList from '@/components/IndexButtonList.vue'
|
||||
import ListOptions from '@/components/ListOptions.vue'
|
||||
import ListTracks from '@/components/ListTracks.vue'
|
||||
import ModalDialogComposer from '@/components/ModalDialogComposer.vue'
|
||||
import { useUIStore } from '@/stores/ui'
|
||||
@ -72,6 +69,7 @@ export default {
|
||||
ControlDropdown,
|
||||
HeadingTitle,
|
||||
IndexButtonList,
|
||||
ListOptions,
|
||||
ListTracks,
|
||||
ModalDialogComposer
|
||||
},
|
||||
|
@ -3,18 +3,14 @@
|
||||
<content-with-heading>
|
||||
<template #options>
|
||||
<index-button-list :indices="tracks.indices" />
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<div
|
||||
class="is-size-7 is-uppercase"
|
||||
v-text="$t('options.sort.title')"
|
||||
/>
|
||||
<list-options>
|
||||
<template #sort>
|
||||
<control-dropdown
|
||||
v-model:value="uiStore.genreTracksSort"
|
||||
:options="groupings"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</list-options>
|
||||
</template>
|
||||
<template #heading-left>
|
||||
<heading-title :content="heading" />
|
||||
@ -47,6 +43,7 @@ import ControlDropdown from '@/components/ControlDropdown.vue'
|
||||
import { GroupedList } from '@/lib/GroupedList'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import IndexButtonList from '@/components/IndexButtonList.vue'
|
||||
import ListOptions from '@/components/ListOptions.vue'
|
||||
import ListTracks from '@/components/ListTracks.vue'
|
||||
import ModalDialogGenre from '@/components/ModalDialogGenre.vue'
|
||||
import { useUIStore } from '@/stores/ui'
|
||||
@ -73,6 +70,7 @@ export default {
|
||||
ControlDropdown,
|
||||
HeadingTitle,
|
||||
IndexButtonList,
|
||||
ListOptions,
|
||||
ListTracks,
|
||||
ModalDialogGenre
|
||||
},
|
||||
|
@ -5,7 +5,7 @@
|
||||
<div class="column is-four-fifths">
|
||||
<form @submit.prevent="search">
|
||||
<div class="field">
|
||||
<p class="control has-icons-left">
|
||||
<div class="control has-icons-left">
|
||||
<input
|
||||
ref="search_field"
|
||||
v-model="query"
|
||||
@ -15,7 +15,7 @@
|
||||
autocomplete="off"
|
||||
/>
|
||||
<mdicon class="icon is-left" name="magnify" size="16" />
|
||||
</p>
|
||||
</div>
|
||||
<i18n-t
|
||||
tag="p"
|
||||
class="help has-text-centered"
|
||||
@ -58,23 +58,22 @@
|
||||
</template>
|
||||
<template v-if="!expanded" #footer>
|
||||
<nav v-if="showAllButton(items)" class="level">
|
||||
<p class="level-item">
|
||||
<a
|
||||
class="button is-small is-rounded"
|
||||
@click="expand(type)"
|
||||
v-text="
|
||||
$t(
|
||||
<div class="level-item">
|
||||
<control-button
|
||||
:button="{
|
||||
handler: () => expand(type),
|
||||
title: $t(
|
||||
`page.search.show-${type}s`,
|
||||
{ count: $n(items.total) },
|
||||
items.total
|
||||
)
|
||||
"
|
||||
}"
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
</nav>
|
||||
<p v-if="!items.total" class="has-text-centered-mobile">
|
||||
<div v-if="!items.total" class="has-text-centered-mobile">
|
||||
<i v-text="$t('page.search.no-results')" />
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
</content-with-heading>
|
||||
</template>
|
||||
@ -82,6 +81,7 @@
|
||||
|
||||
<script>
|
||||
import ContentWithHeading from '@/templates/ContentWithHeading.vue'
|
||||
import ControlButton from '@/components/ControlButton.vue'
|
||||
import { GroupedList } from '@/lib/GroupedList'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import ListAlbums from '@/components/ListAlbums.vue'
|
||||
@ -108,6 +108,7 @@ export default {
|
||||
name: 'PageSearchLibrary',
|
||||
components: {
|
||||
ContentWithHeading,
|
||||
ControlButton,
|
||||
HeadingTitle,
|
||||
ListAlbums,
|
||||
ListArtists,
|
||||
|
@ -5,7 +5,7 @@
|
||||
<div class="column is-four-fifths">
|
||||
<form @submit.prevent="search">
|
||||
<div class="field">
|
||||
<p class="control has-icons-left">
|
||||
<div class="control has-icons-left">
|
||||
<input
|
||||
ref="search_field"
|
||||
v-model="query"
|
||||
@ -15,7 +15,7 @@
|
||||
autocomplete="off"
|
||||
/>
|
||||
<mdicon class="icon is-left" name="magnify" size="16" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="field is-grouped is-grouped-multiline mt-4">
|
||||
@ -55,23 +55,22 @@
|
||||
</template>
|
||||
<template v-if="!expanded" #footer>
|
||||
<nav v-if="showAllButton(items)" class="level">
|
||||
<p class="level-item">
|
||||
<a
|
||||
class="button is-small is-rounded"
|
||||
@click="expand(type)"
|
||||
v-text="
|
||||
$t(
|
||||
<div class="level-item">
|
||||
<control-button
|
||||
:button="{
|
||||
handler: () => expand(type),
|
||||
title: $t(
|
||||
`page.spotify.search.show-${type}s`,
|
||||
{ count: `${$n(items.total)}` },
|
||||
items.total
|
||||
)
|
||||
"
|
||||
}"
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
</nav>
|
||||
<p v-if="!items.total" class="has-text-centered-mobile">
|
||||
<div v-if="!items.total" class="has-text-centered-mobile">
|
||||
<i v-text="$t(`page.spotify.search.no-results`)" />
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
</content-with-heading>
|
||||
</template>
|
||||
@ -79,6 +78,7 @@
|
||||
|
||||
<script>
|
||||
import ContentWithHeading from '@/templates/ContentWithHeading.vue'
|
||||
import ControlButton from '@/components/ControlButton.vue'
|
||||
import HeadingTitle from '@/components/HeadingTitle.vue'
|
||||
import ListAlbumsSpotify from '@/components/ListAlbumsSpotify.vue'
|
||||
import ListArtistsSpotify from '@/components/ListArtistsSpotify.vue'
|
||||
@ -97,6 +97,7 @@ const PAGE_SIZE = 3,
|
||||
export default {
|
||||
name: 'PageSearchSpotify',
|
||||
components: {
|
||||
ControlButton,
|
||||
ContentWithHeading,
|
||||
HeadingTitle,
|
||||
ListAlbumsSpotify,
|
||||
|
Loading…
x
Reference in New Issue
Block a user