Improve app style

This commit is contained in:
Grégoire Delattre 2019-07-05 16:36:12 +02:00
parent 26499533d3
commit 4c0bcd7585
10 changed files with 80 additions and 42 deletions

View File

@ -22,8 +22,9 @@ DownloadAndStream.propTypes = {
const DownloadButton = ({ url }) => (
<h5 className="d-inline">
<a href={url} className="badge badge-pill badge-primary m-1">
<span className="fa fa-download"> </span> Download
<a href={url} className="btn btn-sm btn-primary m-1">
<i className="fa fa-download mr-1" />
Download
</a>
</h5>
);
@ -37,9 +38,10 @@ const StreamButton = ({ name, url, subtitles }) => {
<h5 className="d-inline">
<a
href="#"
className="badge badge-pill badge-primary m-1 clickable"
className="btn btn-sm btn-primary m-1 clickable"
onClick={(e) => { e.preventDefault(); setShowModal(true) }}>
<span className="fa fa-play-circle"> </span> Play
<i className="fa fa-play-circle mr-1" />
Play
</a>
</h5>

View File

@ -7,9 +7,10 @@ export const ImdbBadge = ({ imdbId }) => {
return (
<h5 className="d-inline">
<a
className="badge badge-pill badge-warning m-1"
className="btn btn-sm btn-warning m-1"
href={`https://www.imdb.com/title/${imdbId}`}>
IMDb <i className="fa fa-external-link"></i>
IMDb
<i className="ml-1 fa fa-external-link"></i>
</a>
</h5>
);

View File

@ -13,7 +13,7 @@ export const ShowMore = ({ children, id, inLibrary }) => {
<span>
<a
onClick={() => setDisplay(true)}
className="badge badge-pill badge-info clickable"
className="badge badge-pill badge-secondary clickable"
>
More options ...
</a>

View File

@ -1,4 +1,4 @@
import React from "react"
import React, { useState } from "react"
import PropTypes from "prop-types"
import { List } from "immutable"
@ -11,24 +11,37 @@ export const SubtitlesButton = ({
search,
}) => {
if (inLibrary === false) { return null }
/* eslint-disable */
const [show, setShow] = useState(false);
/* eslint-enable */
const onSelect = (eventKey) => {
if (eventKey === null || eventKey != 1) {
setShow(false);
}
}
const onToggle = (isOpen, event, metadata) => {
// Don't close on select
if (metadata && metadata.source !== "select") {
setShow(isOpen);
}
}
const count = (subtitles && subtitles.size !== 0) ? subtitles.size : 0;
return (
<span className="mr-1 mb-1">
<Dropdown drop="up">
<Dropdown.Toggle variant="success">
<i className="fa fa-language mr-1" />
<Dropdown drop="up" show={show} onToggle={onToggle} onSelect={onSelect}>
<Dropdown.Toggle variant="secondary" bsPrefix="btn-sm w-md-100">
<i className="fa fa-commenting mr-1" />
Subtitles
<span className="ml-1 badge badge-pill badge-light">
<span className="ml-1 badge badge-pill badge-info">
{count}
</span>
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Header>
<span className="text-warning">Advanced</span>
</Dropdown.Header>
<Dropdown.Item onClick={search} >
<Dropdown.Item eventKey={1} onClick={search} >
<i className={`fa ${ searching ? "fa-spin" : "" } fa-refresh mr-1`} />
Automatic search
</Dropdown.Item>

View File

@ -1,4 +1,4 @@
import React from "react"
import React, { useState } from "react"
import PropTypes from "prop-types"
import { List } from "immutable"
import { connect } from "react-redux"
@ -50,24 +50,39 @@ const torrentsButton = ({
addTorrent,
url,
}) => {
/* eslint-disable */
const [show, setShow] = useState(false);
/* eslint-enable */
const entries = buildMenuItems(torrents);
const count = (torrents && torrents.size !== 0) ? torrents.size : 0;
const onSelect = (eventKey) => {
// Close the dropdown if the eventkey is not specified
if (eventKey === null) {
setShow(false);
}
}
const onToggle = (isOpen, event, metadata) => {
// Don't close on select
if (metadata && metadata.source !== "select") {
setShow(isOpen);
}
}
return (
<span className="mr-1 mb-1">
<Dropdown drop="up">
<Dropdown.Toggle variant="primary">
<Dropdown drop="up" show={show} onToggle={onToggle} onSelect={onSelect}>
<Dropdown.Toggle variant="secondary" bsPrefix="btn-sm w-md-100">
<i className="fa fa-magnet mr-1" />
Torrents
<span className="ml-1 badge badge-pill badge-light">
<span className="ml-1 badge badge-pill badge-info">
{count}
</span>
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Header>
<span className="text-warning">Advanced</span>
</Dropdown.Header>
<Dropdown.Item onClick={search} >
<Dropdown.Item eventKey={1} onClick={search} >
<i className={`fa ${ searching ? "fa-spin" : "" } fa-refresh mr-1`} />
Automatic search
</Dropdown.Item>

View File

@ -11,6 +11,10 @@ import Poster from "./poster"
import Loader from "../loader/loader"
const ListPosters = (props) => {
if (props.loading) {
return (<Loader />);
}
let elmts = props.data;
const listSize = elmts !== undefined ? elmts.size : 0;
@ -174,10 +178,6 @@ const Posters = (props) => {
}
}, [move])
if (props.loading) {
return (<Loader />);
}
if (props.elmts.size === 0) {
return (
<div className="jumbotron">

View File

@ -2,7 +2,6 @@ import React from "react"
import Loading from "react-loading"
const Loader = () => (
<div className="row" id="container">
<div className="col-12 col-md-6 offset-md-3">
<Loading
type="bars"
@ -11,6 +10,5 @@ const Loader = () => (
color="#EBEBEB"
/>
</div>
</div>
);
export default Loader;

View File

@ -6,19 +6,17 @@ import { Episode } from "./episode"
export const Season = (props) => {
const [show, setShow] = useState(false);
const visibility = show ? "d-flex flex-column" : "d-none";
const icon = show ? "down" : "left"
return (
<div className="card mb-3">
<div className="card mb-3 show-season">
<div className="card-header clickable" onClick={() => setShow(!show)}>
<h5 className="m-0">
Season {props.season}
<small className="text-primary"> ({props.data.toList().size} episodes)</small>
<i className={`float-right fa fa-chevron-${icon}`}></i>
<i className={`float-right fa fa-chevron-${show ? "down" : "left"}`}></i>
</h5>
</div>
<div className={`card-body ${visibility}`}>
<div className={`card-body ${show ? "d-flex flex-column" : "d-none"}`}>
{props.data.toList().map(function(episode) {
let key = `${episode.get("season")}-${episode.get("episode")}`;
return (

View File

@ -7,6 +7,7 @@ import { Season } from "./season"
export const SeasonsList = (props) => (
<div className="col col-12 col-md-10 offset-md-1">
{props.data.get("seasons").entrySeq().map(function([season, data]) {
if (season === 0) { return null }
return (
<Season
key={`season-list-key-${season}`}

View File

@ -13,6 +13,12 @@ $fa-font-path: "~font-awesome/fonts";
}
}
@include media-breakpoint-down(md) {
.w-md-100 {
width: 100%;
}
}
$body-padding-top: $navbar-padding-y + 3rem;
body {
@ -84,6 +90,10 @@ div.show.dropdown.nav-item > div {
}
}
.show-season > div.card-body {
background-color: rgba($body-bg, .5)
}
.episode-thumb {
img {
@include media-breakpoint-down(md) {