moar cleanup

This commit is contained in:
Sean Yesmunt 2018-11-10 14:59:53 -05:00
parent 44b5c27ef5
commit 3bbe2582e5
59 changed files with 190 additions and 214 deletions

View file

@ -1,16 +1,30 @@
.asset-main {
height: 80vh;
display: flex;
flex-direction: column;
align-items: space-between;
align-items: center;
}
.asset-display { .asset-display {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex: 1 0 auto; flex: 1 1 auto;
justify-content: center; justify-content: center;
position: relative; position: relative;
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
align-items: center; align-items: center;
min-height: 50vh;
} }
.asset-title { .asset-title {
padding-top: $secondary-padding; padding-bottom: $thin-padding;
text-align: center;
@media (min-width: $break-point-mobile) {
padding-top: $secondary-padding;
}
} }
.asset-image, .asset-video { .asset-image, .asset-video {
@ -50,7 +64,7 @@
} }
} }
/*
.vertical-split, .visible-content { .vertical-split, .visible-content {
flex : 1 0 auto; flex : 1 0 auto;
display : flex; display : flex;
@ -80,7 +94,6 @@
height: 25px; height: 25px;
text-align: center; text-align: center;
padding: 0px; padding: 0px;
padding-left: 10px;
@media (max-width: $break-point-tablet) { @media (max-width: $break-point-tablet) {
padding: 0; padding: 0;
@ -101,93 +114,25 @@
} }
} }
} }
*/
.asset-info { .asset-info {
$asset-info-width: 1000px; $asset-info-width: 1000px;
max-width: $asset-info-width; max-width: $asset-info-width;
margin: $primary-padding;
@media (max-width: $asset-info-width) { max-width: 100%;
margin: 0px auto;
max-width: 100%;
width: calc(100% - 80px);
}
@media (max-width: $break-point-tablet) { @media (max-width: $break-point-tablet) {
width: calc(100% - 30px); margin: $primary-padding $secondary-padding;
} }
.horizontal-split { @media (max-width: $break-point-mobile) {
justify-content: center; margin: $primary-padding 0;
.column {
padding-top: $primary-padding;
padding-bottom: $primary-padding;
.row-labeled
{
margin-bottom: $secondary-padding;
&:last-child { margin-bottom: 0; }
}
&:first-child {
border-right: 1px solid $grey-border;
margin-right: -1px;
padding-right: 40px;
@media (max-width: $break-point-tablet) {
border: none;
margin: 0;
order: 2;
padding: 0;
}
}
&:last-child {
border-left: 1px solid $grey-border;
padding-left: 60px;
@media (max-width: $break-point-tablet) {
border: none;
margin: 0;
padding: 40px 0 0 0;
}
}
}
} }
p.asset-description {
color: #2E2F31;
font-size: 14px;
letter-spacing: 0;
line-height: 18px;
padding-bottom: 80px;
white-space: pre-line;
width: 360px;
@media (max-width: $break-point-tablet) {
margin: 22px 0 60px;
max-width: 600px;
padding: 0;
width: 100%;
}
}
.asset-information {
width: 320px;
@media (max-width: $break-point-tablet) {
border-bottom: 1px solid $grey-border;
min-width: 100%;
padding-bottom: 30px;
width: 100%;
}
}
} }
.asset-footer { .asset-footer {
border-top: 1px solid $grey-border; border-top: 1px solid $grey-border;
padding: $tertiary-padding $primary-padding; padding-top: $primary-padding;
margin-top: $primary-padding;
color: $grey; color: $grey;
} }

7
client/scss/_form.scss Normal file
View file

@ -0,0 +1,7 @@
.form-group {
padding-bottom: $secondary-padding;
}
.form-title {
padding-bottom: $secondary-padding;
}

View file

