@ -1 +1,2 @@
|
|||||||
.idea/
|
.idea/
|
||||||
|
.env
|
||||||
@ -1,20 +1,12 @@
|
|||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
index index.php index.html;
|
|
||||||
server_name _;
|
server_name _;
|
||||||
root /var/www/html/public;
|
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ /index.php?$query_string;
|
proxy_pass http://python:5000/;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header X-Forwarded-Host $host;
|
||||||
|
proxy_set_header X-Forwarded-Prefix /;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
location ~ \.php$ {
|
|
||||||
try_files $uri =404;
|
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
|
||||||
fastcgi_pass php:9000;
|
|
||||||
fastcgi_index index.php;
|
|
||||||
include fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
||||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
DB_HOST=localhost
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_NAME=postgres
|
||||||
|
DB_USER=postgres
|
||||||
|
DB_PASS=password
|
||||||
@ -1 +1,3 @@
|
|||||||
|
from . import api
|
||||||
|
from . import utils
|
||||||
|
from . import models
|
||||||
@ -0,0 +1 @@
|
|||||||
|
from . import process
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
import requests
|
||||||
|
from utils.download import download_album
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
def process_artist_queue():
|
||||||
|
print('Running Artist Queue process..')
|
||||||
|
print('---')
|
||||||
|
requests.get('http://nginx/api/queue/artists/run')
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def process_album_queue():
|
||||||
|
print('Running Album Queue Process..')
|
||||||
|
print('---')
|
||||||
|
response = requests.get('http://nginx/api/album/queue')
|
||||||
|
data = response.json()
|
||||||
|
artist = data.get('artist', False)
|
||||||
|
album = data.get('album', False)
|
||||||
|
queue = data.get('queue')
|
||||||
|
if not queue == False and artist and album:
|
||||||
|
result = download_album(album, artist)
|
||||||
|
requests.post('http://nginx/api/album/queue/update/%s' % queue.get('id'), json=result)
|
||||||
|
return
|
||||||
@ -0,0 +1 @@
|
|||||||
|
from . import model
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
from database import DB as db
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
|
db.create_table(
|
||||||
|
"artists",
|
||||||
|
[
|
||||||
|
("id", "SERIAL", "PRIMARY KEY"),
|
||||||
|
("name", "TEXT", "NOT NULL"),
|
||||||
|
("url", "TEXT", "UNIQUE"),
|
||||||
|
("thumbnail", "BYTEA", ""),
|
||||||
|
("json", "JSON", ""),
|
||||||
|
],
|
||||||
|
primary_key="id",
|
||||||
|
)
|
||||||
|
|
||||||
|
db.create_table(
|
||||||
|
"albums",
|
||||||
|
[
|
||||||
|
("id", "SERIAL", "PRIMARY KEY"),
|
||||||
|
("artist_id", "SERIAL", "REFERENCES artists(id) ON DELETE CASCADE"),
|
||||||
|
("name", "TEXT", "NOT NULL"),
|
||||||
|
("url", "TEXT", "UNIQUE"),
|
||||||
|
("thumbnail", "BYTEA", ""),
|
||||||
|
("done", "BOOLEAN", ""),
|
||||||
|
("json", "JSON", ""),
|
||||||
|
],
|
||||||
|
primary_key="id",
|
||||||
|
)
|
||||||
|
return True
|
||||||
@ -1,31 +1,6 @@
|
|||||||
apscheduler==3.10.1
|
Flask
|
||||||
async-timeout==4.0.2
|
mp3-tagger
|
||||||
beautifulsoup4==4.12.2
|
psycopg2-binary
|
||||||
Brotli==1.0.9
|
redis
|
||||||
certifi==2023.5.7
|
requests
|
||||||
charset-normalizer==3.1.0
|
yt-dlp
|
||||||
click==8.1.3
|
|
||||||
filelock==3.12.2
|
|
||||||
Flask==2.2.5
|
|
||||||
idna==3.4
|
|
||||||
importlib-metadata==6.6.0
|
|
||||||
itsdangerous==2.1.2
|
|
||||||
Jinja2==3.1.2
|
|
||||||
MarkupSafe==2.1.3
|
|
||||||
mutagen==1.46.0
|
|
||||||
pycryptodomex==3.18.0
|
|
||||||
pysondb-v2==2.0.0
|
|
||||||
redis==4.5.5
|
|
||||||
requests==2.31.0
|
|
||||||
requests-file==1.5.1
|
|
||||||
schedule==1.2.0
|
|
||||||
six==1.16.0
|
|
||||||
soupsieve==2.4.1
|
|
||||||
tldextract==3.4.4
|
|
||||||
typing_extensions==4.6.3
|
|
||||||
urllib3==1.26.2
|
|
||||||
websockets==11.0.3
|
|
||||||
Werkzeug==2.2.3
|
|
||||||
wget==3.2
|
|
||||||
yt-dlp==2023.10.13
|
|
||||||
zipp==3.15.0
|
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
<IfModule mod_negotiation.c>
|
||||||
|
Options -MultiViews -Indexes
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
RewriteEngine On
|
||||||
|
|
||||||
|
# Handle Authorization Header
|
||||||
|
RewriteCond %{HTTP:Authorization} .
|
||||||
|
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||||
|
|
||||||
|
# Redirect Trailing Slashes If Not A Folder...
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteCond %{REQUEST_URI} (.+)/$
|
||||||
|
RewriteRule ^ %1 [L,R=301]
|
||||||
|
|
||||||
|
# Send Requests To Front Controller...
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteRule ^ index.php [L]
|
||||||
|
</IfModule>
|
||||||
@ -0,0 +1 @@
|
|||||||
|
If you use the icons publicly, please link to https://icons8.com/line-awesome somewhere on your page or artwork, so that more creators could know about it and use it for free.
|
||||||
@ -0,0 +1,781 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
:root {
|
||||||
|
--dt-row-selected: 13, 110, 253;
|
||||||
|
--dt-row-selected-text: 255, 255, 255;
|
||||||
|
--dt-row-selected-link: 9, 10, 11;
|
||||||
|
--dt-row-stripe: 0, 0, 0;
|
||||||
|
--dt-row-hover: 0, 0, 0;
|
||||||
|
--dt-column-ordering: 0, 0, 0;
|
||||||
|
--dt-html-background: white;
|
||||||
|
}
|
||||||
|
:root.dark {
|
||||||
|
--dt-html-background: rgb(33, 37, 41);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.dataTable td.dt-control {
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
table.dataTable td.dt-control:before {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
content: "";
|
||||||
|
border-top: 5px solid transparent;
|
||||||
|
border-left: 10px solid rgba(0, 0, 0, 0.5);
|
||||||
|
border-bottom: 5px solid transparent;
|
||||||
|
border-right: 0px solid transparent;
|
||||||
|
}
|
||||||
|
table.dataTable tr.dt-hasChild td.dt-control:before {
|
||||||
|
border-top: 10px solid rgba(0, 0, 0, 0.5);
|
||||||
|
border-left: 5px solid transparent;
|
||||||
|
border-bottom: 0px solid transparent;
|
||||||
|
border-right: 5px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark table.dataTable td.dt-control:before,
|
||||||
|
:root[data-bs-theme=dark] table.dataTable td.dt-control:before,
|
||||||
|
:root[data-theme=dark] table.dataTable td.dt-control:before {
|
||||||
|
border-left-color: rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
html.dark table.dataTable tr.dt-hasChild td.dt-control:before,
|
||||||
|
:root[data-bs-theme=dark] table.dataTable tr.dt-hasChild td.dt-control:before,
|
||||||
|
:root[data-theme=dark] table.dataTable tr.dt-hasChild td.dt-control:before {
|
||||||
|
border-top-color: rgba(255, 255, 255, 0.5);
|
||||||
|
border-left-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dt-scroll {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dt-scroll-body thead tr,
|
||||||
|
div.dt-scroll-body tfoot tr {
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
div.dt-scroll-body thead tr th, div.dt-scroll-body thead tr td,
|
||||||
|
div.dt-scroll-body tfoot tr th,
|
||||||
|
div.dt-scroll-body tfoot tr td {
|
||||||
|
height: 0 !important;
|
||||||
|
padding-top: 0px !important;
|
||||||
|
padding-bottom: 0px !important;
|
||||||
|
border-top-width: 0px !important;
|
||||||
|
border-bottom-width: 0px !important;
|
||||||
|
}
|
||||||
|
div.dt-scroll-body thead tr th div.dt-scroll-sizing, div.dt-scroll-body thead tr td div.dt-scroll-sizing,
|
||||||
|
div.dt-scroll-body tfoot tr th div.dt-scroll-sizing,
|
||||||
|
div.dt-scroll-body tfoot tr td div.dt-scroll-sizing {
|
||||||
|
height: 0 !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.dataTable thead > tr > th:active,
|
||||||
|
table.dataTable thead > tr > td:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
bottom: 50%;
|
||||||
|
content: "▲";
|
||||||
|
content: "▲"/"";
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
top: 50%;
|
||||||
|
content: "▼";
|
||||||
|
content: "▼"/"";
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-orderable-asc, table.dataTable thead > tr > th.dt-orderable-desc, table.dataTable thead > tr > th.dt-ordering-asc, table.dataTable thead > tr > th.dt-ordering-desc,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-asc,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-desc,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-asc,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-desc {
|
||||||
|
position: relative;
|
||||||
|
padding-right: 30px;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order {
|
||||||
|
position: absolute;
|
||||||
|
right: 12px;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 12px;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:after, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:before, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
|
||||||
|
left: 0;
|
||||||
|
opacity: 0.125;
|
||||||
|
line-height: 9px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-orderable-asc, table.dataTable thead > tr > th.dt-orderable-desc,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-asc,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-desc {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-orderable-asc:hover, table.dataTable thead > tr > th.dt-orderable-desc:hover,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-asc:hover,
|
||||||
|
table.dataTable thead > tr > td.dt-orderable-desc:hover {
|
||||||
|
outline: 2px solid rgba(0, 0, 0, 0.05);
|
||||||
|
outline-offset: -2px;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th.sorting_desc_disabled span.dt-column-order:after, table.dataTable thead > tr > th.sorting_asc_disabled span.dt-column-order:before,
|
||||||
|
table.dataTable thead > tr > td.sorting_desc_disabled span.dt-column-order:after,
|
||||||
|
table.dataTable thead > tr > td.sorting_asc_disabled span.dt-column-order:before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
table.dataTable thead > tr > th:active,
|
||||||
|
table.dataTable thead > tr > td:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dt-scroll-body > table.dataTable > thead > tr > th,
|
||||||
|
div.dt-scroll-body > table.dataTable > thead > tr > td {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root.dark table.dataTable thead > tr > th.dt-orderable-asc:hover, :root.dark table.dataTable thead > tr > th.dt-orderable-desc:hover,
|
||||||
|
:root.dark table.dataTable thead > tr > td.dt-orderable-asc:hover,
|
||||||
|
:root.dark table.dataTable thead > tr > td.dt-orderable-desc:hover,
|
||||||
|
:root[data-bs-theme=dark] table.dataTable thead > tr > th.dt-orderable-asc:hover,
|
||||||
|
:root[data-bs-theme=dark] table.dataTable thead > tr > th.dt-orderable-desc:hover,
|
||||||
|
:root[data-bs-theme=dark] table.dataTable thead > tr > td.dt-orderable-asc:hover,
|
||||||
|
:root[data-bs-theme=dark] table.dataTable thead > tr > td.dt-orderable-desc:hover {
|
||||||
|
outline: 2px solid rgba(255, 255, 255, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dt-processing {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 200px;
|
||||||
|
margin-left: -100px;
|
||||||
|
margin-top: -22px;
|
||||||
|
text-align: center;
|
||||||
|
padding: 2px;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
div.dt-processing > div:last-child {
|
||||||
|
position: relative;
|
||||||
|
width: 80px;
|
||||||
|
height: 15px;
|
||||||
|
margin: 1em auto;
|
||||||
|
}
|
||||||
|
div.dt-processing > div:last-child > div {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: 13px;
|
||||||
|
height: 13px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: rgb(13, 110, 253);
|
||||||
|
background: rgb(var(--dt-row-selected));
|
||||||
|
animation-timing-function: cubic-bezier(0, 1, 1, 0);
|
||||||
|
}
|
||||||
|
div.dt-processing > div:last-child > div:nth-child(1) {
|
||||||
|
left: 8px;
|
||||||
|
animation: datatables-loader-1 0.6s infinite;
|
||||||
|
}
|
||||||
|
div.dt-processing > div:last-child > div:nth-child(2) {
|
||||||
|
left: 8px;
|
||||||
|
animation: datatables-loader-2 0.6s infinite;
|
||||||
|
}
|
||||||
|
div.dt-processing > div:last-child > div:nth-child(3) {
|
||||||
|
left: 32px;
|
||||||
|
animation: datatables-loader-2 0.6s infinite;
|
||||||
|
}
|
||||||
|
div.dt-processing > div:last-child > div:nth-child(4) {
|
||||||
|
left: 56px;
|
||||||
|
animation: datatables-loader-3 0.6s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes datatables-loader-1 {
|
||||||
|
0% {
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes datatables-loader-3 {
|
||||||
|
0% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes datatables-loader-2 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0, 0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translate(24px, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
table.dataTable.nowrap th, table.dataTable.nowrap td {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
table.dataTable th,
|
||||||
|
table.dataTable td {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-left,
|
||||||
|
table.dataTable td.dt-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-center,
|
||||||
|
table.dataTable td.dt-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-right,
|
||||||
|
table.dataTable td.dt-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-justify,
|
||||||
|
table.dataTable td.dt-justify {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-nowrap,
|
||||||
|
table.dataTable td.dt-nowrap {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-empty,
|
||||||
|
table.dataTable td.dt-empty {
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
table.dataTable th.dt-type-numeric, table.dataTable th.dt-type-date,
|
||||||
|
table.dataTable td.dt-type-numeric,
|
||||||
|
table.dataTable td.dt-type-date {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
table.dataTable thead th,
|
||||||
|
table.dataTable thead td,
|
||||||
|
table.dataTable tfoot th,
|
||||||
|
table.dataTable tfoot td {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-left,
|
||||||
|
table.dataTable thead td.dt-head-left,
|
||||||
|
table.dataTable tfoot th.dt-head-left,
|
||||||
|
table.dataTable tfoot td.dt-head-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-center,
|
||||||
|
table.dataTable thead td.dt-head-center,
|
||||||
|
table.dataTable tfoot th.dt-head-center,
|
||||||
|
table.dataTable tfoot td.dt-head-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-right,
|
||||||
|
table.dataTable thead td.dt-head-right,
|
||||||
|
table.dataTable tfoot th.dt-head-right,
|
||||||
|
table.dataTable tfoot td.dt-head-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-justify,
|
||||||
|
table.dataTable thead td.dt-head-justify,
|
||||||
|
table.dataTable tfoot th.dt-head-justify,
|
||||||
|
table.dataTable tfoot td.dt-head-justify {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
table.dataTable thead th.dt-head-nowrap,
|
||||||
|
table.dataTable thead td.dt-head-nowrap,
|
||||||
|
table.dataTable tfoot th.dt-head-nowrap,
|
||||||
|
table.dataTable tfoot td.dt-head-nowrap {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-left,
|
||||||
|
table.dataTable tbody td.dt-body-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-center,
|
||||||
|
table.dataTable tbody td.dt-body-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-right,
|
||||||
|
table.dataTable tbody td.dt-body-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-justify,
|
||||||
|
table.dataTable tbody td.dt-body-justify {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
table.dataTable tbody th.dt-body-nowrap,
|
||||||
|
table.dataTable tbody td.dt-body-nowrap {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Table styles
|
||||||
|
*/
|
||||||
|
table.dataTable {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-spacing: 0;
|
||||||
|
/*
|
||||||
|
* Header and footer styles
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Body styles
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
table.dataTable thead th,
|
||||||
|
table.dataTable tfoot th {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
table.dataTable > thead > tr > th,
|
||||||
|
table.dataTable > thead > tr > td {
|
||||||
|
padding: 10px;
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
table.dataTable > thead > tr > th:active,
|
||||||
|
table.dataTable > thead > tr > td:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
table.dataTable > tfoot > tr > th,
|
||||||
|
table.dataTable > tfoot > tr > td {
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.3);
|
||||||
|
padding: 10px 10px 6px 10px;
|
||||||
|
}
|
||||||
|
table.dataTable > tbody > tr {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
table.dataTable > tbody > tr:first-child > * {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
table.dataTable > tbody > tr:last-child > * {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
table.dataTable > tbody > tr.selected > * {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.9);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.9);
|
||||||
|
color: rgb(255, 255, 255);
|
||||||
|
color: rgb(var(--dt-row-selected-text));
|
||||||
|
}
|
||||||
|
table.dataTable > tbody > tr.selected a {
|
||||||
|
color: rgb(9, 10, 11);
|
||||||
|
color: rgb(var(--dt-row-selected-link));
|
||||||
|
}
|
||||||
|
table.dataTable > tbody > tr > th,
|
||||||
|
table.dataTable > tbody > tr > td {
|
||||||
|
padding: 8px 10px;
|
||||||
|
}
|
||||||
|
table.dataTable.row-border > tbody > tr > *, table.dataTable.display > tbody > tr > * {
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
table.dataTable.row-border > tbody > tr:first-child > *, table.dataTable.display > tbody > tr:first-child > * {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
table.dataTable.row-border > tbody > tr.selected + tr.selected > td, table.dataTable.display > tbody > tr.selected + tr.selected > td {
|
||||||
|
border-top-color: rgba(13, 110, 253, 0.65);
|
||||||
|
border-top-color: rgba(var(--dt-row-selected), 0.65);
|
||||||
|
}
|
||||||
|
table.dataTable.cell-border > tbody > tr > * {
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.15);
|
||||||
|
border-right: 1px solid rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
table.dataTable.cell-border > tbody > tr > *:first-child {
|
||||||
|
border-left: 1px solid rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
table.dataTable.cell-border > tbody > tr:first-child > * {
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
table.dataTable.stripe > tbody > tr:nth-child(odd) > *, table.dataTable.display > tbody > tr:nth-child(odd) > * {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.023);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.023);
|
||||||
|
}
|
||||||
|
table.dataTable.stripe > tbody > tr:nth-child(odd).selected > *, table.dataTable.display > tbody > tr:nth-child(odd).selected > * {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.923);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.923);
|
||||||
|
}
|
||||||
|
table.dataTable.hover > tbody > tr:hover > *, table.dataTable.display > tbody > tr:hover > * {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.035);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.035);
|
||||||
|
}
|
||||||
|
table.dataTable.hover > tbody > tr.selected:hover > *, table.dataTable.display > tbody > tr.selected:hover > * {
|
||||||
|
box-shadow: inset 0 0 0 9999px #0d6efd !important;
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 1) !important;
|
||||||
|
}
|
||||||
|
table.dataTable.order-column > tbody tr > .sorting_1,
|
||||||
|
table.dataTable.order-column > tbody tr > .sorting_2,
|
||||||
|
table.dataTable.order-column > tbody tr > .sorting_3, table.dataTable.display > tbody tr > .sorting_1,
|
||||||
|
table.dataTable.display > tbody tr > .sorting_2,
|
||||||
|
table.dataTable.display > tbody tr > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.019);
|
||||||
|
}
|
||||||
|
table.dataTable.order-column > tbody tr.selected > .sorting_1,
|
||||||
|
table.dataTable.order-column > tbody tr.selected > .sorting_2,
|
||||||
|
table.dataTable.order-column > tbody tr.selected > .sorting_3, table.dataTable.display > tbody tr.selected > .sorting_1,
|
||||||
|
table.dataTable.display > tbody tr.selected > .sorting_2,
|
||||||
|
table.dataTable.display > tbody tr.selected > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.919);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr:nth-child(odd) > .sorting_1, table.dataTable.order-column.stripe > tbody > tr:nth-child(odd) > .sorting_1 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.054);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.054);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr:nth-child(odd) > .sorting_2, table.dataTable.order-column.stripe > tbody > tr:nth-child(odd) > .sorting_2 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.047);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.047);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr:nth-child(odd) > .sorting_3, table.dataTable.order-column.stripe > tbody > tr:nth-child(odd) > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.039);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.039);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr:nth-child(odd).selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr:nth-child(odd).selected > .sorting_1 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.954);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.954);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr:nth-child(odd).selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr:nth-child(odd).selected > .sorting_2 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.947);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.947);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr:nth-child(odd).selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr:nth-child(odd).selected > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.939);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.939);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr.even > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_1 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.019);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr.even > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_2 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.011);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.011);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr.even > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.003);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.003);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_1 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.919);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_2 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.911);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.911);
|
||||||
|
}
|
||||||
|
table.dataTable.display > tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.903);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.903);
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.082);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.082);
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.074);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.074);
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.062);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.062);
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.982);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.982);
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.974);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.974);
|
||||||
|
}
|
||||||
|
table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.962);
|
||||||
|
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.962);
|
||||||
|
}
|
||||||
|
table.dataTable.compact thead th,
|
||||||
|
table.dataTable.compact thead td,
|
||||||
|
table.dataTable.compact tfoot th,
|
||||||
|
table.dataTable.compact tfoot td,
|
||||||
|
table.dataTable.compact tbody th,
|
||||||
|
table.dataTable.compact tbody td {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.dt-container div.dt-layout-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0.75em 0;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row div.dt-layout-cell {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row div.dt-layout-cell.dt-layout-start {
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row div.dt-layout-cell.dt-layout-end {
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row div.dt-layout-cell:empty {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
div.dt-container div.dt-layout-row:not(.dt-layout-table) {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row:not(.dt-layout-table) div.dt-layout-cell {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row:not(.dt-layout-table) div.dt-layout-cell > * {
|
||||||
|
margin: 0.5em 0;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row:not(.dt-layout-table) div.dt-layout-cell.dt-layout-start {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-row:not(.dt-layout-table) div.dt-layout-cell.dt-layout-end {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-start > *:not(:last-child) {
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-end > *:not(:first-child) {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-full {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-full > *:only-child {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-table > div {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
div.dt-container div.dt-layout-start > *:not(:last-child) {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
div.dt-container div.dt-layout-end > *:not(:first-child) {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Control feature layout
|
||||||
|
*/
|
||||||
|
div.dt-container {
|
||||||
|
position: relative;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
div.dt-container .dt-search input {
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 5px;
|
||||||
|
background-color: transparent;
|
||||||
|
color: inherit;
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
div.dt-container .dt-input {
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 5px;
|
||||||
|
background-color: transparent;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
div.dt-container select.dt-input {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
div.dt-container .dt-paging .dt-paging-button {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 1.5em;
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
margin-left: 2px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none !important;
|
||||||
|
cursor: pointer;
|
||||||
|
color: inherit !important;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 2px;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
div.dt-container .dt-paging .dt-paging-button.current, div.dt-container .dt-paging .dt-paging-button.current:hover {
|
||||||
|
color: inherit !important;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.3);
|
||||||
|
background-color: rgba(0, 0, 0, 0.05);
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.05)), color-stop(100%, rgba(0, 0, 0, 0.05))); /* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* Chrome10+,Safari5.1+ */
|
||||||
|
background: -moz-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* FF3.6+ */
|
||||||
|
background: -ms-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* IE10+ */
|
||||||
|
background: -o-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* Opera 11.10+ */
|
||||||
|
background: linear-gradient(to bottom, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* W3C */
|
||||||
|
}
|
||||||
|
div.dt-container .dt-paging .dt-paging-button.disabled, div.dt-container .dt-paging .dt-paging-button.disabled:hover, div.dt-container .dt-paging .dt-paging-button.disabled:active {
|
||||||
|
cursor: default;
|
||||||
|
color: rgba(0, 0, 0, 0.5) !important;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background: transparent;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
div.dt-container .dt-paging .dt-paging-button:hover {
|
||||||
|
color: white !important;
|
||||||
|
border: 1px solid #111;
|
||||||
|
background-color: #111;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); /* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, #585858 0%, #111 100%); /* Chrome10+,Safari5.1+ */
|
||||||
|
background: -moz-linear-gradient(top, #585858 0%, #111 100%); /* FF3.6+ */
|
||||||
|
background: -ms-linear-gradient(top, #585858 0%, #111 100%); /* IE10+ */
|
||||||
|
background: -o-linear-gradient(top, #585858 0%, #111 100%); /* Opera 11.10+ */
|
||||||
|
background: linear-gradient(to bottom, #585858 0%, #111 100%); /* W3C */
|
||||||
|
}
|
||||||
|
div.dt-container .dt-paging .dt-paging-button:active {
|
||||||
|
outline: none;
|
||||||
|
background-color: #0c0c0c;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); /* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Chrome10+,Safari5.1+ */
|
||||||
|
background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* FF3.6+ */
|
||||||
|
background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* IE10+ */
|
||||||
|
background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Opera 11.10+ */
|
||||||
|
background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); /* W3C */
|
||||||
|
box-shadow: inset 0 0 3px #111;
|
||||||
|
}
|
||||||
|
div.dt-container .dt-paging .ellipsis {
|
||||||
|
padding: 0 1em;
|
||||||
|
}
|
||||||
|
div.dt-container .dt-length,
|
||||||
|
div.dt-container .dt-search,
|
||||||
|
div.dt-container .dt-info,
|
||||||
|
div.dt-container .dt-processing,
|
||||||
|
div.dt-container .dt-paging {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
div.dt-container .dataTables_scroll {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
div.dt-container .dataTables_scroll div.dt-scroll-body {
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
}
|
||||||
|
div.dt-container .dataTables_scroll div.dt-scroll-body > table > thead > tr > th, div.dt-container .dataTables_scroll div.dt-scroll-body > table > thead > tr > td, div.dt-container .dataTables_scroll div.dt-scroll-body > table > tbody > tr > th, div.dt-container .dataTables_scroll div.dt-scroll-body > table > tbody > tr > td {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
div.dt-container .dataTables_scroll div.dt-scroll-body > table > thead > tr > th > div.dataTables_sizing,
|
||||||
|
div.dt-container .dataTables_scroll div.dt-scroll-body > table > thead > tr > td > div.dataTables_sizing, div.dt-container .dataTables_scroll div.dt-scroll-body > table > tbody > tr > th > div.dataTables_sizing,
|
||||||
|
div.dt-container .dataTables_scroll div.dt-scroll-body > table > tbody > tr > td > div.dataTables_sizing {
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
div.dt-container.dt-empty-footer tbody > tr:last-child > * {
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
div.dt-container.dt-empty-footer .dt-scroll-body {
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
div.dt-container.dt-empty-footer .dt-scroll-body tbody > tr:last-child > * {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark {
|
||||||
|
--dt-row-hover: 255, 255, 255;
|
||||||
|
--dt-row-stripe: 255, 255, 255;
|
||||||
|
--dt-column-ordering: 255, 255, 255;
|
||||||
|
}
|
||||||
|
html.dark table.dataTable > thead > tr > th,
|
||||||
|
html.dark table.dataTable > thead > tr > td {
|
||||||
|
border-bottom: 1px solid rgb(89, 91, 94);
|
||||||
|
}
|
||||||
|
html.dark table.dataTable > thead > tr > th:active,
|
||||||
|
html.dark table.dataTable > thead > tr > td:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
html.dark table.dataTable > tfoot > tr > th,
|
||||||
|
html.dark table.dataTable > tfoot > tr > td {
|
||||||
|
border-top: 1px solid rgb(89, 91, 94);
|
||||||
|
}
|
||||||
|
html.dark table.dataTable.row-border > tbody > tr > *, html.dark table.dataTable.display > tbody > tr > * {
|
||||||
|
border-top: 1px solid rgb(64, 67, 70);
|
||||||
|
}
|
||||||
|
html.dark table.dataTable.row-border > tbody > tr:first-child > *, html.dark table.dataTable.display > tbody > tr:first-child > * {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
html.dark table.dataTable.row-border > tbody > tr.selected + tr.selected > td, html.dark table.dataTable.display > tbody > tr.selected + tr.selected > td {
|
||||||
|
border-top-color: rgba(13, 110, 253, 0.65);
|
||||||
|
border-top-color: rgba(var(--dt-row-selected), 0.65);
|
||||||
|
}
|
||||||
|
html.dark table.dataTable.cell-border > tbody > tr > th,
|
||||||
|
html.dark table.dataTable.cell-border > tbody > tr > td {
|
||||||
|
border-top: 1px solid rgb(64, 67, 70);
|
||||||
|
border-right: 1px solid rgb(64, 67, 70);
|
||||||
|
}
|
||||||
|
html.dark table.dataTable.cell-border > tbody > tr > th:first-child,
|
||||||
|
html.dark table.dataTable.cell-border > tbody > tr > td:first-child {
|
||||||
|
border-left: 1px solid rgb(64, 67, 70);
|
||||||
|
}
|
||||||
|
html.dark .dt-container.dt-empty-footer table.dataTable {
|
||||||
|
border-bottom: 1px solid rgb(89, 91, 94);
|
||||||
|
}
|
||||||
|
html.dark .dt-container .dt-search input,
|
||||||
|
html.dark .dt-container .dt-length select {
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||||
|
background-color: var(--dt-html-background);
|
||||||
|
}
|
||||||
|
html.dark .dt-container .dt-paging .dt-paging-button.current, html.dark .dt-container .dt-paging .dt-paging-button.current:hover {
|
||||||
|
border: 1px solid rgb(89, 91, 94);
|
||||||
|
background: rgba(255, 255, 255, 0.15);
|
||||||
|
}
|
||||||
|
html.dark .dt-container .dt-paging .dt-paging-button.disabled, html.dark .dt-container .dt-paging .dt-paging-button.disabled:hover, html.dark .dt-container .dt-paging .dt-paging-button.disabled:active {
|
||||||
|
color: #666 !important;
|
||||||
|
}
|
||||||
|
html.dark .dt-container .dt-paging .dt-paging-button:hover {
|
||||||
|
border: 1px solid rgb(53, 53, 53);
|
||||||
|
background: rgb(53, 53, 53);
|
||||||
|
}
|
||||||
|
html.dark .dt-container .dt-paging .dt-paging-button:active {
|
||||||
|
background: #3a3a3a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Overrides for RTL support
|
||||||
|
*/
|
||||||
|
*[dir=rtl] table.dataTable thead th,
|
||||||
|
*[dir=rtl] table.dataTable thead td,
|
||||||
|
*[dir=rtl] table.dataTable tfoot th,
|
||||||
|
*[dir=rtl] table.dataTable tfoot td {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
*[dir=rtl] table.dataTable th.dt-type-numeric, *[dir=rtl] table.dataTable th.dt-type-date,
|
||||||
|
*[dir=rtl] table.dataTable td.dt-type-numeric,
|
||||||
|
*[dir=rtl] table.dataTable td.dt-type-date {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
*[dir=rtl] div.dt-container div.dt-layout-cell.dt-start {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
*[dir=rtl] div.dt-container div.dt-layout-cell.dt-end {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
*[dir=rtl] div.dt-container div.dt-search input {
|
||||||
|
margin: 0 3px 0 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,159 @@
|
|||||||
|
body {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
background-image: url('/static/img/bg.png');
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
vertical-align: middle;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layout */
|
||||||
|
.centered {
|
||||||
|
position: fixed;
|
||||||
|
text-align: center;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#disk {
|
||||||
|
width: 66vw;
|
||||||
|
border-radius: 1200px;
|
||||||
|
aspect-ratio: 1 / 1 !important;
|
||||||
|
background-image: url('/static/img/vinyl.png');
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
box-shadow: 0 0 36px 0px rgba(128, 128, 128, 0.128);
|
||||||
|
background-color: white;
|
||||||
|
padding: 32px;
|
||||||
|
border-radius: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-avatar {
|
||||||
|
max-height: 40px;
|
||||||
|
border-radius: 30px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-menu-link {
|
||||||
|
/*font-size: 24px;*/
|
||||||
|
/*font-family: RobotoSlab;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
transition: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#action_list {
|
||||||
|
float: right;
|
||||||
|
padding: 20px;
|
||||||
|
color: white;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#action_list a {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logo {
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#search_bar {
|
||||||
|
background: url('/static/svg/search-solid.svg') no-repeat scroll 12px 7px;
|
||||||
|
padding-left: 48px;
|
||||||
|
background-size: 20px;
|
||||||
|
border-radius: 66px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navigation {
|
||||||
|
/*padding-top: 32px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
padding-left: 12px;
|
||||||
|
padding-right: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navigation_logo {
|
||||||
|
max-width: 216px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer {
|
||||||
|
text-align: center;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dl_queue_img {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icn-spinner {
|
||||||
|
animation: spin-animation 0.9s infinite;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icn-downloading {
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
position: absolute;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vinyl-card {
|
||||||
|
background-image: url('/static/img/vinyl-card.png');
|
||||||
|
background-position: right;
|
||||||
|
border-radius: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin-animation {
|
||||||
|
0% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin{
|
||||||
|
from{transform:rotate(0deg)}
|
||||||
|
to{transform:rotate(360deg)}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
from {-webkit-transform:rotate(0deg);}
|
||||||
|
to { -webkit-transform:rotate(360deg);}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-moz-keyframes spin {
|
||||||
|
from {-moz-transform:rotate(0deg);}
|
||||||
|
to { -moz-transform:rotate(360deg);}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 923 B |
|
After Width: | Height: | Size: 906 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 902 KiB |
|
After Width: | Height: | Size: 525 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 136 KiB |
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
define('LARAVEL_START', microtime(true));
|
||||||
|
|
||||||
|
// Determine if the application is in maintenance mode...
|
||||||
|
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
|
||||||
|
require $maintenance;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register the Composer autoloader...
|
||||||
|
require __DIR__.'/../vendor/autoload.php';
|
||||||
|
|
||||||
|
// Bootstrap Laravel and handle the request...
|
||||||
|
(require_once __DIR__.'/../bootstrap/app.php')
|
||||||
|
->handleRequest(Request::capture());
|
||||||
@ -0,0 +1,166 @@
|
|||||||
|
console.log('Version 1:20:2');
|
||||||
|
const appModal = $('#modalDownloadQueue');
|
||||||
|
const loader = $("#loader-wrapper");
|
||||||
|
let ArtistTable = {}; // Initialized for ajax reload
|
||||||
|
|
||||||
|
function requestQueue() {
|
||||||
|
$.ajax({
|
||||||
|
url: '/api/queue',
|
||||||
|
success: (response) => {
|
||||||
|
Alpine.store('app').Queue = response;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function template_artist_result(element) {
|
||||||
|
let image_src = element.image.replace('/var/www/html/public', '');
|
||||||
|
console.log(image_src);
|
||||||
|
return `
|
||||||
|
<div class="card w-100 p-2 mb-2">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-3">
|
||||||
|
<img src="${image_src}" width="72px" height="72px" style="border-radius: 12px;"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-9 m-auto">
|
||||||
|
<h4>${element.name}</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
function construct_artist_result_html(artist_list) {
|
||||||
|
let html = '<h3>Found Artist</h3>';
|
||||||
|
let index = 0;
|
||||||
|
if (artist_list.length > 1) {
|
||||||
|
artist_list.forEach((element) => {
|
||||||
|
index += 1;
|
||||||
|
html += template_artist_result(element);
|
||||||
|
if (index === 1 && artist_list.length > 1) {
|
||||||
|
html += '<hr/>';
|
||||||
|
html += '<h6>Suggested Artists</h6>'
|
||||||
|
html += '<hr/>';
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
html += template_artist_result(artist_list);
|
||||||
|
}
|
||||||
|
return html
|
||||||
|
}
|
||||||
|
|
||||||
|
function proc_notification(icon, title, html) {
|
||||||
|
Swal.fire({
|
||||||
|
icon: icon,
|
||||||
|
title: title,
|
||||||
|
html: html
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function artist_queue_toggle(element) {
|
||||||
|
let self = $(element);
|
||||||
|
let artist_name = self.data('artist_name');
|
||||||
|
self.prop('disabled', true)
|
||||||
|
$.ajax({
|
||||||
|
url: `/api/queue/artist/${self.data('artist_id')}`,
|
||||||
|
success: () => {
|
||||||
|
proc_notification('success', 'Queued Download', `Artist ${artist_name} Queued for Download!`);
|
||||||
|
// ArtistTable.ajax.reload();
|
||||||
|
},
|
||||||
|
error: (response) => {
|
||||||
|
console.log(response);
|
||||||
|
proc_notification('error', 'What the flip?!', `Failed to queue artist ${artist_name} <br/><br/> <strong>${response.status}: ${response.statusText}</strong>`);
|
||||||
|
self.prop('disabled', false);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function bind_action_buttons() {
|
||||||
|
$('#settings_btn').on('click', () => {
|
||||||
|
$('#modalSettings').modal('toggle');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#catalog_btn').on('click', () => {
|
||||||
|
$('#modalCatalog').modal('toggle');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#queue_btn').on('click', () => {
|
||||||
|
appModal.modal('toggle');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#download_btn').on('click', () => {
|
||||||
|
let artist = $('#search_bar').val();
|
||||||
|
|
||||||
|
// Send request to server
|
||||||
|
setTimeout(() => {
|
||||||
|
|
||||||
|
if (artist == '') {
|
||||||
|
return proc_notification('error', 'Whoopsie!', 'You need to add an artist, c\'mon man!');;
|
||||||
|
}
|
||||||
|
|
||||||
|
loader.fadeIn(300);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: `/artist/${artist}`,
|
||||||
|
success: (response) => {
|
||||||
|
let html = construct_artist_result_html(response);
|
||||||
|
proc_notification('success', 'Shazam!', html);
|
||||||
|
ArtistTable.ajax.reload();
|
||||||
|
$('#search_bar').val('');
|
||||||
|
loader.fadeOut(700);
|
||||||
|
},
|
||||||
|
error: (response) => {
|
||||||
|
proc_notification('error', 'What the flip?!', response.statusText);
|
||||||
|
loader.fadeOut(700);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('alpine:init', () => {
|
||||||
|
console.log('Alpine:init');
|
||||||
|
Alpine.store('app', {
|
||||||
|
Queue: [], // Rendered in the 'Queue' modal
|
||||||
|
});
|
||||||
|
requestQueue();
|
||||||
|
setInterval(requestQueue, 10000);
|
||||||
|
$("#loader-wrapper").fadeOut(900);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
bind_action_buttons();
|
||||||
|
//Datatable for 'Catalog' menu
|
||||||
|
ArtistTable = $('#artistsCatalogDatatable').DataTable({
|
||||||
|
ajax: '/api/artists',
|
||||||
|
type: 'get',
|
||||||
|
dataType: 'json',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
data: 'thumbnail', orderable: false, render: (data) => {
|
||||||
|
return `<img src="${data}" height=48 width="48" style="border-radius: 6px;"/>`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{data: 'name'},
|
||||||
|
{
|
||||||
|
title: 'Channel', data: 'url_remote', render: (data) => {
|
||||||
|
return `<a href="https://music.youtube.com/${data}" class="btn btn-danger" target="_blank"><i class="lab la-youtube"></i></a>`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{data: 'state'},
|
||||||
|
{
|
||||||
|
data: 'id', orderable: false, render: (data, type, row) => {
|
||||||
|
let stateDiable = row.state === 'in_progress' ? 'disabled' : '';
|
||||||
|
let stateClass = row.state === 'done' ? 'btn-success' : 'btn-primary';
|
||||||
|
let artist_name = row.name;
|
||||||
|
let button_icon = row.state === 'done' ? '<i class="las la-redo-alt"></i>' : '<i class="las la-cloud-download-alt"></i>';
|
||||||
|
return `<button class="btn ${stateClass}" style="float: right;" data-artist_name="${artist_name}" data-artist_id="${data}" onclick="artist_queue_toggle(this)" ${stateDiable}>${button_icon} Download</button>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
User-agent: *
|
||||||
|
Disallow:
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
// Bordered & Pulled
|
||||||
|
// -------------------------
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-border {
|
||||||
|
border: solid 0.08em #eee;
|
||||||
|
border-radius: .1em;
|
||||||
|
padding: .2em .25em .15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-pull-left { float: left; }
|
||||||
|
.#{$la-css-prefix}-pull-right { float: right; }
|
||||||
|
|
||||||
|
.#{$la-css-prefix} {
|
||||||
|
&.#{$la-css-prefix}-pull-left { margin-right: .3em; }
|
||||||
|
&.#{$la-css-prefix}-pull-right { margin-left: .3em; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix} {
|
||||||
|
&.pull-left { margin-right: .3em; }
|
||||||
|
&.pull-right { margin-left: .3em; }
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
.lar,
|
||||||
|
.las,
|
||||||
|
.lab {
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
display: inline-block;
|
||||||
|
font-style: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
text-rendering: auto;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
.#{$la-css-prefix}-fw {
|
||||||
|
width: 1.25em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
.#{$la-css-prefix}-lg {
|
||||||
|
font-size: 1.33333em;
|
||||||
|
line-height: 0.75em;
|
||||||
|
vertical-align: -.0667em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-xs { font-size: 0.75em; }
|
||||||
|
.#{$la-css-prefix}-2x { font-size: 1em; }
|
||||||
|
.#{$la-css-prefix}-2x { font-size: 2em; }
|
||||||
|
.#{$la-css-prefix}-3x { font-size: 3em; }
|
||||||
|
.#{$la-css-prefix}-4x { font-size: 4em; }
|
||||||
|
.#{$la-css-prefix}-5x { font-size: 5em; }
|
||||||
|
.#{$la-css-prefix}-6x { font-size: 6em; }
|
||||||
|
.#{$la-css-prefix}-7x { font-size: 7em; }
|
||||||
|
.#{$la-css-prefix}-8x { font-size: 8em; }
|
||||||
|
.#{$la-css-prefix}-9x { font-size: 9em; }
|
||||||
|
.#{$la-css-prefix}-10x { font-size: 10em; }
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-fw {
|
||||||
|
text-align: center;
|
||||||
|
width: 1.25em;
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
.#{$la-css-prefix}-ul {
|
||||||
|
padding-left: 0;
|
||||||
|
margin-left: $la-li-width;
|
||||||
|
list-style-type: none;
|
||||||
|
> li {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-li {
|
||||||
|
position: absolute;
|
||||||
|
left: -2em;
|
||||||
|
text-align: center;
|
||||||
|
width: $la-li-width;
|
||||||
|
line-height: inherit;
|
||||||
|
&.#{$la-css-prefix}-lg {
|
||||||
|
left: -$la-li-width + (4em / 14);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
// Only display content to screen readers. A la Bootstrap 4.
|
||||||
|
//
|
||||||
|
// See: http://a11yproject.com/posts/how-to-hide-content/
|
||||||
|
|
||||||
|
@mixin sr-only {
|
||||||
|
border: 0;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
height: 1px;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use in conjunction with .sr-only to only display content when it's focused.
|
||||||
|
//
|
||||||
|
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
|
||||||
|
//
|
||||||
|
// Credit: HTML5 Boilerplate
|
||||||
|
|
||||||
|
@mixin sr-only-focusable {
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
clip: auto;
|
||||||
|
height: auto;
|
||||||
|
margin: 0;
|
||||||
|
overflow: visible;
|
||||||
|
position: static;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: $la-font-name-lab;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-display: auto;
|
||||||
|
src: url('#{$la-font-path}/la-brands-400.eot');
|
||||||
|
src: url("#{$la-font-path}/la-brands-400.eot?#iefix") format("embedded-opentype"),
|
||||||
|
url("#{$la-font-path}/la-brands-400.woff2") format("woff2"),
|
||||||
|
url("#{$la-font-path}/la-brands-400.woff") format("woff"),
|
||||||
|
url("#{$la-font-path}/la-brands-400.ttf") format("truetype"),
|
||||||
|
url("#{$la-font-path}/la-brands-400.svg#lineawesome") format("svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix-lab} {
|
||||||
|
font-family: $la-font-name-lab;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: $la-font-name-lar;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: auto;
|
||||||
|
src: url('#{$la-font-path}/la-regular-400.eot');
|
||||||
|
src: url("#{$la-font-path}/la-regular-400.eot?#iefix") format("embedded-opentype"),
|
||||||
|
url("#{$la-font-path}/la-regular-400.woff2") format("woff2"),
|
||||||
|
url("#{$la-font-path}/la-regular-400.woff") format("woff"),
|
||||||
|
url("#{$la-font-path}/la-regular-400.ttf") format("truetype"),
|
||||||
|
url("#{$la-font-path}/la-regular-400.svg#lineawesome") format("svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix-lar} {
|
||||||
|
font-family: $la-font-name-lar;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: $la-font-name-las;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 900;
|
||||||
|
font-display: auto;
|
||||||
|
src: url('#{$la-font-path}/la-solid-900.eot');
|
||||||
|
src: url("#{$la-font-path}/la-solid-900.eot?#iefix") format("embedded-opentype"),
|
||||||
|
url("#{$la-font-path}/la-solid-900.woff2") format("woff2"),
|
||||||
|
url("#{$la-font-path}/la-solid-900.woff") format("woff"),
|
||||||
|
url("#{$la-font-path}/la-solid-900.ttf") format("truetype"),
|
||||||
|
url("#{$la-font-path}/la-solid-900.svg#lineawesome") format("svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix-las} {
|
||||||
|
font-family: $la-font-name-las;
|
||||||
|
font-weight: 900;
|
||||||
|
}
|
||||||
@ -0,0 +1,101 @@
|
|||||||
|
.la-pull-left {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-pull-right {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.la.la-pull-left,
|
||||||
|
.las.la-pull-left,
|
||||||
|
.lar.la-pull-left,
|
||||||
|
.lal.la-pull-left,
|
||||||
|
.lab.la-pull-left {
|
||||||
|
margin-right: .3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.la.la-pull-right,
|
||||||
|
.las.la-pull-right,
|
||||||
|
.lar.la-pull-right,
|
||||||
|
.lal.la-pull-right,
|
||||||
|
.lab.la-pull-right {
|
||||||
|
margin-left: .3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-spin {
|
||||||
|
-webkit-animation: la-spin 2s infinite linear;
|
||||||
|
animation: la-spin 2s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-pulse {
|
||||||
|
-webkit-animation: la-spin 1s infinite steps(8);
|
||||||
|
animation: la-spin 1s infinite steps(8);
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes la-spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes la-spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-rotate-90 {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
|
||||||
|
-webkit-transform: rotate(90deg);
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-rotate-180 {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
|
||||||
|
-webkit-transform: rotate(180deg);
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-rotate-270 {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
|
||||||
|
-webkit-transform: rotate(270deg);
|
||||||
|
transform: rotate(270deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-flip-horizontal {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
|
||||||
|
-webkit-transform: scale(-1, 1);
|
||||||
|
transform: scale(-1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-flip-vertical {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
|
||||||
|
-webkit-transform: scale(1, -1);
|
||||||
|
transform: scale(1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.la-flip-both, .la-flip-horizontal.la-flip-vertical {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
|
||||||
|
-webkit-transform: scale(-1, -1);
|
||||||
|
transform: scale(-1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
:root .la-rotate-90,
|
||||||
|
:root .la-rotate-180,
|
||||||
|
:root .la-rotate-270,
|
||||||
|
:root .la-flip-horizontal,
|
||||||
|
:root .la-flip-vertical,
|
||||||
|
:root .la-flip-both {
|
||||||
|
-webkit-filter: none;
|
||||||
|
filter: none;
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
.sr-only { @include sr-only(); }
|
||||||
|
.sr-only-focusable { @include sr-only-focusable(); }
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
.#{$la-css-prefix}-stack {
|
||||||
|
display: inline-block;
|
||||||
|
height: 2em;
|
||||||
|
line-height: 2em;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 2.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-stack-1x,
|
||||||
|
.#{$la-css-prefix}-stack-2x {
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-stack-1x {
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-stack-2x {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.#{$la-css-prefix}-inverse {
|
||||||
|
color: $la-inverse;
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
@import "mixins";
|
||||||
|
@import "core";
|
||||||
|
@import "variables";
|
||||||
|
@import "path";
|
||||||
|
@import "larger";
|
||||||
|
@import "fixed-width";
|
||||||
|
@import "list";
|
||||||
|
@import "bordered_pulled";
|
||||||
|
@import "rotated-flipped";
|
||||||
|
@import "stacked";
|
||||||
|
@import "icons";
|
||||||
|
@import "screen-reader";
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 626 B |
|
After Width: | Height: | Size: 755 B |
|
After Width: | Height: | Size: 755 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 292 B |
|
After Width: | Height: | Size: 532 B |
|
After Width: | Height: | Size: 249 B |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 699 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 924 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 237 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 980 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 283 B |
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 283 B |
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 221 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 1.2 KiB |