pifi 0.3.7 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/bin/pifi +3 -1
- data/config.ru +2 -1
- data/docs/install_tips.md +3 -3
- data/lib/pifi/controllers/application_controller.rb +4 -7
- data/lib/pifi/controllers/config_controller.rb +14 -0
- data/lib/pifi/controllers/static_controller.rb +15 -0
- data/lib/pifi/public/asset-manifest.json +11 -11
- data/lib/pifi/public/index.html +1 -1
- data/lib/pifi/public/locales/en/translation.json +10 -3
- data/lib/pifi/public/locales/pt-BR/translation.json +11 -4
- data/lib/pifi/public/{precache-manifest.d32d22242489630d8a8e892a5024d8f2.js → precache-manifest.3ca9784793937217e35f314e19179939.js} +9 -9
- data/lib/pifi/public/service-worker.js +1 -1
- data/lib/pifi/public/static/css/{main.6b591eab.chunk.css → main.58eef733.chunk.css} +1 -1
- data/lib/pifi/public/static/css/{main.6b591eab.chunk.css.map → main.58eef733.chunk.css.map} +1 -1
- data/lib/pifi/public/static/js/{2.f1675576.chunk.js → 2.df3b2c7e.chunk.js} +3 -3
- data/lib/pifi/public/static/js/{2.f1675576.chunk.js.LICENSE → 2.df3b2c7e.chunk.js.LICENSE} +0 -0
- data/lib/pifi/public/static/js/2.df3b2c7e.chunk.js.map +1 -0
- data/lib/pifi/public/static/js/main.58e602f6.chunk.js +2 -0
- data/lib/pifi/public/static/js/main.58e602f6.chunk.js.map +1 -0
- data/lib/pifi/version.rb +1 -1
- data/lib/pifi.rb +3 -1
- metadata +12 -11
- data/lib/pifi/controllers/index_controller.rb +0 -9
- data/lib/pifi/public/static/js/2.f1675576.chunk.js.map +0 -1
- data/lib/pifi/public/static/js/main.72828fad.chunk.js +0 -2
- data/lib/pifi/public/static/js/main.72828fad.chunk.js.map +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48502aa7e4e58ec66c3d6d7199785ff677f4095832c862be9fdf864251ba36b7
|
4
|
+
data.tar.gz: ffbda48822f41aae2d0b7fd2397c7e25ef42beeb605d854e0eb09f8efda0762b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28ca836a002b6f9430e1aafb2f86a8de95889ceb4d57ddab2bee4497bef447661d93a7d6aa57681e63a0fdf323536a6944d26fc040355098d6b3c04e976eeafc
|
7
|
+
data.tar.gz: 121c9a81d1632971aa14b02e6a84e7511979936984c5e7f88b7365d7517de2fd06b100762c826890c0ec4e438442cd52602a177b5f4d2030be84eb68cda8a94f
|
data/README.md
CHANGED
@@ -89,7 +89,7 @@ To keep it simple, the list of streams is just a JSON file with key-value pairs,
|
|
89
89
|
"Radio 2": "https://example.com/radio"
|
90
90
|
}
|
91
91
|
|
92
|
-
If you want to arrange the stations in categories, add a pair with the category name as the key and empty value, as shown below. This will add the headers "Talk radio" and "Classical" above each group of stations, [such as "
|
92
|
+
If you want to arrange the stations in categories, add a pair with the category name as the key and empty value, as shown below. This will add the headers "Talk radio" and "Classical" above each group of stations, [such as "Spain" and "Christmas" in the demo](#demo).
|
93
93
|
|
94
94
|
{
|
95
95
|
"Talk radio": "",
|
data/bin/pifi
CHANGED
@@ -4,7 +4,9 @@ require "pifi"
|
|
4
4
|
require "optimist"
|
5
5
|
|
6
6
|
cli_opts = Optimist::options do
|
7
|
-
|
7
|
+
version "PiFi Radio v#{PiFi::VERSION}"
|
8
|
+
banner "PiFi - MPD web client to listen to radio"
|
9
|
+
|
8
10
|
opt :port, "Define port", :default => 3000
|
9
11
|
opt :host, "Define host", :default => "0.0.0.0"
|
10
12
|
opt :daemonize, "Daemonize", :default => false
|
data/config.ru
CHANGED
data/docs/install_tips.md
CHANGED
@@ -10,11 +10,11 @@ For this, you can install a web server, such as Nginx, Apache or Lighttpd, and s
|
|
10
10
|
|
11
11
|
## Serving static resources from your web server
|
12
12
|
|
13
|
-
If
|
13
|
+
If your web server is reverse proxying PiFi, you may also use it to serve PiFi static assets. This can bring performance gains.
|
14
14
|
|
15
15
|
On PiFi configuration, set `serve_static` to false.
|
16
16
|
|
17
|
-
|
17
|
+
For configuring your web server, please refer to their documentation. In a nutshell, you'll make it look for the requested files in PiFi's public directory. This is `${PIFI_DIR}/lib/pifi/public`. The next section describes how to find `${PIFI_DIR}`.
|
18
18
|
|
19
19
|
## Finding PiFi directory
|
20
20
|
|
@@ -30,7 +30,7 @@ Note that the path contains both the Ruby version and the PiFi version. Thus, it
|
|
30
30
|
|
31
31
|
The `pifi` command exposes most Rack CLI options, but you may want to access more advanced configurations from Thin (the application server PiFi uses).
|
32
32
|
|
33
|
-
To
|
33
|
+
To do this, instead of invoking `pifi`, run `thin` and pass PiFi's `config.ru` and the `-e production` flag. The former is located at `${PIFI_DIR}/config.ru`.
|
34
34
|
|
35
35
|
For example, if you want to run PiFi on a socket instead of a port:
|
36
36
|
|
@@ -4,15 +4,12 @@ require "sinatra/base"
|
|
4
4
|
|
5
5
|
module PiFi
|
6
6
|
class ApplicationController < Sinatra::Base
|
7
|
-
set
|
8
|
-
set :streams, Streams.new(settings.streams_path, settings.streams_path_priv)
|
9
|
-
set :root, File.expand_path("../../", __FILE__)
|
10
|
-
|
11
|
-
configure :production do
|
12
|
-
set :static, settings.serve_static
|
13
|
-
end
|
7
|
+
set :static, false
|
14
8
|
configure :development do
|
15
9
|
before { response.headers["Access-Control-Allow-Origin"] = "*" }
|
16
10
|
end
|
11
|
+
|
12
|
+
set ConfigGetter.new.config
|
13
|
+
set :streams, Streams.new(settings.streams_path, settings.streams_path_priv)
|
17
14
|
end
|
18
15
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "pifi/controllers/application_controller"
|
2
|
+
|
3
|
+
module PiFi
|
4
|
+
class ConfigController < ApplicationController
|
5
|
+
get "/" do
|
6
|
+
content_type :json
|
7
|
+
{ "mpd_host": settings.mpd_host,
|
8
|
+
"mpd_port": settings.mpd_port,
|
9
|
+
"environment": settings.environment,
|
10
|
+
"version": VERSION
|
11
|
+
}.to_json
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "pifi/controllers/application_controller"
|
2
|
+
|
3
|
+
module PiFi
|
4
|
+
class StaticController < ApplicationController
|
5
|
+
set :root, File.expand_path("../../", __FILE__)
|
6
|
+
set :static, true
|
7
|
+
configure :production do
|
8
|
+
set :static, settings.serve_static
|
9
|
+
end
|
10
|
+
|
11
|
+
get "/" do
|
12
|
+
send_file File.join(settings.public_folder, 'index.html')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,26 +1,26 @@
|
|
1
1
|
{
|
2
2
|
"files": {
|
3
|
-
"main.css": "/static/css/main.
|
4
|
-
"main.js": "/static/js/main.
|
5
|
-
"main.js.map": "/static/js/main.
|
3
|
+
"main.css": "/static/css/main.58eef733.chunk.css",
|
4
|
+
"main.js": "/static/js/main.58e602f6.chunk.js",
|
5
|
+
"main.js.map": "/static/js/main.58e602f6.chunk.js.map",
|
6
6
|
"runtime-main.js": "/static/js/runtime-main.f04a0f25.js",
|
7
7
|
"runtime-main.js.map": "/static/js/runtime-main.f04a0f25.js.map",
|
8
8
|
"static/css/2.5dbdccff.chunk.css": "/static/css/2.5dbdccff.chunk.css",
|
9
|
-
"static/js/2.
|
10
|
-
"static/js/2.
|
9
|
+
"static/js/2.df3b2c7e.chunk.js": "/static/js/2.df3b2c7e.chunk.js",
|
10
|
+
"static/js/2.df3b2c7e.chunk.js.map": "/static/js/2.df3b2c7e.chunk.js.map",
|
11
11
|
"index.html": "/index.html",
|
12
|
-
"precache-manifest.
|
12
|
+
"precache-manifest.3ca9784793937217e35f314e19179939.js": "/precache-manifest.3ca9784793937217e35f314e19179939.js",
|
13
13
|
"service-worker.js": "/service-worker.js",
|
14
14
|
"static/css/2.5dbdccff.chunk.css.map": "/static/css/2.5dbdccff.chunk.css.map",
|
15
|
-
"static/css/main.
|
16
|
-
"static/js/2.
|
15
|
+
"static/css/main.58eef733.chunk.css.map": "/static/css/main.58eef733.chunk.css.map",
|
16
|
+
"static/js/2.df3b2c7e.chunk.js.LICENSE": "/static/js/2.df3b2c7e.chunk.js.LICENSE",
|
17
17
|
"static/media/player.scss": "/static/media/logo.91554ce9.svg"
|
18
18
|
},
|
19
19
|
"entrypoints": [
|
20
20
|
"static/js/runtime-main.f04a0f25.js",
|
21
21
|
"static/css/2.5dbdccff.chunk.css",
|
22
|
-
"static/js/2.
|
23
|
-
"static/css/main.
|
24
|
-
"static/js/main.
|
22
|
+
"static/js/2.df3b2c7e.chunk.js",
|
23
|
+
"static/css/main.58eef733.chunk.css",
|
24
|
+
"static/js/main.58e602f6.chunk.js"
|
25
25
|
]
|
26
26
|
}
|
data/lib/pifi/public/index.html
CHANGED
@@ -1 +1 @@
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,user-scalable=no"/><meta name="description" content="MPD web client to listen to radio"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"><meta name="apple-mobile-web-app-title" content="PiFi Radio"><meta name="application-name" content="PiFi Radio"><meta name="msapplication-TileColor" content="#2b5797"><meta name="theme-color" content="#375a7f"><title>PiFi Radio</title><link rel="preload" href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" as="style"><link href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" rel="stylesheet" title="theme"><link href="/static/css/2.5dbdccff.chunk.css" rel="stylesheet"><link href="/static/css/main.
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,user-scalable=no"/><meta name="description" content="MPD web client to listen to radio"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"><meta name="apple-mobile-web-app-title" content="PiFi Radio"><meta name="application-name" content="PiFi Radio"><meta name="msapplication-TileColor" content="#2b5797"><meta name="theme-color" content="#375a7f"><title>PiFi Radio</title><link rel="preload" href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" as="style"><link href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" rel="stylesheet" title="theme"><link href="/static/css/2.5dbdccff.chunk.css" rel="stylesheet"><link href="/static/css/main.58eef733.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],Object.prototype.hasOwnProperty.call(a,t)&&a[t]&&i.push(a[t][0]),a[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),p()}function p(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==a[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},a={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=this.webpackJsonppifi_frontend=this.webpackJsonppifi_frontend||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;p()}([])</script><script src="/static/js/2.df3b2c7e.chunk.js"></script><script src="/static/js/main.58e602f6.chunk.js"></script></body></html>
|
@@ -2,17 +2,24 @@
|
|
2
2
|
"errorNetwork": "Not connected to PiFi server",
|
3
3
|
"errorUnexpected": "An unexpected error occurred.",
|
4
4
|
"errorNotFound": "The stream was not found.",
|
5
|
-
"errorForbidden": "
|
5
|
+
"errorForbidden": "Forbidden request. Check MPD password and permissions.",
|
6
6
|
"disconnectedMPD": "Not connected to MPD",
|
7
7
|
"close": "Close",
|
8
|
+
"ok": "OK",
|
9
|
+
"cancel": "Cancel",
|
8
10
|
"search": "Search...",
|
9
11
|
"playing": "Playing",
|
10
12
|
"stopped": "Stopped",
|
11
13
|
"tunning": "Tunning...",
|
12
14
|
"noStreams": "No stations available.",
|
13
|
-
"language": "Language",
|
14
|
-
"theme": "Theme",
|
15
15
|
"settings": "Settings",
|
16
|
+
"theme": "Theme",
|
17
|
+
"language": "Language",
|
18
|
+
"about": "About",
|
19
|
+
"mpdHost": "MPD host",
|
20
|
+
"mpdPort": "MPD port",
|
21
|
+
"environment": "Environment",
|
22
|
+
"version": "Version",
|
16
23
|
"playURL": "Play URL",
|
17
24
|
"tryingURL": "Trying to play URL...",
|
18
25
|
"volume": "Volume"
|
@@ -2,18 +2,25 @@
|
|
2
2
|
"errorNetwork": "Sem conexão ao servidor PiFi",
|
3
3
|
"errorUnexpected": "Um erro inesperado ocorreu.",
|
4
4
|
"errorNotFound": "Não foi possível encontrar o stream.",
|
5
|
-
"errorForbidden": "
|
5
|
+
"errorForbidden": "Requisição não permitida. Verifique a senha do MPD e permissões.",
|
6
6
|
"disconnectedMPD": "Sem conexão ao MPD",
|
7
7
|
"close": "Fechar",
|
8
|
+
"ok": "OK",
|
9
|
+
"cancel": "Cancelar",
|
8
10
|
"search": "Buscar...",
|
9
11
|
"playing": "Tocando",
|
10
12
|
"stopped": "Parado",
|
11
13
|
"tunning": "Sintonizando...",
|
12
14
|
"noStreams": "Não há rádios disponíveis.",
|
13
|
-
"language": "Idioma",
|
14
|
-
"theme": "Tema",
|
15
|
-
"settings": "Ajustes",
|
16
15
|
"playURL": "Tocar URL",
|
17
16
|
"tryingURL": "Tentando tocar URL...",
|
17
|
+
"settings": "Ajustes",
|
18
|
+
"theme": "Tema",
|
19
|
+
"language": "Idioma",
|
20
|
+
"about": "Sobre",
|
21
|
+
"mpdHost": "Host do MPD",
|
22
|
+
"mpdPort": "Porta do MPD",
|
23
|
+
"environment": "Ambiente",
|
24
|
+
"version": "Versão",
|
18
25
|
"volume": "Volume"
|
19
26
|
}
|
@@ -1,27 +1,27 @@
|
|
1
1
|
self.__precacheManifest = (self.__precacheManifest || []).concat([
|
2
2
|
{
|
3
|
-
"revision": "
|
3
|
+
"revision": "81ebc5bb774faaae7d17591b69952587",
|
4
4
|
"url": "/index.html"
|
5
5
|
},
|
6
6
|
{
|
7
|
-
"revision": "
|
7
|
+
"revision": "4dec7de3ea193a3a008a",
|
8
8
|
"url": "/static/css/2.5dbdccff.chunk.css"
|
9
9
|
},
|
10
10
|
{
|
11
|
-
"revision": "
|
12
|
-
"url": "/static/css/main.
|
11
|
+
"revision": "a2478e76e291814855e7",
|
12
|
+
"url": "/static/css/main.58eef733.chunk.css"
|
13
13
|
},
|
14
14
|
{
|
15
|
-
"revision": "
|
16
|
-
"url": "/static/js/2.
|
15
|
+
"revision": "4dec7de3ea193a3a008a",
|
16
|
+
"url": "/static/js/2.df3b2c7e.chunk.js"
|
17
17
|
},
|
18
18
|
{
|
19
19
|
"revision": "19a6755ca1e5087f391e80db627b30f5",
|
20
|
-
"url": "/static/js/2.
|
20
|
+
"url": "/static/js/2.df3b2c7e.chunk.js.LICENSE"
|
21
21
|
},
|
22
22
|
{
|
23
|
-
"revision": "
|
24
|
-
"url": "/static/js/main.
|
23
|
+
"revision": "a2478e76e291814855e7",
|
24
|
+
"url": "/static/js/main.58e602f6.chunk.js"
|
25
25
|
},
|
26
26
|
{
|
27
27
|
"revision": "92793784c9eb98d269de",
|
@@ -14,7 +14,7 @@
|
|
14
14
|
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
|
15
15
|
|
16
16
|
importScripts(
|
17
|
-
"/precache-manifest.
|
17
|
+
"/precache-manifest.3ca9784793937217e35f314e19179939.js"
|
18
18
|
);
|
19
19
|
|
20
20
|
self.addEventListener('message', (event) => {
|
@@ -1,2 +1,2 @@
|
|
1
1
|
.navbar{position:-webkit-sticky!important;position:sticky!important;top:0;z-index:5}.player-controls{position:absolute!important;bottom:0;right:0;padding:2rem}.player{height:70vh;min-height:500px;width:400px;min-width:300px;background:url(/static/media/logo.91554ce9.svg) 50% no-repeat;background-size:120px}.loader{z-index:10;display:flex;justify-content:center;align-items:center;height:100vh}.streams{min-width:300px;width:450px}.streams__item{cursor:pointer}.streams__item.active{cursor:default}.streams__header{font-size:1.3rem;margin-top:1em;padding:.5rem 1.25rem}.list-group{margin-bottom:1rem!important}@media (max-width:750px){.list-group{margin-bottom:6rem!important}}.mini-player{max-width:600px;margin:auto;display:flex;align-items:center;justify-content:space-between;height:100%}.drawer{z-index:5!important;height:5rem;cursor:pointer;touch-action:none;-webkit-transition:all .25s ease-out;transition:all .25s ease-out}.drawer--open{height:100%;display:flex;justify-content:space-evenly;flex-direction:column;align-items:center}@media (max-width:750px){.body--drawer{overflow:hidden}}.backdrop{z-index:10;position:fixed;width:100%;height:100%;background-color:#222;opacity:0;visibility:hidden;-webkit-transition:all .2s ease;transition:all .2s ease;cursor:default;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center}.backdrop--visible{opacity:.94;visibility:visible}.body--backdrop{overflow:hidden}.app-main{display:flex;justify-content:space-evenly}.app-main>.player{position:-webkit-sticky;position:sticky;top:4rem}.drawer{visibility:hidden}@media (max-width:750px){.drawer{visibility:visible}}@media (max-width:750px){.app-main>.player{display:none}}body{overflow-y:scroll}button[disabled]{cursor:default}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
2
|
-
/*# sourceMappingURL=main.
|
2
|
+
/*# sourceMappingURL=main.58eef733.chunk.css.map */
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["navBar.scss","playerControls.scss","player.scss","loader.scss","streams.scss","miniPlayer.scss","drawer.scss","../variables.scss","backdrop.scss","App.scss","index.scss"],"names":[],"mappings":"AAAA,QACE,iCAA2B,CAA3B,yBAA2B,CAC3B,KAAM,CACN,SAAU,CCHZ,iBACE,2BAA6B,CAC7B,QAAY,CACZ,OAAW,CACX,YAAa,CCJf,QACE,WAAY,CACZ,gBAAiB,CACjB,WAAY,CACZ,eAAgB,CAChB,6DACA,CAAA,qBAAsB,CCNxB,QACE,UAAW,CACX,YAAa,CACb,sBAAuB,CACvB,kBAAmB,CACnB,YAAa,CCHf,SACE,eAAgB,CAChB,WAAY,CACb,eAGC,cAAe,CADjB,sBAII,cAAe,CAChB,iBAID,gBAAiB,CACjB,cAAe,CACf,qBAAuB,CACxB,YAGC,4BAA8B,CAE9B,yBAHF,YAII,4BAA+C,CAElD,CC3BD,aACE,eAAgB,CAChB,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,6BAA8B,CAC9B,WAAY,CCJd,QACE,mBAAqB,CACrB,WCHkB,CDIlB,cAAe,CACf,iBAAkB,CAClB,oCAAA,CAAA,4BAA8B,CAE9B,cACE,WAAY,CACZ,YAAa,CACb,4BAA6B,CAC7B,qBAAsB,CACtB,kBAAmB,CACpB,yBAKH,cAEI,eAAgB,CAEnB,CExBD,UACE,UAAW,CACX,cAAe,CACf,UAAW,CACX,WAAY,CACZ,qBAAyB,CACzB,SAAU,CACV,iBAAkB,CAClB,+BAAyB,CAAzB,uBAAyB,CACzB,cAAe,CACf,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,kBAAmB,CACnB,iBAAkB,CAElB,mBACE,WAAa,CACb,kBAAmB,CACpB,gBAID,eAAgB,CCrBlB,UACE,YAAa,CACb,4BAA6B,CAC9B,kBAGC,uBAAgB,CAAhB,eAAgB,CAChB,QAAS,CACV,QAGC,iBAAkB,CAElB,yBAHF,QAII,kBAAmB,CAEtB,CAGC,yBADF,kBAEI,YAAa,CAEhB,CCxBD,KACE,iBAAkB,CACnB,iBAGC,cAAe,CAChB,UAGC,kBAAmB,CACnB,eAAgB,CAChB,sBAAuB","file":"main.
|
1
|
+
{"version":3,"sources":["navBar.scss","playerControls.scss","player.scss","loader.scss","streams.scss","miniPlayer.scss","drawer.scss","../variables.scss","backdrop.scss","App.scss","index.scss"],"names":[],"mappings":"AAAA,QACE,iCAA2B,CAA3B,yBAA2B,CAC3B,KAAM,CACN,SAAU,CCHZ,iBACE,2BAA6B,CAC7B,QAAY,CACZ,OAAW,CACX,YAAa,CCJf,QACE,WAAY,CACZ,gBAAiB,CACjB,WAAY,CACZ,eAAgB,CAChB,6DACA,CAAA,qBAAsB,CCNxB,QACE,UAAW,CACX,YAAa,CACb,sBAAuB,CACvB,kBAAmB,CACnB,YAAa,CCHf,SACE,eAAgB,CAChB,WAAY,CACb,eAGC,cAAe,CADjB,sBAII,cAAe,CAChB,iBAID,gBAAiB,CACjB,cAAe,CACf,qBAAuB,CACxB,YAGC,4BAA8B,CAE9B,yBAHF,YAII,4BAA+C,CAElD,CC3BD,aACE,eAAgB,CAChB,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,6BAA8B,CAC9B,WAAY,CCJd,QACE,mBAAqB,CACrB,WCHkB,CDIlB,cAAe,CACf,iBAAkB,CAClB,oCAAA,CAAA,4BAA8B,CAE9B,cACE,WAAY,CACZ,YAAa,CACb,4BAA6B,CAC7B,qBAAsB,CACtB,kBAAmB,CACpB,yBAKH,cAEI,eAAgB,CAEnB,CExBD,UACE,UAAW,CACX,cAAe,CACf,UAAW,CACX,WAAY,CACZ,qBAAyB,CACzB,SAAU,CACV,iBAAkB,CAClB,+BAAyB,CAAzB,uBAAyB,CACzB,cAAe,CACf,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,kBAAmB,CACnB,iBAAkB,CAElB,mBACE,WAAa,CACb,kBAAmB,CACpB,gBAID,eAAgB,CCrBlB,UACE,YAAa,CACb,4BAA6B,CAC9B,kBAGC,uBAAgB,CAAhB,eAAgB,CAChB,QAAS,CACV,QAGC,iBAAkB,CAElB,yBAHF,QAII,kBAAmB,CAEtB,CAGC,yBADF,kBAEI,YAAa,CAEhB,CCxBD,KACE,iBAAkB,CACnB,iBAGC,cAAe,CAChB,UAGC,kBAAmB,CACnB,eAAgB,CAChB,sBAAuB","file":"main.58eef733.chunk.css","sourcesContent":[".navbar {\n position: sticky !important;\n top: 0;\n z-index: 5;\n}\n",".player-controls {\n position: absolute !important;\n bottom: 0rem;\n right: 0rem;\n padding: 2rem;\n}\n",".player {\n height: 70vh;\n min-height: 500px;\n width: 400px;\n min-width: 300px;\n background: url('../logo.svg') center no-repeat;\n background-size: 120px;\n}\n",".loader {\n z-index: 10;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100vh;\n}\n","@import '../variables.scss';\n\n.streams {\n min-width: 300px;\n width: 450px;\n}\n\n.streams__item {\n cursor: pointer;\n\n &.active {\n cursor: default;\n }\n}\n\n.streams__header {\n font-size: 1.3rem;\n margin-top: 1em;\n padding: 0.5rem 1.25rem;\n}\n\n.list-group {\n margin-bottom: 1rem !important;\n\n @media (max-width: $mobile-width) {\n margin-bottom: 1rem + $drawer-height !important; /* drawer */\n }\n}\n",".mini-player {\n max-width: 600px;\n margin: auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 100%;\n}\n","@import '../variables.scss';\n\n.drawer {\n z-index: 5 !important;\n height: $drawer-height;\n cursor: pointer;\n touch-action: none; // don't scroll on touch\n transition: all 0.25s ease-out;\n\n &--open {\n height: 100%;\n display: flex;\n justify-content: space-evenly;\n flex-direction: column;\n align-items: center;\n }\n}\n\n// The media query is for the edge case of an open drawer and the\n// window resized past the breakpoint. This brings the scrollbar back.\n.body--drawer {\n @media (max-width: $mobile-width) {\n overflow: hidden;\n }\n}\n","$mobile-width: 750px;\n$drawer-height: 5rem;\n",".backdrop {\n z-index: 10;\n position: fixed;\n width: 100%;\n height: 100%;\n background-color: #222222;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n cursor: default;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n\n &--visible {\n opacity: 0.94;\n visibility: visible;\n }\n}\n\n.body--backdrop {\n overflow: hidden;\n}\n","@import './variables.scss';\n\n.app-main {\n display: flex;\n justify-content: space-evenly;\n}\n\n.app-main > .player {\n position: sticky;\n top: 4rem; // we set this dynamically\n}\n\n.drawer {\n visibility: hidden;\n\n @media (max-width: $mobile-width) {\n visibility: visible;\n }\n}\n\n.app-main > .player {\n @media (max-width: $mobile-width) {\n display: none;\n }\n}\n","body {\n overflow-y: scroll; // so elements don't move if page fits view\n}\n\nbutton[disabled] {\n cursor: default;\n}\n\n.ellipsis {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n"]}
|