@ -6,6 +6,21 @@
display : flex; display : flex;
flex-direction : row; flex-direction : row;
justify-content: space-between; justify-content: space-between;
&.horizontal-split--mobile-collapse {
@media (max-width: $break-point-mobile) {
flex-direction: column;
.horizontal-split__column {
width: 100%;
}
.horizontal-split__column--right {
padding-left: 0;
padding-top: $secondary-padding;
}
}
}
}; };
.horizontal-split__column { .horizontal-split__column {
@ -16,10 +31,18 @@
.horizontal-split__column--left { .horizontal-split__column--left {
padding-right: $primary-padding; padding-right: $primary-padding;
@media (max-width: $break-point-mobile) {
padding-right: $thin-padding;
}
} }
.horizontal-split__column--right { .horizontal-split__column--right {
padding-left: $primary-padding; padding-left: $primary-padding;
@media (max-width: $break-point-mobile) {
padding-left: $thin-padding;
}
} }
@media (max-width: $break-point-tablet) { @media (max-width: $break-point-tablet) {

View file

@ -10,10 +10,6 @@ input {
display: inline-block; display: inline-block;
} }
.input-text {
}
.input-slider { .input-slider {
width: 100% width: 100%
} }
@ -42,6 +38,10 @@ input {
border-bottom: 1px solid $secondary-color; border-bottom: 1px solid $secondary-color;
} }
.form-group {
padding-bottom: $secondary-padding;
}
// modifiers // modifiers
.input--full-width { .input--full-width {

View file

@ -2,18 +2,11 @@
margin-top: $thin-padding; margin-top: $thin-padding;
margin-left: $primary-padding; margin-left: $primary-padding;
margin-right: $primary-padding; margin-right: $primary-padding;
@media (max-width: $break-point-mobile) { @media (max-width: $break-point-mobile) {
margin-left: 15px; margin-left: 15px;
margin-right: 15px; margin-right: 15px;
} }
.select--arrow {
padding: 0 1.5em 0 $input-padding;
font-size: 14px;
letter-spacing: 0.4px;
text-transform: uppercase;
}
} }
.nav-bar-link { .nav-bar-link {
@ -35,7 +28,7 @@
padding-bottom: calc(1em - 2px); padding-bottom: calc(1em - 2px);
padding-left: 1em; padding-left: 1em;
} }
} }
@media (max-width: $break-point-mobile ) { @media (max-width: $break-point-mobile ) {
@ -46,5 +39,3 @@
padding-left: 0.5em; padding-left: 0.5em;
} }
} }

View file

@ -1,3 +1,8 @@
.progress-bar__wrapper {
display: flex;
align-items: center;
justify-content: center;
}
.progress-bar--inactive { .progress-bar--inactive {
color: $grey; color: $grey;
} }

View file

@ -2,6 +2,10 @@
max-width: $width-content-constrained; max-width: $width-content-constrained;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@media (max-width: $break-point-mobile) {
font-size: .8em;
}
} }
.publish-preview-dim { .publish-preview-dim {

View file

@ -7,6 +7,7 @@
flex-direction: row; flex-direction: row;
flex-wrap: nowrap; flex-wrap: nowrap;
justify-content: flex-start; justify-content: flex-start;
padding-bottom: $tertiary-padding;
} }
.row-labeled-label { .row-labeled-label {
@ -14,8 +15,6 @@
display: flex; display: flex;
align-items: center; align-items: center;
flex: 1; flex: 1;
//bad, fix this
.label { padding-top: 0; padding-bottom: 0; }
} }
.row-labeled-content { .row-labeled-content {
align-self: center; align-self: center;
@ -32,4 +31,4 @@
.row-labeled-content { .row-labeled-content {
width: 100%; width: 100%;
} }
} }

4
client/scss/_select.scss Normal file
View file

@ -0,0 +1,4 @@
select {
margin: 0;
display: inline-block;
}

View file

@ -1,45 +1,44 @@
@import '~variables/_variables'; @import '_variables';
@import '~reset/_reset'; @import '_reset';
@import '~font/_font'; @import 'font/_font.scss';
@import '~html/_html'; @import '_html';
@import '~body/_body'; @import '_body';
@import '~react-app/_react-app'; @import '_react-app';
@import '~text/_text'; @import '_text';
@import '~link/_link'; @import '_link';
@import '~input/_input'; @import '_input';
@import '~select/_select'; @import '_select';
@import '~textarea/_textarea'; @import '_textarea';
@import '~video/_video'; @import '_video';
@import '_form';
@import '~asset-display/_asset-display'; @import '_asset-display';
@import '~asset-preview/_asset-preview'; @import '_asset-preview';
@import '~button/_button'; @import '_button';
@import '~button-primary/_button-primary'; @import '_button-primary';
@import '~button-secondary/_button-secondary'; @import '_button-secondary';
@import '~click-to-copy/_click-to-copy'; @import '_click-to-copy';
@import '~form-feedback/_form-feedback'; @import '_form-feedback';
@import '~horizontal-split/_horizontal-split'; @import '_horizontal-split';
@import '~label/_label'; @import '_label';
@import '~nav-bar/_nav-bar'; @import '_nav-bar';
@import '~page-layout/_page-layout'; @import '_page-layout';
@import '~page-layout-show-lite/_page-layout-show-lite'; @import '_page-layout-show-lite';
@import '~page-content/_page-content'; @import '_page-content';
@import '~progress-bar/_progress-bar'; @import '_progress-bar';
@import '~publish-preview/_publish-preview'; @import '_publish-preview';
@import '~share-buttons/_share-buttons'; @import '_share-buttons';
@import '~space-between/_space-between'; @import '_space-between';
@import '~space-around/_space-around'; @import '_space-around';
@import '~row/_row'; @import '_row';
@import '~tooltip/_tooltip'; @import '_tooltip';
@import '~social-share-link/_social-share-link'; @import '_social-share-link';
@import '~channel-claims-display/_channel-claims-display';
@import '~dropzone/_dropzone';
@import '~publish-url-input/_publish-url-input';
@import '~publish-status/_publish-status';
@import '~publish-disabled-message/_publish-disabled-message';
@import '~media-queries/_media-queries';
@import '_channel-claims-display';
@import '_dropzone';
@import '_publish-url-input';
@import '_publish-status';
@import '_publish-disabled-message';
@import '_media-queries';

