From 542107db78d48f74488fc4b71934edfb98b2242d Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 4 Oct 2018 21:05:34 +0100 Subject: [PATCH 01/59] Changed Horizontal Split to be vertical + Whitespace to linebreak descriptions. --- client/scss/asset-display/_asset-display.scss | 4 ++++ client/src/containers/AssetInfo/view.jsx | 13 +++++++------ client/src/pages/ShowAssetDetails/view.jsx | 8 ++++---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 11d42c4c..b2650f75 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -20,3 +20,7 @@ .vertical-split .asset-display { height: 90vh; } + +.asset-description { + white-space: pre-line; +} diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index ccf88fbd..e684e266 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -12,6 +12,13 @@ class AssetInfo extends React.Component { const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props; return (
+ + {description && ( + +

{description}

+
+ )} + {channelName && ( - {description && ( - -

{description}

-
- )} -

Hosted via the LBRY blockchain diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index 98c09372..b50b3682 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; import PageLayout from '@components/PageLayout'; -import HorizontalSplit from '@components/HorizontalSplit'; +import VerticalSplit from '@components/VerticalSplit'; import AssetTitle from '@containers/AssetTitle'; import AssetDisplay from '@containers/AssetDisplay'; import AssetInfo from '@containers/AssetInfo'; @@ -18,9 +18,9 @@ class ShowAssetDetails extends React.Component { asset={asset} > - } - rightSide={} + } + bottom={} /> ); From 431757cea4c251fe680af245c71332d1cbec5cb5 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sat, 6 Oct 2018 18:24:55 +0100 Subject: [PATCH 02/59] Moving description into horizontal split + added brand color for links --- client/scss/variables/_variables.scss | 1 + client/src/containers/AssetInfo/view.jsx | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index 26f125d8..c1cb3289 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -5,6 +5,7 @@ $tertiary-color: #ccccc0; $interactive-color: blue; $success-color: green; $failure-color: red; +$brand-color: #ff725d; $primary-padding: 3em; $secondary-padding: 2em; diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index e684e266..71a26885 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -5,19 +5,24 @@ import RowLabeled from '@components/RowLabeled'; import Row from '@components/Row'; import SpaceBetween from '@components/SpaceBetween'; import AssetShareButtons from '@components/AssetShareButtons'; +import HorizontalSplit from '@components/HorizontalSplit'; import ClickToCopy from '@components/ClickToCopy'; class AssetInfo extends React.Component { render () { const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props; return ( -

- - {description && ( - -

{description}

-
- )} +
+ + {description && ( +

{description}

+ )} +
+ } + rightSide={''} + /> {channelName && ( From 81f97c133197d1b34b2b63d1d88d2fd3da4c318b Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sat, 6 Oct 2018 18:56:42 +0100 Subject: [PATCH 03/59] New row compontent to prevent it intefering with everything else + link colours changed --- client/src/components/RowLabeledAlt/index.jsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 client/src/components/RowLabeledAlt/index.jsx diff --git a/client/src/components/RowLabeledAlt/index.jsx b/client/src/components/RowLabeledAlt/index.jsx new file mode 100644 index 00000000..d5e2c7d0 --- /dev/null +++ b/client/src/components/RowLabeledAlt/index.jsx @@ -0,0 +1,14 @@ +import React from 'react'; + +class RowLabeledAlt extends React.Component { + render () { + return ( +
+
{this.props.label}
+
{this.props.content}
+
+ ); + } +} + +export default RowLabeledAlt; From e0b15691b9a11b3d35c4baa2ee5a93bc882a6aeb Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sat, 6 Oct 2018 18:57:11 +0100 Subject: [PATCH 04/59] Forgot to stage the rest of my code, thanks VS Code. --- client/scss/link/_link.scss | 4 + client/scss/row/_row.scss | 17 ++ client/src/containers/AssetInfo/view.jsx | 202 ++++++++++++----------- 3 files changed, 124 insertions(+), 99 deletions(-) diff --git a/client/scss/link/_link.scss b/client/scss/link/_link.scss index 4553605e..ee5cc8c7 100644 --- a/client/scss/link/_link.scss +++ b/client/scss/link/_link.scss @@ -6,6 +6,10 @@ a, a:visited { color: $interactive-color; } +.link--brand, .link--brand:visited { + color: $brand-color; +} + .link--secondary, .link--secondary:visited { margin: 0px; padding: 0.3em; diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index 3b731ac0..fb5f3534 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -18,6 +18,23 @@ width: 70%; } +.row-labeled-alt { + display: column; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-start; + + .row-labeled-label { + align-self: flex-start; + width: 100%; + } + + .row-labeled-content { + align-self: center; + width: 100%; + } +} + @media (max-width: $break-point-medium ) { diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 71a26885..63d8d669 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -12,7 +12,7 @@ class AssetInfo extends React.Component { render () { const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props; return ( -
+
@@ -21,106 +21,110 @@ class AssetInfo extends React.Component { )}
} - rightSide={''} + rightSide={ +
+ {channelName && ( + + + } + content={ + + {channelName} + + } + /> + + )} + + + + } + content={ + + } + /> + + + + + } + content={ + + } + /> + + + + + } + content={ +
+ {(contentType === 'video/mp4') ? ( + `} + /> + ) : ( + `} + /> + )} +
+ } + /> +
+ + + + + Direct Link + + + Download + + + Report + + + + + +

+ Hosted via the LBRY blockchain +

+
+ +
+ } /> - {channelName && ( - - - } - content={ - - {channelName} - - } - /> - - )} - - - - } - content={ - - } - /> - - - - - } - content={ - - } - /> - - - - - } - content={ -
- {(contentType === 'video/mp4') ? ( - `} - /> - ) : ( - `} - /> - )} -
- } - /> -
- - - - - Direct Link - - - Download - - - Report - - - - - -

- Hosted via the LBRY blockchain -

