From c9cd6a8067b5fde4dd8af5d4711a35a2dc71c0a2 Mon Sep 17 00:00:00 2001 From: geoffrey45 Date: Tue, 6 Sep 2022 15:59:18 +0300 Subject: [PATCH] remove div nesting on right sidebar + rewrite vTooltip to handle updates to tooltip text --- src/components/FolderView/SongList.vue | 57 +++++--------------------- src/components/RightSideBar/Main.vue | 55 +++++++++++-------------- src/components/RightSideBar/Queue.vue | 57 ++++++++------------------ src/components/shared/SongItem.vue | 4 +- src/directives/vTooltip.ts | 30 ++++++++------ src/views/FolderView.vue | 26 ++++++++---- src/views/album/Content.vue | 14 ++++++- src/views/playlist/Content.vue | 19 ++++++++- 8 files changed, 123 insertions(+), 139 deletions(-) diff --git a/src/components/FolderView/SongList.vue b/src/components/FolderView/SongList.vue index 41f1154..e65f928 100644 --- a/src/components/FolderView/SongList.vue +++ b/src/components/FolderView/SongList.vue @@ -16,17 +16,17 @@
-
@@ -38,19 +38,16 @@ diff --git a/src/components/shared/SongItem.vue b/src/components/shared/SongItem.vue index 35798c9..8cbe574 100644 --- a/src/components/shared/SongItem.vue +++ b/src/components/shared/SongItem.vue @@ -86,11 +86,11 @@ const props = defineProps<{ }>(); const emit = defineEmits<{ - (e: "updateQueue", song: Track): void; + (e: "updateQueue"): void; }>(); function emitUpdate(track: Track) { - emit("updateQueue", track); + emit("updateQueue"); } function showMenu(e: Event) { diff --git a/src/directives/vTooltip.ts b/src/directives/vTooltip.ts index 39d52bd..eb56af4 100644 --- a/src/directives/vTooltip.ts +++ b/src/directives/vTooltip.ts @@ -11,13 +11,15 @@ function hideTooltip() { tooltip.style.visibility = "hidden"; } -function handleHover(el: HTMLElement, text: string, isHovered: Ref) { +function handleHover(el: HTMLElement, text: string, handleOthers = true) { + let isHovered = false; + el.addEventListener("mouseover", () => { - isHovered.value = true; + isHovered = true; tooltip.innerText = text; setTimeout(() => { - if (isHovered.value) { + if (isHovered) { tooltip.style.visibility = "visible"; createPopper(el, tooltip, { @@ -37,28 +39,32 @@ function handleHover(el: HTMLElement, text: string, isHovered: Ref) { }); } }, 2000); + + function handleHide() { + ["mouseout", "click"].forEach((event) => { + el.addEventListener(event, () => { + isHovered = false; + hideTooltip(); + }); + }); + } + + handleOthers ? handleHide() : null; }); } let isHovered = ref(false); export default { - state: {}, mounted(el: HTMLElement, binding) { if (tooltip === undefined) { tooltip = getTooltip(); } - handleHover(el, binding.value, isHovered); - ["mouseout", "click"].forEach((event) => { - el.addEventListener(event, () => { - isHovered.value = false; - hideTooltip(); - }); - }); + handleHover(el, binding.value); }, updated(el, binding) { el.removeEventListener("mouseover", () => {}); - handleHover(el, binding.value, isHovered); + handleHover(el, binding.value, false); }, beforeUnmount(el: HTMLElement) { hideTooltip(); diff --git a/src/views/FolderView.vue b/src/views/FolderView.vue index ceec48d..3ec3238 100644 --- a/src/views/FolderView.vue +++ b/src/views/FolderView.vue @@ -12,8 +12,12 @@ loading="lazy" />
- - + + @@ -26,12 +30,14 @@ import SongList from "@/components/FolderView/SongList.vue"; import FolderList from "@/components/FolderView/FolderList.vue"; import FolderSvg from "@/assets/icons/folder.svg"; -import useFStore from "../stores/pages/folder"; -import useLoaderStore from "../stores/loader"; +import useFolderStore from "@/stores/pages/folder"; +import useQueueStore from "@/stores/queue"; +import useLoaderStore from "@/stores/loader"; import { isSameRoute } from "@/composables/perks"; const loader = useLoaderStore(); -const FStore = useFStore(); +const folder = useFolderStore(); +const queue = useQueueStore(); const scrollable = ref(null); @@ -40,11 +46,17 @@ function getFolderName(route: RouteLocationNormalized) { return path.split("/").pop(); } +function playFromPage(index: number) { + queue.playFromFolder(folder.path, folder.tracks); + queue.play(index); +} + onBeforeRouteUpdate((to, from) => { if (isSameRoute(to, from)) return; loader.startLoading(); - FStore.fetchAll(to.params.path as string) + folder + .fetchAll(to.params.path as string) .then(() => { scrollable.value.scrollTop = 0; @@ -107,7 +119,7 @@ onBeforeRouteUpdate((to, from) => { width: 100%; object-fit: cover; object-position: bottom right; - transition: all .25s ease; + transition: all 0.25s ease; } } diff --git a/src/views/album/Content.vue b/src/views/album/Content.vue index bcc4d62..ebb618e 100644 --- a/src/views/album/Content.vue +++ b/src/views/album/Content.vue @@ -6,7 +6,8 @@ :tracks="disc" :on_album_page="true" :disc="key" - :copyright="isLastDisc(key) ? () => copyright : null" + :copyright="isLastDisc(key) ? copyright : null" + @playFromPage="playFromAlbumPage" /> @@ -15,6 +16,8 @@