View file

@ -1,13 +0,0 @@
select {
margin: 0;
display: inline-block;
}
.select--arrow {
-moz-appearance:none;
-webkit-appearance: none;
background: url('./icon/chevron-down.svg') no-repeat right;
cursor: pointer;
padding-right: 1.5em;
padding-left: $input-padding
}

View file

@ -5,7 +5,6 @@ const ChannelSelectDropdown = ({ selectedChannel, handleSelection, loggedInChann
return ( return (
<select <select
id='channel-name-select' id='channel-name-select'
className='select select--arrow'
value={selectedChannel} value={selectedChannel}
onChange={handleSelection}> onChange={handleSelection}>
{ loggedInChannelName && ( { loggedInChannelName && (

View file

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
const FormFeedbackDisplay = ({ errorMessage, defaultMessage }) => { const FormFeedbackDisplay = ({ errorMessage, defaultMessage }) => {
return ( return (errorMessage || defaultMessage) ? (
<div className={'form-feedback'}> <div className={'form-feedback'}>
{ errorMessage ? ( { errorMessage ? (
<span className={'text--small text--failure'}>{errorMessage}</span> <span className={'text--small text--failure'}>{errorMessage}</span>
@ -15,7 +15,7 @@ const FormFeedbackDisplay = ({ errorMessage, defaultMessage }) => {
</div> </div>
)} )}
</div> </div>
); ) : null;
}; };
export default FormFeedbackDisplay; export default FormFeedbackDisplay;

View file

@ -2,13 +2,26 @@ import React from 'react';
class HorizontalSplit extends React.Component { class HorizontalSplit extends React.Component {
render () { render () {
const { leftSide, rightSide, collapseOnMobile } = this.props;
let className = 'horizontal-split';
if (collapseOnMobile) {
className += " horizontal-split--mobile-collapse";
}
// If there is no left side, move the right side to the left
// This is mostly for content with no description
// It doesn't need to be on the right side with nothing next to it.
const leftComponent = leftSide || rightSide;
const rightComponent = leftSide ? rightSide : null;
return ( return (
<div className={'horizontal-split'}> <div className={className}>
<div className={'horizontal-split__column horizontal-split__column--left'}> <div className={'horizontal-split__column horizontal-split__column--left'}>
{this.props.leftSide} {leftComponent}
</div> </div>
<div className={'horizontal-split__column horizontal-split__column--right'}> <div className={'horizontal-split__column horizontal-split__column--right'}>
{this.props.rightSide} {rightComponent}
</div> </div>
</div> </div>
); );

View file

@ -6,7 +6,6 @@ function NavBarChannelDropdown ({ channelName, handleSelection, defaultSelection
<select <select
type='text' type='text'
id='nav-bar-channel-select' id='nav-bar-channel-select'
className='select select--arrow'
onChange={handleSelection} onChange={handleSelection}
value={defaultSelection} value={defaultSelection}
> >

View file

@ -62,7 +62,7 @@ class ProgressBar extends React.Component {
}; };
render () { render () {
return ( return (
<div> <div className="progress-bar__wrapper">
{this.state.bars.map((bar, index) => bar.isActive ? <ActiveStatusBar key={index} /> : <InactiveStatusBar key={index}/>)} {this.state.bars.map((bar, index) => bar.isActive ? <ActiveStatusBar key={index} /> : <InactiveStatusBar key={index}/>)}
</div> </div>
); );

View file

@ -13,7 +13,6 @@ const PublishLicenseInput = ({ handleSelect }) => {
type='text' type='text'
name='license' name='license'
id='publish-license' id='publish-license'
className='select select--primary'
onChange={handleSelect} onChange={handleSelect}
> >
<option value=''>Unspecified</option> <option value=''>Unspecified</option>

View file

@ -19,6 +19,7 @@ class PublishPreview extends React.Component {
</Row> </Row>
</div> </div>
<HorizontalSplit <HorizontalSplit
collapseOnMobile
leftSide={<Dropzone />} leftSide={<Dropzone />}
rightSide={<PublishDetails />} rightSide={<PublishDetails />}
/> />

View file

@ -59,7 +59,7 @@ class ChannelCreateForm extends React.Component {
return ( return (
<div> <div>
{ !status ? ( { !status ? (
<form onSubmit={this.handleSubmit}> <form className="form-group" onSubmit={this.handleSubmit}>
<ChannelCreateNameInput <ChannelCreateNameInput
value={name.value} value={name.value}
error={name.error} error={name.error}
@ -69,10 +69,7 @@ class ChannelCreateForm extends React.Component {
value={password.value} value={password.value}
handlePasswordInput={this.handlePasswordInput} handlePasswordInput={this.handlePasswordInput}
/> />
<FormFeedbackDisplay <FormFeedbackDisplay errorMessage={formError} />
errorMessage={formError}
defaultMessage={'Choose a name and password for your channel'}
/>
<ButtonPrimary <ButtonPrimary
type={'submit'} type={'submit'}
value={'Create Channel'} value={'Create Channel'}

View file

@ -49,7 +49,7 @@ class ChannelLoginForm extends React.Component {
} }
render () { render () {
return ( return (
<form onSubmit={this.loginToChannel}> <form className="form-group" onSubmit={this.loginToChannel}>
<ChannelLoginNameInput <ChannelLoginNameInput
channelName={this.state.channelName} channelName={this.state.channelName}
handleInput={this.handleInput} handleInput={this.handleInput}
@ -58,10 +58,7 @@ class ChannelLoginForm extends React.Component {
channelPassword={this.state.channelPassword} channelPassword={this.state.channelPassword}
handleInput={this.handleInput} handleInput={this.handleInput}
/> />
<FormFeedbackDisplay <FormFeedbackDisplay errorMessage={this.state.error} />
errorMessage={this.state.error}
defaultMessage={'Enter the name and password for your channel'}
/>
<ButtonPrimary <ButtonPrimary
type={'submit'} type={'submit'}
value={'Authenticate'} value={'Authenticate'}

View file

@ -40,16 +40,16 @@ class ChannelSelect extends React.Component {
const { publishInChannel, channelError, selectedChannel, loggedInChannelName, publishOnlyApproved } = this.props; const { publishInChannel, channelError, selectedChannel, loggedInChannelName, publishOnlyApproved } = this.props;
if (publishOnlyApproved) { if (publishOnlyApproved) {
return ( return (
<div> <React.Fragment>
<RowLabeled <RowLabeled
label={<Label value={'Channel:'} />} label={<Label value={'Channel:'} />}
content={<span>{loggedInChannelName}</span>} content={<span>{loggedInChannelName}</span>}
/> />
</div> </React.Fragment>
); );
} }
return ( return (
<div> <React.Fragment>
<RowLabeled <RowLabeled
label={ label={
<ChooseAnonymousPublishRadio <ChooseAnonymousPublishRadio
@ -87,7 +87,7 @@ class ChannelSelect extends React.Component {
{ (selectedChannel === CREATE) && <ChannelCreateForm /> } { (selectedChannel === CREATE) && <ChannelCreateForm /> }
</div> </div>
)} )}
</div> </React.Fragment>
); );
} }
} }

View file

@ -7,14 +7,14 @@ class ChannelTools extends React.Component {
render () { render () {
return ( return (
<div> <div>
<Row> <h3 className="form-title">Log in to existing channel</h3>
<h3>Log in to existing channel</h3> <ChannelLoginForm />
<ChannelLoginForm /> {!this.props.closedRegistration && (
</Row> <React.Fragment>
{!this.props.closedRegistration && (<Row> <h3 className="form-title">Create new channel</h3>
<h3>Create new channel</h3> <ChannelCreateForm />
<ChannelCreateForm /> </React.Fragment>
</Row>)} )}
</div> </div>
); );
} }

View file

@ -84,7 +84,7 @@ class Dropzone extends React.Component {
const { dragOver, mouseOver, dimPreview } = this.state; const { dragOver, mouseOver, dimPreview } = this.state;
const { file, thumbnail, fileError, isUpdate, sourceUrl, fileExt } = this.props; const { file, thumbnail, fileError, isUpdate, sourceUrl, fileExt } = this.props;
return ( return (
<div> <React.Fragment>
{isUpdate && fileExt === 'mp4' ? ( {isUpdate && fileExt === 'mp4' ? (
<p>Video updates are currently disabled. This feature will be available soon. You can edit metadata.</p> <p>Video updates are currently disabled. This feature will be available soon. You can edit metadata.</p>
) : ( ) : (
@ -145,7 +145,7 @@ class Dropzone extends React.Component {
</div> </div>
</div> </div>
)} )}
</div> </React.Fragment>
); );
} }
}; };

View file

@ -45,7 +45,7 @@ class PublishDetails extends React.Component {
return ( return (
<div> <div>
{isUpdate ? (asset && ( {isUpdate ? (asset && (
<Row> <React.Fragment>
<RowLabeled <RowLabeled
label={ label={
<Label value={'Channel:'} /> <Label value={'Channel:'} />
@ -56,16 +56,14 @@ class PublishDetails extends React.Component {
</span> </span>
} }
/> />
</Row> </React.Fragment>
)) : ( )) : (
<React.Fragment> <React.Fragment>
<Row> <Row>
<PublishUrlInput /> <PublishUrlInput />
</Row> </Row>
<Row> <ChannelSelect />
<ChannelSelect />
</Row>
</React.Fragment> </React.Fragment>
)} )}

View file

@ -32,23 +32,17 @@ class PublishMetadataInputs extends React.Component {
<div> <div>
{(showMetadataInputs || isUpdate) && ( {(showMetadataInputs || isUpdate) && (
<React.Fragment> <React.Fragment>
<Row> <PublishDescriptionInput
<PublishDescriptionInput description={this.props.description}
description={this.props.description} handleInput={this.handleInput}
handleInput={this.handleInput} />
/> <PublishLicenseInput
</Row> handleSelect={this.handleSelect}
<Row> />
<PublishLicenseInput <PublishNsfwInput
handleSelect={this.handleSelect} nsfw={this.props.nsfw}
/> handleInput={this.handleInput}
</Row> />
<Row>
<PublishNsfwInput
nsfw={this.props.nsfw}
handleInput={this.handleInput}
/>
</Row>
</React.Fragment> </React.Fragment>
)} )}
{!isUpdate && ( {!isUpdate && (

View file

@ -13,6 +13,7 @@ class AboutPage extends React.Component {
pageUri={'about'} pageUri={'about'}
> >
<HorizontalSplit <HorizontalSplit
collapseOnMobile
leftSide={<AboutSpeechOverview />} leftSide={<AboutSpeechOverview />}
rightSide={<AboutSpeechDetails />} rightSide={<AboutSpeechDetails />}
/> />

View file

@ -20,6 +20,7 @@ class LoginPage extends React.Component {
pageUri={'login'} pageUri={'login'}
> >
<HorizontalSplit <HorizontalSplit
collapseOnMobile
leftSide={<ChannelAbout />} leftSide={<ChannelAbout />}
rightSide={<ChannelTools />} rightSide={<ChannelTools />}
/> />

View file

@ -14,7 +14,7 @@ class ShowAssetDetails extends React.Component {
// this.storageKey = 'vert-split-state-' + this.props.name; // this.storageKey = 'vert-split-state-' + this.props.name;
// const closed = window && window.localStorage // const closed = window && window.localStorage
// ? !!window.localStorage.getItem(this.storageKey) : false; // ? !!window.localStorage.getItem(this.storageKey) : false;
const closed = false; const closed = true;
this.state = { closed: closed }; this.state = { closed: closed };
} }
@ -35,12 +35,15 @@ class ShowAssetDetails extends React.Component {
pageTitle={`${name} - details`} pageTitle={`${name} - details`}
asset={asset} asset={asset}
> >
<AssetDisplay /> <div className="asset-main">
<AssetTitle /> <AssetDisplay />
<button className='collapse-button' onClick={this.collapse}> <AssetTitle />
{this.state.closed ? <Icon.PlusCircle className='plus-icon' /> : <Icon.MinusCircle />}
</button> <button className='collapse-button' onClick={this.collapse}>
{ !this.state.closed && <AssetInfo /> } {this.state.closed ? <Icon.PlusCircle className='plus-icon' /> : <Icon.MinusCircle />}
</button>
</div>
{!this.state.closed && <AssetInfo />}
</PageLayout> </PageLayout>
); );
} }

10
deployment-config.json Normal file
View file

@ -0,0 +1,10 @@
{
"type": "sftp",
"host": "sean.lbry.tech",
"username": "lbry",
"password": "",
"port": 22,
"remotePath": "/home/lbry/spee.ch",
"sshKeyFile": "/Users/sean/.ssh/id_rsa2",
"uploadOnSave": true
}