-
); From dba4d15a67fbebbd4eff7aebb9ae0af4e3977ca4 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 7 Oct 2018 17:38:49 +0100 Subject: [PATCH 05/59] New Row put to use + style changes to match design --- client/scss/asset-display/_asset-display.scss | 12 ++++++++++++ client/scss/click-to-copy/_click-to-copy.scss | 7 ++++++- client/scss/row/_row.scss | 2 ++ client/scss/variables/_variables.scss | 1 + client/src/containers/AssetDisplay/view.jsx | 3 +++ client/src/containers/AssetInfo/view.jsx | 10 +++++----- client/src/containers/AssetTitle/view.jsx | 7 +++---- client/src/pages/ShowAssetDetails/view.jsx | 4 ++-- 8 files changed, 34 insertions(+), 12 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index b2650f75..1e7c3c87 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -5,6 +5,18 @@ justify-content: center; } +.asset-title-wrap { + margin-top: 90px; + .asset-title { + font-weight: normal; + font-size: 26px; + color: #2E2F31; + letter-spacing: 0; + text-align: center; + line-height: 32px; + } +} + .asset-image, .asset-video { margin : 0; max-width: 100%; diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index a8dc776f..ac80cda3 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -1,9 +1,14 @@ .click-to-copy { cursor: pointer; - border: 1px solid black; + border: none; padding: 0.5em; margin: 0; color: black; background-color: white; width: calc(100% - 1em - 2px); + font-size: 14px; + color: #2E2F31; + letter-spacing: -0.6px; + line-height: 20px; + } diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index fb5f3534..1789f1d6 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -27,6 +27,8 @@ .row-labeled-label { align-self: flex-start; width: 100%; + color: $grey; + font-size: 12px; } .row-labeled-content { diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index c1cb3289..b33e1cfa 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -6,6 +6,7 @@ $interactive-color: blue; $success-color: green; $failure-color: red; $brand-color: #ff725d; +$grey: #a9adba; $primary-padding: 3em; $secondary-padding: 2em; diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index e07bfa78..4259719b 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import AssetTitle from '@containers/AssetTitle'; import ProgressBar from '@components/ProgressBar'; import { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from '../../constants/asset_display_states'; @@ -63,7 +64,9 @@ class AssetDisplay extends React.Component { } })() } +
+ ); } }; diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 63d8d669..5ba1f997 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { Link } from 'react-router-dom'; import Label from '@components/Label'; -import RowLabeled from '@components/RowLabeled'; +import RowLabeledAlt from '@components/RowLabeledAlt'; import Row from '@components/Row'; import SpaceBetween from '@components/SpaceBetween'; import AssetShareButtons from '@components/AssetShareButtons'; @@ -25,7 +25,7 @@ class AssetInfo extends React.Component {
{channelName && ( - } @@ -39,7 +39,7 @@ class AssetInfo extends React.Component { )} - } @@ -54,7 +54,7 @@ class AssetInfo extends React.Component { - } @@ -68,7 +68,7 @@ class AssetInfo extends React.Component { - } diff --git a/client/src/containers/AssetTitle/view.jsx b/client/src/containers/AssetTitle/view.jsx index a542c762..7821920a 100644 --- a/client/src/containers/AssetTitle/view.jsx +++ b/client/src/containers/AssetTitle/view.jsx @@ -1,11 +1,10 @@ import React from 'react'; -import Row from '@components/Row'; const AssetTitle = ({ title }) => { return ( - -

{title}

-
+
+

{title}

+
); }; diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index b50b3682..ed6bea8b 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -2,7 +2,7 @@ import React from 'react'; import PageLayout from '@components/PageLayout'; import VerticalSplit from '@components/VerticalSplit'; -import AssetTitle from '@containers/AssetTitle'; +// import AssetTitle from '@containers/AssetTitle'; import AssetDisplay from '@containers/AssetDisplay'; import AssetInfo from '@containers/AssetInfo'; import ErrorPage from '@pages/ErrorPage'; @@ -17,7 +17,7 @@ class ShowAssetDetails extends React.Component { pageTitle={`${name} - details`} asset={asset} > - + } bottom={} From 3023b25eb2333ef4f3e5b8148a7993d22b478589 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 7 Oct 2018 23:35:35 +0100 Subject: [PATCH 06/59] Clean up --- client/scss/asset-display/_asset-display.scss | 6 +++++- client/src/containers/AssetInfo/view.jsx | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 1e7c3c87..2afe4f16 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -33,6 +33,10 @@ height: 90vh; } -.asset-description { +p.asset-description { white-space: pre-line; + font-size: 14px; + color: #2E2F31; + letter-spacing: 0; + line-height: 18px; } diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 5ba1f997..d385b9c4 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -15,9 +15,9 @@ class AssetInfo extends React.Component {
+
{description && ( -

{description}

+

{description}

)}
} From 5f99629930b193b853998548ef3ae9bb54f37ab0 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 8 Oct 2018 20:51:09 +0100 Subject: [PATCH 07/59] Feather icons added, use click to copy, scss added to fit in icon + Lora font. --- client/scss/asset-display/_asset-display.scss | 24 +++++++++---- client/scss/click-to-copy/_click-to-copy.scss | 34 ++++++++++++------- client/scss/label/_label.scss | 1 + client/scss/text/_text.scss | 4 +-- client/src/components/ClickToCopy/index.jsx | 22 +++++++----- client/src/containers/AssetInfo/view.jsx | 1 - package-lock.json | 5 +++ package.json | 1 + server/render/renderFullPage.js | 2 ++ 9 files changed, 63 insertions(+), 31 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 2afe4f16..a3f84b26 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -33,10 +33,20 @@ height: 90vh; } -p.asset-description { - white-space: pre-line; - font-size: 14px; - color: #2E2F31; - letter-spacing: 0; - line-height: 18px; -} + +.asset-information-wrap { + max-width: 800px; + + p.asset-description { + white-space: pre-line; + font-size: 14px; + color: #2E2F31; + letter-spacing: 0; + line-height: 18px; + } + + .asset-information { + width: 320px; + } + +} \ No newline at end of file diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index ac80cda3..3c6bd191 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -1,14 +1,24 @@ -.click-to-copy { - cursor: pointer; - border: none; - padding: 0.5em; - margin: 0; - color: black; - background-color: white; - width: calc(100% - 1em - 2px); - font-size: 14px; - color: #2E2F31; - letter-spacing: -0.6px; - line-height: 20px; +.click-to-copy-wrap { + display: flex; + width: 100%; + justify-content: space-between; + .click-to-copy { + cursor: pointer; + border: none; + padding: 0.5em; + margin: 0; + color: black; + background-color: white; + width: calc(100% - 1em - 2px); + font-size: 14px; + color: #2E2F31; + letter-spacing: -0.6px; + line-height: 20px; + max-width: 200px; + } + svg { + stroke: $brand-color; + } } + diff --git a/client/scss/label/_label.scss b/client/scss/label/_label.scss index a801c8b6..c3d96ae3 100644 --- a/client/scss/label/_label.scss +++ b/client/scss/label/_label.scss @@ -2,6 +2,7 @@ padding-top: $thin-padding; padding-bottom: $thin-padding; display: inline-block; + font-size: 12px; } .label-radio { diff --git a/client/scss/text/_text.scss b/client/scss/text/_text.scss index cec1c28e..a8b72aa0 100644 --- a/client/scss/text/_text.scss +++ b/client/scss/text/_text.scss @@ -18,8 +18,8 @@ h3 { } p, body, button, input, textarea, label, select, option { - font-family: 'Lekton', monospace; - font-size: $text-large; + font-family: 'Lora', serif; + font-size: 16px; } .text--extra-large { diff --git a/client/src/components/ClickToCopy/index.jsx b/client/src/components/ClickToCopy/index.jsx index 35b7dba8..9c30d8be 100644 --- a/client/src/components/ClickToCopy/index.jsx +++ b/client/src/components/ClickToCopy/index.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import * as Icon from 'react-feather'; class ClickToCopy extends React.Component { constructor (props) { @@ -18,15 +19,18 @@ class ClickToCopy extends React.Component { render () { const {id, value} = this.props; return ( - +
+ + +
); } } diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index d385b9c4..b150b488 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -125,7 +125,6 @@ class AssetInfo extends React.Component { } /> -
); } diff --git a/package-lock.json b/package-lock.json index f45c2e93..db4b9a57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11090,6 +11090,11 @@ "prop-types": "15.6.2" } }, + "react-feather": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/react-feather/-/react-feather-1.1.3.tgz", + "integrity": "sha512-5+KHu7zp5qvc+zq6N0XjeZDhufl3NVEaQyocg486lXZ+ZwW9z66GO+HXABoZ74OCLjsqhBl48j4BS17VRfyjTQ==" + }, "react-ga": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-2.5.3.tgz", diff --git a/package.json b/package.json index 524db99f..04a557c6 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "prop-types": "^15.6.2", "react": "^16.4.2", "react-dom": "^16.4.2", + "react-feather": "^1.1.3", "react-ga": "^2.5.3", "react-helmet": "^5.2.0", "react-redux": "^5.0.6", diff --git a/server/render/renderFullPage.js b/server/render/renderFullPage.js index 0d3d0fc4..8f40e2b2 100644 --- a/server/render/renderFullPage.js +++ b/server/render/renderFullPage.js @@ -15,6 +15,7 @@ module.exports = (helmet, html, preloadedState) => { +
${html}
@@ -22,6 +23,7 @@ module.exports = (helmet, html, preloadedState) => { window.__PRELOADED_STATE__ = ${JSON.stringify(preloadedState).replace(/ + `; From 57fab11316398dca09ebae7d3187a26dd1f64463 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Tue, 9 Oct 2018 20:55:59 +0100 Subject: [PATCH 08/59] Click to copy to work with entire div including icon --- client/scss/click-to-copy/_click-to-copy.scss | 2 +- client/src/components/ClickToCopy/index.jsx | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index 3c6bd191..ee630eac 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -2,8 +2,8 @@ display: flex; width: 100%; justify-content: space-between; + cursor: pointer; .click-to-copy { - cursor: pointer; border: none; padding: 0.5em; margin: 0; diff --git a/client/src/components/ClickToCopy/index.jsx b/client/src/components/ClickToCopy/index.jsx index 9c30d8be..832ce973 100644 --- a/client/src/components/ClickToCopy/index.jsx +++ b/client/src/components/ClickToCopy/index.jsx @@ -6,9 +6,10 @@ class ClickToCopy extends React.Component { super(props); this.copyToClipboard = this.copyToClipboard.bind(this); } - copyToClipboard (event) { - const elementToCopy = event.target.id; + copyToClipboard () { + const elementToCopy = this.props.id; const element = document.getElementById(elementToCopy); + console.log(elementToCopy); element.select(); try { document.execCommand('copy'); @@ -19,11 +20,13 @@ class ClickToCopy extends React.Component { render () { const {id, value} = this.props; return ( -
+
Date: Thu, 11 Oct 2018 20:51:34 +0100 Subject: [PATCH 09/59] Design cleanup --- client/scss/asset-display/_asset-display.scss | 39 +++++-- client/scss/page-layout/_page-layout.scss | 1 - .../VerticalCollapsibleSplit/index.jsx | 18 +++ client/src/containers/AssetDisplay/view.jsx | 104 +++++++++--------- client/src/pages/ShowAssetDetails/view.jsx | 6 +- 5 files changed, 106 insertions(+), 62 deletions(-) create mode 100644 client/src/components/VerticalCollapsibleSplit/index.jsx diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index a3f84b26..7887a0c8 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -3,11 +3,32 @@ flex: 1 0 auto; flex-direction: column; justify-content: center; + + background: #E9E8E8; + width: 100%; + position: relative; + &:before, + &:after { + content: ''; + position: absolute; + box-shadow: inset 0 1px 3px 2px rgba(169, 173, 186, 0.2); + width: 100%; + height: 1px; + background: transparent; + left: 0; + top: 0; + } + + &:after { + top: auto; + bottom: 0; + } + } -.asset-title-wrap { - margin-top: 90px; + .asset-title { + margin-top: 40px; font-weight: normal; font-size: 26px; color: #2E2F31; @@ -15,10 +36,9 @@ text-align: center; line-height: 32px; } -} .asset-image, .asset-video { - margin : 0; + margin : 60px 0; max-width: 100%; max-height: 100%; object-fit: contain; @@ -29,10 +49,15 @@ margin: 16px; padding: 6px; } -.vertical-split .asset-display { - height: 90vh; -} +// .vertical-split .asset-display { +// height: 90vh; +// } + +.visible-content { + width: 100%; + margin: 0 0 40px; +} .asset-information-wrap { max-width: 800px; diff --git a/client/scss/page-layout/_page-layout.scss b/client/scss/page-layout/_page-layout.scss index f94645a5..06f6dae7 100644 --- a/client/scss/page-layout/_page-layout.scss +++ b/client/scss/page-layout/_page-layout.scss @@ -7,6 +7,5 @@ display: flex; -webkit-flex-direction: column; flex-direction: column; - margin: $primary-padding; } } diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx new file mode 100644 index 00000000..a194f7c0 --- /dev/null +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -0,0 +1,18 @@ +import React from 'react'; + +class VerticalCollapsibleSplit extends React.Component { + render () { + return ( +
+
+ {this.props.top} +
+
+ {this.props.bottom} +
+
+ ); + } +} + +export default VerticalCollapsibleSplit; diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index 4259719b..4de29bb3 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -12,58 +12,60 @@ class AssetDisplay extends React.Component { const { status, error, asset: { claimData: { name, claimId, contentType, fileExt, thumbnail } } } = this.props; const sourceUrl = `/${claimId}/${name}.${fileExt}`; return ( -
- {(status === LOCAL_CHECK) && -
-

Checking to see if Spee.ch has your asset locally...

-
- } - {(status === UNAVAILABLE) && -
-

Sit tight, we're searching the LBRY blockchain for your asset!

- -

Curious what magic is happening here? Learn more.

-
- } - {(status === ERROR) && -
-

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the below error message in the LBRY discord.

-

{error}

-
- } - {(status === AVAILABLE) && - (() => { - switch (contentType) { - case 'image/jpeg': - case 'image/jpg': - case 'image/png': - case 'image/gif': - return ( - {name} - ); - case 'video/mp4': - return ( - - ); - default: - return ( -

Unsupported content type

- ); +
+
+ {(status === LOCAL_CHECK) && +
+

Checking to see if Spee.ch has your asset locally...

+
} - })() - } + {(status === UNAVAILABLE) && +
+

Sit tight, we're searching the LBRY blockchain for your asset!

+ +

Curious what magic is happening here? Learn more.

+
+ } + {(status === ERROR) && +
+

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the below error message in the LBRY discord.

+

{error}

+
+ } + {(status === AVAILABLE) && + (() => { + switch (contentType) { + case 'image/jpeg': + case 'image/jpg': + case 'image/png': + case 'image/gif': + return ( + {name} + ); + case 'video/mp4': + return ( + + ); + default: + return ( +

Unsupported content type

+ ); + } + })() + } +
diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index ed6bea8b..f3eef3c8 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -1,7 +1,8 @@ import React from 'react'; import PageLayout from '@components/PageLayout'; -import VerticalSplit from '@components/VerticalSplit'; +import VerticalCollapsibleSplit from '@components/VerticalCollapsibleSplit'; +// import VerticalSplit from '@components/VerticalSplit'; // import AssetTitle from '@containers/AssetTitle'; import AssetDisplay from '@containers/AssetDisplay'; import AssetInfo from '@containers/AssetInfo'; @@ -17,8 +18,7 @@ class ShowAssetDetails extends React.Component { pageTitle={`${name} - details`} asset={asset} > - - } bottom={} /> From b3d05c7b82997f18600aeba7ad0b61ffb2cfecd4 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 11 Oct 2018 21:36:16 +0100 Subject: [PATCH 10/59] Collapse Logic and styling in place --- client/scss/asset-display/_asset-display.scss | 3 +-- .../scss/vertical-split/_vertical-split.scss | 17 +++++++++++++++ .../VerticalCollapsibleSplit/index.jsx | 21 ++++++++++++++++--- client/src/pages/ShowAssetDetails/view.jsx | 1 + 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 7887a0c8..b756ccbd 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -61,15 +61,14 @@ .asset-information-wrap { max-width: 800px; - p.asset-description { white-space: pre-line; font-size: 14px; color: #2E2F31; letter-spacing: 0; line-height: 18px; + width: 360px; } - .asset-information { width: 320px; } diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index ac100b08..665e4c80 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -5,3 +5,20 @@ justify-content: space-between; align-items : center; }; + +.collapse-content.hidden{ + display: none; +} + +.collapse-button { + outline: none; + background: none; + border: none; + display: block; + margin: 15px auto 0; + width: 24px; + height: 24px; + svg { + stroke: $brand-color; + } +} \ No newline at end of file diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index a194f7c0..6602b108 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -1,18 +1,33 @@ import React from 'react'; - +import * as Icon from 'react-feather'; class VerticalCollapsibleSplit extends React.Component { + + constructor (props) { + super(props); + this.collapse = this.collapse.bind(this); + this.state = { open: true }; + } + + collapse () { + this.setState({ open: !this.state.open }); + document.getElementById(this.props.name).classList.toggle('hidden'); + } + render () { return (
{this.props.top} +
-
+
{this.props.bottom}
); } -} +}; export default VerticalCollapsibleSplit; diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index f3eef3c8..9a7d7739 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -19,6 +19,7 @@ class ShowAssetDetails extends React.Component { asset={asset} > } bottom={} /> From 8759bcfdd6e7925a03b19902f58d01c98e1172c8 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 11 Oct 2018 21:51:33 +0100 Subject: [PATCH 11/59] New sharing icons --- client/scss/all.scss | 1 + client/scss/share-buttons/_share-buttons.scss | 9 +++++++++ client/src/components/AssetShareButtons/index.js | 13 ++++++------- public/assets/img/icn_facebook.svg | 14 ++++++++++++++ public/assets/img/icn_reddit.svg | 14 ++++++++++++++ public/assets/img/icn_tumblr.svg | 14 ++++++++++++++ public/assets/img/icn_twitter.svg | 14 ++++++++++++++ 7 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 client/scss/share-buttons/_share-buttons.scss create mode 100644 public/assets/img/icn_facebook.svg create mode 100644 public/assets/img/icn_reddit.svg create mode 100644 public/assets/img/icn_tumblr.svg create mode 100644 public/assets/img/icn_twitter.svg diff --git a/client/scss/all.scss b/client/scss/all.scss index 716e893b..bf6bb0b6 100644 --- a/client/scss/all.scss +++ b/client/scss/all.scss @@ -30,6 +30,7 @@ @import '~page-content/_page-content'; @import '~progress-bar/_progress-bar'; @import '~publish-preview/_publish-preview'; +@import '~share-buttons/_share-buttons'; @import '~space-between/_space-between'; @import '~space-around/_space-around'; @import '~row/_row'; diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/share-buttons/_share-buttons.scss new file mode 100644 index 00000000..8c429596 --- /dev/null +++ b/client/scss/share-buttons/_share-buttons.scss @@ -0,0 +1,9 @@ +.share-buttons { + display: flex; + align-items: center; + + a { + display: block; + margin: 0 7px; + } +} diff --git a/client/src/components/AssetShareButtons/index.js b/client/src/components/AssetShareButtons/index.js index dfb0c0b9..6c9a165d 100644 --- a/client/src/components/AssetShareButtons/index.js +++ b/client/src/components/AssetShareButtons/index.js @@ -1,38 +1,37 @@ import React from 'react'; -import SpaceBetween from '@components/SpaceBetween'; const AssetShareButtons = ({ host, name, shortId }) => { return ( - + ); }; diff --git a/public/assets/img/icn_facebook.svg b/public/assets/img/icn_facebook.svg new file mode 100644 index 00000000..6e94795e --- /dev/null +++ b/public/assets/img/icn_facebook.svg @@ -0,0 +1,14 @@ + + + + icn_facebook + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/icn_reddit.svg b/public/assets/img/icn_reddit.svg new file mode 100644 index 00000000..950939fc --- /dev/null +++ b/public/assets/img/icn_reddit.svg @@ -0,0 +1,14 @@ + + + + icn_reddit + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/icn_tumblr.svg b/public/assets/img/icn_tumblr.svg new file mode 100644 index 00000000..04fd2ef8 --- /dev/null +++ b/public/assets/img/icn_tumblr.svg @@ -0,0 +1,14 @@ + + + + icn_tumblr + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/icn_twitter.svg b/public/assets/img/icn_twitter.svg new file mode 100644 index 00000000..1ae7d9c0 --- /dev/null +++ b/public/assets/img/icn_twitter.svg @@ -0,0 +1,14 @@ + + + + icn_twitter + Created with Sketch. + + + + + + + + + \ No newline at end of file From de27ae81a86aa4257df1331ffa099d071756141c Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 14 Oct 2018 19:42:47 +0100 Subject: [PATCH 12/59] Added border left on asset information + variable change on collapse component --- client/scss/asset-display/_asset-display.scss | 21 ++++++++++++++++++- .../scss/vertical-split/_vertical-split.scss | 2 +- .../VerticalCollapsibleSplit/index.jsx | 12 +++++------ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index b756ccbd..d9367cde 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -57,10 +57,29 @@ .visible-content { width: 100%; margin: 0 0 40px; + padding-bottom: 25px; + box-shadow: 0 1px 3px 2px rgba(169, 173, 186, 0.2); + &.closed { + box-shadow: none; + } } .asset-information-wrap { max-width: 800px; + + .horizontal-split { + justify-content: center; + .column { + &:first-child { + padding-right: 40px; + } + &:last-child { + padding-left: 40px; + border-left: 1px solid #A9ADBA; + } + } + } + p.asset-description { white-space: pre-line; font-size: 14px; @@ -70,7 +89,7 @@ width: 360px; } .asset-information { - width: 320px; + width: 341px; } } \ No newline at end of file diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 665e4c80..1271c83b 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -6,7 +6,7 @@ align-items : center; }; -.collapse-content.hidden{ +.collapse-content.closed{ display: none; } diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index 6602b108..57cae21d 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -5,24 +5,24 @@ class VerticalCollapsibleSplit extends React.Component { constructor (props) { super(props); this.collapse = this.collapse.bind(this); - this.state = { open: true }; + this.state = { closed: false }; } collapse () { - this.setState({ open: !this.state.open }); - document.getElementById(this.props.name).classList.toggle('hidden'); + this.setState({ closed: !this.state.closed }); + document.querySelectorAll(`[data-name='${this.props.name}']`).forEach(el => el.classList.toggle('closed')); } render () { return (
-
+
{this.props.top}
-
+
{this.props.bottom}
From 160fefb4178e89033e65ee0f9c089ab9f0c8bcf8 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Wed, 17 Oct 2018 00:03:05 +0100 Subject: [PATCH 13/59] Added Circular Font --- client/scss/font/Circular/CircularStd-Bold.ttf | Bin 0 -> 86368 bytes client/scss/font/Circular/CircularStd-Book.ttf | Bin 0 -> 82860 bytes client/scss/font/_font.scss | 13 +++++++++++++ client/scss/text/_text.scss | 2 +- ...td-Bold-5b43235344fe2aee5bbbbe836e3acc7d.ttf | Bin 0 -> 86368 bytes ...td-Book-5dfcf720810d073aff5add284e733c18.ttf | Bin 0 -> 82860 bytes 6 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 client/scss/font/Circular/CircularStd-Bold.ttf create mode 100644 client/scss/font/Circular/CircularStd-Book.ttf create mode 100644 public/bundle/CircularStd-Bold-5b43235344fe2aee5bbbbe836e3acc7d.ttf create mode 100644 public/bundle/CircularStd-Book-5dfcf720810d073aff5add284e733c18.ttf diff --git a/client/scss/font/Circular/CircularStd-Bold.ttf b/client/scss/font/Circular/CircularStd-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..76eda84c9e7b22c8c32fb3b2f75ee33dabe84d99 GIT binary patch literal 86368 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 G%>M;lA(5Q` literal 0 HcmV?d00001 diff --git a/client/scss/font/Circular/CircularStd-Book.ttf b/client/scss/font/Circular/CircularStd-Book.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b0bac769f171b4eb32558a8bb8bf640bae432f08 GIT binary patch literal 82860 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 G%>M;lA(5Q` literal 0 HcmV?d00001 diff --git a/public/bundle/CircularStd-Book-5dfcf720810d073aff5add284e733c18.ttf b/public/bundle/CircularStd-Book-5dfcf720810d073aff5add284e733c18.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b0bac769f171b4eb32558a8bb8bf640bae432f08 GIT binary patch literal 82860 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 Date: Sun, 21 Oct 2018 20:52:10 +0100 Subject: [PATCH 14/59] Style changes --- client/scss/asset-display/_asset-display.scss | 4 ++-- client/scss/nav-bar/_nav-bar.scss | 2 +- client/scss/row/_row.scss | 7 ++++++- client/scss/variables/_variables.scss | 5 +++-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index d9367cde..38416d60 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -4,14 +4,14 @@ flex-direction: column; justify-content: center; - background: #E9E8E8; + background: #F6F6F6; width: 100%; position: relative; &:before, &:after { content: ''; position: absolute; - box-shadow: inset 0 1px 3px 2px rgba(169, 173, 186, 0.2); + box-shadow: inset 0 1px 2px 2px rgba(169, 173, 186, 0.2); width: 100%; height: 1px; background: transparent; diff --git a/client/scss/nav-bar/_nav-bar.scss b/client/scss/nav-bar/_nav-bar.scss index 8d5e3f37..e1bbdde4 100644 --- a/client/scss/nav-bar/_nav-bar.scss +++ b/client/scss/nav-bar/_nav-bar.scss @@ -1,7 +1,7 @@ .nav-bar { padding-left: $primary-padding; padding-right: $primary-padding; - border-bottom: 0.5px solid $tertiary-color; + // border-bottom: 0.5px solid $tertiary-color; .select--arrow { padding: 0 1.5em 0 $input-padding; } diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index 1789f1d6..ef404e50 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -28,7 +28,12 @@ align-self: flex-start; width: 100%; color: $grey; - font-size: 12px; + .label { + text-transform: uppercase; + font-size: 18px; + letter-spacing: 0.4px; + line-height: 18px; + } } .row-labeled-content { diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index b33e1cfa..f7ad0ce9 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -5,8 +5,9 @@ $tertiary-color: #ccccc0; $interactive-color: blue; $success-color: green; $failure-color: red; -$brand-color: #ff725d; -$grey: #a9adba; +// $brand-color: #ff725d; +$brand-color: #1944F9; +$grey: #9095A5; $primary-padding: 3em; $secondary-padding: 2em; From 293a2ccfad0dd9a7fbb58a4e78257c5c8f2deff8 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 20:59:43 +0100 Subject: [PATCH 15/59] Icon changed to circle --- client/scss/asset-display/_asset-display.scss | 2 +- client/scss/click-to-copy/_click-to-copy.scss | 2 ++ client/src/components/VerticalCollapsibleSplit/index.jsx | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 38416d60..e9823933 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -75,7 +75,7 @@ } &:last-child { padding-left: 40px; - border-left: 1px solid #A9ADBA; + border-left: 1px solid #9095a54d; } } } diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index ee630eac..f408978a 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -15,6 +15,8 @@ letter-spacing: -0.6px; line-height: 20px; max-width: 200px; + letter-spacing: 0; + font-family: monospace; } svg { stroke: $brand-color; diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index 57cae21d..64807af7 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -19,7 +19,7 @@ class VerticalCollapsibleSplit extends React.Component {
{this.props.top}
From 6a02d7d169b52ecc51dd5721058458d6b1ad1bfa Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 21:05:38 +0100 Subject: [PATCH 16/59] label font changes --- client/scss/row/_row.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index ef404e50..dcf3e3a8 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -29,8 +29,9 @@ width: 100%; color: $grey; .label { + font-weight: bold; text-transform: uppercase; - font-size: 18px; + font-size: 13px; letter-spacing: 0.4px; line-height: 18px; } From ba9dc3df5376690abbe6e125f34e4ee14feedf20 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 21:35:45 +0100 Subject: [PATCH 17/59] Style clean up for click to copy --- client/scss/click-to-copy/_click-to-copy.scss | 24 ++++++++++++++----- client/scss/share-buttons/_share-buttons.scss | 2 +- client/scss/variables/_variables.scss | 1 + .../scss/vertical-split/_vertical-split.scss | 7 ++++++ client/src/components/ClickToCopy/index.jsx | 4 +++- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index f408978a..16b6996f 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -2,25 +2,37 @@ display: flex; width: 100%; justify-content: space-between; + align-items: center; cursor: pointer; + border: 1px solid $grey-alt; + border-radius: 6px; + max-width: 280px; .click-to-copy { border: none; - padding: 0.5em; + padding: 0.36em 0.5em; margin: 0; color: black; - background-color: white; + background-color: transparent; width: calc(100% - 1em - 2px); font-size: 14px; color: #2E2F31; letter-spacing: -0.6px; line-height: 20px; - max-width: 200px; + max-width: 236px; letter-spacing: 0; font-family: monospace; + border-right: 1px solid #9095a54d; } - svg { - stroke: $brand-color; - + .icon-wrap { + width: 30px; + height: 30px; + line-height: 30px; + text-align: center; + svg { + stroke: $brand-color; + width: 12px; + height: 12px; + } } } diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/share-buttons/_share-buttons.scss index 8c429596..26be33a1 100644 --- a/client/scss/share-buttons/_share-buttons.scss +++ b/client/scss/share-buttons/_share-buttons.scss @@ -1,7 +1,7 @@ .share-buttons { display: flex; align-items: center; - + margin: 0 -7px; a { display: block; margin: 0 7px; diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index f7ad0ce9..5f19ce0e 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -8,6 +8,7 @@ $failure-color: red; // $brand-color: #ff725d; $brand-color: #1944F9; $grey: #9095A5; +$grey-alt: #9095a54d; $primary-padding: 3em; $secondary-padding: 2em; diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 1271c83b..ebccf388 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -10,6 +10,13 @@ display: none; } +.collapse-content { + padding-bottom: 80px; + @media (max-width: $break-point-medium) { + padding-bottom: 60px; + } +} + .collapse-button { outline: none; background: none; diff --git a/client/src/components/ClickToCopy/index.jsx b/client/src/components/ClickToCopy/index.jsx index 832ce973..8bc4d3cb 100644 --- a/client/src/components/ClickToCopy/index.jsx +++ b/client/src/components/ClickToCopy/index.jsx @@ -32,7 +32,9 @@ class ClickToCopy extends React.Component { readOnly spellCheck='false' /> - +
+ +
); } From 58b52a4e9ccbf1ef7050ec8549dd7e82f2b435b0 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 22:24:34 +0100 Subject: [PATCH 18/59] Icon changes + claim address placeholder + image size change. --- client/scss/asset-display/_asset-display.scss | 28 +++++++----- client/scss/body/_body.scss | 2 +- client/scss/click-to-copy/_click-to-copy.scss | 8 ++-- client/scss/link/_link.scss | 31 +++++++++++++ client/src/containers/AssetInfo/view.jsx | 45 ++++++++++++++----- 5 files changed, 86 insertions(+), 28 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index e9823933..e8eeced3 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -26,20 +26,19 @@ } - - .asset-title { - margin-top: 40px; - font-weight: normal; - font-size: 26px; - color: #2E2F31; - letter-spacing: 0; - text-align: center; - line-height: 32px; - } +.asset-title { + margin-top: 40px; + font-weight: normal; + font-size: 26px; + color: #2E2F31; + letter-spacing: 0; + text-align: center; + line-height: 32px; +} .asset-image, .asset-video { - margin : 60px 0; - max-width: 100%; + margin: 60px auto; + max-width: 60vh; max-height: 100%; object-fit: contain; object-position: center; @@ -92,4 +91,9 @@ width: 341px; } +} + +.asset-footer { + padding-top: 30px; + border-top: 1px solid $grey-alt; } \ No newline at end of file diff --git a/client/scss/body/_body.scss b/client/scss/body/_body.scss index 90f22258..6072cbd4 100644 --- a/client/scss/body/_body.scss +++ b/client/scss/body/_body.scss @@ -7,4 +7,4 @@ body { display: flex; -webkit-flex-direction: column; flex-direction: column; -} +} \ No newline at end of file diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index 16b6996f..c5d1fd3d 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -21,17 +21,17 @@ max-width: 236px; letter-spacing: 0; font-family: monospace; - border-right: 1px solid #9095a54d; + border-right: 1px solid $grey-alt; } .icon-wrap { width: 30px; height: 30px; - line-height: 30px; + line-height: 34px; text-align: center; svg { stroke: $brand-color; - width: 12px; - height: 12px; + width: 16px; + height: 16px; } } } diff --git a/client/scss/link/_link.scss b/client/scss/link/_link.scss index ee5cc8c7..4fbc92ef 100644 --- a/client/scss/link/_link.scss +++ b/client/scss/link/_link.scss @@ -29,3 +29,34 @@ a, a:visited { color: $interactive-color; border-bottom: 2px solid $interactive-color; } + + +.link--icon, .link--icon:visited { + display: flex; + .link-text { + padding-bottom: 2px; + border-bottom: 1px solid transparent; + transition: all 0.2s ease; + } + .icon-wrap { + margin-left: 5px; + padding-top: 3px; + align-items: center; + svg { + width: 16px; + height: 16px; + stroke-width: 1.2px; + stroke: $grey-alt; + transition: all 0.2s ease; + } + } + &:hover { + .link-text { + border-bottom: 1px solid $brand-color; + } + svg { + stroke: $brand-color; + } + } +} + diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index b150b488..30a366bc 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -7,6 +7,7 @@ import SpaceBetween from '@components/SpaceBetween'; import AssetShareButtons from '@components/AssetShareButtons'; import HorizontalSplit from '@components/HorizontalSplit'; import ClickToCopy from '@components/ClickToCopy'; +import * as Icon from 'react-feather'; class AssetInfo extends React.Component { render () { @@ -93,33 +94,55 @@ class AssetInfo extends React.Component { - Direct Link +
Direct Link
+
+ +
+
- Download +
Download
+
+ +
- Report +
Report
+
+ +
- -

- Hosted via the LBRY blockchain -

-
+
+ +

+ Hosted via the LBRY blockchain +

+
+
+ + } + content={ + Place Claim Address Here + } + /> +
+
} From 034bedac103689bf3f070495e80f24480de8982d Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 22:28:18 +0100 Subject: [PATCH 19/59] Icon color changes for download, direct, report icons. --- client/scss/link/_link.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/scss/link/_link.scss b/client/scss/link/_link.scss index 4fbc92ef..fa81a1da 100644 --- a/client/scss/link/_link.scss +++ b/client/scss/link/_link.scss @@ -45,8 +45,7 @@ a, a:visited { svg { width: 16px; height: 16px; - stroke-width: 1.2px; - stroke: $grey-alt; + stroke: $grey; transition: all 0.2s ease; } } From a188adc311cde2b52d17ae7a1383e52517bd57ff Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 22:38:27 +0100 Subject: [PATCH 20/59] Link underlines for @channel + claim address + lbry url --- client/scss/asset-display/_asset-display.scss | 4 ++-- client/scss/link/_link.scss | 11 +++++++++++ client/src/containers/AssetInfo/view.jsx | 6 +++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index e8eeced3..a4c6f1f9 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -73,7 +73,7 @@ padding-right: 40px; } &:last-child { - padding-left: 40px; + padding-left: 60px; border-left: 1px solid #9095a54d; } } @@ -88,7 +88,7 @@ width: 360px; } .asset-information { - width: 341px; + width: 320px; } } diff --git a/client/scss/link/_link.scss b/client/scss/link/_link.scss index fa81a1da..59b189be 100644 --- a/client/scss/link/_link.scss +++ b/client/scss/link/_link.scss @@ -59,3 +59,14 @@ a, a:visited { } } + +.link--hover { + display: inline-block; + padding-bottom: 2px; + border-bottom: 1px solid transparent; + transition: all 0.2s ease; + &:hover { + border-bottom: 1px solid $brand-color; + } +} + diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 30a366bc..71bfea1f 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -32,7 +32,7 @@ class AssetInfo extends React.Component { } content={ - {channelName} + {channelName} } /> @@ -129,7 +129,7 @@ class AssetInfo extends React.Component {

- Hosted via the LBRY blockchain + Hosted via the LBRY blockchain

@@ -138,7 +138,7 @@ class AssetInfo extends React.Component {
From a3c44b805c15461697a230828c9ddd1fa42eb92e Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 23:09:02 +0100 Subject: [PATCH 21/59] Border Clean up + moved padding to individuals columns --- client/scss/asset-display/_asset-display.scss | 15 ++++++++-- .../horizontal-split/_horizontal-split.scss | 4 +-- client/scss/share-buttons/_share-buttons.scss | 29 +++++++++++++++++++ client/scss/variables/_variables.scss | 2 +- .../scss/vertical-split/_vertical-split.scss | 7 ----- .../src/components/AssetShareButtons/index.js | 16 +++++----- public/assets/img/facebook.svg | 19 ++++++++++++ public/assets/img/reddit.svg | 19 ++++++++++++ public/assets/img/tumblr.svg | 19 ++++++++++++ public/assets/img/twitter.svg | 19 ++++++++++++ 10 files changed, 129 insertions(+), 20 deletions(-) create mode 100644 public/assets/img/facebook.svg create mode 100644 public/assets/img/reddit.svg create mode 100644 public/assets/img/tumblr.svg create mode 100644 public/assets/img/twitter.svg diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index a4c6f1f9..b06bccb7 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -55,7 +55,7 @@ .visible-content { width: 100%; - margin: 0 0 40px; + margin: 0; padding-bottom: 25px; box-shadow: 0 1px 3px 2px rgba(169, 173, 186, 0.2); &.closed { @@ -69,12 +69,15 @@ .horizontal-split { justify-content: center; .column { + padding-top: 40px; &:first-child { padding-right: 40px; + margin-right: -1px; + border-right: 1px solid $grey-alt; } &:last-child { padding-left: 60px; - border-left: 1px solid #9095a54d; + border-left: 1px solid $grey-alt; } } } @@ -86,6 +89,10 @@ letter-spacing: 0; line-height: 18px; width: 360px; + padding-bottom: 80px; + @media (max-width: $break-point-medium) { + padding-bottom: 60px; + } } .asset-information { width: 320px; @@ -96,4 +103,8 @@ .asset-footer { padding-top: 30px; border-top: 1px solid $grey-alt; + padding-bottom: 80px; + @media (max-width: $break-point-medium) { + padding-bottom: 60px; + } } \ No newline at end of file diff --git a/client/scss/horizontal-split/_horizontal-split.scss b/client/scss/horizontal-split/_horizontal-split.scss index bd304c3c..c6be788f 100644 --- a/client/scss/horizontal-split/_horizontal-split.scss +++ b/client/scss/horizontal-split/_horizontal-split.scss @@ -2,7 +2,7 @@ display : flex; flex-direction : row; justify-content: space-between; - align-items : flex-start; + .column { width: 50%; } @@ -16,7 +16,7 @@ display : flex; flex-direction : column; justify-content: space-between; - align-items : flex-start; + .column { width: 100%; padding-left: 0; diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/share-buttons/_share-buttons.scss index 26be33a1..d74c263b 100644 --- a/client/scss/share-buttons/_share-buttons.scss +++ b/client/scss/share-buttons/_share-buttons.scss @@ -4,6 +4,35 @@ margin: 0 -7px; a { display: block; + width: 30px; + height: 30px; margin: 0 7px; + border-radius: 100%; + line-height: 30px; + text-align: center; + &.twitter { + background:#4DC2FE + } + + &.facebook { + background: #5487DE; + img { + margin-top: 6px; + } + } + + &.tumblr { + background: #274061; + img { + margin-top: 7px; + } + } + + &.reddit { + background: #FF4500; + img { + margin-top: 7px; + } + } } } diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index 5f19ce0e..efabfaa7 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -8,7 +8,7 @@ $failure-color: red; // $brand-color: #ff725d; $brand-color: #1944F9; $grey: #9095A5; -$grey-alt: #9095a54d; +$grey-alt: #DDDFE4; $primary-padding: 3em; $secondary-padding: 2em; diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index ebccf388..1271c83b 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -10,13 +10,6 @@ display: none; } -.collapse-content { - padding-bottom: 80px; - @media (max-width: $break-point-medium) { - padding-bottom: 60px; - } -} - .collapse-button { outline: none; background: none; diff --git a/client/src/components/AssetShareButtons/index.js b/client/src/components/AssetShareButtons/index.js index 6c9a165d..8e093bdc 100644 --- a/client/src/components/AssetShareButtons/index.js +++ b/client/src/components/AssetShareButtons/index.js @@ -4,32 +4,32 @@ const AssetShareButtons = ({ host, name, shortId }) => { return ( ); diff --git a/public/assets/img/facebook.svg b/public/assets/img/facebook.svg new file mode 100644 index 00000000..a8a55384 --- /dev/null +++ b/public/assets/img/facebook.svg @@ -0,0 +1,19 @@ + + + + facebook + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/reddit.svg b/public/assets/img/reddit.svg new file mode 100644 index 00000000..4291cd7e --- /dev/null +++ b/public/assets/img/reddit.svg @@ -0,0 +1,19 @@ + + + + reddit + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/tumblr.svg b/public/assets/img/tumblr.svg new file mode 100644 index 00000000..7cbb240e --- /dev/null +++ b/public/assets/img/tumblr.svg @@ -0,0 +1,19 @@ + + + + tumblr + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/twitter.svg b/public/assets/img/twitter.svg new file mode 100644 index 00000000..1325869f --- /dev/null +++ b/public/assets/img/twitter.svg @@ -0,0 +1,19 @@ + + + + twitter + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file From 3461443a1095dc1064b92c1fc4d725cc2d031f3f Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 23:12:10 +0100 Subject: [PATCH 22/59] Row padding change. --- client/scss/row/_row.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index dcf3e3a8..786fb884 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -1,5 +1,5 @@ .row { - padding-bottom: 2em; + padding-bottom: 1.2em; } .row-labeled { From 8d3b03fd26c712d8c349ec6f6592fe63aacb1df9 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 23:13:37 +0100 Subject: [PATCH 23/59] visible content padding change --- client/scss/asset-display/_asset-display.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index b06bccb7..44b03264 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -56,7 +56,7 @@ .visible-content { width: 100%; margin: 0; - padding-bottom: 25px; + padding-bottom: 30px; box-shadow: 0 1px 3px 2px rgba(169, 173, 186, 0.2); &.closed { box-shadow: none; From b8466722138f8ba55cd12067401333261c615592 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 23:29:04 +0100 Subject: [PATCH 24/59] Twitter icon fix --- client/scss/share-buttons/_share-buttons.scss | 11 ++++++++++- public/assets/img/twitter.svg | 9 ++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/share-buttons/_share-buttons.scss index d74c263b..38f0ed23 100644 --- a/client/scss/share-buttons/_share-buttons.scss +++ b/client/scss/share-buttons/_share-buttons.scss @@ -10,8 +10,13 @@ border-radius: 100%; line-height: 30px; text-align: center; + transition: all 0.2s ease; &.twitter { - background:#4DC2FE + background:#4DC2FE; + img { + margin-top: 8px; + margin-left: 2px; + } } &.facebook { @@ -34,5 +39,9 @@ margin-top: 7px; } } + + &:hover { + background: $brand-color; + } } } diff --git a/public/assets/img/twitter.svg b/public/assets/img/twitter.svg index 1325869f..85f01535 100644 --- a/public/assets/img/twitter.svg +++ b/public/assets/img/twitter.svg @@ -1,15 +1,18 @@ - + twitter Created with Sketch. - + - + + + + From a3b826fa87ad007da0f4a60af209cfbd4ea1c9fb Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 23:38:04 +0100 Subject: [PATCH 25/59] Rotate added. --- client/scss/vertical-split/_vertical-split.scss | 10 ++++++++++ .../src/components/VerticalCollapsibleSplit/index.jsx | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 1271c83b..3fd72e90 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -20,5 +20,15 @@ height: 24px; svg { stroke: $brand-color; + &.plus-icon { + transform: rotate(0); + transition: all 0.4s ease; + } + } + + &:hover { + .plus-icon { + transform: rotate(-180deg); + } } } \ No newline at end of file diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index 64807af7..3a2aa29e 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -19,7 +19,7 @@ class VerticalCollapsibleSplit extends React.Component {
{this.props.top}
From 907604f7a4c2615afc282d01b513c9ffadb88352 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Sun, 21 Oct 2018 23:43:07 +0100 Subject: [PATCH 26/59] Click to copy width change. --- client/scss/click-to-copy/_click-to-copy.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index c5d1fd3d..b0bb6ccd 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -6,7 +6,6 @@ cursor: pointer; border: 1px solid $grey-alt; border-radius: 6px; - max-width: 280px; .click-to-copy { border: none; padding: 0.36em 0.5em; @@ -18,7 +17,6 @@ color: #2E2F31; letter-spacing: -0.6px; line-height: 20px; - max-width: 236px; letter-spacing: 0; font-family: monospace; border-right: 1px solid $grey-alt; From 24432af4545e9e1508411846ac8038326970bc4d Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 20:51:27 +0100 Subject: [PATCH 27/59] responsive WIP --- client/scss/asset-display/_asset-display.scss | 25 ++++++++++++++++--- client/scss/link/_link.scss | 4 +++ .../scss/vertical-split/_vertical-split.scss | 1 + 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 44b03264..ae8e9405 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -74,11 +74,23 @@ padding-right: 40px; margin-right: -1px; border-right: 1px solid $grey-alt; + @media (max-width: $break-point-large) { + order: 2; + border: none; + padding: 0; + margin: 0; + } } &:last-child { padding-left: 60px; border-left: 1px solid $grey-alt; + @media (max-width: $break-point-large) { + border: none; + padding: 40px 0 0 0; + margin: 0; + } } + } } @@ -90,12 +102,19 @@ line-height: 18px; width: 360px; padding-bottom: 80px; - @media (max-width: $break-point-medium) { - padding-bottom: 60px; + @media (max-width: $break-point-large) { + padding: 0; + width: 100%; + margin-bottom: 60px; } } .asset-information { width: 320px; + @media (max-width: $break-point-large) { + min-width: 320px; + width: 100%; + } + } } @@ -104,7 +123,7 @@ padding-top: 30px; border-top: 1px solid $grey-alt; padding-bottom: 80px; - @media (max-width: $break-point-medium) { + @media (max-width: $break-point-large) { padding-bottom: 60px; } } \ No newline at end of file diff --git a/client/scss/link/_link.scss b/client/scss/link/_link.scss index 59b189be..320e848f 100644 --- a/client/scss/link/_link.scss +++ b/client/scss/link/_link.scss @@ -48,6 +48,10 @@ a, a:visited { stroke: $grey; transition: all 0.2s ease; } + + @media (max-width: $break-point-x-small) { + padding-top: 0; + } } &:hover { .link-text { diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 3fd72e90..0857c491 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -18,6 +18,7 @@ margin: 15px auto 0; width: 24px; height: 24px; + padding: 0; svg { stroke: $brand-color; &.plus-icon { From 33ed0e8f592bcdee4dce34fe1e19a45461c00e91 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 21:26:19 +0100 Subject: [PATCH 28/59] Responsive tidy up --- client/scss/asset-display/_asset-display.scss | 27 ++++++++++++++----- .../horizontal-split/_horizontal-split.scss | 2 +- client/scss/share-buttons/_share-buttons.scss | 5 +++- client/scss/variables/_variables.scss | 2 ++ .../scss/vertical-split/_vertical-split.scss | 7 +++++ 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index ae8e9405..4e1e1515 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -42,6 +42,9 @@ max-height: 100%; object-fit: contain; object-position: center; + @media (max-width: $break-point-small) { + max-width: calc(100% - 30px); + } } .asset-video { border: 1px solid #d0d0d0; @@ -65,6 +68,15 @@ .asset-information-wrap { max-width: 800px; + @media (max-width: $break-point-tablet) { + max-width: 100%; + margin: 0px auto; + width: calc(100% - 80px); + } + + @media (max-width: $break-point-phone) { + width: calc(100% - 30px); + } .horizontal-split { justify-content: center; @@ -74,7 +86,7 @@ padding-right: 40px; margin-right: -1px; border-right: 1px solid $grey-alt; - @media (max-width: $break-point-large) { + @media (max-width: $break-point-tablet) { order: 2; border: none; padding: 0; @@ -84,7 +96,7 @@ &:last-child { padding-left: 60px; border-left: 1px solid $grey-alt; - @media (max-width: $break-point-large) { + @media (max-width: $break-point-tablet) { border: none; padding: 40px 0 0 0; margin: 0; @@ -102,7 +114,7 @@ line-height: 18px; width: 360px; padding-bottom: 80px; - @media (max-width: $break-point-large) { + @media (max-width: $break-point-tablet) { padding: 0; width: 100%; margin-bottom: 60px; @@ -110,9 +122,10 @@ } .asset-information { width: 320px; - @media (max-width: $break-point-large) { - min-width: 320px; + @media (max-width: $break-point-tablet) { + min-width: 100%; width: 100%; + margin-bottom: 60px; } } @@ -123,7 +136,7 @@ padding-top: 30px; border-top: 1px solid $grey-alt; padding-bottom: 80px; - @media (max-width: $break-point-large) { - padding-bottom: 60px; + @media (max-width: $break-point-tablet) { + padding: 0; } } \ No newline at end of file diff --git a/client/scss/horizontal-split/_horizontal-split.scss b/client/scss/horizontal-split/_horizontal-split.scss index c6be788f..52034731 100644 --- a/client/scss/horizontal-split/_horizontal-split.scss +++ b/client/scss/horizontal-split/_horizontal-split.scss @@ -10,7 +10,7 @@ -@media (max-width: $break-point-large ) { +@media (max-width: $break-point-tablet) { .horizontal-split { display : flex; diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/share-buttons/_share-buttons.scss index 38f0ed23..05711d47 100644 --- a/client/scss/share-buttons/_share-buttons.scss +++ b/client/scss/share-buttons/_share-buttons.scss @@ -1,7 +1,6 @@ .share-buttons { display: flex; align-items: center; - margin: 0 -7px; a { display: block; width: 30px; @@ -40,6 +39,10 @@ } } + &:first-child{ + margin-left: 0px; + } + &:hover { background: $brand-color; } diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index efabfaa7..0ff975ba 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -36,7 +36,9 @@ $text-x-small: small; $break-point-xx-large: 1400px; $break-point-x-large: 1290px; $break-point-large: 1000px; +$break-point-tablet: 900px; $break-point-medium: 800px; +$break-point-phone: 640px; $break-point-small: 500px; $break-point-x-small: 400px; diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 0857c491..81f7119d 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -6,6 +6,13 @@ align-items : center; }; +.collapse-content { + @media (max-width: $break-point-tablet) { + max-width: 100%; + width: 100%; + } +} + .collapse-content.closed{ display: none; } From 954bc189d72e90d0b870ddbb5fbd9afa9c687c72 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 21:36:37 +0100 Subject: [PATCH 29/59] Padding on title + asset display spacing fixed + removed unused feather.js call in fullpage --- client/scss/asset-display/_asset-display.scss | 10 +++++----- client/scss/text/_text.scss | 4 ++-- server/render/renderFullPage.js | 1 - 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 4e1e1515..7b3daf7e 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -34,6 +34,10 @@ letter-spacing: 0; text-align: center; line-height: 32px; + + @media (max-width: $break-point-tablet) { + padding: 0 20px; + } } .asset-image, .asset-video { @@ -52,10 +56,6 @@ padding: 6px; } -// .vertical-split .asset-display { -// height: 90vh; -// } - .visible-content { width: 100%; margin: 0; @@ -137,6 +137,6 @@ border-top: 1px solid $grey-alt; padding-bottom: 80px; @media (max-width: $break-point-tablet) { - padding: 0; + padding-bottom: 0; } } \ No newline at end of file diff --git a/client/scss/text/_text.scss b/client/scss/text/_text.scss index 331eaff7..0c5b6140 100644 --- a/client/scss/text/_text.scss +++ b/client/scss/text/_text.scss @@ -116,7 +116,7 @@ p, body, button, input, textarea, label, select, option { } p, body, button, input, textarea, label, select, option { - font-size: $text-small; + font-size: 15px; } .text--extra-large { @@ -146,7 +146,7 @@ p, body, button, input, textarea, label, select, option { } p, body, button, input, textarea, label, select, option { - font-size: $text-x-small; + font-size: 15px; } .text--extra-large { diff --git a/server/render/renderFullPage.js b/server/render/renderFullPage.js index 8f40e2b2..12e39214 100644 --- a/server/render/renderFullPage.js +++ b/server/render/renderFullPage.js @@ -23,7 +23,6 @@ module.exports = (helmet, html, preloadedState) => { window.__PRELOADED_STATE__ = ${JSON.stringify(preloadedState).replace(/ - `; From 22a5b2581dd52b0118fb333fa74cf807176b3fc0 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 21:57:39 +0100 Subject: [PATCH 30/59] Moved inline row into a new class inside row.scss and applied same rule for channel and share --- client/scss/click-to-copy/_click-to-copy.scss | 1 - client/scss/row/_row.scss | 22 ++++ client/src/containers/AssetInfo/view.jsx | 117 +++++++++--------- 3 files changed, 82 insertions(+), 58 deletions(-) diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index b0bb6ccd..f66a571e 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -33,4 +33,3 @@ } } } - diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index 786fb884..d0df008d 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -58,3 +58,25 @@ } } + + +@media (max-width: $break-point-tablet) and (min-width: $break-point-phone) { + .tablet-inline-row { + display: flex; + justify-content: space-between; + width: 100%; + + >.row { + flex: 1; + margin: 0 15px; + + &:first-child { + margin-left: 0; + } + + &:last-child { + margin-right: 0; + } + } + } +} diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 71bfea1f..93d6db95 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -24,72 +24,75 @@ class AssetInfo extends React.Component { } rightSide={
- {channelName && ( +
+ {channelName && ( + + + } + content={ + + {channelName} + + } + /> + + )} + + +
+
+ + + } + content={ + } /> - )} - - - } - content={ - - } - /> - - - - - } - content={ - - } - /> - - - - - } - content={ -
- {(contentType === 'video/mp4') ? ( - `} - /> - ) : ( - `} - /> - )} -
- } - /> -
+ + + } + content={ +
+ {(contentType === 'video/mp4') ? ( + `} + /> + ) : ( + `} + /> + )} +
+ } + /> +
+
From 7c31510b83dd2e24ea47d212a07a23809ce99784 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 22:15:53 +0100 Subject: [PATCH 31/59] collapse button fix, line added on description --- client/scss/asset-display/_asset-display.scss | 8 ++++++-- client/scss/vertical-split/_vertical-split.scss | 1 - 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 7b3daf7e..7b354ba1 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -115,9 +115,12 @@ width: 360px; padding-bottom: 80px; @media (max-width: $break-point-tablet) { - padding: 0; + padding: 22px 0 0; width: 100%; + max-width: 600px; + margin: 0px auto 60px; margin-bottom: 60px; + border-top: 1px solid $grey-alt; } } .asset-information { @@ -125,7 +128,7 @@ @media (max-width: $break-point-tablet) { min-width: 100%; width: 100%; - margin-bottom: 60px; + margin-bottom: 30px; } } @@ -137,6 +140,7 @@ border-top: 1px solid $grey-alt; padding-bottom: 80px; @media (max-width: $break-point-tablet) { + padding-top: 22px; padding-bottom: 0; } } \ No newline at end of file diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 81f7119d..13d7ca93 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -25,7 +25,6 @@ margin: 15px auto 0; width: 24px; height: 24px; - padding: 0; svg { stroke: $brand-color; &.plus-icon { From 6efff66267b52dbdb5345a0b9b2450398651f343 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 22:25:55 +0100 Subject: [PATCH 32/59] Grey line changes --- client/scss/asset-display/_asset-display.scss | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 7b354ba1..5f69ebf9 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -115,12 +115,10 @@ width: 360px; padding-bottom: 80px; @media (max-width: $break-point-tablet) { - padding: 22px 0 0; + padding: 0; width: 100%; max-width: 600px; - margin: 0px auto 60px; - margin-bottom: 60px; - border-top: 1px solid $grey-alt; + margin: 22px 0 60px; } } .asset-information { @@ -128,7 +126,8 @@ @media (max-width: $break-point-tablet) { min-width: 100%; width: 100%; - margin-bottom: 30px; + padding-bottom: 30px; + border-bottom: 1px solid $grey-alt; } } From e9a8b5288e90cb4b63be8973a5c913b239b68d4d Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 22:29:44 +0100 Subject: [PATCH 33/59] row change for tablet --- client/scss/row/_row.scss | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index d0df008d..787d5161 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -61,6 +61,10 @@ @media (max-width: $break-point-tablet) and (min-width: $break-point-phone) { + .row { + margin-bottom: 1.4em; + } + .tablet-inline-row { display: flex; justify-content: space-between; @@ -68,7 +72,7 @@ >.row { flex: 1; - margin: 0 15px; + margin: 0 15px 1.4em; &:first-child { margin-left: 0; From 585e7dada38cc7276db9a1f61121c85835816bda Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 22:38:28 +0100 Subject: [PATCH 34/59] Navbar font-size change. --- client/scss/nav-bar/_nav-bar.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/scss/nav-bar/_nav-bar.scss b/client/scss/nav-bar/_nav-bar.scss index e1bbdde4..54757fbd 100644 --- a/client/scss/nav-bar/_nav-bar.scss +++ b/client/scss/nav-bar/_nav-bar.scss @@ -4,12 +4,14 @@ // border-bottom: 0.5px solid $tertiary-color; .select--arrow { padding: 0 1.5em 0 $input-padding; + font-size: 14px; } } .nav-bar-link { padding: calc(1em - 2px); display: inline-block; + font-size: 14px; } .nav-bar-logo { From 7e51a56388c25c09a639ae5278ae3fc4e85d785c Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Mon, 22 Oct 2018 23:23:18 +0100 Subject: [PATCH 35/59] Swapped Icons, site description removed + navbar uppercase. Box shadow fix. --- client/scss/asset-display/_asset-display.scss | 8 ++++++++ client/scss/nav-bar/_nav-bar.scss | 11 +++++++++++ client/src/components/NavBar/index.jsx | 1 - .../src/components/VerticalCollapsibleSplit/index.jsx | 2 +- client/src/containers/AssetInfo/view.jsx | 2 +- 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 5f69ebf9..4a802e06 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -64,6 +64,14 @@ &.closed { box-shadow: none; } + &:before{ + content: ''; + width: 100%; + height: 100px; + position: absolute; + z-index: 100; + box-shadow: inset 0px 2px 3px 2px rgba(169, 173, 186, 0.2); + } } .asset-information-wrap { diff --git a/client/scss/nav-bar/_nav-bar.scss b/client/scss/nav-bar/_nav-bar.scss index 54757fbd..2d10a8fc 100644 --- a/client/scss/nav-bar/_nav-bar.scss +++ b/client/scss/nav-bar/_nav-bar.scss @@ -1,10 +1,17 @@ .nav-bar { padding-left: $primary-padding; padding-right: $primary-padding; + + @media (max-width: $break-point-phone) { + padding-left: 15px; + padding-right: 15px; + } + // border-bottom: 0.5px solid $tertiary-color; .select--arrow { padding: 0 1.5em 0 $input-padding; font-size: 14px; + text-transform: uppercase; } } @@ -12,6 +19,7 @@ padding: calc(1em - 2px); display: inline-block; font-size: 14px; + text-transform: uppercase; } .nav-bar-logo { @@ -25,6 +33,7 @@ padding-bottom: calc(1em - 2px); padding-left: 1em; } + } @media (max-width: $break-point-small ) { @@ -35,3 +44,5 @@ padding-left: 0.5em; } } + + diff --git a/client/src/components/NavBar/index.jsx b/client/src/components/NavBar/index.jsx index bd1028a3..c58aa22d 100644 --- a/client/src/components/NavBar/index.jsx +++ b/client/src/components/NavBar/index.jsx @@ -10,7 +10,6 @@ class NavBar extends React.Component {
-
diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index 3a2aa29e..9d197417 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -19,7 +19,7 @@ class VerticalCollapsibleSplit extends React.Component {
{this.props.top}
diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 93d6db95..201fa25e 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -11,7 +11,7 @@ import * as Icon from 'react-feather'; class AssetInfo extends React.Component { render () { - const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props; + const { asset: { shortId, claimData: { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props; return (
Date: Tue, 23 Oct 2018 22:01:28 +0100 Subject: [PATCH 36/59] Box shadow fix --- client/scss/asset-display/_asset-display.scss | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 4a802e06..855f6bc7 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -60,9 +60,12 @@ width: 100%; margin: 0; padding-bottom: 30px; - box-shadow: 0 1px 3px 2px rgba(169, 173, 186, 0.2); + position: relative; &.closed { box-shadow: none; + &:after { + box-shadow: none; + } } &:before{ content: ''; @@ -70,8 +73,18 @@ height: 100px; position: absolute; z-index: 100; - box-shadow: inset 0px 2px 3px 2px rgba(169, 173, 186, 0.2); - } + box-shadow: inset 2px 3px 3px 2px rgba(169, 173, 186, 0.2); + } + &:after { + content: ''; + width: 100%; + height: 0; + top: 100%; + position: absolute; + z-index: 100; + box-shadow: 0px 2px 3px 2px rgba(169, 173, 186, 0.2); + } + } .asset-information-wrap { From 35d0da670cf6468247bc3770935425bf33fa9c6f Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Tue, 23 Oct 2018 22:26:49 +0100 Subject: [PATCH 37/59] Claim added --- client/scss/asset-display/_asset-display.scss | 10 +++++++- client/src/containers/AssetInfo/view.jsx | 24 ++++++++++--------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 855f6bc7..88223cd6 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -150,7 +150,6 @@ padding-bottom: 30px; border-bottom: 1px solid $grey-alt; } - } } @@ -163,4 +162,13 @@ padding-top: 22px; padding-bottom: 0; } + + .claim-address { + .link--brand { + font-size: 12px; + font-weight: 300; + line-height: 18px; + } + } + } \ No newline at end of file diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index 201fa25e..08618d3b 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -11,7 +11,7 @@ import * as Icon from 'react-feather'; class AssetInfo extends React.Component { render () { - const { asset: { shortId, claimData: { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props; + const { asset: { shortId, claimData: { channelName, certificateId, description, name, address, claimId, fileExt, contentType, thumbnail, host } } } = this.props; return (
LBRY blockchain

-
- - } - content={ - Place Claim Address Here - } - /> -
+ {address && ( +
+ + } + content={ + {address} + } + /> +
+ )}
From 7373365ad88d68074b3793829c82184702a7d764 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Tue, 23 Oct 2018 22:52:01 +0100 Subject: [PATCH 38/59] shadow removal + claim address font size + new dropdown icon --- client/scss/asset-display/_asset-display.scss | 8 +------- client/scss/icon/chevron-down.svg | 9 +++++++++ client/scss/nav-bar/_nav-bar.scss | 2 ++ client/scss/select/_select.scss | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 client/scss/icon/chevron-down.svg diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 88223cd6..d6f950ca 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -7,7 +7,6 @@ background: #F6F6F6; width: 100%; position: relative; - &:before, &:after { content: ''; position: absolute; @@ -16,14 +15,9 @@ height: 1px; background: transparent; left: 0; - top: 0; - } - - &:after { top: auto; bottom: 0; } - } .asset-title { @@ -165,7 +159,7 @@ .claim-address { .link--brand { - font-size: 12px; + font-size: 14px; font-weight: 300; line-height: 18px; } diff --git a/client/scss/icon/chevron-down.svg b/client/scss/icon/chevron-down.svg new file mode 100644 index 00000000..9144704e --- /dev/null +++ b/client/scss/icon/chevron-down.svg @@ -0,0 +1,9 @@ + + + + chevron-down + Created with Sketch. + + + + \ No newline at end of file diff --git a/client/scss/nav-bar/_nav-bar.scss b/client/scss/nav-bar/_nav-bar.scss index 2d10a8fc..41415546 100644 --- a/client/scss/nav-bar/_nav-bar.scss +++ b/client/scss/nav-bar/_nav-bar.scss @@ -11,6 +11,7 @@ .select--arrow { padding: 0 1.5em 0 $input-padding; font-size: 14px; + letter-spacing: 0.4px; text-transform: uppercase; } } @@ -19,6 +20,7 @@ padding: calc(1em - 2px); display: inline-block; font-size: 14px; + letter-spacing: 0.4px; text-transform: uppercase; } diff --git a/client/scss/select/_select.scss b/client/scss/select/_select.scss index df03a09e..7142f40c 100644 --- a/client/scss/select/_select.scss +++ b/client/scss/select/_select.scss @@ -10,7 +10,7 @@ select { .select--arrow { -moz-appearance:none; -webkit-appearance: none; - background: url('./icon/downArrow.svg') no-repeat right; + background: url('./icon/chevron-down.svg') no-repeat right; cursor: pointer; padding-right: 1.5em; padding-left: $input-padding From 8ade24f501f61b19667524455712e9d40168c733 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 25 Oct 2018 19:53:43 +0100 Subject: [PATCH 39/59] Added Line break before `:after` pseudo element. --- client/scss/asset-display/_asset-display.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index d6f950ca..e1b3f847 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -3,10 +3,10 @@ flex: 1 0 auto; flex-direction: column; justify-content: center; - background: #F6F6F6; width: 100%; position: relative; + &:after { content: ''; position: absolute; From fe2bc7de6974a4e2f102a12d8b27fa0c1c2ce89a Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 25 Oct 2018 19:57:54 +0100 Subject: [PATCH 40/59] Added spacing between selectors. --- client/scss/asset-display/_asset-display.scss | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index e1b3f847..7eb001e1 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -40,6 +40,7 @@ max-height: 100%; object-fit: contain; object-position: center; + @media (max-width: $break-point-small) { max-width: calc(100% - 30px); } @@ -55,12 +56,15 @@ margin: 0; padding-bottom: 30px; position: relative; + &.closed { box-shadow: none; + &:after { box-shadow: none; } } + &:before{ content: ''; width: 100%; @@ -69,6 +73,7 @@ z-index: 100; box-shadow: inset 2px 3px 3px 2px rgba(169, 173, 186, 0.2); } + &:after { content: ''; width: 100%; @@ -78,11 +83,11 @@ z-index: 100; box-shadow: 0px 2px 3px 2px rgba(169, 173, 186, 0.2); } - } .asset-information-wrap { max-width: 800px; + @media (max-width: $break-point-tablet) { max-width: 100%; margin: 0px auto; @@ -95,12 +100,15 @@ .horizontal-split { justify-content: center; + .column { padding-top: 40px; + &:first-child { padding-right: 40px; margin-right: -1px; border-right: 1px solid $grey-alt; + @media (max-width: $break-point-tablet) { order: 2; border: none; @@ -108,16 +116,17 @@ margin: 0; } } + &:last-child { padding-left: 60px; border-left: 1px solid $grey-alt; + @media (max-width: $break-point-tablet) { border: none; padding: 40px 0 0 0; margin: 0; } } - } } @@ -129,6 +138,7 @@ line-height: 18px; width: 360px; padding-bottom: 80px; + @media (max-width: $break-point-tablet) { padding: 0; width: 100%; @@ -136,8 +146,10 @@ margin: 22px 0 60px; } } + .asset-information { width: 320px; + @media (max-width: $break-point-tablet) { min-width: 100%; width: 100%; @@ -152,12 +164,14 @@ padding-top: 30px; border-top: 1px solid $grey-alt; padding-bottom: 80px; + @media (max-width: $break-point-tablet) { padding-top: 22px; padding-bottom: 0; } .claim-address { + .link--brand { font-size: 14px; font-weight: 300; From 696d39e6c7e4f5589dab006e1f642efe547ee3fd Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 25 Oct 2018 19:59:08 +0100 Subject: [PATCH 41/59] Shadow color moved to variable. --- client/scss/asset-display/_asset-display.scss | 8 ++++---- client/scss/variables/_variables.scss | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 7eb001e1..22919cb9 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -10,7 +10,7 @@ &:after { content: ''; position: absolute; - box-shadow: inset 0 1px 2px 2px rgba(169, 173, 186, 0.2); + box-shadow: inset 0 1px 2px 2px $shadow-color; width: 100%; height: 1px; background: transparent; @@ -71,7 +71,7 @@ height: 100px; position: absolute; z-index: 100; - box-shadow: inset 2px 3px 3px 2px rgba(169, 173, 186, 0.2); + box-shadow: inset 2px 3px 3px 2px $shadow-color; } &:after { @@ -81,7 +81,7 @@ top: 100%; position: absolute; z-index: 100; - box-shadow: 0px 2px 3px 2px rgba(169, 173, 186, 0.2); + box-shadow: 0px 2px 3px 2px $shadow-color; } } @@ -146,7 +146,7 @@ margin: 22px 0 60px; } } - + .asset-information { width: 320px; diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index 0ff975ba..7698081e 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -9,6 +9,7 @@ $failure-color: red; $brand-color: #1944F9; $grey: #9095A5; $grey-alt: #DDDFE4; +$shadow-color: rgba(169, 173, 186, 0.2); $primary-padding: 3em; $secondary-padding: 2em; From 5c1e8cd808ad9f9cfc628020919cc39f68f203b9 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 25 Oct 2018 20:04:16 +0100 Subject: [PATCH 42/59] Fixed Indentation --- client/scss/share-buttons/_share-buttons.scss | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/share-buttons/_share-buttons.scss index 05711d47..010ef268 100644 --- a/client/scss/share-buttons/_share-buttons.scss +++ b/client/scss/share-buttons/_share-buttons.scss @@ -1,50 +1,51 @@ .share-buttons { - display: flex; - align-items: center; - a { - display: block; - width: 30px; - height: 30px; - margin: 0 7px; - border-radius: 100%; - line-height: 30px; - text-align: center; - transition: all 0.2s ease; - &.twitter { - background:#4DC2FE; - img { - margin-top: 8px; - margin-left: 2px; - } - } - - &.facebook { - background: #5487DE; - img { - margin-top: 6px; - } - } - - &.tumblr { - background: #274061; - img { - margin-top: 7px; - } - } - - &.reddit { - background: #FF4500; - img { - margin-top: 7px; - } - } - - &:first-child{ - margin-left: 0px; - } - - &:hover { - background: $brand-color; - } + display: flex; + align-items: center; + + a { + display: block; + width: 30px; + height: 30px; + margin: 0 7px; + border-radius: 100%; + line-height: 30px; + text-align: center; + transition: all 0.2s ease; + &.twitter { + background:#4DC2FE; + img { + margin-top: 8px; + margin-left: 2px; + } } + + &.facebook { + background: #5487DE; + img { + margin-top: 6px; + } + } + + &.tumblr { + background: #274061; + img { + margin-top: 7px; + } + } + + &.reddit { + background: #FF4500; + img { + margin-top: 7px; + } + } + + &:first-child{ + margin-left: 0px; + } + + &:hover { + background: $brand-color; + } + } } From be2d3cb3da2e03ff343b68b5583933e91a243e3d Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 25 Oct 2018 20:07:41 +0100 Subject: [PATCH 43/59] Removed unused components --- client/src/pages/ShowAssetDetails/view.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index 9a7d7739..628dc5bc 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -2,8 +2,6 @@ import React from 'react'; import PageLayout from '@components/PageLayout'; import VerticalCollapsibleSplit from '@components/VerticalCollapsibleSplit'; -// import VerticalSplit from '@components/VerticalSplit'; -// import AssetTitle from '@containers/AssetTitle'; import AssetDisplay from '@containers/AssetDisplay'; import AssetInfo from '@containers/AssetInfo'; import ErrorPage from '@pages/ErrorPage'; From e6f634cf9dd437559fe8f91210748f38b0a0be26 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 25 Oct 2018 20:16:38 +0100 Subject: [PATCH 44/59] Faster lookup --- client/src/components/VerticalCollapsibleSplit/index.jsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index 9d197417..f58b2a20 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -14,6 +14,12 @@ class VerticalCollapsibleSplit extends React.Component { } render () { + let { + props, + state, + collapse, + } = this; + return (
From 9b210d3ad89476700714f3af3a1a38b097d46c14 Mon Sep 17 00:00:00 2001 From: Minesh Mitha Date: Thu, 25 Oct 2018 20:23:05 +0100 Subject: [PATCH 45/59] Sorted styles alphabettically --- client/scss/asset-display/_asset-display.scss | 85 ++++++++++--------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 22919cb9..1ebac34b 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -1,33 +1,33 @@ .asset-display { - display: flex; - flex: 1 0 auto; - flex-direction: column; - justify-content: center; background: #F6F6F6; - width: 100%; + display: flex; + flex-direction: column; + flex: 1 0 auto; + justify-content: center; position: relative; + width: 100%; &:after { - content: ''; - position: absolute; - box-shadow: inset 0 1px 2px 2px $shadow-color; - width: 100%; - height: 1px; background: transparent; - left: 0; - top: auto; bottom: 0; + box-shadow: inset 0 1px 2px 2px $shadow-color; + content: ''; + height: 1px; + left: 0; + position: absolute; + top: auto; + width: 100%; } } .asset-title { - margin-top: 40px; - font-weight: normal; - font-size: 26px; color: #2E2F31; + font-size: 26px; + font-weight: normal; letter-spacing: 0; - text-align: center; line-height: 32px; + margin-top: 40px; + text-align: center; @media (max-width: $break-point-tablet) { padding: 0 20px; @@ -36,8 +36,8 @@ .asset-image, .asset-video { margin: 60px auto; - max-width: 60vh; max-height: 100%; + max-width: 60vh; object-fit: contain; object-position: center; @@ -45,6 +45,7 @@ max-width: calc(100% - 30px); } } + .asset-video { border: 1px solid #d0d0d0; margin: 16px; @@ -52,10 +53,10 @@ } .visible-content { - width: 100%; margin: 0; padding-bottom: 30px; position: relative; + width: 100%; &.closed { box-shadow: none; @@ -66,22 +67,22 @@ } &:before{ + box-shadow: inset 2px 3px 3px 2px $shadow-color; content: ''; - width: 100%; height: 100px; position: absolute; + width: 100%; z-index: 100; - box-shadow: inset 2px 3px 3px 2px $shadow-color; } &:after { - content: ''; - width: 100%; - height: 0; - top: 100%; - position: absolute; - z-index: 100; box-shadow: 0px 2px 3px 2px $shadow-color; + content: ''; + height: 0; + position: absolute; + top: 100%; + width: 100%; + z-index: 100; } } @@ -89,8 +90,8 @@ max-width: 800px; @media (max-width: $break-point-tablet) { - max-width: 100%; margin: 0px auto; + max-width: 100%; width: calc(100% - 80px); } @@ -105,45 +106,45 @@ padding-top: 40px; &:first-child { - padding-right: 40px; - margin-right: -1px; border-right: 1px solid $grey-alt; + margin-right: -1px; + padding-right: 40px; @media (max-width: $break-point-tablet) { - order: 2; border: none; - padding: 0; margin: 0; + order: 2; + padding: 0; } } &:last-child { - padding-left: 60px; border-left: 1px solid $grey-alt; + padding-left: 60px; @media (max-width: $break-point-tablet) { border: none; - padding: 40px 0 0 0; margin: 0; + padding: 40px 0 0 0; } } } } p.asset-description { - white-space: pre-line; - font-size: 14px; color: #2E2F31; + font-size: 14px; letter-spacing: 0; line-height: 18px; - width: 360px; 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%; - max-width: 600px; - margin: 22px 0 60px; } } @@ -151,19 +152,19 @@ width: 320px; @media (max-width: $break-point-tablet) { - min-width: 100%; - width: 100%; - padding-bottom: 30px; border-bottom: 1px solid $grey-alt; + min-width: 100%; + padding-bottom: 30px; + width: 100%; } } } .asset-footer { - padding-top: 30px; border-top: 1px solid $grey-alt; padding-bottom: 80px; + padding-top: 30px; @media (max-width: $break-point-tablet) { padding-top: 22px; From 51bd1ba0701006d7540993a793d47ad87fd9c38e Mon Sep 17 00:00:00 2001 From: Sania Date: Thu, 25 Oct 2018 22:50:35 +0100 Subject: [PATCH 46/59] svg files cleaned up --- public/assets/img/facebook.svg | 3 --- public/assets/img/icn_facebook.svg | 3 --- public/assets/img/icn_reddit.svg | 3 --- public/assets/img/icn_tumblr.svg | 3 --- public/assets/img/icn_twitter.svg | 3 --- public/assets/img/reddit.svg | 3 --- public/assets/img/tumblr.svg | 3 --- public/assets/img/twitter.svg | 3 --- 8 files changed, 24 deletions(-) diff --git a/public/assets/img/facebook.svg b/public/assets/img/facebook.svg index a8a55384..f86df4fc 100644 --- a/public/assets/img/facebook.svg +++ b/public/assets/img/facebook.svg @@ -1,8 +1,5 @@ - - facebook - Created with Sketch. diff --git a/public/assets/img/icn_facebook.svg b/public/assets/img/icn_facebook.svg index 6e94795e..0b38fb12 100644 --- a/public/assets/img/icn_facebook.svg +++ b/public/assets/img/icn_facebook.svg @@ -1,8 +1,5 @@ - - icn_facebook - Created with Sketch. diff --git a/public/assets/img/icn_reddit.svg b/public/assets/img/icn_reddit.svg index 950939fc..8e9cc967 100644 --- a/public/assets/img/icn_reddit.svg +++ b/public/assets/img/icn_reddit.svg @@ -1,8 +1,5 @@ - - icn_reddit - Created with Sketch. diff --git a/public/assets/img/icn_tumblr.svg b/public/assets/img/icn_tumblr.svg index 04fd2ef8..b1bd0dcf 100644 --- a/public/assets/img/icn_tumblr.svg +++ b/public/assets/img/icn_tumblr.svg @@ -1,8 +1,5 @@ - - icn_tumblr - Created with Sketch. diff --git a/public/assets/img/icn_twitter.svg b/public/assets/img/icn_twitter.svg index 1ae7d9c0..bd21672c 100644 --- a/public/assets/img/icn_twitter.svg +++ b/public/assets/img/icn_twitter.svg @@ -1,8 +1,5 @@ - - icn_twitter - Created with Sketch. diff --git a/public/assets/img/reddit.svg b/public/assets/img/reddit.svg index 4291cd7e..77c166e1 100644 --- a/public/assets/img/reddit.svg +++ b/public/assets/img/reddit.svg @@ -1,8 +1,5 @@ - - reddit - Created with Sketch. diff --git a/public/assets/img/tumblr.svg b/public/assets/img/tumblr.svg index 7cbb240e..8c6e20be 100644 --- a/public/assets/img/tumblr.svg +++ b/public/assets/img/tumblr.svg @@ -1,8 +1,5 @@ - - tumblr - Created with Sketch. diff --git a/public/assets/img/twitter.svg b/public/assets/img/twitter.svg index 85f01535..e0f30445 100644 --- a/public/assets/img/twitter.svg +++ b/public/assets/img/twitter.svg @@ -1,8 +1,5 @@ - - twitter - Created with Sketch. From 7b0c7bfee835c2ae83e1fc6afeb084607a33649c Mon Sep 17 00:00:00 2001 From: Minesh Date: Fri, 26 Oct 2018 18:19:55 +0100 Subject: [PATCH 47/59] Potential video centre fix. --- client/scss/asset-display/_asset-display.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 1ebac34b..1267501c 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -47,8 +47,9 @@ } .asset-video { - border: 1px solid #d0d0d0; - margin: 16px; + border: none; + margin: 0px auto; + width: 100%; padding: 6px; } From 68bbf95dcf82a3c44f7eb33cb1b023347b1e2d2f Mon Sep 17 00:00:00 2001 From: Minesh Date: Fri, 26 Oct 2018 18:30:01 +0100 Subject: [PATCH 48/59] Collapse Button offset Fix. --- client/scss/vertical-split/_vertical-split.scss | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 13d7ca93..3d6a15fc 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -23,14 +23,23 @@ border: none; display: block; margin: 15px auto 0; - width: 24px; - height: 24px; + width: 25px; + height: 25px; + text-align: center; + padding: 0px; + padding-left: 10px; + + @media (max-width: $break-point-tablet) { + padding: 0; + } + svg { stroke: $brand-color; &.plus-icon { transform: rotate(0); transition: all 0.4s ease; } + } &:hover { From 92a9ad2febb7688d8e6ad32ffee233ee8dfdfdca Mon Sep 17 00:00:00 2001 From: Minesh Date: Fri, 26 Oct 2018 18:40:48 +0100 Subject: [PATCH 49/59] Icon Alignment fix. --- client/scss/link/_link.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/scss/link/_link.scss b/client/scss/link/_link.scss index 320e848f..064c03f2 100644 --- a/client/scss/link/_link.scss +++ b/client/scss/link/_link.scss @@ -33,6 +33,8 @@ a, a:visited { .link--icon, .link--icon:visited { display: flex; + align-items: center; + .link-text { padding-bottom: 2px; border-bottom: 1px solid transparent; @@ -40,7 +42,7 @@ a, a:visited { } .icon-wrap { margin-left: 5px; - padding-top: 3px; + padding-top: 0px; align-items: center; svg { width: 16px; From 41d7f6e56f58ed6cbe60a98c60c391f120daf9f4 Mon Sep 17 00:00:00 2001 From: Minesh Date: Fri, 26 Oct 2018 18:44:45 +0100 Subject: [PATCH 50/59] Using deconstructors for faster rendering --- .../src/components/VerticalCollapsibleSplit/index.jsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index f58b2a20..1dcaca48 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -17,19 +17,18 @@ class VerticalCollapsibleSplit extends React.Component { let { props, state, - collapse, } = this; return (
-
- {this.props.top} +
+ {props.top}
-
- {this.props.bottom} +
+ {props.bottom}
); From b33c7b93a93b4b6468f4b01b427d2f72f1647e7f Mon Sep 17 00:00:00 2001 From: Jeremy Kauffman Date: Wed, 7 Nov 2018 17:21:35 -0500 Subject: [PATCH 51/59] properer merge --- client/src/containers/AssetDisplay/view.jsx | 2 +- client/src/containers/AssetInfo/view.jsx | 223 ++++++++++---------- 2 files changed, 115 insertions(+), 110 deletions(-) diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index be124f08..71137e81 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -71,8 +71,8 @@ class AssetDisplay extends React.Component { } })() } -
+
); } diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index a9f35fd4..b3ff10fc 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -6,6 +6,7 @@ import Row from '@components/Row'; import SpaceBetween from '@components/SpaceBetween'; import AssetShareButtons from '@components/AssetShareButtons'; import ClickToCopy from '@components/ClickToCopy'; +import HorizontalSplit from '@components/HorizontalSplit'; import siteConfig from '@config/siteConfig.json'; const { details: { host } } = siteConfig; @@ -28,125 +29,129 @@ class AssetInfo extends React.Component { channelCanonicalUrl = `${createCanonicalLink({channel})}`; } return ( -
- {channelName && ( - - - } - content={ - - {channelName} - - } - /> - - )} - - {claimViews ? ( - - - } - content={ - - {claimViews} - - } - /> - - ) : null} - - - - } - content={ - - } - /> - - - - - } - content={ - - } - /> - - - - - } - content={ -
- {(contentType === 'video/mp4') ? ( - `} +
+ +

{description}

+ + ) + } + rightSide={ +
+ {channelName && ( + + + } + content={ + + {channelName} + + } /> - ) : ( - `} + + )} + + {claimViews ? ( + + + } + content={ + + {claimViews} + + } /> - )} -
- } - /> - + + ) : null} - - - - Direct Link - - - Download - - - Report - - - + + + } + content={ + + } + /> + - {description && ( - -

{description}

-
- )} + + + } + content={ + + } + /> + + + + } + content={ +
+ {(contentType === 'video/mp4') ? ( + `} + /> + ) : ( + `} + /> + )} +
+ } + /> +
+ + + + + Direct Link + + + Download + + + Report + + + +
+ } />

