From 95fee660add5a4947afaf1c14674134e473007d6 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 24 Jul 2018 20:50:04 -0400 Subject: [PATCH 01/22] add rest of channel content to the side of the file viewer --- .eslintrc.json | 3 +- .gitignore | 2 +- .../component/common/credit-amount.jsx | 17 +- .../common/form-components/form-field.jsx | 5 +- src/renderer/component/fileCard/view.jsx | 9 +- src/renderer/component/filePrice/view.jsx | 6 +- src/renderer/component/fileTile/view.jsx | 37 ++-- src/renderer/component/page/view.jsx | 14 +- .../component/recommendedVideos/index.js | 21 +++ .../component/recommendedVideos/view.jsx | 54 ++++++ src/renderer/component/rewardSummary/view.jsx | 2 +- .../internal/transaction-list-item.jsx | 20 +-- .../component/viewOnWebButton/view.jsx | 2 +- src/renderer/page/file/view.jsx | 167 +++++++----------- src/renderer/page/search/view.jsx | 2 +- src/renderer/scss/_gui.scss | 48 +++-- src/renderer/scss/_vars.scss | 2 +- src/renderer/scss/component/_card.scss | 41 ++++- src/renderer/scss/component/_content.scss | 11 ++ src/renderer/scss/component/_file-list.scss | 11 +- src/renderer/scss/component/_form-field.scss | 8 + src/renderer/scss/component/_header.scss | 6 +- src/renderer/scss/component/_nav.scss | 9 +- 23 files changed, 322 insertions(+), 175 deletions(-) create mode 100644 src/renderer/component/recommendedVideos/index.js create mode 100644 src/renderer/component/recommendedVideos/view.jsx diff --git a/.eslintrc.json b/.eslintrc.json index abeff7ac8..fb260f101 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -38,6 +38,7 @@ "import/prefer-default-export": 0, "no-return-assign": 0, "react/require-default-props": 0, - "react/jsx-closing-tag-location": 0 + "react/jsx-closing-tag-location": 0, + "jsx-a11y/no-noninteractive-element-to-interactive-role": 0 } } diff --git a/.gitignore b/.gitignore index 52f16b2e0..4fc96cbb9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ yarn-error.log package-lock.json .idea/ -/build/daemon.ver \ No newline at end of file +/build/daemon* \ No newline at end of file diff --git a/src/renderer/component/common/credit-amount.jsx b/src/renderer/component/common/credit-amount.jsx index 0147c0154..67243394f 100644 --- a/src/renderer/component/common/credit-amount.jsx +++ b/src/renderer/component/common/credit-amount.jsx @@ -11,9 +11,10 @@ type Props = { showPlus: boolean, isEstimate?: boolean, large?: boolean, - plain?: boolean, + showLBC?: boolean, fee?: boolean, - noStyle?: boolean, + inheritStyle?: boolean, + filePage?: boolean, }; class CreditAmount extends React.PureComponent { @@ -22,6 +23,7 @@ class CreditAmount extends React.PureComponent { showFree: false, showFullPrice: false, showPlus: false, + showLBC: true, }; render() { @@ -33,9 +35,10 @@ class CreditAmount extends React.PureComponent { showPlus, large, isEstimate, - plain, - noStyle, fee, + showLBC, + inheritStyle, + filePage, } = this.props; const minimumRenderableAmount = 10 ** (-1 * precision); @@ -62,7 +65,7 @@ class CreditAmount extends React.PureComponent { amountText = `+${amountText}`; } - if (!plain) { + if (showLBC) { amountText = `${amountText} ${__('LBC')}`; } @@ -78,8 +81,8 @@ class CreditAmount extends React.PureComponent { 'credit-amount--free': !large && isFree, 'credit-amount--cost': !large && !isFree, 'credit-amount--large': large, - 'credit-amount--plain': plain, - 'credit-amount--no-style': noStyle, + 'credit-amount--inherit': inheritStyle, + 'credit-amount--file-page': filePage, })} > {amountText} diff --git a/src/renderer/component/common/form-components/form-field.jsx b/src/renderer/component/common/form-components/form-field.jsx index 0cac65160..c9ff6c3b0 100644 --- a/src/renderer/component/common/form-components/form-field.jsx +++ b/src/renderer/component/common/form-components/form-field.jsx @@ -4,7 +4,7 @@ import ReactDOMServer from 'react-dom/server'; import classnames from 'classnames'; import MarkdownPreview from 'component/common/markdown-preview'; import SimpleMDE from 'react-simplemde-editor'; -import 'simplemde/dist/simplemde.min.css'; +import 'simplemde/dist/simplemde.min.css'; // eslint-disable-line import/no-extraneous-dependencies import Toggle from 'react-toggle'; import { openEditorMenu } from 'util/contextMenu'; @@ -24,6 +24,7 @@ type Props = { stretch?: boolean, affixClass?: string, // class applied to prefix/postfix label useToggle?: boolean, + noPadding?: boolean, }; export class FormField extends React.PureComponent { @@ -41,6 +42,7 @@ export class FormField extends React.PureComponent { stretch, affixClass, useToggle, + noPadding, ...inputProps } = this.props; @@ -108,6 +110,7 @@ export class FormField extends React.PureComponent {
{prefix && ( diff --git a/src/renderer/component/fileCard/view.jsx b/src/renderer/component/fileCard/view.jsx index 7a7e4f7d5..a8d5d6e71 100644 --- a/src/renderer/component/fileCard/view.jsx +++ b/src/renderer/component/fileCard/view.jsx @@ -92,7 +92,7 @@ class FileCard extends React.PureComponent { onContextMenu={handleContextMenu} > -
{showPrice && }
+
{title} @@ -103,13 +103,12 @@ class FileCard extends React.PureComponent { ) : ( -
- {isRewardContent && } - {fileInfo && } -
+ {isRewardContent && } + {fileInfo && }
)}
+ {showPrice && }
); diff --git a/src/renderer/component/filePrice/view.jsx b/src/renderer/component/filePrice/view.jsx index e40a6c25e..d2a6a9245 100644 --- a/src/renderer/component/filePrice/view.jsx +++ b/src/renderer/component/filePrice/view.jsx @@ -9,6 +9,7 @@ type Props = { uri: string, fetching: boolean, claim: ?{}, + filePage?: boolean, }; class FilePrice extends React.PureComponent { @@ -33,13 +34,14 @@ class FilePrice extends React.PureComponent { }; render() { - const { costInfo, showFullPrice } = this.props; + const { costInfo, showFullPrice, filePage } = this.props; return costInfo ? ( ) : null; diff --git a/src/renderer/component/fileTile/view.jsx b/src/renderer/component/fileTile/view.jsx index f7945ed75..88bc3703c 100644 --- a/src/renderer/component/fileTile/view.jsx +++ b/src/renderer/component/fileTile/view.jsx @@ -11,7 +11,6 @@ import classnames from 'classnames'; import FilePrice from 'component/filePrice'; type Props = { - fullWidth: boolean, // removes the max-width css showUri: boolean, showLocal: boolean, obscureNsfw: boolean, @@ -28,13 +27,15 @@ type Props = { updatePublishForm: ({}) => void, hideNoResult: boolean, // don't show the tile if there is no claim at this uri displayHiddenMessage?: boolean, + displayDescription?: boolean, + small?: boolean, }; class FileTile extends React.PureComponent { static defaultProps = { showUri: false, showLocal: false, - fullWidth: false, + displayDescription: true, }; componentDidMount() { @@ -57,13 +58,14 @@ class FileTile extends React.PureComponent { showUri, obscureNsfw, claimIsMine, - fullWidth, showLocal, isDownloaded, clearPublish, updatePublishForm, hideNoResult, displayHiddenMessage, + displayDescription, + small, } = this.props; const shouldHide = !claimIsMine && obscureNsfw && metadata && metadata.nsfw; @@ -96,7 +98,7 @@ class FileTile extends React.PureComponent { return !name && hideNoResult ? null : (
{ {isResolvingUri &&
{__('Loading...')}
} {!isResolvingUri && ( -
- {title || name} +
+ {title || name}
-
+
{showUri ? uri : channel || __('Anonymous')} {isRewardContent && } {showLocal && isDownloaded && }
-
- {description} -
-
- -
+ + {displayDescription && ( +
+ {description} +
+ )} + { + //
+ // + //
+ } {!name && ( {__('This location is unused.')}{' '} diff --git a/src/renderer/component/page/view.jsx b/src/renderer/component/page/view.jsx index 34998d528..7286c9046 100644 --- a/src/renderer/component/page/view.jsx +++ b/src/renderer/component/page/view.jsx @@ -12,6 +12,7 @@ type Props = { noPadding: ?boolean, extraPadding: ?boolean, notContained: ?boolean, // No max-width, but keep the padding + forContent: ?boolean, loading: ?boolean, }; @@ -71,15 +72,24 @@ class Page extends React.PureComponent { loaderTimeout: ?TimeoutID; render() { - const { pageTitle, children, noPadding, extraPadding, notContained, loading } = this.props; + const { + pageTitle, + children, + noPadding, + extraPadding, + notContained, + loading, + forContent, + } = this.props; const { showLoader } = this.state; return (
{pageTitle && ( diff --git a/src/renderer/component/recommendedVideos/index.js b/src/renderer/component/recommendedVideos/index.js new file mode 100644 index 000000000..99c896103 --- /dev/null +++ b/src/renderer/component/recommendedVideos/index.js @@ -0,0 +1,21 @@ +import { connect } from 'react-redux'; +import { doFetchClaimsByChannel } from 'redux/actions/content'; +import { + makeSelectClaimsInChannelForCurrentPage, + makeSelectFetchingChannelClaims, +} from 'lbry-redux'; +import RecommendedVideos from './view'; + +const select = (state, props) => ({ + claimsInChannel: makeSelectClaimsInChannelForCurrentPage(props.channelUri)(state), + fetching: makeSelectFetchingChannelClaims(props.channelUri)(state), +}); + +const perform = dispatch => ({ + fetchClaims: (uri, page) => dispatch(doFetchClaimsByChannel(uri, page)), +}); + +export default connect( + select, + perform +)(RecommendedVideos); diff --git a/src/renderer/component/recommendedVideos/view.jsx b/src/renderer/component/recommendedVideos/view.jsx new file mode 100644 index 000000000..63c3488d3 --- /dev/null +++ b/src/renderer/component/recommendedVideos/view.jsx @@ -0,0 +1,54 @@ +// @flow +import React from 'react'; +import FileTile from 'component/fileTile'; +import { FormRow, FormField } from 'component/common/form'; +import ToolTip from 'component/common/tooltip'; +import type { Claim } from 'types/claim'; + +type Props = { + channelUri: ?string, + claimsInChannel: ?Array, + fetching: boolean, + fetchClaims: (string, number) => void, +}; + +export default class RecommendedVideos extends React.PureComponent { + componentDidMount() { + const { channelUri, fetchClaims, claimsInChannel } = this.props; + if (!claimsInChannel) { + fetchClaims(channelUri, 1); + } + } + + render() { + const { claimsInChannel, fetching } = this.props; + + return ( +
+ + + {}} + /> + + + {fetching &&
Loading
} + {claimsInChannel && + claimsInChannel.map(({ permanent_url: permanentUrl }) => ( + + ))} +
+ ); + } +} diff --git a/src/renderer/component/rewardSummary/view.jsx b/src/renderer/component/rewardSummary/view.jsx index 0a74fdfb6..87b20ca6c 100644 --- a/src/renderer/component/rewardSummary/view.jsx +++ b/src/renderer/component/rewardSummary/view.jsx @@ -31,7 +31,7 @@ class RewardSummary extends React.Component { {__('You have')}   - +   {__('in unclaimed rewards')}. diff --git a/src/renderer/component/transactionList/internal/transaction-list-item.jsx b/src/renderer/component/transactionList/internal/transaction-list-item.jsx index 379758722..f59c920a8 100644 --- a/src/renderer/component/transactionList/internal/transaction-list-item.jsx +++ b/src/renderer/component/transactionList/internal/transaction-list-item.jsx @@ -6,8 +6,8 @@ import DateTime from 'component/dateTime'; import Button from 'component/button'; import { buildURI } from 'lbry-redux'; import * as txnTypes from 'constants/transaction_types'; -import type { Transaction } from '../view'; import * as ICONS from 'constants/icons'; +import type { Transaction } from '../view'; type Props = { transaction: Transaction, @@ -25,12 +25,6 @@ class TransactionListItem extends React.PureComponent { (this: any).abandonClaim = this.abandonClaim.bind(this); } - abandonClaim() { - const { txid, nout } = this.props.transaction; - - this.props.revokeClaim(txid, nout); - } - getLink(type: string) { if (type === txnTypes.TIP) { return
+ ))} -
- - -
+
+
+

{title}

+
+ {isRewardContent && } +
- - - + + {__('Published on')}  + + + {metadata.nsfw &&
NSFW
} +
+ +
+
+
+ {claimIsMine ? ( +
+ +
+ + +
-
- )} +
+ +
+ +
); } diff --git a/src/renderer/page/search/view.jsx b/src/renderer/page/search/view.jsx index 9e47ebadd..5db8016ee 100644 --- a/src/renderer/page/search/view.jsx +++ b/src/renderer/page/search/view.jsx @@ -73,7 +73,7 @@ class SearchPage extends React.PureComponent {
- + )} diff --git a/src/renderer/scss/_gui.scss b/src/renderer/scss/_gui.scss index 8ea4b0907..8ccd2eaa7 100644 --- a/src/renderer/scss/_gui.scss +++ b/src/renderer/scss/_gui.scss @@ -203,6 +203,11 @@ p { padding-right: 100px; } +.main--for-content { + padding: $spacing-width * 2/3; + display: flex; +} + .page__header { padding: $spacing-vertical * 2/3; padding-bottom: 0; @@ -263,30 +268,47 @@ p { } .credit-amount--free { - color: var(--color-dark-blue); - background-color: var(--color-secondary); + color: var(--color-secondary); + + &.credit-amount--file-page { + color: var(--color-dark-blue); + background-color: var(--color-secondary); + } } .credit-amount--cost { - color: var(--color-black); - background-color: var(--color-yellow); + color: var(--color-yellow); + + &.credit-amount--file-page { + color: var(--color-black); + background-color: var(--color-yellow); + } } -.credit-amount--plain { +.credit-amount--inherit { background-color: inherit; color: inherit; font-weight: inherit; font-size: inherit; + font-family: 'metropolis-medium'; + padding: 0; } -.credit-amount.credit-amount--no-style { - padding: 0; - font-size: inherit; - font-weight: inherit; - color: inherit; - background-color: transparent; - font-family: 'metropolis-medium'; -} +// .credit-amount--plain { +// background-color: inherit; +// color: inherit; +// font-weight: inherit; +// font-size: inherit; +// } + +// .credit-amount.credit-amount--no-style { +// padding: 0; +// font-size: inherit; +// font-weight: inherit; +// color: inherit; +// background-color: transparent; +// font-family: 'metropolis-medium'; +// } .divider__horizontal { border-top: var(--color-divider); diff --git a/src/renderer/scss/_vars.scss b/src/renderer/scss/_vars.scss index 517f33fdd..2364e59d7 100644 --- a/src/renderer/scss/_vars.scss +++ b/src/renderer/scss/_vars.scss @@ -9,7 +9,7 @@ $large-breakpoint: 1921px; :root { /* Widths & spacings */ - --side-nav-width: 220px; + --side-nav-width: 190px; --side-nav-width-m: 240px; --side-nav-width-l: 320px; --font-size-subtext-multiple: 0.92; diff --git a/src/renderer/scss/component/_card.scss b/src/renderer/scss/component/_card.scss index f44a60d91..dba7c4666 100644 --- a/src/renderer/scss/component/_card.scss +++ b/src/renderer/scss/component/_card.scss @@ -114,13 +114,17 @@ .card__title--small { font-size: 14px; line-height: 18px; - padding-top: $spacing-vertical / 3; @media only screen and (min-width: $large-breakpoint) { font-size: 16px; } } +.card__title--x-small { + font-size: 12px; + line-height: 12px; +} + .card__title--file { font-family: 'metropolis-bold'; font-size: 28px; @@ -135,20 +139,27 @@ font-size: 14px; font-family: 'metropolis-medium'; color: var(--card-text-color); + display: flex; + align-items: center; .icon { - margin-top: $spacing-vertical * 1/6; - - &:not(:first-of-type) { - margin: 0 $spacing-vertical * 1/3; - } + margin: 0 0 0 $spacing-vertical * 1/3; } } +.card__subtitle--x-small { + font-size: 12px; +} + .card__subtitle-price { padding-top: $spacing-vertical * 1/3; } +.card__title--small + .card__subtitle, +.card__title--x-small + .card__subtitle { + padding-top: $spacing-vertical * 1/3; +} + .card__meta { color: var(--color-help); font-size: 14px; @@ -189,6 +200,11 @@ margin-top: $spacing-vertical * 2/3; } +.card__content--columns { + display: flex; + padding: 0; +} + .card__content--extra-padding { margin-top: $spacing-vertical * 3/2; } @@ -312,7 +328,11 @@ .card-row__scroll-btns { display: flex; - padding-right: $spacing-width; + padding-right: $spacing-width * 1/3; + + @media (min-width: $medium-breakpoint) { + padding-right: $spacing-width; + } } .card-row__scrollhouse { @@ -401,6 +421,13 @@ } } +.card__list--recommended { + padding-left: $spacing-width; + .card { + display: block; + } +} + .card__success-msg { border-left: 2px solid var(--success-msg-border); color: var(--success-msg-color); diff --git a/src/renderer/scss/component/_content.scss b/src/renderer/scss/component/_content.scss index 7f324d20f..efa498900 100644 --- a/src/renderer/scss/component/_content.scss +++ b/src/renderer/scss/component/_content.scss @@ -1,7 +1,13 @@ +.content__wrapper { + width: 740px; +} + .content__embedded { background-color: var(--color-black); width: 100%; padding-top: var(--video-aspect-ratio); + padding-left: 36px; + padding-right: 36px; position: relative; display: flex; align-items: center; @@ -119,3 +125,8 @@ img { max-height: 100%; max-width: 100%; } + +.content__info { + padding-left: 24px; + width: 920px; +} diff --git a/src/renderer/scss/component/_file-list.scss b/src/renderer/scss/component/_file-list.scss index c7e21cc8d..871fe8e1f 100644 --- a/src/renderer/scss/component/_file-list.scss +++ b/src/renderer/scss/component/_file-list.scss @@ -22,11 +22,13 @@ .file-tile { display: flex; - margin-top: $spacing-vertical; + margin-top: $spacing-vertical * 1/3; .card__media { - height: var(--file-tile--media-height); - flex: 0 0 var(--file-tile--media-width); + // height: var(--file-tile--media-height); + // flex: 0 0 var(--file-tile--media-width); + height: 60px; + flex: 0 0 100px; } .card__subtitle { @@ -34,8 +36,7 @@ } } -.file-tile--fullwidth { - max-width: none; +.file-tile--small { } .file-tile__info { diff --git a/src/renderer/scss/component/_form-field.scss b/src/renderer/scss/component/_form-field.scss index 1c8db8db9..6e159fda0 100644 --- a/src/renderer/scss/component/_form-field.scss +++ b/src/renderer/scss/component/_form-field.scss @@ -51,6 +51,10 @@ width: 100%; } +.form-field__input.form-field--no-padding { + padding: 0; +} + .form-field__input { display: flex; padding-top: $spacing-vertical / 3; @@ -71,6 +75,10 @@ width: 400px; } + input.input--toggle { + padding: 0; + } + &.form-field--auto-height { height: auto; } diff --git a/src/renderer/scss/component/_header.scss b/src/renderer/scss/component/_header.scss index 32058ec7c..1f9ab038a 100644 --- a/src/renderer/scss/component/_header.scss +++ b/src/renderer/scss/component/_header.scss @@ -6,9 +6,13 @@ z-index: 1; justify-content: space-between; align-items: center; - padding: 0 $spacing-width; + padding: 0 $spacing-width * 1/3; background-color: var(--color-bg); box-shadow: var(--box-shadow-header); + + @media (min-width: $medium-breakpoint) { + padding: 0 $spacing-width; + } } .header__navigation { diff --git a/src/renderer/scss/component/_nav.scss b/src/renderer/scss/component/_nav.scss index 8dc4587a4..fb1162c9a 100644 --- a/src/renderer/scss/component/_nav.scss +++ b/src/renderer/scss/component/_nav.scss @@ -1,7 +1,7 @@ .nav { width: var(--side-nav-width); background-color: var(--nav-bg-color); - padding: $spacing-width; + padding: $spacing-width * 1/3; color: var(--nav-color); hr { @@ -11,8 +11,13 @@ margin: $spacing-vertical $spacing-vertical * 2/3; } + @media (min-width: $medium-breakpoint) { + padding-left: $spacing-width; + width: calc(var(--side-nav-width) * 1.2); + } + @media (min-width: $large-breakpoint) { - width: calc(var(--side-nav-width) * 1.1); + width: calc(var(--side-nav-width) * 1.4); } } From a7c6135afddf6b6101ccc1d6ea2a86c2cd32e74d Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 24 Jul 2018 21:10:33 -0400 Subject: [PATCH 02/22] fix spacing --- src/renderer/component/common/spinner.jsx | 0 src/renderer/component/recommendedVideos/index.js | 6 +----- src/renderer/component/recommendedVideos/view.jsx | 8 +++----- src/renderer/scss/component/_card.scss | 4 ++++ src/renderer/scss/component/_content.scss | 4 +++- 5 files changed, 11 insertions(+), 11 deletions(-) delete mode 100644 src/renderer/component/common/spinner.jsx diff --git a/src/renderer/component/common/spinner.jsx b/src/renderer/component/common/spinner.jsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/renderer/component/recommendedVideos/index.js b/src/renderer/component/recommendedVideos/index.js index 99c896103..2585158c8 100644 --- a/src/renderer/component/recommendedVideos/index.js +++ b/src/renderer/component/recommendedVideos/index.js @@ -1,14 +1,10 @@ import { connect } from 'react-redux'; import { doFetchClaimsByChannel } from 'redux/actions/content'; -import { - makeSelectClaimsInChannelForCurrentPage, - makeSelectFetchingChannelClaims, -} from 'lbry-redux'; +import { makeSelectClaimsInChannelForCurrentPage } from 'lbry-redux'; import RecommendedVideos from './view'; const select = (state, props) => ({ claimsInChannel: makeSelectClaimsInChannelForCurrentPage(props.channelUri)(state), - fetching: makeSelectFetchingChannelClaims(props.channelUri)(state), }); const perform = dispatch => ({ diff --git a/src/renderer/component/recommendedVideos/view.jsx b/src/renderer/component/recommendedVideos/view.jsx index 63c3488d3..a843d5ec5 100644 --- a/src/renderer/component/recommendedVideos/view.jsx +++ b/src/renderer/component/recommendedVideos/view.jsx @@ -8,24 +8,23 @@ import type { Claim } from 'types/claim'; type Props = { channelUri: ?string, claimsInChannel: ?Array, - fetching: boolean, fetchClaims: (string, number) => void, }; export default class RecommendedVideos extends React.PureComponent { componentDidMount() { const { channelUri, fetchClaims, claimsInChannel } = this.props; - if (!claimsInChannel) { + if (channelUri && !claimsInChannel) { fetchClaims(channelUri, 1); } } render() { - const { claimsInChannel, fetching } = this.props; + const { claimsInChannel } = this.props; return (
- + { /> - {fetching &&
Loading
} {claimsInChannel && claimsInChannel.map(({ permanent_url: permanentUrl }) => ( Date: Wed, 25 Jul 2018 00:23:58 -0400 Subject: [PATCH 03/22] wire up autoplay --- src/renderer/component/filePrice/view.jsx | 7 ++++++- src/renderer/component/recommendedVideos/index.js | 5 +++++ src/renderer/component/recommendedVideos/view.jsx | 8 +++++--- src/renderer/modal/modalAffirmPurchase/view.jsx | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/renderer/component/filePrice/view.jsx b/src/renderer/component/filePrice/view.jsx index d2a6a9245..ebb0318f1 100644 --- a/src/renderer/component/filePrice/view.jsx +++ b/src/renderer/component/filePrice/view.jsx @@ -9,7 +9,10 @@ type Props = { uri: string, fetching: boolean, claim: ?{}, + // below props are just passed to filePage?: boolean, + inheritStyle?: boolean, + showLBC?: boolean, }; class FilePrice extends React.PureComponent { @@ -34,12 +37,14 @@ class FilePrice extends React.PureComponent { }; render() { - const { costInfo, showFullPrice, filePage } = this.props; + const { costInfo, showFullPrice, filePage, inheritStyle, showLBC } = this.props; return costInfo ? ( ({ claimsInChannel: makeSelectClaimsInChannelForCurrentPage(props.channelUri)(state), + autoplay: makeSelectClientSetting(settings.AUTOPLAY)(state), }); const perform = dispatch => ({ fetchClaims: (uri, page) => dispatch(doFetchClaimsByChannel(uri, page)), + setAutoplay: value => dispatch(doSetClientSetting(settings.AUTOPLAY, value)), }); export default connect( diff --git a/src/renderer/component/recommendedVideos/view.jsx b/src/renderer/component/recommendedVideos/view.jsx index a843d5ec5..9236f42f0 100644 --- a/src/renderer/component/recommendedVideos/view.jsx +++ b/src/renderer/component/recommendedVideos/view.jsx @@ -8,6 +8,8 @@ import type { Claim } from 'types/claim'; type Props = { channelUri: ?string, claimsInChannel: ?Array, + autoplay: boolean, + setAutoplay: boolean => void, fetchClaims: (string, number) => void, }; @@ -20,7 +22,7 @@ export default class RecommendedVideos extends React.PureComponent { } render() { - const { claimsInChannel } = this.props; + const { claimsInChannel, autoplay, setAutoplay } = this.props; return (
@@ -32,8 +34,8 @@ export default class RecommendedVideos extends React.PureComponent { name="autoplay" type="checkbox" prefix={__('Autoplay')} - checked={false} - onChange={() => {}} + checked={autoplay} + onChange={e => setAutoplay(e.target.checked)} /> diff --git a/src/renderer/modal/modalAffirmPurchase/view.jsx b/src/renderer/modal/modalAffirmPurchase/view.jsx index 93b727b7c..df3a9301f 100644 --- a/src/renderer/modal/modalAffirmPurchase/view.jsx +++ b/src/renderer/modal/modalAffirmPurchase/view.jsx @@ -31,7 +31,7 @@ class ModalAffirmPurchase extends React.PureComponent { > {__('This will purchase')} {title} {__('for')}{' '} - + {' '} {__('credits')}. From bdca9f9b04554fca6b68285feabc4c55d157c6de Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Wed, 25 Jul 2018 00:45:24 -0400 Subject: [PATCH 04/22] filter out uri from content I am currently viewing --- .../index.js | 0 .../view.jsx | 30 ++++++++++++++++--- src/renderer/page/file/view.jsx | 4 +-- 3 files changed, 28 insertions(+), 6 deletions(-) rename src/renderer/component/{recommendedVideos => recommendedContent}/index.js (100%) rename src/renderer/component/{recommendedVideos => recommendedContent}/view.jsx (56%) diff --git a/src/renderer/component/recommendedVideos/index.js b/src/renderer/component/recommendedContent/index.js similarity index 100% rename from src/renderer/component/recommendedVideos/index.js rename to src/renderer/component/recommendedContent/index.js diff --git a/src/renderer/component/recommendedVideos/view.jsx b/src/renderer/component/recommendedContent/view.jsx similarity index 56% rename from src/renderer/component/recommendedVideos/view.jsx rename to src/renderer/component/recommendedContent/view.jsx index 9236f42f0..0d478e761 100644 --- a/src/renderer/component/recommendedVideos/view.jsx +++ b/src/renderer/component/recommendedContent/view.jsx @@ -4,8 +4,10 @@ import FileTile from 'component/fileTile'; import { FormRow, FormField } from 'component/common/form'; import ToolTip from 'component/common/tooltip'; import type { Claim } from 'types/claim'; +import { buildURI, parseURI } from 'lbry-redux'; type Props = { + uri: string, channelUri: ?string, claimsInChannel: ?Array, autoplay: boolean, @@ -13,7 +15,7 @@ type Props = { fetchClaims: (string, number) => void, }; -export default class RecommendedVideos extends React.PureComponent { +export default class RecommendedContent extends React.PureComponent { componentDidMount() { const { channelUri, fetchClaims, claimsInChannel } = this.props; if (channelUri && !claimsInChannel) { @@ -22,7 +24,27 @@ export default class RecommendedVideos extends React.PureComponent { } render() { - const { claimsInChannel, autoplay, setAutoplay } = this.props; + const { claimsInChannel, autoplay, uri, setAutoplay } = this.props; + + let recommendedContent; + if (claimsInChannel) { + recommendedContent = claimsInChannel.filter(claim => { + const { name, claim_id: claimId, channel_name: channelName, value } = claim; + const { isChannel } = parseURI(uri); + + // The uri may include the channel name + const recommendedUri = + isChannel && value && value.publisherSignature + ? buildURI({ + contentName: name, + claimName: channelName, + claimId: value.publisherSignature.certificateId, + }) + : buildURI({ claimName: name, claimId }); + + return recommendedUri !== uri; + }); + } return (
@@ -39,8 +61,8 @@ export default class RecommendedVideos extends React.PureComponent { /> - {claimsInChannel && - claimsInChannel.map(({ permanent_url: permanentUrl }) => ( + {recommendedContent && + recommendedContent.map(({ permanent_url: permanentUrl }) => ( {
- +
); From 1a516289058133b9302fc402587c22a3a0aac70d Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Wed, 25 Jul 2018 14:21:41 -0400 Subject: [PATCH 05/22] cleanup css --- .../common/form-components/form-field.jsx | 6 ++--- src/renderer/component/fileCard/view.jsx | 1 - src/renderer/component/fileTile/view.jsx | 12 ++++----- .../component/recommendedContent/view.jsx | 6 ++--- src/renderer/page/file/view.jsx | 6 ++--- src/renderer/scss/_gui.scss | 25 ++++++------------- src/renderer/scss/_vars.scss | 11 +++++--- src/renderer/scss/component/_card.scss | 13 +++------- src/renderer/scss/component/_content.scss | 12 ++------- src/renderer/scss/component/_file-list.scss | 16 +++++++----- src/renderer/scss/component/_form-field.scss | 6 +---- 11 files changed, 45 insertions(+), 69 deletions(-) diff --git a/src/renderer/component/common/form-components/form-field.jsx b/src/renderer/component/common/form-components/form-field.jsx index c9ff6c3b0..4c2045881 100644 --- a/src/renderer/component/common/form-components/form-field.jsx +++ b/src/renderer/component/common/form-components/form-field.jsx @@ -24,7 +24,7 @@ type Props = { stretch?: boolean, affixClass?: string, // class applied to prefix/postfix label useToggle?: boolean, - noPadding?: boolean, + firstInList?: boolean, // at the top of a list, no padding top }; export class FormField extends React.PureComponent { @@ -42,7 +42,7 @@ export class FormField extends React.PureComponent { stretch, affixClass, useToggle, - noPadding, + firstInList, ...inputProps } = this.props; @@ -110,7 +110,7 @@ export class FormField extends React.PureComponent {
{prefix && ( diff --git a/src/renderer/component/fileCard/view.jsx b/src/renderer/component/fileCard/view.jsx index a8d5d6e71..f7926eb6a 100644 --- a/src/renderer/component/fileCard/view.jsx +++ b/src/renderer/component/fileCard/view.jsx @@ -92,7 +92,6 @@ class FileCard extends React.PureComponent { onContextMenu={handleContextMenu} > -
{title} diff --git a/src/renderer/component/fileTile/view.jsx b/src/renderer/component/fileTile/view.jsx index 88bc3703c..2535eb886 100644 --- a/src/renderer/component/fileTile/view.jsx +++ b/src/renderer/component/fileTile/view.jsx @@ -110,7 +110,12 @@ class FileTile extends React.PureComponent { {isResolvingUri &&
{__('Loading...')}
} {!isResolvingUri && ( -
+
{title || name}
{ {description}
)} - { - //
- // - //
- } {!name && ( {__('This location is unused.')}{' '} diff --git a/src/renderer/component/recommendedContent/view.jsx b/src/renderer/component/recommendedContent/view.jsx index 0d478e761..df2ac55e6 100644 --- a/src/renderer/component/recommendedContent/view.jsx +++ b/src/renderer/component/recommendedContent/view.jsx @@ -47,12 +47,12 @@ export default class RecommendedContent extends React.PureComponent { } return ( -
+
{ uri={`lbry://${permanentUrl}`} /> ))} -
+ ); } } diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index dc4a0c5b1..5d27f3420 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -198,7 +198,7 @@ class FilePage extends React.Component {
-
- -
+ ); } diff --git a/src/renderer/scss/_gui.scss b/src/renderer/scss/_gui.scss index 8ccd2eaa7..8bd6f403c 100644 --- a/src/renderer/scss/_gui.scss +++ b/src/renderer/scss/_gui.scss @@ -206,6 +206,7 @@ p { .main--for-content { padding: $spacing-width * 2/3; display: flex; + justify-content: center; } .page__header { @@ -255,11 +256,10 @@ p { } .credit-amount { - border-radius: 5px; font-family: 'metropolis-bold'; font-size: 10px; - padding: 5px; white-space: nowrap; + padding: $spacing-vertical * 1/6 0; } .credit-amount--large { @@ -267,6 +267,11 @@ p { font-size: 36px; } +.credit-amount--file-page { + border-radius: 5px; + padding: 5px; +} + .credit-amount--free { color: var(--color-secondary); @@ -294,22 +299,6 @@ p { padding: 0; } -// .credit-amount--plain { -// background-color: inherit; -// color: inherit; -// font-weight: inherit; -// font-size: inherit; -// } - -// .credit-amount.credit-amount--no-style { -// padding: 0; -// font-size: inherit; -// font-weight: inherit; -// color: inherit; -// background-color: transparent; -// font-family: 'metropolis-medium'; -// } - .divider__horizontal { border-top: var(--color-divider); margin: 16px 0; diff --git a/src/renderer/scss/_vars.scss b/src/renderer/scss/_vars.scss index 2364e59d7..30649058e 100644 --- a/src/renderer/scss/_vars.scss +++ b/src/renderer/scss/_vars.scss @@ -153,9 +153,14 @@ $large-breakpoint: 1921px; --success-msg-border: var(--color-green-blue); --success-msg-bg: var(--color-green-light); - /* File Tile Card */ - --file-tile--media-height: 125px; - --file-tile--media-width: calc(125px * (16 / 9)); + /* File */ + --file-tile-media-height: 125px; + --file-tile-media-width: calc(125px * (16 / 9)); + --file-tile-media-height-small: 60px; + --file-tile-media-width-small: calc(60px * (16 / 9)); + --file-page-min-width: 400px; + --recommended-content-width: 300px; + --recommended-content-width-medium: 400px; /* Modal */ --modal-width: 440px; diff --git a/src/renderer/scss/component/_card.scss b/src/renderer/scss/component/_card.scss index e518164b8..601f0e7a8 100644 --- a/src/renderer/scss/component/_card.scss +++ b/src/renderer/scss/component/_card.scss @@ -200,11 +200,6 @@ margin-top: $spacing-vertical * 2/3; } -.card__content--columns { - display: flex; - padding: 0; -} - .card__content--extra-padding { margin-top: $spacing-vertical * 3/2; } @@ -422,13 +417,11 @@ } .card__list--recommended { - min-width: 300px; - flex-basis: auto; /* default value */ - flex-grow: 1; + flex: 0 0 var(--recommended-content-width); padding-left: $spacing-width; - .card { - display: block; + @media (min-width: $medium-breakpoint) { + flex: 0 0 var(--recommended-content-width-medium); } } diff --git a/src/renderer/scss/component/_content.scss b/src/renderer/scss/component/_content.scss index f0f0d8219..ea0c7b3e4 100644 --- a/src/renderer/scss/component/_content.scss +++ b/src/renderer/scss/component/_content.scss @@ -1,15 +1,12 @@ .content__wrapper { - min-width: 400px; - flex-basis: auto; /* default value */ - flex-grow: 1; + max-width: var(--card-max-width); + flex: 1 0 var(--file-page-min-width); } .content__embedded { background-color: var(--color-black); width: 100%; padding-top: var(--video-aspect-ratio); - padding-left: 36px; - padding-right: 36px; position: relative; display: flex; align-items: center; @@ -127,8 +124,3 @@ img { max-height: 100%; max-width: 100%; } - -.content__info { - padding-left: 24px; - width: 920px; -} diff --git a/src/renderer/scss/component/_file-list.scss b/src/renderer/scss/component/_file-list.scss index 871fe8e1f..b4ed9e7ac 100644 --- a/src/renderer/scss/component/_file-list.scss +++ b/src/renderer/scss/component/_file-list.scss @@ -22,13 +22,11 @@ .file-tile { display: flex; - margin-top: $spacing-vertical * 1/3; + padding-top: $spacing-vertical; .card__media { - // height: var(--file-tile--media-height); - // flex: 0 0 var(--file-tile--media-width); - height: 60px; - flex: 0 0 100px; + height: var(--file-tile-media-height); + flex: 0 0 var(--file-tile-media-width); } .card__subtitle { @@ -36,7 +34,13 @@ } } -.file-tile--small { +.file-tile.file-tile--small { + padding-top: $spacing-vertical * 2/3; + + .card__media { + height: var(--file-tile-media-height-small); + flex: 0 0 var(--file-tile-media-width-small); + } } .file-tile__info { diff --git a/src/renderer/scss/component/_form-field.scss b/src/renderer/scss/component/_form-field.scss index 6e159fda0..f27667ec2 100644 --- a/src/renderer/scss/component/_form-field.scss +++ b/src/renderer/scss/component/_form-field.scss @@ -51,7 +51,7 @@ width: 100%; } -.form-field__input.form-field--no-padding { +.form-field__input.form-field--first-item { padding: 0; } @@ -75,10 +75,6 @@ width: 400px; } - input.input--toggle { - padding: 0; - } - &.form-field--auto-height { height: auto; } From 87f8988faad61a0f543e84793cd9ca16b3b43a4a Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Wed, 25 Jul 2018 14:37:51 -0400 Subject: [PATCH 06/22] fix fileCard title spacing --- src/renderer/component/fileCard/view.jsx | 2 +- src/renderer/scss/component/_card.scss | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/renderer/component/fileCard/view.jsx b/src/renderer/component/fileCard/view.jsx index f7926eb6a..f63e23d13 100644 --- a/src/renderer/component/fileCard/view.jsx +++ b/src/renderer/component/fileCard/view.jsx @@ -93,7 +93,7 @@ class FileCard extends React.PureComponent { >
-
+
{title}
diff --git a/src/renderer/scss/component/_card.scss b/src/renderer/scss/component/_card.scss index 601f0e7a8..a11db8ac4 100644 --- a/src/renderer/scss/component/_card.scss +++ b/src/renderer/scss/component/_card.scss @@ -134,6 +134,10 @@ font-size: 18px; } +.card__title--file-card { + padding-top: $spacing-vertical * 1/3; +} + .card__subtitle { margin: 0; font-size: 14px; From ad0c356c1e53e321163a23d2cb375e7bccb284da Mon Sep 17 00:00:00 2001 From: Daniel Dominguez Date: Fri, 27 Jul 2018 17:58:56 -0300 Subject: [PATCH 07/22] Differentiate between failed thumbnail url and emtpy url images. --- src/renderer/component/selectThumbnail/view.jsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/renderer/component/selectThumbnail/view.jsx b/src/renderer/component/selectThumbnail/view.jsx index 1fcd59cb6..54be60fab 100644 --- a/src/renderer/component/selectThumbnail/view.jsx +++ b/src/renderer/component/selectThumbnail/view.jsx @@ -18,6 +18,7 @@ type Props = { type State = { thumbnailError: boolean, + thumbnailErrorImage: string, }; class SelectThumbnail extends React.PureComponent { @@ -26,6 +27,7 @@ class SelectThumbnail extends React.PureComponent { this.state = { thumbnailError: false, + thumbnailErrorImage: 'no-thumbnail.png', }; (this: any).handleThumbnailChange = this.handleThumbnailChange.bind(this); @@ -36,7 +38,7 @@ class SelectThumbnail extends React.PureComponent { const newThumbnail = e.target.value.replace(' ', ''); updatePublishForm({ thumbnail: newThumbnail }); - this.setState({ thumbnailError: false }); + this.setState({ thumbnailError: false, thumbnailErrorImage: 'no-thumbnail.png' }); } render() { @@ -49,9 +51,9 @@ class SelectThumbnail extends React.PureComponent { thumbnailPath, resetThumbnailStatus, } = this.props; - const { thumbnailError } = this.state; + const { thumbnailError, thumbnailErrorImage } = this.state; const thumbnailSrc = - !thumbnail || thumbnailError ? Native.imagePath('no-thumbnail.png') : thumbnail; + !thumbnail || thumbnailError ? Native.imagePath(thumbnailErrorImage) : thumbnail; return (
@@ -62,7 +64,11 @@ class SelectThumbnail extends React.PureComponent { className="column__item thumbnail-preview" alt={__('Thumbnail Preview')} onError={() => { - this.setState({ thumbnailError: true }); + this.setState({ + thumbnailError: true, + thumbnailErrorImage: + thumbnail && thumbnail.length > 0 ? 'warning.png' : 'no-thumbnail.png', + }); }} />
From 42a3759cc05e83691be980209edf184e78cdd443 Mon Sep 17 00:00:00 2001 From: Aliyev Doniyor Date: Sat, 28 Jul 2018 12:47:45 +0500 Subject: [PATCH 08/22] Disable confirm button after pressing "Use It Now" button Closes #1823 --- .../modal/modalAutoUpdateDownloaded/view.jsx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx b/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx index 544eb4f02..c10eace7a 100644 --- a/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx +++ b/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx @@ -1,9 +1,23 @@ +// @flow import React from 'react'; import { ipcRenderer } from 'electron'; import { Modal } from 'modal/modal'; import Button from 'component/button'; -class ModalAutoUpdateDownloaded extends React.PureComponent { +type Props = { + closeModal: any => any, + declineAutoUpdate: () => any, +}; + +class ModalAutoUpdateDownloaded extends React.PureComponent { + constructor(props: ModalProps) { + super(props); + + this.state = { + disabled: false, + }; + } + render() { const { closeModal, declineAutoUpdate } = this.props; @@ -14,7 +28,9 @@ class ModalAutoUpdateDownloaded extends React.PureComponent { contentLabel={__('Update Downloaded')} confirmButtonLabel={__('Use it Now')} abortButtonLabel={__('Upgrade on Close')} + confirmButtonDisabled={this.state.disabled} onConfirmed={() => { + this.setState({ disabled: true }); ipcRenderer.send('autoUpdateAccepted'); }} onAborted={() => { From 1db3838c0fa5c468922ea0f4a7b8de101de050e3 Mon Sep 17 00:00:00 2001 From: YULIUS KURNIAWAN KRISTIANTO Date: Tue, 31 Jul 2018 01:24:40 +0700 Subject: [PATCH 09/22] add FAQ to Publish Form --- src/renderer/component/publishForm/view.jsx | 23 ++++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/renderer/component/publishForm/view.jsx b/src/renderer/component/publishForm/view.jsx index c291ccaee..cf79d755a 100644 --- a/src/renderer/component/publishForm/view.jsx +++ b/src/renderer/component/publishForm/view.jsx @@ -53,7 +53,7 @@ type Props = { clearPublish: () => void, resolveUri: string => void, scrollToTop: () => void, - prepareEdit: ({}) => void, + prepareEdit: ({ }) => void, resetThumbnailStatus: () => void, }; @@ -345,6 +345,13 @@ class PublishForm extends React.PureComponent {
{__('Content')}
{isStillEditing ? __('Editing a claim') : __('What are you publishing?')} + {' '}{__( + 'Read Our' + )}{' '} +
{(filePath || !!editingURI) && (
@@ -402,12 +409,12 @@ class PublishForm extends React.PureComponent { {uploadThumbnailStatus === THUMBNAIL_STATUSES.API_DOWN ? ( __('Enter a URL for your thumbnail.') ) : ( - - {__('Upload your thumbnail (.png/.jpg/.jpeg/.gif) to')}{' '} -
{ !channel || channel === CHANNEL_ANONYMOUS || channel === CHANNEL_NEW ? '' : `${channel}/` - }`} + }`} type="text" name="content_name" placeholder="myname" From 1a3d02b8c4843d0895e043e46e39e7c3ede5bc0a Mon Sep 17 00:00:00 2001 From: YULIUS KURNIAWAN KRISTIANTO Date: Tue, 31 Jul 2018 01:27:46 +0700 Subject: [PATCH 10/22] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75a1301b6..f662a36e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). ### Added * Wallet Encryption/Decryption user flows ([#1785](https://github.com/lbryio/lbry-desktop/pull/1785)) +* Add FAQ to Publishing Area ([#1833](https://github.com/lbryio/lbry-desktop/pull/1833)) ### Changed From b448d23dbf095ff347cb56aa757251d6ee9d568e Mon Sep 17 00:00:00 2001 From: Daniel Dominguez Date: Mon, 30 Jul 2018 15:44:03 -0300 Subject: [PATCH 11/22] Add new png to show up when the image can't be loaded. --- src/renderer/component/selectThumbnail/view.jsx | 2 +- static/img/broken.png | Bin 0 -> 6714 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 static/img/broken.png diff --git a/src/renderer/component/selectThumbnail/view.jsx b/src/renderer/component/selectThumbnail/view.jsx index 54be60fab..a3dd3b208 100644 --- a/src/renderer/component/selectThumbnail/view.jsx +++ b/src/renderer/component/selectThumbnail/view.jsx @@ -67,7 +67,7 @@ class SelectThumbnail extends React.PureComponent { this.setState({ thumbnailError: true, thumbnailErrorImage: - thumbnail && thumbnail.length > 0 ? 'warning.png' : 'no-thumbnail.png', + thumbnail && thumbnail.length > 0 ? 'broken.png' : 'no-thumbnail.png', }); }} /> diff --git a/static/img/broken.png b/static/img/broken.png new file mode 100644 index 0000000000000000000000000000000000000000..a81bee0d7a56b77f96df62ce6c67bbb60d94c208 GIT binary patch literal 6714 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 ZpdR!W&sKWBaKe*gx>|JDEi literal 0 HcmV?d00001 From ef1a47f066f6fa18443e25bd5efe8ee94d5ea421 Mon Sep 17 00:00:00 2001 From: YULIUS KURNIAWAN KRISTIANTO Date: Tue, 31 Jul 2018 02:24:00 +0700 Subject: [PATCH 12/22] lowercase --- src/renderer/component/publishForm/view.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/component/publishForm/view.jsx b/src/renderer/component/publishForm/view.jsx index cf79d755a..dec69e685 100644 --- a/src/renderer/component/publishForm/view.jsx +++ b/src/renderer/component/publishForm/view.jsx @@ -346,7 +346,7 @@ class PublishForm extends React.PureComponent {
{isStillEditing ? __('Editing a claim') : __('What are you publishing?')} {' '}{__( - 'Read Our' + 'Read our' )}{' '}