fully-functioning music status!
- accessible via /music - only detects strawberry for now
This commit is contained in:
parent
f838edeadb
commit
8a1fabf91a
53 changed files with 923 additions and 51 deletions
BIN
music/public/default-cover-art.png
Executable file
BIN
music/public/default-cover-art.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 139 KiB |
BIN
music/public/fonts/inter/Inter-Black.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-Black.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-BlackItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-BlackItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-Bold.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-Bold.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-BoldItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-BoldItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-ExtraBold.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-ExtraBold.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-ExtraBoldItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-ExtraBoldItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-ExtraLight.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-ExtraLight.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-ExtraLightItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-ExtraLightItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-Italic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-Italic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-Light.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-Light.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-LightItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-LightItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-Medium.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-Medium.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-MediumItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-MediumItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-Regular.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-Regular.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-SemiBold.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-SemiBold.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-SemiBoldItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-SemiBoldItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-Thin.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-Thin.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/Inter-ThinItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/Inter-ThinItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-Black.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-Black.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-BlackItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-BlackItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-Bold.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-Bold.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-BoldItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-BoldItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-ExtraBold.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-ExtraBold.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-ExtraBoldItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-ExtraBoldItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-ExtraLight.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-ExtraLight.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-ExtraLightItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-ExtraLightItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-Italic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-Italic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-Light.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-Light.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-LightItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-LightItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-Medium.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-Medium.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-MediumItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-MediumItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-Regular.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-Regular.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-SemiBold.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-SemiBold.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-SemiBoldItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-SemiBoldItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-Thin.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-Thin.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterDisplay-ThinItalic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterDisplay-ThinItalic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterVariable-Italic.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterVariable-Italic.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
music/public/fonts/inter/InterVariable.woff2
(Stored with Git LFS)
Normal file
BIN
music/public/fonts/inter/InterVariable.woff2
(Stored with Git LFS)
Normal file
Binary file not shown.
92
music/public/fonts/inter/LICENSE.txt
Normal file
92
music/public/fonts/inter/LICENSE.txt
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION AND CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
148
music/public/fonts/inter/inter.css
Normal file
148
music/public/fonts/inter/inter.css
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
/* Variable fonts usage:
|
||||
:root { font-family: "Inter", sans-serif; }
|
||||
@supports (font-variation-settings: normal) {
|
||||
:root { font-family: "InterVariable", sans-serif; font-optical-sizing: auto; }
|
||||
} */
|
||||
@font-face {
|
||||
font-family: InterVariable;
|
||||
font-style: normal;
|
||||
font-weight: 100 900;
|
||||
font-display: swap;
|
||||
src: url("InterVariable.woff2") format("woff2");
|
||||
}
|
||||
@font-face {
|
||||
font-family: InterVariable;
|
||||
font-style: italic;
|
||||
font-weight: 100 900;
|
||||
font-display: swap;
|
||||
src: url("InterVariable-Italic.woff2") format("woff2");
|
||||
}
|
||||
|
||||
/* static fonts */
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 100; font-display: swap; src: url("Inter-Thin.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 100; font-display: swap; src: url("Inter-ThinItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 200; font-display: swap; src: url("Inter-ExtraLight.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 200; font-display: swap; src: url("Inter-ExtraLightItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 300; font-display: swap; src: url("Inter-Light.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 300; font-display: swap; src: url("Inter-LightItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 400; font-display: swap; src: url("Inter-Regular.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 400; font-display: swap; src: url("Inter-Italic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 500; font-display: swap; src: url("Inter-Medium.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 500; font-display: swap; src: url("Inter-MediumItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 600; font-display: swap; src: url("Inter-SemiBold.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 600; font-display: swap; src: url("Inter-SemiBoldItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 700; font-display: swap; src: url("Inter-Bold.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 700; font-display: swap; src: url("Inter-BoldItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 800; font-display: swap; src: url("Inter-ExtraBold.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 800; font-display: swap; src: url("Inter-ExtraBoldItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: normal; font-weight: 900; font-display: swap; src: url("Inter-Black.woff2") format("woff2"); }
|
||||
@font-face { font-family: "Inter"; font-style: italic; font-weight: 900; font-display: swap; src: url("Inter-BlackItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 100; font-display: swap; src: url("InterDisplay-Thin.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 100; font-display: swap; src: url("InterDisplay-ThinItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 200; font-display: swap; src: url("InterDisplay-ExtraLight.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 200; font-display: swap; src: url("InterDisplay-ExtraLightItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 300; font-display: swap; src: url("InterDisplay-Light.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 300; font-display: swap; src: url("InterDisplay-LightItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 400; font-display: swap; src: url("InterDisplay-Regular.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 400; font-display: swap; src: url("InterDisplay-Italic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 500; font-display: swap; src: url("InterDisplay-Medium.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 500; font-display: swap; src: url("InterDisplay-MediumItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 600; font-display: swap; src: url("InterDisplay-SemiBold.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 600; font-display: swap; src: url("InterDisplay-SemiBoldItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 700; font-display: swap; src: url("InterDisplay-Bold.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 700; font-display: swap; src: url("InterDisplay-BoldItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 800; font-display: swap; src: url("InterDisplay-ExtraBold.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 800; font-display: swap; src: url("InterDisplay-ExtraBoldItalic.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 900; font-display: swap; src: url("InterDisplay-Black.woff2") format("woff2"); }
|
||||
@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 900; font-display: swap; src: url("InterDisplay-BlackItalic.woff2") format("woff2"); }
|
||||
|
||||
@font-feature-values InterVariable {
|
||||
@character-variant {
|
||||
cv01: 1; cv02: 2; cv03: 3; cv04: 4; cv05: 5; cv06: 6; cv07: 7; cv08: 8;
|
||||
cv09: 9; cv10: 10; cv11: 11; cv12: 12; cv13: 13;
|
||||
alt-1: 1; /* Alternate one */
|
||||
alt-3: 9; /* Flat-top three */
|
||||
open-4: 2; /* Open four */
|
||||
open-6: 3; /* Open six */
|
||||
open-9: 4; /* Open nine */
|
||||
lc-l-with-tail: 5; /* Lower-case L with tail */
|
||||
simplified-u: 6; /* Simplified u */
|
||||
alt-double-s: 7; /* Alternate German double s */
|
||||
uc-i-with-serif: 8; /* Upper-case i with serif */
|
||||
uc-g-with-spur: 10; /* Capital G with spur */
|
||||
single-story-a: 11; /* Single-story a */
|
||||
compact-lc-f: 12; /* Compact f */
|
||||
compact-lc-t: 13; /* Compact t */
|
||||
}
|
||||
@styleset {
|
||||
ss01: 1; ss02: 2; ss03: 3; ss04: 4; ss05: 5; ss06: 6; ss07: 7; ss08: 8;
|
||||
open-digits: 1; /* Open digits */
|
||||
disambiguation: 2; /* Disambiguation (with zero) */
|
||||
disambiguation-except-zero: 4; /* Disambiguation (no zero) */
|
||||
round-quotes-and-commas: 3; /* Round quotes & commas */
|
||||
square-punctuation: 7; /* Square punctuation */
|
||||
square-quotes: 8; /* Square quotes */
|
||||
circled-characters: 5; /* Circled characters */
|
||||
squared-characters: 6; /* Squared characters */
|
||||
}
|
||||
}
|
||||
@font-feature-values Inter {
|
||||
@character-variant {
|
||||
cv01: 1; cv02: 2; cv03: 3; cv04: 4; cv05: 5; cv06: 6; cv07: 7; cv08: 8;
|
||||
cv09: 9; cv10: 10; cv11: 11; cv12: 12; cv13: 13;
|
||||
alt-1: 1; /* Alternate one */
|
||||
alt-3: 9; /* Flat-top three */
|
||||
open-4: 2; /* Open four */
|
||||
open-6: 3; /* Open six */
|
||||
open-9: 4; /* Open nine */
|
||||
lc-l-with-tail: 5; /* Lower-case L with tail */
|
||||
simplified-u: 6; /* Simplified u */
|
||||
alt-double-s: 7; /* Alternate German double s */
|
||||
uc-i-with-serif: 8; /* Upper-case i with serif */
|
||||
uc-g-with-spur: 10; /* Capital G with spur */
|
||||
single-story-a: 11; /* Single-story a */
|
||||
compact-lc-f: 12; /* Compact f */
|
||||
compact-lc-t: 13; /* Compact t */
|
||||
}
|
||||
@styleset {
|
||||
ss01: 1; ss02: 2; ss03: 3; ss04: 4; ss05: 5; ss06: 6; ss07: 7; ss08: 8;
|
||||
open-digits: 1; /* Open digits */
|
||||
disambiguation: 2; /* Disambiguation (with zero) */
|
||||
disambiguation-except-zero: 4; /* Disambiguation (no zero) */
|
||||
round-quotes-and-commas: 3; /* Round quotes & commas */
|
||||
square-punctuation: 7; /* Square punctuation */
|
||||
square-quotes: 8; /* Square quotes */
|
||||
circled-characters: 5; /* Circled characters */
|
||||
squared-characters: 6; /* Squared characters */
|
||||
}
|
||||
}
|
||||
@font-feature-values InterDisplay {
|
||||
@character-variant {
|
||||
cv01: 1; cv02: 2; cv03: 3; cv04: 4; cv05: 5; cv06: 6; cv07: 7; cv08: 8;
|
||||
cv09: 9; cv10: 10; cv11: 11; cv12: 12; cv13: 13;
|
||||
alt-1: 1; /* Alternate one */
|
||||
alt-3: 9; /* Flat-top three */
|
||||
open-4: 2; /* Open four */
|
||||
open-6: 3; /* Open six */
|
||||
open-9: 4; /* Open nine */
|
||||
lc-l-with-tail: 5; /* Lower-case L with tail */
|
||||
simplified-u: 6; /* Simplified u */
|
||||
alt-double-s: 7; /* Alternate German double s */
|
||||
uc-i-with-serif: 8; /* Upper-case i with serif */
|
||||
uc-g-with-spur: 10; /* Capital G with spur */
|
||||
single-story-a: 11; /* Single-story a */
|
||||
compact-lc-f: 12; /* Compact f */
|
||||
compact-lc-t: 13; /* Compact t */
|
||||
}
|
||||
@styleset {
|
||||
ss01: 1; ss02: 2; ss03: 3; ss04: 4; ss05: 5; ss06: 6; ss07: 7; ss08: 8;
|
||||
open-digits: 1; /* Open digits */
|
||||
disambiguation: 2; /* Disambiguation (with zero) */
|
||||
disambiguation-except-zero: 4; /* Disambiguation (no zero) */
|
||||
round-quotes-and-commas: 3; /* Round quotes & commas */
|
||||
square-punctuation: 7; /* Square punctuation */
|
||||
square-quotes: 8; /* Square quotes */
|
||||
circled-characters: 5; /* Circled characters */
|
||||
squared-characters: 6; /* Squared characters */
|
||||
}
|
||||
}
|
||||
120
music/public/music.css
Normal file
120
music/public/music.css
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
:root {
|
||||
--sp-1: 1px;
|
||||
--sp-2: 2px;
|
||||
--sp-3: 4px;
|
||||
--sp-4: 8px;
|
||||
--sp-5: 16px;
|
||||
|
||||
--col-fg: #ffffff;
|
||||
|
||||
--smooth: cubic-bezier(.1, 1, .5, 1);
|
||||
}
|
||||
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-feature-settings: 'liga' 1, 'calt' 1;
|
||||
|
||||
color: var(--col-fg);
|
||||
background-color: transparent;
|
||||
|
||||
text-shadow:
|
||||
var(--sp-1) var(--sp-1) var(--sp-4) #000,
|
||||
var(--sp-1) var(--sp-2) #0008;
|
||||
}
|
||||
@supports (font-variation-settings: normal) {
|
||||
body { font-family: InterVariable, sans-serif; }
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flex-col {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.flex-row {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.gap-1 { gap: var(--sp-1); }
|
||||
.gap-2 { gap: var(--sp-2); }
|
||||
.gap-3 { gap: var(--sp-3); }
|
||||
.gap-4 { gap: var(--sp-4); }
|
||||
.gap-5 { gap: var(--sp-5); }
|
||||
|
||||
.text-ellipses {
|
||||
text-overflow: ellipsis;
|
||||
overflow-x: clip;
|
||||
text-wrap: nowrap;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#music {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: min-content;
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
.nowplaying {
|
||||
margin-bottom: var(--sp-3);
|
||||
text-transform: uppercase;
|
||||
opacity: .5;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.artwork {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border-radius: var(--sp-3);
|
||||
background: #0008;
|
||||
box-shadow:
|
||||
0 0 var(--sp-5) #000c,
|
||||
var(--sp-1) var(--sp-1) var(--sp-2) #0004;
|
||||
transition: transform .5s var(--smooth), opacity .5s, filter .5s;
|
||||
}
|
||||
|
||||
.title-artist {
|
||||
max-width: calc(100vw - 2em - 80px);
|
||||
}
|
||||
|
||||
.title {
|
||||
padding: 0 var(--sp-5);
|
||||
font-size: 2em;
|
||||
font-weight: 800;
|
||||
transition: transform .5s var(--smooth), opacity .1s;
|
||||
}
|
||||
|
||||
.artist {
|
||||
padding: 0 var(--sp-5);
|
||||
margin-top: calc(0px - var(--sp-3));
|
||||
font-size: 1.5em;
|
||||
font-weight: 600;
|
||||
transition: transform .5s var(--smooth), opacity .1s;
|
||||
transition-delay: .05s;
|
||||
}
|
||||
|
||||
#music.paused, #music.switching {
|
||||
.artwork {
|
||||
transform: scale(0.8);
|
||||
opacity: .5;
|
||||
filter: grayscale(1);
|
||||
}
|
||||
|
||||
.title, .artist {
|
||||
transform: translateX(-16px);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
48
music/public/music.js
Normal file
48
music/public/music.js
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
const musicEl = document.getElementById("music");
|
||||
const artworkEl = document.querySelector(".artwork");
|
||||
const titleEl = document.querySelector(".title");
|
||||
const artistEl = document.querySelector(".artist");
|
||||
|
||||
async function sync() {
|
||||
const eventSource = new EventSource("/music/sse");
|
||||
eventSource.addEventListener("open", () => {
|
||||
console.log("Connected.");
|
||||
|
||||
eventSource.addEventListener("music", event => {
|
||||
const nextTrack = JSON.parse(event.data)
|
||||
console.log(`Now playing: ${nextTrack.artist} - ${nextTrack.title}`)
|
||||
|
||||
musicEl.classList.add("switching");
|
||||
|
||||
setTimeout(() => {
|
||||
musicEl.classList.remove("switching");
|
||||
titleEl.innerText = nextTrack.title;
|
||||
artistEl.innerText = nextTrack.artist;
|
||||
artworkEl.src = "/music/artwork?r=" + Math.round(Math.random() * 1_000_000);
|
||||
}, 500);
|
||||
});
|
||||
|
||||
eventSource.addEventListener("music-state", event => {
|
||||
const data = JSON.parse(event.data)
|
||||
console.log(data.playing ? "Music playing." : "Music paused.");
|
||||
if (data.playing)
|
||||
musicEl.classList.remove("paused");
|
||||
else
|
||||
musicEl.classList.add("paused");
|
||||
});
|
||||
|
||||
const errListener = eventSource.addEventListener("error", () => {
|
||||
eventSource.removeEventListener("error", errListener);
|
||||
eventSource.close();
|
||||
console.error("Connection lost, or an error has occurred.");
|
||||
console.log("Attempting to reconnect...");
|
||||
|
||||
// TODO: stop reconnecting after 10 failed attempts
|
||||
|
||||
setTimeout(() => {
|
||||
sync();
|
||||
}, 1000);
|
||||
});
|
||||
});
|
||||
}
|
||||
sync();
|
||||
Loading…
Add table
Add a link
Reference in a new issue