Mobile friendly service tabs
This commit is contained in:
@ -5949,82 +5949,75 @@ main header {
|
|||||||
white-space: wrap;
|
white-space: wrap;
|
||||||
max-width: 200px; }
|
max-width: 200px; }
|
||||||
|
|
||||||
.services .menu {
|
.services .menu::after {
|
||||||
margin: 0 -5px;
|
content: '';
|
||||||
|
clear: both;
|
||||||
|
display: block; }
|
||||||
|
|
||||||
|
.services .menu__inner {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap; }
|
flex-wrap: wrap;
|
||||||
.services .menu::after {
|
margin: 0 -5px; }
|
||||||
content: '';
|
|
||||||
clear: both;
|
.services .menu .menu-item {
|
||||||
display: block; }
|
-webkit-transition: none !important;
|
||||||
.services .menu .menu-item-wrapper {
|
-moz-transition: none !important;
|
||||||
width: 25%;
|
-o-transition: none !important;
|
||||||
min-width: 140px;
|
transition: none !important;
|
||||||
max-width: 200px;
|
width: 20%;
|
||||||
padding: 5px 5px 10px 5px;
|
min-width: 120px;
|
||||||
|
max-width: 200px;
|
||||||
|
padding: 0 5px;
|
||||||
|
display: block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 0; }
|
||||||
|
.services .menu .menu-item__inner {
|
||||||
|
position: relative;
|
||||||
|
padding: 30px 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-radius: 3px;
|
||||||
|
background: #121212;
|
||||||
display: block;
|
display: block;
|
||||||
|
text-align: center;
|
||||||
box-sizing: border-box; }
|
box-sizing: border-box; }
|
||||||
.services .menu .menu-item-wrapper .menu-item {
|
.services .menu .menu-item__thumbnail {
|
||||||
-webkit-transition: all 0.1 ease-in-out;
|
margin-bottom: 15px;
|
||||||
-moz-transition: all 0.1 ease-in-out;
|
display: inline-block; }
|
||||||
-o-transition: all 0.1 ease-in-out;
|
.services .menu .menu-item__icon {
|
||||||
transition: all 0.1 ease-in-out;
|
font-size: 40px;
|
||||||
position: relative;
|
height: 40px;
|
||||||
padding: 30px 10px;
|
margin-top: 10px;
|
||||||
border-radius: 3px;
|
margin-bottom: 15px; }
|
||||||
background: #121212;
|
.services .menu .menu-item__icon.icon--svg {
|
||||||
display: block;
|
opacity: 0.8; }
|
||||||
text-align: center;
|
.light-theme .services .menu .menu-item__icon.icon--svg {
|
||||||
box-sizing: border-box;
|
-webkit-filter: invert(1);
|
||||||
border: 0; }
|
filter: invert(1); }
|
||||||
.services .menu .menu-item-wrapper .menu-item:hover {
|
.services .menu .menu-item__title {
|
||||||
background: #222222; }
|
margin: 0;
|
||||||
.services .menu .menu-item-wrapper .menu-item:active {
|
padding: 0;
|
||||||
-moz-transform: scale(0.98);
|
font-weight: bold;
|
||||||
-webkit-transform: scale(0.98);
|
font-size: 16px; }
|
||||||
transform: scale(0.98); }
|
.services .menu .menu-item:hover .menu-item__inner {
|
||||||
.services .menu .menu-item-wrapper .menu-item.active {
|
background: #222222; }
|
||||||
background: #222222;
|
.services .menu .menu-item:active {
|
||||||
border-bottom-left-radius: 0;
|
-moz-transform: scale(0.98);
|
||||||
border-bottom-right-radius: 0; }
|
-webkit-transform: scale(0.98);
|
||||||
.services .menu .menu-item-wrapper .menu-item.active:after {
|
transform: scale(0.98); }
|
||||||
height: 14px;
|
.services .menu .menu-item--active .menu-item__inner {
|
||||||
bottom: -14px; }
|
background: #222222;
|
||||||
.services .menu .menu-item-wrapper .menu-item:after {
|
border-bottom-left-radius: 0;
|
||||||
content: '';
|
border-bottom-right-radius: 0;
|
||||||
display: block;
|
padding-bottom: 40px;
|
||||||
width: 100%;
|
margin-bottom: 0; }
|
||||||
height: 0;
|
.light-theme .services .menu .menu-item .menu-item__inner {
|
||||||
position: absolute;
|
background: #f4f2f0; }
|
||||||
bottom: 0;
|
.light-theme .services .menu .menu-item .menu-item__inner:hover {
|
||||||
left: 0;
|
background: #ebe8e4; }
|
||||||
background: #222222; }
|
.light-theme .services .menu .menu-item .menu-item__inner:after {
|
||||||
.services .menu .menu-item-wrapper .menu-item .thumbnail {
|
background: #ebe8e4; }
|
||||||
margin-bottom: 15px;
|
.light-theme .services .menu .menu-item--active .menu-item__inner {
|
||||||
display: inline-block; }
|
background: #ebe8e4; }
|
||||||
.services .menu .menu-item-wrapper .menu-item .icon {
|
|
||||||
font-size: 40px;
|
|
||||||
height: 40px;
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 15px; }
|
|
||||||
.services .menu .menu-item-wrapper .menu-item .icon--svg {
|
|
||||||
opacity: 0.8; }
|
|
||||||
.light-theme .services .menu .menu-item-wrapper .menu-item .icon--svg {
|
|
||||||
-webkit-filter: invert(1);
|
|
||||||
filter: invert(1); }
|
|
||||||
.services .menu .menu-item-wrapper .menu-item .title {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 16px; }
|
|
||||||
.light-theme .services .menu .menu-item-wrapper .menu-item {
|
|
||||||
background: #f4f2f0; }
|
|
||||||
.light-theme .services .menu .menu-item-wrapper .menu-item:hover {
|
|
||||||
background: #ebe8e4; }
|
|
||||||
.light-theme .services .menu .menu-item-wrapper .menu-item.active {
|
|
||||||
background: #ebe8e4; }
|
|
||||||
.light-theme .services .menu .menu-item-wrapper .menu-item:after {
|
|
||||||
background: #ebe8e4; }
|
|
||||||
|
|
||||||
.services .service {
|
.services .service {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
@ -6036,18 +6029,24 @@ main header {
|
|||||||
background: #ebe8e4; }
|
background: #ebe8e4; }
|
||||||
|
|
||||||
@media (max-width: 800px) {
|
@media (max-width: 800px) {
|
||||||
.services .menu .menu-item-wrapper {
|
.services .menu {
|
||||||
width: 50%;
|
overflow-x: auto;
|
||||||
max-width: none;
|
margin: 0 -20px; }
|
||||||
min-width: none;
|
.services .menu::-webkit-scrollbar {
|
||||||
padding-bottom: 5px; }
|
width: 0px;
|
||||||
.services .menu .menu-item-wrapper .menu-item {
|
height: 0px; }
|
||||||
padding-top: 10px;
|
.services .menu__inner {
|
||||||
padding-bottom: 10px; }
|
width: 700px;
|
||||||
.services .menu .menu-item-wrapper .menu-item:after {
|
padding: 0 20px; }
|
||||||
display: none; }
|
.services .menu .menu-item {
|
||||||
|
width: 140px; }
|
||||||
|
.services .menu .menu-item__inner {
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: 10px; }
|
||||||
|
.services .menu .menu-item--active .menu-item__inner {
|
||||||
|
padding-bottom: 20px; }
|
||||||
.services .service {
|
.services .service {
|
||||||
margin-top: 5px; } }
|
margin-top: 0; } }
|
||||||
|
|
||||||
.popularity-bars {
|
.popularity-bars {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|||||||
@ -74825,21 +74825,21 @@ var Services = function (_React$Component) {
|
|||||||
value: function renderMenu() {
|
value: function renderMenu() {
|
||||||
|
|
||||||
if (this.props.spotify.me && this.props.core.users[this.props.spotify.me.uri]) {
|
if (this.props.spotify.me && this.props.core.users[this.props.spotify.me.uri]) {
|
||||||
var spotify_icon = _react2.default.createElement(_Thumbnail2.default, { circle: true, size: 'small', images: this.props.core.users[this.props.spotify.me.uri].images });
|
var spotify_icon = _react2.default.createElement(_Thumbnail2.default, { className: 'menu-item__thumbnail', circle: true, size: 'small', images: this.props.core.users[this.props.spotify.me.uri].images });
|
||||||
} else {
|
} else {
|
||||||
var spotify_icon = _react2.default.createElement(_Thumbnail2.default, { circle: true, size: 'small' });
|
var spotify_icon = _react2.default.createElement(_Thumbnail2.default, { className: 'menu-item__thumbnail', circle: true, size: 'small' });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.lastfm.me && this.props.core.users[this.props.lastfm.me.uri]) {
|
if (this.props.lastfm.me && this.props.core.users[this.props.lastfm.me.uri]) {
|
||||||
var lastfm_icon = _react2.default.createElement(_Thumbnail2.default, { circle: true, size: 'small', images: this.props.core.users[this.props.lastfm.me.uri].images });
|
var lastfm_icon = _react2.default.createElement(_Thumbnail2.default, { className: 'menu-item__thumbnail', circle: true, size: 'small', images: this.props.core.users[this.props.lastfm.me.uri].images });
|
||||||
} else {
|
} else {
|
||||||
var lastfm_icon = _react2.default.createElement(_Icon2.default, { type: 'fontawesome', name: 'lastfm' });
|
var lastfm_icon = _react2.default.createElement(_Icon2.default, { type: 'fontawesome', name: 'lastfm', className: 'menu-item__icon' });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.genius.me && this.props.core.users[this.props.genius.me.uri]) {
|
if (this.props.genius.me && this.props.core.users[this.props.genius.me.uri]) {
|
||||||
var genius_icon = _react2.default.createElement(_Thumbnail2.default, { circle: true, size: 'small', images: this.props.core.users[this.props.genius.me.uri].images });
|
var genius_icon = _react2.default.createElement(_Thumbnail2.default, { className: 'menu-item__thumbnail', circle: true, size: 'small', images: this.props.core.users[this.props.genius.me.uri].images });
|
||||||
} else {
|
} else {
|
||||||
var genius_icon = _react2.default.createElement(_Icon2.default, { name: 'genius', type: 'svg' });
|
var genius_icon = _react2.default.createElement(_Icon2.default, { name: 'genius', type: 'svg', className: 'menu-item__icon' });
|
||||||
}
|
}
|
||||||
|
|
||||||
return _react2.default.createElement(
|
return _react2.default.createElement(
|
||||||
@ -74847,116 +74847,120 @@ var Services = function (_React$Component) {
|
|||||||
{ className: 'menu' },
|
{ className: 'menu' },
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'menu-item-wrapper' },
|
{ className: 'menu__inner' },
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
_reactRouter.Link,
|
_reactRouter.Link,
|
||||||
{ className: "menu-item" + (this.props.active == 'spotify' ? ' active' : ''), to: this.props.active == 'spotify' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/spotify' },
|
{ className: "menu-item" + (this.props.active == 'spotify' ? ' menu-item--active' : ''), to: this.props.active == 'spotify' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/spotify' },
|
||||||
spotify_icon,
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'title' },
|
{ className: 'menu-item__inner' },
|
||||||
'Spotify'
|
spotify_icon,
|
||||||
),
|
_react2.default.createElement(
|
||||||
this.props.spotify.authorization ? _react2.default.createElement(
|
'div',
|
||||||
'span',
|
{ className: 'menu-item__title' },
|
||||||
{ className: 'status green-text' },
|
'Spotify'
|
||||||
'Authorized'
|
),
|
||||||
) : _react2.default.createElement(
|
this.props.spotify.authorization ? _react2.default.createElement(
|
||||||
'span',
|
'span',
|
||||||
{ className: 'status grey-text' },
|
{ className: 'status green-text' },
|
||||||
'Read-only'
|
'Authorized'
|
||||||
|
) : _react2.default.createElement(
|
||||||
|
'span',
|
||||||
|
{ className: 'status grey-text' },
|
||||||
|
'Read-only'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
),
|
||||||
),
|
|
||||||
_react2.default.createElement(
|
|
||||||
'div',
|
|
||||||
{ className: 'menu-item-wrapper' },
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
_reactRouter.Link,
|
_reactRouter.Link,
|
||||||
{ className: "menu-item" + (this.props.active == 'lastfm' ? ' active' : ''), to: this.props.active == 'lastfm' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/lastfm' },
|
{ className: "menu-item" + (this.props.active == 'lastfm' ? ' menu-item--active' : ''), to: this.props.active == 'lastfm' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/lastfm' },
|
||||||
lastfm_icon,
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'title' },
|
{ className: 'menu-item__inner' },
|
||||||
'LastFM'
|
lastfm_icon,
|
||||||
),
|
_react2.default.createElement(
|
||||||
this.props.lastfm.session ? _react2.default.createElement(
|
'div',
|
||||||
'span',
|
{ className: 'menu-item__title' },
|
||||||
{ className: 'status green-text' },
|
'LastFM'
|
||||||
'Authorized'
|
),
|
||||||
) : _react2.default.createElement(
|
this.props.lastfm.session ? _react2.default.createElement(
|
||||||
'span',
|
'span',
|
||||||
{ className: 'status grey-text' },
|
{ className: 'status green-text' },
|
||||||
'Read-only'
|
'Authorized'
|
||||||
|
) : _react2.default.createElement(
|
||||||
|
'span',
|
||||||
|
{ className: 'status grey-text' },
|
||||||
|
'Read-only'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
),
|
||||||
),
|
|
||||||
_react2.default.createElement(
|
|
||||||
'div',
|
|
||||||
{ className: 'menu-item-wrapper' },
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
_reactRouter.Link,
|
_reactRouter.Link,
|
||||||
{ className: "menu-item" + (this.props.active == 'genius' ? ' active' : ''), to: this.props.active == 'genius' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/genius' },
|
{ className: "menu-item" + (this.props.active == 'genius' ? ' menu-item--active' : ''), to: this.props.active == 'genius' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/genius' },
|
||||||
genius_icon,
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'title' },
|
{ className: 'menu-item__inner' },
|
||||||
'Genius'
|
genius_icon,
|
||||||
),
|
_react2.default.createElement(
|
||||||
this.props.genius.authorization ? _react2.default.createElement(
|
'div',
|
||||||
'span',
|
{ className: 'menu-item__title' },
|
||||||
{ className: 'status green-text' },
|
'Genius'
|
||||||
'Authorized'
|
),
|
||||||
) : _react2.default.createElement(
|
this.props.genius.authorization ? _react2.default.createElement(
|
||||||
'span',
|
'span',
|
||||||
{ className: 'status grey-text' },
|
{ className: 'status green-text' },
|
||||||
'Unauthorized'
|
'Authorized'
|
||||||
|
) : _react2.default.createElement(
|
||||||
|
'span',
|
||||||
|
{ className: 'status grey-text' },
|
||||||
|
'Unauthorized'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
),
|
||||||
),
|
|
||||||
_react2.default.createElement(
|
|
||||||
'div',
|
|
||||||
{ className: 'menu-item-wrapper' },
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
_reactRouter.Link,
|
_reactRouter.Link,
|
||||||
{ className: "menu-item" + (this.props.active == 'snapcast' ? ' active' : ''), to: this.props.active == 'snapcast' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/snapcast' },
|
{ className: "menu-item" + (this.props.active == 'snapcast' ? ' menu-item--active' : ''), to: this.props.active == 'snapcast' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/snapcast' },
|
||||||
_react2.default.createElement(_Icon2.default, { name: 'devices' }),
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'title' },
|
{ className: 'menu-item__inner' },
|
||||||
'Snapcast'
|
_react2.default.createElement(_Icon2.default, { className: 'menu-item__icon', name: 'devices' }),
|
||||||
),
|
_react2.default.createElement(
|
||||||
this.props.pusher.config.snapcast_enabled ? _react2.default.createElement(
|
'div',
|
||||||
'span',
|
{ className: 'title' },
|
||||||
{ className: 'status green-text' },
|
'Snapcast'
|
||||||
'Enabled'
|
),
|
||||||
) : _react2.default.createElement(
|
this.props.pusher.config.snapcast_enabled ? _react2.default.createElement(
|
||||||
'span',
|
'span',
|
||||||
{ className: 'status grey-text' },
|
{ className: 'status green-text' },
|
||||||
'Disabled'
|
'Enabled'
|
||||||
|
) : _react2.default.createElement(
|
||||||
|
'span',
|
||||||
|
{ className: 'status grey-text' },
|
||||||
|
'Disabled'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
),
|
||||||
),
|
|
||||||
_react2.default.createElement(
|
|
||||||
'div',
|
|
||||||
{ className: 'menu-item-wrapper' },
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
_reactRouter.Link,
|
_reactRouter.Link,
|
||||||
{ className: "menu-item" + (this.props.active == 'icecast' ? ' active' : ''), to: this.props.active == 'icecast' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/icecast' },
|
{ className: "menu-item" + (this.props.active == 'icecast' ? ' menu-item--active' : ''), to: this.props.active == 'icecast' ? global.baseURL + 'settings' : global.baseURL + 'settings/service/icecast' },
|
||||||
_react2.default.createElement(_Icon2.default, { name: 'wifi_tethering' }),
|
|
||||||
_react2.default.createElement(
|
_react2.default.createElement(
|
||||||
'div',
|
'div',
|
||||||
{ className: 'title' },
|
{ className: 'menu-item__inner' },
|
||||||
'Icecast'
|
_react2.default.createElement(_Icon2.default, { className: 'menu-item__icon', name: 'wifi_tethering' }),
|
||||||
),
|
_react2.default.createElement(
|
||||||
this.props.core.http_streaming_enabled ? _react2.default.createElement(
|
'div',
|
||||||
'span',
|
{ className: 'menu-item__title' },
|
||||||
{ className: 'status green-text' },
|
'Icecast'
|
||||||
'Enabled'
|
),
|
||||||
) : _react2.default.createElement(
|
this.props.core.http_streaming_enabled ? _react2.default.createElement(
|
||||||
'span',
|
'span',
|
||||||
{ className: 'status grey-text' },
|
{ className: 'status green-text' },
|
||||||
'Disabled'
|
'Enabled'
|
||||||
|
) : _react2.default.createElement(
|
||||||
|
'span',
|
||||||
|
{ className: 'status grey-text' },
|
||||||
|
'Disabled'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -98,7 +98,7 @@
|
|||||||
|
|
||||||
// Release details
|
// Release details
|
||||||
// These are automatically injected to built HTML
|
// These are automatically injected to built HTML
|
||||||
var build = "1537487995";
|
var build = "1537495549";
|
||||||
var version = "3.26.1";
|
var version = "3.26.1";
|
||||||
|
|
||||||
// Construct the script tag
|
// Construct the script tag
|
||||||
|
|||||||
@ -287,68 +287,70 @@ class Services extends React.Component{
|
|||||||
renderMenu(){
|
renderMenu(){
|
||||||
|
|
||||||
if (this.props.spotify.me && this.props.core.users[this.props.spotify.me.uri]){
|
if (this.props.spotify.me && this.props.core.users[this.props.spotify.me.uri]){
|
||||||
var spotify_icon = <Thumbnail circle={true} size="small" images={this.props.core.users[this.props.spotify.me.uri].images} />
|
var spotify_icon = <Thumbnail className="menu-item__thumbnail" circle={true} size="small" images={this.props.core.users[this.props.spotify.me.uri].images} />
|
||||||
} else {
|
} else {
|
||||||
var spotify_icon = <Thumbnail circle={true} size="small" />
|
var spotify_icon = <Thumbnail className="menu-item__thumbnail" circle={true} size="small" />
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.lastfm.me && this.props.core.users[this.props.lastfm.me.uri]){
|
if (this.props.lastfm.me && this.props.core.users[this.props.lastfm.me.uri]){
|
||||||
var lastfm_icon = <Thumbnail circle={true} size="small" images={this.props.core.users[this.props.lastfm.me.uri].images} />
|
var lastfm_icon = <Thumbnail className="menu-item__thumbnail" circle={true} size="small" images={this.props.core.users[this.props.lastfm.me.uri].images} />
|
||||||
} else {
|
} else {
|
||||||
var lastfm_icon = <Icon type="fontawesome" name="lastfm" />
|
var lastfm_icon = <Icon type="fontawesome" name="lastfm" className="menu-item__icon" />
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.genius.me && this.props.core.users[this.props.genius.me.uri]){
|
if (this.props.genius.me && this.props.core.users[this.props.genius.me.uri]){
|
||||||
var genius_icon = <Thumbnail circle={true} size="small" images={this.props.core.users[this.props.genius.me.uri].images} />
|
var genius_icon = <Thumbnail className="menu-item__thumbnail" circle={true} size="small" images={this.props.core.users[this.props.genius.me.uri].images} />
|
||||||
} else {
|
} else {
|
||||||
var genius_icon = <Icon name="genius" type="svg" />
|
var genius_icon = <Icon name="genius" type="svg" className="menu-item__icon" />
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="menu">
|
<div className="menu">
|
||||||
<div className="menu-item-wrapper">
|
<div className="menu__inner">
|
||||||
<Link className={"menu-item"+(this.props.active == 'spotify' ? ' active' : '')} to={this.props.active == 'spotify' ? global.baseURL+'settings' : global.baseURL+'settings/service/spotify'}>
|
<Link className={"menu-item"+(this.props.active == 'spotify' ? ' menu-item--active' : '')} to={this.props.active == 'spotify' ? global.baseURL+'settings' : global.baseURL+'settings/service/spotify'}>
|
||||||
{spotify_icon}
|
<div className="menu-item__inner">
|
||||||
<div className="title">
|
{spotify_icon}
|
||||||
Spotify
|
<div className="menu-item__title">
|
||||||
|
Spotify
|
||||||
|
</div>
|
||||||
|
{this.props.spotify.authorization ? <span className="status green-text">Authorized</span> : <span className="status grey-text">Read-only</span>}
|
||||||
</div>
|
</div>
|
||||||
{this.props.spotify.authorization ? <span className="status green-text">Authorized</span> : <span className="status grey-text">Read-only</span>}
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
<Link className={"menu-item"+(this.props.active == 'lastfm' ? ' menu-item--active' : '')} to={this.props.active == 'lastfm' ? global.baseURL+'settings' : global.baseURL+'settings/service/lastfm'}>
|
||||||
<div className="menu-item-wrapper">
|
<div className="menu-item__inner">
|
||||||
<Link className={"menu-item"+(this.props.active == 'lastfm' ? ' active' : '')} to={this.props.active == 'lastfm' ? global.baseURL+'settings' : global.baseURL+'settings/service/lastfm'}>
|
{lastfm_icon}
|
||||||
{lastfm_icon}
|
<div className="menu-item__title">
|
||||||
<div className="title">
|
LastFM
|
||||||
LastFM
|
</div>
|
||||||
|
{this.props.lastfm.session ? <span className="status green-text">Authorized</span> : <span className="status grey-text">Read-only</span>}
|
||||||
</div>
|
</div>
|
||||||
{this.props.lastfm.session ? <span className="status green-text">Authorized</span> : <span className="status grey-text">Read-only</span>}
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
<Link className={"menu-item"+(this.props.active == 'genius' ? ' menu-item--active' : '')} to={this.props.active == 'genius' ? global.baseURL+'settings' : global.baseURL+'settings/service/genius'}>
|
||||||
<div className="menu-item-wrapper">
|
<div className="menu-item__inner">
|
||||||
<Link className={"menu-item"+(this.props.active == 'genius' ? ' active' : '')} to={this.props.active == 'genius' ? global.baseURL+'settings' : global.baseURL+'settings/service/genius'}>
|
{genius_icon}
|
||||||
{genius_icon}
|
<div className="menu-item__title">
|
||||||
<div className="title">
|
Genius
|
||||||
Genius
|
</div>
|
||||||
|
{this.props.genius.authorization ? <span className="status green-text">Authorized</span> : <span className="status grey-text">Unauthorized</span>}
|
||||||
</div>
|
</div>
|
||||||
{this.props.genius.authorization ? <span className="status green-text">Authorized</span> : <span className="status grey-text">Unauthorized</span>}
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
<Link className={"menu-item"+(this.props.active == 'snapcast' ? ' menu-item--active' : '')} to={this.props.active == 'snapcast' ? global.baseURL+'settings' : global.baseURL+'settings/service/snapcast'}>
|
||||||
<div className="menu-item-wrapper">
|
<div className="menu-item__inner">
|
||||||
<Link className={"menu-item"+(this.props.active == 'snapcast' ? ' active' : '')} to={this.props.active == 'snapcast' ? global.baseURL+'settings' : global.baseURL+'settings/service/snapcast'}>
|
<Icon className="menu-item__icon" name="devices" />
|
||||||
<Icon name="devices" />
|
<div className="title">
|
||||||
<div className="title">
|
Snapcast
|
||||||
Snapcast
|
</div>
|
||||||
|
{this.props.pusher.config.snapcast_enabled ? <span className="status green-text">Enabled</span> : <span className="status grey-text">Disabled</span>}
|
||||||
</div>
|
</div>
|
||||||
{this.props.pusher.config.snapcast_enabled ? <span className="status green-text">Enabled</span> : <span className="status grey-text">Disabled</span>}
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
<Link className={"menu-item"+(this.props.active == 'icecast' ? ' menu-item--active' : '')} to={this.props.active == 'icecast' ? global.baseURL+'settings' : global.baseURL+'settings/service/icecast'}>
|
||||||
<div className="menu-item-wrapper">
|
<div className="menu-item__inner">
|
||||||
<Link className={"menu-item"+(this.props.active == 'icecast' ? ' active' : '')} to={this.props.active == 'icecast' ? global.baseURL+'settings' : global.baseURL+'settings/service/icecast'}>
|
<Icon className="menu-item__icon" name="wifi_tethering" />
|
||||||
<Icon name="wifi_tethering" />
|
<div className="menu-item__title">
|
||||||
<div className="title">
|
Icecast
|
||||||
Icecast
|
</div>
|
||||||
|
{this.props.core.http_streaming_enabled ? <span className="status green-text">Enabled</span> : <span className="status grey-text">Disabled</span>}
|
||||||
</div>
|
</div>
|
||||||
{this.props.core.http_streaming_enabled ? <span className="status green-text">Enabled</span> : <span className="status grey-text">Disabled</span>}
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -3,100 +3,98 @@
|
|||||||
|
|
||||||
.menu {
|
.menu {
|
||||||
@include clearfix();
|
@include clearfix();
|
||||||
margin: 0 -5px;
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
|
|
||||||
.menu-item-wrapper {
|
&__inner {
|
||||||
width: 25%;
|
display: flex;
|
||||||
min-width: 140px;
|
flex-wrap: wrap;
|
||||||
|
margin: 0 -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-item {
|
||||||
|
@include noanimate();
|
||||||
|
width: 20%;
|
||||||
|
min-width: 120px;
|
||||||
max-width: 200px;
|
max-width: 200px;
|
||||||
padding: 5px 5px 10px 5px;
|
padding: 0 5px;
|
||||||
display: block;
|
display: block;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
border: 0;
|
||||||
|
|
||||||
.menu-item {
|
&__inner {
|
||||||
@include animate(0.1);
|
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 30px 10px;
|
padding: 30px 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
background: $darkest_grey;
|
background: $darkest_grey;
|
||||||
display: block;
|
display: block;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
border: 0;
|
}
|
||||||
|
|
||||||
&:hover {
|
&__thumbnail {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__icon {
|
||||||
|
font-size: 40px;
|
||||||
|
height: 40px;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
&.icon--svg {
|
||||||
|
opacity: 0.8;
|
||||||
|
|
||||||
|
.light-theme & {
|
||||||
|
@include invert();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__title {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
.menu-item__inner {
|
||||||
background: lighten($dark_grey, 4%);
|
background: lighten($dark_grey, 4%);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
-moz-transform: scale(0.98);
|
-moz-transform: scale(0.98);
|
||||||
-webkit-transform: scale(0.98);
|
-webkit-transform: scale(0.98);
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&--active {
|
||||||
|
.menu-item__inner {
|
||||||
background: lighten($dark_grey, 4%);
|
background: lighten($dark_grey, 4%);
|
||||||
border-bottom-left-radius: 0;
|
border-bottom-left-radius: 0;
|
||||||
border-bottom-right-radius: 0;
|
border-bottom-right-radius: 0;
|
||||||
|
padding-bottom: 40px;
|
||||||
&:after {
|
margin-bottom: 0;
|
||||||
height: 14px;
|
|
||||||
bottom: -14px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:after {
|
.light-theme & {
|
||||||
content: '';
|
.menu-item__inner {
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
height: 0;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
background: lighten($dark_grey, 4%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.thumbnail {
|
|
||||||
margin-bottom: 15px;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
font-size: 40px;
|
|
||||||
height: 40px;
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
|
|
||||||
&--svg {
|
|
||||||
opacity: 0.8;
|
|
||||||
|
|
||||||
.light-theme & {
|
|
||||||
@include invert();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.light-theme & {
|
|
||||||
background: $faint_grey;
|
background: $faint_grey;
|
||||||
|
|
||||||
&:hover{
|
&:hover{
|
||||||
background: darken($faint_grey, 4%);
|
background: darken($faint_grey, 4%);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&:after {
|
||||||
background: darken($faint_grey, 4%);
|
background: darken($faint_grey, 4%);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:after {
|
&--active {
|
||||||
|
.menu-item__inner {
|
||||||
background: darken($faint_grey, 4%);
|
background: darken($faint_grey, 4%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,25 +118,37 @@
|
|||||||
|
|
||||||
@include responsive($bp_medium){
|
@include responsive($bp_medium){
|
||||||
.menu {
|
.menu {
|
||||||
.menu-item-wrapper {
|
overflow-x: auto;
|
||||||
width: 50%;
|
margin: 0 -20px;
|
||||||
max-width: none;
|
|
||||||
min-width: none;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
|
|
||||||
.menu-item {
|
&::-webkit-scrollbar{
|
||||||
|
width: 0px;
|
||||||
|
height: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__inner {
|
||||||
|
width: 700px;
|
||||||
|
padding: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-item {
|
||||||
|
width: 140px;
|
||||||
|
|
||||||
|
&__inner {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
&:after {
|
&--active {
|
||||||
display: none;
|
.menu-item__inner {
|
||||||
|
padding-bottom: 20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.service {
|
.service {
|
||||||
margin-top: 5px;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user