mirror of
https://github.com/tcsenpai/swingmusic.git
synced 2025-06-07 03:35:35 +00:00
add navbar and new logo
This commit is contained in:
parent
6931cd926c
commit
eebe6b4440
@ -283,10 +283,6 @@ def get_folder_tree(folder: str):
|
||||
if track.filepath == entry.path:
|
||||
songs.append(track)
|
||||
|
||||
# for track in all_the_f_music:
|
||||
# if track.filepath == req_dir:
|
||||
# songs.append(track)
|
||||
|
||||
return {
|
||||
"files": helpers.remove_duplicates(songs),
|
||||
"folders": sorted(folders, key=lambda i: i["name"]),
|
||||
|
@ -185,11 +185,11 @@ def extract_thumb(audio_file_path: str) -> str:
|
||||
small_img = png.resize((250, 250), Image.ANTIALIAS)
|
||||
small_img.save(img_path, format="webp")
|
||||
except:
|
||||
return use_defaults()
|
||||
return None
|
||||
|
||||
return webp_path
|
||||
else:
|
||||
return use_defaults()
|
||||
return None
|
||||
|
||||
|
||||
def parse_artist_tag(audio):
|
||||
@ -309,7 +309,6 @@ def get_tags(fullpath: str) -> dict:
|
||||
"length": round(audio.info.length),
|
||||
"bitrate": round(int(audio.info.bitrate) / 1000),
|
||||
"filepath": fullpath,
|
||||
"image": extract_thumb(fullpath),
|
||||
"folder": os.path.dirname(fullpath).replace(helpers.home_dir, ""),
|
||||
}
|
||||
|
||||
@ -342,4 +341,43 @@ def get_album_bio(title: str, albumartist: str):
|
||||
|
||||
|
||||
def get_all_albums():
|
||||
albums = []
|
||||
print("processing albums started ...")
|
||||
|
||||
all_tracks = instances.songs_instance.get_all_songs()
|
||||
album_dicts = []
|
||||
|
||||
for track in all_tracks:
|
||||
album_dict = {
|
||||
"album": track["album"],
|
||||
"artist": track["albumartist"],
|
||||
}
|
||||
|
||||
if album_dict not in album_dicts:
|
||||
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"] = helpers.get_album_duration(album_tracks)
|
||||
album["date"] = album_tracks[0]["date"]
|
||||
album["artistimage"] = (
|
||||
"http://127.0.0.1:8900/images/artists/"
|
||||
+ album_tracks[0]["albumartist"].replace("/", "::")
|
||||
+ ".webp"
|
||||
)
|
||||
|
||||
if len(album_tracks) == 1:
|
||||
album["image"] = extract_thumb(album_tracks[0]["filepath"])
|
||||
|
||||
if len(album_tracks) > 1:
|
||||
album["image"] = helpers.get_album_image(album_tracks)
|
||||
|
||||
instances.album_instance.insert_album(album)
|
||||
|
||||
print("done processing albums")
|
||||
|
@ -43,8 +43,9 @@ def reindex_tracks():
|
||||
flag = False
|
||||
|
||||
while flag is False:
|
||||
functions.populate()
|
||||
functions.populate_images()
|
||||
# functions.populate()
|
||||
functions.get_all_albums()
|
||||
# functions.populate_images()
|
||||
# functions.save_t_colors()
|
||||
|
||||
time.sleep(300)
|
||||
@ -188,6 +189,23 @@ def get_album_duration(album: List[models.Track]) -> int:
|
||||
album_duration = 0
|
||||
|
||||
for track in album:
|
||||
album_duration += track.length
|
||||
try:
|
||||
album_duration += track.length
|
||||
except AttributeError:
|
||||
album_duration += track["length"]
|
||||
|
||||
return album_duration
|
||||
|
||||
|
||||
def get_album_image(album: list) -> str:
|
||||
"""
|
||||
Gets the image of an album.
|
||||
"""
|
||||
|
||||
for track in album:
|
||||
img = functions.extract_thumb(track["filepath"])
|
||||
|
||||
if img is not None:
|
||||
return img
|
||||
|
||||
return functions.use_defaults()
|
@ -1,7 +1,6 @@
|
||||
from app.models import AllSongs
|
||||
from app.models import Artists
|
||||
from app.models import TrackColors
|
||||
from app.models import AllSongs, Artists, TrackColors, Albums
|
||||
|
||||
songs_instance = AllSongs()
|
||||
artist_instance = Artists()
|
||||
track_color_instance = TrackColors()
|
||||
track_color_instance = TrackColors()
|
||||
album_instance = Albums()
|
||||
|
@ -4,7 +4,7 @@ import pymongo
|
||||
from bson import ObjectId, json_util
|
||||
|
||||
|
||||
def convert_one_to_json(song):
|
||||
def convert_one(song):
|
||||
"""
|
||||
Converts a single mongodb cursor to a json object.
|
||||
"""
|
||||
@ -14,7 +14,7 @@ def convert_one_to_json(song):
|
||||
return loaded_song
|
||||
|
||||
|
||||
def convert_to_json(array):
|
||||
def convert_many(array):
|
||||
"""
|
||||
Converts a list of mongodb cursors to a list of json objects.
|
||||
"""
|
||||
@ -100,35 +100,35 @@ class AllSongs(Mongo):
|
||||
"""
|
||||
Returns all tracks in the database.
|
||||
"""
|
||||
return convert_to_json(self.collection.find())
|
||||
return convert_many(self.collection.find())
|
||||
|
||||
def get_song_by_id(self, file_id: str) -> dict:
|
||||
"""
|
||||
Returns a track object by its mongodb id.
|
||||
"""
|
||||
song = self.collection.find_one({"_id": ObjectId(file_id)})
|
||||
return convert_one_to_json(song)
|
||||
return convert_one(song)
|
||||
|
||||
def get_song_by_album(self, name: str, artist: str) -> dict:
|
||||
"""
|
||||
Returns a single track matching the album in the query params.
|
||||
"""
|
||||
song = self.collection.find_one({"album": name, "albumartist": artist})
|
||||
return convert_one_to_json(song)
|
||||
return convert_one(song)
|
||||
|
||||
def search_songs_by_album(self, query: str) -> list:
|
||||
"""
|
||||
Returns all the songs matching the albums in the query params (using regex).
|
||||
"""
|
||||
songs = self.collection.find({"album": {"$regex": query, "$options": "i"}})
|
||||
return convert_to_json(songs)
|
||||
return convert_many(songs)
|
||||
|
||||
def search_songs_by_artist(self, query: str) -> list:
|
||||
"""
|
||||
Returns all the songs matching the artists in the query params.
|
||||
"""
|
||||
songs = self.collection.find({"artists": {"$regex": query, "$options": "i"}})
|
||||
return convert_to_json(songs)
|
||||
return convert_many(songs)
|
||||
|
||||
def find_song_by_title(self, query: str) -> list:
|
||||
"""
|
||||
@ -136,35 +136,35 @@ class AllSongs(Mongo):
|
||||
"""
|
||||
self.collection.create_index([("title", pymongo.TEXT)])
|
||||
song = self.collection.find({"title": {"$regex": query, "$options": "i"}})
|
||||
return convert_to_json(song)
|
||||
return convert_many(song)
|
||||
|
||||
def find_songs_by_album(self, name: str, artist: str) -> list:
|
||||
"""
|
||||
Returns all the tracks exactly matching the album in the query params.
|
||||
"""
|
||||
songs = self.collection.find({"album": name, "albumartist": artist})
|
||||
return convert_to_json(songs)
|
||||
return convert_many(songs)
|
||||
|
||||
def find_songs_by_folder(self, query: str) -> list:
|
||||
"""
|
||||
Returns a sorted list of all the tracks exactly matching the folder in the query params
|
||||
"""
|
||||
songs = self.collection.find({"folder": query}).sort("title", pymongo.ASCENDING)
|
||||
return convert_to_json(songs)
|
||||
return convert_many(songs)
|
||||
|
||||
def find_songs_by_folder_og(self, query: str) -> list:
|
||||
"""
|
||||
Returns an unsorted list of all the tracks exactly matching the folder in the query params
|
||||
"""
|
||||
songs = self.collection.find({"folder": query})
|
||||
return convert_to_json(songs)
|
||||
return convert_many(songs)
|
||||
|
||||
def find_songs_by_artist(self, query: str) -> list:
|
||||
"""
|
||||
Returns a list of all the tracks exactly matching the artists in the query params.
|
||||
"""
|
||||
songs = self.collection.find({"artists": query})
|
||||
return convert_to_json(songs)
|
||||
return convert_many(songs)
|
||||
|
||||
def find_songs_by_albumartist(self, query: str):
|
||||
"""
|
||||
@ -173,14 +173,14 @@ class AllSongs(Mongo):
|
||||
songs = self.collection.find(
|
||||
{"albumartist": {"$regex": query, "$options": "i"}}
|
||||
)
|
||||
return convert_to_json(songs)
|
||||
return convert_many(songs)
|
||||
|
||||
def get_song_by_path(self, path: str) -> dict:
|
||||
"""
|
||||
Returns a single track matching the filepath in the query params.
|
||||
"""
|
||||
song = self.collection.find_one({"filepath": path})
|
||||
return convert_one_to_json(song)
|
||||
return convert_one(song)
|
||||
|
||||
def remove_song_by_filepath(self, filepath: str):
|
||||
"""
|
||||
@ -227,7 +227,7 @@ class TrackColors(Mongo):
|
||||
Returns a track color object by its filepath.
|
||||
"""
|
||||
track_color = self.collection.find_one({"filepath": filepath})
|
||||
return convert_one_to_json(track_color)
|
||||
return convert_one(track_color)
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -266,3 +266,67 @@ class Track:
|
||||
self.image = "http://127.0.0.1:8900/images/thumbnails/" + tags["image"]
|
||||
self.tracknumber = tags["tracknumber"]
|
||||
self.discnumber = tags["discnumber"]
|
||||
|
||||
|
||||
class Albums(Mongo):
|
||||
"""
|
||||
The class for all album-related database operations.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
super(Albums, self).__init__("ALBUMS")
|
||||
self.collection = self.db["ALBUMS"]
|
||||
|
||||
def insert_album(self, album: dict) -> None:
|
||||
"""
|
||||
Inserts a new album object into the database.
|
||||
"""
|
||||
return self.collection.update_one(
|
||||
{"album": album["album"], "artist": album["artist"]},
|
||||
{"$set": album},
|
||||
upsert=True,
|
||||
).upserted_id
|
||||
|
||||
def get_album_by_id(self, id: str) -> dict:
|
||||
"""
|
||||
Returns a single album matching the id in the query params.
|
||||
"""
|
||||
album = self.collection.find_one({"_id": ObjectId(id)})
|
||||
return convert_one(album)
|
||||
|
||||
def get_album_by_name(self, name: str) -> dict:
|
||||
"""
|
||||
Returns a single album matching the name in the query params.
|
||||
"""
|
||||
album = self.collection.find_one({"album": name})
|
||||
return convert_one(album)
|
||||
|
||||
def get_album_by_artist(self, name: str) -> dict:
|
||||
"""
|
||||
Returns a single album matching the artist in the query params.
|
||||
"""
|
||||
album = self.collection.find_one({"albumartist": name})
|
||||
return convert_one(album)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Album:
|
||||
"""
|
||||
Album class
|
||||
"""
|
||||
|
||||
albumid: str
|
||||
album: str
|
||||
artist: str
|
||||
albumartist: str
|
||||
year: int
|
||||
image: str
|
||||
tracks: list
|
||||
|
||||
def __init__(self, tags):
|
||||
self.albumid = tags["_id"]["$oid"]
|
||||
self.album = tags["album"]
|
||||
self.artist = tags["artist"]
|
||||
self.albumartist = tags["albumartist"]
|
||||
self.year = tags["year"]
|
||||
self.image = ""
|
18
src/App.vue
18
src/App.vue
@ -3,19 +3,18 @@
|
||||
<div class="l-container" :class="{ collapsed: collapsed }">
|
||||
<div class="l-sidebar">
|
||||
<div id="logo-container">
|
||||
<div id="toggle" @click="toggleNav"></div>
|
||||
<!-- <div id="toggle" @click="toggleNav"></div> -->
|
||||
<router-link :to="{ name: 'Home' }" v-if="!collapsed"
|
||||
><div class="logo"></div
|
||||
></router-link>
|
||||
</div>
|
||||
<Navigation :collapsed="collapsed" />
|
||||
<!-- <PinnedStuff :collapsed="collapsed" /> -->
|
||||
<div class="l-album-art">
|
||||
<AlbumArt :collapsed="collapsed" />
|
||||
</div>
|
||||
</div>
|
||||
<NavBar />
|
||||
<div class="content">
|
||||
<div class="search-box"></div>
|
||||
<router-view />
|
||||
</div>
|
||||
<RightSideBar />
|
||||
@ -35,6 +34,7 @@ import BottomBar from "@/components/BottomBar/BottomBar.vue";
|
||||
import perks from "@/composables/perks.js";
|
||||
import Main from "./components/RightSideBar/Main.vue";
|
||||
import AlbumArt from "./components/LeftSidebar/AlbumArt.vue";
|
||||
import NavBar from "./components/nav/NavBar.vue";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@ -43,6 +43,7 @@ export default {
|
||||
BottomBar,
|
||||
RightSideBar: Main,
|
||||
AlbumArt,
|
||||
NavBar
|
||||
},
|
||||
|
||||
setup() {
|
||||
@ -89,11 +90,10 @@ export default {
|
||||
}
|
||||
}
|
||||
.logo {
|
||||
height: 2rem;
|
||||
width: 9rem;
|
||||
margin-left: 3rem;
|
||||
background: url(./assets/logo.svg) no-repeat center;
|
||||
background-size: contain;
|
||||
height: 4.5rem;
|
||||
width: 15rem;
|
||||
background: url(./assets/icons/logo.svg) no-repeat 1rem;
|
||||
background-size:9rem;
|
||||
}
|
||||
|
||||
.r-sidebar {
|
||||
@ -106,6 +106,6 @@ export default {
|
||||
width: 100%;
|
||||
padding: 0 $small;
|
||||
display: grid;
|
||||
grid-template-rows: auto 1fr;
|
||||
grid-template-rows: 1fr;
|
||||
}
|
||||
</style>
|
||||
|
@ -83,11 +83,11 @@ button {
|
||||
|
||||
.l-container {
|
||||
display: grid;
|
||||
grid-template-columns: min-content 4fr min-content;
|
||||
grid-template-rows: 4rem 1fr 1fr;
|
||||
grid-template-columns: min-content 1fr min-content;
|
||||
grid-template-rows: 3rem 1fr 1fr;
|
||||
grid-auto-flow: row;
|
||||
grid-template-areas:
|
||||
"l-sidebar content r-sidebar"
|
||||
"l-sidebar nav nav"
|
||||
"l-sidebar content r-sidebar"
|
||||
"l-sidebar content r-sidebar"
|
||||
"bottom-bar bottom-bar bottom-bar";
|
||||
@ -95,11 +95,14 @@ button {
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.topnav {
|
||||
grid-area: nav;
|
||||
}
|
||||
|
||||
.l-sidebar {
|
||||
width: 15rem;
|
||||
grid-area: l-sidebar;
|
||||
padding-top: 0.5rem;
|
||||
// background-color: $card-dark;
|
||||
}
|
||||
|
||||
.bottom-bar {
|
||||
@ -136,7 +139,13 @@ button {
|
||||
grid-area: content;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
border-left: solid 1px #27262654;
|
||||
border-left: solid 1px $gray;
|
||||
|
||||
.nav {
|
||||
border: solid;
|
||||
margin: $small;
|
||||
width: calc(100% - 1rem);
|
||||
}
|
||||
}
|
||||
|
||||
.r-sidebar {
|
||||
|
18
src/assets/icons/logo.svg
Normal file
18
src/assets/icons/logo.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<svg width="216" height="75" viewBox="0 0 216 75" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M90.75 23.0625L79.6562 59H67.875L84.5938 13.5H92.0625L90.75 23.0625ZM99.9375 59L88.8125 23.0625L87.375 13.5H94.9375L111.75 59H99.9375ZM99.5 42.0312V50.5H76.1562V42.0312H99.5ZM125.719 11V59H115.156V11H125.719ZM143.344 25.1875V59H132.781V25.1875H143.344ZM132.156 16.4688C132.156 14.9688 132.698 13.7396 133.781 12.7812C134.865 11.8229 136.271 11.3438 138 11.3438C139.729 11.3438 141.135 11.8229 142.219 12.7812C143.302 13.7396 143.844 14.9688 143.844 16.4688C143.844 17.9688 143.302 19.1979 142.219 20.1562C141.135 21.1146 139.729 21.5938 138 21.5938C136.271 21.5938 134.865 21.1146 133.781 20.1562C132.698 19.1979 132.156 17.9688 132.156 16.4688ZM164.125 51.5C165.104 51.5 165.938 51.3229 166.625 50.9688C167.333 50.5938 167.865 50.0729 168.219 49.4062C168.594 48.7188 168.771 47.8958 168.75 46.9375H178.656C178.677 49.4792 178.052 51.7083 176.781 53.625C175.531 55.5208 173.823 57 171.656 58.0625C169.51 59.1042 167.083 59.625 164.375 59.625C161.729 59.625 159.417 59.1979 157.438 58.3438C155.458 57.4688 153.802 56.2604 152.469 54.7188C151.156 53.1562 150.167 51.3333 149.5 49.25C148.854 47.1667 148.531 44.9062 148.531 42.4688V41.75C148.531 39.3125 148.854 37.0521 149.5 34.9688C150.167 32.8646 151.156 31.0417 152.469 29.5C153.802 27.9375 155.448 26.7292 157.406 25.875C159.385 25 161.688 24.5625 164.312 24.5625C167.125 24.5625 169.604 25.0938 171.75 26.1562C173.917 27.2188 175.615 28.7604 176.844 30.7812C178.073 32.8021 178.677 35.25 178.656 38.125H168.75C168.771 37.1042 168.615 36.1875 168.281 35.375C167.948 34.5625 167.427 33.9167 166.719 33.4375C166.031 32.9375 165.146 32.6875 164.062 32.6875C162.979 32.6875 162.104 32.9271 161.438 33.4062C160.771 33.8854 160.26 34.5521 159.906 35.4062C159.573 36.2396 159.344 37.1979 159.219 38.2812C159.115 39.3646 159.062 40.5208 159.062 41.75V42.4688C159.062 43.7188 159.115 44.8958 159.219 46C159.344 47.0833 159.583 48.0417 159.938 48.875C160.292 49.6875 160.802 50.3333 161.469 50.8125C162.135 51.2708 163.021 51.5 164.125 51.5ZM199.531 59.625C196.781 59.625 194.323 59.1979 192.156 58.3438C189.99 57.4688 188.156 56.2708 186.656 54.75C185.177 53.2292 184.042 51.4792 183.25 49.5C182.479 47.5208 182.094 45.4271 182.094 43.2188V42.0312C182.094 39.5521 182.438 37.2604 183.125 35.1562C183.812 33.0312 184.833 31.1771 186.188 29.5938C187.542 28.0104 189.24 26.7812 191.281 25.9062C193.323 25.0104 195.698 24.5625 198.406 24.5625C200.802 24.5625 202.948 24.9479 204.844 25.7188C206.74 26.4896 208.344 27.5938 209.656 29.0312C210.99 30.4688 212 32.2083 212.688 34.25C213.396 36.2917 213.75 38.5833 213.75 41.125V45.4062H186.125V38.8125H203.469V38C203.49 36.875 203.292 35.9167 202.875 35.125C202.479 34.3333 201.896 33.7292 201.125 33.3125C200.354 32.8958 199.417 32.6875 198.312 32.6875C197.167 32.6875 196.219 32.9375 195.469 33.4375C194.74 33.9375 194.167 34.625 193.75 35.5C193.354 36.3542 193.073 37.3438 192.906 38.4688C192.74 39.5938 192.656 40.7812 192.656 42.0312V43.2188C192.656 44.4688 192.823 45.6042 193.156 46.625C193.51 47.6458 194.01 48.5208 194.656 49.25C195.323 49.9583 196.115 50.5104 197.031 50.9062C197.969 51.3021 199.031 51.5 200.219 51.5C201.656 51.5 203.073 51.2292 204.469 50.6875C205.865 50.1458 207.062 49.25 208.062 48L212.844 53.6875C212.156 54.6667 211.177 55.6146 209.906 56.5312C208.656 57.4479 207.156 58.1979 205.406 58.7812C203.656 59.3438 201.698 59.625 199.531 59.625Z" fill="url(#paint0_linear_212_8)"/>
|
||||
<path d="M206.709 17.1532L209.164 14.6937L210.564 16.0963C210.843 16.376 211 16.7553 211 17.1507C211 17.5462 210.843 17.9255 210.564 18.2052L210.218 18.5509C210.08 18.6897 209.915 18.7999 209.734 18.875C209.554 18.9502 209.36 18.9889 209.164 18.9889C208.968 18.9889 208.774 18.9502 208.593 18.875C208.412 18.7999 208.247 18.6897 208.109 18.5509L206.709 17.1532ZM210.56 9.78231L210.213 9.43658C209.933 9.15703 209.554 9 209.159 9C208.763 9 208.384 9.15703 208.104 9.43658L206 11.5454L203.891 9.43658C203.611 9.15703 203.232 9 202.837 9C202.441 9 202.062 9.15703 201.782 9.43658L201.437 9.78231C201.157 10.062 201 10.4413 201 10.8367C201 11.2322 201.157 11.6115 201.437 11.8912L203.545 14L201.437 16.1088C201.157 16.3885 201 16.7678 201 17.1633C201 17.5587 201.157 17.938 201.437 18.2177L201.782 18.5634C202.062 18.843 202.441 19 202.837 19C203.232 19 203.611 18.843 203.891 18.5634L210.564 11.8908C210.843 11.6111 211 11.2319 211 10.8364C211 10.441 210.843 10.0617 210.564 9.782L210.56 9.78231Z" fill="#C4C4C4"/>
|
||||
<path d="M182.709 17.1532L185.164 14.6937L186.564 16.0963C186.843 16.376 187 16.7553 187 17.1507C187 17.5462 186.843 17.9255 186.564 18.2052L186.218 18.5509C186.08 18.6897 185.915 18.7999 185.734 18.875C185.554 18.9502 185.36 18.9889 185.164 18.9889C184.968 18.9889 184.774 18.9502 184.593 18.875C184.412 18.7999 184.247 18.6897 184.109 18.5509L182.709 17.1532ZM186.56 9.78231L186.213 9.43658C185.933 9.15703 185.554 9 185.159 9C184.763 9 184.384 9.15703 184.104 9.43658L182 11.5454L179.891 9.43658C179.611 9.15703 179.232 9 178.837 9C178.441 9 178.062 9.15703 177.782 9.43658L177.437 9.78231C177.157 10.062 177 10.4413 177 10.8367C177 11.2322 177.157 11.6115 177.437 11.8912L179.545 14L177.437 16.1088C177.157 16.3885 177 16.7678 177 17.1633C177 17.5587 177.157 17.938 177.437 18.2177L177.782 18.5634C178.062 18.843 178.441 19 178.837 19C179.232 19 179.611 18.843 179.891 18.5634L186.564 11.8908C186.843 11.6111 187 11.2319 187 10.8364C187 10.441 186.843 10.0617 186.564 9.782L186.56 9.78231Z" fill="#C4C4C4"/>
|
||||
<path d="M194.709 17.1532L197.164 14.6937L198.564 16.0963C198.843 16.376 199 16.7553 199 17.1507C199 17.5462 198.843 17.9255 198.564 18.2052L198.218 18.5509C198.08 18.6897 197.915 18.7999 197.734 18.875C197.554 18.9502 197.36 18.9889 197.164 18.9889C196.968 18.9889 196.774 18.9502 196.593 18.875C196.412 18.7999 196.247 18.6897 196.109 18.5509L194.709 17.1532ZM198.56 9.78231L198.213 9.43658C197.933 9.15703 197.554 9 197.159 9C196.763 9 196.384 9.15703 196.104 9.43658L194 11.5454L191.891 9.43658C191.611 9.15703 191.232 9 190.837 9C190.441 9 190.062 9.15703 189.782 9.43658L189.437 9.78231C189.157 10.062 189 10.4413 189 10.8367C189 11.2322 189.157 11.6115 189.437 11.8912L191.545 14L189.437 16.1088C189.157 16.3885 189 16.7678 189 17.1633C189 17.5587 189.157 17.938 189.437 18.2177L189.782 18.5634C190.062 18.843 190.441 19 190.837 19C191.232 19 191.611 18.843 191.891 18.5634L198.564 11.8908C198.843 11.6111 199 11.2319 199 10.8364C199 10.441 198.843 10.0617 198.564 9.782L198.56 9.78231Z" fill="#C4C4C4"/>
|
||||
<path d="M57.6854 17.0997C56.5653 15.6931 54.4815 14 50.7566 14C46.146 14 40.2851 17.0737 35.1276 22.2052C34.3722 22.9346 33.6949 23.6639 33.0437 24.4193V19.2097C33.0437 18.3806 32.7144 17.5856 32.1282 16.9994C31.542 16.4132 30.7469 16.0839 29.9179 16.0839C29.0889 16.0839 28.2938 16.4132 27.7076 16.9994C27.1214 17.5856 26.7921 18.3806 26.7921 19.2097V24.4193C26.1409 23.6639 25.4636 22.9346 24.7082 22.2052C19.5507 17.0737 13.6898 14 9.07926 14C5.35435 14 3.27048 15.6931 2.15041 17.0997C-1.28797 21.5019 -0.0116033 29.082 1.88992 36.636C3.32258 42.4187 6.31814 45.1538 9.13135 46.4041C8.40766 48.0087 8.03468 49.7493 8.03733 51.5096C8.03992 54.0481 8.81518 56.5258 10.26 58.6131C11.7049 60.7004 13.7509 62.2984 16.1259 63.1947C18.501 64.091 21.0927 64.2432 23.5563 63.6308C26.0199 63.0185 28.2388 61.6708 29.9179 59.7669C31.8971 62.0002 34.6097 63.4521 37.5658 63.8601C40.5219 64.2681 43.5265 63.6054 46.0366 61.9918C48.5468 60.3781 50.3971 57.9198 51.2531 55.0611C52.1092 52.2024 51.9146 49.1318 50.7045 46.4041C53.5177 45.1538 56.5132 42.4187 57.9459 36.636C59.8474 29.082 61.1238 21.5019 57.6854 17.0997V17.0997ZM20.5405 57.7612C18.9172 57.8013 17.3419 57.2082 16.1482 56.1074C14.9544 55.0066 14.2358 53.4846 14.1444 51.8633C14.053 50.2421 14.596 48.6489 15.6585 47.4209C16.721 46.1929 18.2197 45.4266 19.8372 45.284C20.2452 45.2419 20.6408 45.1192 21.0011 44.9231C21.3613 44.727 21.6791 44.4613 21.9359 44.1415C22.1927 43.8217 22.3835 43.4541 22.4972 43.06C22.6109 42.6659 22.6453 42.2531 22.5983 41.8456C22.5066 41.0244 22.0934 40.2728 21.449 39.7554C20.8047 39.238 19.9817 38.9968 19.16 39.0845C17.12 39.2999 15.1671 40.0255 13.4814 41.1944C11.4497 41.0121 9.10531 39.7097 7.93313 35.1252C6.0316 27.4409 5.74507 22.6741 7.09959 20.9549C7.25588 20.7465 7.62055 20.2516 9.07926 20.2516C11.9446 20.2516 16.477 22.8304 20.3061 26.6334C24.1352 30.4365 26.7921 34.9949 26.7921 37.9644V51.5096C26.7853 53.1655 26.1244 54.7516 24.9535 55.9225C23.7826 57.0935 22.1964 57.7543 20.5405 57.7612ZM51.9027 35.1252C50.7305 39.7097 48.3862 41.0121 46.3544 41.1944C44.6687 40.0255 42.7158 39.2999 40.6759 39.0845C40.2538 39.0083 39.8206 39.0198 39.4032 39.1182C38.9858 39.2166 38.5932 39.3999 38.2496 39.6566C37.9061 39.9133 37.619 40.2379 37.4063 40.6103C37.1936 40.9827 37.0598 41.3948 37.0133 41.8212C36.9667 42.2475 37.0084 42.6788 37.1356 43.0883C37.2629 43.4978 37.4731 43.8768 37.7531 44.2016C38.0331 44.5264 38.377 44.7901 38.7633 44.9763C39.1496 45.1626 39.5701 45.2673 39.9986 45.284C41.1968 45.4197 42.3302 45.899 43.2622 46.6642C44.1942 47.4294 44.885 48.4478 45.2514 49.5966C45.6177 50.7455 45.644 51.9758 45.327 53.1393C45.01 54.3027 44.3633 55.3497 43.4648 56.154C42.5663 56.9582 41.4544 57.4855 40.2631 57.6722C39.0718 57.8588 37.8519 57.697 36.7504 57.2061C35.649 56.7152 34.713 55.9163 34.0553 54.9055C33.3977 53.8948 33.0463 52.7154 33.0437 51.5096V37.9644C33.0437 34.9949 35.5964 30.5407 39.5297 26.6334C43.463 22.7262 47.8912 20.2516 50.7566 20.2516C52.2153 20.2516 52.5799 20.7465 52.7362 20.9549C54.0907 22.6741 53.8042 27.4409 51.9027 35.1252Z" fill="url(#paint1_linear_212_8)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_212_8" x1="80.5957" y1="4.00001" x2="216.056" y2="80.4784" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.0311767" stop-color="#575757"/>
|
||||
<stop offset="0.145833" stop-color="#B8B8B8"/>
|
||||
<stop offset="1" stop-color="#575757"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_212_8" x1="29.9179" y1="14" x2="29.9179" y2="64" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#B8B8B8"/>
|
||||
<stop offset="1" stop-color="#575757"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 9.9 KiB |
@ -22,9 +22,6 @@ const props = defineProps({
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.f-container {
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
|
||||
.no_f {
|
||||
display: none;
|
||||
@ -35,11 +32,4 @@ const props = defineProps({
|
||||
grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));
|
||||
gap: $medium;
|
||||
}
|
||||
|
||||
.f-container p {
|
||||
text-transform: uppercase;
|
||||
font-weight: normal;
|
||||
color: rgba(255, 255, 255, 0.438);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
</style>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<style lang="scss">
|
||||
.r-home {
|
||||
height: calc(100% - 1rem);
|
||||
padding: 0 $small $small 0;
|
||||
// padding: 0 $small $small 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
14
src/components/nav/NavBar.vue
Normal file
14
src/components/nav/NavBar.vue
Normal file
@ -0,0 +1,14 @@
|
||||
<template>
|
||||
<div class="topnav"></div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
function toggleNav() {}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.topnav {
|
||||
background-color: $gray;
|
||||
display: grid;
|
||||
}
|
||||
</style>
|
Loading…
x
Reference in New Issue
Block a user