Hosted via the LBRY blockchain

-
); } From 61b8cd9fcfbaf9b99389653381267134b3c10049 Mon Sep 17 00:00:00 2001 From: Jeremy Kauffman Date: Thu, 8 Nov 2018 19:44:59 -0500 Subject: [PATCH 52/59] strip it down --- client/scss/all.scss | 3 - client/scss/asset-display/_asset-display.scss | 94 +++------ .../scss/button-primary/_button-primary.scss | 36 +--- .../button-secondary/_button-secondary.scss | 22 +- .../button-tertiary/_button-tertiary.scss | 14 -- client/scss/button/_button.scss | 18 ++ client/scss/click-to-copy/_click-to-copy.scss | 8 +- client/scss/column/_column.scss | 4 - client/scss/dropzone/_dropzone.scss | 10 + .../_horizontal-quad-split.scss | 53 ----- .../horizontal-split/_horizontal-split.scss | 35 ++-- client/scss/input/_input.scss | 1 - client/scss/label/_label.scss | 2 +- client/scss/link/_link.scss | 73 +------ client/scss/media-queries/_media-queries.scss | 19 +- client/scss/nav-bar/_nav-bar.scss | 15 +- client/scss/page-layout/_page-layout.scss | 16 ++ client/scss/progress-bar/_progress-bar.scss | 2 +- .../publish-preview/_publish-preview.scss | 6 + .../publish-url-input/_publish-url-input.scss | 2 +- client/scss/reset/_reset.scss | 4 + client/scss/row/_row.scss | 67 +----- client/scss/select/_select.scss | 4 - client/scss/share-buttons/_share-buttons.scss | 2 +- .../social-share-link/_social-share-link.scss | 1 - client/scss/text/_text.scss | 32 +-- client/scss/textarea/_textarea.scss | 4 - client/scss/variables/_variables.scss | 31 ++- .../scss/vertical-split/_vertical-split.scss | 11 +- .../components/AboutSpeechDetails/index.jsx | 4 +- .../components/AboutSpeechOverview/index.jsx | 18 +- .../src/components/AssetInfoFooter/index.js | 14 ++ .../src/components/AssetShareButtons/index.js | 40 ++-- client/src/components/ButtonPrimary/index.jsx | 2 +- .../components/ButtonPrimaryJumbo/index.jsx | 2 +- .../src/components/ButtonTertiary/index.jsx | 14 -- client/src/components/ChannelAbout/index.jsx | 5 +- client/src/components/Column/index.jsx | 13 -- .../DropzoneDropItDisplay/index.jsx | 2 +- .../DropzoneInstructionsDisplay/index.jsx | 8 +- .../components/FormFeedbackDisplay/index.jsx | 6 +- .../components/HorizontalQuadSplit/index.jsx | 37 ---- .../src/components/HorizontalSplit/index.jsx | 4 +- .../src/components/PublishPreview/index.jsx | 12 +- client/src/components/RowLabeledAlt/index.jsx | 14 -- .../VerticalCollapsibleSplit/index.jsx | 9 +- client/src/containers/AssetInfo/view.jsx | 193 ++++++++---------- .../src/containers/ChannelCreateForm/view.jsx | 2 +- client/src/containers/ChannelTools/view.jsx | 4 +- client/src/containers/PublishDetails/view.jsx | 4 +- .../containers/PublishMetadataInputs/view.jsx | 33 +-- .../containers/PublishThumbnailInput/view.jsx | 2 +- client/src/pages/ShowAssetDetails/view.jsx | 17 +- 53 files changed, 385 insertions(+), 663 deletions(-) delete mode 100644 client/scss/button-tertiary/_button-tertiary.scss delete mode 100644 client/scss/column/_column.scss delete mode 100644 client/scss/horizontal-quad-split/_horizontal-quad-split.scss create mode 100644 client/src/components/AssetInfoFooter/index.js delete mode 100644 client/src/components/ButtonTertiary/index.jsx delete mode 100644 client/src/components/Column/index.jsx delete mode 100644 client/src/components/HorizontalQuadSplit/index.jsx delete mode 100644 client/src/components/RowLabeledAlt/index.jsx diff --git a/client/scss/all.scss b/client/scss/all.scss index 4d12e3b5..c21d276c 100644 --- a/client/scss/all.scss +++ b/client/scss/all.scss @@ -17,11 +17,8 @@ @import '~button/_button'; @import '~button-primary/_button-primary'; @import '~button-secondary/_button-secondary'; -@import '~button-tertiary/_button-tertiary'; @import '~click-to-copy/_click-to-copy'; -@import '~column/_column'; @import '~form-feedback/_form-feedback'; -@import '~horizontal-quad-split/_horizontal-quad-split'; @import '~horizontal-split/_horizontal-split'; @import '~label/_label'; @import '~nav-bar/_nav-bar'; diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 1267501c..29397d33 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -1,57 +1,39 @@ .asset-display { - background: #F6F6F6; display: flex; flex-direction: column; flex: 1 0 auto; justify-content: center; position: relative; width: 100%; - - &:after { - background: transparent; - bottom: 0; - box-shadow: inset 0 1px 2px 2px $shadow-color; - content: ''; - height: 1px; - left: 0; - position: absolute; - top: auto; - width: 100%; - } + $height-delta: 43 / 16 + ($primary-padding * 2); //fix 43!!! nav height + //max-height: calc(100vh - #{$height-delta}); + height: calc(100vh - #{$height-delta}); + overflow: hidden; } .asset-title { color: #2E2F31; - font-size: 26px; + font-size: $text-x-large; font-weight: normal; letter-spacing: 0; - line-height: 32px; - margin-top: 40px; + margin-top: $primary-padding; text-align: center; @media (max-width: $break-point-tablet) { - padding: 0 20px; + padding: 0 $tertiary-padding; } } .asset-image, .asset-video { - margin: 60px auto; max-height: 100%; - max-width: 60vh; + max-width: 100%; + margin-left: auto; + margin-right: auto; object-fit: contain; object-position: center; - - @media (max-width: $break-point-small) { - max-width: calc(100% - 30px); - } } -.asset-video { - border: none; - margin: 0px auto; - width: 100%; - padding: 6px; -} +/*below must die if this is intended to be shareable component! it also probably doesn't need to be*/ .visible-content { margin: 0; @@ -67,15 +49,6 @@ } } - &:before{ - box-shadow: inset 2px 3px 3px 2px $shadow-color; - content: ''; - height: 100px; - position: absolute; - width: 100%; - z-index: 100; - } - &:after { box-shadow: 0px 2px 3px 2px $shadow-color; content: ''; @@ -87,16 +60,17 @@ } } -.asset-information-wrap { - max-width: 800px; +.asset-info { + $asset-info-width: 1000px; + max-width: $asset-info-width; - @media (max-width: $break-point-tablet) { + @media (max-width: $asset-info-width) { margin: 0px auto; max-width: 100%; width: calc(100% - 80px); } - @media (max-width: $break-point-phone) { + @media (max-width: $break-point-tablet) { width: calc(100% - 30px); } @@ -104,10 +78,17 @@ justify-content: center; .column { - padding-top: 40px; + 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-alt; + border-right: 1px solid $grey-border; margin-right: -1px; padding-right: 40px; @@ -120,7 +101,7 @@ } &:last-child { - border-left: 1px solid $grey-alt; + border-left: 1px solid $grey-border; padding-left: 60px; @media (max-width: $break-point-tablet) { @@ -153,7 +134,7 @@ width: 320px; @media (max-width: $break-point-tablet) { - border-bottom: 1px solid $grey-alt; + border-bottom: 1px solid $grey-border; min-width: 100%; padding-bottom: 30px; width: 100%; @@ -163,22 +144,7 @@ } .asset-footer { - border-top: 1px solid $grey-alt; - padding-bottom: 80px; - padding-top: 30px; - - @media (max-width: $break-point-tablet) { - padding-top: 22px; - padding-bottom: 0; - } - - .claim-address { - - .link--brand { - font-size: 14px; - font-weight: 300; - line-height: 18px; - } - } - + border-top: 1px solid $grey-border; + padding: $tertiary-padding $primary-padding; + color: $grey; } \ No newline at end of file diff --git a/client/scss/button-primary/_button-primary.scss b/client/scss/button-primary/_button-primary.scss index ce2ac526..37c0a6e4 100644 --- a/client/scss/button-primary/_button-primary.scss +++ b/client/scss/button-primary/_button-primary.scss @@ -1,34 +1,16 @@ -.button-primary, .button-primary:focus, .button-primary:active { - border: $button-border-width $button-border-strength $primary-color; - margin-top: $thin-padding; - margin-bottom: $thin-padding; - padding: $thin-padding; +.button--primary, .button--primary:focus, .button--primary:active { + border-color: $primary-color; color: $primary-color; background-color: $background-color; - outline: 0; } -.button-primary:focus { - border-color: $secondary-color; - background-color: $tertiary-color; -} - - -.button-primary:hover { - border-color: $interactive-color; +.button--primary:hover { color: $background-color; - background-color: $interactive-color; + background-color: $primary-color; } -.button-primary:active{ - border-color: $background-color; - color: $secondary-color; - background-color: $tertiary-color; -} - -.button-primary--jumbo, .button-primary--jumbo:focus, .button-primary--jumbo:active { - width: $button-full-width; - padding-top: $secondary-padding; - padding-bottom: $secondary-padding; - font-size: x-large; -} +.button--primary:active { + $color: darken($primary-color, 10%); + border-color: $color; + background-color: $color; +} \ No newline at end of file diff --git a/client/scss/button-secondary/_button-secondary.scss b/client/scss/button-secondary/_button-secondary.scss index 29463cc9..c43dfda6 100644 --- a/client/scss/button-secondary/_button-secondary.scss +++ b/client/scss/button-secondary/_button-secondary.scss @@ -1,21 +1,11 @@ -.button--secondary, .button--secondary:focus { - border: 0; - border-bottom: $button-border-width $button-border-strength $primary-color; - padding: 0.5em; - color: $primary-color; +.button--secondary, .button--secondary:focus, .button--secondary:active { + border-bottom-color: $secondary-color; + color: $secondary-color; background-color: $background-color; - outline: 0; -} - -.button--secondary:focus{ - border-color: $secondary-color; - background-color: $tertiary-color; -} - -.button--secondary:hover { - color: $interactive-color; } .button--secondary:active { - color: $background-color; + $color: darken($secondary-color, 10%); + color: $color; + border-bottom-color: $color; } diff --git a/client/scss/button-tertiary/_button-tertiary.scss b/client/scss/button-tertiary/_button-tertiary.scss deleted file mode 100644 index 63bb23c3..00000000 --- a/client/scss/button-tertiary/_button-tertiary.scss +++ /dev/null @@ -1,14 +0,0 @@ -.button--tertiary, .button--tertiary:focus, .button--tertiary:active { - border: 0; - color: $secondary-color; - background-color: $background-color; -} - -.button--tertiary:hover { - color: $primary-color; -} - -.button--tertiary:active, .button--tertiary:focus { - color: $secondary-color; - background-color: $tertiary-color; -} diff --git a/client/scss/button/_button.scss b/client/scss/button/_button.scss index 6bb49061..7c7ba925 100644 --- a/client/scss/button/_button.scss +++ b/client/scss/button/_button.scss @@ -1,3 +1,21 @@ button { cursor: pointer; + &:active + { + outline: 0; + } +} + +.button--primary, .button--secondary +{ + border-width: $button-border-width; + border-style: $button-border-strength; + border-color: transparent; + padding: $thin-padding; +} + + +.button--jumbo, .button--jumbo:focus, .button--jumbo:active { + width: $button-full-width; + font-size: x-large; } diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/click-to-copy/_click-to-copy.scss index f66a571e..e279677a 100644 --- a/client/scss/click-to-copy/_click-to-copy.scss +++ b/client/scss/click-to-copy/_click-to-copy.scss @@ -4,22 +4,20 @@ justify-content: space-between; align-items: center; cursor: pointer; - border: 1px solid $grey-alt; + border: 1px solid $grey-border; border-radius: 6px; .click-to-copy { border: none; padding: 0.36em 0.5em; margin: 0; - color: black; background-color: transparent; width: calc(100% - 1em - 2px); font-size: 14px; - color: #2E2F31; letter-spacing: -0.6px; line-height: 20px; letter-spacing: 0; font-family: monospace; - border-right: 1px solid $grey-alt; + border-right: 1px solid $grey-border; } .icon-wrap { width: 30px; @@ -27,7 +25,7 @@ line-height: 34px; text-align: center; svg { - stroke: $brand-color; + stroke: $primary-color; width: 16px; height: 16px; } diff --git a/client/scss/column/_column.scss b/client/scss/column/_column.scss deleted file mode 100644 index 9aa9b403..00000000 --- a/client/scss/column/_column.scss +++ /dev/null @@ -1,4 +0,0 @@ -.column { - padding-left: $primary-padding; - padding-right: $primary-padding; -} diff --git a/client/scss/dropzone/_dropzone.scss b/client/scss/dropzone/_dropzone.scss index e5fb9cad..09b8b1bc 100644 --- a/client/scss/dropzone/_dropzone.scss +++ b/client/scss/dropzone/_dropzone.scss @@ -16,6 +16,7 @@ flex-direction: column; justify-content: center; align-items: center; + user-select: none; } .dropzone:hover, .dropzone--active { @@ -28,6 +29,11 @@ text-align: center; } +.dropzone-dropit-display +{ + color: $primary-color; +} + .dropzone-preview-wrapper { position: relative; width: 100%; @@ -49,3 +55,7 @@ padding: 1em; width: calc(100% - 2em); } + +.dropzone-instructions-display__chooser-label { + text-decoration: underline; +} diff --git a/client/scss/horizontal-quad-split/_horizontal-quad-split.scss b/client/scss/horizontal-quad-split/_horizontal-quad-split.scss deleted file mode 100644 index a13b7941..00000000 --- a/client/scss/horizontal-quad-split/_horizontal-quad-split.scss +++ /dev/null @@ -1,53 +0,0 @@ -.horizontal-quad-split { - display : flex; - flex-direction : row; - justify-content: space-between; - align-items : flex-start; - .left-side, .right-side { - width : 50%; - display : flex; - flex-direction : row; - justify-content: space-between; - align-items : flex-start; - .column-a, .column-b, .column-c, .column-d { - width: 50%; - }; - .column-a, .column-b, .column-c { - padding-right: $secondary-padding; - }; - }; -}; - - - -@media (max-width: $break-point-large ) { - - .horizontal-quad-split { - flex-direction : column; - .left-side, .right-side { - width : 100%; - .column-a, .column-b, .column-c, .column-d { - width: 50%; - }; - .column-b { - padding-right: 0; - } - } - }; - -} - -@media (max-width: $break-point-medium ) { - - .horizontal-quad-split { - flex-direction : column; - .left-side, .right-side { - flex-direction : column; - .column-a, .column-b, .column-c, .column-d { - width: 100%; - padding: 0; - }; - } - }; - -} diff --git a/client/scss/horizontal-split/_horizontal-split.scss b/client/scss/horizontal-split/_horizontal-split.scss index 52034731..cb1fad35 100644 --- a/client/scss/horizontal-split/_horizontal-split.scss +++ b/client/scss/horizontal-split/_horizontal-split.scss @@ -1,28 +1,39 @@ .horizontal-split { + max-width: $width-content-constrained; + width: 100%; + margin-left: auto; + margin-right: auto; display : flex; flex-direction : row; justify-content: space-between; - - .column { - width: 50%; - } }; +.horizontal-split__column { + width: 50%; + flex: 1 0 auto; + box-sizing: border-box; +} +.horizontal-split__column--left { + padding-right: $primary-padding; +} + +.horizontal-split__column--right { + padding-left: $primary-padding; +} @media (max-width: $break-point-tablet) { - .horizontal-split { + .horizontal-split__column { display : flex; flex-direction : column; justify-content: space-between; - - .column { - width: 100%; - padding-left: 0; - padding-right: 0; - padding-bottom: $secondary-padding; - } }; + .column { + width: 100%; + padding-left: 0; + padding-right: 0; + padding-bottom: $secondary-padding; + } } diff --git a/client/scss/input/_input.scss b/client/scss/input/_input.scss index be4bfb3c..c0249968 100644 --- a/client/scss/input/_input.scss +++ b/client/scss/input/_input.scss @@ -4,7 +4,6 @@ input:-webkit-autofill { input { margin: 0; - outline: none; padding: $input-padding; border: 0; background-color: $background-color; diff --git a/client/scss/label/_label.scss b/client/scss/label/_label.scss index c3d96ae3..2e92784a 100644 --- a/client/scss/label/_label.scss +++ b/client/scss/label/_label.scss @@ -11,7 +11,7 @@ cursor: pointer; } -@media (max-width: $break-point-medium ) { +@media (max-width: $break-point-tablet ) { // note: bolding break point lines up with row-label break point .label, .label-radio { diff --git a/client/scss/link/_link.scss b/client/scss/link/_link.scss index 064c03f2..bda60bc7 100644 --- a/client/scss/link/_link.scss +++ b/client/scss/link/_link.scss @@ -3,76 +3,19 @@ a, a:visited { } .link--primary, .link--primary:visited { - color: $interactive-color; -} - -.link--brand, .link--brand:visited { - color: $brand-color; -} - -.link--secondary, .link--secondary:visited { - margin: 0px; - padding: 0.3em; - color: $secondary-color; + color: $primary-color; + &:hover { text-decoration: underline; } } .link--nav { - color: $primary-color; + color: $text-color; border-bottom: 2px solid white; + &:hover { + color: $primary-color; + } } -.link--nav:hover { - color: $interactive-color; -} .link--nav-active { - color: $interactive-color; - border-bottom: 2px solid $interactive-color; -} - - -.link--icon, .link--icon:visited { - display: flex; - align-items: center; - - .link-text { - padding-bottom: 2px; - border-bottom: 1px solid transparent; - transition: all 0.2s ease; - } - .icon-wrap { - margin-left: 5px; - padding-top: 0px; - align-items: center; - svg { - width: 16px; - height: 16px; - stroke: $grey; - transition: all 0.2s ease; - } - - @media (max-width: $break-point-x-small) { - padding-top: 0; - } - } - &:hover { - .link-text { - border-bottom: 1px solid $brand-color; - } - svg { - stroke: $brand-color; - } - } -} - - -.link--hover { - display: inline-block; - padding-bottom: 2px; - border-bottom: 1px solid transparent; - transition: all 0.2s ease; - &:hover { - border-bottom: 1px solid $brand-color; - } -} - + border-bottom: 2px solid $primary-color; +} \ No newline at end of file diff --git a/client/scss/media-queries/_media-queries.scss b/client/scss/media-queries/_media-queries.scss index 638d4b67..bb9de378 100644 --- a/client/scss/media-queries/_media-queries.scss +++ b/client/scss/media-queries/_media-queries.scss @@ -4,21 +4,4 @@ display: none; } -} - -@media (max-width: $break-point-large ) { - -} - -@media (max-width: $break-point-medium) { - - -} - -@media (max-width: $break-point-small) { - -} - -@media (max-width: $break-point-x-small ) { - -} +} \ No newline at end of file diff --git a/client/scss/nav-bar/_nav-bar.scss b/client/scss/nav-bar/_nav-bar.scss index 41415546..43a85bc1 100644 --- a/client/scss/nav-bar/_nav-bar.scss +++ b/client/scss/nav-bar/_nav-bar.scss @@ -1,13 +1,12 @@ .nav-bar { - padding-left: $primary-padding; - padding-right: $primary-padding; + margin-left: $primary-padding; + margin-right: $primary-padding; - @media (max-width: $break-point-phone) { - padding-left: 15px; - padding-right: 15px; + @media (max-width: $break-point-mobile) { + margin-left: 15px; + margin-right: 15px; } - // border-bottom: 0.5px solid $tertiary-color; .select--arrow { padding: 0 1.5em 0 $input-padding; font-size: 14px; @@ -28,7 +27,7 @@ cursor: pointer; } -@media (max-width: $break-point-medium ) { +@media (max-width: $break-point-tablet ) { .nav-bar-link { padding-top: calc(1em - 2px); padding-right: 1em; @@ -38,7 +37,7 @@ } -@media (max-width: $break-point-small ) { +@media (max-width: $break-point-mobile ) { .nav-bar-link { padding-top: calc(0.5em - 2px); padding-right: 0.5em; diff --git a/client/scss/page-layout/_page-layout.scss b/client/scss/page-layout/_page-layout.scss index 06f6dae7..0c51319a 100644 --- a/client/scss/page-layout/_page-layout.scss +++ b/client/scss/page-layout/_page-layout.scss @@ -7,5 +7,21 @@ display: flex; -webkit-flex-direction: column; flex-direction: column; + margin: $secondary-padding; } } + +@media (max-width: $break-point-tablet) { + .page-layout .content { margin: $thin-padding; } +} + +@media (max-width: $break-point-mobile) { + max-width: calc(100% - 30px); +} + +//below should take some styles from _text.scss and probably elsewhere and become "markdown" or "rich" styles +.page-layout { + p { + margin-bottom: $tertiary-padding; + } +} \ No newline at end of file diff --git a/client/scss/progress-bar/_progress-bar.scss b/client/scss/progress-bar/_progress-bar.scss index c4ef6c52..7a6f7e6d 100644 --- a/client/scss/progress-bar/_progress-bar.scss +++ b/client/scss/progress-bar/_progress-bar.scss @@ -1,5 +1,5 @@ .progress-bar--inactive { - color: $secondary-color; + color: $grey; } .progress-bar--active { diff --git a/client/scss/publish-preview/_publish-preview.scss b/client/scss/publish-preview/_publish-preview.scss index b1938c70..af3aa131 100644 --- a/client/scss/publish-preview/_publish-preview.scss +++ b/client/scss/publish-preview/_publish-preview.scss @@ -1,3 +1,9 @@ +.publish-form__title { + max-width: $width-content-constrained; + margin-left: auto; + margin-right: auto; +} + .publish-preview-dim { opacity: 0.2; } diff --git a/client/scss/publish-url-input/_publish-url-input.scss b/client/scss/publish-url-input/_publish-url-input.scss index 70436e4e..41673a1e 100644 --- a/client/scss/publish-url-input/_publish-url-input.scss +++ b/client/scss/publish-url-input/_publish-url-input.scss @@ -17,5 +17,5 @@ .publish-url-text { margin: 0; padding: 0; - color: $secondary-color; + color: $help-color; } diff --git a/client/scss/reset/_reset.scss b/client/scss/reset/_reset.scss index e69de29b..85cb60d3 100644 --- a/client/scss/reset/_reset.scss +++ b/client/scss/reset/_reset.scss @@ -0,0 +1,4 @@ +button, input, textarea, label, select, option { + font-family: inherit; + font-size: inherit; +} \ No newline at end of file diff --git a/client/scss/row/_row.scss b/client/scss/row/_row.scss index 787d5161..bbf63453 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/row/_row.scss @@ -1,5 +1,5 @@ .row { - padding-bottom: 1.2em; + margin-bottom: 1.2em; } .row-labeled { @@ -10,77 +10,26 @@ } .row-labeled-label { - align-self: flex-start; width: 30%; + display: flex; + align-items: center; + flex: 1; + //bad, fix this + .label { padding-top: 0; padding-bottom: 0; } } .row-labeled-content { align-self: center; width: 70%; } -.row-labeled-alt { - display: column; - flex-direction: row; - flex-wrap: nowrap; - justify-content: flex-start; - - .row-labeled-label { - align-self: flex-start; - width: 100%; - color: $grey; - .label { - font-weight: bold; - text-transform: uppercase; - font-size: 13px; - letter-spacing: 0.4px; - line-height: 18px; - } - } - - .row-labeled-content { - align-self: center; - width: 100%; - } -} - - -@media (max-width: $break-point-medium ) { - +@media (max-width: $break-point-tablet ) { .row-labeled { flex-direction: column; } - .row-labeled-label { width: 100%; } .row-labeled-content { width: 100%; } - -} - - -@media (max-width: $break-point-tablet) and (min-width: $break-point-phone) { - .row { - margin-bottom: 1.4em; - } - - .tablet-inline-row { - display: flex; - justify-content: space-between; - width: 100%; - - >.row { - flex: 1; - margin: 0 15px 1.4em; - - &:first-child { - margin-left: 0; - } - - &:last-child { - margin-right: 0; - } - } - } -} +} \ No newline at end of file diff --git a/client/scss/select/_select.scss b/client/scss/select/_select.scss index 7142f40c..6c1154c3 100644 --- a/client/scss/select/_select.scss +++ b/client/scss/select/_select.scss @@ -1,9 +1,5 @@ select { margin: 0; - outline: none; - padding: $input-padding; - border: 0; - background-color: $background-color; display: inline-block; } diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/share-buttons/_share-buttons.scss index 010ef268..ab4234d0 100644 --- a/client/scss/share-buttons/_share-buttons.scss +++ b/client/scss/share-buttons/_share-buttons.scss @@ -45,7 +45,7 @@ } &:hover { - background: $brand-color; + background: $primary-color; } } } diff --git a/client/scss/social-share-link/_social-share-link.scss b/client/scss/social-share-link/_social-share-link.scss index 58973667..c1fa2946 100644 --- a/client/scss/social-share-link/_social-share-link.scss +++ b/client/scss/social-share-link/_social-share-link.scss @@ -7,5 +7,4 @@ .social-share-link > a{ padding-right:0.5em; padding-left:0.5em; - padding-bottom:0.3em; } \ No newline at end of file diff --git a/client/scss/text/_text.scss b/client/scss/text/_text.scss index 0c5b6140..125afe67 100644 --- a/client/scss/text/_text.scss +++ b/client/scss/text/_text.scss @@ -4,6 +4,12 @@ h1, h2, h3, h4, p { margin: 0; } +body { + color: $text-color; + font-family: 'Circular', serif; + font-size: 16px; +} + h1 { font-size: $text-xx-large; } @@ -14,12 +20,6 @@ h2 { h3 { font-size: $text-large; - font-weight: bold; -} - -p, body, button, input, textarea, label, select, option { - font-family: 'Circular', serif; - font-size: 16px; } .text--extra-large { @@ -42,24 +42,12 @@ p, body, button, input, textarea, label, select, option { font-size: $text-x-small; } -.text--underline { - text-decoration: underline; -} - -.text--primary { - color: $primary-color; -} - .text--secondary { - color: $secondary-color; -} - -.text--tertiary { - color: $tertiary-color; + color: $help-color; } .text--interactive { - color: $interactive-color; + color: $primary-color; } .text--failure { @@ -101,7 +89,7 @@ p, body, button, input, textarea, label, select, option { } -@media (max-width: $break-point-medium) { +@media (max-width: $break-point-tablet) { h1 { font-size: $text-large; @@ -134,7 +122,7 @@ p, body, button, input, textarea, label, select, option { } -@media (max-width: $break-point-x-small) { +@media (max-width: $break-point-mobile) { h1 { font-size: $text-medium; diff --git a/client/scss/textarea/_textarea.scss b/client/scss/textarea/_textarea.scss index 4f07b83e..e72bf554 100644 --- a/client/scss/textarea/_textarea.scss +++ b/client/scss/textarea/_textarea.scss @@ -1,10 +1,6 @@ textarea { margin: 0; - outline: none; padding: $input-padding; - border: 0; - border-bottom: 1px solid $secondary-color; - background-color: $background-color; display: inline-block; width: $input-full-width; } diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index 7698081e..fa86f99e 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -1,14 +1,11 @@ $base-color: white; -$primary-color: black; -$secondary-color: #9b9b9b; -$tertiary-color: #ccccc0; -$interactive-color: blue; +$primary-color: #005da0; +$secondary-color: $primary-color; $success-color: green; $failure-color: red; -// $brand-color: #ff725d; -$brand-color: #1944F9; $grey: #9095A5; -$grey-alt: #DDDFE4; +$help-color: $grey; +$grey-border: #DDDFE4; $shadow-color: rgba(169, 173, 186, 0.2); $primary-padding: 3em; @@ -17,8 +14,10 @@ $tertiary-padding: 1em; $thin-padding: 0.3em; $full-width-thin-padding: calc(100% - 0.6em); +$width-content-constrained: 1000px; + $background-color: $base-color; -$font-color: $primary-color; +$text-color: #333; $button-border-width: 1px; $button-border-strength: solid; @@ -28,18 +27,14 @@ $input-padding: 0.3em; $input-full-width: calc(100% - 0.6em); $text-xx-large: 2.5em; -$text-x-large: xx-large; -$text-large: x-large; -$text-medium: large; -$text-small: medium; +$text-x-large: x-large; +$text-large: large; +$text-medium: medium; +$text-small: small; $text-x-small: small; $break-point-xx-large: 1400px; $break-point-x-large: 1290px; $break-point-large: 1000px; -$break-point-tablet: 900px; -$break-point-medium: 800px; -$break-point-phone: 640px; -$break-point-small: 500px; -$break-point-x-small: 400px; - +$break-point-tablet: 800px; +$break-point-mobile: 500px; \ No newline at end of file diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss index 3d6a15fc..2aacc773 100644 --- a/client/scss/vertical-split/_vertical-split.scss +++ b/client/scss/vertical-split/_vertical-split.scss @@ -1,4 +1,4 @@ -.vertical-split { +.vertical-split, .visible-content { flex : 1 0 auto; display : flex; flex-direction : column; @@ -6,7 +6,13 @@ align-items : center; }; +.asset-display-wrap +{ + flex-grow: 1; +} + .collapse-content { + flex-grow: 0; @media (max-width: $break-point-tablet) { max-width: 100%; width: 100%; @@ -18,7 +24,6 @@ } .collapse-button { - outline: none; background: none; border: none; display: block; @@ -34,7 +39,7 @@ } svg { - stroke: $brand-color; + stroke: $primary-color; &.plus-icon { transform: rotate(0); transition: all 0.4s ease; diff --git a/client/src/components/AboutSpeechDetails/index.jsx b/client/src/components/AboutSpeechDetails/index.jsx index 98962e91..8a1e2532 100644 --- a/client/src/components/AboutSpeechDetails/index.jsx +++ b/client/src/components/AboutSpeechDetails/index.jsx @@ -7,9 +7,9 @@ const AboutSpeechDetails = () => {

- Terms of Service + Terms of Service
- Frequently Asked Questions + Frequently Asked Questions

diff --git a/client/src/components/AboutSpeechOverview/index.jsx b/client/src/components/AboutSpeechOverview/index.jsx index 08190424..ef53812f 100644 --- a/client/src/components/AboutSpeechOverview/index.jsx +++ b/client/src/components/AboutSpeechOverview/index.jsx @@ -8,18 +8,12 @@ const AboutSpeechOverview = () => {

Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.

-

- TWITTER -

-

- GITHUB -

-

- DISCORD CHANNEL -

-

- DOCUMENTATION -

+
); diff --git a/client/src/components/AssetInfoFooter/index.js b/client/src/components/AssetInfoFooter/index.js new file mode 100644 index 00000000..a059f670 --- /dev/null +++ b/client/src/components/AssetInfoFooter/index.js @@ -0,0 +1,14 @@ +import React from 'react'; +import Row from '@components/Row'; + +const AssetInfoFooter = ({ assetUrl, name }) => { + return ( +
+

+ Hosted via the LBRY blockchain +

+
+ ); +}; + +export default AssetInfoFooter; diff --git a/client/src/components/AssetShareButtons/index.js b/client/src/components/AssetShareButtons/index.js index 3aeada29..e733b460 100644 --- a/client/src/components/AssetShareButtons/index.js +++ b/client/src/components/AssetShareButtons/index.js @@ -9,45 +9,49 @@ const AssetShareButtons = ({ assetUrl, name }) => { target='_blank' href={`https://twitter.com/intent/tweet?text=${assetUrl}`} > - + - + - + - - - - mastodon - - - diaspora + ); }; +// +// Additional icons disabled. If you want to add additional icons, you have to solve +// https://github.com/lbryio/spee.ch/issues/687 +// +// +// mastodon +// +// +// diaspora +// export default AssetShareButtons; diff --git a/client/src/components/ButtonPrimary/index.jsx b/client/src/components/ButtonPrimary/index.jsx index 6b8230d3..30082cd4 100644 --- a/client/src/components/ButtonPrimary/index.jsx +++ b/client/src/components/ButtonPrimary/index.jsx @@ -4,7 +4,7 @@ const ButtonPrimary = ({ value, onClickHandler, type = 'button' }) => { return ( - ); -}; - -export default ButtonTertiary; diff --git a/client/src/components/ChannelAbout/index.jsx b/client/src/components/ChannelAbout/index.jsx index 2e04f18f..2d2a8f46 100644 --- a/client/src/components/ChannelAbout/index.jsx +++ b/client/src/components/ChannelAbout/index.jsx @@ -2,8 +2,9 @@ import React from 'react'; const ChannelAbout = () => { return ( -
-

Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you're documenting important events, or making a public repository for cat gifs (password: '1234'), try creating a channel for it!

