mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-05 04:53:01 +00:00
rewrite recommendation component with script setup
This commit is contained in:
+1
-1
@@ -42,7 +42,7 @@ const queue = useQStore();
|
|||||||
const app_dom = document.getElementById("app");
|
const app_dom = document.getElementById("app");
|
||||||
|
|
||||||
queue.readQueue();
|
queue.readQueue();
|
||||||
useShortcuts(queue);
|
useShortcuts(useQStore);
|
||||||
|
|
||||||
app_dom.addEventListener("click", (e) => {
|
app_dom.addEventListener("click", (e) => {
|
||||||
if (context_store.visible) {
|
if (context_store.visible) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Recommendations from "../Recommendation.vue";
|
import Recommendations from "./Recommendation.vue";
|
||||||
import UpNext from "../queue/upNext.vue";
|
import UpNext from "../queue/upNext.vue";
|
||||||
import useQStore from "../../../stores/queue";
|
import useQStore from "../../../stores/queue";
|
||||||
const queue = useQStore();
|
const queue = useQStore();
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<template>
|
||||||
|
<div class="r-tracks rounded border">
|
||||||
|
<div class="heading">Similar tracks</div>
|
||||||
|
<div class="tracks">
|
||||||
|
<div class="song-item" v-for="song in songs" :key="song.artist">
|
||||||
|
<img src="../../../assets/images/null.webp" class="rounded" />
|
||||||
|
<div class="tags">
|
||||||
|
<div class="title">{{ song.title }}</div>
|
||||||
|
<div class="artist">{{ song.artist }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
const songs = [
|
||||||
|
{
|
||||||
|
title: "Imagine",
|
||||||
|
artist: "John Lennon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Mockingbird",
|
||||||
|
artist: "Eminem",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.r-tracks {
|
||||||
|
margin: 0.5rem 0 0.5rem 0;
|
||||||
|
padding: 0.5rem;
|
||||||
|
|
||||||
|
.heading {
|
||||||
|
font-size: 1.25rem;
|
||||||
|
margin-bottom: 0.5rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tracks .song-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0.5rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 3rem;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
margin-right: $small;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.artist {
|
||||||
|
font-size: small;
|
||||||
|
color: rgba(255, 255, 255, 0.637);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #3a39393d;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="r-tracks rounded border">
|
|
||||||
<div class="heading">Similar Tracks</div>
|
|
||||||
<div class="tracks">
|
|
||||||
<div class="song-item" v-for="song in songs" :key="song">
|
|
||||||
<div class="album-art image"></div>
|
|
||||||
<div class="tags">
|
|
||||||
<p class="title">{{ song.title }}</p>
|
|
||||||
<hr />
|
|
||||||
<p class="artist">{{ song.artist }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
setup() {
|
|
||||||
const songs = [
|
|
||||||
{
|
|
||||||
title: "Imagine",
|
|
||||||
artist: "John Lennon",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Mockingbird",
|
|
||||||
artist: "Eminem",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const r_albums = ["Crybaby", "Everybody's Everything", "Castles II"];
|
|
||||||
|
|
||||||
return { songs, r_albums };
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
.r-tracks {
|
|
||||||
margin: 0.5rem 0 0.5rem 0;
|
|
||||||
padding: 0.5rem;
|
|
||||||
|
|
||||||
.heading {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
margin-bottom: 0.5rem !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.r-tracks .tracks .song-item {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 0.5rem;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.r-tracks .tracks .song-item:hover {
|
|
||||||
background-color: #3a39393d;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.r-tracks .tracks .song-item hr {
|
|
||||||
border: none;
|
|
||||||
margin: 0.1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.r-tracks .tracks .song-item .album-art {
|
|
||||||
width: 3rem;
|
|
||||||
height: 3rem;
|
|
||||||
background-color: #ccc;
|
|
||||||
margin: 0 0.5rem 0 0;
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
background-image: url(../../assets/images/null.webp);
|
|
||||||
}
|
|
||||||
|
|
||||||
.r-tracks .tracks .song-item .artist {
|
|
||||||
font-size: small;
|
|
||||||
color: rgba(255, 255, 255, 0.637);
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.r-tracks .tracks .song-item .title {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Store } from "pinia";
|
import useQStore from "@/stores/queue"
|
||||||
|
|
||||||
let key_down_fired = false;
|
let key_down_fired = false;
|
||||||
|
|
||||||
@@ -8,7 +8,8 @@ function focusSearchBox() {
|
|||||||
elem.focus();
|
elem.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function (queue: any) {
|
export default function (queue: typeof useQStore) {
|
||||||
|
const q = queue()
|
||||||
window.addEventListener("keydown", (e: any) => {
|
window.addEventListener("keydown", (e: any) => {
|
||||||
let target = e.target;
|
let target = e.target;
|
||||||
let ctrlKey = e.ctrlKey;
|
let ctrlKey = e.ctrlKey;
|
||||||
@@ -29,7 +30,7 @@ export default function (queue: any) {
|
|||||||
key_down_fired = false;
|
key_down_fired = false;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
queue.playNext();
|
q.playNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -39,7 +40,7 @@ export default function (queue: any) {
|
|||||||
if (!key_down_fired) {
|
if (!key_down_fired) {
|
||||||
key_down_fired = true;
|
key_down_fired = true;
|
||||||
|
|
||||||
queue.playPrev();
|
q.playPrev();
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
key_down_fired = false;
|
key_down_fired = false;
|
||||||
@@ -55,7 +56,7 @@ export default function (queue: any) {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
key_down_fired = true;
|
key_down_fired = true;
|
||||||
|
|
||||||
queue.playPause();
|
q.playPause();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,6 @@ const routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/:pathMatch(.*)",
|
path: "/:pathMatch(.*)",
|
||||||
// alias: "*",
|
|
||||||
component: () => import("../views/NotFound.vue"),
|
component: () => import("../views/NotFound.vue"),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
Reference in New Issue
Block a user