mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-03 20:13:02 +00:00
fix watchdoge.py add_track()
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import urllib
|
||||||
from typing import List
|
from typing import List
|
||||||
from app import models, functions, helpers
|
from app import models, functions, helpers
|
||||||
from app import trackslib, api
|
from app import trackslib, api
|
||||||
@@ -44,6 +45,37 @@ def get_album_image(album: list) -> str:
|
|||||||
return functions.use_defaults()
|
return functions.use_defaults()
|
||||||
|
|
||||||
|
|
||||||
|
def get_album_tracks(album: str, artist: str) -> List:
|
||||||
|
return [
|
||||||
|
track
|
||||||
|
for track in api.DB_TRACKS
|
||||||
|
if track["album"] == album and track["albumartist"] == artist
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def create_album(track) -> models.Album:
|
||||||
|
"""
|
||||||
|
Generates and returns an album object from a track object.
|
||||||
|
"""
|
||||||
|
album = {
|
||||||
|
"album": track["album"],
|
||||||
|
"artist": track["albumartist"],
|
||||||
|
}
|
||||||
|
|
||||||
|
album_tracks = get_album_tracks(album["album"], album["artist"])
|
||||||
|
|
||||||
|
album["count"] = len(album_tracks)
|
||||||
|
album["duration"] = get_album_duration(album_tracks)
|
||||||
|
album["date"] = album_tracks[0]["date"]
|
||||||
|
album["artistimage"] = urllib.parse.quote_plus(
|
||||||
|
album_tracks[0]["albumartist"] + ".webp"
|
||||||
|
)
|
||||||
|
|
||||||
|
album["image"] = get_album_image(album_tracks)
|
||||||
|
|
||||||
|
return models.Album(album)
|
||||||
|
|
||||||
|
|
||||||
def find_album(albumtitle, artist):
|
def find_album(albumtitle, artist):
|
||||||
for album in api.ALBUMS:
|
for album in api.ALBUMS:
|
||||||
if album.album == albumtitle and album.artist == artist:
|
if album.album == albumtitle and album.artist == artist:
|
||||||
|
|||||||
+4
-4
@@ -10,11 +10,13 @@ from app import trackslib
|
|||||||
bp = Blueprint("api", __name__, url_prefix="")
|
bp = Blueprint("api", __name__, url_prefix="")
|
||||||
functions.start_watchdog()
|
functions.start_watchdog()
|
||||||
|
|
||||||
|
DB_TRACKS = instances.songs_instance.get_all_songs()
|
||||||
ALBUMS: List[models.Album] = []
|
ALBUMS: List[models.Album] = []
|
||||||
TRACKS: List[models.Track] = []
|
TRACKS: List[models.Track] = []
|
||||||
|
|
||||||
home_dir = helpers.home_dir
|
home_dir = helpers.home_dir
|
||||||
|
|
||||||
|
|
||||||
@helpers.background
|
@helpers.background
|
||||||
def initialize() -> None:
|
def initialize() -> None:
|
||||||
"""
|
"""
|
||||||
@@ -201,7 +203,7 @@ def get_artist_data(artist: str):
|
|||||||
|
|
||||||
|
|
||||||
@bp.route("/f/<folder>")
|
@bp.route("/f/<folder>")
|
||||||
@cache.cached()
|
# @cache.cached()
|
||||||
def get_folder_tree(folder: str):
|
def get_folder_tree(folder: str):
|
||||||
"""
|
"""
|
||||||
Returns a list of all the folders and tracks in the given folder.
|
Returns a list of all the folders and tracks in the given folder.
|
||||||
@@ -251,11 +253,9 @@ def get_folder_tree(folder: str):
|
|||||||
@bp.route("/albums")
|
@bp.route("/albums")
|
||||||
def get_albums():
|
def get_albums():
|
||||||
"""returns all the albums"""
|
"""returns all the albums"""
|
||||||
s = instances.songs_instance.get_all_songs()
|
|
||||||
|
|
||||||
albums = []
|
albums = []
|
||||||
|
|
||||||
for song in s:
|
for song in DB_TRACKS:
|
||||||
al_obj = {"name": song["album"], "artist": song["artists"]}
|
al_obj = {"name": song["album"], "artist": song["artists"]}
|
||||||
|
|
||||||
if al_obj not in albums:
|
if al_obj not in albums:
|
||||||
|
|||||||
+10
-37
@@ -100,11 +100,9 @@ def fetch_image_path(artist: str) -> str or None:
|
|||||||
def populate_images():
|
def populate_images():
|
||||||
"""populates the artists images"""
|
"""populates the artists images"""
|
||||||
|
|
||||||
all_songs = instances.songs_instance.get_all_songs()
|
|
||||||
|
|
||||||
artists = []
|
artists = []
|
||||||
|
|
||||||
for song in all_songs:
|
for song in api.DB_TRACKS:
|
||||||
this_artists = song["artists"].split(", ")
|
this_artists = song["artists"].split(", ")
|
||||||
|
|
||||||
for artist in this_artists:
|
for artist in this_artists:
|
||||||
@@ -170,10 +168,9 @@ def return_album_art(filepath):
|
|||||||
|
|
||||||
|
|
||||||
def save_t_colors():
|
def save_t_colors():
|
||||||
tracks = instances.songs_instance.get_all_songs()
|
_bar = Bar("Processing image colors", max=len(api.DB_TRACKS))
|
||||||
_bar = Bar("Processing image colors", max=len(tracks))
|
|
||||||
|
|
||||||
for track in tracks:
|
for track in api.DB_TRACKS:
|
||||||
filepath = track["filepath"]
|
filepath = track["filepath"]
|
||||||
album_art = return_album_art(filepath)
|
album_art = return_album_art(filepath)
|
||||||
|
|
||||||
@@ -366,38 +363,14 @@ def get_album_bio(title: str, albumartist: str):
|
|||||||
|
|
||||||
|
|
||||||
def get_all_albums() -> List[models.Album]:
|
def get_all_albums() -> List[models.Album]:
|
||||||
|
"""
|
||||||
|
Returns a list of album objects for all albums in the database.
|
||||||
|
"""
|
||||||
print("processing albums started ...")
|
print("processing albums started ...")
|
||||||
|
|
||||||
all_tracks = instances.songs_instance.get_all_songs()
|
albums: List[models.Album] = []
|
||||||
album_dicts = []
|
|
||||||
albums = []
|
|
||||||
|
|
||||||
for track in all_tracks:
|
for track in api.DB_TRACKS:
|
||||||
album_dict = {
|
albums.append(albumslib.create_album(track))
|
||||||
"album": track["album"],
|
|
||||||
"artist": track["albumartist"],
|
|
||||||
}
|
|
||||||
|
|
||||||
if album_dict not in album_dicts:
|
return albums
|
||||||
album_dicts.append(album_dict)
|
|
||||||
|
|
||||||
for album in album_dicts:
|
|
||||||
album_tracks = [
|
|
||||||
track
|
|
||||||
for track in all_tracks
|
|
||||||
if track["album"] == album["album"]
|
|
||||||
and track["albumartist"] == album["artist"]
|
|
||||||
]
|
|
||||||
|
|
||||||
album["count"] = len(album_tracks)
|
|
||||||
album["duration"] = albumslib.get_album_duration(album_tracks)
|
|
||||||
album["date"] = album_tracks[0]["date"]
|
|
||||||
album["artistimage"] = urllib.parse.quote_plus(
|
|
||||||
album_tracks[0]["albumartist"] + ".webp"
|
|
||||||
)
|
|
||||||
|
|
||||||
album["image"] = albumslib.get_album_image(album_tracks)
|
|
||||||
|
|
||||||
albums.append(album)
|
|
||||||
|
|
||||||
return [models.Album(album) for album in albums]
|
|
||||||
|
|||||||
@@ -334,5 +334,5 @@ class Album:
|
|||||||
self.count = tags["count"]
|
self.count = tags["count"]
|
||||||
self.duration = tags["duration"]
|
self.duration = tags["duration"]
|
||||||
self.date = tags["date"]
|
self.date = tags["date"]
|
||||||
self.artistimage = "http://127.0.0.1:8900/images/artists/" + tags["artistimage"]
|
self.artistimage = "http://0.0.0.0:8900/images/artists/" + tags["artistimage"]
|
||||||
self.image = "http://127.0.0.1:8900/images/thumbnails/" + tags["image"]
|
self.image = "http://0.0.0.0:8900/images/thumbnails/" + tags["image"]
|
||||||
|
|||||||
@@ -12,17 +12,13 @@ def create_all_tracks() -> List[models.Track]:
|
|||||||
print("Getting all songs...")
|
print("Getting all songs...")
|
||||||
tracks: list[models.Track] = []
|
tracks: list[models.Track] = []
|
||||||
|
|
||||||
for track in instances.songs_instance.get_all_songs():
|
for track in api.DB_TRACKS:
|
||||||
# print(track)
|
|
||||||
# print(albumslib.ALBUMS)
|
|
||||||
try:
|
try:
|
||||||
os.chmod(track["filepath"], 0o755)
|
os.chmod(track["filepath"], 0o755)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
instances.songs_instance.remove_song_by_filepath(track["filepath"])
|
instances.songs_instance.remove_song_by_filepath(track["filepath"])
|
||||||
|
|
||||||
album = albumslib.find_album(track["album"], track["albumartist"])
|
album = albumslib.find_album(track["album"], track["albumartist"])
|
||||||
# print(album)
|
|
||||||
# print(track["album"], track["albumartist"])
|
|
||||||
|
|
||||||
track["image"] = album.image
|
track["image"] = album.image
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from watchdog.events import PatternMatchingEventHandler
|
|||||||
|
|
||||||
from app import instances, functions
|
from app import instances, functions
|
||||||
from app import api, models
|
from app import api, models
|
||||||
|
from app import albumslib
|
||||||
|
|
||||||
|
|
||||||
class OnMyWatch:
|
class OnMyWatch:
|
||||||
@@ -35,14 +36,18 @@ def add_track(filepath: str) -> None:
|
|||||||
Processes the audio tags for a given file ands add them to the music dict.
|
Processes the audio tags for a given file ands add them to the music dict.
|
||||||
"""
|
"""
|
||||||
tags = functions.get_tags(filepath)
|
tags = functions.get_tags(filepath)
|
||||||
print(tags)
|
|
||||||
|
|
||||||
if tags is not None:
|
if tags is not None:
|
||||||
instances.songs_instance.insert_song(tags)
|
instances.songs_instance.insert_song(tags)
|
||||||
track_obj = instances.songs_instance.get_song_by_path(tags["filepath"])
|
track = instances.songs_instance.get_song_by_path(tags["filepath"])
|
||||||
|
|
||||||
|
api.DB_TRACKS.append(track)
|
||||||
|
album = albumslib.create_album(track)
|
||||||
|
api.ALBUMS.append(album)
|
||||||
|
|
||||||
|
track["image"] = album.image
|
||||||
|
api.TRACKS.append(models.Track(track))
|
||||||
|
|
||||||
track = models.Track(track_obj)
|
|
||||||
api.TRACKS.extend(track)
|
|
||||||
|
|
||||||
|
|
||||||
def remove_track(filepath: str) -> None:
|
def remove_track(filepath: str) -> None:
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<Navigation :collapsed="collapsed" />
|
<Navigation :collapsed="collapsed" />
|
||||||
<div class="l-album-art">
|
<div class="l-album-art">
|
||||||
<AlbumArt :collapsed="collapsed" />
|
<nowPlaying :collapsed="collapsed" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<NavBar />
|
<NavBar />
|
||||||
@@ -30,7 +30,7 @@ import BottomBar from "@/components/BottomBar/BottomBar.vue";
|
|||||||
import perks from "@/composables/perks.js";
|
import perks from "@/composables/perks.js";
|
||||||
|
|
||||||
import Main from "./components/RightSideBar/Main.vue";
|
import Main from "./components/RightSideBar/Main.vue";
|
||||||
import AlbumArt from "./components/LeftSidebar/AlbumArt.vue";
|
import nowPlaying from "./components/LeftSidebar/nowPlaying.vue";
|
||||||
import NavBar from "./components/nav/NavBar.vue";
|
import NavBar from "./components/nav/NavBar.vue";
|
||||||
import Tabs from "./components/RightSideBar/Tabs.vue";
|
import Tabs from "./components/RightSideBar/Tabs.vue";
|
||||||
import SearchInput from "./components/RightSideBar/SearchInput.vue";
|
import SearchInput from "./components/RightSideBar/SearchInput.vue";
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14.6415 23.2344L23.2548 14.6123C23.9403 13.918 24.0106 13.5137 24.0106 12.5117V9.18066C24.0106 8.20508 23.7821 7.87109 23.0702 7.15918L21.0575 5.14648C20.3368 4.43457 20.0028 4.20605 19.036 4.20605H15.6962C14.703 4.20605 14.2987 4.27637 13.6132 4.9707L4.9823 13.584C3.66394 14.9023 3.64637 16.2998 4.99109 17.627L10.5985 23.2344C11.9345 24.5615 13.3231 24.5527 14.6415 23.2344ZM13.5077 21.8896C12.9276 22.4697 12.3212 22.4785 11.7235 21.8809L6.33582 16.502C5.73816 15.9043 5.75574 15.2891 6.32703 14.7178L14.8612 6.20117C15.037 6.02539 15.204 5.91992 15.4852 5.91992H19.0184C19.2821 5.91992 19.4667 6.0166 19.6425 6.19238L22.0243 8.57422C22.1913 8.75 22.288 8.92578 22.288 9.19824V12.7314C22.288 13.0215 22.2001 13.1885 22.0243 13.3643L13.5077 21.8896ZM17.9374 11.5361C18.6581 11.5361 19.203 10.9824 19.203 10.2705C19.203 9.56738 18.6581 9.00488 17.9374 9.00488C17.2255 9.00488 16.6805 9.56738 16.6805 10.2705C16.6805 10.9824 17.2255 11.5361 17.9374 11.5361Z" fill="#F2F2F2"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<!-- <template>
|
||||||
<div class="b-bar">
|
<div class="b-bar">
|
||||||
<div class="grid rounded">
|
<div class="grid rounded">
|
||||||
<div class="controlsx rounded">
|
<div class="controlsx rounded">
|
||||||
@@ -34,4 +34,4 @@ import playAudio from "../../composables/playAudio";
|
|||||||
|
|
||||||
const current_pos = playAudio.current_time;
|
const current_pos = playAudio.current_time;
|
||||||
const formatSeconds = perks.formatSeconds;
|
const formatSeconds = perks.formatSeconds;
|
||||||
</script>
|
</script> -->
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ export default {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
border-radius: $small;
|
border-radius: $small;
|
||||||
background-color: rgb(24, 22, 22);
|
background-color: $primary;
|
||||||
padding: $small $small $small 2.25rem;
|
padding: $small $small $small 2.25rem;
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import playAudio from "../../composables/playAudio";
|
import playAudio from '../../../composables/playAudio';
|
||||||
|
|
||||||
const playPause = playAudio.playPause;
|
const playPause = playAudio.playPause;
|
||||||
const playNext = playAudio.playNext;
|
const playNext = playAudio.playNext;
|
||||||
@@ -43,19 +43,19 @@ const isPlaying = playAudio.playing;
|
|||||||
}
|
}
|
||||||
|
|
||||||
#previous {
|
#previous {
|
||||||
background-image: url(../../assets/icons/previous.svg);
|
background-image: url(../../../assets/icons/previous.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.play-pause {
|
.play-pause {
|
||||||
background-image: url(../../assets/icons/play.svg);
|
background-image: url(../../../assets/icons/play.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.isPlaying {
|
.isPlaying {
|
||||||
background-image: url(../../assets/icons/pause.svg);
|
background-image: url(../../../assets/icons/pause.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#next {
|
#next {
|
||||||
background-image: url(../../assets/icons/next.svg);
|
background-image: url(../../../assets/icons/next.svg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import playAudio from "../../composables/playAudio";
|
import playAudio from "../../../composables/playAudio";
|
||||||
const pos = ref(playAudio.pos);
|
const pos = ref(playAudio.pos);
|
||||||
|
|
||||||
const seek = () => {
|
const seek = () => {
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<template>
|
||||||
|
<div class="other-keys">
|
||||||
|
<div class="keys rounded playlist image"></div>
|
||||||
|
<div class="keys rounded heart"></div>
|
||||||
|
<div class="keys rounded folder"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.l_ .other-keys {
|
||||||
|
// border: solid;
|
||||||
|
height: 2.5rem;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
|
||||||
|
.keys {
|
||||||
|
height: 2rem;
|
||||||
|
width: 100%;
|
||||||
|
background-size: 1.5rem;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: $red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.playlist {
|
||||||
|
background-image: url("../../../assets/icons/plus.svg");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -12,7 +12,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</router-link>
|
||||||
<hr />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -38,10 +37,13 @@ const menus = [
|
|||||||
name: "folders",
|
name: "folders",
|
||||||
route_name: "FolderView",
|
route_name: "FolderView",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "tags",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "settings",
|
name: "settings",
|
||||||
route_name: "SettingsView",
|
route_name: "SettingsView",
|
||||||
},
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -85,34 +87,6 @@ const props = defineProps({
|
|||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: $gray;
|
background-color: $gray;
|
||||||
|
|
||||||
#home-icon {
|
|
||||||
background-color: rgba(145, 58, 58, 0.555);
|
|
||||||
}
|
|
||||||
|
|
||||||
#albums-icon {
|
|
||||||
background-color: rgba(113, 58, 145, 0.555);
|
|
||||||
}
|
|
||||||
|
|
||||||
#artists-icon {
|
|
||||||
background-color: rgba(13, 72, 139, 0.555);
|
|
||||||
}
|
|
||||||
|
|
||||||
#playlists-icon {
|
|
||||||
background-color: rgba(206, 13, 132, 0.555);
|
|
||||||
}
|
|
||||||
|
|
||||||
#mixes-icon {
|
|
||||||
background-color: rgba(0, 85, 81, 0.555);
|
|
||||||
}
|
|
||||||
|
|
||||||
#folders-icon {
|
|
||||||
background-color: rgba(90, 89, 3, 0.596);
|
|
||||||
}
|
|
||||||
|
|
||||||
#settings-icon {
|
|
||||||
background-color: rgba(129, 106, 106, 0.596);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-icon {
|
.nav-icon {
|
||||||
@@ -126,16 +100,10 @@ const props = defineProps({
|
|||||||
.in {
|
.in {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
|
||||||
|
|
||||||
#home-icon,
|
& > * {
|
||||||
#albums-icon,
|
background-size: 1.5rem;
|
||||||
#artists-icon,
|
}
|
||||||
#playlists-icon,
|
|
||||||
#mixes-icon,
|
|
||||||
#folders-icon,
|
|
||||||
#settings-icon {
|
|
||||||
background-size: 1.5rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#home-icon {
|
#home-icon {
|
||||||
@@ -164,10 +132,10 @@ const props = defineProps({
|
|||||||
#settings-icon {
|
#settings-icon {
|
||||||
background-image: url(../../assets/icons/settings.svg);
|
background-image: url(../../assets/icons/settings.svg);
|
||||||
}
|
}
|
||||||
|
#tags-icon {
|
||||||
|
background-image: url(../../assets/icons/tag.svg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.side-nav-container hr {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
+11
-8
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l_ rounded" v-if="!props.collapsed">
|
<div class="l_ rounded" v-if="!props.collapsed">
|
||||||
<div class="headin">Now Playing</div>
|
<div class="headin">Now Playing</div>
|
||||||
<div class="menu image rounded"></div>
|
<div class="button menu image rounded"></div>
|
||||||
<div class="separator no-border"></div>
|
<div class="separator no-border"></div>
|
||||||
<div>
|
<div>
|
||||||
<div class="art">
|
<div class="art">
|
||||||
@@ -24,8 +24,8 @@
|
|||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import state from "../../composables/state";
|
import state from "../../composables/state";
|
||||||
import SongCard from "./SongCard.vue";
|
import SongCard from "./SongCard.vue";
|
||||||
import HotKeys from "../shared/HotKeys.vue";
|
import HotKeys from "./NP/HotKeys.vue";
|
||||||
import Progress from "../shared/Progress.vue";
|
import Progress from "./NP/Progress.vue";
|
||||||
|
|
||||||
const current = ref(state.current);
|
const current = ref(state.current);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -51,21 +51,24 @@ const props = defineProps({
|
|||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu {
|
.button {
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
width: 2rem;
|
width: 2rem;
|
||||||
right: $small;
|
|
||||||
top: $small;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
background-image: url("../../assets/icons/right-arrow.svg");
|
|
||||||
background-size: 1.5rem;
|
background-size: 1.5rem;
|
||||||
transform: rotate(90deg);
|
top: $small;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: $gray2;
|
background-color: $gray2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.menu {
|
||||||
|
right: $small;
|
||||||
|
background-image: url("../../assets/icons/right-arrow.svg");
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
|
||||||
br {
|
br {
|
||||||
height: 0rem;
|
height: 0rem;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user