+
+

Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends.

+

You can create 1 channel, or 100, so whether you're documenting important events, or making a public repository for cat gifs (password: '1234'), try creating a channel for it!

); }; diff --git a/client/src/components/Column/index.jsx b/client/src/components/Column/index.jsx deleted file mode 100644 index dcd2e2bc..00000000 --- a/client/src/components/Column/index.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; - -class Column extends React.Component { - render () { - return ( -
- {this.props.children} -
- ); - } -} - -export default Column; diff --git a/client/src/components/DropzoneDropItDisplay/index.jsx b/client/src/components/DropzoneDropItDisplay/index.jsx index beaf820b..e6798093 100644 --- a/client/src/components/DropzoneDropItDisplay/index.jsx +++ b/client/src/components/DropzoneDropItDisplay/index.jsx @@ -3,7 +3,7 @@ import React from 'react'; const DropzoneDropItDisplay = () => { return (
-

Drop it.

+ Drop it.
); } diff --git a/client/src/components/DropzoneInstructionsDisplay/index.jsx b/client/src/components/DropzoneInstructionsDisplay/index.jsx index 3f13c69f..65320e7e 100644 --- a/client/src/components/DropzoneInstructionsDisplay/index.jsx +++ b/client/src/components/DropzoneInstructionsDisplay/index.jsx @@ -6,15 +6,15 @@ const DropzoneInstructionsDisplay = ({fileError}) => { return (
-

Drag & drop image or video here to publish

+ Drag & drop image or video here to publish
-

OR

+ OR
{ fileError ? (
-

CHOOSE FILE

+ CHOOSE FILE
{ />
) : ( -

CHOOSE FILE

+ CHOOSE FILE )}
); diff --git a/client/src/components/FormFeedbackDisplay/index.jsx b/client/src/components/FormFeedbackDisplay/index.jsx index 7dd62d7e..c324c7f0 100644 --- a/client/src/components/FormFeedbackDisplay/index.jsx +++ b/client/src/components/FormFeedbackDisplay/index.jsx @@ -4,13 +4,13 @@ const FormFeedbackDisplay = ({ errorMessage, defaultMessage }) => { return (
{ errorMessage ? ( -

{errorMessage}

+ {errorMessage} ) : (
{ defaultMessage ? ( -

{defaultMessage}

+ {defaultMessage} ) : ( -

 

+   )}
)} diff --git a/client/src/components/HorizontalQuadSplit/index.jsx b/client/src/components/HorizontalQuadSplit/index.jsx deleted file mode 100644 index 1bbbc319..00000000 --- a/client/src/components/HorizontalQuadSplit/index.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import Row from '@components/Row'; - -class HorizontalTriSplit extends React.Component { - render () { - return ( -
-
-
- - {this.props.columnA} - -
-
- - {this.props.columnB} - -
-
-
-
- - {this.props.columnC} - -
-
- - {this.props.columnD} - -
-
-
- ); - } -} - -export default HorizontalTriSplit; diff --git a/client/src/components/HorizontalSplit/index.jsx b/client/src/components/HorizontalSplit/index.jsx index c5151fa3..7b82a2c1 100644 --- a/client/src/components/HorizontalSplit/index.jsx +++ b/client/src/components/HorizontalSplit/index.jsx @@ -4,10 +4,10 @@ class HorizontalSplit extends React.Component { render () { return (
-
+
{this.props.leftSide}
-
+
{this.props.rightSide}
diff --git a/client/src/components/PublishPreview/index.jsx b/client/src/components/PublishPreview/index.jsx index 9f7240cf..512eb310 100644 --- a/client/src/components/PublishPreview/index.jsx +++ b/client/src/components/PublishPreview/index.jsx @@ -5,13 +5,17 @@ import PublishDetails from '@containers/PublishDetails'; import PublishTitleInput from '@containers/PublishTitleInput'; import Row from '@components/Row'; +// this class seems more like PublishForm and should probably be renamed + class PublishPreview extends React.Component { render () { return ( -
- - - +
+
+ + + +
} rightSide={} diff --git a/client/src/components/RowLabeledAlt/index.jsx b/client/src/components/RowLabeledAlt/index.jsx deleted file mode 100644 index d5e2c7d0..00000000 --- a/client/src/components/RowLabeledAlt/index.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; - -class RowLabeledAlt extends React.Component { - render () { - return ( -
-
{this.props.label}
-
{this.props.content}
-
- ); - } -} - -export default RowLabeledAlt; diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx index 1dcaca48..d670b6e8 100644 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ b/client/src/components/VerticalCollapsibleSplit/index.jsx @@ -5,11 +5,18 @@ class VerticalCollapsibleSplit extends React.Component { constructor (props) { super(props); this.collapse = this.collapse.bind(this); - this.state = { closed: false }; + this.storageKey = 'vert-split-state-' + this.props.name; + // const closed = window && window.localStorage + // ? !!window.localStorage.getItem(this.storageKey) : false; + const closed = false; + this.state = { closed: closed }; } collapse () { this.setState({ closed: !this.state.closed }); + // if (window && window.localStorage) { + // window.localStorage.setItem(this.storageKey, !this.state.closed); + // } document.querySelectorAll(`[data-name='${this.props.name}']`).forEach(el => el.classList.toggle('closed')); } diff --git a/client/src/containers/AssetInfo/view.jsx b/client/src/containers/AssetInfo/view.jsx index b3ff10fc..581c61fb 100644 --- a/client/src/containers/AssetInfo/view.jsx +++ b/client/src/containers/AssetInfo/view.jsx @@ -11,6 +11,7 @@ import HorizontalSplit from '@components/HorizontalSplit'; import siteConfig from '@config/siteConfig.json'; const { details: { host } } = siteConfig; import createCanonicalLink from '../../../../utils/createCanonicalLink'; +import AssetInfoFooter from '../../components/AssetInfoFooter/index'; class AssetInfo extends React.Component { render () { @@ -29,129 +30,111 @@ class AssetInfo extends React.Component { channelCanonicalUrl = `${createCanonicalLink({channel})}`; } return ( -
+
-

{description}

- +

{description}

) } rightSide={
{channelName && ( - - - } - content={ - - {channelName} - - } - /> - + + } + content={ + + {channelName} + + } + /> )} {claimViews ? ( - - - } - content={ - - {claimViews} - - } - /> - + + } + content={ + + {claimViews} + + } + /> ) : null} - - - } - content={ - - } - /> - + + } + content={ + + } + /> - - - } - content={ - - } - /> - + + } + content={ + + } + /> - - - } - content={ -
- {(contentType === 'video/mp4') ? ( - `} - /> - ) : ( - `} - /> - )} -
- } - /> -
+ + } + content={ +
+ {(contentType === 'video/mp4') ? ( + `} + /> + ) : ( + `} + /> + )} +
+ } + /> - - - - Direct Link - - - Download - - - Report - - - + + + Direct Link + + + Download + + + Report + +
} /> - -

