diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py index 96e9c45a667dbda91800c443b08a4b5191c7baa5..59d50b30ead3ea34f5219431475162889461b596 100644 --- a/api/funkwhale_api/common/middleware.py +++ b/api/funkwhale_api/common/middleware.py @@ -56,6 +56,10 @@ def serve_spa(request): def get_spa_html(spa_url): + if spa_url.startswith("/"): + # we try to open a local file + with open(spa_url) as f: + return f.read() cache_key = "spa-html:{}".format(spa_url) cached = caches["local"].get(cache_key) if cached: diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py index 2ed875a53100fb216d09ade2af6fceea3bee4ca1..dd7cd76341fc53571613f94e988899a9ca93352a 100644 --- a/api/tests/common/test_middleware.py +++ b/api/tests/common/test_middleware.py @@ -126,6 +126,12 @@ def test_get_spa_html_from_http(local_cache, r_mock, mocker, settings): ) +def test_get_spa_html_from_disk(tmpfile): + with open(tmpfile.name, "wb") as f: + f.write(b"hello world") + assert middleware.get_spa_html(tmpfile.name) == "hello world" + + def test_get_route_head_tags(mocker, settings): match = mocker.Mock(args=[], kwargs={"pk": 42}, func=mocker.Mock()) resolve = mocker.patch("django.urls.resolve", return_value=match) diff --git a/changes/changelog.d/694.bugfix b/changes/changelog.d/694.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..7dd6e45a9233df5559c193c28e213aa385d4f05b --- /dev/null +++ b/changes/changelog.d/694.bugfix @@ -0,0 +1 @@ +Fixed resizing issues for album cards on artist pages (#694) diff --git a/changes/changelog.d/705.enhancement b/changes/changelog.d/705.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..9f25c9cbdb2d3b2410d582d45c52fcd1e0950915 --- /dev/null +++ b/changes/changelog.d/705.enhancement @@ -0,0 +1 @@ +Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705) diff --git a/front/src/components/audio/album/Card.vue b/front/src/components/audio/album/Card.vue index a439a16b681284aa8aabab2285a227e8c3218733..2f19d7fbb4854f7c248726f64290d026bf087281 100644 --- a/front/src/components/audio/album/Card.vue +++ b/front/src/components/audio/album/Card.vue @@ -22,7 +22,8 @@ <td class="play-cell"> <play-button class="basic icon" :track="track" :discrete="true"></play-button> </td> - <td colspan="6"> + <td class="content-cell" colspan="5"> + <track-favorite-icon :track="track"></track-favorite-icon> <router-link class="track discrete link" :to="{name: 'library.tracks.detail', params: {id: track.id }}"> <template v-if="track.position"> {{ track.position }}. @@ -30,9 +31,6 @@ {{ track.title }} </router-link> </td> - <td> - <track-favorite-icon :track="track"></track-favorite-icon> - </td> </tr> </tbody> </table> @@ -92,16 +90,28 @@ export default { <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped lang="scss"> - -table.fixed td.play-cell { - overflow: auto; +.content-cell { + .link, + .button { + padding: 0.5em 0; + } + .link { + margin-left: 0.5em; + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } } tr { .favorite-icon:not(.favorited) { - display: none; + visibility: hidden; } &:hover .favorite-icon { - display: inherit; + visibility: visible; + } + .favorite-icon { + float: right; } } .expand { diff --git a/front/src/components/library/Artist.vue b/front/src/components/library/Artist.vue index b7154935f4745a7ddceea4cf3707599ba8b5d928..dd2be35ae1b00abba1077e3896d8368213c3f6ae 100644 --- a/front/src/components/library/Artist.vue +++ b/front/src/components/library/Artist.vue @@ -44,10 +44,8 @@ <h2> <translate>Albums by this artist</translate> </h2> - <div class="ui stackable doubling three column grid"> - <div class="column" :key="album.id" v-for="album in albums"> - <album-card :mode="'rich'" class="fluid" :album="album"></album-card> - </div> + <div class="ui cards" > + <album-card :mode="'rich'" :album="album" :key="album.id" v-for="album in albums"></album-card> </div> </section> <section v-if="tracks.length > 0" class="ui vertical stripe segment">