- Hosted via the LBRY blockchain -

-
+
); } diff --git a/client/src/containers/ChannelCreateForm/view.jsx b/client/src/containers/ChannelCreateForm/view.jsx index bda30e12..2d175ce2 100644 --- a/client/src/containers/ChannelCreateForm/view.jsx +++ b/client/src/containers/ChannelCreateForm/view.jsx @@ -81,7 +81,7 @@ class ChannelCreateForm extends React.Component { ) : (
-

{status}

+ {status}
)} diff --git a/client/src/containers/ChannelTools/view.jsx b/client/src/containers/ChannelTools/view.jsx index 0be7bef0..455b6d26 100644 --- a/client/src/containers/ChannelTools/view.jsx +++ b/client/src/containers/ChannelTools/view.jsx @@ -8,11 +8,11 @@ class ChannelTools extends React.Component { return (
-

Log in to an existing channel:

+

Log in to existing channel

{!this.props.closedRegistration && ( -

Create a brand new channel:

+

Create new channel

)}
diff --git a/client/src/containers/PublishDetails/view.jsx b/client/src/containers/PublishDetails/view.jsx index ac55e226..7590e66f 100644 --- a/client/src/containers/PublishDetails/view.jsx +++ b/client/src/containers/PublishDetails/view.jsx @@ -6,7 +6,7 @@ import PublishMetadataInputs from '@containers/PublishMetadataInputs'; import ChannelSelect from '@containers/ChannelSelect'; import Row from '@components/Row'; import ButtonPrimaryJumbo from '@components/ButtonPrimaryJumbo'; -import ButtonTertiary from '@components/ButtonTertiary'; +import ButtonSecondary from '@components/ButtonSecondary'; import SpaceAround from '@components/SpaceAround'; import PublishFinePrint from '@components/PublishFinePrint'; @@ -48,7 +48,7 @@ class PublishDetails extends React.Component { - diff --git a/client/src/containers/PublishMetadataInputs/view.jsx b/client/src/containers/PublishMetadataInputs/view.jsx index 10d8a793..ec5d2a59 100644 --- a/client/src/containers/PublishMetadataInputs/view.jsx +++ b/client/src/containers/PublishMetadataInputs/view.jsx @@ -3,6 +3,7 @@ import PublishDescriptionInput from '@components/PublishDescriptionInput'; import PublishLicenseInput from '@components/PublishLicenseInput'; import PublishNsfwInput from '@components/PublishNsfwInput'; import ButtonSecondary from '@components/ButtonSecondary'; +import Row from '@components/Row'; class PublishMetadataInputs extends React.Component { constructor (props) { @@ -29,19 +30,25 @@ class PublishMetadataInputs extends React.Component { return (
{this.props.showMetadataInputs && ( -
- - - -
+ + + + + + + + + + + )}
) : ( -

loading...

+ loading... ) } } + /> + + */ + class ShowAssetDetails extends React.Component { render () { const { asset } = this.props; @@ -16,11 +26,8 @@ class ShowAssetDetails extends React.Component { pageTitle={`${name} - details`} asset={asset} > - } - bottom={} - /> + + ); } From 33cf063fbb7015d521a0ffd6fce68d29c1983544 Mon Sep 17 00:00:00 2001 From: Jeremy Kauffman Date: Fri, 9 Nov 2018 13:02:28 -0500 Subject: [PATCH 53/59] fix unterminated div --- client/src/containers/AssetDisplay/view.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index eef963df..6e5079f3 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -89,6 +89,7 @@ class AssetDisplay extends React.Component { thumbnail={thumbnail} /> } +
From 44b5c27ef59184ec2c9f706cef4eae52242d0106 Mon Sep 17 00:00:00 2001 From: Jeremy Kauffman Date: Fri, 9 Nov 2018 13:55:53 -0500 Subject: [PATCH 54/59] css destroying --- client/scss/all.scss | 1 - client/scss/asset-display/_asset-display.scss | 69 +++++++++++--- client/scss/body/_body.scss | 2 +- client/scss/nav-bar/_nav-bar.scss | 3 +- client/scss/page-layout/_page-layout.scss | 2 +- client/scss/text/_text.scss | 94 ------------------- client/scss/variables/_variables.scss | 10 +- .../scss/vertical-split/_vertical-split.scss | 55 ----------- .../VerticalCollapsibleSplit/index.jsx | 45 --------- client/src/containers/AssetDisplay/view.jsx | 66 ++++++------- client/src/containers/AssetTitle/view.jsx | 4 +- client/src/pages/ShowAssetDetails/view.jsx | 39 +++++--- 12 files changed, 123 insertions(+), 267 deletions(-) delete mode 100644 client/scss/vertical-split/_vertical-split.scss delete mode 100644 client/src/components/VerticalCollapsibleSplit/index.jsx diff --git a/client/scss/all.scss b/client/scss/all.scss index c21d276c..6629e7d1 100644 --- a/client/scss/all.scss +++ b/client/scss/all.scss @@ -31,7 +31,6 @@ @import '~space-between/_space-between'; @import '~space-around/_space-around'; @import '~row/_row'; -@import '~vertical-split/_vertical-split'; @import '~tooltip/_tooltip'; @import '~social-share-link/_social-share-link'; diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/asset-display/_asset-display.scss index 29397d33..40800f02 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/asset-display/_asset-display.scss @@ -5,23 +5,12 @@ justify-content: center; position: relative; width: 100%; - $height-delta: 43 / 16 + ($primary-padding * 2); //fix 43!!! nav height - //max-height: calc(100vh - #{$height-delta}); - height: calc(100vh - #{$height-delta}); overflow: hidden; + align-items: center; } .asset-title { - color: #2E2F31; - font-size: $text-x-large; - font-weight: normal; - letter-spacing: 0; - margin-top: $primary-padding; - text-align: center; - - @media (max-width: $break-point-tablet) { - padding: 0 $tertiary-padding; - } + padding-top: $secondary-padding; } .asset-image, .asset-video { @@ -31,6 +20,7 @@ margin-right: auto; object-fit: contain; object-position: center; + background: black; } /*below must die if this is intended to be shareable component! it also probably doesn't need to be*/ @@ -60,6 +50,59 @@ } } +/* +.vertical-split, .visible-content { + flex : 1 0 auto; + display : flex; + flex-direction : column; + justify-content: space-between; + align-items : center; +}; + +.collapse-content { + flex-grow: 0; + @media (max-width: $break-point-tablet) { + max-width: 100%; + width: 100%; + } +} + +.collapse-content.closed{ + display: none; +} + +.collapse-button { + background: none; + border: none; + display: block; + margin: 15px auto 0; + width: 25px; + height: 25px; + text-align: center; + padding: 0px; + padding-left: 10px; + + @media (max-width: $break-point-tablet) { + padding: 0; + } + + svg { + stroke: $primary-color; + &.plus-icon { + transform: rotate(0); + transition: all 0.4s ease; + } + + } + + &:hover { + .plus-icon { + transform: rotate(-180deg); + } + } +} + */ + .asset-info { $asset-info-width: 1000px; max-width: $asset-info-width; diff --git a/client/scss/body/_body.scss b/client/scss/body/_body.scss index 6072cbd4..0c1b55b5 100644 --- a/client/scss/body/_body.scss +++ b/client/scss/body/_body.scss @@ -1,7 +1,7 @@ body { margin: 0; padding: 0; - height: 100%; + min-height: 100%; word-wrap: break-word; display: -webkit-flex; display: flex; diff --git a/client/scss/nav-bar/_nav-bar.scss b/client/scss/nav-bar/_nav-bar.scss index 43a85bc1..f817e781 100644 --- a/client/scss/nav-bar/_nav-bar.scss +++ b/client/scss/nav-bar/_nav-bar.scss @@ -1,4 +1,5 @@ .nav-bar { + margin-top: $thin-padding; margin-left: $primary-padding; margin-right: $primary-padding; @@ -18,7 +19,7 @@ .nav-bar-link { padding: calc(1em - 2px); display: inline-block; - font-size: 14px; + font-size: $text-medium; letter-spacing: 0.4px; text-transform: uppercase; } diff --git a/client/scss/page-layout/_page-layout.scss b/client/scss/page-layout/_page-layout.scss index 0c51319a..e3092a65 100644 --- a/client/scss/page-layout/_page-layout.scss +++ b/client/scss/page-layout/_page-layout.scss @@ -12,7 +12,7 @@ } @media (max-width: $break-point-tablet) { - .page-layout .content { margin: $thin-padding; } + .page-layout .content { margin: $tertiary-padding; } } @media (max-width: $break-point-mobile) { diff --git a/client/scss/text/_text.scss b/client/scss/text/_text.scss index 125afe67..357099f2 100644 --- a/client/scss/text/_text.scss +++ b/client/scss/text/_text.scss @@ -57,97 +57,3 @@ h3 { .text--success { color: $success-color; } - -@media (max-width: $break-point-x-large ) { - h1 { - font-size: $text-x-large; - } - - h2 { - font-size: $text-large; - } - - h3 { - font-size: $text-medium; - } - - p, body, button, input, textarea, label, select, option { - font-size: $text-medium; - } - - .text--extra-large { - font-size: $text-x-large; - } - - .text--large { - font-size: $text-medium; - } - - .text--medium { - font-size: $text-small; - } - -} - -@media (max-width: $break-point-tablet) { - - h1 { - font-size: $text-large; - } - - h2 { - font-size: $text-medium; - } - - h3 { - font-size: $text-small; - } - - p, body, button, input, textarea, label, select, option { - font-size: 15px; - } - - .text--extra-large { - font-size: $text-large; - } - - .text--large { - font-size: $text-medium; - } - - .text--small { - font-size: $text-x-small; - } - - -} - -@media (max-width: $break-point-mobile) { - - h1 { - font-size: $text-medium; - font-weight: bold; - } - - h2 { - font-size: $text-small; - } - - p, body, button, input, textarea, label, select, option { - font-size: 15px; - } - - .text--extra-large { - font-size: $text-x-small; - font-weight: bold; - } - - .text--large { - font-size: $text-x-small; - } - - .text--medium { - font-size: $text-x-small; - } - -} diff --git a/client/scss/variables/_variables.scss b/client/scss/variables/_variables.scss index fa86f99e..a9835c98 100644 --- a/client/scss/variables/_variables.scss +++ b/client/scss/variables/_variables.scss @@ -27,11 +27,11 @@ $input-padding: 0.3em; $input-full-width: calc(100% - 0.6em); $text-xx-large: 2.5em; -$text-x-large: x-large; -$text-large: large; -$text-medium: medium; -$text-small: small; -$text-x-small: small; +$text-x-large: 2.0em; +$text-large: 1.5em; +$text-medium: 1.0em; +$text-small: 0.9em; +$text-x-small: 0.8em; $break-point-xx-large: 1400px; $break-point-x-large: 1290px; diff --git a/client/scss/vertical-split/_vertical-split.scss b/client/scss/vertical-split/_vertical-split.scss deleted file mode 100644 index 2aacc773..00000000 --- a/client/scss/vertical-split/_vertical-split.scss +++ /dev/null @@ -1,55 +0,0 @@ -.vertical-split, .visible-content { - flex : 1 0 auto; - display : flex; - flex-direction : column; - justify-content: space-between; - align-items : center; -}; - -.asset-display-wrap -{ - flex-grow: 1; -} - -.collapse-content { - flex-grow: 0; - @media (max-width: $break-point-tablet) { - max-width: 100%; - width: 100%; - } -} - -.collapse-content.closed{ - display: none; -} - -.collapse-button { - background: none; - border: none; - display: block; - margin: 15px auto 0; - width: 25px; - height: 25px; - text-align: center; - padding: 0px; - padding-left: 10px; - - @media (max-width: $break-point-tablet) { - padding: 0; - } - - svg { - stroke: $primary-color; - &.plus-icon { - transform: rotate(0); - transition: all 0.4s ease; - } - - } - - &:hover { - .plus-icon { - transform: rotate(-180deg); - } - } -} \ No newline at end of file diff --git a/client/src/components/VerticalCollapsibleSplit/index.jsx b/client/src/components/VerticalCollapsibleSplit/index.jsx deleted file mode 100644 index d670b6e8..00000000 --- a/client/src/components/VerticalCollapsibleSplit/index.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import React from 'react'; -import * as Icon from 'react-feather'; -class VerticalCollapsibleSplit extends React.Component { - - constructor (props) { - super(props); - this.collapse = this.collapse.bind(this); - this.storageKey = 'vert-split-state-' + this.props.name; - // const closed = window && window.localStorage - // ? !!window.localStorage.getItem(this.storageKey) : false; - const closed = false; - this.state = { closed: closed }; - } - - collapse () { - this.setState({ closed: !this.state.closed }); - // if (window && window.localStorage) { - // window.localStorage.setItem(this.storageKey, !this.state.closed); - // } - document.querySelectorAll(`[data-name='${this.props.name}']`).forEach(el => el.classList.toggle('closed')); - } - - render () { - let { - props, - state, - } = this; - - return ( -
-
- {props.top} - -
-
- {props.bottom} -
-
- ); - } -}; - -export default VerticalCollapsibleSplit; diff --git a/client/src/containers/AssetDisplay/view.jsx b/client/src/containers/AssetDisplay/view.jsx index 6e5079f3..98a78366 100644 --- a/client/src/containers/AssetDisplay/view.jsx +++ b/client/src/containers/AssetDisplay/view.jsx @@ -1,6 +1,5 @@ import React from 'react'; import Row from '@components/Row'; -import AssetTitle from '@containers/AssetTitle'; import ProgressBar from '@components/ProgressBar'; import { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from '../../constants/asset_display_states'; import createCanonicalLink from '../../../../utils/createCanonicalLink'; @@ -56,42 +55,37 @@ class AssetDisplay extends React.Component { } const sourceUrl = `${createCanonicalLink({ asset: asset.claimData })}.${fileExt}?${outpoint}`; return ( -
-
-
- {(status === LOCAL_CHECK) && -
-

Checking to see if Spee.ch has your asset locally...

-
- } - {(status === UNAVAILABLE) && -
-

Sit tight, we're searching the LBRY blockchain for your asset!

- -

Curious what magic is happening here? Learn more.

-
- } - {(status === ERROR) && -
- -

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the following error message in the LBRY discord.

-
- -

{error}

-
-
- } - {(status === AVAILABLE) && - - } -
+
+ {(status === LOCAL_CHECK) && +
+

Checking to see if Spee.ch has your asset locally...

- + } + {(status === UNAVAILABLE) && +
+

Sit tight, we're searching the LBRY blockchain for your asset!

+ +

Curious what magic is happening here? Learn more.

+
+ } + {(status === ERROR) && +
+ +

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the following error message in the LBRY discord.

+
+ +

{error}

+
+
+ } + {(status === AVAILABLE) && + + }
); } diff --git a/client/src/containers/AssetTitle/view.jsx b/client/src/containers/AssetTitle/view.jsx index 7821920a..eaf3d6d4 100644 --- a/client/src/containers/AssetTitle/view.jsx +++ b/client/src/containers/AssetTitle/view.jsx @@ -2,9 +2,7 @@ import React from 'react'; const AssetTitle = ({ title }) => { return ( -
-

{title}

-
+

{title}

); }; diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index 323a45b3..87cce975 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -1,20 +1,31 @@ import React from 'react'; import PageLayout from '@components/PageLayout'; -import VerticalCollapsibleSplit from '@components/VerticalCollapsibleSplit'; +import * as Icon from 'react-feather'; import AssetDisplay from '@containers/AssetDisplay'; +import AssetInfo from '@containers/AssetInfo'; import ErrorPage from '@pages/ErrorPage'; - -/* - - } - /> - - */ +import AssetTitle from '@containers/AssetTitle'; class ShowAssetDetails extends React.Component { + + constructor (props) { + super(props); + this.collapse = this.collapse.bind(this); + // this.storageKey = 'vert-split-state-' + this.props.name; + // const closed = window && window.localStorage + // ? !!window.localStorage.getItem(this.storageKey) : false; + const closed = false; + this.state = { closed: closed }; + } + + collapse () { + this.setState({ closed: !this.state.closed }); + // if (window && window.localStorage) { + // window.localStorage.setItem(this.storageKey, !this.state.closed); + // } + // document.querySelectorAll(`[data-name='${this.props.name}']`).forEach(el => el.classList.toggle('closed')); + } + render () { const { asset } = this.props; if (asset) { @@ -25,7 +36,11 @@ class ShowAssetDetails extends React.Component { asset={asset} > - + + + { !this.state.closed && } ); } From 3bbe2582e5349f1bcc9849893d348008e208d30c Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Sat, 10 Nov 2018 14:59:53 -0500 Subject: [PATCH 55/59] moar cleanup --- .../{asset-display => }/_asset-display.scss | 105 +++++------------- .../{asset-preview => }/_asset-preview.scss | 0 client/scss/{body => }/_body.scss | 0 .../{button-primary => }/_button-primary.scss | 0 .../_button-secondary.scss | 0 client/scss/{button => }/_button.scss | 0 .../_channel-claims-display.scss | 0 .../{click-to-copy => }/_click-to-copy.scss | 0 client/scss/{dropzone => }/_dropzone.scss | 0 .../{form-feedback => }/_form-feedback.scss | 0 client/scss/_form.scss | 7 ++ .../_horizontal-split.scss | 23 ++++ client/scss/{html => }/_html.scss | 0 client/scss/{input => }/_input.scss | 8 +- client/scss/{label => }/_label.scss | 0 client/scss/{link => }/_link.scss | 0 .../{media-queries => }/_media-queries.scss | 0 client/scss/{nav-bar => }/_nav-bar.scss | 13 +-- .../{page-content => }/_page-content.scss | 0 .../_page-layout-show-lite.scss | 0 .../scss/{page-layout => }/_page-layout.scss | 0 .../{progress-bar => }/_progress-bar.scss | 5 + .../_publish-disabled-message.scss | 0 .../_publish-preview.scss | 4 + .../{publish-status => }/_publish-status.scss | 0 .../_publish-url-input.scss | 0 client/scss/{react-app => }/_react-app.scss | 0 client/scss/{reset => }/_reset.scss | 0 client/scss/{row => }/_row.scss | 5 +- client/scss/_select.scss | 4 + .../{share-buttons => }/_share-buttons.scss | 0 .../_social-share-link.scss | 0 .../{space-around => }/_space-around.scss | 0 .../{space-between => }/_space-between.scss | 0 client/scss/{text => }/_text.scss | 0 client/scss/{textarea => }/_textarea.scss | 0 client/scss/{tooltip => }/_tooltip.scss | 0 client/scss/{variables => }/_variables.scss | 0 client/scss/{video => }/_video.scss | 0 client/scss/all.scss | 81 +++++++------- client/scss/select/_select.scss | 13 --- .../ChannelSelectDropdown/index.jsx | 1 - .../components/FormFeedbackDisplay/index.jsx | 4 +- .../src/components/HorizontalSplit/index.jsx | 19 +++- .../NavBarChannelOptionsDropdown/index.jsx | 1 - client/src/components/ProgressBar/index.jsx | 2 +- .../components/PublishLicenseInput/index.jsx | 1 - .../src/components/PublishPreview/index.jsx | 1 + .../src/containers/ChannelCreateForm/view.jsx | 7 +- .../src/containers/ChannelLoginForm/view.jsx | 7 +- client/src/containers/ChannelSelect/view.jsx | 8 +- client/src/containers/ChannelTools/view.jsx | 16 +-- client/src/containers/Dropzone/view.jsx | 4 +- client/src/containers/PublishDetails/view.jsx | 8 +- .../containers/PublishMetadataInputs/view.jsx | 28 ++--- client/src/pages/AboutPage/index.jsx | 1 + client/src/pages/LoginPage/view.jsx | 1 + client/src/pages/ShowAssetDetails/view.jsx | 17 +-- deployment-config.json | 10 ++ 59 files changed, 190 insertions(+), 214 deletions(-) rename client/scss/{asset-display => }/_asset-display.scss (53%) rename client/scss/{asset-preview => }/_asset-preview.scss (100%) rename client/scss/{body => }/_body.scss (100%) rename client/scss/{button-primary => }/_button-primary.scss (100%) rename client/scss/{button-secondary => }/_button-secondary.scss (100%) rename client/scss/{button => }/_button.scss (100%) rename client/scss/{channel-claims-display => }/_channel-claims-display.scss (100%) rename client/scss/{click-to-copy => }/_click-to-copy.scss (100%) rename client/scss/{dropzone => }/_dropzone.scss (100%) rename client/scss/{form-feedback => }/_form-feedback.scss (100%) create mode 100644 client/scss/_form.scss rename client/scss/{horizontal-split => }/_horizontal-split.scss (60%) rename client/scss/{html => }/_html.scss (100%) rename client/scss/{input => }/_input.scss (92%) rename client/scss/{label => }/_label.scss (100%) rename client/scss/{link => }/_link.scss (100%) rename client/scss/{media-queries => }/_media-queries.scss (100%) rename client/scss/{nav-bar => }/_nav-bar.scss (84%) rename client/scss/{page-content => }/_page-content.scss (100%) rename client/scss/{page-layout-show-lite => }/_page-layout-show-lite.scss (100%) rename client/scss/{page-layout => }/_page-layout.scss (100%) rename client/scss/{progress-bar => }/_progress-bar.scss (50%) rename client/scss/{publish-disabled-message => }/_publish-disabled-message.scss (100%) rename client/scss/{publish-preview => }/_publish-preview.scss (68%) rename client/scss/{publish-status => }/_publish-status.scss (100%) rename client/scss/{publish-url-input => }/_publish-url-input.scss (100%) rename client/scss/{react-app => }/_react-app.scss (100%) rename client/scss/{reset => }/_reset.scss (100%) rename client/scss/{row => }/_row.scss (87%) create mode 100644 client/scss/_select.scss rename client/scss/{share-buttons => }/_share-buttons.scss (100%) rename client/scss/{social-share-link => }/_social-share-link.scss (100%) rename client/scss/{space-around => }/_space-around.scss (100%) rename client/scss/{space-between => }/_space-between.scss (100%) rename client/scss/{text => }/_text.scss (100%) rename client/scss/{textarea => }/_textarea.scss (100%) rename client/scss/{tooltip => }/_tooltip.scss (100%) rename client/scss/{variables => }/_variables.scss (100%) rename client/scss/{video => }/_video.scss (100%) delete mode 100644 client/scss/select/_select.scss create mode 100644 deployment-config.json diff --git a/client/scss/asset-display/_asset-display.scss b/client/scss/_asset-display.scss similarity index 53% rename from client/scss/asset-display/_asset-display.scss rename to client/scss/_asset-display.scss index 40800f02..2350f29f 100644 --- a/client/scss/asset-display/_asset-display.scss +++ b/client/scss/_asset-display.scss @@ -1,16 +1,30 @@ +.asset-main { + height: 80vh; + display: flex; + flex-direction: column; + align-items: space-between; + align-items: center; +} + .asset-display { display: flex; flex-direction: column; - flex: 1 0 auto; + flex: 1 1 auto; justify-content: center; position: relative; width: 100%; overflow: hidden; align-items: center; + min-height: 50vh; } .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 { @@ -50,7 +64,7 @@ } } -/* + .vertical-split, .visible-content { flex : 1 0 auto; display : flex; @@ -80,7 +94,6 @@ height: 25px; text-align: center; padding: 0px; - padding-left: 10px; @media (max-width: $break-point-tablet) { padding: 0; @@ -101,93 +114,25 @@ } } } - */ .asset-info { $asset-info-width: 1000px; max-width: $asset-info-width; - - @media (max-width: $asset-info-width) { - margin: 0px auto; - max-width: 100%; - width: calc(100% - 80px); - } + margin: $primary-padding; + max-width: 100%; @media (max-width: $break-point-tablet) { - width: calc(100% - 30px); + margin: $primary-padding $secondary-padding; } - .horizontal-split { - justify-content: center; - - .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; - } - } - } + @media (max-width: $break-point-mobile) { + margin: $primary-padding 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 { border-top: 1px solid $grey-border; - padding: $tertiary-padding $primary-padding; + padding-top: $primary-padding; + margin-top: $primary-padding; color: $grey; -} \ No newline at end of file +} diff --git a/client/scss/asset-preview/_asset-preview.scss b/client/scss/_asset-preview.scss similarity index 100% rename from client/scss/asset-preview/_asset-preview.scss rename to client/scss/_asset-preview.scss diff --git a/client/scss/body/_body.scss b/client/scss/_body.scss similarity index 100% rename from client/scss/body/_body.scss rename to client/scss/_body.scss diff --git a/client/scss/button-primary/_button-primary.scss b/client/scss/_button-primary.scss similarity index 100% rename from client/scss/button-primary/_button-primary.scss rename to client/scss/_button-primary.scss diff --git a/client/scss/button-secondary/_button-secondary.scss b/client/scss/_button-secondary.scss similarity index 100% rename from client/scss/button-secondary/_button-secondary.scss rename to client/scss/_button-secondary.scss diff --git a/client/scss/button/_button.scss b/client/scss/_button.scss similarity index 100% rename from client/scss/button/_button.scss rename to client/scss/_button.scss diff --git a/client/scss/channel-claims-display/_channel-claims-display.scss b/client/scss/_channel-claims-display.scss similarity index 100% rename from client/scss/channel-claims-display/_channel-claims-display.scss rename to client/scss/_channel-claims-display.scss diff --git a/client/scss/click-to-copy/_click-to-copy.scss b/client/scss/_click-to-copy.scss similarity index 100% rename from client/scss/click-to-copy/_click-to-copy.scss rename to client/scss/_click-to-copy.scss diff --git a/client/scss/dropzone/_dropzone.scss b/client/scss/_dropzone.scss similarity index 100% rename from client/scss/dropzone/_dropzone.scss rename to client/scss/_dropzone.scss diff --git a/client/scss/form-feedback/_form-feedback.scss b/client/scss/_form-feedback.scss similarity index 100% rename from client/scss/form-feedback/_form-feedback.scss rename to client/scss/_form-feedback.scss diff --git a/client/scss/_form.scss b/client/scss/_form.scss new file mode 100644 index 00000000..16603923 --- /dev/null +++ b/client/scss/_form.scss @@ -0,0 +1,7 @@ +.form-group { + padding-bottom: $secondary-padding; +} + +.form-title { + padding-bottom: $secondary-padding; +} diff --git a/client/scss/horizontal-split/_horizontal-split.scss b/client/scss/_horizontal-split.scss similarity index 60% rename from client/scss/horizontal-split/_horizontal-split.scss rename to client/scss/_horizontal-split.scss index cb1fad35..0cf4fc87 100644 --- a/client/scss/horizontal-split/_horizontal-split.scss +++ b/client/scss/_horizontal-split.scss @@ -6,6 +6,21 @@ display : flex; flex-direction : row; 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 { @@ -16,10 +31,18 @@ .horizontal-split__column--left { padding-right: $primary-padding; + + @media (max-width: $break-point-mobile) { + padding-right: $thin-padding; + } } .horizontal-split__column--right { padding-left: $primary-padding; + + @media (max-width: $break-point-mobile) { + padding-left: $thin-padding; + } } @media (max-width: $break-point-tablet) { diff --git a/client/scss/html/_html.scss b/client/scss/_html.scss similarity index 100% rename from client/scss/html/_html.scss rename to client/scss/_html.scss diff --git a/client/scss/input/_input.scss b/client/scss/_input.scss similarity index 92% rename from client/scss/input/_input.scss rename to client/scss/_input.scss index c0249968..8cfedf4b 100644 --- a/client/scss/input/_input.scss +++ b/client/scss/_input.scss @@ -10,10 +10,6 @@ input { display: inline-block; } -.input-text { - -} - .input-slider { width: 100% } @@ -42,6 +38,10 @@ input { border-bottom: 1px solid $secondary-color; } +.form-group { + padding-bottom: $secondary-padding; +} + // modifiers .input--full-width { diff --git a/client/scss/label/_label.scss b/client/scss/_label.scss similarity index 100% rename from client/scss/label/_label.scss rename to client/scss/_label.scss diff --git a/client/scss/link/_link.scss b/client/scss/_link.scss similarity index 100% rename from client/scss/link/_link.scss rename to client/scss/_link.scss diff --git a/client/scss/media-queries/_media-queries.scss b/client/scss/_media-queries.scss similarity index 100% rename from client/scss/media-queries/_media-queries.scss rename to client/scss/_media-queries.scss diff --git a/client/scss/nav-bar/_nav-bar.scss b/client/scss/_nav-bar.scss similarity index 84% rename from client/scss/nav-bar/_nav-bar.scss rename to client/scss/_nav-bar.scss index f817e781..038ebf57 100644 --- a/client/scss/nav-bar/_nav-bar.scss +++ b/client/scss/_nav-bar.scss @@ -2,18 +2,11 @@ margin-top: $thin-padding; margin-left: $primary-padding; margin-right: $primary-padding; - + @media (max-width: $break-point-mobile) { margin-left: 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 { @@ -35,7 +28,7 @@ padding-bottom: calc(1em - 2px); padding-left: 1em; } - + } @media (max-width: $break-point-mobile ) { @@ -46,5 +39,3 @@ padding-left: 0.5em; } } - - diff --git a/client/scss/page-content/_page-content.scss b/client/scss/_page-content.scss similarity index 100% rename from client/scss/page-content/_page-content.scss rename to client/scss/_page-content.scss diff --git a/client/scss/page-layout-show-lite/_page-layout-show-lite.scss b/client/scss/_page-layout-show-lite.scss similarity index 100% rename from client/scss/page-layout-show-lite/_page-layout-show-lite.scss rename to client/scss/_page-layout-show-lite.scss diff --git a/client/scss/page-layout/_page-layout.scss b/client/scss/_page-layout.scss similarity index 100% rename from client/scss/page-layout/_page-layout.scss rename to client/scss/_page-layout.scss diff --git a/client/scss/progress-bar/_progress-bar.scss b/client/scss/_progress-bar.scss similarity index 50% rename from client/scss/progress-bar/_progress-bar.scss rename to client/scss/_progress-bar.scss index 7a6f7e6d..6a8979a6 100644 --- a/client/scss/progress-bar/_progress-bar.scss +++ b/client/scss/_progress-bar.scss @@ -1,3 +1,8 @@ +.progress-bar__wrapper { + display: flex; + align-items: center; + justify-content: center; +} .progress-bar--inactive { color: $grey; } diff --git a/client/scss/publish-disabled-message/_publish-disabled-message.scss b/client/scss/_publish-disabled-message.scss similarity index 100% rename from client/scss/publish-disabled-message/_publish-disabled-message.scss rename to client/scss/_publish-disabled-message.scss diff --git a/client/scss/publish-preview/_publish-preview.scss b/client/scss/_publish-preview.scss similarity index 68% rename from client/scss/publish-preview/_publish-preview.scss rename to client/scss/_publish-preview.scss index af3aa131..e275e9b2 100644 --- a/client/scss/publish-preview/_publish-preview.scss +++ b/client/scss/_publish-preview.scss @@ -2,6 +2,10 @@ max-width: $width-content-constrained; margin-left: auto; margin-right: auto; + + @media (max-width: $break-point-mobile) { + font-size: .8em; + } } .publish-preview-dim { diff --git a/client/scss/publish-status/_publish-status.scss b/client/scss/_publish-status.scss similarity index 100% rename from client/scss/publish-status/_publish-status.scss rename to client/scss/_publish-status.scss diff --git a/client/scss/publish-url-input/_publish-url-input.scss b/client/scss/_publish-url-input.scss similarity index 100% rename from client/scss/publish-url-input/_publish-url-input.scss rename to client/scss/_publish-url-input.scss diff --git a/client/scss/react-app/_react-app.scss b/client/scss/_react-app.scss similarity index 100% rename from client/scss/react-app/_react-app.scss rename to client/scss/_react-app.scss diff --git a/client/scss/reset/_reset.scss b/client/scss/_reset.scss similarity index 100% rename from client/scss/reset/_reset.scss rename to client/scss/_reset.scss diff --git a/client/scss/row/_row.scss b/client/scss/_row.scss similarity index 87% rename from client/scss/row/_row.scss rename to client/scss/_row.scss index bbf63453..4fbdf10c 100644 --- a/client/scss/row/_row.scss +++ b/client/scss/_row.scss @@ -7,6 +7,7 @@ flex-direction: row; flex-wrap: nowrap; justify-content: flex-start; + padding-bottom: $tertiary-padding; } .row-labeled-label { @@ -14,8 +15,6 @@ display: flex; align-items: center; flex: 1; - //bad, fix this - .label { padding-top: 0; padding-bottom: 0; } } .row-labeled-content { align-self: center; @@ -32,4 +31,4 @@ .row-labeled-content { width: 100%; } -} \ No newline at end of file +} diff --git a/client/scss/_select.scss b/client/scss/_select.scss new file mode 100644 index 00000000..e9642528 --- /dev/null +++ b/client/scss/_select.scss @@ -0,0 +1,4 @@ +select { + margin: 0; + display: inline-block; +} diff --git a/client/scss/share-buttons/_share-buttons.scss b/client/scss/_share-buttons.scss similarity index 100% rename from client/scss/share-buttons/_share-buttons.scss rename to client/scss/_share-buttons.scss diff --git a/client/scss/social-share-link/_social-share-link.scss b/client/scss/_social-share-link.scss similarity index 100% rename from client/scss/social-share-link/_social-share-link.scss rename to client/scss/_social-share-link.scss diff --git a/client/scss/space-around/_space-around.scss b/client/scss/_space-around.scss similarity index 100% rename from client/scss/space-around/_space-around.scss rename to client/scss/_space-around.scss diff --git a/client/scss/space-between/_space-between.scss b/client/scss/_space-between.scss similarity index 100% rename from client/scss/space-between/_space-between.scss rename to client/scss/_space-between.scss diff --git a/client/scss/text/_text.scss b/client/scss/_text.scss similarity index 100% rename from client/scss/text/_text.scss rename to client/scss/_text.scss diff --git a/client/scss/textarea/_textarea.scss b/client/scss/_textarea.scss similarity index 100% rename from client/scss/textarea/_textarea.scss rename to client/scss/_textarea.scss diff --git a/client/scss/tooltip/_tooltip.scss b/client/scss/_tooltip.scss similarity index 100% rename from client/scss/tooltip/_tooltip.scss rename to client/scss/_tooltip.scss diff --git a/client/scss/variables/_variables.scss b/client/scss/_variables.scss similarity index 100% rename from client/scss/variables/_variables.scss rename to client/scss/_variables.scss diff --git a/client/scss/video/_video.scss b/client/scss/_video.scss similarity index 100% rename from client/scss/video/_video.scss rename to client/scss/_video.scss diff --git a/client/scss/all.scss b/client/scss/all.scss index 6629e7d1..c61e42bd 100644 --- a/client/scss/all.scss +++ b/client/scss/all.scss @@ -1,45 +1,44 @@ -@import '~variables/_variables'; -@import '~reset/_reset'; -@import '~font/_font'; -@import '~html/_html'; -@import '~body/_body'; -@import '~react-app/_react-app'; -@import '~text/_text'; +@import '_variables'; +@import '_reset'; +@import 'font/_font.scss'; +@import '_html'; +@import '_body'; +@import '_react-app'; +@import '_text'; -@import '~link/_link'; -@import '~input/_input'; -@import '~select/_select'; -@import '~textarea/_textarea'; -@import '~video/_video'; +@import '_link'; +@import '_input'; +@import '_select'; +@import '_textarea'; +@import '_video'; +@import '_form'; -@import '~asset-display/_asset-display'; -@import '~asset-preview/_asset-preview'; -@import '~button/_button'; -@import '~button-primary/_button-primary'; -@import '~button-secondary/_button-secondary'; -@import '~click-to-copy/_click-to-copy'; -@import '~form-feedback/_form-feedback'; -@import '~horizontal-split/_horizontal-split'; -@import '~label/_label'; -@import '~nav-bar/_nav-bar'; -@import '~page-layout/_page-layout'; -@import '~page-layout-show-lite/_page-layout-show-lite'; -@import '~page-content/_page-content'; -@import '~progress-bar/_progress-bar'; -@import '~publish-preview/_publish-preview'; -@import '~share-buttons/_share-buttons'; -@import '~space-between/_space-between'; -@import '~space-around/_space-around'; -@import '~row/_row'; -@import '~tooltip/_tooltip'; -@import '~social-share-link/_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 '_asset-display'; +@import '_asset-preview'; +@import '_button'; +@import '_button-primary'; +@import '_button-secondary'; +@import '_click-to-copy'; +@import '_form-feedback'; +@import '_horizontal-split'; +@import '_label'; +@import '_nav-bar'; +@import '_page-layout'; +@import '_page-layout-show-lite'; +@import '_page-content'; +@import '_progress-bar'; +@import '_publish-preview'; +@import '_share-buttons'; +@import '_space-between'; +@import '_space-around'; +@import '_row'; +@import '_tooltip'; +@import '_social-share-link'; +@import '_channel-claims-display'; +@import '_dropzone'; +@import '_publish-url-input'; +@import '_publish-status'; +@import '_publish-disabled-message'; +@import '_media-queries'; diff --git a/client/scss/select/_select.scss b/client/scss/select/_select.scss deleted file mode 100644 index 6c1154c3..00000000 --- a/client/scss/select/_select.scss +++ /dev/null @@ -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 -} diff --git a/client/src/components/ChannelSelectDropdown/index.jsx b/client/src/components/ChannelSelectDropdown/index.jsx index fee212c7..2079c05c 100644 --- a/client/src/components/ChannelSelectDropdown/index.jsx +++ b/client/src/components/ChannelSelectDropdown/index.jsx @@ -5,7 +5,6 @@ const ChannelSelectDropdown = ({ selectedChannel, handleSelection, loggedInChann return ( diff --git a/client/src/components/ProgressBar/index.jsx b/client/src/components/ProgressBar/index.jsx index fdaf9422..cb41cc38 100644 --- a/client/src/components/ProgressBar/index.jsx +++ b/client/src/components/ProgressBar/index.jsx @@ -62,7 +62,7 @@ class ProgressBar extends React.Component { }; render () { return ( -
+
{this.state.bars.map((bar, index) => bar.isActive ? : )}
); diff --git a/client/src/components/PublishLicenseInput/index.jsx b/client/src/components/PublishLicenseInput/index.jsx index 6ef59418..af827ec8 100644 --- a/client/src/components/PublishLicenseInput/index.jsx +++ b/client/src/components/PublishLicenseInput/index.jsx @@ -13,7 +13,6 @@ const PublishLicenseInput = ({ handleSelect }) => { type='text' name='license' id='publish-license' - className='select select--primary' onChange={handleSelect} > diff --git a/client/src/components/PublishPreview/index.jsx b/client/src/components/PublishPreview/index.jsx index 12c8bda1..ec962bda 100644 --- a/client/src/components/PublishPreview/index.jsx +++ b/client/src/components/PublishPreview/index.jsx @@ -19,6 +19,7 @@ class PublishPreview extends React.Component {
} rightSide={} /> diff --git a/client/src/containers/ChannelCreateForm/view.jsx b/client/src/containers/ChannelCreateForm/view.jsx index 2d175ce2..49ef639d 100644 --- a/client/src/containers/ChannelCreateForm/view.jsx +++ b/client/src/containers/ChannelCreateForm/view.jsx @@ -59,7 +59,7 @@ class ChannelCreateForm extends React.Component { return (
{ !status ? ( -
+ - + + - + + } content={{loggedInChannelName}} /> -
+ ); } return ( -
+ }
)} -
+ ); } } diff --git a/client/src/containers/ChannelTools/view.jsx b/client/src/containers/ChannelTools/view.jsx index 455b6d26..c3511b4b 100644 --- a/client/src/containers/ChannelTools/view.jsx +++ b/client/src/containers/ChannelTools/view.jsx @@ -7,14 +7,14 @@ class ChannelTools extends React.Component { render () { return (
- -

Log in to existing channel

- -
- {!this.props.closedRegistration && ( -

Create new channel

- -
)} +

Log in to existing channel

+ + {!this.props.closedRegistration && ( + +

Create new channel

+ +
+ )}
); } diff --git a/client/src/containers/Dropzone/view.jsx b/client/src/containers/Dropzone/view.jsx index 436bac99..b524b014 100644 --- a/client/src/containers/Dropzone/view.jsx +++ b/client/src/containers/Dropzone/view.jsx @@ -84,7 +84,7 @@ class Dropzone extends React.Component { const { dragOver, mouseOver, dimPreview } = this.state; const { file, thumbnail, fileError, isUpdate, sourceUrl, fileExt } = this.props; return ( -
+ {isUpdate && fileExt === 'mp4' ? (

Video updates are currently disabled. This feature will be available soon. You can edit metadata.

) : ( @@ -145,7 +145,7 @@ class Dropzone extends React.Component {
)} -
+ ); } }; diff --git a/client/src/containers/PublishDetails/view.jsx b/client/src/containers/PublishDetails/view.jsx index bc9dc45e..2c88c6df 100644 --- a/client/src/containers/PublishDetails/view.jsx +++ b/client/src/containers/PublishDetails/view.jsx @@ -45,7 +45,7 @@ class PublishDetails extends React.Component { return (
{isUpdate ? (asset && ( - + @@ -56,16 +56,14 @@ class PublishDetails extends React.Component { } /> - + )) : ( - - - + )} diff --git a/client/src/containers/PublishMetadataInputs/view.jsx b/client/src/containers/PublishMetadataInputs/view.jsx index df8d86a5..2234e2ad 100644 --- a/client/src/containers/PublishMetadataInputs/view.jsx +++ b/client/src/containers/PublishMetadataInputs/view.jsx @@ -32,23 +32,17 @@ class PublishMetadataInputs extends React.Component {
{(showMetadataInputs || isUpdate) && ( - - - - - - - - - + + + )} {!isUpdate && ( diff --git a/client/src/pages/AboutPage/index.jsx b/client/src/pages/AboutPage/index.jsx index 621f27b7..1b197ad5 100644 --- a/client/src/pages/AboutPage/index.jsx +++ b/client/src/pages/AboutPage/index.jsx @@ -13,6 +13,7 @@ class AboutPage extends React.Component { pageUri={'about'} > } rightSide={} /> diff --git a/client/src/pages/LoginPage/view.jsx b/client/src/pages/LoginPage/view.jsx index a3804e59..fb2968a5 100644 --- a/client/src/pages/LoginPage/view.jsx +++ b/client/src/pages/LoginPage/view.jsx @@ -20,6 +20,7 @@ class LoginPage extends React.Component { pageUri={'login'} > } rightSide={} /> diff --git a/client/src/pages/ShowAssetDetails/view.jsx b/client/src/pages/ShowAssetDetails/view.jsx index 87cce975..7798531d 100644 --- a/client/src/pages/ShowAssetDetails/view.jsx +++ b/client/src/pages/ShowAssetDetails/view.jsx @@ -14,7 +14,7 @@ class ShowAssetDetails extends React.Component { // this.storageKey = 'vert-split-state-' + this.props.name; // const closed = window && window.localStorage // ? !!window.localStorage.getItem(this.storageKey) : false; - const closed = false; + const closed = true; this.state = { closed: closed }; } @@ -35,12 +35,15 @@ class ShowAssetDetails extends React.Component { pageTitle={`${name} - details`} asset={asset} > - - - - { !this.state.closed && } +
+ + + + +
+ {!this.state.closed && } ); } diff --git a/deployment-config.json b/deployment-config.json new file mode 100644 index 00000000..c4bc966f --- /dev/null +++ b/deployment-config.json @@ -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 +} From 0c9c1563e7236be4b079ce2eac3e163916faf148 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 12 Nov 2018 10:26:28 -0500 Subject: [PATCH 56/59] fix asset cutoff --- client/scss/_asset-display.scss | 9 --------- 1 file changed, 9 deletions(-) diff --git a/client/scss/_asset-display.scss b/client/scss/_asset-display.scss index 2350f29f..cf9d979f 100644 --- a/client/scss/_asset-display.scss +++ b/client/scss/_asset-display.scss @@ -8,14 +8,6 @@ .asset-display { display: flex; - flex-direction: column; - flex: 1 1 auto; - justify-content: center; - position: relative; - width: 100%; - overflow: hidden; - align-items: center; - min-height: 50vh; } .asset-title { @@ -34,7 +26,6 @@ margin-right: auto; object-fit: contain; object-position: center; - background: black; } /*below must die if this is intended to be shareable component! it also probably doesn't need to be*/ From b5efb5f08f55fb6f7ff0cdc0dccc2ddc0cf3f339 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 12 Nov 2018 11:07:49 -0500 Subject: [PATCH 57/59] remove config --- .gitignore | 2 ++ config/.siteConfig.json.swp | Bin 12288 -> 0 bytes config/chainqueryConfig.json | 8 -------- config/lbryConfig.json | 5 ----- config/loggerConfig.json | 3 --- config/mysqlConfig.json | 5 ----- config/siteConfig.json | 37 ----------------------------------- config/slackConfig.json | 5 ----- 8 files changed, 2 insertions(+), 63 deletions(-) delete mode 100644 config/.siteConfig.json.swp delete mode 100644 config/chainqueryConfig.json delete mode 100644 config/lbryConfig.json delete mode 100644 config/loggerConfig.json delete mode 100644 config/mysqlConfig.json delete mode 100644 config/siteConfig.json delete mode 100644 config/slackConfig.json diff --git a/.gitignore b/.gitignore index f68ecf84..a67766ab 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ public/bundle/Lekton-* public/bundle/style.css uploads + +config/ diff --git a/config/.siteConfig.json.swp b/config/.siteConfig.json.swp deleted file mode 100644 index 933afbccf7c4fe5b432073d3bc115d1b5d3eed6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2zmMER6vro5(1iRDDG`$6C|$B^@7lNCq~UU_ND&-5PIrM-pcs2*)^j)hfoGi4 z5+!s~CZ^cLu^^Mw2idJ1|1dJOs+^aW@i zbQARFImiuq4*CJ~4d^pa2>Rn~LVg5&2f7d11Noq9p!YxabU%UEV*c$Od0!RP} zAOR$R1dsp{KmthMbOH~F<5)S4Tk=X2Rd!G^YPfc9IHs!kD@)rcPmcPPYp~>MLn~94 z;QRm{A6gq&g;ac7QJLM6Y%443+<=4Y4Lsj%9g>vhIamMX)h6&Axu!Ed1t1KNh6D#wtH_eRzY0T?Y+-CACuNuoKvZ` z+bZucyLS|_P>ckN{9rnnGM;S4UNlNZB8p;f5+{Bb@_xL=M%}yBr79?! z$%-eYsFv1im=+lys<>JX51Q4Lb6LrZR?7xkSGo;|=Q=sqn~j6ryIW#DpWJ54x&KM9 zf5?tMo_|`+jy`I3bN|H#Q77kRj-@fY0&Bynoe|?Ysbpzs*-f?_=$YrHqDp?rnUfaU z*a4J^8hdP*Jzo2A3^&UbVID!O%6d_5p90XG_hKikl<8 zY~q?7Xl>H9^s51a-A#=t^^M``zv>L^c+n>J$0CfU2_1{+W)O+ck9a7;Q4n~e zCLl?LqKiS9FS>VPjdy?6;a~3tusgF8tQ@qF5;29PhkV Q%0i{^W-N_NTGt2UA5#E$1^@s6 diff --git a/config/chainqueryConfig.json b/config/chainqueryConfig.json deleted file mode 100644 index ae59e90b..00000000 --- a/config/chainqueryConfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "host": "chainquery.lbry.io", - "port": "3306", - "timeout": 30, - "database": "chainquery", - "username": "speechapi", - "password": "1304486ca42ecdbf419f667fdc02c31e7d03b1e3" -} diff --git a/config/lbryConfig.json b/config/lbryConfig.json deleted file mode 100644 index 7cf79730..00000000 --- a/config/lbryConfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "apiHost": "localhost", - "apiPort": "5279", - "getTimeout": 30 -} \ No newline at end of file diff --git a/config/loggerConfig.json b/config/loggerConfig.json deleted file mode 100644 index c5333fa0..00000000 --- a/config/loggerConfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "logLevel": "verbose" -} \ No newline at end of file diff --git a/config/mysqlConfig.json b/config/mysqlConfig.json deleted file mode 100644 index 3dd276a7..00000000 --- a/config/mysqlConfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "database": "lbry", - "username": "root", - "password": "" -} \ No newline at end of file diff --git a/config/siteConfig.json b/config/siteConfig.json deleted file mode 100644 index 4d123c63..00000000 --- a/config/siteConfig.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "analytics": { - "googleId": null - }, - "assetDefaults": { - "title": "Default Content Title", - "description": "Default Content Description", - "thumbnail": "https://spee.ch/0e5d4e8f4086e13f5b9ca3f9648f518e5f524402/speechflag.png" - }, - "auth": { - "sessionKey": "mysecretkeyword", - "masterPassword": "myMasterPassword" - }, - "details": { - "port": 3000, - "title": "dev1", - "ipAddress":"127.0.0.1", - "host": "localhost", - "description": "A decentralized hosting platform built on LBRY", - "twitter": false - }, - "publishing": { - "primaryClaimAddress": "bYscURD34PVAfYY7FdyY1W4TjdwQYXrDkN", - "uploadDirectory": "/home/lbry/Uploads", - "thumbnailChannel": "@thumbnails", - "thumbnailChannelId": "85d5f2fd814979dec6b082c2f88b07bc155e4e79", - "additionalClaimAddresses": [], - "disabled": false, - "disabledMessage": "Default publishing disabled message", - "channelClaimBidAmount": "0.1", - "fileClaimBidAmount": "0.01" - }, - "startup": { - "performChecks": true, - "performUpdates": true - } -} diff --git a/config/slackConfig.json b/config/slackConfig.json deleted file mode 100644 index 5bbf8072..00000000 --- a/config/slackConfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "slackWebHook": false, - "slackErrorChannel": false, - "slackInfoChannel": false -} \ No newline at end of file From 9dcf828db2875a062ddcc81dcc758eb8c63bed2d Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 12 Nov 2018 11:28:56 -0500 Subject: [PATCH 58/59] fix asset display on firefox --- client/scss/_asset-display.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/scss/_asset-display.scss b/client/scss/_asset-display.scss index cf9d979f..55983340 100644 --- a/client/scss/_asset-display.scss +++ b/client/scss/_asset-display.scss @@ -1,13 +1,13 @@ .asset-main { - height: 80vh; + height: 75vh; display: flex; flex-direction: column; - align-items: space-between; align-items: center; } .asset-display { display: flex; + min-height: 50vh } .asset-title { From 35698ca1c681e7d622db6b9ab5161ca26507a300 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 12 Nov 2018 12:37:37 -0500 Subject: [PATCH 59/59] remove deployment-config.json --- .gitignore | 2 ++ deployment-config.json | 10 ---------- 2 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 deployment-config.json diff --git a/.gitignore b/.gitignore index a67766ab..06ec7271 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ public/bundle/style.css uploads config/ + +deployment-config.json diff --git a/deployment-config.json b/deployment-config.json deleted file mode 100644 index c4bc966f..00000000 --- a/deployment-config.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "sftp", - "host": "sean.lbry.tech", - "username": "lbry", - "password": "", - "port": 22, - "remotePath": "/home/lbry/spee.ch", - "sshKeyFile": "/Users/sean/.ssh/id_rsa2", - "uploadOnSave": true -}