From 3edd660f774561f1ea7858144d2804d83733f0fd Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 26 Mar 2018 14:32:43 -0700 Subject: [PATCH] implement app redesign --- .eslintrc.json | 3 +- .flowconfig | 3 + .gitignore | 1 + flow-typed/react-feather.js | 3 + flow-typed/react-markdown.js | 3 + flow-typed/react-modal.js | 3 + flow-typed/react-paginate.js | 3 + flow-typed/react-simplemde-editor.js | 7 + flow-typed/react-transition-group.js | 3 + flow-typed/render-media.js | 3 + .../flow-typed => flow-typed}/reselect.js | 0 package.json | 8 +- src/main/createWindow.js | 4 +- src/renderer/component/address/view.jsx | 68 +- src/renderer/component/app/index.js | 3 +- src/renderer/component/app/view.jsx | 73 +- .../component/{link => button}/index.js | 4 +- src/renderer/component/button/view.jsx | 111 + src/renderer/component/cardMedia/view.jsx | 73 +- src/renderer/component/cardVerify/view.jsx | 7 +- src/renderer/component/channelTile/view.jsx | 58 +- src/renderer/component/common.js | 172 -- .../component/common/busy-indicator.jsx | 16 + .../component/common/category-list.jsx | 245 ++ .../component/common/credit-amount.jsx | 100 + .../file-exporter.jsx} | 37 +- .../component/common/file-selector.jsx | 77 + .../form-components/form-field-price.jsx | 77 + .../common/form-components/form-field.jsx | 100 + .../common/form-components/form-row.jsx | 32 + .../component/common/form-components/form.jsx | 27 + .../common/form-components/submit.jsx | 23 + src/renderer/component/common/form.jsx | 5 + src/renderer/component/common/icon.jsx | 36 + src/renderer/component/common/lbc-symbol.jsx | 6 + src/renderer/component/common/qr-code.jsx | 18 + src/renderer/component/common/spinner.jsx | 38 +- src/renderer/component/common/thumbnail.jsx | 28 + src/renderer/component/common/tooltip.jsx | 58 + .../component/common/transaction-link.jsx | 18 + .../component/common/truncated-text.jsx | 17 + src/renderer/component/file-selector.js | 83 - src/renderer/component/fileActions/view.jsx | 63 +- src/renderer/component/fileCard/index.js | 31 +- src/renderer/component/fileCard/view.jsx | 127 +- src/renderer/component/fileDetails/view.jsx | 131 +- .../component/fileDownloadLink/view.jsx | 51 +- src/renderer/component/fileList/view.jsx | 111 +- .../component/fileListSearch/index.js | 7 +- .../component/fileListSearch/view.jsx | 109 +- src/renderer/component/filePrice/view.jsx | 31 +- src/renderer/component/fileTile/index.js | 3 +- src/renderer/component/fileTile/view.jsx | 153 +- src/renderer/component/form.js | 186 -- src/renderer/component/formField/view.jsx | 7 +- .../component/formFieldPrice/view.jsx | 62 +- src/renderer/component/header/index.js | 12 +- src/renderer/component/header/view.jsx | 134 +- src/renderer/component/icon/index.js | 5 - src/renderer/component/icon/view.jsx | 50 - src/renderer/component/inviteList/view.jsx | 13 +- src/renderer/component/inviteNew/view.jsx | 64 +- src/renderer/component/link/view.jsx | 60 - .../component/linkTransaction/index.js | 5 - .../component/linkTransaction/view.jsx | 14 - src/renderer/component/load_screen.js | 57 - src/renderer/component/menu.js | 111 - src/renderer/component/nsfwOverlay/view.jsx | 10 +- src/renderer/component/page/index.js | 31 + src/renderer/component/page/view.jsx | 33 + src/renderer/component/publishForm/index.js | 7 +- .../publishForm/internal/bid-help-text.jsx | 61 + .../publishForm/internal/channelSection.jsx | 181 -- .../publishForm/internal/license-type.jsx | 108 + src/renderer/component/publishForm/view.jsx | 1274 +++----- src/renderer/component/rewardLink/view.jsx | 10 +- .../component/rewardListClaimed/view.jsx | 68 +- src/renderer/component/rewardSummary/view.jsx | 47 +- src/renderer/component/rewardTile/view.jsx | 56 +- src/renderer/component/router/view.jsx | 4 +- src/renderer/component/selectChannel/index.js | 18 + src/renderer/component/selectChannel/view.jsx | 220 ++ .../shapeShift/internal/active-shift.jsx | 33 +- .../component/shapeShift/internal/form.jsx | 91 +- src/renderer/component/shapeShift/view.jsx | 87 +- src/renderer/component/sideBar/index.js | 24 + src/renderer/component/sideBar/view.jsx | 139 + src/renderer/component/snackBar/view.jsx | 4 +- src/renderer/component/splash/index.js | 2 - .../component/splash/internal/load-screen.jsx | 38 + src/renderer/component/splash/view.jsx | 44 +- .../component/subscribeButton/index.js | 1 - .../component/subscribeButton/view.jsx | 68 +- src/renderer/component/tooltip.js | 54 - .../internal/TransactionListItem.jsx | 91 - .../internal/transaction-list-item.jsx | 103 + .../component/transactionList/view.jsx | 130 +- .../component/transactionListRecent/view.jsx | 53 +- src/renderer/component/uriIndicator/view.jsx | 64 +- src/renderer/component/userEmailNew/view.jsx | 5 +- .../component/userEmailVerify/view.jsx | 34 +- src/renderer/component/userPhoneNew/view.jsx | 47 +- .../component/userPhoneVerify/view.jsx | 31 +- src/renderer/component/userVerify/view.jsx | 41 +- .../video/internal/loading-screen.jsx | 29 +- .../component/video/internal/play-button.jsx | 55 +- .../component/video/internal/player.jsx | 18 +- src/renderer/component/video/view.jsx | 144 +- src/renderer/component/walletAddress/view.jsx | 33 +- src/renderer/component/walletBalance/view.jsx | 38 +- src/renderer/component/walletSend/index.js | 26 +- src/renderer/component/walletSend/view.jsx | 126 +- src/renderer/component/walletSendTip/view.jsx | 75 +- src/renderer/component/wunderbar/index.js | 34 +- .../wunderbar/internal/autocomplete.jsx | 604 ++++ src/renderer/component/wunderbar/view.jsx | 242 +- src/renderer/constants/action_types.js | 20 +- src/renderer/constants/claim.js | 4 + src/renderer/constants/icons.js | 31 +- src/renderer/constants/licenses.js | 31 + src/renderer/constants/modal_types.js | 9 +- src/renderer/constants/search.js | 3 + src/renderer/lbry.js | 143 +- src/renderer/modal/modal.js | 118 - src/renderer/modal/modal.jsx | 146 + .../modal/modalAutoUpdateConfirm/view.jsx | 9 +- .../modal/modalAutoUpdateDownloaded/view.jsx | 4 +- src/renderer/modal/modalCreditIntro/view.jsx | 12 +- src/renderer/modal/modalDownloading/view.jsx | 6 +- .../modal/modalEmailCollection/view.jsx | 4 +- src/renderer/modal/modalFirstReward/view.jsx | 5 +- .../modal/modalFirstSubscription/view.jsx | 13 +- .../modal/modalIncompatibleDaemon/view.jsx | 4 +- .../modal/modalPhoneCollection/view.jsx | 4 +- src/renderer/modal/modalPublish/index.js | 13 + src/renderer/modal/modalPublish/view.jsx | 39 + src/renderer/modal/modalRemoveFile/view.jsx | 57 +- src/renderer/modal/modalRouter/view.jsx | 9 + src/renderer/modal/modalSearch/index.js | 13 + src/renderer/modal/modalSearch/view.jsx | 25 + src/renderer/modal/modalSendTip/index.js | 9 + src/renderer/modal/modalSendTip/view.jsx | 23 + src/renderer/modal/modalUpgrade/view.jsx | 4 +- src/renderer/modal/modalWelcome/view.jsx | 4 +- src/renderer/page/auth/view.jsx | 45 +- src/renderer/page/backup/view.jsx | 111 +- src/renderer/page/channel/index.js | 2 + src/renderer/page/channel/view.jsx | 88 +- src/renderer/page/discover/view.jsx | 252 +- src/renderer/page/file/index.js | 12 +- src/renderer/page/file/view.jsx | 196 +- src/renderer/page/fileListDownloaded/index.js | 17 +- src/renderer/page/fileListDownloaded/view.jsx | 50 +- src/renderer/page/fileListPublished/index.js | 16 +- src/renderer/page/fileListPublished/view.jsx | 65 +- src/renderer/page/getCredits/view.jsx | 26 +- src/renderer/page/help/view.jsx | 265 +- src/renderer/page/invite/view.jsx | 20 +- src/renderer/page/publish/index.js | 71 +- src/renderer/page/publish/view.jsx | 19 +- src/renderer/page/report.js | 6 +- src/renderer/page/rewards/view.jsx | 41 +- src/renderer/page/search/index.js | 6 +- src/renderer/page/search/view.jsx | 89 +- src/renderer/page/sendCredits/view.jsx | 7 +- src/renderer/page/settings/index.js | 5 +- src/renderer/page/settings/view.jsx | 595 ++-- src/renderer/page/show/view.jsx | 43 +- src/renderer/page/subscriptions/view.jsx | 23 +- src/renderer/page/transactionHistory/view.jsx | 37 +- src/renderer/page/wallet/view.jsx | 13 +- src/renderer/redux/actions/content.js | 18 - src/renderer/redux/actions/publish.js | 181 ++ src/renderer/redux/actions/search.js | 215 +- src/renderer/redux/actions/video.js | 10 - src/renderer/redux/actions/wallet.js | 49 +- src/renderer/redux/reducers/app.js | 18 +- src/renderer/redux/reducers/content.js | 1 + src/renderer/redux/reducers/publish.js | 167 ++ src/renderer/redux/reducers/search.js | 119 +- src/renderer/redux/reducers/settings.js | 1 + src/renderer/redux/reducers/video.js | 25 - src/renderer/redux/reducers/wallet.js | 44 +- src/renderer/redux/selectors/claims.js | 6 + src/renderer/redux/selectors/file_info.js | 91 +- src/renderer/redux/selectors/navigation.js | 261 +- src/renderer/redux/selectors/publish.js | 26 + src/renderer/redux/selectors/search.js | 62 +- src/renderer/redux/selectors/video.js | 6 - src/renderer/redux/selectors/wallet.js | 20 - src/renderer/scss/_gui.scss | 391 ++- src/renderer/scss/_icons.scss | 1678 ----------- src/renderer/scss/_reset.scss | 2 +- src/renderer/scss/_vars.scss | 152 +- src/renderer/scss/all.scss | 14 +- src/renderer/scss/component/__divider.scss | 8 - src/renderer/scss/component/_button.scss | 240 +- src/renderer/scss/component/_card.scss | 610 ++-- .../scss/component/_channel-indicator.scss | 6 - src/renderer/scss/component/_checkbox.scss | 69 - src/renderer/scss/component/_content.scss | 56 + .../scss/component/_file-download.scss | 10 +- src/renderer/scss/component/_file-list.scss | 44 + .../scss/component/_file-selector.scss | 23 - src/renderer/scss/component/_file-tile.scss | 22 - src/renderer/scss/component/_form-field.scss | 218 +- src/renderer/scss/component/_header.scss | 71 +- src/renderer/scss/component/_load-screen.scss | 28 +- src/renderer/scss/component/_modal.scss | 42 +- src/renderer/scss/component/_nav.scss | 98 + src/renderer/scss/component/_radio.scss | 54 - src/renderer/scss/component/_search.scss | 97 + src/renderer/scss/component/_shapeshift.scss | 39 - src/renderer/scss/component/_snack-bar.scss | 16 +- src/renderer/scss/component/_spinner.scss | 83 +- src/renderer/scss/component/_table.scss | 84 +- src/renderer/scss/component/_tabs.scss | 64 - src/renderer/scss/component/_tooltip.scss | 11 +- src/renderer/scss/component/_video.scss | 83 - src/renderer/scss/page/_show.scss | 13 - src/renderer/store.js | 6 +- src/renderer/util/debounce.js | 21 + src/renderer/util/form-validation.js | 23 + src/renderer/util/handle-fetch.js | 5 + static/font/.DS_Store | Bin 0 -> 6148 bytes static/font/FontAwesome.otf | Bin 134808 -> 0 bytes static/font/fontawesome-webfont.eot | Bin 165742 -> 0 bytes static/font/fontawesome-webfont.svg | 2671 ----------------- static/font/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes static/font/fontawesome-webfont.woff | Bin 98024 -> 0 bytes static/font/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes static/font/metropolis/bold.eot | Bin 0 -> 35022 bytes static/font/metropolis/bold.otf | Bin 0 -> 24340 bytes static/font/metropolis/bold.svg | 875 ++++++ static/font/metropolis/bold.ttf | Bin 0 -> 34744 bytes static/font/metropolis/bold.woff | Bin 0 -> 16804 bytes static/font/metropolis/medium.eot | Bin 0 -> 35582 bytes static/font/metropolis/medium.otf | Bin 0 -> 23916 bytes static/font/metropolis/medium.svg | 876 ++++++ static/font/metropolis/medium.ttf | Bin 0 -> 35280 bytes static/font/metropolis/medium.woff | Bin 0 -> 16964 bytes static/font/metropolis/semibold.eot | Bin 0 -> 35450 bytes static/font/metropolis/semibold.otf | Bin 0 -> 24160 bytes static/font/metropolis/semibold.svg | 875 ++++++ static/font/metropolis/semibold.ttf | Bin 0 -> 35136 bytes static/font/metropolis/semibold.woff | Bin 0 -> 16868 bytes static/img/stripe-background.png | Bin 0 -> 23205 bytes static/themes/light.css | 9 +- yarn.lock | 118 +- 249 files changed, 11090 insertions(+), 10904 deletions(-) create mode 100644 flow-typed/react-feather.js create mode 100644 flow-typed/react-markdown.js create mode 100644 flow-typed/react-modal.js create mode 100644 flow-typed/react-paginate.js create mode 100644 flow-typed/react-simplemde-editor.js create mode 100644 flow-typed/react-transition-group.js create mode 100644 flow-typed/render-media.js rename {src/renderer/flow-typed => flow-typed}/reselect.js (100%) rename src/renderer/component/{link => button}/index.js (74%) create mode 100644 src/renderer/component/button/view.jsx delete mode 100644 src/renderer/component/common.js create mode 100644 src/renderer/component/common/busy-indicator.jsx create mode 100644 src/renderer/component/common/category-list.jsx create mode 100644 src/renderer/component/common/credit-amount.jsx rename src/renderer/component/{file-exporter.js => common/file-exporter.jsx} (72%) create mode 100644 src/renderer/component/common/file-selector.jsx create mode 100644 src/renderer/component/common/form-components/form-field-price.jsx create mode 100644 src/renderer/component/common/form-components/form-field.jsx create mode 100644 src/renderer/component/common/form-components/form-row.jsx create mode 100644 src/renderer/component/common/form-components/form.jsx create mode 100644 src/renderer/component/common/form-components/submit.jsx create mode 100644 src/renderer/component/common/form.jsx create mode 100644 src/renderer/component/common/icon.jsx create mode 100644 src/renderer/component/common/lbc-symbol.jsx create mode 100644 src/renderer/component/common/qr-code.jsx create mode 100644 src/renderer/component/common/thumbnail.jsx create mode 100644 src/renderer/component/common/tooltip.jsx create mode 100644 src/renderer/component/common/transaction-link.jsx create mode 100644 src/renderer/component/common/truncated-text.jsx delete mode 100644 src/renderer/component/file-selector.js delete mode 100644 src/renderer/component/form.js delete mode 100644 src/renderer/component/icon/index.js delete mode 100644 src/renderer/component/icon/view.jsx delete mode 100644 src/renderer/component/link/view.jsx delete mode 100644 src/renderer/component/linkTransaction/index.js delete mode 100644 src/renderer/component/linkTransaction/view.jsx delete mode 100644 src/renderer/component/load_screen.js delete mode 100644 src/renderer/component/menu.js create mode 100644 src/renderer/component/page/index.js create mode 100644 src/renderer/component/page/view.jsx create mode 100644 src/renderer/component/publishForm/internal/bid-help-text.jsx delete mode 100644 src/renderer/component/publishForm/internal/channelSection.jsx create mode 100644 src/renderer/component/publishForm/internal/license-type.jsx create mode 100644 src/renderer/component/selectChannel/index.js create mode 100644 src/renderer/component/selectChannel/view.jsx create mode 100644 src/renderer/component/sideBar/index.js create mode 100644 src/renderer/component/sideBar/view.jsx create mode 100644 src/renderer/component/splash/internal/load-screen.jsx delete mode 100644 src/renderer/component/tooltip.js delete mode 100644 src/renderer/component/transactionList/internal/TransactionListItem.jsx create mode 100644 src/renderer/component/transactionList/internal/transaction-list-item.jsx create mode 100644 src/renderer/component/wunderbar/internal/autocomplete.jsx create mode 100644 src/renderer/constants/claim.js create mode 100644 src/renderer/constants/licenses.js create mode 100644 src/renderer/constants/search.js delete mode 100644 src/renderer/modal/modal.js create mode 100644 src/renderer/modal/modal.jsx create mode 100644 src/renderer/modal/modalPublish/index.js create mode 100644 src/renderer/modal/modalPublish/view.jsx create mode 100644 src/renderer/modal/modalSearch/index.js create mode 100644 src/renderer/modal/modalSearch/view.jsx create mode 100644 src/renderer/modal/modalSendTip/index.js create mode 100644 src/renderer/modal/modalSendTip/view.jsx create mode 100644 src/renderer/redux/actions/publish.js delete mode 100644 src/renderer/redux/actions/video.js create mode 100644 src/renderer/redux/reducers/publish.js delete mode 100644 src/renderer/redux/reducers/video.js create mode 100644 src/renderer/redux/selectors/publish.js delete mode 100644 src/renderer/redux/selectors/video.js delete mode 100644 src/renderer/scss/_icons.scss delete mode 100644 src/renderer/scss/component/__divider.scss delete mode 100644 src/renderer/scss/component/_checkbox.scss create mode 100644 src/renderer/scss/component/_content.scss create mode 100644 src/renderer/scss/component/_file-list.scss delete mode 100644 src/renderer/scss/component/_file-selector.scss delete mode 100644 src/renderer/scss/component/_file-tile.scss create mode 100644 src/renderer/scss/component/_nav.scss delete mode 100644 src/renderer/scss/component/_radio.scss create mode 100644 src/renderer/scss/component/_search.scss delete mode 100644 src/renderer/scss/component/_shapeshift.scss delete mode 100644 src/renderer/scss/component/_tabs.scss delete mode 100644 src/renderer/scss/component/_video.scss delete mode 100644 src/renderer/scss/page/_show.scss create mode 100644 src/renderer/util/debounce.js create mode 100644 src/renderer/util/form-validation.js create mode 100644 src/renderer/util/handle-fetch.js create mode 100644 static/font/.DS_Store delete mode 100644 static/font/FontAwesome.otf delete mode 100644 static/font/fontawesome-webfont.eot delete mode 100644 static/font/fontawesome-webfont.svg delete mode 100644 static/font/fontawesome-webfont.ttf delete mode 100644 static/font/fontawesome-webfont.woff delete mode 100644 static/font/fontawesome-webfont.woff2 create mode 100644 static/font/metropolis/bold.eot create mode 100644 static/font/metropolis/bold.otf create mode 100644 static/font/metropolis/bold.svg create mode 100644 static/font/metropolis/bold.ttf create mode 100644 static/font/metropolis/bold.woff create mode 100644 static/font/metropolis/medium.eot create mode 100644 static/font/metropolis/medium.otf create mode 100644 static/font/metropolis/medium.svg create mode 100644 static/font/metropolis/medium.ttf create mode 100644 static/font/metropolis/medium.woff create mode 100644 static/font/metropolis/semibold.eot create mode 100644 static/font/metropolis/semibold.otf create mode 100644 static/font/metropolis/semibold.svg create mode 100644 static/font/metropolis/semibold.ttf create mode 100644 static/font/metropolis/semibold.woff create mode 100644 static/img/stripe-background.png diff --git a/.eslintrc.json b/.eslintrc.json index 69a674b7a..009c389de 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -33,6 +33,7 @@ "printWidth": 100, "singleQuote": true }], - "func-names": ["warn", "as-needed"] + "func-names": ["warn", "as-needed"], + "arrow-body-style": "off" } } diff --git a/.flowconfig b/.flowconfig index f98db8793..664b2d8de 100644 --- a/.flowconfig +++ b/.flowconfig @@ -17,5 +17,8 @@ module.name_mapper='^types\(.*\)$' -> '/src/renderer/types\1' module.name_mapper='^component\(.*\)$' -> '/src/renderer/component\1' module.name_mapper='^page\(.*\)$' -> '/src/renderer/page\1' module.name_mapper='^lbry\(.*\)$' -> '/src/renderer/lbry\1' +module.name_mapper='^rewards\(.*\)$' -> '/src/renderer/rewards\1' +module.name_mapper='^modal\(.*\)$' -> '/src/renderer/modal\1' +module.name_mapper='^app\(.*\)$' -> '/src/renderer/app\1' [strict] diff --git a/.gitignore b/.gitignore index e8d5eb911..ce340404f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /static/daemon/lbrynet* /static/locales yarn-error.log +npm-debug.log* diff --git a/flow-typed/react-feather.js b/flow-typed/react-feather.js new file mode 100644 index 000000000..c91a71f66 --- /dev/null +++ b/flow-typed/react-feather.js @@ -0,0 +1,3 @@ +declare module 'react-feather' { + declare module.exports: any; +} diff --git a/flow-typed/react-markdown.js b/flow-typed/react-markdown.js new file mode 100644 index 000000000..63b7f2aad --- /dev/null +++ b/flow-typed/react-markdown.js @@ -0,0 +1,3 @@ +declare module 'react-markdown' { + declare module.exports: any; +} diff --git a/flow-typed/react-modal.js b/flow-typed/react-modal.js new file mode 100644 index 000000000..17766e9f0 --- /dev/null +++ b/flow-typed/react-modal.js @@ -0,0 +1,3 @@ +declare module 'react-modal' { + declare module.exports: any; +} diff --git a/flow-typed/react-paginate.js b/flow-typed/react-paginate.js new file mode 100644 index 000000000..f161d1a42 --- /dev/null +++ b/flow-typed/react-paginate.js @@ -0,0 +1,3 @@ +declare module 'react-paginate' { + declare module.exports: any; +} diff --git a/flow-typed/react-simplemde-editor.js b/flow-typed/react-simplemde-editor.js new file mode 100644 index 000000000..7d23780f1 --- /dev/null +++ b/flow-typed/react-simplemde-editor.js @@ -0,0 +1,7 @@ +declare module 'react-simplemde-editor' { + declare module.exports: any; +} + +declare module 'react-simplemde-editor/dist/simplemde.min.css' { + declare module.exports: any; +} diff --git a/flow-typed/react-transition-group.js b/flow-typed/react-transition-group.js new file mode 100644 index 000000000..77bc87c09 --- /dev/null +++ b/flow-typed/react-transition-group.js @@ -0,0 +1,3 @@ +declare module 'react-transition-group' { + declare module.exports: any; +} diff --git a/flow-typed/render-media.js b/flow-typed/render-media.js new file mode 100644 index 000000000..acb885cc8 --- /dev/null +++ b/flow-typed/render-media.js @@ -0,0 +1,3 @@ +declare module 'render-media' { + declare module.exports: any; +} diff --git a/src/renderer/flow-typed/reselect.js b/flow-typed/reselect.js similarity index 100% rename from src/renderer/flow-typed/reselect.js rename to flow-typed/reselect.js diff --git a/package.json b/package.json index 702894dd5..992a96788 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "bluebird": "^3.5.1", "classnames": "^2.2.5", "country-data": "^0.0.31", + "dom-scroll-into-view": "^1.2.1", "electron-dl": "^1.11.0", "electron-is-dev": "^0.3.0", "electron-log": "^2.2.12", @@ -46,7 +47,10 @@ "electron-window-state": "^4.1.1", "find-process": "^1.1.0", "formik": "^0.10.4", - "keytar-prebuild": "4.0.4", + "from2": "^2.3.0", + "install": "^0.10.2", + "jshashes": "^1.0.7", + "keytar-prebuild": "4.1.1", "localforage": "^1.5.0", "mixpanel-browser": "^2.17.1", "moment": "^2.20.1", @@ -54,11 +58,13 @@ "rc-progress": "^2.0.6", "react": "^16.2.0", "react-dom": "^16.2.0", + "react-feather": "^1.0.8", "react-markdown": "^2.5.0", "react-modal": "^3.1.7", "react-paginate": "^5.2.1", "react-redux": "^5.0.3", "react-simplemde-editor": "^3.6.11", + "react-transition-group": "1.x", "redux": "^3.6.0", "redux-logger": "^3.0.1", "redux-persist": "^4.8.0", diff --git a/src/main/createWindow.js b/src/main/createWindow.js index afdfe5d65..d83f9b1c3 100644 --- a/src/main/createWindow.js +++ b/src/main/createWindow.js @@ -16,8 +16,8 @@ export default appState => { }); let windowConfiguration = { - backgroundColor: '#155B4A', - minWidth: 800, + backgroundColor: '#44b098', + minWidth: 950, minHeight: 600, autoHideMenuBar: true, show: false, diff --git a/src/renderer/component/address/view.jsx b/src/renderer/component/address/view.jsx index 65ea563c0..eff0f6697 100644 --- a/src/renderer/component/address/view.jsx +++ b/src/renderer/component/address/view.jsx @@ -1,52 +1,52 @@ -import React from 'react'; -import PropTypes from 'prop-types'; +// @flow +import * as React from 'react'; import { clipboard } from 'electron'; -import Link from 'component/link'; -import classnames from 'classnames'; +import { FormRow } from 'component/common/form'; +import Button from 'component/button'; +import * as icons from 'constants/icons'; -export default class Address extends React.PureComponent { - static propTypes = { - address: PropTypes.string, - }; +type Props = { + address: string, + doShowSnackBar: ({ message: string }) => void, +}; - constructor(props) { - super(props); +export default class Address extends React.PureComponent { + constructor() { + super(); - this._inputElem = null; + this.input = null; } + input: ?HTMLInputElement; + render() { - const { address, showCopyButton, doShowSnackBar } = this.props; + const { address, doShowSnackBar } = this.props; return ( -
+ { - this._inputElem = input; + this.input = input; }} onFocus={() => { - this._inputElem.select(); + if (this.input) { + this.input.select(); + } }} - readOnly="readonly" - value={address || ''} /> - {showCopyButton && ( - - { - clipboard.writeText(address); - doShowSnackBar({ message: __('Address copied') }); - }} - /> - - )} -
+ + ); + } +} + +export default Button; diff --git a/src/renderer/component/cardMedia/view.jsx b/src/renderer/component/cardMedia/view.jsx index 06f80f1d7..a0d4b6d4e 100644 --- a/src/renderer/component/cardMedia/view.jsx +++ b/src/renderer/component/cardMedia/view.jsx @@ -1,46 +1,51 @@ +// @flow import React from 'react'; +import classnames from 'classnames'; -class CardMedia extends React.PureComponent { - static AUTO_THUMB_CLASSES = [ - 'purple', - 'red', - 'pink', - 'indigo', - 'blue', - 'light-blue', - 'cyan', - 'teal', - 'green', - 'yellow', - 'orange', - ]; +type Props = { + thumbnail: ?string, // externally sourced image + nsfw: ?boolean, +}; - componentWillMount() { - this.setState({ - autoThumbClass: - CardMedia.AUTO_THUMB_CLASSES[ - Math.floor(Math.random() * CardMedia.AUTO_THUMB_CLASSES.length) - ], - }); - } +const autoThumbColors = [ + 'purple', + 'red', + 'pink', + 'indigo', + 'blue', + 'light-blue', + 'cyan', + 'teal', + 'green', + 'yellow', + 'orange', +]; + +class CardMedia extends React.PureComponent { + getAutoThumbClass = () => { + return autoThumbColors[Math.floor(Math.random() * autoThumbColors.length)]; + }; render() { - const { title, thumbnail } = this.props; - const atClass = this.state.autoThumbClass; + const { thumbnail, nsfw } = this.props; - if (thumbnail) { - return
; + const generateAutothumb = !thumbnail && !nsfw; + let autoThumbClass; + if (generateAutothumb) { + autoThumbClass = `card__media--autothumb.${this.getAutoThumbClass()}`; } return ( -
-
- {title && - title - .replace(/\s+/g, '') - .substring(0, Math.min(title.replace(' ', '').length, 5)) - .toUpperCase()} -
+
+ {(!thumbnail || nsfw) && ( + {nsfw ? __('NSFW') : 'LBRY'} + )}
); } diff --git a/src/renderer/component/cardVerify/view.jsx b/src/renderer/component/cardVerify/view.jsx index 4690b61d2..2df72f076 100644 --- a/src/renderer/component/cardVerify/view.jsx +++ b/src/renderer/component/cardVerify/view.jsx @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Link from 'component/link'; +import Button from 'component/button'; +import * as icons from 'constants/icons'; let scriptLoading = false; let scriptLoaded = false; @@ -156,10 +157,10 @@ class CardVerify extends React.Component { render() { return ( - diff --git a/src/renderer/component/channelTile/view.jsx b/src/renderer/component/channelTile/view.jsx index 73efed63a..531b9fccd 100644 --- a/src/renderer/component/channelTile/view.jsx +++ b/src/renderer/component/channelTile/view.jsx @@ -1,18 +1,36 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import CardMedia from 'component/cardMedia'; -import { TruncatedText, BusyMessage } from 'component/common.js'; +import TruncatedText from 'component/common/truncated-text'; -class ChannelTile extends React.PureComponent { +/* + This component can probably be combined with FileTile + Currently the only difference is showing the number of files/empty channel +*/ + +type Props = { + uri: string, + isResolvingUri: boolean, + totalItems: number, + claim: ?{ + claim_id: string, + name: string, + }, + resolveUri: string => void, + navigate: (string, ?{}) => void, +}; + +class ChannelTile extends React.PureComponent { componentDidMount() { const { uri, resolveUri } = this.props; resolveUri(uri); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { const { uri, resolveUri } = this.props; - if (nextProps.uri != uri) { + if (nextProps.uri !== uri) { resolveUri(uri); } } @@ -29,29 +47,25 @@ class ChannelTile extends React.PureComponent { const onClick = () => navigate('/show', { uri }); return ( -
-
-
- {channelName && } -
-
-

- {channelName || uri} -

+
+ +
+ {isResolvingUri &&
{__('Loading...')}
} + {!isResolvingUri && ( + +
+ {channelName || uri}
-
- {isResolvingUri && } +
{totalItems > 0 && ( - This is a channel with {totalItems} {totalItems === 1 ? ' item' : ' items'}{' '} - inside of it. + {totalItems} {totalItems === 1 ? 'file' : 'files'} )} - {!isResolvingUri && - !totalItems && This is an empty channel.} + {!isResolvingUri && !totalItems && This is an empty channel.}
-
-
+ + )}
); diff --git a/src/renderer/component/common.js b/src/renderer/component/common.js deleted file mode 100644 index 629d09f57..000000000 --- a/src/renderer/component/common.js +++ /dev/null @@ -1,172 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { formatCredits, formatFullPrice } from 'util/formatCredits'; -import lbry from '../lbry.js'; - -export class TruncatedText extends React.PureComponent { - static propTypes = { - lines: PropTypes.number, - }; - - static defaultProps = { - lines: null, - }; - - render() { - return ( - - {this.props.children} - - ); - } -} - -export class BusyMessage extends React.PureComponent { - static propTypes = { - message: PropTypes.string, - }; - - render() { - return ( - - {this.props.message} - - ); - } -} - -export class CurrencySymbol extends React.PureComponent { - render() { - return LBC; - } -} - -export class CreditAmount extends React.PureComponent { - static propTypes = { - amount: PropTypes.number.isRequired, - precision: PropTypes.number, - isEstimate: PropTypes.bool, - label: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), - showFree: PropTypes.bool, - showFullPrice: PropTypes.bool, - showPlus: PropTypes.bool, - look: PropTypes.oneOf(['indicator', 'plain', 'fee']), - }; - - static defaultProps = { - precision: 2, - label: true, - showFree: false, - look: 'indicator', - showFullPrice: false, - showPlus: false, - }; - - render() { - const minimumRenderableAmount = Math.pow(10, -1 * this.props.precision); - const { amount, precision, showFullPrice } = this.props; - - let formattedAmount; - const fullPrice = formatFullPrice(amount, 2); - - if (showFullPrice) { - formattedAmount = fullPrice; - } else { - formattedAmount = - amount > 0 && amount < minimumRenderableAmount - ? `<${minimumRenderableAmount}` - : formatCredits(amount, precision); - } - - let amountText; - if (this.props.showFree && parseFloat(this.props.amount) === 0) { - amountText = __('free'); - } else { - if (this.props.label) { - const label = - typeof this.props.label === 'string' - ? this.props.label - : parseFloat(amount) == 1 ? __('credit') : __('credits'); - - amountText = `${formattedAmount} ${label}`; - } else { - amountText = formattedAmount; - } - if (this.props.showPlus && amount > 0) { - amountText = `+${amountText}`; - } - } - - return ( - - {amountText} - {this.props.isEstimate ? ( - - * - - ) : null} - - ); - } -} - -export class Thumbnail extends React.PureComponent { - static propTypes = { - src: PropTypes.string, - }; - - handleError() { - if (this.state.imageUrl != this._defaultImageUri) { - this.setState({ - imageUri: this._defaultImageUri, - }); - } - } - - constructor(props) { - super(props); - - this._defaultImageUri = lbry.imagePath('default-thumb.svg'); - this._maxLoadTime = 10000; - this._isMounted = false; - - this.state = { - imageUri: this.props.src || this._defaultImageUri, - }; - } - - componentDidMount() { - this._isMounted = true; - setTimeout(() => { - if (this._isMounted && !this.refs.img.complete) { - this.setState({ - imageUri: this._defaultImageUri, - }); - } - }, this._maxLoadTime); - } - - componentWillUnmount() { - this._isMounted = false; - } - - render() { - const className = this.props.className ? this.props.className : '', - otherProps = Object.assign({}, this.props); - delete otherProps.className; - return ( - { - this.handleError(); - }} - {...otherProps} - className={className} - src={this.state.imageUri} - /> - ); - } -} diff --git a/src/renderer/component/common/busy-indicator.jsx b/src/renderer/component/common/busy-indicator.jsx new file mode 100644 index 000000000..ee95a00ca --- /dev/null +++ b/src/renderer/component/common/busy-indicator.jsx @@ -0,0 +1,16 @@ +// @flow +import React from 'react'; + +type Props = { + message: ?string, +}; + +const BusyIndicator = (props: Props) => { + return ( + + {props.message} + + ); +}; + +export default BusyIndicator; diff --git a/src/renderer/component/common/category-list.jsx b/src/renderer/component/common/category-list.jsx new file mode 100644 index 000000000..13aacab76 --- /dev/null +++ b/src/renderer/component/common/category-list.jsx @@ -0,0 +1,245 @@ +// @flow +import React from 'react'; +import { normalizeURI } from 'lbryURI'; +import ToolTip from 'component/common/tooltip'; +import FileCard from 'component/fileCard'; +import Button from 'component/button'; +import * as icons from 'constants/icons'; + +type Props = { + category: string, + names: Array, + categoryLink?: string, +}; + +type State = { + canScrollNext: boolean, + canScrollPrevious: boolean, +}; + +class CategoryList extends React.PureComponent { + constructor() { + super(); + + this.state = { + canScrollPrevious: false, + canScrollNext: false, + }; + + (this: any).handleScrollNext = this.handleScrollNext.bind(this); + (this: any).handleScrollPrevious = this.handleScrollPrevious.bind(this); + this.rowItems = undefined; + } + + componentDidMount() { + const cardRow = this.rowItems; + if (cardRow) { + const cards = cardRow.getElementsByTagName('section'); + const lastCard = cards[cards.length - 1]; + const isCompletelyVisible = this.isCardVisible(lastCard); + + if (!isCompletelyVisible) { + // not sure how we can avoid doing this + /* eslint-disable react/no-did-mount-set-state */ + this.setState({ + canScrollNext: true, + }); + /* eslint-enable react/no-did-mount-set-state */ + } + } + } + + rowItems: ?HTMLDivElement; + + handleScroll(cardRow: HTMLDivElement, scrollTarget: number) { + const cards = cardRow.getElementsByTagName('section'); + const animationCallback = () => { + const firstCard = cards[0]; + const lastCard = cards[cards.length - 1]; + const firstCardVisible = this.isCardVisible(firstCard); + const lastCardVisible = this.isCardVisible(lastCard); + this.setState({ + canScrollNext: !lastCardVisible, + canScrollPrevious: !firstCardVisible, + }); + }; + + const currentScrollLeft = cardRow.scrollLeft; + const direction = currentScrollLeft > scrollTarget ? 'left' : 'right'; + this.scrollCardsAnimated(cardRow, scrollTarget, direction, animationCallback); + } + + scrollCardsAnimated = ( + cardRow: HTMLDivElement, + scrollTarget: number, + direction: string, + callback: () => any + ) => { + let start; + const step = timestamp => { + if (!start) start = timestamp; + + const currentLeftVal = cardRow.scrollLeft; + + let newTarget; + let shouldContinue; + let progress = currentLeftVal; + + if (direction === 'right') { + progress += timestamp - start; + newTarget = Math.min(progress, scrollTarget); + shouldContinue = newTarget < scrollTarget; + } else { + progress -= timestamp - start; + newTarget = Math.max(progress, scrollTarget); + shouldContinue = newTarget > scrollTarget; + } + + cardRow.scrollLeft = newTarget; // eslint-disable-line no-param-reassign + + if (shouldContinue) { + window.requestAnimationFrame(step); + } else { + callback(); + } + }; + + window.requestAnimationFrame(step); + }; + + // check if a card is fully visible horizontally + isCardVisible = (section: HTMLElement) => { + const rect = section.getBoundingClientRect(); + const isVisible = rect.left >= 0 && rect.right <= window.innerWidth; + return isVisible; + }; + + handleScrollNext() { + const cardRow = this.rowItems; + if (cardRow) { + const cards = cardRow.getElementsByTagName('section'); + + // loop over items until we find one that is on the screen + // continue searching until a card isn't fully visible, this is the new target + let firstFullVisibleCard; + let firstSemiVisibleCard; + + for (let i = 0; i < cards.length; i += 1) { + const currentCardVisible = this.isCardVisible(cards[i]); + + if (firstFullVisibleCard && !currentCardVisible) { + firstSemiVisibleCard = cards[i]; + break; + } else if (currentCardVisible) { + [firstFullVisibleCard] = cards; + } + } + + if (firstFullVisibleCard && firstSemiVisibleCard) { + const scrollTarget = firstSemiVisibleCard.offsetLeft - firstFullVisibleCard.offsetLeft; + this.handleScroll(cardRow, scrollTarget); + } + } + } + + handleScrollPrevious() { + const cardRow = this.rowItems; + if (cardRow) { + const cards = cardRow.getElementsByTagName('section'); + + let hasFoundCard; + let numberOfCardsThatCanFit = 0; + + // loop starting at the end until we find a visible card + // then count to find how many cards can fit on the screen + for (let i = cards.length - 1; i >= 0; i -= 1) { + const currentCard = cards[i]; + const isCurrentCardVisible = this.isCardVisible(currentCard); + + if (isCurrentCardVisible) { + if (!hasFoundCard) { + hasFoundCard = true; + } + + numberOfCardsThatCanFit += 1; + } else if (hasFoundCard) { + // this card is off the screen to the left + // we know how many cards can fit on a screen + // find the new target and scroll + const firstCardOffsetLeft = cards[0].offsetLeft; + const cardIndexToScrollTo = i + 1 - numberOfCardsThatCanFit; + const newFirstCard = cards[cardIndexToScrollTo]; + + let scrollTarget; + if (newFirstCard) { + scrollTarget = newFirstCard.offsetLeft; + } else { + // more cards can fit on the screen than are currently hidden + // just scroll to the first card + scrollTarget = cards[0].offsetLeft; + } + + scrollTarget -= firstCardOffsetLeft; // to play nice with the margins + + this.handleScroll(cardRow, scrollTarget); + break; + } + } + } + } + + render() { + const { category, names, categoryLink } = this.props; + const { canScrollNext, canScrollPrevious } = this.state; + + // The lint was throwing an error saying we should use
+
+
+
+
{ + this.rowItems = ref; + }} + className="card-row__scrollhouse" + > + {names && + names.map(name => )} +
+ + ); + } +} + +export default CategoryList; diff --git a/src/renderer/component/common/credit-amount.jsx b/src/renderer/component/common/credit-amount.jsx new file mode 100644 index 000000000..0147c0154 --- /dev/null +++ b/src/renderer/component/common/credit-amount.jsx @@ -0,0 +1,100 @@ +// @flow +import React from 'react'; +import classnames from 'classnames'; +import { formatCredits, formatFullPrice } from 'util/formatCredits'; + +type Props = { + amount: number, + precision: number, + showFree: boolean, + showFullPrice: boolean, + showPlus: boolean, + isEstimate?: boolean, + large?: boolean, + plain?: boolean, + fee?: boolean, + noStyle?: boolean, +}; + +class CreditAmount extends React.PureComponent { + static defaultProps = { + precision: 2, + showFree: false, + showFullPrice: false, + showPlus: false, + }; + + render() { + const { + amount, + precision, + showFullPrice, + showFree, + showPlus, + large, + isEstimate, + plain, + noStyle, + fee, + } = this.props; + + const minimumRenderableAmount = 10 ** (-1 * precision); + const fullPrice = formatFullPrice(amount, 2); + const isFree = parseFloat(amount) === 0; + + let formattedAmount; + if (showFullPrice) { + formattedAmount = fullPrice; + } else { + formattedAmount = + amount > 0 && amount < minimumRenderableAmount + ? `<${minimumRenderableAmount}` + : formatCredits(amount, precision); + } + + let amountText; + if (showFree && isFree) { + amountText = __('FREE'); + } else { + amountText = formattedAmount; + + if (showPlus && amount > 0) { + amountText = `+${amountText}`; + } + + if (!plain) { + amountText = `${amountText} ${__('LBC')}`; + } + + if (fee) { + amountText = `${amountText} ${__('fee')}`; + } + } + + return ( + + {amountText} + + {isEstimate ? ( + + * + + ) : null} + + ); + } +} + +export default CreditAmount; diff --git a/src/renderer/component/file-exporter.js b/src/renderer/component/common/file-exporter.jsx similarity index 72% rename from src/renderer/component/file-exporter.js rename to src/renderer/component/common/file-exporter.jsx index 7c9fed011..8ab48e05c 100644 --- a/src/renderer/component/file-exporter.js +++ b/src/renderer/component/common/file-exporter.jsx @@ -1,31 +1,35 @@ +// @flow import fs from 'fs'; import path from 'path'; import React from 'react'; import PropTypes from 'prop-types'; -import Link from 'component/link'; +import Button from 'component/button'; import parseData from 'util/parseData'; import * as icons from 'constants/icons'; -const { remote } = require('electron'); +import { remote } from 'electron'; -class FileExporter extends React.PureComponent { - static propTypes = { - data: PropTypes.array, - title: PropTypes.string, - label: PropTypes.string, - filters: PropTypes.arrayOf(PropTypes.string), - defaultPath: PropTypes.string, - onFileCreated: PropTypes.func, - }; +type Props = { + data: Array, + title: string, + label: string, + defaultPath?: string, + filters: Array, + onFileCreated?: string => void, +}; +class FileExporter extends React.PureComponent { static defaultProps = { filters: [], }; - constructor(props) { - super(props); + constructor() { + super(); + this.handleButtonClick = this.handleButtonClick.bind(this); } - handleFileCreation(filename, data) { + handleButtonClick: () => void; + + handleFileCreation(filename: string, data: any) { const { onFileCreated } = this.props; fs.writeFile(filename, data, err => { if (err) throw err; @@ -67,12 +71,11 @@ class FileExporter extends React.PureComponent { render() { const { title, label } = this.props; return ( - this.handleButtonClick()} + onClick={this.handleButtonClick} /> ); } diff --git a/src/renderer/component/common/file-selector.jsx b/src/renderer/component/common/file-selector.jsx new file mode 100644 index 000000000..d5d12cfde --- /dev/null +++ b/src/renderer/component/common/file-selector.jsx @@ -0,0 +1,77 @@ +// @flow +import React from 'react'; +import { remote } from 'electron'; +import Button from 'component/button'; +import { FormRow } from 'component/common/form'; +import path from 'path'; + +type Props = { + type: string, + currentPath: ?string, + onFileChosen: (string, string) => void, +}; + +class FileSelector extends React.PureComponent { + static defaultProps = { + type: 'file', + }; + + constructor() { + super(); + this.input = null; + } + + handleButtonClick() { + remote.dialog.showOpenDialog( + { + properties: + this.props.type === 'file' ? ['openFile'] : ['openDirectory', 'createDirectory'], + }, + paths => { + if (!paths) { + // User hit cancel, so do nothing + return; + } + + const filePath = paths[0]; + const extension = path.extname(filePath); + const fileName = path.basename(filePath, extension); + + if (this.props.onFileChosen) { + this.props.onFileChosen(filePath, fileName); + } + } + ); + } + + input: ?HTMLInputElement; + + render() { + const { type, currentPath } = this.props; + + return ( + + +
{body}
+ + ); + } +} + +export default ToolTip; diff --git a/src/renderer/component/common/transaction-link.jsx b/src/renderer/component/common/transaction-link.jsx new file mode 100644 index 000000000..2d48feb96 --- /dev/null +++ b/src/renderer/component/common/transaction-link.jsx @@ -0,0 +1,18 @@ +// @flow +import React from 'react'; +import Button from 'component/button'; + +type Props = { + id: string, +}; + +const TransactionLink = (props: Props) => { + const { id } = props; + + const href = `https://explorer.lbry.io/#!/transaction/${id}`; + const label = id.substr(0, 7); + + return {' '} - - { - this._inputElem = input; - }} - onFocus={() => { - this._inputElem.select(); - }} - readOnly="readonly" - value={this.state.path || __('No File Chosen')} - /> - - - ); - } -} - -export default FileSelector; diff --git a/src/renderer/component/fileActions/view.jsx b/src/renderer/component/fileActions/view.jsx index b2d83f3b9..0ffb21468 100644 --- a/src/renderer/component/fileActions/view.jsx +++ b/src/renderer/component/fileActions/view.jsx @@ -1,52 +1,47 @@ +// @flow import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import FileDownloadLink from 'component/fileDownloadLink'; import * as modals from 'constants/modal_types'; +import classnames from 'classnames'; +import * as icons from 'constants/icons'; -class FileActions extends React.PureComponent { +type FileInfo = { + claim_id: string, +}; + +type Props = { + uri: string, + openModal: (string, any) => void, + claimIsMine: boolean, + fileInfo: FileInfo, + vertical?: boolean, // should the buttons be stacked vertically? +}; + +class FileActions extends React.PureComponent { render() { - const { fileInfo, uri, openModal, claimIsMine } = this.props; + const { fileInfo, uri, openModal, claimIsMine, vertical } = this.props; - const claimId = fileInfo ? fileInfo.claim_id : null, - showDelete = fileInfo && Object.keys(fileInfo).length > 0; + const claimId = fileInfo ? fileInfo.claim_id : ''; + const showDelete = fileInfo && Object.keys(fileInfo).length > 0; return ( -
+
{showDelete && ( - openModal(modals.CONFIRM_FILE_REMOVE, { uri })} /> )} {!claimIsMine && ( - - )} - - {claimIsMine && ( - )}
diff --git a/src/renderer/component/fileCard/index.js b/src/renderer/component/fileCard/index.js index f324e93a3..12bc9e649 100644 --- a/src/renderer/component/fileCard/index.js +++ b/src/renderer/component/fileCard/index.js @@ -6,16 +6,31 @@ import { selectShowNsfw } from 'redux/selectors/settings'; import { makeSelectClaimForUri, makeSelectMetadataForUri } from 'redux/selectors/claims'; import { makeSelectFileInfoForUri } from 'redux/selectors/file_info'; import { makeSelectIsUriResolving, selectRewardContentClaimIds } from 'redux/selectors/content'; +import { selectPendingPublish } from 'redux/selectors/publish'; import FileCard from './view'; -const select = (state, props) => ({ - claim: makeSelectClaimForUri(props.uri)(state), - fileInfo: makeSelectFileInfoForUri(props.uri)(state), - obscureNsfw: !selectShowNsfw(state), - metadata: makeSelectMetadataForUri(props.uri)(state), - rewardedContentClaimIds: selectRewardContentClaimIds(state, props), - isResolvingUri: makeSelectIsUriResolving(props.uri)(state), -}); +const select = (state, props) => { + let claim; + let fileInfo; + let metadata; + let isResolvingUri; + + const pendingPublish = selectPendingPublish(props.uri)(state); + + const fileCardInfo = pendingPublish || { + claim: makeSelectClaimForUri(props.uri)(state), + fileInfo: makeSelectFileInfoForUri(props.uri)(state), + metadata: makeSelectMetadataForUri(props.uri)(state), + isResolvingUri: makeSelectIsUriResolving(props.uri)(state), + }; + + return { + obscureNsfw: !selectShowNsfw(state), + rewardedContentClaimIds: selectRewardContentClaimIds(state, props), + ...fileCardInfo, + pending: !!pendingPublish, + }; +}; const perform = dispatch => ({ navigate: (path, params) => dispatch(doNavigate(path, params)), diff --git a/src/renderer/component/fileCard/view.jsx b/src/renderer/component/fileCard/view.jsx index 19b1370da..1e23ad092 100644 --- a/src/renderer/component/fileCard/view.jsx +++ b/src/renderer/component/fileCard/view.jsx @@ -1,111 +1,102 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import { normalizeURI } from 'lbryURI'; import CardMedia from 'component/cardMedia'; -import Link from 'component/link'; -import { TruncatedText } from 'component/common'; -import Icon from 'component/icon'; +import TruncatedText from 'component/common/truncated-text'; +import Icon from 'component/common/icon'; import FilePrice from 'component/filePrice'; import UriIndicator from 'component/uriIndicator'; import NsfwOverlay from 'component/nsfwOverlay'; -import TruncatedMarkdown from 'component/truncatedMarkdown'; import * as icons from 'constants/icons'; +import classnames from 'classnames'; -class FileCard extends React.PureComponent { - constructor(props) { - super(props); +// TODO: iron these out +type Props = { + isResolvingUri: boolean, + resolveUri: string => void, + uri: string, + claim: ?{ claim_id: string }, + fileInfo: ?{}, + metadata: ?{ nsfw: boolean, thumbnail: ?string }, + navigate: (string, ?{}) => void, + rewardedContentClaimIds: Array, + obscureNsfw: boolean, + showPrice: boolean, + pending?: boolean, +}; - this.state = { - hovered: false, - }; - } +class FileCard extends React.PureComponent { + static defaultProps = { + showPrice: true, + }; componentWillMount() { this.resolve(this.props); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { this.resolve(nextProps); } - resolve(props) { + resolve = (props: Props) => { const { isResolvingUri, resolveUri, claim, uri } = props; if (!isResolvingUri && claim === undefined && uri) { resolveUri(uri); } - } - - handleMouseOver() { - this.setState({ - hovered: true, - }); - } - - handleMouseOut() { - this.setState({ - hovered: false, - }); - } + }; render() { const { claim, fileInfo, metadata, - isResolvingUri, navigate, rewardedContentClaimIds, + obscureNsfw, + showPrice, + pending, } = this.props; - - const uri = normalizeURI(this.props.uri); + const uri = !pending ? normalizeURI(this.props.uri) : this.props.uri; const title = metadata && metadata.title ? metadata.title : uri; const thumbnail = metadata && metadata.thumbnail ? metadata.thumbnail : null; - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; + const shouldObscureNsfw = obscureNsfw && metadata && metadata.nsfw; const isRewardContent = claim && rewardedContentClaimIds.includes(claim.claim_id); - let description = ''; - if (isResolvingUri && !claim) { - description = __('Loading...'); - } else if (metadata && metadata.description) { - description = metadata.description; - } else if (claim === null) { - description = __('This address contains no content.'); - } - + // We should be able to tab through cards + /* eslint-disable jsx-a11y/click-events-have-key-events */ return (
navigate('/show', { uri }) : () => {}} + className={classnames('card card--small', { + 'card--link': !pending, + 'card--pending': pending, + })} > -
- navigate('/show', { uri })} className="card__link"> - -
-
- {title} -
-
- - {' '} - {isRewardContent && }{' '} - {fileInfo && } - - - - -
-
- - {/* Test for nizuka's design: should we remove description? -
- {description} -
- */} + +
{showPrice && }
+ +
+
+ {title} +
+
+ {pending ? ( +
Pending...
+ ) : ( + + + {isRewardContent && } + {fileInfo && } + + )} +
- {obscureNsfw && this.state.hovered && }
); + /* eslint-enable jsx-a11y/click-events-have-key-events */ } } diff --git a/src/renderer/component/fileDetails/view.jsx b/src/renderer/component/fileDetails/view.jsx index 9b6753484..3912729ad 100644 --- a/src/renderer/component/fileDetails/view.jsx +++ b/src/renderer/component/fileDetails/view.jsx @@ -1,70 +1,81 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import ReactMarkdown from 'react-markdown'; -import lbry from 'lbry.js'; -import FileActions from 'component/fileActions'; -import Link from 'component/link'; -import DateTime from 'component/dateTime'; +import lbry from 'lbry'; +import Button from 'component/button'; +import path from 'path'; -const path = require('path'); +type Props = { + claim: {}, + fileInfo: { + download_path: string, + }, + metadata: { + description: string, + language: string, + license: string, + }, + openFolder: string => void, + contentType: string, +}; -class FileDetails extends React.PureComponent { - render() { - const { claim, contentType, fileInfo, metadata, openFolder, uri } = this.props; - - if (!claim || !metadata) { - return ( -
- {__('Empty claim or metadata info.')} -
- ); - } - - const { description, language, license } = metadata; - const mediaType = lbry.getMediaType(contentType); - - const downloadPath = fileInfo ? path.normalize(fileInfo.download_path) : null; +const FileDetails = (props: Props) => { + const { claim, contentType, fileInfo, metadata, openFolder } = props; + if (!claim || !metadata) { return ( -
-
- -
-
- -
-
- - - - - - - - - - - - - - - {downloadPath && ( - - - - - )} - -
{__('Content-Type')}{mediaType}
{__('Language')}{language}
{__('License')}{license}
{__('Downloaded to')} - openFolder(downloadPath)}>{downloadPath} -
-
+
+ {__('Empty claim or metadata info.')}
); } -} + + const { description, language, license } = metadata; + const mediaType = lbry.getMediaType(contentType); + + const downloadPath = fileInfo ? path.normalize(fileInfo.download_path) : null; + + return ( + + {description && ( + +
About
+
+ +
+
+ )} +
Info
+
+
+ {__('Content-Type')} + {': '} + {mediaType} +
+
+ {__('Language')} + {': '} + {language} +
+
+ {__('License')} + {': '} + {license} +
+ {downloadPath && ( +
+ {__('Downloaded to')} + {': '} +
+ )} +
+
+ ); +}; export default FileDetails; diff --git a/src/renderer/component/fileDownloadLink/view.jsx b/src/renderer/component/fileDownloadLink/view.jsx index 57818da51..c2c413bd6 100644 --- a/src/renderer/component/fileDownloadLink/view.jsx +++ b/src/renderer/component/fileDownloadLink/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import Icon from 'component/icon'; -import Link from 'component/link'; +import Button from 'component/button'; +import classnames from 'classnames'; +import * as icons from 'constants/icons'; class FileDownloadLink extends React.PureComponent { componentWillMount() { @@ -53,38 +53,34 @@ class FileDownloadLink extends React.PureComponent { if (loading || downloading) { const progress = - fileInfo && fileInfo.written_bytes - ? fileInfo.written_bytes / fileInfo.total_bytes * 100 - : 0, - label = fileInfo ? progress.toFixed(0) + __('% complete') : __('Connecting...'), - labelWithIcon = ( - - - {label} - - ); + fileInfo && fileInfo.written_bytes + ? fileInfo.written_bytes / fileInfo.total_bytes * 100 + : 0; + const label = fileInfo ? progress.toFixed(0) + __('% complete') : __('Connecting...'); return ( -
+
- {labelWithIcon} + {label}
- {labelWithIcon} + {label}
); } else if (fileInfo === null && !downloading) { if (!costInfo) { - return ; + return null; } + return ( - { purchaseUri(uri); }} @@ -92,11 +88,10 @@ class FileDownloadLink extends React.PureComponent { ); } else if (fileInfo && fileInfo.download_path) { return ( - openFile()} /> ); diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index 9c926e825..0e3b730f9 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -1,21 +1,54 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import { buildURI } from 'lbryURI'; -import FormField from 'component/formField'; -import FileTile from 'component/fileTile'; -import { BusyMessage } from 'component/common.js'; +import { FormField } from 'component/common/form'; +import FileCard from 'component/fileCard'; -class FileList extends React.PureComponent { - constructor(props) { +type FileInfo = { + name: string, + channelName: ?string, + pending?: boolean, + value?: { + publisherSignature: { + certificateId: string, + }, + }, + metadata: { + publisherSignature: { + certificateId: string, + }, + }, +}; + +type Props = { + hideFilter: boolean, + fileInfos: Array, +}; + +type State = { + sortBy: string, +}; + +class FileList extends React.PureComponent { + static defaultProps = { + hideFilter: false, + }; + + constructor(props: Props) { super(props); this.state = { sortBy: 'dateNew', }; - this._sortFunctions = { + this.sortFunctions = { dateNew: fileInfos => this.props.sortByHeight ? fileInfos.slice().sort((fileInfo1, fileInfo2) => { + if (fileInfo1.pending) { + return -1; + } + const height1 = this.props.claimsById[fileInfo1.claim_id] ? this.props.claimsById[fileInfo1.claim_id].height : 0; @@ -76,60 +109,62 @@ class FileList extends React.PureComponent { }; } - getChannelSignature(fileInfo) { + getChannelSignature = (fileInfo: FileInfo) => { + if (fileInfo.pending) { + return undefined; + } + if (fileInfo.value) { return fileInfo.value.publisherSignature.certificateId; } return fileInfo.channel_claim_id; - } + }; - handleSortChanged(event) { + handleSortChanged(event: SyntheticInputEvent<*>) { this.setState({ sortBy: event.target.value, }); } render() { - const { handleSortChanged, fetching, fileInfos } = this.props; + const { fileInfos, hideFilter } = this.props; const { sortBy } = this.state; const content = []; - this._sortFunctions[sortBy](fileInfos).forEach(fileInfo => { + this.sortFunctions[sortBy](fileInfos).forEach(fileInfo => { + const { channel_name: channelName, name: claimName, claim_id: claimId } = fileInfo; const uriParams = {}; - if (fileInfo.channel_name) { - uriParams.channelName = fileInfo.channel_name; - uriParams.contentName = fileInfo.claim_name || fileInfo.name; + if (channelName) { + uriParams.channelName = channelName; + uriParams.contentName = claimName; uriParams.claimId = this.getChannelSignature(fileInfo); } else { - uriParams.claimId = fileInfo.claim_id; - uriParams.claimName = fileInfo.claim_name || fileInfo.name; + uriParams.claimId = claimId; + uriParams.claimName = claimName; } + const uri = buildURI(uriParams); - content.push( - - ); + content.push(); }); + return ( -
- {fetching && } - - {__('Sort by')}{' '} - - - - - - - {content} +
+
+ {!hideFilter && ( + + + + + )} +
+
{content}
); } diff --git a/src/renderer/component/fileListSearch/index.js b/src/renderer/component/fileListSearch/index.js index ec06231af..328295768 100644 --- a/src/renderer/component/fileListSearch/index.js +++ b/src/renderer/component/fileListSearch/index.js @@ -1,12 +1,13 @@ -import React from 'react'; import { connect } from 'react-redux'; import { doSearch } from 'redux/actions/search'; -import { selectIsSearching, makeSelectSearchUris } from 'redux/selectors/search'; +import { makeSelectSearchUris, selectIsSearching } from 'redux/selectors/search'; +import { selectSearchDownloadUris } from 'redux/selectors/file_info'; import FileListSearch from './view'; const select = (state, props) => ({ - isSearching: selectIsSearching(state), uris: makeSelectSearchUris(props.query)(state), + downloadUris: selectSearchDownloadUris(props.query)(state), + isSearching: selectIsSearching(state), }); const perform = dispatch => ({ diff --git a/src/renderer/component/fileListSearch/view.jsx b/src/renderer/component/fileListSearch/view.jsx index 89e99ca65..53add5ab7 100644 --- a/src/renderer/component/fileListSearch/view.jsx +++ b/src/renderer/component/fileListSearch/view.jsx @@ -1,58 +1,95 @@ +// @flow import React from 'react'; import FileTile from 'component/fileTile'; import ChannelTile from 'component/channelTile'; -import Link from 'component/link'; -import { BusyMessage } from 'component/common.js'; import { parseURI } from 'lbryURI'; +import debounce from 'util/debounce'; -const SearchNoResults = props => { - const { query } = props; +const SEARCH_DEBOUNCE_TIME = 800; - return ( -
- - {(__('No one has checked anything in for %s yet.'), query)}{' '} - - -
- ); +const NoResults = () => { + return
{__('No results')}
; }; -class FileListSearch extends React.PureComponent { - componentWillMount() { - this.doSearch(this.props); +type Props = { + search: string => void, + query: string, + isSearching: boolean, + uris: ?Array, + downloadUris: ?Array, +}; + +class FileListSearch extends React.PureComponent { + constructor(props: Props) { + super(props); + this.debouncedSearch = debounce(this.props.search, SEARCH_DEBOUNCE_TIME); } - componentWillReceiveProps(props) { - if (props.query != this.props.query) { - this.doSearch(props); + componentDidMount() { + const { search, query } = this.props; + search(query); + } + + componentWillReceiveProps(nextProps: Props) { + const { query: nextQuery } = nextProps; + const { query: currentQuerry } = this.props; + + if (nextQuery !== currentQuerry) { + this.debouncedSearch(nextQuery); } } - doSearch(props) { - this.props.search(props.query); - } + debouncedSearch: string => void; render() { - const { isSearching, uris, query } = this.props; + const { uris, query, downloadUris, isSearching } = this.props; + + const fileResults = []; + const channelResults = []; + if (uris && uris.length) { + uris.forEach(uri => { + const isChannel = parseURI(uri).claimName[0] === '@'; + if (isChannel) { + channelResults.push(uri); + } else { + fileResults.push(uri); + } + }); + } return ( -
- {isSearching && !uris && } + query && ( +
+
+
{__('Files')}
+ {!isSearching && + (fileResults.length ? ( + fileResults.map(uri => ) + ) : ( + + ))} +
- {isSearching && uris && } +
+
{__('Channels')}
+ {!isSearching && + (channelResults.length ? ( + channelResults.map(uri => ) + ) : ( + + ))} +
- {uris && uris.length - ? uris.map( - uri => - parseURI(uri).claimName[0] === '@' ? ( - - ) : ( - - ) - ) - : !isSearching && } -
+
+
{__('Your downloads')}
+ {downloadUris && downloadUris.length ? ( + downloadUris.map(uri => ) + ) : ( + + )} +
+
+ ) ); } } diff --git a/src/renderer/component/filePrice/view.jsx b/src/renderer/component/filePrice/view.jsx index 5a5947f14..090c93126 100644 --- a/src/renderer/component/filePrice/view.jsx +++ b/src/renderer/component/filePrice/view.jsx @@ -1,35 +1,48 @@ +// @flow import React from 'react'; -import { CreditAmount } from 'component/common'; +import CreditAmount from 'component/common/credit-amount'; + +type Props = { + showFullPrice: boolean, + costInfo: ?{ includesData: boolean, cost: number }, + fetchCostInfo: string => void, + uri: string, + fetching: boolean, + claim: ?{}, +}; + +class FilePrice extends React.PureComponent { + static defaultProps = { + showFullPrice: false, + }; -class FilePrice extends React.PureComponent { componentWillMount() { this.fetchCost(this.props); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { this.fetchCost(nextProps); } - fetchCost(props) { + fetchCost = (props: Props) => { const { costInfo, fetchCostInfo, uri, fetching, claim } = props; if (costInfo === undefined && !fetching && claim) { fetchCostInfo(uri); } - } + }; render() { - const { costInfo, look = 'indicator', showFullPrice = false } = this.props; + const { costInfo, showFullPrice } = this.props; - const isEstimate = costInfo ? !costInfo.includesData : null; + const isEstimate = costInfo ? !costInfo.includesData : false; if (!costInfo) { - return ???; + return PRICE; } return ( ({ claim: makeSelectClaimForUri(props.uri)(state), - fileInfo: makeSelectFileInfoForUri(props.uri)(state), - obscureNsfw: !selectShowNsfw(state), + isDownloaded: !!makeSelectFileInfoForUri(props.uri)(state), metadata: makeSelectMetadataForUri(props.uri)(state), isResolvingUri: makeSelectIsUriResolving(props.uri)(state), rewardedContentClaimIds: selectRewardContentClaimIds(state, props), diff --git a/src/renderer/component/fileTile/view.jsx b/src/renderer/component/fileTile/view.jsx index 6bbc3b4c6..7761b9f4e 100644 --- a/src/renderer/component/fileTile/view.jsx +++ b/src/renderer/component/fileTile/view.jsx @@ -1,132 +1,115 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import * as icons from 'constants/icons'; import { normalizeURI, isURIClaimable, parseURI } from 'lbryURI'; import CardMedia from 'component/cardMedia'; -import { TruncatedText } from 'component/common.js'; +import TruncatedText from 'component/common/truncated-text'; import FilePrice from 'component/filePrice'; -import NsfwOverlay from 'component/nsfwOverlay'; -import Icon from 'component/icon'; +import Icon from 'component/common/icon'; +import Button from 'component/button'; +import classnames from 'classnames'; -class FileTile extends React.PureComponent { - static SHOW_EMPTY_PUBLISH = 'publish'; - static SHOW_EMPTY_PENDING = 'pending'; +type Props = { + fullWidth: boolean, // removes the max-width css + showUri: boolean, + showLocal: boolean, + isDownloaded: boolean, + uri: string, + isResolvingUri: boolean, + rewardedContentClaimIds: Array, + claim: ?{ + name: string, + channel_name: string, + claim_id: string, + }, + metadata: {}, + resolveUri: string => void, + navigate: (string, ?{}) => void, +}; +class FileTile extends React.PureComponent { static defaultProps = { - showPrice: true, - showLocal: true, + showUri: false, + showLocal: false, + fullWidth: false, }; - constructor(props) { - super(props); - this.state = { - showNsfwHelp: false, - }; - } - componentDidMount() { const { isResolvingUri, claim, uri, resolveUri } = this.props; - if (!isResolvingUri && !claim && uri) resolveUri(uri); } - componentWillReceiveProps(nextProps) { - const { isResolvingUri, claim, uri, resolveUri } = this.props; - + componentWillReceiveProps(nextProps: Props) { + const { isResolvingUri, claim, uri, resolveUri } = nextProps; if (!isResolvingUri && claim === undefined && uri) resolveUri(uri); } - handleMouseOver() { - if (this.props.obscureNsfw && this.props.metadata && this.props.metadata.nsfw) { - this.setState({ - showNsfwHelp: true, - }); - } - } - - handleMouseOut() { - if (this.state.showNsfwHelp) { - this.setState({ - showNsfwHelp: false, - }); - } - } - render() { const { claim, - showActions, metadata, isResolvingUri, - showEmpty, navigate, - showPrice, - showLocal, rewardedContentClaimIds, - fileInfo, + showUri, + fullWidth, + showLocal, + isDownloaded, } = this.props; const uri = normalizeURI(this.props.uri); const isClaimed = !!claim; - const isClaimable = isURIClaimable(uri); const title = isClaimed && metadata && metadata.title ? metadata.title : parseURI(uri).contentName; const thumbnail = metadata && metadata.thumbnail ? metadata.thumbnail : null; - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; const isRewardContent = claim && rewardedContentClaimIds.includes(claim.claim_id); - let onClick = () => navigate('/show', { uri }); + const onClick = () => navigate('/show', { uri }); - let name = ''; + let name; + let channel; if (claim) { name = claim.name; - } - - let description = ''; - if (isClaimed) { - description = metadata && metadata.description; - } else if (isResolvingUri) { - description = __('Loading...'); - } else if (showEmpty === FileTile.SHOW_EMPTY_PUBLISH) { - onClick = () => navigate('/publish', {}); - description = ( - - {__('This location is unused.')}{' '} - {isClaimable && {__('Put something here!')}} - - ); - } else if (showEmpty === FileTile.SHOW_EMPTY_PENDING) { - description = {__('This file is pending confirmation.')}; + channel = claim.channel_name; } return (
-
-
- -
-
- - {showPrice && }{' '} - {isRewardContent && }{' '} - {showLocal && fileInfo && } - -

- {title || name} -

+ +
+ {isResolvingUri &&
{__('Loading...')}
} + {!isResolvingUri && ( + +
+ {title || name}
- {description && ( -
- {description} -
+
+ {showUri ? uri : channel || __('Anonymous')} + {isRewardContent && } + {showLocal && isDownloaded && } +
+ {!name && ( + + {__('This location is unused.')}{' '} +
-
+ + )}
- {this.state.showNsfwHelp && }
); } diff --git a/src/renderer/component/form.js b/src/renderer/component/form.js deleted file mode 100644 index c13619b1a..000000000 --- a/src/renderer/component/form.js +++ /dev/null @@ -1,186 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import FormField from 'component/formField'; -import Icon from 'component/icon'; - -let formFieldCounter = 0; - -export const formFieldNestedLabelTypes = ['radio', 'checkbox']; - -export function formFieldId() { - return `form-field-${++formFieldCounter}`; -} - -export class Form extends React.PureComponent { - static propTypes = { - onSubmit: PropTypes.func.isRequired, - }; - - constructor(props) { - super(props); - } - - handleSubmit(event) { - event.preventDefault(); - this.props.onSubmit(); - } - - render() { - return
this.handleSubmit(event)}>{this.props.children}
; - } -} - -export class FormRow extends React.PureComponent { - static propTypes = { - label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), - errorMessage: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), - // helper: PropTypes.html, - }; - - static defaultProps = { - isFocus: false, - }; - - constructor(props) { - super(props); - - this._field = null; - - this._fieldRequiredText = __('This field is required'); - - this.state = this.getStateFromProps(props); - } - - componentWillReceiveProps(nextProps) { - this.setState(this.getStateFromProps(nextProps)); - } - - getStateFromProps(props) { - return { - isError: !!props.errorMessage, - errorMessage: - typeof props.errorMessage === 'string' - ? props.errorMessage - : props.errorMessage instanceof Error ? props.errorMessage.toString() : '', - }; - } - - showError(text) { - this.setState({ - isError: true, - errorMessage: text, - }); - } - - showRequiredError() { - this.showError(this._fieldRequiredText); - } - - clearError(text) { - this.setState({ - isError: false, - errorMessage: '', - }); - } - - getValue() { - return this._field.getValue(); - } - - getSelectedElement() { - return this._field.getSelectedElement(); - } - - getOptions() { - return this._field.getOptions(); - } - - focus() { - this._field.focus(); - } - - onFocus() { - this.setState({ isFocus: true }); - } - - onBlur() { - this.setState({ isFocus: false }); - } - - render() { - const fieldProps = Object.assign({}, this.props), - elementId = formFieldId(), - renderLabelInFormField = formFieldNestedLabelTypes.includes(this.props.type); - - if (!renderLabelInFormField) { - delete fieldProps.label; - } - delete fieldProps.helper; - delete fieldProps.errorMessage; - delete fieldProps.isFocus; - - return ( -
- {this.props.label && !renderLabelInFormField ? ( -
- -
- ) : ( - '' - )} - { - this._field = ref ? ref.getWrappedInstance() : null; - }} - hasError={this.state.isError} - onFocus={this.onFocus.bind(this)} - onBlur={this.onBlur.bind(this)} - {...fieldProps} - /> - {!this.state.isError && this.props.helper ? ( -
{this.props.helper}
- ) : ( - '' - )} - {this.state.isError ? ( -
{this.state.errorMessage}
- ) : ( - '' - )} -
- ); - } -} - -export const Submit = props => { - const { title, label, icon, disabled } = props; - - const className = `${'button-block' + - ' button-primary' + - ' button-set-item' + - ' button--submit'}${disabled ? ' disabled' : ''}`; - - const content = ( - - {'icon' in props ? : null} - {label ? {label} : null} - - ); - - return ( - - ); -}; diff --git a/src/renderer/component/formField/view.jsx b/src/renderer/component/formField/view.jsx index 960b08c17..9d8dca9ec 100644 --- a/src/renderer/component/formField/view.jsx +++ b/src/renderer/component/formField/view.jsx @@ -1,8 +1,10 @@ +// This file is going to die +/* eslint-disable */ import React from 'react'; import PropTypes from 'prop-types'; -import FileSelector from 'component/file-selector.js'; +import FileSelector from 'component/common/file-selector'; import SimpleMDE from 'react-simplemde-editor'; -import { formFieldNestedLabelTypes, formFieldId } from '../form'; +import { formFieldNestedLabelTypes, formFieldId } from 'component/common/form'; import style from 'react-simplemde-editor/dist/simplemde.min.css'; const formFieldFileSelectorTypes = ['file', 'directory']; @@ -195,3 +197,4 @@ class FormField extends React.PureComponent { } export default FormField; +/* eslint-enable */ diff --git a/src/renderer/component/formFieldPrice/view.jsx b/src/renderer/component/formFieldPrice/view.jsx index 71382bb47..405e9b8ce 100644 --- a/src/renderer/component/formFieldPrice/view.jsx +++ b/src/renderer/component/formFieldPrice/view.jsx @@ -1,63 +1,5 @@ -import React from 'react'; -import FormField from 'component/formField'; +// This just exists so the app builds. It will be removed -class FormFieldPrice extends React.PureComponent { - constructor(props) { - super(props); - this.state = { - amount: props.defaultValue && props.defaultValue.amount ? props.defaultValue.amount : '', - currency: - props.defaultValue && props.defaultValue.currency ? props.defaultValue.currency : 'LBC', - }; - } - - handleChange(newValues) { - const newState = Object.assign({}, this.state, newValues); - this.setState(newState); - this.props.onChange({ - amount: newState.amount, - currency: newState.currency, - }); - } - - handleFeeAmountChange(event) { - this.handleChange({ - amount: event.target.value ? Number(event.target.value) : null, - }); - } - - handleFeeCurrencyChange(event) { - this.handleChange({ currency: event.target.value }); - } - - render() { - const { defaultValue, placeholder, min } = this.props; - - return ( - - this.handleFeeAmountChange(event)} - defaultValue={defaultValue && defaultValue.amount ? defaultValue.amount : ''} - className="form-field__input--inline" - /> - this.handleFeeCurrencyChange(event)} - defaultValue={defaultValue && defaultValue.currency ? defaultValue.currency : ''} - className="form-field__input--inline" - > - - - - - ); - } -} +const FormFieldPrice = () => null; export default FormFieldPrice; diff --git a/src/renderer/component/header/index.js b/src/renderer/component/header/index.js index 59c98d0ff..073d0d2eb 100644 --- a/src/renderer/component/header/index.js +++ b/src/renderer/component/header/index.js @@ -1,16 +1,12 @@ -import React from 'react'; -import { formatCredits } from 'util/formatCredits'; import { connect } from 'react-redux'; -import { selectIsBackDisabled, selectIsForwardDisabled } from 'redux/selectors/navigation'; -import { selectBalance } from 'redux/selectors/wallet'; -import { doNavigate, doHistoryBack, doHistoryForward } from 'redux/actions/navigation'; -import Header from './view'; +import { doNavigate } from 'redux/actions/navigation'; import { selectIsUpgradeAvailable, selectAutoUpdateDownloaded } from 'redux/selectors/app'; +import { formatCredits } from 'util/formatCredits'; +import { selectBalance } from 'redux/selectors/wallet'; +import Header from './view'; import { doDownloadUpgradeRequested } from 'redux/actions/app'; const select = state => ({ - isBackDisabled: selectIsBackDisabled(state), - isForwardDisabled: selectIsForwardDisabled(state), isUpgradeAvailable: selectIsUpgradeAvailable(state), autoUpdateDownloaded: selectAutoUpdateDownloaded(state), balance: formatCredits(selectBalance(state) || 0, 2), diff --git a/src/renderer/component/header/view.jsx b/src/renderer/component/header/view.jsx index 7109d7b8b..e081e2139 100644 --- a/src/renderer/component/header/view.jsx +++ b/src/renderer/component/header/view.jsx @@ -1,100 +1,68 @@ -import React from 'react'; -import Link from 'component/link'; +// @flow +import * as React from 'react'; +import Button from 'component/button'; import WunderBar from 'component/wunderbar'; +import * as icons from 'constants/icons'; -export const Header = props => { +type Props = { + balance: string, + navigate: any => void, + downloadUpgradeRequested: any => void, + isUpgradeAvailable: boolean, + autoUpdateDownloaded: boolean, +}; + +const Header = (props: Props) => { const { balance, - back, - forward, - isBackDisabled, - isForwardDisabled, isUpgradeAvailable, - autoUpdateDownloaded, navigate, downloadUpgradeRequested, + autoUpdateDownloaded, } = props; + + const showUpgradeButton = + autoUpdateDownloaded || (process.platform === 'linux' && isUpgradeAvailable); + return ( - ); }; diff --git a/src/renderer/component/icon/index.js b/src/renderer/component/icon/index.js deleted file mode 100644 index 81d61e58b..000000000 --- a/src/renderer/component/icon/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import Icon from './view'; - -export default connect(null, null)(Icon); diff --git a/src/renderer/component/icon/view.jsx b/src/renderer/component/icon/view.jsx deleted file mode 100644 index 795a1b241..000000000 --- a/src/renderer/component/icon/view.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import * as icons from 'constants/icons'; -import classnames from 'classnames'; - -export default class Icon extends React.PureComponent { - static propTypes = { - icon: PropTypes.string.isRequired, - fixed: PropTypes.bool, - }; - - static defaultProps = { - fixed: false, - }; - - getIconClass() { - const { icon } = this.props; - - return icon.startsWith('icon-') ? icon : `icon-${icon}`; - } - - getIconTitle() { - switch (this.props.icon) { - case icons.FEATURED: - return __('Watch this and earn rewards.'); - case icons.LOCAL: - return __('You have a copy of this file.'); - default: - return ''; - } - } - - render() { - const { icon, fixed, className, leftPad } = this.props; - const iconClass = this.getIconClass(); - const title = this.getIconTitle(); - - const spanClassName = classnames( - 'icon', - iconClass, - { - 'icon-fixed-width': fixed, - 'icon--left-pad': leftPad, - }, - className - ); - - return ; - } -} diff --git a/src/renderer/component/inviteList/view.jsx b/src/renderer/component/inviteList/view.jsx index c339cfd1b..7874e9251 100644 --- a/src/renderer/component/inviteList/view.jsx +++ b/src/renderer/component/inviteList/view.jsx @@ -1,7 +1,8 @@ import React from 'react'; -import Icon from 'component/icon'; +import Icon from 'component/common/icon'; import RewardLink from 'component/rewardLink'; import rewards from 'rewards.js'; +import * as icons from 'constants/icons'; class InviteList extends React.PureComponent { render() { @@ -12,8 +13,8 @@ class InviteList extends React.PureComponent { } return ( -
-
+
+

{__('Invite History')}

@@ -21,7 +22,7 @@ class InviteList extends React.PureComponent { {__("You haven't invited anyone.")} )} {invitees.length > 0 && ( - +
@@ -35,14 +36,14 @@ class InviteList extends React.PureComponent {
{__('Invitee Email')}{invitee.email} {invitee.invite_accepted ? ( - + ) : ( {__('unused')} )} {invitee.invite_reward_claimed ? ( - + ) : invitee.invite_reward_claimable ? ( ) : ( diff --git a/src/renderer/component/inviteNew/view.jsx b/src/renderer/component/inviteNew/view.jsx index b7a76709f..6e174bb73 100644 --- a/src/renderer/component/inviteNew/view.jsx +++ b/src/renderer/component/inviteNew/view.jsx @@ -1,14 +1,19 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import { BusyMessage, CreditAmount } from 'component/common'; -import { Form, FormRow, Submit } from 'component/form.js'; +import BusyIndicator from 'component/common/busy-indicator'; +import CreditAmount from 'component/common/credit-amount'; +import { Form, FormRow, FormField, Submit } from 'component/common/form'; class FormInviteNew extends React.PureComponent { - constructor(props) { - super(props); + constructor() { + super(); this.state = { email: '', }; + + this.handleSubmit = this.handleSubmit.bind(this); } handleEmailChanged(event) { @@ -23,23 +28,27 @@ class FormInviteNew extends React.PureComponent { } render() { - const { errorMessage, isPending } = this.props; + const { errorMessage, isPending, rewardAmount } = this.props; + const label = `${__('Get')} ${rewardAmount} LBC`; return ( -
- { - this.handleEmailChanged(event); - }} - /> -
- + + + { + this.handleEmailChanged(event); + }} + /> + +
+
); @@ -58,10 +67,10 @@ class InviteNew extends React.PureComponent { } = this.props; return ( -
-
- -

{__('Invite a Friend')}

+
+
{__('Invite a Friend')}
+
+ {__("Or an enemy. Or your cousin Jerry, who you're kind of unsure about.")}
{/*
@@ -71,8 +80,12 @@ class InviteNew extends React.PureComponent {

{__("You have no invites.")}

}
*/}
-

{__("Or an enemy. Or your cousin Jerry, who you're kind of unsure about.")}

- +
); @@ -80,3 +93,4 @@ class InviteNew extends React.PureComponent { } export default InviteNew; +/* eslint-enable */ diff --git a/src/renderer/component/link/view.jsx b/src/renderer/component/link/view.jsx deleted file mode 100644 index 92451daff..000000000 --- a/src/renderer/component/link/view.jsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react'; -import Icon from 'component/icon'; - -const Link = props => { - const { - href, - title, - style, - label, - icon, - iconRight, - button, - disabled, - children, - navigate, - navigateParams, - doNavigate, - className, - span, - } = props; - - const combinedClassName = - (className || '') + - (!className && !button ? 'button-text' : '') + // Non-button links get the same look as text buttons - (button ? ` button-block button-${button} button-set-item` : '') + - (disabled ? ' disabled' : ''); - - const onClick = - !props.onClick && navigate - ? event => { - event.stopPropagation(); - doNavigate(navigate, navigateParams || {}); - } - : props.onClick; - - let content; - if (children) { - content = children; - } else { - content = ( - - {icon ? : null} - {label ? {label} : null} - {iconRight ? : null} - - ); - } - - const linkProps = { - className: combinedClassName, - href: href || 'javascript:;', - title, - onClick, - style, - }; - - return span ? {content} : {content}; -}; - -export default Link; diff --git a/src/renderer/component/linkTransaction/index.js b/src/renderer/component/linkTransaction/index.js deleted file mode 100644 index 4f4aa23b7..000000000 --- a/src/renderer/component/linkTransaction/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import LinkTransaction from './view'; - -export default connect(null, null)(LinkTransaction); diff --git a/src/renderer/component/linkTransaction/view.jsx b/src/renderer/component/linkTransaction/view.jsx deleted file mode 100644 index 44e81c321..000000000 --- a/src/renderer/component/linkTransaction/view.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import Link from 'component/link'; - -const LinkTransaction = props => { - const { id } = props; - const linkProps = Object.assign({}, props); - - linkProps.href = `https://explorer.lbry.io/#!/transaction/${id}`; - linkProps.label = id.substr(0, 7); - - return ; -}; - -export default LinkTransaction; diff --git a/src/renderer/component/load_screen.js b/src/renderer/component/load_screen.js deleted file mode 100644 index 5c990d37d..000000000 --- a/src/renderer/component/load_screen.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import lbry from '../lbry.js'; -import { BusyMessage, Icon } from './common.js'; -import Link from 'component/link'; - -class LoadScreen extends React.PureComponent { - static propTypes = { - message: PropTypes.string.isRequired, - details: PropTypes.string, - isWarning: PropTypes.bool, - }; - - constructor(props) { - super(props); - - this.state = { - message: null, - details: null, - isLagging: false, - }; - } - - static defaultProps = { - isWarning: false, - }; - - render() { - const imgSrc = lbry.imagePath('lbry-white-485x160.png'); - return ( -
- LBRY -
-

- {!this.props.isWarning ? ( - - ) : ( - - - {` ${this.props.message}`} - - )} -

- - {this.props.details} - -
-
- ); - } -} - -export default LoadScreen; diff --git a/src/renderer/component/menu.js b/src/renderer/component/menu.js deleted file mode 100644 index e070f8711..000000000 --- a/src/renderer/component/menu.js +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Icon from 'component/icon'; -import Link from 'component/link'; - -export class DropDownMenuItem extends React.PureComponent { - static propTypes = { - href: PropTypes.string, - label: PropTypes.string, - icon: PropTypes.string, - onClick: PropTypes.func, - }; - - static defaultProps = { - iconPosition: 'left', - }; - - render() { - const icon = this.props.icon ? : null; - - return ( - - {this.props.iconPosition == 'left' ? icon : null} - {this.props.label} - {this.props.iconPosition == 'left' ? null : icon} - - ); - } -} - -export class DropDownMenu extends React.PureComponent { - constructor(props) { - super(props); - - this._isWindowClickBound = false; - this._menuDiv = null; - - this.state = { - menuOpen: false, - }; - } - - componentWillUnmount() { - if (this._isWindowClickBound) { - window.removeEventListener('click', this.handleWindowClick, false); - } - } - - handleMenuIconClick(e) { - this.setState({ - menuOpen: !this.state.menuOpen, - }); - if (!this.state.menuOpen && !this._isWindowClickBound) { - this._isWindowClickBound = true; - window.addEventListener('click', this.handleWindowClick, false); - e.stopPropagation(); - } - return false; - } - - handleMenuClick(e) { - // Event bubbles up to the menu after a link is clicked - this.setState({ - menuOpen: false, - }); - } - - /* this will force "this" to always be the class, even when passed to an event listener */ - handleWindowClick = e => { - if (this.state.menuOpen && (!this._menuDiv || !this._menuDiv.contains(e.target))) { - this.setState({ - menuOpen: false, - }); - } - }; - - render() { - if (!this.state.menuOpen && this._isWindowClickBound) { - this._isWindowClickBound = false; - window.removeEventListener('click', this.handleWindowClick, false); - } - return ( -
- (this._menuButton = span)} - button="text" - icon="icon-ellipsis-v" - onClick={event => { - this.handleMenuIconClick(event); - }} - /> - {this.state.menuOpen ? ( -
(this._menuDiv = div)} - className="menu" - onClick={event => { - this.handleMenuClick(event); - }} - > - {this.props.children} -
- ) : null} -
- ); - } -} diff --git a/src/renderer/component/nsfwOverlay/view.jsx b/src/renderer/component/nsfwOverlay/view.jsx index c89fe6da9..3c38cdbf8 100644 --- a/src/renderer/component/nsfwOverlay/view.jsx +++ b/src/renderer/component/nsfwOverlay/view.jsx @@ -1,15 +1,11 @@ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; -const NsfwOverlay = props => ( +const NsfwOverlay = () => (

{__('This content is Not Safe For Work. To view adult content, please change your')}{' '} - props.navigateSettings()} - label={__('Settings')} - />. +

); diff --git a/src/renderer/component/page/index.js b/src/renderer/component/page/index.js new file mode 100644 index 000000000..0bf9f77fe --- /dev/null +++ b/src/renderer/component/page/index.js @@ -0,0 +1,31 @@ +import { connect } from 'react-redux'; +import { + selectPageTitle, + selectIsBackDisabled, + selectIsForwardDisabled, + selectNavLinks, +} from 'redux/selectors/navigation'; +import { doNavigate, doHistoryBack, doHistoryForward } from 'redux/actions/navigation'; +import { doDownloadUpgrade } from 'redux/actions/app'; +import { selectIsUpgradeAvailable } from 'redux/selectors/app'; +import { formatCredits } from 'util/formatCredits'; +import { selectBalance } from 'redux/selectors/wallet'; +import Page from './view'; + +const select = state => ({ + pageTitle: selectPageTitle(state), + navLinks: selectNavLinks(state), + isBackDisabled: selectIsBackDisabled(state), + isForwardDisabled: selectIsForwardDisabled(state), + isUpgradeAvailable: selectIsUpgradeAvailable(state), + balance: formatCredits(selectBalance(state) || 0, 2), +}); + +const perform = dispatch => ({ + navigate: path => dispatch(doNavigate(path)), + back: () => dispatch(doHistoryBack()), + forward: () => dispatch(doHistoryForward()), + downloadUpgrade: () => dispatch(doDownloadUpgrade()), +}); + +export default connect(select, perform)(Page); diff --git a/src/renderer/component/page/view.jsx b/src/renderer/component/page/view.jsx new file mode 100644 index 000000000..40ec8564b --- /dev/null +++ b/src/renderer/component/page/view.jsx @@ -0,0 +1,33 @@ +// @flow +import * as React from 'react'; +import classnames from 'classnames'; + +type Props = { + children: React.Node, + pageTitle: ?string, + noPadding: ?boolean, + extraPadding: ?boolean, + notContained: ?boolean, // No max-width, but keep the padding +}; + +const Page = (props: Props) => { + const { pageTitle, children, noPadding, extraPadding, notContained } = props; + return ( +
+ {pageTitle && ( +
+ {pageTitle &&

{pageTitle}

} +
+ )} + {children} +
+ ); +}; + +export default Page; diff --git a/src/renderer/component/publishForm/index.js b/src/renderer/component/publishForm/index.js index de3ba7663..3eb2a7bc4 100644 --- a/src/renderer/component/publishForm/index.js +++ b/src/renderer/component/publishForm/index.js @@ -1,10 +1,5 @@ import React from 'react'; import { connect } from 'react-redux'; import PublishForm from './view'; -import { selectBalance } from 'redux/selectors/wallet'; -const select = state => ({ - balance: selectBalance(state), -}); - -export default connect(select, null)(PublishForm); +export default connect(null, null)(PublishForm); diff --git a/src/renderer/component/publishForm/internal/bid-help-text.jsx b/src/renderer/component/publishForm/internal/bid-help-text.jsx new file mode 100644 index 000000000..8c99118d2 --- /dev/null +++ b/src/renderer/component/publishForm/internal/bid-help-text.jsx @@ -0,0 +1,61 @@ +// @flow +import * as React from 'react'; +import Button from 'component/button'; + +type Props = { + uri: ?string, + editingURI: ?string, + isResolvingUri: boolean, + winningBidForClaimUri: ?number, + claimIsMine: ?boolean, + onEditMyClaim: any => void, +}; + +class BidHelpText extends React.PureComponent { + render() { + const { + uri, + editingURI, + isResolvingUri, + winningBidForClaimUri, + claimIsMine, + onEditMyClaim, + } = this.props; + + if (!uri) { + return __('Create a URL for this content'); + } + + if (uri === editingURI) { + return __('You are currently editing this claim'); + } + + if (isResolvingUri) { + return __('Checking the winning claim amount...'); + } + + if (claimIsMine) { + return ( + + {__('You already have a claim at')} + {` ${uri} `} +
- {!this.state.hasFile && !this.myClaimExists() ? null : ( -
-
- { - this.handleMetadataChange(event); - }} - /> -
-
- { - this.handleMetadataChange(event); - }} - /> -
-
- { - this.handleDescriptionChanged(text); - }} - /> -
-
- { - this.handleMetadataChange(event); - }} - > - - - - - - - - -
-
- { - this.handleMetadataChange(event); - }} - > - {/* */} - - - -
-
- )} + )} + + {!!editingURI && ( +

+ {__("If you don't choose a file, the file from your existing claim")} + {` "${name}" `} + {__('will be used.')} +

+ )} +
+
+
+ + updatePublishForm({ title: e.target.value })} + /> + + + updatePublishForm({ thumbnail: e.target.value })} + /> + + + updatePublishForm({ description: text })} + /> +
-
-
-

{__('Price')}

-
{__('How much does this content cost?')}
-
+
+
{__('Price')}
+
{__('How much will this content cost?')}
- this.handleFeePrefChange(false)} - checked={!this.state.isFee} + name="content_free" + postfix={__('Free')} + checked={contentIsFree} + disabled={formDisabled} + onChange={() => updatePublishForm({ contentIsFree: true })} /> { - this.handleFeePrefChange(true); - }} - checked={this.state.isFee} + name="content_cost" + postfix={__('Choose price')} + checked={!contentIsFree} + disabled={formDisabled} + onChange={() => updatePublishForm({ contentIsFree: false })} /> - - this.handleFeeChange(val)} - /> - - {this.state.isFee && this.state.feeCurrency.toUpperCase() != 'LBC' ? ( -
+ + updatePublishForm({ price: newPrice })} + disabled={formDisabled || contentIsFree} + /> + {price.currency !== 'LBC' && ( +

{__( 'All content fees are charged in LBC. For non-LBC payment methods, the number of credits charged will be adjusted based on the value of LBRY credits at the time of purchase.' )} -

- ) : null} +

+ )}
-
-
-

{__('License')}

-
+ +
+
{__('Anonymous or under a channel?')}
+

+ {__('This is a username or handle that your content can be found under.')}{' '} + {__('Ex. @Marvel, @TheBeatles, @BooksByJoe')} +

+ +
+ +
+
{__('Where can people find this content?')}
+

+ {__( + 'The LBRY URL is the exact address where people find your content (ex. lbry://myvideo).' + )}{' '} +

- - - -
-
-

{__('Content URL')}

-
- {__( - 'This is the exact address where people find your content (ex. lbry://myvideo).' - )}{' '} - . -
-
-
- { - this.handleNameChange(event); - }} - helper={this.getNameBidHelpText()} +
+ this.handleBidChange(parseFloat(event.target.value))} + helper={__('This LBC remains yours and the deposit can be undone at any time.')} + placeholder={winningBidForClaimUri ? winningBidForClaimUri + 0.1 : 0.1} />
- {this.state.rawName ? ( -
- { - this.handleBidChange(event); - }} - value={this.state.bid} - placeholder={this.claim() ? this.topClaimValue() + 10 : 100} - helper={lbcInputHelp} - min="0" - /> -
- ) : ( - '' - )}
-
-
-

{__('Terms of Service')}

-
+
+ + updatePublishForm({ nsfw: event.target.checked })} + /> + + + + updatePublishForm({ language: event.target.value })} + > + + + + + + + + + + + + updatePublishForm({ + licenseType: newLicenseType, + licenseUrl: newLicenseUrl, + }) + } + handleLicenseDescriptionChange={event => + updatePublishForm({ + otherLicenseDescription: event.target.value, + }) + } + handleLicenseUrlChange={event => + updatePublishForm({ licenseUrl: event.target.value }) + } + handleCopyrightNoticeChange={event => + updatePublishForm({ copyrightNotice: event.target.value }) + } + /> +
+ +
+
{__('Terms of Service')}
- {__('I agree to the')}{' '} - } - type="checkbox" - checked={this.state.tosAgree} - onChange={event => { - this.handleTOSChange(event); - }} + onChange={event => updatePublishForm({ tosAccepted: event.target.checked })} />
-
- - +
+ +
- - - { - this.handlePublishStartedConfirmed(event); - }} - > -

- {__('Your file has been published to LBRY at the address')}{' '} - {this.state.uri}! -

-

- {__( - 'The file will take a few minutes to appear for other LBRY users. Until then it will be listed as "pending" under your published files.' - )} -

-
- { - this.closeModal(event); - }} - > - {__('The following error occurred when attempting to publish your file')}:{' '} - {this.state.errorMessage} - - + {!formDisabled && !formValid && this.renderFormErrors()} +
+ ); } } diff --git a/src/renderer/component/rewardLink/view.jsx b/src/renderer/component/rewardLink/view.jsx index f15bb9c99..edb43aefd 100644 --- a/src/renderer/component/rewardLink/view.jsx +++ b/src/renderer/component/rewardLink/view.jsx @@ -1,16 +1,16 @@ import React from 'react'; import Modal from 'modal/modal'; -import Link from 'component/link'; +import Button from 'component/button'; const RewardLink = props => { const { reward, button, claimReward, clearError, errorMessage, label, isPending } = props; - return ( + return !reward ? null : (
- { claimReward(reward); }} diff --git a/src/renderer/component/rewardListClaimed/view.jsx b/src/renderer/component/rewardListClaimed/view.jsx index 63f422fa1..75268f250 100644 --- a/src/renderer/component/rewardListClaimed/view.jsx +++ b/src/renderer/component/rewardListClaimed/view.jsx @@ -1,7 +1,20 @@ +// @flow import React from 'react'; -import LinkTransaction from 'component/linkTransaction'; +import ButtonTransaction from 'component/common/transaction-link'; -const RewardListClaimed = props => { +type Reward = { + id: string, + reward_title: string, + reward_amount: number, + transaction_id: string, + created_at: string, +}; + +type Props = { + rewards: Array, +}; + +const RewardListClaimed = (props: Props) => { const { rewards } = props; if (!rewards || !rewards.length) { @@ -9,34 +22,31 @@ const RewardListClaimed = props => { } return ( -
-
-

Claimed Rewards

-
-
- - - - - - - +
+
Claimed Rewards
+ +
{__('Title')}{__('Amount')}{__('Transaction')}{__('Date')}
+ + + + + + + + + + {rewards.map(reward => ( + + + + + - - - {rewards.map(reward => ( - - - - - - - ))} - -
{__('Title')}{__('Amount')}{__('Transaction')}{__('Date')}
{reward.reward_title}{reward.reward_amount} + + {reward.created_at.replace('Z', ' ').replace('T', ' ')}
{reward.reward_title}{reward.reward_amount} - - {reward.created_at.replace('Z', ' ').replace('T', ' ')}
-
+ ))} + +
); }; diff --git a/src/renderer/component/rewardSummary/view.jsx b/src/renderer/component/rewardSummary/view.jsx index 9fa611902..5436897d6 100644 --- a/src/renderer/component/rewardSummary/view.jsx +++ b/src/renderer/component/rewardSummary/view.jsx @@ -1,7 +1,7 @@ // @flow -import React from 'react'; -import Link from 'component/link'; -import { CreditAmount } from 'component/common'; +import * as React from 'react'; +import Button from 'component/button'; +import CreditAmount from 'component/common/credit-amount'; type Props = { unclaimedRewardAmount: number, @@ -9,29 +9,38 @@ type Props = { const RewardSummary = (props: Props) => { const { unclaimedRewardAmount } = props; + const hasRewards = unclaimedRewardAmount > 0; return ( -
-
-

{__('Rewards')}

-

- {__('Read our')} {__('FAQ')}{' '} - {__('to learn more about LBRY Rewards')}. -

-
-
- {unclaimedRewardAmount > 0 ? ( -

- {__('You have')} {' '} +

+
{__('Rewards')}
+

+ {hasRewards ? ( + + {__('You have')} +   + +   {__('in unclaimed rewards')}. -

+ ) : ( -

{__('There are no rewards available at this time, please check back later')}.

+ + {__('There are no rewards available at this time, please check back later')}. + )} -
+

- +
+

+ {__('Read our')}{' '} +

); }; diff --git a/src/renderer/component/rewardTile/view.jsx b/src/renderer/component/rewardTile/view.jsx index 6cbfcc4cd..b5a9d00a3 100644 --- a/src/renderer/component/rewardTile/view.jsx +++ b/src/renderer/component/rewardTile/view.jsx @@ -1,35 +1,43 @@ +// @flow import React from 'react'; -import { CreditAmount, Icon } from 'component/common'; +import Icon from 'component/common/icon'; import RewardLink from 'component/rewardLink'; -import Link from 'component/link'; +import Button from 'component/button'; import rewards from 'rewards'; +import * as icons from 'constants/icons'; -const RewardTile = props => { +type Props = { + reward: { + id: string, + reward_title: string, + reward_amount: number, + transaction_id: string, + created_at: string, + reward_description: string, + reward_type: string, + }, +}; + +const RewardTile = (props: Props) => { const { reward } = props; - const claimed = !!reward.transaction_id; return ( -
-
-
- -

{reward.reward_title}

-
-
{reward.reward_description}
-
- {reward.reward_type == rewards.TYPE_REFERRAL && ( - - )} - {reward.reward_type !== rewards.TYPE_REFERRAL && - (claimed ? ( - - {__('Reward claimed.')} - - ) : ( - - ))} -
+
+
{reward.reward_title}
+
{reward.reward_description}
+
+ {reward.reward_type === rewards.TYPE_REFERRAL && ( +
); diff --git a/src/renderer/component/router/view.jsx b/src/renderer/component/router/view.jsx index b65e830fe..4b1cf2acc 100644 --- a/src/renderer/component/router/view.jsx +++ b/src/renderer/component/router/view.jsx @@ -13,7 +13,6 @@ import FileListDownloaded from 'page/fileListDownloaded'; import FileListPublished from 'page/fileListPublished'; import TransactionHistoryPage from 'page/transactionHistory'; import ChannelPage from 'page/channel'; -import SearchPage from 'page/search'; import AuthPage from 'page/auth'; import InvitePage from 'page/invite'; import BackupPage from 'page/backup'; @@ -22,7 +21,7 @@ import SubscriptionsPage from 'page/subscriptions'; const route = (page, routesMap) => { const component = routesMap[page]; - return component; + return component || DiscoverPage; }; const Router = props => { @@ -42,7 +41,6 @@ const Router = props => { getcredits: , report: , rewards: , - search: , send: , settings: , show: , diff --git a/src/renderer/component/selectChannel/index.js b/src/renderer/component/selectChannel/index.js new file mode 100644 index 000000000..66d208875 --- /dev/null +++ b/src/renderer/component/selectChannel/index.js @@ -0,0 +1,18 @@ +import { connect } from 'react-redux'; +import SelectChannel from './view'; +import { selectMyChannelClaims, selectFetchingMyChannels } from 'redux/selectors/claims'; +import { doFetchChannelListMine, doCreateChannel } from 'redux/actions/content'; +import { selectBalance } from 'redux/selectors/wallet'; + +const select = state => ({ + channels: selectMyChannelClaims(state), + fetchingChannels: selectFetchingMyChannels(state), + balance: selectBalance(state), +}); + +const perform = dispatch => ({ + createChannel: (name, amount) => dispatch(doCreateChannel(name, amount)), + fetchChannelListMine: () => dispatch(doFetchChannelListMine()), +}); + +export default connect(select, perform)(SelectChannel); diff --git a/src/renderer/component/selectChannel/view.jsx b/src/renderer/component/selectChannel/view.jsx new file mode 100644 index 000000000..88182c49c --- /dev/null +++ b/src/renderer/component/selectChannel/view.jsx @@ -0,0 +1,220 @@ +// @flow +import React from 'react'; +import { isNameValid } from 'lbryURI'; +import { FormRow, FormField } from 'component/common/form'; +import BusyIndicator from 'component/common/busy-indicator'; +import Button from 'component/button'; +import { CHANNEL_NEW, CHANNEL_ANONYMOUS } from 'constants/claim'; + +type Props = { + channel: string, // currently selected channel + channels: Array<{ name: string }>, + balance: number, + onChannelChange: string => void, + createChannel: (string, number) => Promise, + fetchChannelListMine: () => void, + fetchingChannels: boolean, +}; + +type State = { + newChannelName: string, + newChannelBid: number, + addingChannel: boolean, + creatingChannel: boolean, + newChannelNameError: string, + newChannelBidError: string, + createChannelError: ?string, +}; + +class ChannelSection extends React.PureComponent { + constructor(props: Props) { + super(props); + + this.state = { + newChannelName: '', + newChannelBid: 0.1, + addingChannel: false, + creatingChannel: false, + newChannelNameError: '', + newChannelBidError: '', + createChannelError: undefined, + }; + + (this: any).handleChannelChange = this.handleChannelChange.bind(this); + (this: any).handleNewChannelNameChange = this.handleNewChannelNameChange.bind(this); + (this: any).handleNewChannelBidChange = this.handleNewChannelBidChange.bind(this); + (this: any).handleCreateChannelClick = this.handleCreateChannelClick.bind(this); + } + + componentDidMount() { + const { channels, fetchChannelListMine, fetchingChannels } = this.props; + if (!channels.length && !fetchingChannels) { + fetchChannelListMine(); + } + } + + handleChannelChange(event: SyntheticInputEvent<*>) { + const { onChannelChange } = this.props; + const channel = event.target.value; + + if (channel === CHANNEL_NEW) { + this.setState({ addingChannel: true }); + onChannelChange(channel); + } else { + this.setState({ addingChannel: false }); + onChannelChange(channel); + } + } + + handleNewChannelNameChange(event: SyntheticInputEvent<*>) { + let newChannelName = event.target.value; + + if (newChannelName.startsWith('@')) { + newChannelName = newChannelName.slice(1); + } + + let newChannelNameError; + if (newChannelName.length > 1 && !isNameValid(newChannelName.substr(1), false)) { + newChannelNameError = __('LBRY channel names must contain only letters, numbers and dashes.'); + } + + this.setState({ + newChannelNameError, + newChannelName, + }); + } + + handleNewChannelBidChange(event: SyntheticInputEvent<*>) { + const { balance } = this.props; + const newChannelBid = parseFloat(event.target.value); + let newChannelBidError; + if (newChannelBid === balance) { + newChannelBidError = __('Please decrease your bid to account for transaction fees'); + } else if (newChannelBid > balance) { + newChannelBidError = __('Not enough credits'); + } + + this.setState({ + newChannelBid, + newChannelBidError, + }); + } + + handleCreateChannelClick() { + const { balance, createChannel, onChannelChange } = this.props; + const { newChannelBid, newChannelName } = this.state; + + const channelName = `@${newChannelName}`; + + if (newChannelBid > balance) { + return; + } + + this.setState({ + creatingChannel: true, + createChannelError: undefined, + }); + + const success = () => { + this.setState({ + creatingChannel: false, + addingChannel: false, + }); + + onChannelChange(channelName); + }; + + const failure = () => { + this.setState({ + creatingChannel: false, + createChannelError: __('Unable to create channel due to an internal error.'), + }); + }; + + createChannel(channelName, newChannelBid).then(success, failure); + } + + render() { + const channel = this.state.addingChannel ? 'new' : this.props.channel; + const { fetchingChannels, channels = [] } = this.props; + const { + newChannelName, + newChannelNameError, + newChannelBid, + newChannelBidError, + creatingChannel, + createChannelError, + addingChannel, + } = this.state; + + return ( +
+ {createChannelError &&
{createChannelError}
} + {fetchingChannels ? ( + + ) : ( + + + {channels.map(({ name }) => ( + + ))} + + + )} + {addingChannel && ( +
+ + + + + + +
+
+
+ )} +
+ ); + } +} + +export default ChannelSection; diff --git a/src/renderer/component/shapeShift/internal/active-shift.jsx b/src/renderer/component/shapeShift/internal/active-shift.jsx index ae2e83348..bb4524bb7 100644 --- a/src/renderer/component/shapeShift/internal/active-shift.jsx +++ b/src/renderer/component/shapeShift/internal/active-shift.jsx @@ -1,9 +1,10 @@ // @flow import * as React from 'react'; -import QRCode from 'qrcode.react'; +import QRCode from 'component/common/qr-code'; +import { FormRow } from 'component/common/form'; import * as statuses from 'constants/shape_shift'; import Address from 'component/address'; -import Link from 'component/link'; +import Button from 'component/button'; import type { Dispatch } from 'redux/actions/shape_shift'; import ShiftMarketInfo from './market_info'; @@ -92,12 +93,12 @@ class ActiveShapeShift extends React.PureComponent { originCoinDepositMax={originCoinDepositMax} /> -
-
-
+ {shiftDepositAddress && ( + +
-
-
+ + )}
)} @@ -115,9 +116,9 @@ class ActiveShapeShift extends React.PureComponent {

{__('Transaction complete! You should see the new LBC in your wallet.')}

)} -
- +
+
+ +
+
    + {navLinks.primary.map(({ label, path, active, icon }) => ( +
  • +
  • + ))} +
+
+
    + {navLinks.secondary.map(({ label, path, active, icon, subLinks = [] }) => ( +
  • +
  • + ))} +
+ + )} + + ))} + +
+ + ); +}; + +export default SideBar; diff --git a/src/renderer/component/snackBar/view.jsx b/src/renderer/component/snackBar/view.jsx index 2205cab3d..38867c811 100644 --- a/src/renderer/component/snackBar/view.jsx +++ b/src/renderer/component/snackBar/view.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; class SnackBar extends React.PureComponent { constructor(props) { @@ -32,7 +32,7 @@ class SnackBar extends React.PureComponent { {message} {linkText && linkTarget && ( - +
); diff --git a/src/renderer/component/splash/index.js b/src/renderer/component/splash/index.js index d57d014aa..04cc84e15 100644 --- a/src/renderer/component/splash/index.js +++ b/src/renderer/component/splash/index.js @@ -1,6 +1,4 @@ -import React from 'react'; import { connect } from 'react-redux'; - import { selectCurrentModal, selectDaemonVersionMatched } from 'redux/selectors/app'; import { doCheckDaemonVersion } from 'redux/actions/app'; import SplashScreen from './view'; diff --git a/src/renderer/component/splash/internal/load-screen.jsx b/src/renderer/component/splash/internal/load-screen.jsx new file mode 100644 index 000000000..ee1d120e8 --- /dev/null +++ b/src/renderer/component/splash/internal/load-screen.jsx @@ -0,0 +1,38 @@ +// @flow +import * as React from 'react'; +import Icon from 'component/common/icon'; +import * as icons from 'constants/icons'; + +type Props = { + message: string, + details: ?string, + isWarning: boolean, +}; + +class LoadScreen extends React.PureComponent { + static defaultProps = { + isWarning: false, + }; + + render() { + const { details, message, isWarning } = this.props; + + return ( +
+

{__('LBRY')}

+ {isWarning ? ( + + + {` ${message}`} + + ) : ( +
{message}
+ )} + + {details &&
{details}
} +
+ ); + } +} + +export default LoadScreen; diff --git a/src/renderer/component/splash/view.jsx b/src/renderer/component/splash/view.jsx index 02bb7c237..89c5c82f4 100644 --- a/src/renderer/component/splash/view.jsx +++ b/src/renderer/component/splash/view.jsx @@ -1,19 +1,25 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import lbry from 'lbry.js'; -import LoadScreen from '../load_screen.js'; +import * as React from 'react'; +import lbry from 'lbry'; +import LoadScreen from './internal/load-screen'; import ModalIncompatibleDaemon from 'modal/modalIncompatibleDaemon'; import ModalUpgrade from 'modal/modalUpgrade'; import ModalDownloading from 'modal/modalDownloading'; import * as modals from 'constants/modal_types'; -export class SplashScreen extends React.PureComponent { - static propTypes = { - message: PropTypes.string, - onLoadDone: PropTypes.func, - }; +type Props = { + checkDaemonVersion: () => Promise, + modal: string, +}; - constructor(props) { +type State = { + details: string, + message: string, + isRunning: boolean, + isLagging: boolean, +}; + +export class SplashScreen extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { @@ -75,9 +81,11 @@ export class SplashScreen extends React.PureComponent { } componentDidMount() { + const { checkDaemonVersion } = this.props; + lbry .connect() - .then(this.props.checkDaemonVersion) + .then(checkDaemonVersion) .then(() => { this.updateStatus(); }) @@ -97,15 +105,19 @@ export class SplashScreen extends React.PureComponent { const { message, details, isLagging, isRunning } = this.state; return ( -
+ {/* Temp hack: don't show any modals on splash screen daemon is running; daemon doesn't let you quit during startup, so the "Quit" buttons in the modals won't work. */} - {modal == 'incompatibleDaemon' && isRunning && } - {modal == modals.UPGRADE && isRunning && } - {modal == modals.DOWNLOADING && isRunning && } -
+ {isRunning && ( + + {modal === modals.INCOMPATIBLE_DAEMON && } + {modal === modals.UPGRADE && } + {modal === modals.DOWNLOADING && } + + )} + ); } } diff --git a/src/renderer/component/subscribeButton/index.js b/src/renderer/component/subscribeButton/index.js index 6c93bbb65..933153af8 100644 --- a/src/renderer/component/subscribeButton/index.js +++ b/src/renderer/component/subscribeButton/index.js @@ -2,7 +2,6 @@ import { connect } from 'react-redux'; import { doChannelSubscribe, doChannelUnsubscribe } from 'redux/actions/subscriptions'; import { doOpenModal } from 'redux/actions/app'; import { selectSubscriptions } from 'redux/selectors/subscriptions'; - import SubscribeButton from './view'; const select = (state, props) => ({ diff --git a/src/renderer/component/subscribeButton/view.jsx b/src/renderer/component/subscribeButton/view.jsx index bb0d0c146..f362310c4 100644 --- a/src/renderer/component/subscribeButton/view.jsx +++ b/src/renderer/component/subscribeButton/view.jsx @@ -1,38 +1,54 @@ +// @flow import React from 'react'; -import Link from 'component/link'; import * as modals from 'constants/modal_types'; +import * as icons from 'constants/icons'; +import Button from 'component/button'; +import type { Subscription } from 'redux/reducers/subscriptions'; + +type SubscribtionArgs = { + channelName: string, + uri: string, +}; + +type Props = { + channelName: ?string, + uri: ?string, + subscriptions: Array, + doChannelSubscribe: ({ channelName: string, uri: string }) => void, + doChannelUnsubscribe: SubscribtionArgs => void, + doOpenModal: string => void, +}; + +export default (props: Props) => { + const { + channelName, + uri, + subscriptions, + doChannelSubscribe, + doChannelUnsubscribe, + doOpenModal, + } = props; -export default ({ - channelName, - uri, - subscriptions, - doChannelSubscribe, - doChannelUnsubscribe, - doOpenModal, -}) => { const isSubscribed = subscriptions.map(subscription => subscription.channelName).indexOf(channelName) !== -1; const subscriptionHandler = isSubscribed ? doChannelUnsubscribe : doChannelSubscribe; - const subscriptionLabel = isSubscribed ? __('Unsubscribe') : __('Subscribe'); return channelName && uri ? ( -
- { - if (!subscriptions.length) { - doOpenModal(modals.FIRST_SUBSCRIPTION); - } - subscriptionHandler({ - channelName, - uri, - }); - }} - /> -
+
+ )} + + + + + + + {date ? ( +
+ +
+ +
+
+ ) : ( + {__('Pending')} + )} + + + ); + } +} + +export default TransactionListItem; diff --git a/src/renderer/component/transactionList/view.jsx b/src/renderer/component/transactionList/view.jsx index 335e0d525..6f8521b88 100644 --- a/src/renderer/component/transactionList/view.jsx +++ b/src/renderer/component/transactionList/view.jsx @@ -1,63 +1,111 @@ -import React from 'react'; -import TransactionListItem from './internal/TransactionListItem'; -import FormField from 'component/formField'; -import Link from 'component/link'; -import FileExporter from 'component/file-exporter.js'; +// @flow +import * as React from 'react'; +import { FormField } from 'component/common/form'; +import Button from 'component/button'; +import FileExporter from 'component/common/file-exporter'; import * as icons from 'constants/icons'; import * as modals from 'constants/modal_types'; +import TransactionListItem from './internal/transaction-list-item'; -class TransactionList extends React.PureComponent { - constructor(props) { +export type Transaction = { + amount: number, + claim_id: string, + claim_name: string, + fee: number, + nout: number, + txid: string, + type: string, + date: Date, +}; + +type Props = { + emptyMessage: ?string, + slim?: boolean, + transactions: Array, + rewards: {}, + openModal: (string, any) => void, + myClaims: any, +}; + +type State = { + filter: string, +}; + +class TransactionList extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { - filter: null, + filter: 'all', }; + + (this: any).handleFilterChanged = this.handleFilterChanged.bind(this); + (this: any).filterTransaction = this.filterTransaction.bind(this); + (this: any).revokeClaim = this.revokeClaim.bind(this); + (this: any).isRevokeable = this.isRevokeable.bind(this); } - handleFilterChanged(event) { + handleFilterChanged(event: SyntheticInputEvent<*>) { this.setState({ filter: event.target.value, }); } - filterTransaction(transaction) { + filterTransaction(transaction: Transaction) { const { filter } = this.state; - return !filter || filter == transaction.type; + return filter === 'all' || filter === transaction.type; } - isRevokeable(txid, nout) { + isRevokeable(txid: string, nout: number) { + const { myClaims } = this.props; // a claim/support/update is revokable if it // is in my claim list(claim_list_mine) - return this.props.myClaims.has(`${txid}:${nout}`); + return myClaims.has(`${txid}:${nout}`); } - revokeClaim(txid, nout) { + revokeClaim(txid: string, nout: number) { this.props.openModal(modals.CONFIRM_CLAIM_REVOKE, { txid, nout }); } render() { - const { emptyMessage, rewards, transactions } = this.props; - - const transactionList = transactions.filter(this.filterTransaction.bind(this)); + const { emptyMessage, rewards, transactions, slim } = this.props; + const { filter } = this.state; + const transactionList = transactions.filter(this.filterTransaction); return ( -
- {Boolean(transactionList.length) && ( - + + {!transactionList.length && ( +

{emptyMessage || __('No transactions to list.')}

)} - {(transactionList.length || this.state.filter) && ( - - {__('Filter')}{' '} - - + {!slim && + !!transactionList.length && ( +
+ +
+ )} + {!slim && ( +
+ + } + > + @@ -65,22 +113,18 @@ class TransactionList extends React.PureComponent { - {' '} - - + +
)} - {!transactionList.length && ( -
{emptyMessage || __('No transactions to list.')}
- )} - {Boolean(transactionList.length) && ( - + {!!transactionList.length && ( +
- - + + @@ -90,13 +134,13 @@ class TransactionList extends React.PureComponent { transaction={t} reward={rewards && rewards[t.txid]} isRevokeable={this.isRevokeable(t.txid, t.nout)} - revokeClaim={this.revokeClaim.bind(this)} + revokeClaim={this.revokeClaim} /> ))}
{__('Date')}{__('Amount (Fee)')}{__('Amount')} {__('Type')} {__('Details')} {__('Transaction')}{__('Date')}
)} -
+ ); } } diff --git a/src/renderer/component/transactionListRecent/view.jsx b/src/renderer/component/transactionListRecent/view.jsx index 3bc5b0159..325bbc1cb 100644 --- a/src/renderer/component/transactionListRecent/view.jsx +++ b/src/renderer/component/transactionListRecent/view.jsx @@ -1,11 +1,20 @@ +// @flow import React from 'react'; -import { BusyMessage } from 'component/common'; -import Link from 'component/link'; +import BusyIndicator from 'component/common/busy-indicator'; +import Button from 'component/button'; import TransactionList from 'component/transactionList'; import * as icons from 'constants/icons'; +import type { Transaction } from 'component/transactionList/view'; -class TransactionListRecent extends React.PureComponent { - componentWillMount() { +type Props = { + fetchTransactions: () => void, + fetchingTransactions: boolean, + hasTransactions: boolean, + transactions: Array, +}; + +class TransactionListRecent extends React.PureComponent { + componentDidMount() { this.props.fetchTransactions(); } @@ -13,27 +22,27 @@ class TransactionListRecent extends React.PureComponent { const { fetchingTransactions, hasTransactions, transactions } = this.props; return ( -
-
-

{__('Recent Transactions')}

-
-
- {fetchingTransactions && } - {!fetchingTransactions && ( - - )} -
+
+
{__('Recent Transactions')}
+ {fetchingTransactions && ( +
+ +
+ )} + {!fetchingTransactions && ( + + )} {hasTransactions && ( -
- +
)} diff --git a/src/renderer/component/uriIndicator/view.jsx b/src/renderer/component/uriIndicator/view.jsx index 932ff7e5c..b4e3b3707 100644 --- a/src/renderer/component/uriIndicator/view.jsx +++ b/src/renderer/component/uriIndicator/view.jsx @@ -1,35 +1,46 @@ +// @flow import React from 'react'; -import Icon from 'component/icon'; -import Link from 'component/link'; +import Button from 'component/button'; import { buildURI } from 'lbryURI'; import classnames from 'classnames'; +// import Icon from 'component/common/icon'; -class UriIndicator extends React.PureComponent { +type Props = { + isResolvingUri: boolean, + resolveUri: string => void, + claim: { + channel_name: string, + has_signature: boolean, + signature_is_valid: boolean, + value: { + publisherSignature: { certificateId: string }, + }, + }, + uri: string, + link: ?boolean, +}; + +class UriIndicator extends React.PureComponent { componentWillMount() { this.resolve(this.props); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { this.resolve(nextProps); } - resolve(props) { + resolve = (props: Props) => { const { isResolvingUri, resolveUri, claim, uri } = props; if (!isResolvingUri && claim === undefined && uri) { resolveUri(uri); } - } + }; render() { - const { claim, link, uri, isResolvingUri, smallCard, span } = this.props; - - if (isResolvingUri && !claim) { - return Validating...; - } - + const { claim, link, isResolvingUri } = this.props; if (!claim) { - return Unused; + return {isResolvingUri ? 'Validating...' : 'Unused'}; } const { @@ -38,41 +49,28 @@ class UriIndicator extends React.PureComponent { signature_is_valid: signatureIsValid, value, } = claim; + const channelClaimId = value && value.publisherSignature && value.publisherSignature.certificateId; if (!hasSignature || !channelName) { - return Anonymous; + return Anonymous; } - let icon, channelLink, modifier; - + let channelLink; if (signatureIsValid) { - modifier = 'valid'; channelLink = link ? buildURI({ channelName, claimId: channelClaimId }, false) : false; - } else { - icon = 'icon-times-circle'; - modifier = 'invalid'; } const inner = ( {channelName} {' '} - {!signatureIsValid ? ( - - ) : ( - '' - )} ); @@ -81,14 +79,14 @@ class UriIndicator extends React.PureComponent { } return ( - {inner} - + ); } } diff --git a/src/renderer/component/userEmailNew/view.jsx b/src/renderer/component/userEmailNew/view.jsx index 661adb611..16760dc6d 100644 --- a/src/renderer/component/userEmailNew/view.jsx +++ b/src/renderer/component/userEmailNew/view.jsx @@ -1,5 +1,7 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import { Form, FormRow, Submit } from 'component/form.js'; +import { Form, FormRow, Submit } from 'component/common/form'; class UserEmailNew extends React.PureComponent { constructor(props) { @@ -53,3 +55,4 @@ class UserEmailNew extends React.PureComponent { } export default UserEmailNew; +/* eslint-enable */ diff --git a/src/renderer/component/userEmailVerify/view.jsx b/src/renderer/component/userEmailVerify/view.jsx index 3304730b9..5d6a367fa 100644 --- a/src/renderer/component/userEmailVerify/view.jsx +++ b/src/renderer/component/userEmailVerify/view.jsx @@ -1,6 +1,8 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import Link from 'component/link'; -import { Form, FormRow, Submit } from 'component/form.js'; +import Button from 'component/button'; +import { Form, FormField, Submit } from 'component/common/form'; class UserEmailVerify extends React.PureComponent { constructor(props) { @@ -29,24 +31,27 @@ class UserEmailVerify extends React.PureComponent { render() { const { cancelButton, errorMessage, email, isPending } = this.props; + // ( + // { + // this.handleCodeChanged(event); + // }} + // /> + // )} + // /> return (

Please enter the verification code emailed to {email}.

- { - this.handleCodeChanged(event); - }} - errorMessage={errorMessage} - /> {/* render help separately so it always shows */}

- {__('Email')} or join our{' '} - {' '} + {__('Email')}

@@ -60,3 +65,4 @@ class UserEmailVerify extends React.PureComponent { } export default UserEmailVerify; +/* eslint-enable */ diff --git a/src/renderer/component/userPhoneNew/view.jsx b/src/renderer/component/userPhoneNew/view.jsx index b9999c746..fefd640de 100644 --- a/src/renderer/component/userPhoneNew/view.jsx +++ b/src/renderer/component/userPhoneNew/view.jsx @@ -1,6 +1,7 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import { Form, FormRow, Submit } from 'component/form.js'; -import FormField from 'component/formField'; +import { Form, FormRow, FormField } from 'component/common/form'; const os = require('os').type(); const countryCodes = require('country-data') @@ -77,29 +78,36 @@ class UserPhoneNew extends React.PureComponent {

- - {countryCodes.map((country, index) => ( - - ))} - - ( + + )} + /> + { this.handleChanged(event); }} + render={() => ( + + )} />
-
- - {cancelButton} -
+ + {cancelButton}
); @@ -107,3 +115,4 @@ class UserPhoneNew extends React.PureComponent { } export default UserPhoneNew; +/* eslint-enable */ diff --git a/src/renderer/component/userPhoneVerify/view.jsx b/src/renderer/component/userPhoneVerify/view.jsx index 225fad5d1..7e038da06 100644 --- a/src/renderer/component/userPhoneVerify/view.jsx +++ b/src/renderer/component/userPhoneVerify/view.jsx @@ -1,6 +1,8 @@ +// I'll come back to this +/* eslint-disable */ import React from 'react'; -import Link from 'component/link'; -import { Form, FormRow, Submit } from 'component/form.js'; +import Button from 'component/button'; +import { Form, FormElement, Submit } from 'component/common/form'; class UserPhoneVerify extends React.PureComponent { constructor(props) { @@ -35,23 +37,27 @@ class UserPhoneVerify extends React.PureComponent { {__( `Please enter the verification code sent to +${countryCode}${phone}. Didn't receive it? ` )} - +
@@ -65,3 +71,4 @@ class UserPhoneVerify extends React.PureComponent { } export default UserPhoneVerify; +/* eslint-enable */ diff --git a/src/renderer/component/userVerify/view.jsx b/src/renderer/component/userVerify/view.jsx index bf7060e6a..4e730a986 100644 --- a/src/renderer/component/userVerify/view.jsx +++ b/src/renderer/component/userVerify/view.jsx @@ -1,7 +1,9 @@ +/* eslint-disable */ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import CardVerify from 'component/cardVerify'; import lbryio from 'lbryio.js'; +import * as icons from 'constants/icons'; class UserVerify extends React.PureComponent { constructor(props) { @@ -25,9 +27,9 @@ class UserVerify extends React.PureComponent { render() { const { errorMessage, isPending, navigate, verifyPhone, modal } = this.props; return ( -
-
-
+ +
+

{__('Final Human Proof')}

@@ -36,8 +38,8 @@ class UserVerify extends React.PureComponent {

-
-
+
+

{__('1) Proof via Credit')}

@@ -57,15 +59,15 @@ class UserVerify extends React.PureComponent {
{__('A $1 authorization may temporarily appear with your provider.')}{' '} -
-
-
+
+

{__('2) Proof via Phone')}

@@ -74,24 +76,24 @@ class UserVerify extends React.PureComponent { )}`}
- { verifyPhone(); }} button="alt" - icon="icon-phone" + icon={icons.PHONE} label={__('Submit Phone Number')} />
{__('Standard messaging rates apply. Having trouble?')}{' '} - +
-
+

{__('3) Proof via Chat')}

@@ -107,16 +109,16 @@ class UserVerify extends React.PureComponent {

-
-
-
+
+
{__('Or, Skip It Entirely')}
@@ -127,12 +129,13 @@ class UserVerify extends React.PureComponent {

- navigate('/discover')} button="alt" label={__('Skip Rewards')} /> +
-
+ ); } } export default UserVerify; +/* eslint-enable */ diff --git a/src/renderer/component/video/internal/loading-screen.jsx b/src/renderer/component/video/internal/loading-screen.jsx index 958619b79..ccada9d41 100644 --- a/src/renderer/component/video/internal/loading-screen.jsx +++ b/src/renderer/component/video/internal/loading-screen.jsx @@ -1,14 +1,27 @@ +// @flow import React from 'react'; import Spinner from 'component/common/spinner'; -const LoadingScreen = ({ status, spinner = true }) => ( -
-
- {spinner && } +type Props = { + spinner: boolean, + status: string, +}; -
{status}
-
-
-); +class LoadingScreen extends React.PureComponent { + static defaultProps = { + spinner: true, + }; + + render() { + const { status, spinner } = this.props; + return ( +
+ {spinner && } + + {status} +
+ ); + } +} export default LoadingScreen; diff --git a/src/renderer/component/video/internal/play-button.jsx b/src/renderer/component/video/internal/play-button.jsx index 35f15f636..74e16cf7a 100644 --- a/src/renderer/component/video/internal/play-button.jsx +++ b/src/renderer/component/video/internal/play-button.jsx @@ -1,21 +1,21 @@ +// @flow import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; -class VideoPlayButton extends React.PureComponent { - componentDidMount() { - this.keyDownListener = this.onKeyDown.bind(this); - document.addEventListener('keydown', this.keyDownListener); - } +type Props = { + play: string => void, + isLoading: boolean, + uri: string, + mediaType: string, + fileInfo: ?{}, +}; - componentWillUnmount() { - document.removeEventListener('keydown', this.keyDownListener); - } +class VideoPlayButton extends React.PureComponent { + watch: () => void; - onKeyDown(event) { - if (event.target.tagName.toLowerCase() !== 'input' && event.code === 'Space') { - event.preventDefault(); - this.watch(); - } + constructor() { + super(); + this.watch = this.watch.bind(this); } watch() { @@ -23,26 +23,19 @@ class VideoPlayButton extends React.PureComponent { } render() { - const { button, label, fileInfo, mediaType } = this.props; - - /* - title={ - isLoading ? "Video is Loading" : - !costInfo ? "Waiting on cost info..." : - fileInfo === undefined ? "Waiting on file info..." : "" - } - */ - - const icon = ['audio', 'video'].indexOf(mediaType) !== -1 ? 'icon-play' : 'icon-folder-o'; + const { fileInfo, mediaType, isLoading } = this.props; + const disabled = isLoading || fileInfo === undefined; + const doesPlayback = ['audio', 'video'].indexOf(mediaType) !== -1; + const icon = doesPlayback ? 'Play' : 'Folder'; + const label = doesPlayback ? 'Play' : 'View'; return ( - this.watch()} + onClick={this.watch} /> ); } diff --git a/src/renderer/component/video/internal/player.jsx b/src/renderer/component/video/internal/player.jsx index 8bbf2692f..547be16c4 100644 --- a/src/renderer/component/video/internal/player.jsx +++ b/src/renderer/component/video/internal/player.jsx @@ -1,6 +1,7 @@ -import { remote } from 'electron'; +/* eslint-disable */ import React from 'react'; -import { Thumbnail } from 'component/common'; +import { remote } from 'electron'; +import Thumbnail from 'component/common/thumbnail'; import player from 'render-media'; import fs from 'fs'; import LoadingScreen from './loading-screen'; @@ -20,6 +21,11 @@ class VideoPlayer extends React.PureComponent { this.togglePlayListener = this.togglePlay.bind(this); } + componentWillReceiveProps(nextProps) { + const el = this.refs.media.children[0]; + if (!this.props.paused && nextProps.paused && !el.paused) el.pause(); + } + componentDidMount() { const container = this.media; const { contentType, changeVolume, volume, position, claim } = this.props; @@ -161,10 +167,10 @@ class VideoPlayer extends React.PureComponent { const unplayableMessage = "Sorry, looks like we can't play this file."; return ( -
+ {['audio', 'application'].indexOf(mediaType) !== -1 && (!this.playableType() || hasMetadata) && - !unplayable && } + !unplayable && } {this.playableType() && !hasMetadata && !unplayable && } @@ -173,11 +179,11 @@ class VideoPlayer extends React.PureComponent { ref={container => { this.media = container; }} - className="media" /> -
+ ); } } export default VideoPlayer; +/* eslint-disable */ diff --git a/src/renderer/component/video/view.jsx b/src/renderer/component/video/view.jsx index 9a1afe7e4..965bedd03 100644 --- a/src/renderer/component/video/view.jsx +++ b/src/renderer/component/video/view.jsx @@ -1,23 +1,48 @@ +// @flow import React from 'react'; import lbry from 'lbry'; +import classnames from 'classnames'; import VideoPlayer from './internal/player'; import VideoPlayButton from './internal/play-button'; import LoadingScreen from './internal/loading-screen'; -import NsfwOverlay from 'component/nsfwOverlay'; -class Video extends React.PureComponent { - constructor(props) { - super(props); - this.state = { - showNsfwHelp: false, - }; - } +type Props = { + cancelPlay: () => void, + fileInfo: { + outpoint: string, + file_name: string, + written_bytes: number, + download_path: string, + completed: boolean, + }, + metadata: ?{ + nsfw: boolean, + thumbnail: string, + }, + isLoading: boolean, + isDownloading: boolean, + playingUri: ?string, + contentType: string, + changeVolume: number => void, + volume: number, + claim: {}, + uri: string, + doPlay: () => void, + doPause: () => void, + savePosition: (string, number) => void, + mediaPaused: boolean, + mediaPosition: ?number, + className: ?string, + obscureNsfw: boolean, + play: string => void, +}; +class Video extends React.PureComponent { componentWillUnmount() { this.props.cancelPlay(); } - isMediaSame(nextProps) { + isMediaSame(nextProps: Props) { return ( this.props.fileInfo && nextProps.fileInfo && @@ -25,22 +50,6 @@ class Video extends React.PureComponent { ); } - handleMouseOver() { - if (this.props.obscureNsfw && this.props.metadata && this.props.metadata.nsfw) { - this.setState({ - showNsfwHelp: true, - }); - } - } - - handleMouseOut() { - if (this.state.showNsfwHelp) { - this.setState({ - showNsfwHelp: false, - }); - } - } - render() { const { metadata, @@ -58,11 +67,14 @@ class Video extends React.PureComponent { savePosition, mediaPaused, mediaPosition, + className, + obscureNsfw, + play, } = this.props; const isPlaying = playingUri === uri; const isReadyToPlay = fileInfo && fileInfo.written_bytes > 0; - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; + const shouldObscureNsfw = obscureNsfw && metadata && metadata.nsfw; const mediaType = lbry.getMediaType(contentType, fileInfo && fileInfo.file_name); let loadStatusMessage = ''; @@ -77,51 +89,49 @@ class Video extends React.PureComponent { loadStatusMessage = __('Downloading stream... not long left now!'); } - const klasses = []; - klasses.push(obscureNsfw ? 'video--obscured ' : ''); - if (isLoading || isDownloading) klasses.push('video-embedded', 'video'); - if (mediaType === 'video') { - klasses.push('video-embedded', 'video'); - klasses.push(isPlaying ? 'video--active' : 'video--hidden'); - } else if (mediaType === 'application') { - klasses.push('video-embedded'); - } else if (!isPlaying) klasses.push('video-embedded'); - const poster = metadata.thumbnail; + const poster = metadata && metadata.thumbnail; return ( -
- {isPlaying && - (!isReadyToPlay ? ( - - ) : ( - - ))} - {!isPlaying && ( -
- +
+ {isPlaying && ( +
+ {!isReadyToPlay ? ( + + ) : ( + + )} +
+ )} + {!isPlaying && ( +
+
)} - {this.state.showNsfwHelp && }
); } diff --git a/src/renderer/component/walletAddress/view.jsx b/src/renderer/component/walletAddress/view.jsx index a062f0bb5..1955f5aaf 100644 --- a/src/renderer/component/walletAddress/view.jsx +++ b/src/renderer/component/walletAddress/view.jsx @@ -1,8 +1,17 @@ +// @flow import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import Address from 'component/address'; +import * as icons from 'constants/icons'; -class WalletAddress extends React.PureComponent { +type Props = { + checkAddressIsMine: string => void, + receiveAddress: string, + getNewAddress: () => void, + gettingNewAddress: boolean, +}; + +class WalletAddress extends React.PureComponent { componentWillMount() { this.props.checkAddressIsMine(this.props.receiveAddress); } @@ -11,21 +20,21 @@ class WalletAddress extends React.PureComponent { const { receiveAddress, getNewAddress, gettingNewAddress } = this.props; return ( -
-
-

{__('Receive Credits')}

-
+
+
{__('Receive Credits')}
+

+ {__('Use this wallet address to receive credits sent by another user (or yourself).')} +

+
-

- {__('Use this wallet address to receive credits sent by another user (or yourself).')} -

+
- diff --git a/src/renderer/component/walletBalance/view.jsx b/src/renderer/component/walletBalance/view.jsx index 9c1b1f6cc..112fc8f9f 100644 --- a/src/renderer/component/walletBalance/view.jsx +++ b/src/renderer/component/walletBalance/view.jsx @@ -1,33 +1,21 @@ +// @flow import React from 'react'; -import Link from 'component/link'; -import { CreditAmount } from 'component/common'; +import CreditAmount from 'component/common/credit-amount'; -const WalletBalance = props => { - const { balance, navigate } = props; - /* -
- navigate("/backup")} - label={__("Backup Your Wallet")} - /> -
- */ +type Props = { + balance: number, +}; + +const WalletBalance = (props: Props) => { + const { balance } = props; return ( -
-
-

{__('Balance')}

+
+
+
{__('Balance')}
+ {__('You currently have')}
- {(balance || balance === 0) && } -
-
- - + {(balance || balance === 0) && }
); diff --git a/src/renderer/component/walletSend/index.js b/src/renderer/component/walletSend/index.js index fa005c0c4..2643c5b57 100644 --- a/src/renderer/component/walletSend/index.js +++ b/src/renderer/component/walletSend/index.js @@ -1,28 +1,14 @@ -import React from 'react'; import { connect } from 'react-redux'; -import { - doSendDraftTransaction, - doSetDraftTransactionAmount, - doSetDraftTransactionAddress, -} from 'redux/actions/wallet'; -import { - selectDraftTransactionAmount, - selectDraftTransactionAddress, - selectDraftTransactionError, -} from 'redux/selectors/wallet'; - +import { doSendDraftTransaction } from 'redux/actions/wallet'; +import { selectBalance } from 'redux/selectors/wallet'; import WalletSend from './view'; -const select = state => ({ - address: selectDraftTransactionAddress(state), - amount: selectDraftTransactionAmount(state), - error: selectDraftTransactionError(state), +const perform = dispatch => ({ + sendToAddress: values => dispatch(doSendDraftTransaction(values)), }); -const perform = dispatch => ({ - sendToAddress: () => dispatch(doSendDraftTransaction()), - setAmount: event => dispatch(doSetDraftTransactionAmount(event.target.value)), - setAddress: event => dispatch(doSetDraftTransactionAddress(event.target.value)), +const select = state => ({ + balance: selectBalance(state), }); export default connect(select, perform)(WalletSend); diff --git a/src/renderer/component/walletSend/view.jsx b/src/renderer/component/walletSend/view.jsx index 7c51953b1..4a124527a 100644 --- a/src/renderer/component/walletSend/view.jsx +++ b/src/renderer/component/walletSend/view.jsx @@ -1,55 +1,93 @@ +// @flow import React from 'react'; -import { Form, FormRow, Submit } from 'component/form'; -import { regexAddress } from 'lbryURI'; +import Button from 'component/button'; +import { Form, FormRow, FormField } from 'component/common/form'; +import { Formik } from 'formik'; +import { validateSendTx } from 'util/form-validation'; -class WalletSend extends React.PureComponent { - handleSubmit() { - const { amount, address, sendToAddress } = this.props; - const validSubmit = parseFloat(amount) > 0.0 && address; +type DraftTransaction = { + address: string, + amount: number | string, // So we can use a placeholder in the input +}; - if (validSubmit) { - sendToAddress(); - } +type Props = { + sendToAddress: DraftTransaction => void, + balance: number, +}; + +class WalletSend extends React.PureComponent { + constructor() { + super(); + + (this: any).handleSubmit = this.handleSubmit.bind(this); + } + + handleSubmit(values: DraftTransaction) { + const { sendToAddress } = this.props; + sendToAddress(values); } render() { - const { closeModal, modal, setAmount, setAddress, amount, address, error } = this.props; + const { balance } = this.props; return ( -
-
-
-

{__('Send Credits')}

-
-
- -
-
- -
- 0.0) || !address} /> -
-
-
+
+
{__('Send Credits')}
+
+ ( +
+ + balance && __('Not enough')) + } + /> + + + +
+
+
+ )} + /> +
); } diff --git a/src/renderer/component/walletSendTip/view.jsx b/src/renderer/component/walletSendTip/view.jsx index d3e106c19..6433d0cc1 100644 --- a/src/renderer/component/walletSendTip/view.jsx +++ b/src/renderer/component/walletSendTip/view.jsx @@ -1,64 +1,89 @@ +// @flow import React from 'react'; -import Link from 'component/link'; -import { FormRow } from 'component/form'; +import Button from 'component/button'; +import { FormField } from 'component/common/form'; import UriIndicator from 'component/uriIndicator'; -class WalletSendTip extends React.PureComponent { - constructor(props) { +type Props = { + claim_id: string, + uri: string, + title: string, + errorMessage: string, + isPending: boolean, + sendSupport: (number, string, string) => void, + onCancel: () => void, + sendTipCallback?: () => void, +}; + +type State = { + amount: number, +}; + +class WalletSendTip extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { - amount: 0.0, + amount: 0, }; + + (this: any).handleSendButtonClicked = this.handleSendButtonClicked.bind(this); } handleSendButtonClicked() { - const { claim_id, uri } = this.props; - const amount = this.state.amount; - this.props.sendSupport(amount, claim_id, uri); + const { claim_id: claimId, uri, sendSupport, sendTipCallback } = this.props; + const { amount } = this.state; + + sendSupport(amount, claimId, uri); + + // ex: close modal + if (sendTipCallback) { + sendTipCallback(); + } } - handleSupportPriceChange(event) { + handleSupportPriceChange(event: SyntheticInputEvent<*>) { this.setState({ amount: Number(event.target.value), }); } render() { - const { errorMessage, isPending, title, uri } = this.props; + const { errorMessage, isPending, title, uri, onCancel } = this.props; return (
-
+

- {__('Support')} + {__('Send a tip to')}

- - {`${__('This will appear as a tip for "%s" located at %s.', title, uri)} `} - - - } placeholder="1.00" onChange={event => this.handleSupportPriceChange(event)} + helper={ + + {__(`This will appear as a tip for ${title} located at ${uri}.`)}{' '} +
diff --git a/src/renderer/component/wunderbar/index.js b/src/renderer/component/wunderbar/index.js index c446a885e..9491c46f3 100644 --- a/src/renderer/component/wunderbar/index.js +++ b/src/renderer/component/wunderbar/index.js @@ -1,19 +1,33 @@ -import React from 'react'; +import * as MODALS from 'constants/modal_types'; import { connect } from 'react-redux'; -import { normalizeURI } from 'lbryURI.js'; -import { selectWunderBarAddress, selectWunderBarIcon } from 'redux/selectors/search'; +import { normalizeURI } from 'lbryURI'; +import { selectState as selectSearch, selectWunderBarAddress } from 'redux/selectors/search'; +import { doUpdateSearchQuery } from 'redux/actions/search'; import { doNavigate } from 'redux/actions/navigation'; +import { doOpenModal } from 'redux/actions/app'; import Wunderbar from './view'; -const select = state => ({ - address: selectWunderBarAddress(state), - icon: selectWunderBarIcon(state), -}); +const select = state => { + const { isActive, searchQuery, ...searchState } = selectSearch(state); + const address = selectWunderBarAddress(state); + + // if we are on the file/channel page + // use the address in the history stack + const wunderbarValue = isActive ? searchQuery : searchQuery || address; + + return { + ...searchState, + wunderbarValue, + }; +}; const perform = dispatch => ({ - onSearch: query => dispatch(doNavigate('/search', { query })), - onSubmit: (query, extraParams) => - dispatch(doNavigate('/show', { uri: normalizeURI(query), ...extraParams })), + onSearch: query => { + dispatch(doUpdateSearchQuery(query)); + dispatch(doOpenModal(MODALS.SEARCH)); + }, + onSubmit: (uri, extraParams) => dispatch(doNavigate('/show', { uri, ...extraParams })), + updateSearchQuery: query => dispatch(doUpdateSearchQuery(query)), }); export default connect(select, perform)(Wunderbar); diff --git a/src/renderer/component/wunderbar/internal/autocomplete.jsx b/src/renderer/component/wunderbar/internal/autocomplete.jsx new file mode 100644 index 000000000..78b3216a9 --- /dev/null +++ b/src/renderer/component/wunderbar/internal/autocomplete.jsx @@ -0,0 +1,604 @@ +/* +This is taken from https://github.com/reactjs/react-autocomplete + +We aren't using that component because (for now) there is no way to autohightlight +the first item if it isn't an exact match from what is in the search bar. + +Our use case is: +value in search bar: "hello" +first suggestion: "lbry://hello" + +I changed the function maybeAutoCompleteText to check if the suggestion contains +the search query anywhere, instead of the suggestion starting with it + +https://github.com/reactjs/react-autocomplete/issues/239 +*/ +/* eslint-disable */ + +const React = require('react'); +const PropTypes = require('prop-types'); +const { findDOMNode } = require('react-dom'); +const scrollIntoView = require('dom-scroll-into-view'); + +const IMPERATIVE_API = [ + 'blur', + 'checkValidity', + 'click', + 'focus', + 'select', + 'setCustomValidity', + 'setSelectionRange', + 'setRangeText', +]; + +function getScrollOffset() { + return { + x: + window.pageXOffset !== undefined + ? window.pageXOffset + : (document.documentElement || document.body.parentNode || document.body).scrollLeft, + y: + window.pageYOffset !== undefined + ? window.pageYOffset + : (document.documentElement || document.body.parentNode || document.body).scrollTop, + }; +} + +export default class Autocomplete extends React.Component { + static propTypes = { + /** + * The items to display in the dropdown menu + */ + items: PropTypes.array.isRequired, + /** + * The value to display in the input field + */ + value: PropTypes.any, + /** + * Arguments: `event: Event, value: String` + * + * Invoked every time the user changes the input's value. + */ + onChange: PropTypes.func, + /** + * Arguments: `value: String, item: Any` + * + * Invoked when the user selects an item from the dropdown menu. + */ + onSelect: PropTypes.func, + /** + * Arguments: `item: Any, value: String` + * + * Invoked for each entry in `items` and its return value is used to + * determine whether or not it should be displayed in the dropdown menu. + * By default all items are always rendered. + */ + shouldItemRender: PropTypes.func, + /** + * Arguments: `itemA: Any, itemB: Any, value: String` + * + * The function which is used to sort `items` before display. + */ + sortItems: PropTypes.func, + /** + * Arguments: `item: Any` + * + * Used to read the display value from each entry in `items`. + */ + getItemValue: PropTypes.func.isRequired, + /** + * Arguments: `item: Any, isHighlighted: Boolean, styles: Object` + * + * Invoked for each entry in `items` that also passes `shouldItemRender` to + * generate the render tree for each item in the dropdown menu. `styles` is + * an optional set of styles that can be applied to improve the look/feel + * of the items in the dropdown menu. + */ + renderItem: PropTypes.func.isRequired, + /** + * Arguments: `items: Array, value: String, styles: Object` + * + * Invoked to generate the render tree for the dropdown menu. Ensure the + * returned tree includes every entry in `items` or else the highlight order + * and keyboard navigation logic will break. `styles` will contain + * { top, left, minWidth } which are the coordinates of the top-left corner + * and the width of the dropdown menu. + */ + renderMenu: PropTypes.func, + /** + * Styles that are applied to the dropdown menu in the default `renderMenu` + * implementation. If you override `renderMenu` and you want to use + * `menuStyle` you must manually apply them (`this.props.menuStyle`). + */ + menuStyle: PropTypes.object, + /** + * Arguments: `props: Object` + * + * Invoked to generate the input element. The `props` argument is the result + * of merging `props.inputProps` with a selection of props that are required + * both for functionality and accessibility. At the very least you need to + * apply `props.ref` and all `props.on` event handlers. Failing to do + * this will cause `Autocomplete` to behave unexpectedly. + */ + renderInput: PropTypes.func, + /** + * Props passed to `props.renderInput`. By default these props will be + * applied to the `` element rendered by `Autocomplete`, unless you + * have specified a custom value for `props.renderInput`. Any properties + * supported by `HTMLInputElement` can be specified, apart from the + * following which are set by `Autocomplete`: value, autoComplete, role, + * aria-autocomplete. `inputProps` is commonly used for (but not limited to) + * placeholder, event handlers (onFocus, onBlur, etc.), autoFocus, etc.. + */ + inputProps: PropTypes.object, + /** + * Props that are applied to the element which wraps the `` and + * dropdown menu elements rendered by `Autocomplete`. + */ + wrapperProps: PropTypes.object, + /** + * This is a shorthand for `wrapperProps={{ style: }}`. + * Note that `wrapperStyle` is applied before `wrapperProps`, so the latter + * will win if it contains a `style` entry. + */ + wrapperStyle: PropTypes.object, + /** + * Whether or not to automatically highlight the top match in the dropdown + * menu. + */ + autoHighlight: PropTypes.bool, + /** + * Whether or not to automatically select the highlighted item when the + * `` loses focus. + */ + selectOnBlur: PropTypes.bool, + /** + * Arguments: `isOpen: Boolean` + * + * Invoked every time the dropdown menu's visibility changes (i.e. every + * time it is displayed/hidden). + */ + onMenuVisibilityChange: PropTypes.func, + /** + * Used to override the internal logic which displays/hides the dropdown + * menu. This is useful if you want to force a certain state based on your + * UX/business logic. Use it together with `onMenuVisibilityChange` for + * fine-grained control over the dropdown menu dynamics. + */ + open: PropTypes.bool, + debug: PropTypes.bool, + }; + + static defaultProps = { + value: '', + wrapperProps: {}, + wrapperStyle: { + display: 'inline-block', + }, + inputProps: {}, + renderInput(props) { + return ; + }, + onChange() {}, + onSelect() {}, + renderMenu(items, value, style) { + return
; + }, + menuStyle: { + borderRadius: '3px', + boxShadow: '0 2px 12px rgba(0, 0, 0, 0.1)', + background: 'rgba(255, 255, 255, 0.9)', + padding: '2px 0', + fontSize: '90%', + position: 'fixed', + overflow: 'hidden', + maxHeight: '50%', // TODO: don't cheat, let it flow to the bottom, + }, + autoHighlight: true, + selectOnBlur: false, + onMenuVisibilityChange() {}, + }; + + constructor(props) { + super(props); + this.state = { + isOpen: false, + highlightedIndex: null, + }; + this._debugStates = []; + this.ensureHighlightedIndex = this.ensureHighlightedIndex.bind(this); + this.exposeAPI = this.exposeAPI.bind(this); + this.handleInputFocus = this.handleInputFocus.bind(this); + this.handleInputBlur = this.handleInputBlur.bind(this); + this.handleChange = this.handleChange.bind(this); + this.handleKeyDown = this.handleKeyDown.bind(this); + this.handleInputClick = this.handleInputClick.bind(this); + this.maybeAutoCompleteText = this.maybeAutoCompleteText.bind(this); + } + + componentWillMount() { + // this.refs is frozen, so we need to assign a new object to it + this.refs = {}; + this._ignoreBlur = false; + this._ignoreFocus = false; + this._scrollOffset = null; + this._scrollTimer = null; + } + + componentWillUnmount() { + clearTimeout(this._scrollTimer); + this._scrollTimer = null; + } + + componentWillReceiveProps(nextProps) { + if (this.state.highlightedIndex !== null) { + this.setState(this.ensureHighlightedIndex); + } + if ( + nextProps.autoHighlight && + (this.props.value !== nextProps.value || this.state.highlightedIndex === null) + ) { + this.setState(this.maybeAutoCompleteText); + } + } + + componentDidMount() { + if (this.isOpen()) { + this.setMenuPositions(); + } + } + + componentDidUpdate(prevProps, prevState) { + if ( + (this.state.isOpen && !prevState.isOpen) || + ('open' in this.props && this.props.open && !prevProps.open) + ) + this.setMenuPositions(); + + this.maybeScrollItemIntoView(); + if (prevState.isOpen !== this.state.isOpen) { + this.props.onMenuVisibilityChange(this.state.isOpen); + } + } + + exposeAPI(el) { + this.refs.input = el; + IMPERATIVE_API.forEach(ev => (this[ev] = el && el[ev] && el[ev].bind(el))); + } + + maybeScrollItemIntoView() { + if (this.isOpen() && this.state.highlightedIndex !== null) { + const itemNode = this.refs[`item-${this.state.highlightedIndex}`]; + const menuNode = this.refs.menu; + scrollIntoView(findDOMNode(itemNode), findDOMNode(menuNode), { + onlyScrollIfNeeded: true, + }); + } + } + + handleKeyDown(event) { + if (Autocomplete.keyDownHandlers[event.key]) + Autocomplete.keyDownHandlers[event.key].call(this, event); + else if (!this.isOpen()) { + this.setState({ + isOpen: true, + }); + } + } + + handleChange(event) { + this.props.onChange(event, event.target.value); + } + + static keyDownHandlers = { + ArrowDown(event) { + event.preventDefault(); + const itemsLength = this.getFilteredItems(this.props).length; + if (!itemsLength) return; + const { highlightedIndex } = this.state; + const index = + highlightedIndex === null || highlightedIndex === itemsLength - 1 + ? 0 + : highlightedIndex + 1; + this.setState({ + highlightedIndex: index, + isOpen: true, + }); + }, + + ArrowUp(event) { + event.preventDefault(); + const itemsLength = this.getFilteredItems(this.props).length; + if (!itemsLength) return; + const { highlightedIndex } = this.state; + const index = + highlightedIndex === 0 || highlightedIndex === null + ? itemsLength - 1 + : highlightedIndex - 1; + this.setState({ + highlightedIndex: index, + isOpen: true, + }); + }, + + Enter(event) { + // Key code 229 is used for selecting items from character selectors (Pinyin, Kana, etc) + if (event.keyCode !== 13) return; + + const inputValue = this.refs.input.value; + if (!inputValue) return; + + if (!this.isOpen() || this.state.highlightedIndex == null) { + // User pressed enter before any search suggestions were populated + this.setState({ isOpen: false }, () => { + this.props.onSelect(inputValue); + this.refs.input.blur(); + }); + } else { + // text entered + menu item has been highlighted + enter is hit -> update value to that of selected menu item, close the menu + event.preventDefault(); + const item = this.getFilteredItems(this.props)[this.state.highlightedIndex]; + const value = this.props.getItemValue(item); + this.setState( + { + isOpen: false, + highlightedIndex: null, + }, + () => { + this.props.onSelect(value, item); + this.refs.input.blur(); + } + ); + } + }, + + Escape() { + // In case the user is currently hovering over the menu + this.setIgnoreBlur(false); + this.setState({ + highlightedIndex: null, + isOpen: false, + }); + }, + + Tab() { + // In case the user is currently hovering over the menu + this.setIgnoreBlur(false); + }, + }; + + getFilteredItems(props) { + let items = props.items; + + if (props.shouldItemRender) { + items = items.filter(item => props.shouldItemRender(item, props.value)); + } + + if (props.sortItems) { + items.sort((a, b) => props.sortItems(a, b, props.value)); + } + + return items; + } + + maybeAutoCompleteText(state, props) { + const { highlightedIndex } = state; + const { value, getItemValue } = props; + const index = highlightedIndex === null ? 0 : highlightedIndex; + const matchedItem = this.getFilteredItems(props)[index]; + if (value !== '' && matchedItem) { + const itemValue = getItemValue(matchedItem); + const itemValueDoesMatch = + itemValue.toLowerCase().indexOf( + value.toLowerCase() + // below line is the the only thing that is changed from the real component + ) !== -1; + if (itemValueDoesMatch) { + return { highlightedIndex: index }; + } + } + return { highlightedIndex: null }; + } + + ensureHighlightedIndex(state, props) { + if (state.highlightedIndex >= this.getFilteredItems(props).length) { + return { highlightedIndex: null }; + } + } + + setMenuPositions() { + const node = this.refs.input; + const rect = node.getBoundingClientRect(); + const computedStyle = global.window.getComputedStyle(node); + const marginBottom = parseInt(computedStyle.marginBottom, 10) || 0; + const marginLeft = parseInt(computedStyle.marginLeft, 10) || 0; + const marginRight = parseInt(computedStyle.marginRight, 10) || 0; + this.setState({ + menuTop: rect.bottom + marginBottom, + menuLeft: rect.left + marginLeft, + menuWidth: rect.width + marginLeft + marginRight, + }); + } + + highlightItemFromMouse(index) { + this.setState({ highlightedIndex: index }); + } + + selectItemFromMouse(item) { + const value = this.props.getItemValue(item); + // The menu will de-render before a mouseLeave event + // happens. Clear the flag to release control over focus + this.setIgnoreBlur(false); + this.setState( + { + isOpen: false, + highlightedIndex: null, + }, + () => { + this.props.onSelect(value, item); + } + ); + } + + setIgnoreBlur(ignore) { + this._ignoreBlur = ignore; + } + + renderMenu() { + const items = this.getFilteredItems(this.props).map((item, index) => { + const element = this.props.renderItem(item, this.state.highlightedIndex === index, { + cursor: 'default', + }); + return React.cloneElement(element, { + onMouseEnter: () => this.highlightItemFromMouse(index), + onClick: () => this.selectItemFromMouse(item), + ref: e => (this.refs[`item-${index}`] = e), + }); + }); + const style = { + left: this.state.menuLeft, + top: this.state.menuTop, + minWidth: this.state.menuWidth, + }; + const menu = this.props.renderMenu(items, this.props.value, style); + return React.cloneElement(menu, { + ref: e => (this.refs.menu = e), + className: 'wunderbar__menu', + // Ignore blur to prevent menu from de-rendering before we can process click + onMouseEnter: () => this.setIgnoreBlur(true), + onMouseLeave: () => this.setIgnoreBlur(false), + }); + } + + handleInputBlur(event) { + if (this._ignoreBlur) { + this._ignoreFocus = true; + this._scrollOffset = getScrollOffset(); + this.refs.input.focus(); + return; + } + let setStateCallback; + const { highlightedIndex } = this.state; + if (this.props.selectOnBlur && highlightedIndex !== null) { + const items = this.getFilteredItems(this.props); + const item = items[highlightedIndex]; + const value = this.props.getItemValue(item); + setStateCallback = () => this.props.onSelect(value, item); + } + this.setState( + { + isOpen: false, + highlightedIndex: null, + }, + setStateCallback + ); + const { onBlur } = this.props.inputProps; + if (onBlur) { + onBlur(event); + } + } + + handleInputFocus(event) { + if (this._ignoreFocus) { + this._ignoreFocus = false; + const { x, y } = this._scrollOffset; + this._scrollOffset = null; + // Focus will cause the browser to scroll the into view. + // This can cause the mouse coords to change, which in turn + // could cause a new highlight to happen, cancelling the click + // event (when selecting with the mouse) + window.scrollTo(x, y); + // Some browsers wait until all focus event handlers have been + // processed before scrolling the into view, so let's + // scroll again on the next tick to ensure we're back to where + // the user was before focus was lost. We could do the deferred + // scroll only, but that causes a jarring split second jump in + // some browsers that scroll before the focus event handlers + // are triggered. + clearTimeout(this._scrollTimer); + this._scrollTimer = setTimeout(() => { + this._scrollTimer = null; + window.scrollTo(x, y); + }, 0); + return; + } + + // Highlight + this.refs.input.select(); + + this.setState({ isOpen: true }); + + const { onFocus } = this.props.inputProps; + if (onFocus) { + onFocus(event); + } + } + + isInputFocused() { + const el = this.refs.input; + return el.ownerDocument && el === el.ownerDocument.activeElement; + } + + handleInputClick() { + // Input will not be focused if it's disabled + if (this.isInputFocused() && !this.isOpen()) this.setState({ isOpen: true }); + } + + composeEventHandlers(internal, external) { + return external + ? e => { + internal(e); + external(e); + } + : internal; + } + + isOpen() { + return 'open' in this.props ? this.props.open : this.state.isOpen; + } + + render() { + if (this.props.debug) { + // you don't like it, you love it + this._debugStates.push({ + id: this._debugStates.length, + state: this.state, + }); + } + + const { inputProps, items } = this.props; + + const open = this.isOpen(); + return ( +
+ {this.props.renderInput({ + ...inputProps, + role: 'combobox', + 'aria-autocomplete': 'list', + 'aria-expanded': open, + autoComplete: 'off', + ref: this.exposeAPI, + onFocus: this.handleInputFocus, + onBlur: this.handleInputBlur, + onChange: this.handleChange, + onKeyDown: this.composeEventHandlers(this.handleKeyDown, inputProps.onKeyDown), + onClick: this.composeEventHandlers(this.handleInputClick, inputProps.onClick), + value: this.props.value, + })} + {open && !!items.length && this.renderMenu()} + {this.props.debug && ( +
+            {JSON.stringify(
+              this._debugStates.slice(
+                Math.max(0, this._debugStates.length - 5),
+                this._debugStates.length
+              ),
+              null,
+              2
+            )}
+          
+ )} +
+ ); + } +} diff --git a/src/renderer/component/wunderbar/view.jsx b/src/renderer/component/wunderbar/view.jsx index 29cbc7418..31b7fdee8 100644 --- a/src/renderer/component/wunderbar/view.jsx +++ b/src/renderer/component/wunderbar/view.jsx @@ -1,166 +1,124 @@ +// @flow import React from 'react'; -import PropTypes from 'prop-types'; -import { normalizeURI } from 'lbryURI'; -import Icon from 'component/icon'; +import classnames from 'classnames'; +import Icon from 'component/common/icon'; +import Autocomplete from './internal/autocomplete'; import { parseQueryParams } from 'util/query_params'; +import * as icons from 'constants/icons'; -class WunderBar extends React.PureComponent { - static TYPING_TIMEOUT = 800; +type Props = { + updateSearchQuery: string => void, + onSearch: string => void, + onSubmit: (string, {}) => void, + wunderbarValue: ?string, + suggestions: Array, +}; - static propTypes = { - onSearch: PropTypes.func.isRequired, - onSubmit: PropTypes.func.isRequired, +class WunderBar extends React.PureComponent { + constructor(props: Props) { + super(props); + + (this: any).handleSubmit = this.handleSubmit.bind(this); + (this: any).handleChange = this.handleChange.bind(this); + this.input = undefined; + } + + getSuggestionIcon = (type: string) => { + switch (type) { + case 'file': + return icons.COMPASS; + case 'channel': + return icons.AT_SIGN; + default: + return icons.SEARCH; + } }; - constructor(props) { - super(props); - this._userTypingTimer = null; - this._isSearchDispatchPending = false; - this._input = null; - this._stateBeforeSearch = null; - this._resetOnNextBlur = true; - this.onChange = this.onChange.bind(this); - this.onFocus = this.onFocus.bind(this); - this.onBlur = this.onBlur.bind(this); - this.onKeyPress = this.onKeyPress.bind(this); - this.onReceiveRef = this.onReceiveRef.bind(this); - this.state = { - address: this.props.address, - icon: this.props.icon, - }; + handleChange(e: SyntheticInputEvent<*>) { + const { updateSearchQuery } = this.props; + const { value } = e.target; + + updateSearchQuery(value); } - componentWillUnmount() { - if (this.userTypingTimer) { - clearTimeout(this._userTypingTimer); - } - } + handleSubmit(value: string, suggestion?: { value: string, type: string }) { + const { onSubmit, onSearch } = this.props; + const query = value.trim(); + const getParams = () => { + const parts = query.split('?'); - onChange(event) { - if (this._userTypingTimer) { - clearTimeout(this._userTypingTimer); - } - - this.setState({ address: event.target.value }); - - this._isSearchDispatchPending = true; - - const searchQuery = event.target.value; - - this._userTypingTimer = setTimeout(() => { - const hasQuery = searchQuery.length === 0; - this._resetOnNextBlur = hasQuery; - this._isSearchDispatchPending = false; - if (searchQuery) { - this.props.onSearch(searchQuery.trim()); + let extraParams = {}; + if (parts.length > 0) { + extraParams = parseQueryParams(parts.join('')); } - }, WunderBar.TYPING_TIMEOUT); // 800ms delay, tweak for faster/slower - } - componentWillReceiveProps(nextProps) { - if ( - nextProps.viewingPage !== this.props.viewingPage || - nextProps.address != this.props.address - ) { - this.setState({ address: nextProps.address, icon: nextProps.icon }); - } - } - - onFocus() { - this._stateBeforeSearch = this.state; - const newState = { - icon: 'icon-search', - isActive: true, + return extraParams; }; - this._focusPending = true; - // below is hacking, improved when we have proper routing - if (!this.state.address.startsWith('lbry://') && this.state.icon !== 'icon-search') { - // onFocus, if they are not on an exact URL or a search page, clear the bar - newState.address = ''; - } - this.setState(newState); - } - - onBlur() { - if (this._isSearchDispatchPending) { - setTimeout(() => { - this.onBlur(); - }, WunderBar.TYPING_TIMEOUT + 1); - } else { - const commonState = { isActive: false }; - if (this._resetOnNextBlur) { - this.setState(Object.assign({}, this._stateBeforeSearch, commonState)); - this._input.value = this.state.address; + // User selected a suggestion + if (suggestion) { + if (suggestion.type === 'search') { + onSearch(query); } else { - this._resetOnNextBlur = true; - this._stateBeforeSearch = this.state; - this.setState(commonState); + const params = getParams(); + const uri = normalizeURI(query); + onSubmit(uri, params); } + + return; + } + + // Currently no suggestion is highlighted. The user may have started + // typing, then lost focus and came back later on the same page + try { + const uri = normalizeURI(query); + const params = getParams(); + onSubmit(uri, params); + } catch (e) { + onSearch(query); } } - componentDidUpdate() { - if (this._input) { - const start = this._input.selectionStart, - end = this._input.selectionEnd; - - this._input.value = this.state.address; // this causes cursor to go to end of input - - this._input.setSelectionRange(start, end); - - if (this._focusPending) { - this._input.select(); - this._focusPending = false; - } - } - } - - onKeyPress(event) { - if (event.charCode == 13 && this._input.value) { - let uri = null, - method = 'onSubmit', - extraParams = {}; - - this._resetOnNextBlur = false; - clearTimeout(this._userTypingTimer); - - const parts = this._input.value.trim().split('?'); - const value = parts.shift(); - if (parts.length > 0) extraParams = parseQueryParams(parts.join('')); - - try { - uri = normalizeURI(value); - this.setState({ value: uri }); - } catch (error) { - // then it's not a valid URL, so let's search - uri = value; - method = 'onSearch'; - } - - this.props[method](uri, extraParams); - this._input.blur(); - } - } - - onReceiveRef(ref) { - this._input = ref; - } + input: ?HTMLInputElement; render() { + const { wunderbarValue, suggestions } = this.props; + return ( -
- {this.state.icon ? : ''} - + + item.value} + onChange={this.handleChange} + onSelect={this.handleSubmit} + renderInput={props => ( + + )} + renderItem={({ value, type, shorthand }, isHighlighted) => ( +
+ + {shorthand || value} + {(true || isHighlighted) && ( + + {'- '} + {type === 'search' ? 'Search' : value} + + )} +
+ )} />
); diff --git a/src/renderer/constants/action_types.js b/src/renderer/constants/action_types.js index 43594a8ce..1c718580c 100644 --- a/src/renderer/constants/action_types.js +++ b/src/renderer/constants/action_types.js @@ -39,8 +39,6 @@ export const FETCH_TRANSACTIONS_COMPLETED = 'FETCH_TRANSACTIONS_COMPLETED'; export const UPDATE_BALANCE = 'UPDATE_BALANCE'; export const CHECK_ADDRESS_IS_MINE_STARTED = 'CHECK_ADDRESS_IS_MINE_STARTED'; export const CHECK_ADDRESS_IS_MINE_COMPLETED = 'CHECK_ADDRESS_IS_MINE_COMPLETED'; -export const SET_DRAFT_TRANSACTION_AMOUNT = 'SET_DRAFT_TRANSACTION_AMOUNT'; -export const SET_DRAFT_TRANSACTION_ADDRESS = 'SET_DRAFT_TRANSACTION_ADDRESS'; export const SEND_TRANSACTION_STARTED = 'SEND_TRANSACTION_STARTED'; export const SEND_TRANSACTION_COMPLETED = 'SEND_TRANSACTION_COMPLETED'; export const SEND_TRANSACTION_FAILED = 'SEND_TRANSACTION_FAILED'; @@ -90,9 +88,11 @@ export const FETCH_AVAILABILITY_COMPLETED = 'FETCH_AVAILABILITY_COMPLETED'; export const FILE_DELETE = 'FILE_DELETE'; // Search -export const SEARCH_STARTED = 'SEARCH_STARTED'; -export const SEARCH_COMPLETED = 'SEARCH_COMPLETED'; -export const SEARCH_CANCELLED = 'SEARCH_CANCELLED'; +export const SEARCH_START = 'SEARCH_START'; +export const SEARCH_SUCCESS = 'SEARCH_SUCCESS'; +export const SEARCH_FAIL = 'SEARCH_FAIL'; +export const UPDATE_SEARCH_QUERY = 'UPDATE_SEARCH_QUERY'; +export const UPDATE_SEARCH_SUGGESTIONS = 'UPDATE_SEARCH_SUGGESTIONS'; // Settings export const DAEMON_SETTINGS_RECEIVED = 'DAEMON_SETTINGS_RECEIVED'; @@ -178,3 +178,13 @@ export const SET_VIDEO_PAUSE = 'SET_VIDEO_PAUSE'; export const MEDIA_PLAY = 'MEDIA_PLAY'; export const MEDIA_PAUSE = 'MEDIA_PAUSE'; export const MEDIA_POSITION = 'MEDIA_POSITION'; + +// Publishing +export const CLEAR_PUBLISH = 'CLEAR_PUBLISH'; +export const UPDATE_PUBLISH_FORM = 'UPDATE_PUBLISH_FORM'; +export const PUBLISH_START = 'PUBLISH_START'; +export const PUBLISH_SUCCESS = 'PUBLISH_SUCCESS'; +export const PUBLISH_FAIL = 'PUBLISH_FAIL'; +export const CLEAR_PUBLISH_ERROR = 'CLEAR_PUBLISH_ERROR'; +export const REMOVE_PENDING_PUBLISH = 'REMOVE_PENDING_PUBLISH'; +export const DO_PREPARE_EDIT = 'DO_PREPARE_EDIT'; diff --git a/src/renderer/constants/claim.js b/src/renderer/constants/claim.js new file mode 100644 index 000000000..3f5db67bf --- /dev/null +++ b/src/renderer/constants/claim.js @@ -0,0 +1,4 @@ +export const MINIMUM_PUBLISH_BID = 0.00000001; + +export const CHANNEL_ANONYMOUS = 'anonymous'; +export const CHANNEL_NEW = 'new'; diff --git a/src/renderer/constants/icons.js b/src/renderer/constants/icons.js index 87b9942ce..5b7b4a8a8 100644 --- a/src/renderer/constants/icons.js +++ b/src/renderer/constants/icons.js @@ -1,6 +1,25 @@ -export const FEATURED = 'rocket'; -export const LOCAL = 'folder'; -export const FILE = 'file'; -export const HISTORY = 'history'; -export const HELP_CIRCLE = 'question-circle'; -export const DOWNLOAD = 'download'; +export const FEATURED = 'Award'; +export const LOCAL = 'Folder'; +export const ALERT = 'AlertCircle'; +export const CLIPBOARD = 'Clipboard'; +export const ARROW_LEFT = 'ChevronLeft'; +export const ARROW_RIGHT = 'ChevronRight'; +export const DOWNLOAD = 'Download'; +export const UPLOAD = 'UploadCloud'; +export const CLOSE = 'X'; +export const EDIT = 'Edit3'; +export const TRASH = 'Trash'; +export const REPORT = 'Flag'; +export const OPEN = 'BookOpen'; +export const HELP = 'HelpCircle'; +export const MESSAGE = 'MessageCircle'; +export const SEND = 'Send'; +export const SEARCH = 'Search'; +export const COMPASS = 'Compass'; +export const AT_SIGN = 'AtSign'; +export const REFRESH = 'RefreshCw'; +export const CLOCK = 'Clock'; +export const HOME = 'Home'; +export const PHONE = 'Phone'; +export const CHECK = 'CheckCircle'; +export const HEART = 'Heart'; diff --git a/src/renderer/constants/licenses.js b/src/renderer/constants/licenses.js new file mode 100644 index 000000000..fbcc7e6a5 --- /dev/null +++ b/src/renderer/constants/licenses.js @@ -0,0 +1,31 @@ +export const CC_LICENSES = [ + { + value: 'Creative Commons Attribution 4.0 International', + url: 'https://creativecommons.org/licenses/by/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-ShareAlike 4.0 International', + url: 'https://creativecommons.org/licenses/by-sa/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NoDerivatives 4.0 International', + url: 'https://creativecommons.org/licenses/by-nd/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NonCommercial 4.0 International', + url: 'https://creativecommons.org/licenses/by-nc/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International', + url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode', + }, + { + value: 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International', + url: 'https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode', + }, +]; + +export const NONE = 'None'; +export const PUBLIC_DOMAIN = 'Public Domain'; +export const OTHER = 'other'; +export const COPYRIGHT = 'copyright'; diff --git a/src/renderer/constants/modal_types.js b/src/renderer/constants/modal_types.js index 0c2e03da1..3d3a725a2 100644 --- a/src/renderer/constants/modal_types.js +++ b/src/renderer/constants/modal_types.js @@ -1,5 +1,5 @@ -export const CONFIRM_FILE_REMOVE = 'confirmFileRemove'; -export const INCOMPATIBLE_DAEMON = 'incompatibleDaemon'; +export const CONFIRM_FILE_REMOVE = 'confirm_file_remove'; +export const INCOMPATIBLE_DAEMON = 'incompatible_daemon'; export const FILE_TIMEOUT = 'file_timeout'; export const DOWNLOADING = 'downloading'; export const AUTO_UPDATE_DOWNLOADED = 'auto_update_downloaded'; @@ -15,5 +15,8 @@ export const AUTHENTICATION_FAILURE = 'auth_failure'; export const TRANSACTION_FAILED = 'transaction_failed'; export const REWARD_APPROVAL_REQUIRED = 'reward_approval_required'; export const AFFIRM_PURCHASE = 'affirm_purchase'; -export const CONFIRM_CLAIM_REVOKE = 'confirmClaimRevoke'; +export const CONFIRM_CLAIM_REVOKE = 'confirm_claim_revoke'; export const FIRST_SUBSCRIPTION = 'firstSubscription'; +export const SEND_TIP = 'send_tip'; +export const PUBLISH = 'publish'; +export const SEARCH = 'search'; diff --git a/src/renderer/constants/search.js b/src/renderer/constants/search.js new file mode 100644 index 000000000..5bdbcd142 --- /dev/null +++ b/src/renderer/constants/search.js @@ -0,0 +1,3 @@ +export const FILE = 'file'; +export const CHANNEL = 'channel'; +export const SEARCH = 'search'; diff --git a/src/renderer/lbry.js b/src/renderer/lbry.js index 79855b4ce..c3fab9c7d 100644 --- a/src/renderer/lbry.js +++ b/src/renderer/lbry.js @@ -35,78 +35,6 @@ function setLocal(key, value) { localStorage.setItem(key, JSON.stringify(value)); } -/** - * Records a publish attempt in local storage. Returns a dictionary with all the data needed to - * needed to make a dummy claim or file info object. - */ -let pendingId = 0; -function savePendingPublish({ name, channelName }) { - pendingId += 1; - const pendingPublishes = getLocal('pendingPublishes') || []; - const newPendingPublish = { - name, - channelName, - claim_id: `pending-${pendingId}`, - txid: `pending-${pendingId}`, - nout: 0, - outpoint: `pending-${pendingId}:0`, - time: Date.now(), - }; - setLocal('pendingPublishes', [...pendingPublishes, newPendingPublish]); - return newPendingPublish; -} - -/** - * If there is a pending publish with the given name or outpoint, remove it. - * A channel name may also be provided along with name. - */ -function removePendingPublishIfNeeded({ name, channelName, outpoint }) { - function pubMatches(pub) { - return ( - pub.outpoint === outpoint || - (pub.name === name && (!channelName || pub.channel_name === channelName)) - ); - } - - setLocal('pendingPublishes', Lbry.getPendingPublishes().filter(pub => !pubMatches(pub))); -} - -/** - * Gets the current list of pending publish attempts. Filters out any that have timed out and - * removes them from the list. - */ -Lbry.getPendingPublishes = () => { - const pendingPublishes = getLocal('pendingPublishes') || []; - const newPendingPublishes = pendingPublishes.filter( - pub => Date.now() - pub.time <= Lbry.pendingPublishTimeout - ); - setLocal('pendingPublishes', newPendingPublishes); - return newPendingPublishes; -}; - -/** - * Gets a pending publish attempt by its name or (fake) outpoint. A channel name can also be - * provided along withe the name. If no pending publish is found, returns null. - */ -function getPendingPublish({ name, channelName, outpoint }) { - const pendingPublishes = Lbry.getPendingPublishes(); - return ( - pendingPublishes.find( - pub => - pub.outpoint === outpoint || - (pub.name === name && (!channelName || pub.channel_name === channelName)) - ) || null - ); -} - -function pendingPublishToDummyClaim({ channelName, name, outpoint, claimId, txid, nout }) { - return { name, outpoint, claimId, txid, nout, channelName }; -} - -function pendingPublishToDummyFileInfo({ name, outpoint, claimId }) { - return { name, outpoint, claimId, metadata: null }; -} - // core Lbry.connectPromise = null; Lbry.connect = () => { @@ -136,42 +64,6 @@ Lbry.connect = () => { return Lbry.connectPromise; }; -/** - * Publishes a file. The optional fileListedCallback is called when the file becomes available in - * lbry.file_list() during the publish process. - * - * This currently includes a work-around to cache the file in local storage so that the pending - * publish can appear in the UI immediately. - */ -Lbry.publishDeprecated = (params, fileListedCallback, publishedCallback, errorCallback) => { - // Give a short grace period in case publish() returns right away or (more likely) gives an error - const returnPendingTimeout = setTimeout( - () => { - const { name, channel_name: channelName } = params; - if (publishedCallback || fileListedCallback) { - savePendingPublish({ - name, - channelName, - }); - publishedCallback(true); - } - }, - 2000, - { once: true } - ); - - lbryProxy.publish(params).then( - result => { - if (returnPendingTimeout) clearTimeout(returnPendingTimeout); - publishedCallback(result); - }, - err => { - if (returnPendingTimeout) clearTimeout(returnPendingTimeout); - errorCallback(err); - } - ); -}; - Lbry.imagePath = file => `${staticResourcesPath}/img/${file}`; Lbry.getMediaType = (contentType, fileName) => { @@ -217,33 +109,11 @@ Lbry.file_list = (params = {}) => new Promise((resolve, reject) => { const { claim_name: claimName, channel_name: channelName, outpoint } = params; - /** - * If we're searching by outpoint, check first to see if there's a matching pending publish. - * Pending publishes use their own faux outpoints that are always unique, so we don't need - * to check if there's a real file. - */ - if (outpoint) { - const pendingPublish = getPendingPublish({ outpoint }); - if (pendingPublish) { - resolve([pendingPublishToDummyFileInfo(pendingPublish)]); - return; - } - } - apiCall( 'file_list', params, fileInfos => { - removePendingPublishIfNeeded({ name: claimName, channelName, outpoint }); - - // if a naked file_list call, append the pending file infos - if (!claimName && !channelName && !outpoint) { - const dummyFileInfos = Lbry.getPendingPublishes().map(pendingPublishToDummyFileInfo); - - resolve([...fileInfos, ...dummyFileInfos]); - } else { - resolve(fileInfos); - } + resolve(fileInfos); }, reject ); @@ -255,16 +125,7 @@ Lbry.claim_list_mine = (params = {}) => 'claim_list_mine', params, claims => { - claims.forEach(({ name, channel_name: channelName, txid, nout }) => { - removePendingPublishIfNeeded({ - name, - channelName, - outpoint: `${txid}:${nout}`, - }); - }); - - const dummyClaims = Lbry.getPendingPublishes().map(pendingPublishToDummyClaim); - resolve([...claims, ...dummyClaims]); + resolve(claims); }, reject ); diff --git a/src/renderer/modal/modal.js b/src/renderer/modal/modal.js deleted file mode 100644 index 2bae02a6d..000000000 --- a/src/renderer/modal/modal.js +++ /dev/null @@ -1,118 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import ReactModal from 'react-modal'; -import Link from 'component/link/index'; -import app from 'app'; - -export class Modal extends React.PureComponent { - static propTypes = { - type: PropTypes.oneOf(['alert', 'confirm', 'custom']), - overlay: PropTypes.bool, - onConfirmed: PropTypes.func, - onAborted: PropTypes.func, - confirmButtonLabel: PropTypes.string, - abortButtonLabel: PropTypes.string, - confirmButtonDisabled: PropTypes.bool, - abortButtonDisabled: PropTypes.bool, - }; - - static defaultProps = { - type: 'alert', - overlay: true, - confirmButtonLabel: app.i18n.__('OK'), - abortButtonLabel: app.i18n.__('Cancel'), - confirmButtonDisabled: false, - abortButtonDisabled: false, - }; - - render() { - return ( - -
{this.props.children}
- {this.props.type == 'custom' ? null : ( // custom modals define their own buttons -
- - {this.props.type == 'confirm' ? ( - - ) : null} -
- )} -
- ); - } -} - -export class ExpandableModal extends React.PureComponent { - static propTypes = { - expandButtonLabel: PropTypes.string, - extraContent: PropTypes.element, - }; - - static defaultProps = { - confirmButtonLabel: app.i18n.__('OK'), - expandButtonLabel: app.i18n.__('Show More...'), - hideButtonLabel: app.i18n.__('Show Less'), - }; - - constructor(props) { - super(props); - - this.state = { - expanded: false, - }; - } - - toggleExpanded() { - this.setState({ - expanded: !this.state.expanded, - }); - } - - render() { - return ( - - {this.props.children} - {this.state.expanded ? this.props.extraContent : null} -
- - { - this.toggleExpanded(); - }} - /> -
-
- ); - } -} - -export default Modal; diff --git a/src/renderer/modal/modal.jsx b/src/renderer/modal/modal.jsx new file mode 100644 index 000000000..eeed95ef0 --- /dev/null +++ b/src/renderer/modal/modal.jsx @@ -0,0 +1,146 @@ +// @flow +/* eslint-disable react/no-multi-comp */ +// These should probably just be combined into one modal component +import * as React from 'react'; +import ReactModal from 'react-modal'; +import Button from 'component/button'; +import app from 'app'; +import classnames from 'classnames'; + +type ModalProps = { + type: string, + overlay: boolean, + confirmButtonLabel: string, + abortButtonLabel: string, + confirmButtonDisabled: boolean, + abortButtonDisabled: boolean, + onConfirmed?: any => any, + onAborted?: any => any, + className?: string, + overlayClassName?: string, + children?: React.Node, + extraContent?: React.Node, + expandButtonLabel?: string, + hideButtonLabel?: string, + fullScreen: boolean, +}; + +export class Modal extends React.PureComponent { + static defaultProps = { + type: 'alert', + overlay: true, + /* eslint-disable no-underscore-dangle */ + confirmButtonLabel: app.i18n.__('OK'), + abortButtonLabel: app.i18n.__('Cancel'), + /* eslint-enable no-underscore-dangle */ + confirmButtonDisabled: false, + abortButtonDisabled: false, + fullScreen: false, + }; + + render() { + const { + children, + type, + confirmButtonLabel, + confirmButtonDisabled, + onConfirmed, + abortButtonLabel, + abortButtonDisabled, + onAborted, + fullScreen, + className, + overlayClassName, + ...modalProps + } = this.props; + return ( + +
{children}
+ {type === 'custom' ? null : ( // custom modals define their own buttons +
+
+ )} +
+ ); + } +} + +type State = { + expanded: boolean, +}; + +export class ExpandableModal extends React.PureComponent { + static defaultProps = { + /* eslint-disable no-underscore-dangle */ + confirmButtonLabel: app.i18n.__('OK'), + expandButtonLabel: app.i18n.__('Show More...'), + hideButtonLabel: app.i18n.__('Show Less'), + /* eslint-enable no-underscore-dangle */ + }; + + constructor(props: ModalProps) { + super(props); + + this.state = { + expanded: false, + }; + } + + toggleExpanded() { + this.setState({ + expanded: !this.state.expanded, + }); + } + + render() { + return ( + + {this.props.children} + {this.state.expanded ? this.props.extraContent : null} +
+
+
+ ); + } +} + +export default Modal; +/* eslint-enable react/no-multi-comp */ diff --git a/src/renderer/modal/modalAutoUpdateConfirm/view.jsx b/src/renderer/modal/modalAutoUpdateConfirm/view.jsx index f37d59a79..ac2e8d420 100644 --- a/src/renderer/modal/modalAutoUpdateConfirm/view.jsx +++ b/src/renderer/modal/modalAutoUpdateConfirm/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { Modal } from 'modal/modal'; import { Line } from 'rc-progress'; -import Link from 'component/link/index'; +import Button from 'component/button'; const { ipcRenderer } = require('electron'); @@ -11,7 +11,7 @@ class ModalAutoUpdateConfirm extends React.PureComponent { return ( {__('Your LBRY update is ready. Restart LBRY now to use it!')}

{__('Want to know what has changed?')} See the{' '} - . +

diff --git a/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx b/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx index c067c24ba..0627d7b51 100644 --- a/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx +++ b/src/renderer/modal/modalAutoUpdateDownloaded/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { Modal } from 'modal/modal'; import { Line } from 'rc-progress'; -import Link from 'component/link/index'; +import Button from 'component/button'; const { ipcRenderer } = require('electron'); @@ -11,7 +11,7 @@ class ModalAutoUpdateDownloaded extends React.PureComponent { return ( { const { closeModal, totalRewardValue, currentBalance, addBalance } = props; @@ -33,8 +36,8 @@ const ModalCreditIntro = props => {

- - +
diff --git a/src/renderer/modal/modalIncompatibleDaemon/view.jsx b/src/renderer/modal/modalIncompatibleDaemon/view.jsx index 3526ab4e9..7b056bcbe 100644 --- a/src/renderer/modal/modalIncompatibleDaemon/view.jsx +++ b/src/renderer/modal/modalIncompatibleDaemon/view.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { Modal } from 'modal/modal'; -import Link from 'component/link/index'; +import Button from 'component/button'; class ModalIncompatibleDaemon extends React.PureComponent { render() { @@ -19,7 +19,7 @@ class ModalIncompatibleDaemon extends React.PureComponent { {__( 'This browser is running with an incompatible version of the LBRY protocol and your install must be repaired. ' )} - +
diff --git a/src/renderer/page/auth/view.jsx b/src/renderer/page/auth/view.jsx index 6a7052343..b3379af54 100644 --- a/src/renderer/page/auth/view.jsx +++ b/src/renderer/page/auth/view.jsx @@ -1,9 +1,10 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import Link from 'component/link'; +import BusyIndicator from 'component/common/busy-indicator'; +import Button from 'component/button'; import UserEmailNew from 'component/userEmailNew'; import UserEmailVerify from 'component/userEmailVerify'; import UserVerify from 'component/userVerify'; +import Page from 'component/page'; export class AuthPage extends React.PureComponent { componentWillMount() { @@ -43,7 +44,7 @@ export class AuthPage extends React.PureComponent { const { email, isPending, isVerificationCandidate, user } = this.props; if (isPending) { - return [, true]; + return [, true]; } else if (user && !user.has_verified_email && !email) { return [, true]; } else if (user && !user.has_verified_email) { @@ -58,25 +59,27 @@ export class AuthPage extends React.PureComponent { const { email, user, isPending, navigate } = this.props; const [innerContent, useTemplate] = this.renderMain(); - return useTemplate ? ( -
-
-
-

{this.getTitle()}

-
-
{innerContent}
-
-
- {`${__( - 'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to earn LBRY rewards and may be used to sync usage data across devices.' - )} `} - navigate('/discover')} label={__('Return home')} />. + return ( + + {useTemplate ? ( +
+
+

{this.getTitle()}

-
-
-
- ) : ( - innerContent +
{innerContent}
+
+
+ {`${__( + 'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to earn LBRY rewards and may be used to sync usage data across devices.' + )} `} +
+
+
+ ) : ( + innerContent + )} + ); } } diff --git a/src/renderer/page/backup/view.jsx b/src/renderer/page/backup/view.jsx index bcb0a0667..3163c0d29 100644 --- a/src/renderer/page/backup/view.jsx +++ b/src/renderer/page/backup/view.jsx @@ -1,63 +1,72 @@ -import React from 'react'; -import SubHeader from 'component/subHeader'; -import Link from 'component/link'; +// @flow +import * as React from 'react'; +import Button from 'component/button'; +import Page from 'component/page'; -class BackupPage extends React.PureComponent { +type Props = { + daemonSettings: { + lbryum_wallet_dir: ?string, + }, +}; + +class BackupPage extends React.PureComponent { render() { const { daemonSettings } = this.props; + const { lbryum_wallet_dir } = daemonSettings; - if (!daemonSettings || Object.keys(daemonSettings).length === 0) { - return ( -
- - {__('Failed to load settings.')} -
- ); - } + const noDaemonSettings = Object.keys(daemonSettings).length === 0; return ( -
- -
-
-

{__('Backup Your LBRY Credits')}

-
-
-

- {__( - 'Your LBRY credits are controllable by you and only you, via wallet file(s) stored locally on your computer.' - )} -

-

- {__( - 'Currently, there is no automatic wallet backup. If you lose access to these files, you will lose your credits permanently.' - )} -

-

- {__( - 'However, it is fairly easy to back up manually. To backup your wallet, make a copy of the folder listed below:' - )} -

-

- {__(`${daemonSettings.lbryum_wallet_dir}`)} -

-

- + +

+ {noDaemonSettings ? ( +
{__('Failed to load settings.')}
+ ) : ( + +
{__('Backup Your LBRY Credits')}
+

{__( - 'Access to these files are equivalent to having access to your credits. Keep any copies you make of your wallet in a secure place.' + 'Your LBRY credits are controllable by you and only you, via wallet file(s) stored locally on your computer.' )} - -

-

- For more details on backing up and best practices,{' '} - . -

-
+

+
+

+ {__( + 'Currently, there is no automatic wallet backup. If you lose access to these files, you will lose your credits permanently.' + )} +

+
+
+

+ {__( + 'However, it is fairly easy to back up manually. To backup your wallet, make a copy of the folder listed below:' + )} +

+
+ {lbryum_wallet_dir} +
+
+
+

+ + {__( + 'Access to these files are equivalent to having access to your credits. Keep any copies you make of your wallet in a secure place.' + )} + +

+

+ For more details on backing up and best practices,{' '} +

+ + )}
-
+ ); } } diff --git a/src/renderer/page/channel/index.js b/src/renderer/page/channel/index.js index c06f42e49..38fabedfe 100644 --- a/src/renderer/page/channel/index.js +++ b/src/renderer/page/channel/index.js @@ -9,6 +9,7 @@ import { import { makeSelectCurrentParam, selectCurrentParams } from 'redux/selectors/navigation'; import { doNavigate } from 'redux/actions/navigation'; import { makeSelectTotalPagesForChannel } from 'redux/selectors/content'; +import { doOpenModal } from 'redux/actions/app'; import ChannelPage from './view'; const select = (state, props) => ({ @@ -24,6 +25,7 @@ const perform = dispatch => ({ fetchClaims: (uri, page) => dispatch(doFetchClaimsByChannel(uri, page)), fetchClaimCount: uri => dispatch(doFetchClaimCountByChannel(uri)), navigate: (path, params) => dispatch(doNavigate(path, params)), + openModal: (modal, props) => dispatch(doOpenModal(modal, props)), }); export default connect(select, perform)(ChannelPage); diff --git a/src/renderer/page/channel/view.jsx b/src/renderer/page/channel/view.jsx index 4614bb5c7..d0ba96394 100644 --- a/src/renderer/page/channel/view.jsx +++ b/src/renderer/page/channel/view.jsx @@ -1,12 +1,35 @@ +// @flow import React from 'react'; import { buildURI } from 'lbryURI'; -import { BusyMessage } from 'component/common'; +import BusyIndicator from 'component/common/busy-indicator'; import FileTile from 'component/fileTile'; import ReactPaginate from 'react-paginate'; -import Link from 'component/link'; +import Button from 'component/button'; import SubscribeButton from 'component/subscribeButton'; +import Page from 'component/page'; +import FileList from 'component/fileList'; +import * as modals from 'constants/modal_types'; -class ChannelPage extends React.PureComponent { +type Props = { + uri: string, + page: number, + totalPages: number, + fetching: boolean, + params: { page: number }, + claim: { + name: string, + claim_id: string, + }, + claimsInChannel: Array<{}>, + fetchClaims: (string, number) => void, + fetchClaimCount: string => void, + navigate: (string, {}) => void, + doChannelSubscribe: string => void, + doChannelUnsubscribe: string => void, + openModal: (string, {}) => void, +}; + +class ChannelPage extends React.PureComponent { componentDidMount() { const { uri, page, fetchClaims, fetchClaimCount } = this.props; @@ -14,7 +37,7 @@ class ChannelPage extends React.PureComponent { fetchClaimCount(uri); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { const { page, uri, fetching, fetchClaims, fetchClaimCount } = this.props; if (nextProps.page && page !== nextProps.page) { @@ -25,7 +48,7 @@ class ChannelPage extends React.PureComponent { } } - changePage(pageNumber) { + changePage(pageNumber: number) { const { params } = this.props; const newParams = Object.assign({}, params, { page: pageNumber }); @@ -33,62 +56,37 @@ class ChannelPage extends React.PureComponent { } render() { - const { - fetching, - claimsInChannel, - claim, - uri, - page, - totalPages, - doChannelSubscribe, - doChannelUnsubscribe, - subscriptions, - } = this.props; - + const { fetching, claimsInChannel, claim, uri, page, totalPages, openModal } = this.props; const { name, claim_id: claimId } = claim; const subscriptionUri = buildURI({ channelName: name, claimId }, false); let contentList; if (fetching) { - contentList = ; + contentList = ; } else { contentList = claimsInChannel && claimsInChannel.length ? ( - claimsInChannel.map(claim => ( - - )) + ) : ( {__('No content found.')} ); } return ( -
-
-
-
-

{uri}

-
+ +
+

{name}

+
+
-
-

- {__( - 'Channel pages are empty for all publishers currently, but will be coming in a future update.' - )} -

-
-

{__('Published Content')}

- {contentList} -
+
{contentList}
{(!fetching || (claimsInChannel && claimsInChannel.length)) && totalPages > 1 && ( )} -
+
); } } diff --git a/src/renderer/page/discover/view.jsx b/src/renderer/page/discover/view.jsx index 3280da858..abe0c0f56 100644 --- a/src/renderer/page/discover/view.jsx +++ b/src/renderer/page/discover/view.jsx @@ -1,259 +1,37 @@ +// @flow import React from 'react'; -import ReactDOM from 'react-dom'; -import { normalizeURI } from 'lbryURI'; -import FileCard from 'component/fileCard'; -import { BusyMessage } from 'component/common.js'; -import Icon from 'component/icon'; -import ToolTip from 'component/tooltip.js'; -import SubHeader from 'component/subHeader'; -import classnames from 'classnames'; -import Link from 'component/link'; +import Page from 'component/page'; +import CategoryList from 'component/common/category-list'; -// This should be in a separate file -export class FeaturedCategory extends React.PureComponent { - constructor() { - super(); +type Props = { + fetchFeaturedUris: () => void, + fetchingFeaturedUris: boolean, + featuredUris: {}, +}; - this.state = { - numItems: undefined, - canScrollPrevious: false, - canScrollNext: false, - }; - } - - componentWillMount() { - this.setState({ - numItems: this.props.names.length, - }); - } - - componentDidMount() { - const cardRow = ReactDOM.findDOMNode(this.refs.rowitems); - const cards = cardRow.getElementsByTagName('section'); - - // check if the last card is visible - const lastCard = cards[cards.length - 1]; - const isCompletelyVisible = this.isCardVisible(lastCard, cardRow, false); - - if (!isCompletelyVisible) { - this.setState({ - canScrollNext: true, - }); - } - } - - handleScrollPrevious() { - const cardRow = ReactDOM.findDOMNode(this.refs.rowitems); - if (cardRow.scrollLeft > 0) { - // check the visible cards - const cards = cardRow.getElementsByTagName('section'); - let firstVisibleCard = null; - let firstVisibleIdx = -1; - for (let i = 0; i < cards.length; i++) { - if (this.isCardVisible(cards[i], cardRow, false)) { - firstVisibleCard = cards[i]; - firstVisibleIdx = i; - break; - } - } - - const numDisplayed = this.numDisplayedCards(cardRow); - const scrollToIdx = firstVisibleIdx - numDisplayed; - const animationCallback = () => { - this.setState({ - canScrollPrevious: cardRow.scrollLeft !== 0, - canScrollNext: true, - }); - }; - this.scrollCardItemsLeftAnimated( - cardRow, - scrollToIdx < 0 ? 0 : cards[scrollToIdx].offsetLeft, - 100, - animationCallback - ); - } - } - - handleScrollNext() { - const cardRow = ReactDOM.findDOMNode(this.refs.rowitems); - - // check the visible cards - const cards = cardRow.getElementsByTagName('section'); - let lastVisibleCard = null; - let lastVisibleIdx = -1; - for (let i = 0; i < cards.length; i++) { - if (this.isCardVisible(cards[i], cardRow, true)) { - lastVisibleCard = cards[i]; - lastVisibleIdx = i; - } - } - - if (lastVisibleCard) { - const numDisplayed = this.numDisplayedCards(cardRow); - const animationCallback = () => { - // update last visible index after scroll - for (let i = 0; i < cards.length; i++) { - if (this.isCardVisible(cards[i], cardRow, true)) { - lastVisibleIdx = i; - } - } - - this.setState({ canScrollPrevious: true }); - if (lastVisibleIdx === cards.length - 1) { - this.setState({ canScrollNext: false }); - } - }; - - this.scrollCardItemsLeftAnimated( - cardRow, - Math.min(lastVisibleCard.offsetLeft, cardRow.scrollWidth - cardRow.clientWidth), - 100, - animationCallback - ); - } - } - - scrollCardItemsLeftAnimated(cardRow, target, duration, callback) { - if (!duration || duration <= diff) { - cardRow.scrollLeft = target; - if (callback) { - callback(); - } - return; - } - - const component = this; - const diff = target - cardRow.scrollLeft; - const tick = diff / duration * 10; - setTimeout(() => { - cardRow.scrollLeft += tick; - if (cardRow.scrollLeft === target) { - if (callback) { - callback(); - } - return; - } - component.scrollCardItemsLeftAnimated(cardRow, target, duration - 10, callback); - }, 10); - } - - isCardVisible(section, cardRow, partialVisibility) { - // check if a card is fully or partialy visible in its parent - const cardRowWidth = cardRow.offsetWidth; - const cardRowLeft = cardRow.scrollLeft; - const cardRowEnd = cardRowLeft + cardRow.offsetWidth; - const sectionLeft = section.offsetLeft - cardRowLeft; - const sectionEnd = sectionLeft + section.offsetWidth; - - return ( - (sectionLeft >= 0 && sectionEnd <= cardRowWidth) || - (((sectionLeft < 0 && sectionEnd > 0) || (sectionLeft > 0 && sectionLeft <= cardRowWidth)) && - partialVisibility) - ); - } - - numDisplayedCards(cardRow) { - const cards = cardRow.getElementsByTagName('section'); - const cardRowWidth = cardRow.offsetWidth; - // get the width of the first card and then calculate - const cardWidth = cards.length > 0 ? cards[0].offsetWidth : 0; - - if (cardWidth > 0) { - return Math.ceil(cardRowWidth / cardWidth); - } - - // return a default value of 1 card displayed if the card width couldn't be determined - return 1; - } - - render() { - const { category, names, categoryLink } = this.props; - - return ( -
-

- {categoryLink ? ( - - ) : ( - category - )} - - {category && - category.match(/^community/i) && ( - - )} -

-
- {this.state.canScrollPrevious && ( -
- - - -
- )} - {this.state.canScrollNext && ( -
- - - -
- )} -
- {names && - names.map(name => ( - - ))} -
-
-
- ); - } -} - -class DiscoverPage extends React.PureComponent { +class DiscoverPage extends React.PureComponent { componentWillMount() { this.props.fetchFeaturedUris(); } render() { const { featuredUris, fetchingFeaturedUris } = this.props; - const hasContent = typeof featuredUris === 'object' && Object.keys(featuredUris).length, - failedToLoad = !fetchingFeaturedUris && !hasContent; - + const hasContent = typeof featuredUris === 'object' && Object.keys(featuredUris).length; + const failedToLoad = !fetchingFeaturedUris && !hasContent; + // lbry://fortnite-top-stream-moments-nickatnydte#27395875d68e9d3e53be46edf36d622aa8284441 return ( -
- - {!hasContent && fetchingFeaturedUris && } + {hasContent && Object.keys(featuredUris).map( category => featuredUris[category].length ? ( - + ) : ( '' ) )} {failedToLoad &&
{__('Failed to load landing content.')}
} -
+ ); } } diff --git a/src/renderer/page/file/index.js b/src/renderer/page/file/index.js index f8e515222..08e25e314 100644 --- a/src/renderer/page/file/index.js +++ b/src/renderer/page/file/index.js @@ -2,19 +2,23 @@ import { connect } from 'react-redux'; import { doNavigate } from 'redux/actions/navigation'; import { doFetchFileInfo } from 'redux/actions/file_info'; import { makeSelectFileInfoForUri } from 'redux/selectors/file_info'; -import { selectRewardContentClaimIds } from 'redux/selectors/content'; +import { selectRewardContentClaimIds, selectPlayingUri } from 'redux/selectors/content'; import { doFetchCostInfoForUri } from 'redux/actions/cost_info'; import { doCheckSubscription } from 'redux/actions/subscriptions'; import { makeSelectClaimForUri, makeSelectContentTypeForUri, makeSelectMetadataForUri, + makeSelectClaimIsMine, } from 'redux/selectors/claims'; import { makeSelectCostInfoForUri } from 'redux/selectors/cost_info'; import { selectShowNsfw } from 'redux/selectors/settings'; +import { selectMediaPaused } from 'redux/selectors/media'; +import { doOpenModal } from 'redux/actions/app'; import FilePage from './view'; import { makeSelectCurrentParam } from 'redux/selectors/navigation'; import { selectSubscriptions } from 'redux/selectors/subscriptions'; +import { doPrepareEdit } from 'redux/actions/publish'; const select = (state, props) => ({ claim: makeSelectClaimForUri(props.uri)(state), @@ -22,10 +26,12 @@ const select = (state, props) => ({ costInfo: makeSelectCostInfoForUri(props.uri)(state), metadata: makeSelectMetadataForUri(props.uri)(state), obscureNsfw: !selectShowNsfw(state), - tab: makeSelectCurrentParam('tab')(state), fileInfo: makeSelectFileInfoForUri(props.uri)(state), rewardedContentClaimIds: selectRewardContentClaimIds(state, props), subscriptions: selectSubscriptions(state), + playingUri: selectPlayingUri(state), + isPaused: selectMediaPaused(state), + claimIsMine: makeSelectClaimIsMine(props.uri)(state), }); const perform = dispatch => ({ @@ -33,6 +39,8 @@ const perform = dispatch => ({ fetchFileInfo: uri => dispatch(doFetchFileInfo(uri)), fetchCostInfo: uri => dispatch(doFetchCostInfoForUri(uri)), checkSubscription: subscription => dispatch(doCheckSubscription(subscription)), + openModal: (modal, props) => dispatch(doOpenModal(modal, props)), + prepareEdit: publishData => dispatch(doPrepareEdit(publishData)), }); export default connect(select, perform)(FilePage); diff --git a/src/renderer/page/file/view.jsx b/src/renderer/page/file/view.jsx index c7c29c194..b017ea745 100644 --- a/src/renderer/page/file/view.jsx +++ b/src/renderer/page/file/view.jsx @@ -1,38 +1,74 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import lbry from 'lbry'; import { buildURI, normalizeURI } from 'lbryURI'; import Video from 'component/video'; -import { Thumbnail } from 'component/common'; +import Thumbnail from 'component/common/thumbnail'; import FilePrice from 'component/filePrice'; import FileDetails from 'component/fileDetails'; +import FileActions from 'component/fileActions'; import UriIndicator from 'component/uriIndicator'; -import Icon from 'component/icon'; +import Icon from 'component/common/icon'; import WalletSendTip from 'component/walletSendTip'; import DateTime from 'component/dateTime'; import * as icons from 'constants/icons'; -import Link from 'component/link'; +import Button from 'component/button'; import SubscribeButton from 'component/subscribeButton'; +import Page from 'component/page'; +import player from 'render-media'; +import * as modals from 'constants/modal_types'; -class FilePage extends React.PureComponent { +type Props = { + claim: { + claim_id: string, + height: number, + channel_name: string, + value: { + publisherSignature: ?{ + certificateId: ?string, + }, + }, + }, + fileInfo: {}, + metadata: { + title: string, + thumbnail: string, + nsfw: boolean, + }, + contentType: string, + uri: string, + rewardedContentClaimIds: Array, + obscureNsfw: boolean, + playingUri: ?string, + isPaused: boolean, + claimIsMine: boolean, + costInfo: ?{}, + navigate: (string, ?{}) => void, + openModal: (string, any) => void, + fetchFileInfo: string => void, + fetchCostInfo: string => void, + prepareEdit: ({}) => void, +}; + +class FilePage extends React.Component { componentDidMount() { - this.fetchFileInfo(this.props); - this.fetchCostInfo(this.props); + const { uri, fileInfo, fetchFileInfo, costInfo, fetchCostInfo } = this.props; + + if (fileInfo === undefined) { + fetchFileInfo(uri); + } + + if (costInfo === undefined) { + fetchCostInfo(uri); + } + this.checkSubscription(this.props); } - componentWillReceiveProps(nextProps) { - this.fetchFileInfo(nextProps); - } - - fetchFileInfo(props) { - if (props.fileInfo === undefined) { - props.fetchFileInfo(props.uri); - } - } - - fetchCostInfo(props) { - if (props.costInfo === undefined) { - props.fetchCostInfo(props.uri); + componentWillReceiveProps(nextProps: Props) { + const { fetchFileInfo, uri } = this.props; + if (nextProps.fileInfo === undefined) { + fetchFileInfo(uri); } } @@ -61,75 +97,99 @@ class FilePage extends React.PureComponent { fileInfo, metadata, contentType, - tab, uri, rewardedContentClaimIds, + obscureNsfw, + playingUri, + isPaused, + openModal, + claimIsMine, + prepareEdit, + navigate, } = this.props; - const showTipBox = tab == 'tip'; - - if (!claim || !metadata) { - return {__('Empty claim or metadata info.')}; - } - + // File info const title = metadata.title; const isRewardContent = rewardedContentClaimIds.includes(claim.claim_id); + const shouldObscureThumbnail = obscureNsfw && metadata.nsfw; + const thumbnail = metadata.thumbnail; + const { height, channel_name: channelName, value } = claim; const mediaType = lbry.getMediaType(contentType); - const player = require('render-media'); - const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; const isPlayable = Object.values(player.mime).indexOf(contentType) !== -1 || mediaType === 'audio'; - const { height, channel_name: channelName, value } = claim; const channelClaimId = value && value.publisherSignature && value.publisherSignature.certificateId; - let subscriptionUri; if (channelName && channelClaimId) { subscriptionUri = buildURI({ channelName, claimId: channelClaimId }, false); } + const isPlaying = playingUri === uri && !isPaused; return ( -
-
- {isPlayable ? ( -
-
- {(!tab || tab === 'details') && ( -
- {' '} -
- {!fileInfo || fileInfo.written_bytes <= 0 ? ( - - - {isRewardContent && ( - - {' '} - - - )} - - ) : null} -

{title}

-
- - - Published on - + + {!claim || !metadata ? ( +
+ {__('Empty claim or metadata info.')} +
+ ) : ( +
+ {isPlayable ? ( +
-
+
+ )} + ); } } diff --git a/src/renderer/page/fileListDownloaded/index.js b/src/renderer/page/fileListDownloaded/index.js index 8361a560f..9fc0fb685 100644 --- a/src/renderer/page/fileListDownloaded/index.js +++ b/src/renderer/page/fileListDownloaded/index.js @@ -1,29 +1,16 @@ -import React from 'react'; import { connect } from 'react-redux'; -import { doFetchFileInfosAndPublishedClaims } from 'redux/actions/file_info'; -import { - selectFileInfosDownloaded, - selectIsFetchingFileListDownloadedOrPublished, -} from 'redux/selectors/file_info'; -import { - selectMyClaimsWithoutChannels, - selectIsFetchingClaimListMine, -} from 'redux/selectors/claims'; -import { doFetchClaimListMine } from 'redux/actions/content'; +import { selectFileInfosDownloaded } from 'redux/selectors/file_info'; +import { selectMyClaimsWithoutChannels } from 'redux/selectors/claims'; import { doNavigate } from 'redux/actions/navigation'; import FileListDownloaded from './view'; const select = state => ({ fileInfos: selectFileInfosDownloaded(state), - isFetching: selectIsFetchingFileListDownloadedOrPublished(state), claims: selectMyClaimsWithoutChannels(state), - isFetchingClaims: selectIsFetchingClaimListMine(state), }); const perform = dispatch => ({ navigate: path => dispatch(doNavigate(path)), - fetchFileInfosDownloaded: () => dispatch(doFetchFileInfosAndPublishedClaims()), - fetchClaims: () => dispatch(doFetchClaimListMine()), }); export default connect(select, perform)(FileListDownloaded); diff --git a/src/renderer/page/fileListDownloaded/view.jsx b/src/renderer/page/fileListDownloaded/view.jsx index f6be896ef..f6b977468 100644 --- a/src/renderer/page/fileListDownloaded/view.jsx +++ b/src/renderer/page/fileListDownloaded/view.jsx @@ -1,41 +1,31 @@ import React from 'react'; -import Link from 'component/link'; +import Button from 'component/button'; import { FileTile } from 'component/fileTile'; -import { BusyMessage, Thumbnail } from 'component/common.js'; import FileList from 'component/fileList'; -import SubHeader from 'component/subHeader'; +import Page from 'component/page'; class FileListDownloaded extends React.PureComponent { - componentWillMount() { - if (!this.props.isFetchingClaims) this.props.fetchClaims(); - if (!this.props.isFetching) this.props.fetchFileInfosDownloaded(); - } - render() { - const { fileInfos, isFetching, navigate } = this.props; - - let content; - if (fileInfos && fileInfos.length > 0) { - content = ; - } else if (isFetching) { - content = ; - } else { - content = ( - - {__("You haven't downloaded anything from LBRY yet. Go")}{' '} - navigate('/discover')} - label={__('search for your first download')} - />! - - ); - } + const { fileInfos, navigate } = this.props; + const hasDownloads = fileInfos && fileInfos.length > 0; return ( -
- - {content} -
+ + {hasDownloads ? ( + + ) : ( +
+ {__("You haven't downloaded anything from LBRY yet.")} +
+
+
+ )} +
); } } diff --git a/src/renderer/page/fileListPublished/index.js b/src/renderer/page/fileListPublished/index.js index a6eb4be3b..a053baa3a 100644 --- a/src/renderer/page/fileListPublished/index.js +++ b/src/renderer/page/fileListPublished/index.js @@ -1,24 +1,18 @@ -import React from 'react'; -import rewards from 'rewards'; import { connect } from 'react-redux'; -import { doFetchClaimListMine } from 'redux/actions/content'; -import { - selectMyClaimsWithoutChannels, - selectIsFetchingClaimListMine, -} from 'redux/selectors/claims'; -import { doClaimRewardType } from 'redux/actions/rewards'; +import { selectMyClaimsWithoutChannels } from 'redux/selectors/claims'; +import { selectPendingPublishes } from 'redux/selectors/publish'; import { doNavigate } from 'redux/actions/navigation'; +import { doCheckPendingPublishes } from 'redux/actions/publish'; import FileListPublished from './view'; const select = state => ({ claims: selectMyClaimsWithoutChannels(state), - isFetching: selectIsFetchingClaimListMine(state), + pendingPublishes: selectPendingPublishes(state), }); const perform = dispatch => ({ navigate: path => dispatch(doNavigate(path)), - fetchClaims: () => dispatch(doFetchClaimListMine()), - claimFirstPublishReward: () => dispatch(doClaimRewardType(rewards.TYPE_FIRST_PUBLISH)), + checkIfPublishesConfirmed: publishes => dispatch(doCheckPendingPublishes(publishes)), }); export default connect(select, perform)(FileListPublished); diff --git a/src/renderer/page/fileListPublished/view.jsx b/src/renderer/page/fileListPublished/view.jsx index e7917f67d..24b0520d0 100644 --- a/src/renderer/page/fileListPublished/view.jsx +++ b/src/renderer/page/fileListPublished/view.jsx @@ -1,52 +1,37 @@ import React from 'react'; -import Link from 'component/link'; -import FileTile from 'component/fileTile'; -import { BusyMessage, Thumbnail } from 'component/common.js'; +import Button from 'component/button'; import FileList from 'component/fileList'; -import SubHeader from 'component/subHeader'; +import Page from 'component/page'; class FileListPublished extends React.PureComponent { - componentWillMount() { - if (!this.props.isFetching) this.props.fetchClaims(); - } - - componentDidUpdate() { - // if (this.props.claims.length > 0) this.props.fetchClaims(); + componentDidMount() { + const { pendingPublishes, checkIfPublishesConfirmed } = this.props; + if (pendingPublishes.length) { + checkIfPublishesConfirmed(pendingPublishes); + } } render() { - const { claims, isFetching, navigate } = this.props; - - let content; - - if (claims && claims.length > 0) { - content = ( - - ); - } else if (isFetching) { - content = ; - } else { - content = ( - - {__("It looks like you haven't published anything to LBRY yet. Go")}{' '} - navigate('/publish')} - label={__('share your beautiful cats with the world')} - />! - - ); - } + const { claims, pendingPublishes, navigate } = this.props; + const fileInfos = [...pendingPublishes, ...claims]; return ( -
- - {content} -
+ + {fileInfos.length ? ( + + ) : ( +
+ {__("It looks like you haven't published anything to LBRY yet.")} +
+
+
+ )} +
); } } diff --git a/src/renderer/page/getCredits/view.jsx b/src/renderer/page/getCredits/view.jsx index b8e670443..e08e77d6b 100644 --- a/src/renderer/page/getCredits/view.jsx +++ b/src/renderer/page/getCredits/view.jsx @@ -1,26 +1,22 @@ import React from 'react'; -import SubHeader from 'component/subHeader'; -import Link from 'component/link'; +import Button from 'component/button'; import RewardSummary from 'component/rewardSummary'; import ShapeShift from 'component/shapeShift'; +import Page from 'component/page'; +import * as icons from 'constants/icons'; const GetCreditsPage = props => ( -
- + -
-
-

{__('From External Wallet')}

-
+
+
{__('From External Wallet')}
- +
-
-
-

{__('More ways to get LBRY Credits')}

-
+
+
{__('More ways to get LBRY Credits')}

{ @@ -29,10 +25,10 @@ const GetCreditsPage = props => (

- +
-
+ ); export default GetCreditsPage; diff --git a/src/renderer/page/help/view.jsx b/src/renderer/page/help/view.jsx index bb22e6fe5..27cd7faec 100644 --- a/src/renderer/page/help/view.jsx +++ b/src/renderer/page/help/view.jsx @@ -1,10 +1,11 @@ // @TODO: Customize advice based on OS import React from 'react'; import lbry from 'lbry.js'; -import Link from 'component/link'; -import SubHeader from 'component/subHeader'; -import { BusyMessage } from 'component/common'; -import Icon from 'component/icon'; +import Button from 'component/button'; +import BusyIndicator from 'component/common/busy-indicator'; +import Icon from 'component/common/icon'; +import Page from 'component/page'; +import * as icons from 'constants/icons'; class HelpPage extends React.PureComponent { constructor(props) { @@ -17,9 +18,11 @@ class HelpPage extends React.PureComponent { upgradeAvailable: null, accessTokenHidden: true, }; + + this.showAccessToken = this.showAccessToken.bind(this); } - componentWillMount() { + componentDidMount() { lbry.getAppVersionInfo().then(({ remoteVersion, localVersion, upgradeAvailable }) => { this.setState({ uiVersion: localVersion, @@ -70,147 +73,127 @@ class HelpPage extends React.PureComponent { } return ( -
- -
-
-

{__('Read the FAQ')}

-
-
-

{__('Our FAQ answers many common questions.')}

-

- -

-
-
-
-
-

{__('Get Live Help')}

-
-
-

- {__('Live help is available most hours in the')} #help{' '} - {__('channel of our Discord chat room.')} -

-

- -

-
-
-
-
-

{__('Report a Bug')}

-
-
-

{__('Did you find something wrong?')}

-

- -

-
{__('Thanks! LBRY is made by its users.')}
+ +
+
{__('Read the FAQ')}
+

{__('Our FAQ answers many common questions.')}

+ +
+
-
-
-

{__('About')}

-
-
- {this.state.upgradeAvailable === null ? ( - '' - ) : this.state.upgradeAvailable ? ( -

- {__('A newer version of LBRY is available.')}{' '} - -

- ) : ( -

{__('Your copy of LBRY is up to date.')}

- )} - {this.state.uiVersion && ver ? ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{__('App')}{this.state.uiVersion}
{__('Daemon (lbrynet)')}{ver.lbrynet_version}
{__('Wallet (lbryum)')}{ver.lbryum_version}
{__('Connected Email')} - {user && user.primary_email ? ( - user.primary_email - ) : ( - - {__('none')} - ( doAuth()} label={__('set email')} />) - - )} -
{__('Reward Eligible')} - {user && user.is_reward_approved ? ( - - ) : ( - - )} -
{__('Platform')}{platform}
{__('Installation ID')}{this.state.lbryId}
{__('Access Token')} - {this.state.accessTokenHidden && ( - - )} - {!this.state.accessTokenHidden && - accessToken && ( -
-

{accessToken}

-
- {__('This is equivalent to a password. Do not post or share this.')} -
-
- )} -
- ) : ( - - )} +
+
{__('Get Live Help')}
+

+ {__('Live help is available most hours in the')} #help{' '} + {__('channel of our Discord chat room.')} +

+
+
-
+ +
+
{__('Report a Bug')}
+

{__('Did you find something wrong?')}

+ +
+
+
{__('Thanks! LBRY is made by its users.')}
+
+ +
+
{__('About')}
+ {this.state.upgradeAvailable !== null && this.state.upgradeAvailable ? ( +
+ {__('A newer version of LBRY is available.')}{' '} +
+ ) : ( +
{__('Your LBRY app is up to date.')}
+ )} + + {this.state.uiVersion && ver ? ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{__('App')}{this.state.uiVersion}
{__('Daemon (lbrynet)')}{ver.lbrynet_version}
{__('Wallet (lbryum)')}{ver.lbryum_version}
{__('Connected Email')} + {user && user.primary_email ? ( + user.primary_email + ) : ( + + {__('none')} + (
{__('Reward Eligible')}{user && user.is_reward_approved ? __('Yes') : __('No')}
{__('Platform')}{platform}
{__('Installation ID')}{this.state.lbryId}
{__('Access Token')} + {this.state.accessTokenHidden && ( +
+ ) : ( + + )} +
+ ); } } diff --git a/src/renderer/page/invite/view.jsx b/src/renderer/page/invite/view.jsx index 4199066a5..04aadbe46 100644 --- a/src/renderer/page/invite/view.jsx +++ b/src/renderer/page/invite/view.jsx @@ -1,8 +1,8 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import SubHeader from 'component/subHeader'; +import BusyIndicator from 'component/common/busy-indicator'; import InviteNew from 'component/inviteNew'; import InviteList from 'component/inviteList'; +import Page from 'component/page'; class InvitePage extends React.PureComponent { componentWillMount() { @@ -13,14 +13,18 @@ class InvitePage extends React.PureComponent { const { isPending, isFailed } = this.props; return ( -
- - {isPending && } + + {isPending && } {!isPending && isFailed && {__('Failed to retrieve invite status.')}} - {!isPending && !isFailed && } - {!isPending && !isFailed && } -
+ {!isPending && + !isFailed && ( + + + + + )} + ); } } diff --git a/src/renderer/page/publish/index.js b/src/renderer/page/publish/index.js index 01f579e5a..c73a3d492 100644 --- a/src/renderer/page/publish/index.js +++ b/src/renderer/page/publish/index.js @@ -1,43 +1,56 @@ import React from 'react'; import { connect } from 'react-redux'; -import { doNavigate, doHistoryBack } from 'redux/actions/navigation'; +import { doNavigate } from 'redux/actions/navigation'; import { doClaimRewardType } from 'redux/actions/rewards'; -import { - selectMyClaims, - selectFetchingMyChannels, - selectMyChannelClaims, - selectClaimsByUri, -} from 'redux/selectors/claims'; +import { selectMyClaims, selectClaimsByUri } from 'redux/selectors/claims'; import { selectResolvingUris } from 'redux/selectors/content'; -import { - doFetchClaimListMine, - doFetchChannelListMine, - doResolveUri, - doCreateChannel, - doPublish, -} from 'redux/actions/content'; +import { selectPublishFormValues } from 'redux/selectors/publish'; +import { doResolveUri } from 'redux/actions/content'; import { selectBalance } from 'redux/selectors/wallet'; -import rewards from 'rewards'; +import { doClearPublish, doUpdatePublishForm, doPublish } from 'redux/actions/publish'; +import { makeSelectCostInfoForUri } from 'redux/selectors/cost_info'; +import { doPrepareEdit } from 'redux/actions/publish'; import PublishPage from './view'; -const select = state => ({ - balance: selectBalance(state), - myClaims: selectMyClaims(state), - fetchingChannels: selectFetchingMyChannels(state), - channels: selectMyChannelClaims(state), - claimsByUri: selectClaimsByUri(state), - resolvingUris: selectResolvingUris(state), -}); +const select = (state, props) => { + const publishState = selectPublishFormValues(state); + const { uri, name } = publishState; + + const resolvingUris = selectResolvingUris(state); + let isResolvingUri = false; + if (uri) { + isResolvingUri = resolvingUris.includes(uri); + } + + const claimsByUri = selectClaimsByUri(state); + const myClaims = selectMyClaims(state); + + const claimForUri = claimsByUri[uri]; + let winningBidForClaimUri; + let myClaimForUri; + if (claimForUri) { + winningBidForClaimUri = claimForUri.effective_amount; + myClaimForUri = myClaims.find(claim => claim.name === name); + } + + return { + ...publishState, + isResolvingUri, + claimForUri, + winningBidForClaimUri, + myClaimForUri, + costInfo: makeSelectCostInfoForUri(props.uri)(state), + balance: selectBalance(state), + }; +}; const perform = dispatch => ({ - back: () => dispatch(doHistoryBack()), - navigate: path => dispatch(doNavigate(path)), - fetchClaimListMine: () => dispatch(doFetchClaimListMine()), - claimFirstChannelReward: () => dispatch(doClaimRewardType(rewards.TYPE_FIRST_CHANNEL)), - fetchChannelListMine: () => dispatch(doFetchChannelListMine()), + updatePublishForm: value => dispatch(doUpdatePublishForm(value)), + clearPublish: () => dispatch(doClearPublish()), resolveUri: uri => dispatch(doResolveUri(uri)), - createChannel: (name, amount) => dispatch(doCreateChannel(name, amount)), publish: params => dispatch(doPublish(params)), + navigate: path => dispatch(doNavigate(path)), + prepareEdit: claim => dispatch(doPrepareEdit(claim)), }); export default connect(select, perform)(PublishPage); diff --git a/src/renderer/page/publish/view.jsx b/src/renderer/page/publish/view.jsx index c0cc68aab..0745e9430 100644 --- a/src/renderer/page/publish/view.jsx +++ b/src/renderer/page/publish/view.jsx @@ -1,6 +1,23 @@ import React from 'react'; import PublishForm from 'component/publishForm'; +import Page from 'component/page'; -const PublishPage = props => ; +class PublishPage extends React.PureComponent { + scrollToTop = () => { + // #content wraps every + const mainContent = document.getElementById('content'); + if (mainContent) { + mainContent.scrollTop = 0; // It would be nice to animate this + } + }; + + render() { + return ( + + + + ); + } +} export default PublishPage; diff --git a/src/renderer/page/report.js b/src/renderer/page/report.js index 617ca6d3d..1c8eea4b2 100644 --- a/src/renderer/page/report.js +++ b/src/renderer/page/report.js @@ -1,6 +1,6 @@ import React from 'react'; -import Link from 'component/link'; -import { FormRow } from 'component/form'; +import Button from 'component/button'; +import { FormRow } from 'component/common/form'; import { doShowSnackBar } from 'redux/actions/app'; import lbry from '../lbry.js'; @@ -82,7 +82,7 @@ class ReportPage extends React.Component {

{__('Developer?')}

{__('You can also')}{' '} - . diff --git a/src/renderer/page/rewards/view.jsx b/src/renderer/page/rewards/view.jsx index 99375faee..a25b06ec4 100644 --- a/src/renderer/page/rewards/view.jsx +++ b/src/renderer/page/rewards/view.jsx @@ -1,9 +1,10 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; +import BusyIndicator from 'component/common/busy-indicator'; import RewardListClaimed from 'component/rewardListClaimed'; import RewardTile from 'component/rewardTile'; -import SubHeader from 'component/subHeader'; -import Link from 'component/link'; +import Button from 'component/button'; +import Page from 'component/page'; +import classnames from 'classnames'; class RewardsPage extends React.PureComponent { /* @@ -34,18 +35,16 @@ class RewardsPage extends React.PureComponent { if (user && !user.is_reward_approved && daemonSettings.share_usage_data) { if (!user.primary_email || !user.has_verified_email || !user.is_identity_verified) { return ( -
-
-

{__('Humans Only')}

-
-
+
+
{__('Humans Only')}
+

{__('Rewards are for human beings only.')}{' '} {__("You'll have to prove you're one of us before you can claim any rewards.")}

- +
); @@ -70,7 +69,7 @@ class RewardsPage extends React.PureComponent { )}`}

- navigate('/discover')} button="primary" label="Return Home" /> +

); @@ -87,7 +86,7 @@ class RewardsPage extends React.PureComponent { {__( 'Rewards are currently disabled for your account. Turn on diagnostic data sharing, in' )}{' '} - navigate('/settings')} label="Settings" /> +
@@ -95,12 +94,12 @@ class RewardsPage extends React.PureComponent { } else if (fetching) { return (
- +
); } else if (user === null) { return ( -
+

{__('This application is unable to earn rewards due to an authentication failure.')}

@@ -108,13 +107,20 @@ class RewardsPage extends React.PureComponent { ); } else if (!rewards || rewards.length <= 0) { return ( -
+
{__('There are no rewards available at this time, please check back later.')}
); } + + const isNotEligible = + !user.primary_email || !user.has_verified_email || !user.is_identity_verified; return ( -
+
{rewards.map(reward => )}
); @@ -122,12 +128,11 @@ class RewardsPage extends React.PureComponent { render() { return ( -
- + {this.renderPageHeader()} {this.renderUnclaimedRewards()} {} -
+ ); } } diff --git a/src/renderer/page/search/index.js b/src/renderer/page/search/index.js index 202844e07..7946f5378 100644 --- a/src/renderer/page/search/index.js +++ b/src/renderer/page/search/index.js @@ -1,16 +1,18 @@ import React from 'react'; import { connect } from 'react-redux'; -import { selectIsSearching, selectSearchQuery } from 'redux/selectors/search'; +import { selectIsSearching, selectSearchValue } from 'redux/selectors/search'; import { doNavigate } from 'redux/actions/navigation'; +import { doUpdateSearchQuery } from 'redux/actions/search'; import SearchPage from './view'; const select = state => ({ isSearching: selectIsSearching(state), - query: selectSearchQuery(state), + query: selectSearchValue(state), }); const perform = dispatch => ({ navigate: path => dispatch(doNavigate(path)), + updateSearchQuery: query => dispatch(doUpdateSearchQuery(query)), }); export default connect(select, perform)(SearchPage); diff --git a/src/renderer/page/search/view.jsx b/src/renderer/page/search/view.jsx index 4f9cae040..48273e7a4 100644 --- a/src/renderer/page/search/view.jsx +++ b/src/renderer/page/search/view.jsx @@ -1,43 +1,68 @@ -import React from 'react'; +// @flow +import * as React from 'react'; import { isURIValid, normalizeURI } from 'lbryURI'; import FileTile from 'component/fileTile'; import FileListSearch from 'component/fileListSearch'; -import { ToolTip } from 'component/tooltip.js'; +import ToolTip from 'component/common/tooltip'; +import Page from 'component/page'; + +const MODAL_ANIMATION_TIME = 250; + +type Props = { + query: ?string, + updateSearchQuery: string => void, +}; + +class SearchPage extends React.PureComponent { + constructor() { + super(); + + this.input = null; + } + + componentDidMount() { + // Wait for the modal to animate down before focusing + // without this there is an issue with scroll the page down + setTimeout(() => { + if (this.input) { + this.input.focus(); + } + }, MODAL_ANIMATION_TIME); + } + + input: ?HTMLInputElement; -class SearchPage extends React.PureComponent { render() { - const { query } = this.props; - + const { query, updateSearchQuery } = this.props; return ( -
- {isURIValid(query) ? ( -
-

- {__('Exact URL')}{' '} - -

- -
- ) : ( - '' - )} -
-

- {__('Search Results for')} {query}{' '} - -

+ +
+ (this.input = input)} + className="search__input" + value={query} + placeholder={__('Search for anything...')} + onChange={event => updateSearchQuery(event.target.value)} + /> + + {isURIValid(query) && ( + +
+ {__('Exact URL')} + +
+ +
+ )} -
-
+
+ ); } } + export default SearchPage; diff --git a/src/renderer/page/sendCredits/view.jsx b/src/renderer/page/sendCredits/view.jsx index 07df1fd6f..82b038068 100644 --- a/src/renderer/page/sendCredits/view.jsx +++ b/src/renderer/page/sendCredits/view.jsx @@ -1,14 +1,13 @@ import React from 'react'; -import SubHeader from 'component/subHeader'; import WalletSend from 'component/walletSend'; import WalletAddress from 'component/walletAddress'; +import Page from 'component/page'; const SendReceivePage = props => ( -
- + -
+ ); export default SendReceivePage; diff --git a/src/renderer/page/settings/index.js b/src/renderer/page/settings/index.js index ca277df82..e4f4ff930 100644 --- a/src/renderer/page/settings/index.js +++ b/src/renderer/page/settings/index.js @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import * as settings from 'constants/settings'; import { doClearCache } from 'redux/actions/app'; @@ -6,7 +5,6 @@ import { doSetDaemonSetting, doSetClientSetting, doGetThemes, - doSetTheme, doChangeLanguage, } from 'redux/actions/settings'; import { @@ -23,8 +21,7 @@ const select = state => ({ showUnavailable: makeSelectClientSetting(settings.SHOW_UNAVAILABLE)(state), instantPurchaseEnabled: makeSelectClientSetting(settings.INSTANT_PURCHASE_ENABLED)(state), instantPurchaseMax: makeSelectClientSetting(settings.INSTANT_PURCHASE_MAX)(state), - showUnavailable: makeSelectClientSetting(settings.SHOW_UNAVAILABLE)(state), - theme: makeSelectClientSetting(settings.THEME)(state), + currentTheme: makeSelectClientSetting(settings.THEME)(state), themes: makeSelectClientSetting(settings.THEMES)(state), language: selectCurrentLanguage(state), languages: selectLanguages(state), diff --git a/src/renderer/page/settings/view.jsx b/src/renderer/page/settings/view.jsx index f83fc9bc9..bde2f935e 100644 --- a/src/renderer/page/settings/view.jsx +++ b/src/renderer/page/settings/view.jsx @@ -1,21 +1,118 @@ -import React from 'react'; -import FormField from 'component/formField'; -import { FormRow } from 'component/form.js'; -import SubHeader from 'component/subHeader'; +// @flow +import * as React from 'react'; +import { FormField, FormFieldPrice } from 'component/common/form'; import * as settings from 'constants/settings'; -import lbry from 'lbry.js'; -import Link from 'component/link'; -import FormFieldPrice from 'component/formFieldPrice'; +import * as icons from 'constants/icons'; +import Button from 'component/button'; +import Page from 'component/page'; +import FileSelector from 'component/common/file-selector'; -class SettingsPage extends React.PureComponent { - constructor(props) { +export type Price = { + currency: string, + amount: number, +}; + +type DaemonSettings = { + download_directory: string, + disable_max_key_fee: boolean, + share_usage_data: boolean, +}; + +type Props = { + setDaemonSetting: (string, boolean | string | Price) => void, + setClientSetting: (string, boolean | string | Price) => void, + clearCache: () => Promise, + getThemes: () => void, + daemonSettings: DaemonSettings, + showNsfw: boolean, + instantPurchaseEnabled: boolean, + instantPurchaseMax: Price, + showUnavailable: boolean, + currentTheme: string, + themes: Array, + automaticDarkModeEnabled: boolean, +}; + +type State = { + clearingCache: boolean, +}; + +class SettingsPage extends React.PureComponent { + constructor(props: Props) { super(props); this.state = { clearingCache: false, }; - this.onAutomaticDarkModeChange = this.onAutomaticDarkModeChange.bind(this); + (this: any).onDownloadDirChange = this.onDownloadDirChange.bind(this); + (this: any).onKeyFeeChange = this.onKeyFeeChange.bind(this); + (this: any).onInstantPurchaseMaxChange = this.onInstantPurchaseMaxChange.bind(this); + (this: any).onShowNsfwChange = this.onShowNsfwChange.bind(this); + (this: any).onShowUnavailableChange = this.onShowUnavailableChange.bind(this); + (this: any).onShareDataChange = this.onShareDataChange.bind(this); + (this: any).onThemeChange = this.onThemeChange.bind(this); + (this: any).onAutomaticDarkModeChange = this.onAutomaticDarkModeChange.bind(this); + (this: any).clearCache = this.clearCache.bind(this); + // (this: any).onLanguageChange = this.onLanguageChange.bind(this) + } + + componentDidMount() { + this.props.getThemes(); + } + + onRunOnStartChange(event: SyntheticInputEvent<*>) { + this.setDaemonSetting('run_on_startup', event.target.checked); + } + + onShareDataChange(event: SyntheticInputEvent<*>) { + this.setDaemonSetting('share_usage_data', event.target.checked); + } + + onDownloadDirChange(newDirectory: string) { + this.setDaemonSetting('download_directory', newDirectory); + } + + onKeyFeeChange(newValue: Price) { + this.setDaemonSetting('max_key_fee', newValue); + } + + onKeyFeeDisableChange(isDisabled: boolean) { + this.setDaemonSetting('disable_max_key_fee', isDisabled); + } + + onThemeChange(event: SyntheticInputEvent<*>) { + const { value } = event.target; + + if (value === 'dark') { + this.onAutomaticDarkModeChange(false); + } + + this.props.setClientSetting(settings.THEME, value); + } + + onAutomaticDarkModeChange(value: boolean) { + this.props.setClientSetting(settings.AUTOMATIC_DARK_MODE_ENABLED, value); + } + + onInstantPurchaseEnabledChange(enabled: boolean) { + this.props.setClientSetting(settings.INSTANT_PURCHASE_ENABLED, enabled); + } + + onInstantPurchaseMaxChange(newValue: Price) { + this.props.setClientSetting(settings.INSTANT_PURCHASE_MAX, newValue); + } + + onShowNsfwChange(event: SyntheticInputEvent<*>) { + this.props.setClientSetting(settings.SHOW_NSFW, event.target.checked); + } + + onShowUnavailableChange(event: SyntheticInputEvent<*>) { + this.props.setClientSetting(settings.SHOW_UNAVAILABLE, event.target.checked); + } + + setDaemonSetting(name: string, value: boolean | string | Price) { + this.props.setDaemonSetting(name, value); } clearCache() { @@ -26,343 +123,205 @@ class SettingsPage extends React.PureComponent { this.setState({ clearingCache: false }); window.location.href = 'index.html'; }; - const clear = () => this.props.clearCache().then(success.bind(this)); + const clear = () => this.props.clearCache().then(success); setTimeout(clear, 1000, { once: true }); } - setDaemonSetting(name, value) { - this.props.setDaemonSetting(name, value); - } - - onRunOnStartChange(event) { - this.setDaemonSetting('run_on_startup', event.target.checked); - } - - onShareDataChange(event) { - this.setDaemonSetting('share_usage_data', event.target.checked); - } - - onDownloadDirChange(event) { - this.setDaemonSetting('download_directory', event.target.value); - } - - onKeyFeeChange(newValue) { - const setting = newValue; - - // this is stupid and should be fixed... somewhere - if (setting && (setting.amount === undefined || setting.amount === null)) { - setting.amount = 0; - } - - this.setDaemonSetting('max_key_fee', setting); - } - - onKeyFeeDisableChange(isDisabled) { - this.setDaemonSetting('disable_max_key_fee', isDisabled); - } - - onThemeChange(event) { - const { value } = event.target; - - if (value === 'dark') { - this.onAutomaticDarkModeChange(false); - } - - this.props.setClientSetting(settings.THEME, value); - } - - onAutomaticDarkModeChange(value) { - this.props.setClientSetting(settings.AUTOMATIC_DARK_MODE_ENABLED, value); - } - - onInstantPurchaseEnabledChange(enabled) { - this.props.setClientSetting(settings.INSTANT_PURCHASE_ENABLED, enabled); - } - - onInstantPurchaseMaxChange(newValue) { - this.props.setClientSetting(settings.INSTANT_PURCHASE_MAX, newValue); - } - - // onMaxUploadPrefChange(isLimited) { - // if (!isLimited) { - // this.setDaemonSetting("max_upload", 0.0); - // } - // this.setState({ - // isMaxUpload: isLimited, - // }); - // } - // - // onMaxUploadFieldChange(event) { - // this.setDaemonSetting("max_upload", Number(event.target.value)); - // } - // - // onMaxDownloadPrefChange(isLimited) { - // if (!isLimited) { - // this.setDaemonSetting("max_download", 0.0); - // } - // this.setState({ - // isMaxDownload: isLimited, - // }); - // } - // - // onMaxDownloadFieldChange(event) { - // this.setDaemonSetting("max_download", Number(event.target.value)); - // } - - onShowNsfwChange(event) { - this.props.setClientSetting(settings.SHOW_NSFW, event.target.checked); - } - - onLanguageChange(e) { - this.props.changeLanguage(e.target.value); - this.forceUpdate(); - } - - onShowUnavailableChange(event) { - this.props.setClientSetting(settings.SHOW_UNAVAILABLE, event.target.checked); - } - - componentWillMount() { - this.props.getThemes(); - } - - componentDidMount() {} - render() { const { daemonSettings, - language, - languages, showNsfw, instantPurchaseEnabled, instantPurchaseMax, showUnavailable, - theme, + currentTheme, themes, automaticDarkModeEnabled, } = this.props; - if (!daemonSettings || Object.keys(daemonSettings).length === 0) { - return ( -
- {__('Failed to load settings.')} -
- ); - } + const noDaemonSettings = !daemonSettings || Object.keys(daemonSettings).length === 0; return ( -
- - {/* -
-
-

{__("Language")}

-
-
-
- - - {Object.keys(languages).map(dLang => - - )} - -
-
-
*/} -
-
-

{__('Download Directory')}

-
-
- -
-
-
-
-

{__('Max Purchase Price')}

-
-
- { - this.onKeyFeeDisableChange(true); - }} - defaultChecked={daemonSettings.disable_max_key_fee} - label={__('No Limit')} - /> -
- { - this.onKeyFeeDisableChange(false); - }} - defaultChecked={!daemonSettings.disable_max_key_fee} - label={daemonSettings.disable_max_key_fee ? __('Choose limit') : __('Limit to')} + + {noDaemonSettings ? ( +
+
{__('Failed to load settings.')}
+
+ ) : ( + +
+
{__('Download Directory')}
+ {__('LBRY downloads will be saved here.')} + - {!daemonSettings.disable_max_key_fee && ( +
+
+
{__('Max Purchase Price')}
+ + {__( + 'This will prevent you from purchasing any content over a certain cost, as a safety measure.' + )} + +
+ { + this.onKeyFeeDisableChange(true); + }} + /> + { + this.onKeyFeeDisableChange(false); + }} + checked={!daemonSettings.disable_max_key_fee} + postfix={__('Choose limit')} + /> - )} -
-
- {__( - 'This will prevent you from purchasing any content over this cost, as a safety measure.' - )} -
-
-
+
+
-
-
-

{__('Purchase Confirmations')}

-
-
- { - this.onInstantPurchaseEnabledChange(false); - }} - /> -
- { - this.onInstantPurchaseEnabledChange(true); - }} - /> - {instantPurchaseEnabled && ( - this.onInstantPurchaseMaxChange(val)} - defaultValue={instantPurchaseMax} +
+
{__('Purchase Confirmations')}
+
+ {__( + "When this option is chosen, LBRY won't ask you to confirm downloads below your chosen price." + )} +
+
+ { + this.onInstantPurchaseEnabledChange(false); + }} /> - )} -
-
- When this option is chosen, LBRY won't ask you to confirm downloads below the given - price. -
-
-
-
-
-

{__('Content')}

-
-
- - -
-
+ { + this.onInstantPurchaseEnabledChange(true); + }} + /> + +
+
-
-
-

{__('Share Diagnostic Data')}

-
-
- -
-
- -
-
-

{__('Theme')}

-
-
- - {themes.map((theme, index) => ( - - ))} - - - this.onAutomaticDarkModeChange(e.target.checked)} - checked={automaticDarkModeEnabled} - label={__('Automatic dark mode (9pm to 8am)')} - /> -
-
- -
-
-

{__('Application Cache')}

-
-
-

- +

{__('Content Settings')}
+ -

-
-
- + +
+ +
+
{__('Share Diagnostic Data')}
+
+ +
+
+ + { + // Hiding this for now until we update the dark mode styles + //
+ //
{__('Theme')}
+ // + // {themes.map(theme => ( + // + // ))} + // + // + // this.onAutomaticDarkModeChange(e.target.checked)} + // checked={automaticDarkModeEnabled} + // postfix={__('Automatic dark mode (9pm to 8am)')} + // /> + //
+ } + +
+
{__('Application Cache')}
+ + {__("This will delete your subscriptions, and clar the app's cache")} + +
+
+
+
+ )} + ); } } diff --git a/src/renderer/page/show/view.jsx b/src/renderer/page/show/view.jsx index 65799a7ee..acfae0bed 100644 --- a/src/renderer/page/show/view.jsx +++ b/src/renderer/page/show/view.jsx @@ -1,16 +1,25 @@ +// @flow import React from 'react'; -import { BusyMessage } from 'component/common'; +import BusyIndicator from 'component/common/busy-indicator'; import ChannelPage from 'page/channel'; import FilePage from 'page/file'; +import Page from 'component/page'; -class ShowPage extends React.PureComponent { - componentWillMount() { +type Props = { + isResolvingUri: boolean, + resolveUri: string => void, + uri: string, + claim: { name: string }, +}; + +class ShowPage extends React.PureComponent { + componentDidMount() { const { isResolvingUri, resolveUri, uri } = this.props; if (!isResolvingUri) resolveUri(uri); } - componentWillReceiveProps(nextProps) { + componentWillReceiveProps(nextProps: Props) { const { isResolvingUri, resolveUri, claim, uri } = nextProps; if (!isResolvingUri && claim === undefined && uri) { @@ -25,20 +34,18 @@ class ShowPage extends React.PureComponent { if ((isResolvingUri && !claim) || !claim) { innerContent = ( -
-
-
-

{uri}

+ +
+

{uri}

+
+ {isResolvingUri && } + {claim === null && + !isResolvingUri && ( + {__("There's nothing at this location.")} + )}
-
-
- {isResolvingUri && } - {claim === null && - !isResolvingUri && ( - {__("There's nothing at this location.")} - )} -
-
+
+ ); } else if (claim && claim.name.length && claim.name[0] === '@') { innerContent = ; @@ -46,7 +53,7 @@ class ShowPage extends React.PureComponent { innerContent = ; } - return
{innerContent}
; + return innerContent; } } diff --git a/src/renderer/page/subscriptions/view.jsx b/src/renderer/page/subscriptions/view.jsx index 8f0e56840..27f3fac45 100644 --- a/src/renderer/page/subscriptions/view.jsx +++ b/src/renderer/page/subscriptions/view.jsx @@ -1,10 +1,10 @@ // @flow import React from 'react'; -import SubHeader from 'component/subHeader'; -import { BusyMessage } from 'component/common.js'; -import { FeaturedCategory } from 'page/discover/view'; +import Page from 'component/page'; +import CategoryList from 'component/common/category-list'; import type { Subscription } from 'redux/reducers/subscriptions'; import * as NOTIFICATION_TYPES from 'constants/notification_types'; +import Button from 'component/button'; type SavedSubscriptions = Array; @@ -75,14 +75,13 @@ export default class extends React.PureComponent { (subscriptions.length !== savedSubscriptions.length || someClaimsNotLoaded); return ( -
- + {!savedSubscriptions.length && ( - {__("You haven't subscribed to any channels yet")} - )} - {fetchingSubscriptions && ( -
- +
+ {__("It looks like you aren't subscribed to any channels yet.")} +
+
)} {!!savedSubscriptions.length && ( @@ -97,7 +96,7 @@ export default class extends React.PureComponent { } return ( - { })}
)} -
+ ); } } diff --git a/src/renderer/page/transactionHistory/view.jsx b/src/renderer/page/transactionHistory/view.jsx index 562da6aa5..62d9b394f 100644 --- a/src/renderer/page/transactionHistory/view.jsx +++ b/src/renderer/page/transactionHistory/view.jsx @@ -1,7 +1,7 @@ import React from 'react'; -import { BusyMessage } from 'component/common'; -import SubHeader from 'component/subHeader'; +import BusyIndicator from 'component/common/busy-indicator'; import TransactionList from 'component/transactionList'; +import Page from 'component/page'; class TransactionHistoryPage extends React.PureComponent { componentWillMount() { @@ -12,30 +12,29 @@ class TransactionHistoryPage extends React.PureComponent { const { fetchingTransactions, transactions } = this.props; return ( -
- -
+ +

{__('Transaction History')}

-
- {fetchingTransactions && !transactions.length ? ( - - ) : ( - '' - )} - {transactions && transactions.length ? ( - - ) : ( - '' - )} -
+ {fetchingTransactions && !transactions.length ? ( +
+ +
+ ) : ( + '' + )} + {transactions && transactions.length ? ( + + ) : ( + '' + )}
-
+ ); } } diff --git a/src/renderer/page/wallet/view.jsx b/src/renderer/page/wallet/view.jsx index b98bb80f9..683ba03e7 100644 --- a/src/renderer/page/wallet/view.jsx +++ b/src/renderer/page/wallet/view.jsx @@ -1,18 +1,19 @@ import React from 'react'; -import SubHeader from 'component/subHeader'; import WalletBalance from 'component/walletBalance'; import RewardSummary from 'component/rewardSummary'; import TransactionListRecent from 'component/transactionListRecent'; +import WalletAddress from 'component/walletAddress'; +import Page from 'component/page'; -const WalletPage = props => ( -
- -
+const WalletPage = () => ( + +
+ -
+ ); export default WalletPage; diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js index 2fdffc677..afa1ad2ef 100644 --- a/src/renderer/redux/actions/content.js +++ b/src/renderer/redux/actions/content.js @@ -526,24 +526,6 @@ export function doCreateChannel(name, amount) { }; } -export function doPublish(params) { - return dispatch => - new Promise((resolve, reject) => { - const success = claim => { - resolve(claim); - - if (claim === true) dispatch(doFetchClaimListMine()); - else - setTimeout(() => dispatch(doFetchClaimListMine()), 20000, { - once: true, - }); - }; - const failure = err => reject(err); - - Lbry.publishDeprecated(params, null, success, failure); - }); -} - export function doAbandonClaim(txid, nout) { return (dispatch, getState) => { const state = getState(); diff --git a/src/renderer/redux/actions/publish.js b/src/renderer/redux/actions/publish.js new file mode 100644 index 000000000..ba93acb2b --- /dev/null +++ b/src/renderer/redux/actions/publish.js @@ -0,0 +1,181 @@ +// @flow +import Lbry from 'lbry'; +import * as ACTIONS from 'constants/action_types'; +import * as MODALS from 'constants/modal_types'; +import { selectMyClaimsWithoutChannels } from 'redux/selectors/claims'; +import { selectPendingPublishes } from 'redux/selectors/publish'; +import { doOpenModal } from 'redux/actions/app'; +import type { + UpdatePublishFormData, + UpdatePublishFormAction, + PublishParams, +} from 'redux/reducers/publish'; +import { CHANNEL_NEW, CHANNEL_ANONYMOUS } from 'constants/claim'; + +type Action = UpdatePublishFormAction | { type: ACTIONS.CLEAR_PUBLISH }; +type PromiseAction = Promise; +type Dispatch = (action: Action | PromiseAction | Array) => any; +type ThunkAction = (dispatch: Dispatch) => any; +type GetState = () => {}; + +export const doClearPublish = () => (dispatch: Dispatch): Action => + dispatch({ type: ACTIONS.CLEAR_PUBLISH }); + +export const doUpdatePublishForm = (publishFormValue: UpdatePublishFormData) => ( + dispatch: Dispatch +): UpdatePublishFormAction => + dispatch({ + type: ACTIONS.UPDATE_PUBLISH_FORM, + data: { ...publishFormValue }, + }); + +export const doPrepareEdit = (claim: any) => (dispatch: Dispatch) => { + const { name, amount, channel_name: channelName, value: { stream: { metadata } } } = claim; + const { + author, + description, + fee, + language, + license, + licenseUrl, + nsfw, + thumbnail, + title, + } = metadata; + + const publishData = { + name, + channel: channelName, + bid: amount, + price: { amount: fee.amount, currency: fee.currency }, + contentIsFree: !fee.amount, + author, + description, + fee, + language, + license, + licenseUrl, + nsfw, + thumbnail, + title, + }; + + dispatch({ type: ACTIONS.DO_PREPARE_EDIT, data: publishData }); +}; + +export const doPublish = (params: PublishParams): ThunkAction => { + const { + name, + bid, + filePath: file_path, + description, + language, + license, + licenseUrl, + thumbnail, + nsfw, + channel, + title, + contentIsFree, + price, + uri, + } = params; + + const channelName = channel === CHANNEL_ANONYMOUS || channel === CHANNEL_NEW ? '' : channel; + const fee = contentIsFree || !price.amount ? undefined : { ...price }; + + const metadata = { + title, + nsfw, + license, + licenseUrl, + language, + thumbnail, + }; + + if (fee) { + metadata.fee = fee; + } + + if (description) { + metadata.description = description; + } + + const publishPayload = { + file_path, + name, + channel_name: channelName, + bid, + metadata, + }; + + return (dispatch: Dispatch) => { + dispatch({ type: ACTIONS.PUBLISH_START }); + + const success = () => { + dispatch({ + type: ACTIONS.PUBLISH_SUCCESS, + data: { pendingPublish: publishPayload }, + }); + dispatch(doOpenModal(MODALS.PUBLISH, { uri })); + }; + + const failure = error => { + dispatch({ type: ACTIONS.PUBLISH_FAIL }); + dispatch(doOpenModal(MODALS.ERROR, { error: error.message })); + }; + + return Lbry.publish(publishPayload).then(success, failure); + }; +}; + +// Calls claim_list_mine until any pending publishes are confirmed +export const doCheckPendingPublishes = () => { + return (dispatch: Dispatch, getState: GetState) => { + const state = getState(); + const pendingPublishes = selectPendingPublishes(state); + const myClaims = selectMyClaimsWithoutChannels(state); + + let publishCheckInterval; + + const checkFileList = () => { + Lbry.claim_list_mine().then(claims => { + const claimsWithoutChannels = claims.filter(claim => !claim.name.match(/^@/)); + if (myClaims.length !== claimsWithoutChannels.length) { + const pendingPublishMap = {}; + pendingPublishes.forEach(({ name }) => { + pendingPublishMap[name] = name; + }); + + claims.forEach(claim => { + if (pendingPublishMap[claim.name]) { + dispatch({ + type: ACTIONS.REMOVE_PENDING_PUBLISH, + data: { + name: claim.name, + }, + }); + dispatch({ + type: ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED, + data: { + claims, + }, + }); + + delete pendingPublishMap[claim.name]; + } + }); + + clearInterval(publishCheckInterval); + } + }); + }; + + if (pendingPublishes.length) { + checkFileList(); + publishCheckInterval = setInterval(() => { + checkFileList(); + }, 10000); + } + }; +}; diff --git a/src/renderer/redux/actions/search.js b/src/renderer/redux/actions/search.js index b4b12cd57..3aac1bf09 100644 --- a/src/renderer/redux/actions/search.js +++ b/src/renderer/redux/actions/search.js @@ -1,67 +1,176 @@ import * as ACTIONS from 'constants/action_types'; -import { buildURI } from 'lbryURI'; +import * as SEARCH_TYPES from 'constants/search'; +import { normalizeURI, buildURI, parseURI } from 'lbryURI'; import { doResolveUri } from 'redux/actions/content'; import { doNavigate } from 'redux/actions/navigation'; import { selectCurrentPage } from 'redux/selectors/navigation'; +import { makeSelectSearchUris } from 'redux/selectors/search'; import batchActions from 'util/batchActions'; +import handleFetchResponse from 'util/handle-fetch'; -// eslint-disable-next-line import/prefer-default-export -export function doSearch(rawQuery) { - return (dispatch, getState) => { - const state = getState(); - const page = selectCurrentPage(state); - - const query = rawQuery.replace(/^lbry:\/\//i, ''); - - if (!query) { - dispatch({ - type: ACTIONS.SEARCH_CANCELLED, - }); - return; - } +export const doSearch = rawQuery => (dispatch, getState) => { + const state = getState(); + const query = rawQuery.replace(/^lbry:\/\//i, ''); + if (!query) { dispatch({ - type: ACTIONS.SEARCH_STARTED, - data: { query }, + type: ACTIONS.SEARCH_FAIL, }); + return; + } - if (page !== 'search') { - dispatch(doNavigate('search', { query })); - } else { - fetch(`https://lighthouse.lbry.io/search?s=${query}`) - .then( - response => - response.status === 200 - ? Promise.resolve(response.json()) - : Promise.reject(new Error(response.statusText)) - ) - .then(data => { - const uris = []; - const actions = []; + // If we have already searched for something, we don't need to do anything + const urisForQuery = makeSelectSearchUris(query)(state); + if (urisForQuery && !!urisForQuery.length) { + return; + } - data.forEach(result => { - const uri = buildURI({ - claimName: result.name, - claimId: result.claimId, - }); - actions.push(doResolveUri(uri)); - uris.push(uri); - }); + dispatch({ + type: ACTIONS.SEARCH_START, + }); - actions.push({ - type: ACTIONS.SEARCH_COMPLETED, - data: { - query, - uris, - }, - }); - dispatch(batchActions(...actions)); - }) - .catch(() => { - dispatch({ - type: ACTIONS.SEARCH_CANCELLED, - }); + // If the user is on the file page with a pre-populated uri and they select + // the search option without typing anything, searchQuery will be empty + // We need to populate it so the input is filled on the search page + if (!state.search.searchQuery) { + dispatch({ + type: ACTIONS.UPDATE_SEARCH_QUERY, + data: { searchQuery: query }, + }); + } + + fetch(`https://lighthouse.lbry.io/search?s=${query}`) + .then(handleFetchResponse) + .then(data => { + const uris = []; + const actions = []; + + data.forEach(result => { + const uri = buildURI({ + claimName: result.name, + claimId: result.claimId, }); - } + actions.push(doResolveUri(uri)); + uris.push(uri); + }); + + actions.push({ + type: ACTIONS.SEARCH_SUCCESS, + data: { + query, + uris, + }, + }); + dispatch(batchActions(...actions)); + }) + .catch(() => { + dispatch({ + type: ACTIONS.SEARCH_FAIL, + }); + }); +}; + +export const doUpdateSearchQuery = (query: string, shouldSkipSuggestions: ?boolean) => dispatch => { + dispatch({ + type: ACTIONS.UPDATE_SEARCH_QUERY, + data: { query }, + }); + + // Don't fetch new suggestions if the user just added a space + if (!query.endsWith(' ') || !shouldSkipSuggestions) { + dispatch(getSearchSuggestions(query)); + } +}; + +export const getSearchSuggestions = (value: string) => dispatch => { + const query = value.trim(); + + const isPrefix = () => { + return query === '@' || query === 'lbry:' || query === 'lbry:/' || query === 'lbry://'; }; -} + + if (!query || isPrefix()) { + dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions: [] }, + }); + return; + } + + let suggestions = []; + try { + // If the user is about to manually add the claim id ignore it until they + // actually add one. This would hardly ever happen, but then the search + // suggestions won't change just from adding a '#' after a uri + let uriQuery = query; + if (uriQuery.endsWith('#')) { + uriQuery = uriQuery.slice(0, -1); + } + + const uri = normalizeURI(uriQuery); + const { claimName, isChannel } = parseURI(uri); + + suggestions.push( + { + value: uri, + shorthand: isChannel ? claimName.slice(1) : claimName, + type: isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE, + }, + { + value: claimName, + type: SEARCH_TYPES.SEARCH, + } + ); + + // If it's a valid url, don't fetch any extra search results + return dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions }, + }); + } catch (e) { + suggestions.push({ + value: query, + type: SEARCH_TYPES.SEARCH, + }); + } + + // Populate the current search query suggestion before fetching results + dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions }, + }); + + // strip out any basic stuff for more accurate search results + let searchValue = value.replace(/lbry:\/\//g, '').replace(/-/g, ' '); + if (searchValue.includes('#')) { + // This should probably be more robust, but I think it's fine for now + // Remove everything after # to get rid of the claim id + searchValue = searchValue.substring(0, searchValue.indexOf('#')); + } + + return fetch(`https://lighthouse.lbry.io/autocomplete?s=${searchValue}`) + .then(handleFetchResponse) + .then(apiSuggestions => { + const formattedSuggestions = apiSuggestions.slice(0, 6).map(suggestion => { + // This will need to be more robust when the api starts returning lbry uris + const isChannel = suggestion.startsWith('@'); + const suggestionObj = { + value: isChannel ? `lbry://${suggestion}` : suggestion, + shorthand: isChannel ? suggestion.slice(1) : '', + type: isChannel ? 'channel' : 'search', + }; + + return suggestionObj; + }); + + suggestions = suggestions.concat(formattedSuggestions); + dispatch({ + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { suggestions }, + }); + }) + .catch(() => { + // If the fetch fails, do nothing + // Basic search suggestions are already populated at this point + }); +}; diff --git a/src/renderer/redux/actions/video.js b/src/renderer/redux/actions/video.js deleted file mode 100644 index 4ede45bd0..000000000 --- a/src/renderer/redux/actions/video.js +++ /dev/null @@ -1,10 +0,0 @@ -// @flow -import * as actions from 'constants/action_types'; -import type { Dispatch } from 'redux/reducers/video'; - -// eslint-disable-next-line import/prefer-default-export -export const setVideoPause = (data: boolean) => (dispatch: Dispatch) => - dispatch({ - type: actions.SET_VIDEO_PAUSE, - data, - }); diff --git a/src/renderer/redux/actions/wallet.js b/src/renderer/redux/actions/wallet.js index 6422b6315..a89ca9273 100644 --- a/src/renderer/redux/actions/wallet.js +++ b/src/renderer/redux/actions/wallet.js @@ -3,22 +3,21 @@ import * as MODALS from 'constants/modal_types'; import Lbry from 'lbry'; import { doOpenModal, doShowSnackBar } from 'redux/actions/app'; import { doNavigate } from 'redux/actions/navigation'; -import { - selectBalance, - selectDraftTransaction, - selectDraftTransactionAmount, -} from 'redux/selectors/wallet'; +import { selectBalance } from 'redux/selectors/wallet'; export function doUpdateBalance() { - return dispatch => { - Lbry.wallet_balance().then(balance => - dispatch({ - type: ACTIONS.UPDATE_BALANCE, - data: { - balance, - }, - }) - ); + return (dispatch, getState) => { + const { wallet: { balance: balanceInStore } } = getState(); + Lbry.wallet_balance().then(balance => { + if (balanceInStore !== balance) { + return dispatch({ + type: ACTIONS.UPDATE_BALANCE, + data: { + balance, + }, + }); + } + }); }; } @@ -89,12 +88,10 @@ export function doCheckAddressIsMine(address) { }; } -export function doSendDraftTransaction() { +export function doSendDraftTransaction({ amount, address }) { return (dispatch, getState) => { const state = getState(); - const draftTx = selectDraftTransaction(state); const balance = selectBalance(state); - const amount = selectDraftTransactionAmount(state); if (balance - amount <= 0) { dispatch(doOpenModal(MODALS.INSUFFICIENT_CREDITS)); @@ -135,26 +132,12 @@ export function doSendDraftTransaction() { }; Lbry.wallet_send({ - amount: draftTx.amount, - address: draftTx.address, + amount, + address, }).then(successCallback, errorCallback); }; } -export function doSetDraftTransactionAmount(amount) { - return { - type: ACTIONS.SET_DRAFT_TRANSACTION_AMOUNT, - data: { amount }, - }; -} - -export function doSetDraftTransactionAddress(address) { - return { - type: ACTIONS.SET_DRAFT_TRANSACTION_ADDRESS, - data: { address }, - }; -} - export function doSendSupport(amount, claimId, uri) { return (dispatch, getState) => { const state = getState(); diff --git a/src/renderer/redux/reducers/app.js b/src/renderer/redux/reducers/app.js index fa13a325f..ac8b8f5fb 100644 --- a/src/renderer/redux/reducers/app.js +++ b/src/renderer/redux/reducers/app.js @@ -138,9 +138,8 @@ reducers[ACTIONS.SET_PLAYING_URI] = (state, action) => { return Object.assign({}, state, { modalsAllowed: true, }); - } else { - return state; } + return state; }; reducers[ACTIONS.UPDATE_VERSION] = (state, action) => @@ -162,12 +161,11 @@ reducers[ACTIONS.CHECK_UPGRADE_SUBSCRIBE] = (state, action) => reducers[ACTIONS.OPEN_MODAL] = (state, action) => { if (!state.modalsAllowed) { return state; - } else { - return Object.assign({}, state, { - modal: action.data.modal, - modalProps: action.data.modalProps || {}, - }); } + return Object.assign({}, state, { + modal: action.data.modal, + modalProps: action.data.modalProps || {}, + }); }; reducers[ACTIONS.CLOSE_MODAL] = state => Object.assign({}, state, { @@ -234,6 +232,12 @@ reducers[ACTIONS.VOLUME_CHANGED] = (state, action) => volume: action.data.volume, }); +reducers[ACTIONS.HISTORY_NAVIGATE] = state => + Object.assign({}, state, { + modal: undefined, + modalProps: {}, + }); + export default function reducer(state: AppState = defaultState, action: any) { const handler = reducers[action.type]; if (handler) return handler(state, action); diff --git a/src/renderer/redux/reducers/content.js b/src/renderer/redux/reducers/content.js index e5242b599..e9cbdff99 100644 --- a/src/renderer/redux/reducers/content.js +++ b/src/renderer/redux/reducers/content.js @@ -3,6 +3,7 @@ import * as ACTIONS from 'constants/action_types'; const reducers = {}; const defaultState = { playingUri: null, + currentlyIsPlaying: false, rewardedContentClaimIds: [], channelClaimCounts: {}, }; diff --git a/src/renderer/redux/reducers/publish.js b/src/renderer/redux/reducers/publish.js new file mode 100644 index 000000000..195e8c6cf --- /dev/null +++ b/src/renderer/redux/reducers/publish.js @@ -0,0 +1,167 @@ +// @flow +import { handleActions } from 'util/redux-utils'; +import { buildURI } from 'lbryURI'; +import * as ACTIONS from 'constants/action_types'; +import { CHANNEL_ANONYMOUS } from 'constants/claim'; + +type PublishState = { + editingURI: ?string, + filePath: ?string, + contentIsFree: boolean, + price: { + amount: number, + currency: string, + }, + title: string, + thumbnail: string, + description: string, + language: string, + tosAccepted: boolean, + channel: string, + name: string, + nameError: ?string, + bid: number, + bidError: ?string, + otherLicenseDescription: string, + licenseUrl: string, + copyrightNotice: string, + pendingPublishes: Array, +}; + +export type UpdatePublishFormData = { + filePath?: string, + contentIsFree?: boolean, + price?: { + amount: number, + currency: string, + }, + title?: string, + thumbnail?: string, + description?: string, + language?: string, + tosAccepted?: boolean, + channel?: string, + name?: string, + nameError?: string, + bid?: number, + bidError?: string, + otherLicenseDescription?: string, + licenseUrl?: string, + copyrightNotice?: string, +}; + +export type UpdatePublishFormAction = { + type: ACTIONS.UPDATE_PUBLISH_FORM | ACTIONS.DO_PREPARE_EDIT, + data: UpdatePublishFormData, +}; + +export type PublishParams = { + name: string, + bid: number, + filePath: string, + description: ?string, + language: string, + publishingLicense: string, + publishingLicenseUrl: string, + thumbnail: ?string, + nsfw: boolean, + channel: string, + title: string, + contentIsFree: boolean, + uri: string, + license: ?string, + licenseUrl: ?string, + price: { + currency: string, + amount: number, + }, +}; + +const defaultState: PublishState = { + editingURI: undefined, + filePath: undefined, + contentIsFree: true, + price: { + amount: 1, + currency: 'LBC', + }, + title: '', + thumbnail: '', + description: '', + language: 'en', + nsfw: false, + channel: CHANNEL_ANONYMOUS, + tosAccepted: false, + name: '', + nameError: undefined, + bid: 0.1, + bidError: undefined, + licenseType: 'None', + otherLicenseDescription: '', + licenseUrl: '', + copyrightNotice: 'All rights reserved', + publishing: false, + publishSuccess: false, + publishError: undefined, + pendingPublishes: [], +}; + +export default handleActions( + { + [ACTIONS.UPDATE_PUBLISH_FORM]: (state, action): PublishState => { + const { data } = action; + return { + ...state, + ...data, + }; + }, + [ACTIONS.CLEAR_PUBLISH]: (state: PublishState): PublishState => { + const { pendingPublishes } = state; + return { ...defaultState, pendingPublishes }; + }, + [ACTIONS.PUBLISH_START]: (state: PublishState): PublishState => ({ + ...state, + publishing: true, + }), + [ACTIONS.PUBLISH_FAIL]: (state: PublishState): PublishState => ({ + ...state, + publishing: false, + }), + [ACTIONS.PUBLISH_SUCCESS]: (state: PublishState, action): PublishState => { + const { pendingPublish } = action.data; + + const newPendingPublishes = state.pendingPublishes.slice(); + newPendingPublishes.push(pendingPublish); + + return { + ...state, + publishing: false, + pendingPublishes: newPendingPublishes, + }; + }, + [ACTIONS.REMOVE_PENDING_PUBLISH]: (state: PublishState, action) => { + const { name } = action.data; + const pendingPublishes = state.pendingPublishes.filter(publish => publish.name !== name); + return { + ...state, + pendingPublishes, + }; + }, + [ACTIONS.DO_PREPARE_EDIT]: (state: PublishState, action) => { + const { ...publishData } = action.data; + const { channel, name } = publishData; + + const uri = buildURI({ + channelName: channel, + contentName: name, + }); + + return { + ...defaultState, + editingURI: uri, + ...publishData, + }; + }, + }, + defaultState +); diff --git a/src/renderer/redux/reducers/search.js b/src/renderer/redux/reducers/search.js index b3a0754e4..7a2a92ca1 100644 --- a/src/renderer/redux/reducers/search.js +++ b/src/renderer/redux/reducers/search.js @@ -1,32 +1,103 @@ +// @flow import * as ACTIONS from 'constants/action_types'; +import { handleActions } from 'util/redux-utils'; -const reducers = {}; -const defaultState = { +type SearchSuccess = { + type: ACTIONS.SEARCH_SUCCESS, + data: { + query: string, + uris: Array, + }, +}; + +type UpdateSearchQuery = { + type: ACTIONS.UPDATE_SEARCH_QUERY, + data: { + query: string, + }, +}; + +type SearchSuggestion = { + value: string, + shorthand: string, + type: string, +}; + +type UpdateSearchSuggestions = { + type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, + data: { + suggestions: Array, + }, +}; + +type SearchState = { + isActive: boolean, + searchQuery: string, + suggestions: Array, urisByQuery: {}, - searching: false, }; -reducers[ACTIONS.SEARCH_STARTED] = state => - Object.assign({}, state, { - searching: true, - }); - -reducers[ACTIONS.SEARCH_COMPLETED] = (state, action) => { - const { query, uris } = action.data; - - return Object.assign({}, state, { - searching: false, - urisByQuery: Object.assign({}, state.urisByQuery, { [query]: uris }), - }); +const defaultState = { + isActive: false, + searchQuery: '', // needs to be an empty string for input focusing + suggestions: [], + urisByQuery: {}, }; -reducers[ACTIONS.SEARCH_CANCELLED] = state => - Object.assign({}, state, { - searching: false, - }); +export default handleActions( + { + [ACTIONS.SEARCH_START]: (state: SearchState): SearchState => ({ + ...state, + searching: true, + }), + [ACTIONS.SEARCH_SUCCESS]: (state: SearchState, action: SearchSuccess): SearchState => { + const { query, uris } = action.data; -export default function reducer(state = defaultState, action) { - const handler = reducers[action.type]; - if (handler) return handler(state, action); - return state; -} + return { + ...state, + searching: false, + urisByQuery: Object.assign({}, state.urisByQuery, { [query]: uris }), + }; + }, + + [ACTIONS.SEARCH_FAIL]: (state: SearchState): SearchState => ({ + ...state, + searching: false, + }), + + [ACTIONS.UPDATE_SEARCH_QUERY]: ( + state: SearchState, + action: UpdateSearchQuery + ): SearchState => ({ + ...state, + searchQuery: action.data.query, + isActive: true, + }), + + [ACTIONS.UPDATE_SEARCH_SUGGESTIONS]: ( + state: SearchState, + action: UpdateSearchSuggestions + ): SearchState => ({ + ...state, + suggestions: action.data.suggestions, + }), + + // clear the searchQuery on back/forward + // it may be populated by the page title for search/file pages + // if going home, it should be blank + [ACTIONS.HISTORY_NAVIGATE]: (state: SearchState): SearchState => ({ + ...state, + searchQuery: '', + suggestions: [], + isActive: false, + }), + // sets isActive to false so the uri will be populated correctly if the + // user is on a file page. The search query will still be present on any + // other page + [ACTIONS.CLOSE_MODAL]: (state: SearchState): SearchState => ({ + ...state, + isActive: false, + }), + }, + defaultState +); diff --git a/src/renderer/redux/reducers/settings.js b/src/renderer/redux/reducers/settings.js index 73cf69209..eecba6083 100644 --- a/src/renderer/redux/reducers/settings.js +++ b/src/renderer/redux/reducers/settings.js @@ -27,6 +27,7 @@ const defaultState = { }, isNight: false, languages: {}, + daemonSettings: {}, }; reducers[ACTIONS.DAEMON_SETTINGS_RECEIVED] = (state, action) => diff --git a/src/renderer/redux/reducers/video.js b/src/renderer/redux/reducers/video.js deleted file mode 100644 index 4025c0d77..000000000 --- a/src/renderer/redux/reducers/video.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow -import * as ACTIONS from 'constants/action_types'; -import { handleActions } from 'util/redux-utils'; - -export type VideoState = { videoPause: boolean }; - -type setVideoPause = { - type: ACTIONS.SET_VIDEO_PAUSE, - data: boolean, -}; - -export type Action = setVideoPause; -export type Dispatch = (action: Action) => any; - -const defaultState = { videoPause: false }; - -export default handleActions( - { - [ACTIONS.SET_VIDEO_PAUSE]: (state: VideoState, action: setVideoPause): VideoState => ({ - ...state, - videoPause: action.data, - }), - }, - defaultState -); diff --git a/src/renderer/redux/reducers/wallet.js b/src/renderer/redux/reducers/wallet.js index bc5761c6c..590404ce8 100644 --- a/src/renderer/redux/reducers/wallet.js +++ b/src/renderer/redux/reducers/wallet.js @@ -2,10 +2,6 @@ import * as ACTIONS from 'constants/action_types'; const reducers = {}; const receiveAddress = localStorage.getItem('receiveAddress'); -const buildDraftTransaction = () => ({ - amount: undefined, - address: undefined, -}); const defaultState = { balance: undefined, @@ -14,8 +10,8 @@ const defaultState = { fetchingTransactions: false, receiveAddress, gettingNewAddress: false, - draftTransaction: buildDraftTransaction(), sendingSupport: false, + sendingTx: false, }; reducers[ACTIONS.FETCH_TRANSACTIONS_STARTED] = state => @@ -68,51 +64,21 @@ reducers[ACTIONS.CHECK_ADDRESS_IS_MINE_COMPLETED] = state => checkingAddressOwnership: false, }); -reducers[ACTIONS.SET_DRAFT_TRANSACTION_AMOUNT] = (state, action) => { - const oldDraft = state.draftTransaction; - const newDraft = Object.assign({}, oldDraft, { - amount: parseFloat(action.data.amount), - }); - - return Object.assign({}, state, { - draftTransaction: newDraft, - }); -}; - -reducers[ACTIONS.SET_DRAFT_TRANSACTION_ADDRESS] = (state, action) => { - const oldDraft = state.draftTransaction; - const newDraft = Object.assign({}, oldDraft, { - address: action.data.address, - }); - - return Object.assign({}, state, { - draftTransaction: newDraft, - }); -}; - reducers[ACTIONS.SEND_TRANSACTION_STARTED] = state => { - const newDraftTransaction = Object.assign({}, state.draftTransaction, { - sending: true, - }); - return Object.assign({}, state, { - draftTransaction: newDraftTransaction, + sendingTx: true, }); }; reducers[ACTIONS.SEND_TRANSACTION_COMPLETED] = state => Object.assign({}, state, { - draftTransaction: buildDraftTransaction(), + sendingTx: false, }); reducers[ACTIONS.SEND_TRANSACTION_FAILED] = (state, action) => { - const newDraftTransaction = Object.assign({}, state.draftTransaction, { - sending: false, - error: action.data.error, - }); - return Object.assign({}, state, { - draftTransaction: newDraftTransaction, + sendingTx: false, + error: action.data.error, }); }; diff --git a/src/renderer/redux/selectors/claims.js b/src/renderer/redux/selectors/claims.js index 9da8a6d51..bb3c7ae04 100644 --- a/src/renderer/redux/selectors/claims.js +++ b/src/renderer/redux/selectors/claims.js @@ -6,6 +6,12 @@ const selectState = state => state.claims || {}; export const selectClaimsById = createSelector(selectState, state => state.byId || {}); +export const selectClaimById = id => + createSelector(selectClaimsById, claims => { + const claimById = claims[id]; + return claimById; + }); + export const selectClaimsByUri = createSelector(selectState, selectClaimsById, (state, byId) => { const byUri = state.claimsByUri || {}; const claims = {}; diff --git a/src/renderer/redux/selectors/file_info.js b/src/renderer/redux/selectors/file_info.js index f760bb3be..f13c0c9ae 100644 --- a/src/renderer/redux/selectors/file_info.js +++ b/src/renderer/redux/selectors/file_info.js @@ -4,6 +4,7 @@ import { selectMyClaims, } from 'redux/selectors/claims'; import { createSelector } from 'reselect'; +import { buildURI } from 'lbryURI'; export const selectState = state => state.fileInfo || {}; @@ -27,7 +28,6 @@ export const makeSelectFileInfoForUri = uri => createSelector(selectClaimsByUri, selectFileInfosByOutpoint, (claims, byOutpoint) => { const claim = claims[uri]; const outpoint = claim ? `${claim.txid}:${claim.nout}` : undefined; - return outpoint ? byOutpoint[outpoint] : undefined; }); @@ -104,3 +104,92 @@ export const selectTotalDownloadProgress = createSelector(selectDownloadingFileI if (fileInfos.length > 0) return totalProgress / fileInfos.length / 100.0; return -1; }); + +export const selectSearchDownloadUris = query => + createSelector(selectFileInfosDownloaded, fileInfos => { + if (!query || !fileInfos.length) { + return null; + } + + const queryParts = query.toLowerCase().split(' '); + const searchQueryDictionary = {}; + queryParts.forEach(subQuery => { + searchQueryDictionary[subQuery] = subQuery; + }); + + const arrayContainsQueryPart = array => { + for (let i = 0; i < array.length; i += 1) { + const subQuery = array[i]; + if (searchQueryDictionary[subQuery]) { + return true; + } + } + return false; + }; + + const downloadResultsFromQuery = []; + fileInfos.forEach(fileInfo => { + const { channel_name, claim_name, metadata } = fileInfo; + const { author, description, title } = metadata; + + if (channel_name) { + const channelName = channel_name.toLowerCase(); + const strippedOutChannelName = channelName.slice(1); // trim off the @ + if (searchQueryDictionary[channel_name] || searchQueryDictionary[strippedOutChannelName]) { + downloadResultsFromQuery.push(fileInfo); + return; + } + } + + const nameParts = claim_name.toLowerCase().split('-'); + if (arrayContainsQueryPart(nameParts)) { + downloadResultsFromQuery.push(fileInfo); + return; + } + + const titleParts = title.toLowerCase().split(' '); + if (arrayContainsQueryPart(titleParts)) { + downloadResultsFromQuery.push(fileInfo); + return; + } + + if (author) { + const authorParts = author.toLowerCase().split(' '); + if (arrayContainsQueryPart(authorParts)) { + downloadResultsFromQuery.push(fileInfo); + return; + } + } + + if (description) { + const descriptionParts = description.toLowerCase().split(' '); + if (arrayContainsQueryPart(descriptionParts)) { + downloadResultsFromQuery.push(fileInfo); + } + } + }); + + return downloadResultsFromQuery.length + ? downloadResultsFromQuery.map(fileInfo => { + const { + channel_name: channelName, + claim_id: claimId, + claim_name: claimName, + value, + metadata, + } = fileInfo; + const uriParams = {}; + + if (channelName) { + uriParams.channelName = channelName; + } + + uriParams.claimId = claimId; + uriParams.claimId = claimId; + uriParams.contentName = claimName; + + const uri = buildURI(uriParams); + return uri; + }) + : null; + }); diff --git a/src/renderer/redux/selectors/navigation.js b/src/renderer/redux/selectors/navigation.js index fdee0783d..f4acc3034 100644 --- a/src/renderer/redux/selectors/navigation.js +++ b/src/renderer/redux/selectors/navigation.js @@ -1,6 +1,5 @@ import { createSelector } from 'reselect'; -import { parseQueryParams, toQueryString } from 'util/query_params'; -import { normalizeURI } from 'lbryURI'; +import { parseQueryParams } from 'util/query_params'; export const selectState = state => state.navigation || {}; @@ -22,103 +21,6 @@ export const selectCurrentParams = createSelector(selectCurrentPath, path => { export const makeSelectCurrentParam = param => createSelector(selectCurrentParams, params => (params ? params[param] : undefined)); -export const selectHeaderLinks = createSelector(selectCurrentPage, page => { - // This contains intentional fall throughs - switch (page) { - case 'wallet': - case 'history': - case 'send': - case 'getcredits': - case 'invite': - case 'rewards': - case 'backup': - return { - wallet: __('Overview'), - getcredits: __('Get Credits'), - send: __('Send / Receive'), - rewards: __('Rewards'), - invite: __('Invites'), - history: __('History'), - }; - case 'downloaded': - case 'published': - return { - downloaded: __('Downloaded'), - published: __('Published'), - }; - case 'settings': - case 'help': - return { - settings: __('Settings'), - help: __('Help'), - }; - case 'discover': - case 'subscriptions': - return { - discover: __('Discover'), - subscriptions: __('Subscriptions'), - }; - default: - return null; - } -}); - -export const selectPageTitle = createSelector( - selectCurrentPage, - selectCurrentParams, - (page, params) => { - switch (page) { - case 'settings': - return __('Settings'); - case 'report': - return __('Report'); - case 'wallet': - return __('Wallet'); - case 'send': - return __('Send or Receive LBRY Credits'); - case 'getcredits': - return __('Get LBRY Credits'); - case 'backup': - return __('Backup Your Wallet'); - case 'rewards': - return __('Rewards'); - case 'invite': - return __('Invites'); - case 'start': - return __('Start'); - case 'publish': - return params.id ? __('Edit') : __('Publish'); - case 'help': - return __('Help'); - case 'developer': - return __('Developer'); - case 'show': { - const parts = [normalizeURI(params.uri)]; - // If the params has any keys other than "uri" - if (Object.keys(params).length > 1) { - parts.push(toQueryString(Object.assign({}, params, { uri: null }))); - } - return parts.join('?'); - } - case 'downloaded': - return __('Downloads & Purchases'); - case 'published': - return __('Publications'); - case 'search': - return params.query ? __('Search results for %s', params.query) : __('Search'); - case 'subscriptions': - return __('Your Subscriptions'); - case 'discover': - case false: - case null: - case '': - return ''; - default: - return page[0].toUpperCase() + (page.length > 0 ? page.substr(1) : ''); - } - } -); - export const selectPathAfterAuth = createSelector(selectState, state => state.pathAfterAuth); export const selectIsBackDisabled = createSelector(selectState, state => state.index === 0); @@ -128,6 +30,8 @@ export const selectIsForwardDisabled = createSelector( state => state.index === state.stack.length - 1 ); +export const selectIsHome = createSelector(selectCurrentPage, page => page === 'discover'); + export const selectHistoryIndex = createSelector(selectState, state => state.index); export const selectHistoryStack = createSelector(selectState, state => state.stack); @@ -137,3 +41,162 @@ export const selectActiveHistoryEntry = createSelector( selectState, state => state.stack[state.index] ); + +export const selectPageTitle = createSelector(selectCurrentPage, page => { + switch (page) { + default: + return ''; + } +}); + +export const selectNavLinks = createSelector( + selectCurrentPage, + selectHistoryStack, + (currentPage, historyStack) => { + const isWalletPage = page => + page === 'wallet' || + page === 'send' || + page === 'getcredits' || + page === 'rewards' || + page === 'history' || + page === 'invite'; + + const isMyLbryPage = page => + page === 'downloaded' || page === 'published' || page === 'settings'; + + const previousStack = historyStack.slice().reverse(); + + const getPreviousSubLinkPath = checkIfValidPage => { + for (let i = 0; i < previousStack.length; i += 1) { + const currentStackItem = previousStack[i]; + + // Trim off the "/" from the path + const pageInStack = currentStackItem.path.slice(1); + if (checkIfValidPage(pageInStack)) { + return currentStackItem.path; + } + } + + return undefined; + }; + + // Gets the last active sublink in a section + const getActiveSublink = category => { + if (category === 'wallet') { + const previousPath = getPreviousSubLinkPath(isWalletPage); + return previousPath || '/wallet'; + } else if (category === 'myLbry') { + const previousPath = getPreviousSubLinkPath(isMyLbryPage); + return previousPath || '/downloaded'; + } + + return undefined; + }; + + const isCurrentlyWalletPage = isWalletPage(currentPage); + const isCurrentlyMyLbryPage = isMyLbryPage(currentPage); + + const walletSubLinks = [ + { + label: 'Overview', + path: '/wallet', + active: currentPage === 'wallet', + }, + { + label: 'Send & Recieve', + path: '/send', + active: currentPage === 'send', + }, + { + label: 'Get Credits', + path: '/getcredits', + active: currentPage === 'getcredits', + }, + { + label: 'Rewards', + path: '/rewards', + active: currentPage === 'rewards', + }, + { + label: 'Invites', + path: '/invite', + active: currentPage === 'invite', + }, + { + label: 'Transactions', + path: '/history', + active: currentPage === 'history', + }, + ]; + + const myLbrySubLinks = [ + { + label: 'Downloads', + path: '/downloaded', + active: currentPage === 'downloaded', + }, + { + label: 'Publishes', + path: '/published', + active: currentPage === 'published', + }, + { + label: 'Settings', + path: '/settings', + active: currentPage === 'settings', + }, + { + label: 'Backup', + path: '/backup', + active: currentPage === 'backup', + }, + ]; + + const navLinks = { + primary: [ + { + label: 'Explore', + path: '/discover', + active: currentPage === 'discover', + icon: 'Compass', + }, + { + label: 'Subscriptions', + path: '/subscriptions', + active: currentPage === 'subscriptions', + icon: 'AtSign', + }, + ], + secondary: [ + { + label: 'Wallet', + icon: 'CreditCard', + subLinks: walletSubLinks, + path: isCurrentlyWalletPage ? '/wallet' : getActiveSublink('wallet'), + active: isWalletPage(currentPage), + }, + { + label: 'My LBRY', + icon: 'Settings', + subLinks: myLbrySubLinks, + path: isCurrentlyMyLbryPage ? '/downloaded' : getActiveSublink('myLbry'), + active: isMyLbryPage(currentPage), + }, + { + label: 'Publish', + icon: 'UploadCloud', + path: '/publish', + active: currentPage === 'publish', + }, + { + label: 'Help', + path: '/help', + active: currentPage === 'help', + icon: 'HelpCircle', + }, + ], + }; + + return navLinks; + } +); diff --git a/src/renderer/redux/selectors/publish.js b/src/renderer/redux/selectors/publish.js new file mode 100644 index 000000000..38d7c67cc --- /dev/null +++ b/src/renderer/redux/selectors/publish.js @@ -0,0 +1,26 @@ +import { createSelector } from 'reselect'; +import { parseURI } from 'lbryURI'; + +const selectState = state => state.publish || {}; + +export const selectPendingPublishes = createSelector(selectState, state => { + return state.pendingPublishes.map(pendingClaim => ({ ...pendingClaim, pending: true })) || []; +}); + +export const selectPublishFormValues = createSelector(selectState, state => { + const { pendingPublish, ...formValues } = state; + return formValues; +}); + +export const selectPendingPublish = uri => + createSelector(selectPendingPublishes, pendingPublishes => { + const { claimName, contentName } = parseURI(uri); + + if (!pendingPublishes.length) { + return null; + } + + return pendingPublishes.filter( + publish => publish.name === claimName || publish.name === contentName + )[0]; + }); diff --git a/src/renderer/redux/selectors/search.js b/src/renderer/redux/selectors/search.js index 4e49f47d8..c7e983ced 100644 --- a/src/renderer/redux/selectors/search.js +++ b/src/renderer/redux/selectors/search.js @@ -1,12 +1,12 @@ -import { - selectCurrentPage, - selectCurrentParams, - selectPageTitle, -} from 'redux/selectors/navigation'; +import { selectCurrentPage, selectCurrentParams } from 'redux/selectors/navigation'; import { createSelector } from 'reselect'; export const selectState = state => state.search || {}; +export const selectSearchValue = createSelector(selectState, state => { + return state.searchQuery; +}); + export const selectSearchQuery = createSelector( selectCurrentPage, selectCurrentParams, @@ -26,54 +26,14 @@ export const makeSelectSearchUris = query => export const selectWunderBarAddress = createSelector( selectCurrentPage, - selectPageTitle, selectSearchQuery, - (page, title, query) => (page !== 'search' ? title : query || title) -); - -export const selectWunderBarIcon = createSelector( - selectCurrentPage, selectCurrentParams, - (page, params) => { - switch (page) { - case 'auth': - return 'icon-user'; - case 'settings': - return 'icon-gear'; - case 'help': - return 'icon-question'; - case 'report': - return 'icon-file'; - case 'downloaded': - return 'icon-folder'; - case 'published': - return 'icon-folder'; - case 'history': - return 'icon-history'; - case 'send': - return 'icon-send'; - case 'rewards': - return 'icon-rocket'; - case 'invite': - return 'icon-envelope-open'; - case 'getcredits': - return 'icon-shopping-cart'; - case 'wallet': - case 'backup': - return 'icon-bank'; - case 'show': - return 'icon-file'; - case 'publish': - return params.id ? __('icon-pencil') : __('icon-upload'); - case 'developer': - return 'icon-code'; - case 'discover': - case 'search': - return 'icon-search'; - case 'subscriptions': - return 'icon-th-list'; - default: - return 'icon-file'; + (page, query, params) => { + // only populate the wunderbar address if we are on the file/channel pages + // or show the search query + if (page === 'show') { + return params.uri; } + return query; } ); diff --git a/src/renderer/redux/selectors/video.js b/src/renderer/redux/selectors/video.js deleted file mode 100644 index 62534be6b..000000000 --- a/src/renderer/redux/selectors/video.js +++ /dev/null @@ -1,6 +0,0 @@ -import { createSelector } from 'reselect'; - -const selectState = state => state.video || {}; - -// eslint-disable-next-line import/prefer-default-export -export const selectVideoPause = createSelector(selectState, state => state.videoPause); diff --git a/src/renderer/redux/selectors/wallet.js b/src/renderer/redux/selectors/wallet.js index bddedb8f4..d5fd9326d 100644 --- a/src/renderer/redux/selectors/wallet.js +++ b/src/renderer/redux/selectors/wallet.js @@ -96,26 +96,6 @@ export const selectGettingNewAddress = createSelector( state => state.gettingNewAddress ); -export const selectDraftTransaction = createSelector( - selectState, - state => state.draftTransaction || {} -); - -export const selectDraftTransactionAmount = createSelector( - selectDraftTransaction, - draft => draft.amount -); - -export const selectDraftTransactionAddress = createSelector( - selectDraftTransaction, - draft => draft.address -); - -export const selectDraftTransactionError = createSelector( - selectDraftTransaction, - draft => draft.error -); - export const selectBlocks = createSelector(selectState, state => state.blocks); export const makeSelectBlockDate = block => diff --git a/src/renderer/scss/_gui.scss b/src/renderer/scss/_gui.scss index 92b82d146..3a6bdae70 100644 --- a/src/renderer/scss/_gui.scss +++ b/src/renderer/scss/_gui.scss @@ -1,14 +1,235 @@ -@import url(https://fonts.googleapis.com/css?family=Roboto:400,400i,500,500i,700); +// Generic html styles used accross the App +// component specific styling should go in the component scss file + +@font-face { + font-family: 'metropolis-bold'; + src: url('../../../static/font/metropolis/bold.eot'); + src: url('../../../static/font/metropolis/bold.eot?#iefix') format('embedded-opentype'), + url('../../../static/font/metropolis/bold.woff') format('woff'), + url('../../../static/font/metropolis/bold.ttf') format('truetype'), + url('../../../static/font/metropolis/bold.svg#metropolis-bold') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'metropolis-semibold'; + src: url('../../../static/font/metropolis/semibold.eot'); + src: url('../../../static/font/metropolis/semibold.eot?#iefix') format('embedded-opentype'), + url('../../../static/font/metropolis/semibold.woff') format('woff'), + url('../../../static/font/metropolis/semibold.ttf') format('truetype'), + url('../../../static/font/metropolis/semibold.svg#metropolis-semibold') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'metropolis-medium'; + src: url('../../../static/font/metropolis/medium.eot'); + src: url('../../../static/font/metropolis/medium.eot?#iefix') format('embedded-opentype'), + url('../../../static/font/metropolis/medium.woff') format('woff'), + url('../../../static/font/metropolis/medium.ttf') format('truetype'), + url('../../../static/font/metropolis/medium.svg#metropolis-medium') format('svg'); + font-weight: normal; + font-style: normal; +} html { height: 100%; - font-size: var(--font-size); } body { + font-family: 'metropolis-semibold'; + font-weight: 400; + font-size: 16px; + line-height: 1.5; color: var(--text-color); - font-family: 'Roboto', sans-serif; - line-height: var(--font-line-height); + height: 100%; + overflow: hidden; +} + +* { + box-sizing: border-box; +} + +code { + font: 1.5em Consolas, 'Lucida Console', 'Source Sans', monospace; + background-color: var(--color-bg-alt); +} + +// Without this buttons don't have the Metropolis font +button { + font-weight: inherit; + font-family: inherit; +} + +ul { + list-style-type: none; + padding: 0; +} + +input { + border-bottom: var(--input-border-size) dotted var(--input-border-color); + color: var(--input-color); + line-height: 1; + cursor: text; + background-color: transparent; + font-family: 'metropolis-medium'; + + &[type='radio'], + &[type='checkbox'], + &[type='file'], + &[type='select'] { + cursor: pointer; + } + + &[type='file'] { + border-bottom: none; + } + + &.input-copyable { + flex: 1; + background: var(--input-copyable-bg); + color: var(--input-copyable-color); + padding: 10px 16px; + border: 1px dashed var(--input-copyable-border); + } + + &:not(.input-copyable):not(.wunderbar__input):not(:placeholder-shown) { + border-bottom: var(--input-border-size) solid var(--input-border-color); + } + + &:disabled { + color: var(--input-disabled-color); + border-bottom: var(--input-border-size) solid var(--input-disabled-color); + cursor: default; + } +} + +input::placeholder { + opacity: 0.5; +} + +button + input { + margin-left: $spacing-vertical * 2/3; +} + +dl { + width: 100%; + overflow: hidden; + padding: 0; + margin: 0; + overflow-x: scroll; +} + +dt { + float: left; + width: 20%; + padding: 0; + margin: 0; +} + +dd { + float: left; + width: 80%; + padding: 0; + margin: 0; +} + +p { + font-family: 'metropolis-medium'; +} + +.page { + display: grid; + grid-template-rows: var(--header-height) calc(100vh - var(--header-height)); + grid-template-columns: var(--side-nav-width) auto; + grid-template-areas: + 'nav header' + 'nav content'; + background-color: var(--color-bg); + + @media only screen and (min-width: $medium-breakpoint) { + grid-template-columns: var(--side-nav-width-m) auto; + } + + @media only screen and (min-width: $large-breakpoint) { + grid-template-columns: var(--side-nav-width-l) auto; + } +} + +/* + Page content +*/ +.content { + grid-area: content; + overflow: auto; +} + +.main { + padding: $spacing-width $spacing-width; + margin: auto; +} + +.main--contained { + max-width: 1000px; + margin: 0 80px - $spacing-width; + + @media only screen and (min-width: $medium-breakpoint) { + margin: 0 120px - $spacing-width; + } + + @media only screen and (min-width: $large-breakpoint) { + margin: 0 200px - $spacing-width; + } +} + +.main--no-padding { + padding-left: 0; + padding-right: 0; + margin: 0; +} + +.main--extra-padding { + padding-left: 100px; + padding-right: 100px; +} + +.page__header { + padding: $spacing-vertical * 2/3; + padding-bottom: 0; +} + +.page__title { + // not currently using page titles on any page +} + +.page__empty { + margin-top: 200px; + text-align: center; + font-family: 'metropolis-medium'; +} + +.columns { + display: flex; + justify-content: space-between; + + > * { + flex-grow: 1; + flex-basis: 0; + + &:not(:first-of-type):not(:last-of-type) { + margin: 0 $spacing-vertical / 3; + } + + &:first-of-type { + margin-right: $spacing-vertical / 3; + } + + &:last-of-type { + margin-left: $spacing-vertical / 3; + } + } } /* Custom text selection */ @@ -17,111 +238,47 @@ body { color: var(--text-selection-color); } -#window { - min-height: 100vh; - background: var(--window-bg); +.credit-amount { + padding: 5px; + border-radius: 5px; + font-family: 'metropolis-bold'; + font-size: 8px; } -.credit-amount--indicator { - font-weight: 500; - color: var(--color-money); -} -.credit-amount--fee { - font-size: 0.9em; - color: var(--color-meta-light); +.credit-amount--large { + font-family: 'metropolis-semibold'; + font-size: 36px; } -.credit-amount--bold { - font-weight: 700; +.credit-amount--free { + color: var(--color-dark-blue); + background-color: var(--color-secondary); } -#main-content { - margin: auto; - display: flex; - flex-direction: column; - overflow: overlay; - padding: $spacing-vertical; - position: absolute; - top: var(--header-height); - bottom: 0; - left: 4px; - right: 4px; - main { - margin-left: auto; - margin-right: auto; - max-width: 100%; - } - main.main--single-column { - width: $width-page-constrained; - } - - main.main--no-margin { - margin-left: 0; - margin-right: 0; - } +.credit-amount--cost { + color: var(--color-black); + background-color: var(--color-yellow); } -.reloading { - &:before { - $width: 30px; - position: absolute; - background: url('../../../static/img/busy.gif') no-repeat center center; - width: $width; - height: $spacing-vertical; - content: ''; - left: 50%; - margin-left: -1 / 2 * $width; - display: inline-block; - } +.credit-amount--plain { + background-color: inherit; + color: inherit; + font-weight: inherit; + font-size: inherit; } -.icon-fixed-width { - /* This borrowed is from a component of Font Awesome we're not using, maybe add it? */ - width: (18em / 14); - text-align: center; +.credit-amount.credit-amount--no-style { + padding: 0; + font-size: inherit; + font-weight: inherit; + color: inherit; + background-color: transparent; + font-family: 'metropolis-medium'; } -.icon--left-pad { - padding-left: 3px; -} - -h2 { - font-size: 1.75em; -} - -h3 { - font-size: 1.4em; -} - -h4 { - font-size: 1.2em; -} - -h5 { - font-size: 1.1em; -} -sup, -sub { - vertical-align: baseline; - position: relative; -} -sup { - top: -0.4em; -} -sub { - top: 0.4em; -} - -code { - font: 0.8em Consolas, 'Lucida Console', 'Source Sans', monospace; - background-color: var(--color-bg-alt); -} - -p { - margin-bottom: 0.8em; - &:last-child { - margin-bottom: 0; - } +.divider__horizontal { + border-top: var(--color-divider); + margin: 16px 0; } .hidden { @@ -141,6 +298,10 @@ p { } .busy-indicator { + font-family: 'metropolis-medium'; +} + +.busy-indicator__loader { background: url('../../../static/img/busy.gif') no-repeat center center; display: inline-block; margin: -1em 0; @@ -157,12 +318,18 @@ p { } .help { - font-size: 0.85em; + font-size: 12px; + font-family: 'metropolis-medium'; color: var(--color-help); } +.help--padded { + padding-top: $spacing-vertical * 2/3; +} + .meta { - font-size: 0.9em; + font-family: 'metropolis-medium'; + font-size: 14px; color: var(--color-meta-light); } @@ -170,29 +337,3 @@ p { color: var(--color-meta-light); font-style: italic; } - -/*should be redone/moved*/ -.file-list__header { - .busy-indicator { - float: left; - margin-top: 12px; - } -} - -.sort-section { - display: block; - margin-bottom: $spacing-vertical * 2/3; - - text-align: right; - line-height: 1; - font-size: 0.85em; - color: var(--color-help); -} - -section.section-spaced { - margin-bottom: $spacing-vertical; -} - -.text-center { - text-align: center; -} diff --git a/src/renderer/scss/_icons.scss b/src/renderer/scss/_icons.scss deleted file mode 100644 index c589a1ac5..000000000 --- a/src/renderer/scss/_icons.scss +++ /dev/null @@ -1,1678 +0,0 @@ -@font-face { - font-family: 'FontAwesome'; - src: url('../../../static/font/fontawesome-webfont.eot?v=4.7.0'); - src: url('../../../static/font/fontawesome-webfont.eot?#iefix&v=4.7.0') - format('embedded-opentype'), - url('../../../static/font/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), - url('../../../static/font/fontawesome-webfont.woff?v=4.7.0') format('woff'), - url('../../../static/font/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), - url('../../../static/font/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class*='icon-'] { - display: inline-block; - text-align: center; - font-family: 'FontAwesome'; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - speak: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-size: inherit; - text-rendering: auto; - transform: translate(0, 0); -} - -/* Adjustments for icon size and alignment */ -.icon-rocket { - color: orangered; - font-size: 0.95em; - position: relative; - top: -0.04em; - margin-left: 0.025em; - margin-right: 0.025em; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.icon-glass:before { - content: '\f000'; -} -.icon-music:before { - content: '\f001'; -} -.icon-search:before { - content: '\f002'; -} -.icon-envelope-o:before { - content: '\f003'; -} -.icon-heart:before { - content: '\f004'; -} -.icon-star:before { - content: '\f005'; -} -.icon-star-o:before { - content: '\f006'; -} -.icon-user:before { - content: '\f007'; -} -.icon-film:before { - content: '\f008'; -} -.icon-th-large:before { - content: '\f009'; -} -.icon-th:before { - content: '\f00a'; -} -.icon-th-list:before { - content: '\f00b'; -} -.icon-check:before { - content: '\f00c'; -} -.icon-remove:before, -.icon-close:before, -.icon-times:before { - content: '\f00d'; -} -.icon-search-plus:before { - content: '\f00e'; -} -.icon-search-minus:before { - content: '\f010'; -} -.icon-power-off:before { - content: '\f011'; -} -.icon-signal:before { - content: '\f012'; -} -.icon-gear:before, -.icon-cog:before { - content: '\f013'; -} -.icon-trash-o:before { - content: '\f014'; -} -.icon-home:before { - content: '\f015'; -} -.icon-file-o:before { - content: '\f016'; -} -.icon-clock-o:before { - content: '\f017'; -} -.icon-road:before { - content: '\f018'; -} -.icon-download:before { - content: '\f019'; -} -.icon-arrow-circle-o-down:before { - content: '\f01a'; -} -.icon-arrow-circle-o-up:before { - content: '\f01b'; -} -.icon-inbox:before { - content: '\f01c'; -} -.icon-play-circle-o:before { - content: '\f01d'; -} -.icon-rotate-right:before, -.icon-repeat:before { - content: '\f01e'; -} -.icon-refresh:before { - content: '\f021'; -} -.icon-list-alt:before { - content: '\f022'; -} -.icon-lock:before { - content: '\f023'; -} -.icon-flag:before { - content: '\f024'; -} -.icon-headphones:before { - content: '\f025'; -} -.icon-volume-off:before { - content: '\f026'; -} -.icon-volume-down:before { - content: '\f027'; -} -.icon-volume-up:before { - content: '\f028'; -} -.icon-qrcode:before { - content: '\f029'; -} -.icon-barcode:before { - content: '\f02a'; -} -.icon-tag:before { - content: '\f02b'; -} -.icon-tags:before { - content: '\f02c'; -} -.icon-book:before { - content: '\f02d'; -} -.icon-bookmark:before { - content: '\f02e'; -} -.icon-print:before { - content: '\f02f'; -} -.icon-camera:before { - content: '\f030'; -} -.icon-font:before { - content: '\f031'; -} -.icon-bold:before { - content: '\f032'; -} -.icon-italic:before { - content: '\f033'; -} -.icon-text-height:before { - content: '\f034'; -} -.icon-text-width:before { - content: '\f035'; -} -.icon-align-left:before { - content: '\f036'; -} -.icon-align-center:before { - content: '\f037'; -} -.icon-align-right:before { - content: '\f038'; -} -.icon-align-justify:before { - content: '\f039'; -} -.icon-list:before { - content: '\f03a'; -} -.icon-dedent:before, -.icon-outdent:before { - content: '\f03b'; -} -.icon-indent:before { - content: '\f03c'; -} -.icon-video-camera:before { - content: '\f03d'; -} -.icon-photo:before, -.icon-image:before, -.icon-picture-o:before { - content: '\f03e'; -} -.icon-pencil:before { - content: '\f040'; -} -.icon-map-marker:before { - content: '\f041'; -} -.icon-adjust:before { - content: '\f042'; -} -.icon-tint:before { - content: '\f043'; -} -.icon-edit:before, -.icon-pencil-square-o:before { - content: '\f044'; -} -.icon-share-square-o:before { - content: '\f045'; -} -.icon-check-square-o:before { - content: '\f046'; -} -.icon-arrows:before { - content: '\f047'; -} -.icon-step-backward:before { - content: '\f048'; -} -.icon-fast-backward:before { - content: '\f049'; -} -.icon-backward:before { - content: '\f04a'; -} -.icon-play:before { - content: '\f04b'; -} -.icon-pause:before { - content: '\f04c'; -} -.icon-stop:before { - content: '\f04d'; -} -.icon-forward:before { - content: '\f04e'; -} -.icon-fast-forward:before { - content: '\f050'; -} -.icon-step-forward:before { - content: '\f051'; -} -.icon-eject:before { - content: '\f052'; -} -.icon-chevron-left:before { - content: '\f053'; -} -.icon-chevron-right:before { - content: '\f054'; -} -.icon-plus-circle:before { - content: '\f055'; -} -.icon-minus-circle:before { - content: '\f056'; -} -.icon-times-circle:before { - content: '\f057'; -} -.icon-check-circle:before { - content: '\f058'; -} -.icon-question-circle:before { - content: '\f059'; -} -.icon-info-circle:before { - content: '\f05a'; -} -.icon-crosshairs:before { - content: '\f05b'; -} -.icon-times-circle-o:before { - content: '\f05c'; -} -.icon-check-circle-o:before { - content: '\f05d'; -} -.icon-ban:before { - content: '\f05e'; -} -.icon-arrow-left:before { - content: '\f060'; -} -.icon-arrow-right:before { - content: '\f061'; -} -.icon-arrow-up:before { - content: '\f062'; -} -.icon-arrow-down:before { - content: '\f063'; -} -.icon-mail-forward:before, -.icon-share:before { - content: '\f064'; -} -.icon-expand:before { - content: '\f065'; -} -.icon-compress:before { - content: '\f066'; -} -.icon-plus:before { - content: '\f067'; -} -.icon-minus:before { - content: '\f068'; -} -.icon-asterisk:before { - content: '\f069'; -} -.icon-exclamation-circle:before { - content: '\f06a'; -} -.icon-gift:before { - content: '\f06b'; -} -.icon-leaf:before { - content: '\f06c'; -} -.icon-fire:before { - content: '\f06d'; -} -.icon-eye:before { - content: '\f06e'; -} -.icon-eye-slash:before { - content: '\f070'; -} -.icon-warning:before, -.icon-exclamation-triangle:before { - content: '\f071'; -} -.icon-plane:before { - content: '\f072'; -} -.icon-calendar:before { - content: '\f073'; -} -.icon-random:before { - content: '\f074'; -} -.icon-comment:before { - content: '\f075'; -} -.icon-magnet:before { - content: '\f076'; -} -.icon-chevron-up:before { - content: '\f077'; -} -.icon-chevron-down:before { - content: '\f078'; -} -.icon-retweet:before { - content: '\f079'; -} -.icon-shopping-cart:before { - content: '\f07a'; -} -.icon-folder:before { - content: '\f07b'; -} -.icon-folder-open:before { - content: '\f07c'; -} -.icon-arrows-v:before { - content: '\f07d'; -} -.icon-arrows-h:before { - content: '\f07e'; -} -.icon-bar-chart-o:before, -.icon-bar-chart:before { - content: '\f080'; -} -.icon-twitter-square:before { - content: '\f081'; -} -.icon-facebook-square:before { - content: '\f082'; -} -.icon-camera-retro:before { - content: '\f083'; -} -.icon-key:before { - content: '\f084'; -} -.icon-gears:before, -.icon-cogs:before { - content: '\f085'; -} -.icon-comments:before { - content: '\f086'; -} -.icon-thumbs-o-up:before { - content: '\f087'; -} -.icon-thumbs-o-down:before { - content: '\f088'; -} -.icon-star-half:before { - content: '\f089'; -} -.icon-heart-o:before { - content: '\f08a'; -} -.icon-sign-out:before { - content: '\f08b'; -} -.icon-linkedin-square:before { - content: '\f08c'; -} -.icon-thumb-tack:before { - content: '\f08d'; -} -.icon-external-link:before { - content: '\f08e'; -} -.icon-sign-in:before { - content: '\f090'; -} -.icon-trophy:before { - content: '\f091'; -} -.icon-github-square:before { - content: '\f092'; -} -.icon-upload:before { - content: '\f093'; -} -.icon-lemon-o:before { - content: '\f094'; -} -.icon-phone:before { - content: '\f095'; -} -.icon-square-o:before { - content: '\f096'; -} -.icon-bookmark-o:before { - content: '\f097'; -} -.icon-phone-square:before { - content: '\f098'; -} -.icon-twitter:before { - content: '\f099'; -} -.icon-facebook-f:before, -.icon-facebook:before { - content: '\f09a'; -} -.icon-github:before { - content: '\f09b'; -} -.icon-unlock:before { - content: '\f09c'; -} -.icon-credit-card:before { - content: '\f09d'; -} -.icon-rss:before { - content: '\f09e'; -} -.icon-hdd-o:before { - content: '\f0a0'; -} -.icon-bullhorn:before { - content: '\f0a1'; -} -.icon-bell:before { - content: '\f0f3'; -} -.icon-certificate:before { - content: '\f0a3'; -} -.icon-hand-o-right:before { - content: '\f0a4'; -} -.icon-hand-o-left:before { - content: '\f0a5'; -} -.icon-hand-o-up:before { - content: '\f0a6'; -} -.icon-hand-o-down:before { - content: '\f0a7'; -} -.icon-arrow-circle-left:before { - content: '\f0a8'; -} -.icon-arrow-circle-right:before { - content: '\f0a9'; -} -.icon-arrow-circle-up:before { - content: '\f0aa'; -} -.icon-arrow-circle-down:before { - content: '\f0ab'; -} -.icon-globe:before { - content: '\f0ac'; -} -.icon-wrench:before { - content: '\f0ad'; -} -.icon-tasks:before { - content: '\f0ae'; -} -.icon-filter:before { - content: '\f0b0'; -} -.icon-briefcase:before { - content: '\f0b1'; -} -.icon-arrows-alt:before { - content: '\f0b2'; -} -.icon-group:before, -.icon-users:before { - content: '\f0c0'; -} -.icon-chain:before, -.icon-link:before { - content: '\f0c1'; -} -.icon-cloud:before { - content: '\f0c2'; -} -.icon-flask:before { - content: '\f0c3'; -} -.icon-cut:before, -.icon-scissors:before { - content: '\f0c4'; -} -.icon-copy:before, -.icon-files-o:before { - content: '\f0c5'; -} -.icon-paperclip:before { - content: '\f0c6'; -} -.icon-save:before, -.icon-floppy-o:before { - content: '\f0c7'; -} -.icon-square:before { - content: '\f0c8'; -} -.icon-navicon:before, -.icon-reorder:before, -.icon-bars:before { - content: '\f0c9'; -} -.icon-list-ul:before { - content: '\f0ca'; -} -.icon-list-ol:before { - content: '\f0cb'; -} -.icon-strikethrough:before { - content: '\f0cc'; -} -.icon-underline:before { - content: '\f0cd'; -} -.icon-table:before { - content: '\f0ce'; -} -.icon-magic:before { - content: '\f0d0'; -} -.icon-truck:before { - content: '\f0d1'; -} -.icon-pinterest:before { - content: '\f0d2'; -} -.icon-pinterest-square:before { - content: '\f0d3'; -} -.icon-google-plus-square:before { - content: '\f0d4'; -} -.icon-google-plus:before { - content: '\f0d5'; -} -.icon-money:before { - content: '\f0d6'; -} -.icon-caret-down:before { - content: '\f0d7'; -} -.icon-caret-up:before { - content: '\f0d8'; -} -.icon-caret-left:before { - content: '\f0d9'; -} -.icon-caret-right:before { - content: '\f0da'; -} -.icon-columns:before { - content: '\f0db'; -} -.icon-unsorted:before, -.icon-sort:before { - content: '\f0dc'; -} -.icon-sort-down:before, -.icon-sort-desc:before { - content: '\f0dd'; -} -.icon-sort-up:before, -.icon-sort-asc:before { - content: '\f0de'; -} -.icon-envelope:before { - content: '\f0e0'; -} -.icon-linkedin:before { - content: '\f0e1'; -} -.icon-rotate-left:before, -.icon-undo:before { - content: '\f0e2'; -} -.icon-legal:before, -.icon-gavel:before { - content: '\f0e3'; -} -.icon-dashboard:before, -.icon-tachometer:before { - content: '\f0e4'; -} -.icon-comment-o:before { - content: '\f0e5'; -} -.icon-comments-o:before { - content: '\f0e6'; -} -.icon-flash:before, -.icon-bolt:before { - content: '\f0e7'; -} -.icon-sitemap:before { - content: '\f0e8'; -} -.icon-umbrella:before { - content: '\f0e9'; -} -.icon-paste:before, -.icon-clipboard:before { - content: '\f0ea'; -} -.icon-lightbulb-o:before { - content: '\f0eb'; -} -.icon-exchange:before { - content: '\f0ec'; -} -.icon-cloud-download:before { - content: '\f0ed'; -} -.icon-cloud-upload:before { - content: '\f0ee'; -} -.icon-user-md:before { - content: '\f0f0'; -} -.icon-stethoscope:before { - content: '\f0f1'; -} -.icon-suitcase:before { - content: '\f0f2'; -} -.icon-bell-o:before { - content: '\f0a2'; -} -.icon-coffee:before { - content: '\f0f4'; -} -.icon-cutlery:before { - content: '\f0f5'; -} -.icon-file-text-o:before { - content: '\f0f6'; -} -.icon-building-o:before { - content: '\f0f7'; -} -.icon-hospital-o:before { - content: '\f0f8'; -} -.icon-ambulance:before { - content: '\f0f9'; -} -.icon-medkit:before { - content: '\f0fa'; -} -.icon-fighter-jet:before { - content: '\f0fb'; -} -.icon-beer:before { - content: '\f0fc'; -} -.icon-h-square:before { - content: '\f0fd'; -} -.icon-plus-square:before { - content: '\f0fe'; -} -.icon-angle-double-left:before { - content: '\f100'; -} -.icon-angle-double-right:before { - content: '\f101'; -} -.icon-angle-double-up:before { - content: '\f102'; -} -.icon-angle-double-down:before { - content: '\f103'; -} -.icon-angle-left:before { - content: '\f104'; -} -.icon-angle-right:before { - content: '\f105'; -} -.icon-angle-up:before { - content: '\f106'; -} -.icon-angle-down:before { - content: '\f107'; -} -.icon-desktop:before { - content: '\f108'; -} -.icon-laptop:before { - content: '\f109'; -} -.icon-tablet:before { - content: '\f10a'; -} -.icon-mobile-phone:before, -.icon-mobile:before { - content: '\f10b'; -} -.icon-circle-o:before { - content: '\f10c'; -} -.icon-quote-left:before { - content: '\f10d'; -} -.icon-quote-right:before { - content: '\f10e'; -} -.icon-spinner:before { - content: '\f110'; -} -.icon-circle:before { - content: '\f111'; -} -.icon-mail-reply:before, -.icon-reply:before { - content: '\f112'; -} -.icon-github-alt:before { - content: '\f113'; -} -.icon-folder-o:before { - content: '\f114'; -} -.icon-folder-open-o:before { - content: '\f115'; -} -.icon-smile-o:before { - content: '\f118'; -} -.icon-frown-o:before { - content: '\f119'; -} -.icon-meh-o:before { - content: '\f11a'; -} -.icon-gamepad:before { - content: '\f11b'; -} -.icon-keyboard-o:before { - content: '\f11c'; -} -.icon-flag-o:before { - content: '\f11d'; -} -.icon-flag-checkered:before { - content: '\f11e'; -} -.icon-terminal:before { - content: '\f120'; -} -.icon-code:before { - content: '\f121'; -} -.icon-mail-reply-all:before, -.icon-reply-all:before { - content: '\f122'; -} -.icon-star-half-empty:before, -.icon-star-half-full:before, -.icon-star-half-o:before { - content: '\f123'; -} -.icon-location-arrow:before { - content: '\f124'; -} -.icon-crop:before { - content: '\f125'; -} -.icon-code-fork:before { - content: '\f126'; -} -.icon-unlink:before, -.icon-chain-broken:before { - content: '\f127'; -} -.icon-question:before { - content: '\f128'; -} -.icon-info:before { - content: '\f129'; -} -.icon-exclamation:before { - content: '\f12a'; -} -.icon-superscript:before { - content: '\f12b'; -} -.icon-subscript:before { - content: '\f12c'; -} -.icon-eraser:before { - content: '\f12d'; -} -.icon-puzzle-piece:before { - content: '\f12e'; -} -.icon-microphone:before { - content: '\f130'; -} -.icon-microphone-slash:before { - content: '\f131'; -} -.icon-shield:before { - content: '\f132'; -} -.icon-calendar-o:before { - content: '\f133'; -} -.icon-fire-extinguisher:before { - content: '\f134'; -} -.icon-rocket:before { - content: '\f135'; -} -.icon-maxcdn:before { - content: '\f136'; -} -.icon-chevron-circle-left:before { - content: '\f137'; -} -.icon-chevron-circle-right:before { - content: '\f138'; -} -.icon-chevron-circle-up:before { - content: '\f139'; -} -.icon-chevron-circle-down:before { - content: '\f13a'; -} -.icon-html5:before { - content: '\f13b'; -} -.icon-css3:before { - content: '\f13c'; -} -.icon-anchor:before { - content: '\f13d'; -} -.icon-unlock-alt:before { - content: '\f13e'; -} -.icon-bullseye:before { - content: '\f140'; -} -.icon-ellipsis-h:before { - content: '\f141'; -} -.icon-ellipsis-v:before { - content: '\f142'; -} -.icon-rss-square:before { - content: '\f143'; -} -.icon-play-circle:before { - content: '\f144'; -} -.icon-ticket:before { - content: '\f145'; -} -.icon-minus-square:before { - content: '\f146'; -} -.icon-minus-square-o:before { - content: '\f147'; -} -.icon-level-up:before { - content: '\f148'; -} -.icon-level-down:before { - content: '\f149'; -} -.icon-check-square:before { - content: '\f14a'; -} -.icon-pencil-square:before { - content: '\f14b'; -} -.icon-external-link-square:before { - content: '\f14c'; -} -.icon-share-square:before { - content: '\f14d'; -} -.icon-compass:before { - content: '\f14e'; -} -.icon-toggle-down:before, -.icon-caret-square-o-down:before { - content: '\f150'; -} -.icon-toggle-up:before, -.icon-caret-square-o-up:before { - content: '\f151'; -} -.icon-toggle-right:before, -.icon-caret-square-o-right:before { - content: '\f152'; -} -.icon-euro:before, -.icon-eur:before { - content: '\f153'; -} -.icon-gbp:before { - content: '\f154'; -} -.icon-dollar:before, -.icon-usd:before { - content: '\f155'; -} -.icon-rupee:before, -.icon-inr:before { - content: '\f156'; -} -.icon-cny:before, -.icon-rmb:before, -.icon-yen:before, -.icon-jpy:before { - content: '\f157'; -} -.icon-ruble:before, -.icon-rouble:before, -.icon-rub:before { - content: '\f158'; -} -.icon-won:before, -.icon-krw:before { - content: '\f159'; -} -.icon-bitcoin:before, -.icon-btc:before { - content: '\f15a'; -} -.icon-file:before { - content: '\f15b'; -} -.icon-file-text:before { - content: '\f15c'; -} -.icon-sort-alpha-asc:before { - content: '\f15d'; -} -.icon-sort-alpha-desc:before { - content: '\f15e'; -} -.icon-sort-amount-asc:before { - content: '\f160'; -} -.icon-sort-amount-desc:before { - content: '\f161'; -} -.icon-sort-numeric-asc:before { - content: '\f162'; -} -.icon-sort-numeric-desc:before { - content: '\f163'; -} -.icon-thumbs-up:before { - content: '\f164'; -} -.icon-thumbs-down:before { - content: '\f165'; -} -.icon-youtube-square:before { - content: '\f166'; -} -.icon-youtube:before { - content: '\f167'; -} -.icon-xing:before { - content: '\f168'; -} -.icon-xing-square:before { - content: '\f169'; -} -.icon-youtube-play:before { - content: '\f16a'; -} -.icon-dropbox:before { - content: '\f16b'; -} -.icon-stack-overflow:before { - content: '\f16c'; -} -.icon-instagram:before { - content: '\f16d'; -} -.icon-flickr:before { - content: '\f16e'; -} -.icon-adn:before { - content: '\f170'; -} -.icon-bitbucket:before { - content: '\f171'; -} -.icon-bitbucket-square:before { - content: '\f172'; -} -.icon-tumblr:before { - content: '\f173'; -} -.icon-tumblr-square:before { - content: '\f174'; -} -.icon-long-arrow-down:before { - content: '\f175'; -} -.icon-long-arrow-up:before { - content: '\f176'; -} -.icon-long-arrow-left:before { - content: '\f177'; -} -.icon-long-arrow-right:before { - content: '\f178'; -} -.icon-apple:before { - content: '\f179'; -} -.icon-windows:before { - content: '\f17a'; -} -.icon-android:before { - content: '\f17b'; -} -.icon-linux:before { - content: '\f17c'; -} -.icon-dribbble:before { - content: '\f17d'; -} -.icon-skype:before { - content: '\f17e'; -} -.icon-foursquare:before { - content: '\f180'; -} -.icon-trello:before { - content: '\f181'; -} -.icon-female:before { - content: '\f182'; -} -.icon-male:before { - content: '\f183'; -} -.icon-gittip:before, -.icon-gratipay:before { - content: '\f184'; -} -.icon-sun-o:before { - content: '\f185'; -} -.icon-moon-o:before { - content: '\f186'; -} -.icon-archive:before { - content: '\f187'; -} -.icon-bug:before { - content: '\f188'; -} -.icon-vk:before { - content: '\f189'; -} -.icon-weibo:before { - content: '\f18a'; -} -.icon-renren:before { - content: '\f18b'; -} -.icon-pagelines:before { - content: '\f18c'; -} -.icon-stack-exchange:before { - content: '\f18d'; -} -.icon-arrow-circle-o-right:before { - content: '\f18e'; -} -.icon-arrow-circle-o-left:before { - content: '\f190'; -} -.icon-toggle-left:before, -.icon-caret-square-o-left:before { - content: '\f191'; -} -.icon-dot-circle-o:before { - content: '\f192'; -} -.icon-wheelchair:before { - content: '\f193'; -} -.icon-vimeo-square:before { - content: '\f194'; -} -.icon-turkish-lira:before, -.icon-try:before { - content: '\f195'; -} -.icon-plus-square-o:before { - content: '\f196'; -} -.icon-space-shuttle:before { - content: '\f197'; -} -.icon-slack:before { - content: '\f198'; -} -.icon-envelope-square:before { - content: '\f199'; -} -.icon-wordpress:before { - content: '\f19a'; -} -.icon-openid:before { - content: '\f19b'; -} -.icon-institution:before, -.icon-bank:before, -.icon-university:before { - content: '\f19c'; -} -.icon-mortar-board:before, -.icon-graduation-cap:before { - content: '\f19d'; -} -.icon-yahoo:before { - content: '\f19e'; -} -.icon-google:before { - content: '\f1a0'; -} -.icon-reddit:before { - content: '\f1a1'; -} -.icon-reddit-square:before { - content: '\f1a2'; -} -.icon-stumbleupon-circle:before { - content: '\f1a3'; -} -.icon-stumbleupon:before { - content: '\f1a4'; -} -.icon-delicious:before { - content: '\f1a5'; -} -.icon-digg:before { - content: '\f1a6'; -} -.icon-pied-piper:before { - content: '\f1a7'; -} -.icon-pied-piper-alt:before { - content: '\f1a8'; -} -.icon-drupal:before { - content: '\f1a9'; -} -.icon-joomla:before { - content: '\f1aa'; -} -.icon-language:before { - content: '\f1ab'; -} -.icon-fax:before { - content: '\f1ac'; -} -.icon-building:before { - content: '\f1ad'; -} -.icon-child:before { - content: '\f1ae'; -} -.icon-paw:before { - content: '\f1b0'; -} -.icon-spoon:before { - content: '\f1b1'; -} -.icon-cube:before { - content: '\f1b2'; -} -.icon-cubes:before { - content: '\f1b3'; -} -.icon-behance:before { - content: '\f1b4'; -} -.icon-behance-square:before { - content: '\f1b5'; -} -.icon-steam:before { - content: '\f1b6'; -} -.icon-steam-square:before { - content: '\f1b7'; -} -.icon-recycle:before { - content: '\f1b8'; -} -.icon-automobile:before, -.icon-car:before { - content: '\f1b9'; -} -.icon-cab:before, -.icon-taxi:before { - content: '\f1ba'; -} -.icon-tree:before { - content: '\f1bb'; -} -.icon-spotify:before { - content: '\f1bc'; -} -.icon-deviantart:before { - content: '\f1bd'; -} -.icon-soundcloud:before { - content: '\f1be'; -} -.icon-database:before { - content: '\f1c0'; -} -.icon-file-pdf-o:before { - content: '\f1c1'; -} -.icon-file-word-o:before { - content: '\f1c2'; -} -.icon-file-excel-o:before { - content: '\f1c3'; -} -.icon-file-powerpoint-o:before { - content: '\f1c4'; -} -.icon-file-photo-o:before, -.icon-file-picture-o:before, -.icon-file-image-o:before { - content: '\f1c5'; -} -.icon-file-zip-o:before, -.icon-file-archive-o:before { - content: '\f1c6'; -} -.icon-file-sound-o:before, -.icon-file-audio-o:before { - content: '\f1c7'; -} -.icon-file-movie-o:before, -.icon-file-video-o:before { - content: '\f1c8'; -} -.icon-file-code-o:before { - content: '\f1c9'; -} -.icon-vine:before { - content: '\f1ca'; -} -.icon-codepen:before { - content: '\f1cb'; -} -.icon-jsfiddle:before { - content: '\f1cc'; -} -.icon-life-bouy:before, -.icon-life-buoy:before, -.icon-life-saver:before, -.icon-support:before, -.icon-life-ring:before { - content: '\f1cd'; -} -.icon-circle-o-notch:before { - content: '\f1ce'; -} -.icon-ra:before, -.icon-rebel:before { - content: '\f1d0'; -} -.icon-ge:before, -.icon-empire:before { - content: '\f1d1'; -} -.icon-git-square:before { - content: '\f1d2'; -} -.icon-git:before { - content: '\f1d3'; -} -.icon-hacker-news:before { - content: '\f1d4'; -} -.icon-tencent-weibo:before { - content: '\f1d5'; -} -.icon-qq:before { - content: '\f1d6'; -} -.icon-wechat:before, -.icon-weixin:before { - content: '\f1d7'; -} -.icon-send:before, -.icon-paper-plane:before { - content: '\f1d8'; -} -.icon-send-o:before, -.icon-paper-plane-o:before { - content: '\f1d9'; -} -.icon-history:before { - content: '\f1da'; -} -.icon-genderless:before, -.icon-circle-thin:before { - content: '\f1db'; -} -.icon-header:before { - content: '\f1dc'; -} -.icon-paragraph:before { - content: '\f1dd'; -} -.icon-sliders:before { - content: '\f1de'; -} -.icon-share-alt:before { - content: '\f1e0'; -} -.icon-share-alt-square:before { - content: '\f1e1'; -} -.icon-bomb:before { - content: '\f1e2'; -} -.icon-soccer-ball-o:before, -.icon-futbol-o:before { - content: '\f1e3'; -} -.icon-tty:before { - content: '\f1e4'; -} -.icon-binoculars:before { - content: '\f1e5'; -} -.icon-plug:before { - content: '\f1e6'; -} -.icon-slideshare:before { - content: '\f1e7'; -} -.icon-twitch:before { - content: '\f1e8'; -} -.icon-yelp:before { - content: '\f1e9'; -} -.icon-newspaper-o:before { - content: '\f1ea'; -} -.icon-wifi:before { - content: '\f1eb'; -} -.icon-calculator:before { - content: '\f1ec'; -} -.icon-paypal:before { - content: '\f1ed'; -} -.icon-google-wallet:before { - content: '\f1ee'; -} -.icon-cc-visa:before { - content: '\f1f0'; -} -.icon-cc-mastercard:before { - content: '\f1f1'; -} -.icon-cc-discover:before { - content: '\f1f2'; -} -.icon-cc-amex:before { - content: '\f1f3'; -} -.icon-cc-paypal:before { - content: '\f1f4'; -} -.icon-cc-stripe:before { - content: '\f1f5'; -} -.icon-bell-slash:before { - content: '\f1f6'; -} -.icon-bell-slash-o:before { - content: '\f1f7'; -} -.icon-trash:before { - content: '\f1f8'; -} -.icon-copyright:before { - content: '\f1f9'; -} -.icon-at:before { - content: '\f1fa'; -} -.icon-eyedropper:before { - content: '\f1fb'; -} -.icon-paint-brush:before { - content: '\f1fc'; -} -.icon-birthday-cake:before { - content: '\f1fd'; -} -.icon-area-chart:before { - content: '\f1fe'; -} -.icon-pie-chart:before { - content: '\f200'; -} -.icon-line-chart:before { - content: '\f201'; -} -.icon-lastfm:before { - content: '\f202'; -} -.icon-lastfm-square:before { - content: '\f203'; -} -.icon-toggle-off:before { - content: '\f204'; -} -.icon-toggle-on:before { - content: '\f205'; -} -.icon-bicycle:before { - content: '\f206'; -} -.icon-bus:before { - content: '\f207'; -} -.icon-ioxhost:before { - content: '\f208'; -} -.icon-angellist:before { - content: '\f209'; -} -.icon-cc:before { - content: '\f20a'; -} -.icon-shekel:before, -.icon-sheqel:before, -.icon-ils:before { - content: '\f20b'; -} -.icon-meanpath:before { - content: '\f20c'; -} -.icon-buysellads:before { - content: '\f20d'; -} -.icon-connectdevelop:before { - content: '\f20e'; -} -.icon-dashcube:before { - content: '\f210'; -} -.icon-forumbee:before { - content: '\f211'; -} -.icon-leanpub:before { - content: '\f212'; -} -.icon-sellsy:before { - content: '\f213'; -} -.icon-shirtsinbulk:before { - content: '\f214'; -} -.icon-simplybuilt:before { - content: '\f215'; -} -.icon-skyatlas:before { - content: '\f216'; -} -.icon-cart-plus:before { - content: '\f217'; -} -.icon-cart-arrow-down:before { - content: '\f218'; -} -.icon-diamond:before { - content: '\f219'; -} -.icon-ship:before { - content: '\f21a'; -} -.icon-user-secret:before { - content: '\f21b'; -} -.icon-motorcycle:before { - content: '\f21c'; -} -.icon-street-view:before { - content: '\f21d'; -} -.icon-heartbeat:before { - content: '\f21e'; -} -.icon-venus:before { - content: '\f221'; -} -.icon-mars:before { - content: '\f222'; -} -.icon-mercury:before { - content: '\f223'; -} -.icon-transgender:before { - content: '\f224'; -} -.icon-transgender-alt:before { - content: '\f225'; -} -.icon-venus-double:before { - content: '\f226'; -} -.icon-mars-double:before { - content: '\f227'; -} -.icon-venus-mars:before { - content: '\f228'; -} -.icon-mars-stroke:before { - content: '\f229'; -} -.icon-mars-stroke-v:before { - content: '\f22a'; -} -.icon-mars-stroke-h:before { - content: '\f22b'; -} -.icon-neuter:before { - content: '\f22c'; -} -.icon-facebook-official:before { - content: '\f230'; -} -.icon-pinterest-p:before { - content: '\f231'; -} -.icon-whatsapp:before { - content: '\f232'; -} -.icon-server:before { - content: '\f233'; -} -.icon-user-plus:before { - content: '\f234'; -} -.icon-user-times:before { - content: '\f235'; -} -.icon-hotel:before, -.icon-bed:before { - content: '\f236'; -} -.icon-viacoin:before { - content: '\f237'; -} -.icon-train:before { - content: '\f238'; -} -.icon-subway:before { - content: '\f239'; -} -.icon-medium:before { - content: '\f23a'; -} -.icon-address-book:before { - content: '\f2b9'; -} -.icon-envelope-open:before { - content: '\f2b6'; -} diff --git a/src/renderer/scss/_reset.scss b/src/renderer/scss/_reset.scss index b93394c96..b9e3eca1c 100644 --- a/src/renderer/scss/_reset.scss +++ b/src/renderer/scss/_reset.scss @@ -68,7 +68,7 @@ select { border: 0 none; } img { - width: auto\9; + width: auto; height: auto; vertical-align: middle; -ms-interpolation-mode: bicubic; diff --git a/src/renderer/scss/_vars.scss b/src/renderer/scss/_vars.scss index f05049912..0f0b4e797 100644 --- a/src/renderer/scss/_vars.scss +++ b/src/renderer/scss/_vars.scss @@ -2,69 +2,74 @@ Both of these should probably die and become variables as well */ $spacing-vertical: 24px; -$width-page-constrained: 800px; -$text-color: #000; +$spacing-width: 36px; + +$medium-breakpoint: 1280px; +$large-breakpoint: 1760px; :root { + /* Widths & spacings */ + --side-nav-width: 220px; + --side-nav-width-m: 240px; + --side-nav-width-l: 320px; + + --video-aspect-ratio: 56.25%; // 9 x 16 + --snack-bar-width: 756px; + /* Colors */ - --color-brand: #155b4a; - --color-primary: #155b4a; - --color-primary-light: saturate(lighten(#155b4a, 50%), 20%); - --color-light-alt: hsl(hue(#155b4a), 15, 85); + --color-white: #fff; + --color-black: #000; + --color-grey: #d6d6d6; + --color-grey-light: #f6f6f6; + --color-grey-dark: #888; + --color-primary: #44b098; + --color-primary-dark: #2c6e60; + --color-primary-light: #64c9b2; + --color-secondary: #6afbda; + --color-teal: #19a6a3; + --color-dark-blue: #2f6f61; + --color-light-blue: #49b2e2; + --color-red: #e2495e; + --color-yellow: #fbd55e; + --color-divider: #e3e3e3; + + --text-color: var(--color-black); + --text-color-inverse: var(--color-white); + --color-dark-overlay: rgba(32, 32, 32, 0.9); --color-help: rgba(0, 0, 0, 0.54); - --color-notice: #8a6d3b; --color-error: #a94442; - --color-load-screen-text: #c3c3c3; - --color-meta-light: #505050; - --color-money: #216c2a; - --color-download: rgba(0, 0, 0, 0.75); - --color-canvas: #f5f5f5; - --color-bg: #ffffff; - --color-bg-alt: #d9d9d9; - - /* Misc */ - --content-max-width: 1000px; - --nsfw-blur-intensity: 20px; - --height-video-embedded: $width-page-constrained * 9 / 16; - - /* Font */ - --font-size: 16px; - --font-line-height: 1.3333; - --font-size-subtext-multiple: 0.82; + --color-download: var(--color-white); + --color-download-overlay: var(--color-black); + --color-bg: #fafafa; + --color-bg-alt: var(--color-grey-light); + --color-placeholder: #ececec; + --color-nav-bg: var(--color-grey-light); /* Shadows */ - --box-shadow-layer: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); - --box-shadow-focus: 2px 4px 4px 0 rgba(0, 0, 0, 0.14), 2px 5px 3px -2px rgba(0, 0, 0, 0.2), - 2px 3px 7px 0 rgba(0, 0, 0, 0.12); - - /* Transition */ - --transition-duration: 0.225s; - --transition-type: ease; + --box-shadow-layer: 0 4px 9px -2px var(--color-grey); + --box-shadow-button: 0 10px 20px rgba(0, 0, 0, 0.1); + --box-shadow-wunderbar: 0px 10px 20px rgba(0, 0, 0, 0.03); /* Text */ - --text-color: $text-color; --text-help-color: #eee; --text-max-width: 660px; --text-link-padding: 4px; --text-selection-bg: rgba(saturate(lighten(#155b4a, 20%), 20%), 1); // temp color --text-selection-color: #fff; - /* Window */ - --window-bg: var(--color-canvas); - /* Form */ --form-label-color: rgba(0, 0, 0, 0.54); /* Input */ --input-bg: transparent; - --input-width: 330px; + --input-label-color: var(--color-grey-dark); --input-color: var(--text-color); - --input-border-size: 2px; - --input-border-color: rgba(0, 0, 0, 0.54); - - /* input:active */ - --input-active-bg: transparent; + --input-border-size: 1px; + --input-border-color: var(--color-grey-dark); + --input-copyable-bg: var(--color-grey-light); + --input-copyable-color: var(--color-grey-dark); + --input-copyable-border: var(--color-grey); /* input:disabled */ --input-disabled-border-color: rgba(0, 0, 0, 0.42); @@ -82,36 +87,32 @@ $text-color: #000; --select-height: 30px; /* Button */ - --button-bg: var(--color-bg-alt); - --button-color: #fff; - --button-primary-bg: var(--color-primary); - --button-primary-color: #fff; - --button-padding: $spacing-vertical * 2/3; - --button-height: $spacing-vertical * 1.5; - --button-intra-margin: $spacing-vertical; - --button-radius: 3px; + --btn-bg-primary: var(--color-primary); + --btn-color-primary: var(--color-white); + --btn-bg-primary-hover: var(--color-primary-light); + --btn-bg-alt: var(--color-white); + --btn-color-alt: var(--text-color); + --btn-color-inverse: var(--color-primary); + --btn-external-color: var(--color-light-blue); + --btn-bg-secondary: var(--color-teal); + --btn-bg-danger: var(--color-red); + --btn-radius: 20px; + --btn-height: 36px; /* Header */ - --header-bg: var(--color-bg); - --header-color: #666; + --header-bg: var(--color-white); + --header-color: var(--color-text); --header-active-color: rgba(0, 0, 0, 0.85); - --header-height: $spacing-vertical * 2.5; - --header-button-bg: transparent; //var(--button-bg); + --header-height: $spacing-width * 3; + --header-button-bg: transparent; --header-button-hover-bg: rgba(100, 100, 100, 0.15); /* Header -> search */ - --search-bg: rgba(255, 255, 255, 0.7); - --search-border: 1px solid #ccc; --search-color: #666; + --search-bg-color: #fff; --search-active-color: var(--header-active-color); - --search-active-shadow: 0 0 3px 0px var(--text-selection-bg); - - /* Tabs */ - --tab-bg: transparent; - --tab-color: rgba(0, 0, 0, 0.5); - --tab-active-color: var(--color-primary); - --tab-border-size: 2px; - --tab-border: var(--tab-border-size) solid var(--tab-active-color); + --search-active-shadow: 0 6px 9px -2px var(--color-grey--dark); + --search-modal-input-height: 70px; /* Table */ --table-border: 1px solid #e2e2e2; @@ -119,14 +120,12 @@ $text-color: #000; --table-item-odd: #f4f4f4; /* Card */ - --card-bg: var(--color-bg); - --card-hover-translate: 10px; - --card-margin: $spacing-vertical * 2/3; - --card-max-width: $width-page-constrained; - --card-padding: $spacing-vertical * 2/3; --card-radius: 2px; - --card-link-scaling: 1.1; - --card-small-width: $spacing-vertical * 10; + --card-margin: $spacing-vertical * 2/3; + --card-wallet-color: var(--text-color-inverse); + + /* File Tile Card */ + --file-tile--media-size: 60px; /* Modal */ --modal-width: 440px; @@ -134,16 +133,10 @@ $text-color: #000; --modal-overlay-bg: rgba(#f5f5f5, 0.75); // --color-canvas: #F5F5F5 --modal-border: 1px solid rgb(204, 204, 204); - /* Menu */ - --menu-bg: var(--color-bg); - --menu-radius: 2px; - --menu-item-hover-bg: var(--color-bg-alt); - - /* Tooltip */ + // /* Tooltip */ --tooltip-width: 300px; --tooltip-bg: var(--color-bg); --tooltip-color: var(--text-color); - --tooltip-border: 1px solid #aaa; /* Scrollbar */ --scrollbar-radius: 10px; @@ -152,10 +145,7 @@ $text-color: #000; --scrollbar-thumb-active-bg: var(--color-primary); --scrollbar-track-bg: transparent; - /* Divider */ - --divider: 1px solid rgba(0, 0, 0, 0.12); - - /* Animation :) */ + // /* Animation :) */ --animation-duration: 0.3s; --animation-style: cubic-bezier(0.55, 0, 0.1, 1); } diff --git a/src/renderer/scss/all.scss b/src/renderer/scss/all.scss index 7d39cb43a..db8defe00 100644 --- a/src/renderer/scss/all.scss +++ b/src/renderer/scss/all.scss @@ -1,14 +1,11 @@ @charset "UTF-8"; @import '_reset'; @import '_vars'; -@import '_icons'; @import '_gui'; @import 'component/_table'; @import 'component/_button.scss'; @import 'component/_card.scss'; @import 'component/_file-download.scss'; -@import 'component/_file-selector.scss'; -@import 'component/_file-tile.scss'; @import 'component/_form-field.scss'; @import 'component/_header.scss'; @import 'component/_menu.scss'; @@ -18,14 +15,11 @@ @import 'component/_notice.scss'; @import 'component/_modal.scss'; @import 'component/_snack-bar.scss'; -@import 'component/_video.scss'; +@import 'component/_content.scss'; @import 'component/_pagination.scss'; @import 'component/_markdown-editor.scss'; @import 'component/_scrollbar.scss'; -@import 'component/_tabs.scss'; -@import 'component/_divider.scss'; -@import 'component/_checkbox.scss'; -@import 'component/_radio.scss'; -@import 'component/_shapeshift.scss'; @import 'component/_spinner.scss'; -@import 'page/_show.scss'; +@import 'component/_nav.scss'; +@import 'component/_file-list.scss'; +@import 'component/_search.scss'; diff --git a/src/renderer/scss/component/__divider.scss b/src/renderer/scss/component/__divider.scss deleted file mode 100644 index 00fbb74eb..000000000 --- a/src/renderer/scss/component/__divider.scss +++ /dev/null @@ -1,8 +0,0 @@ -.divider__horizontal { - border-top: var(--divider); - margin: 16px 0; -} - -.divider__vertical { - margin: 10px; -} diff --git a/src/renderer/scss/component/_button.scss b/src/renderer/scss/component/_button.scss index 576ca4c33..8b19a4be9 100644 --- a/src/renderer/scss/component/_button.scss +++ b/src/renderer/scss/component/_button.scss @@ -1,89 +1,193 @@ -@import '../mixin/link.scss'; - -$button-focus-shift: 12%; - -.button-set-item { - position: relative; - display: inline-block; - - + .button-set-item { - margin-left: var(--button-intra-margin); - } +button:disabled { + cursor: default; } -.button-block, -.faux-button-block { - display: inline-block; - height: var(--button-height); - line-height: var(--button-height); +.btn { + border: none; text-decoration: none; - border: 0 none; - text-align: center; - border-radius: var(--button-radius); - text-transform: uppercase; - .icon { - top: 0em; + cursor: pointer; + position: relative; + padding: 10px; + height: var(--btn-height); + min-width: var(--btn-height); + border-radius: var(--btn-radius); + background-color: var(--btn-bg-primary); + color: var(--btn-color-primary); + display: flex; + align-items: center; + justify-content: center; + fill: currentColor; // for proper icon color + font-size: 12px; + transition: all var(--animation-duration) var(--animation-style); + font-family: 'metropolis-medium'; + + &:not(:disabled) { + box-shadow: var(--box-shadow-button); } - .icon:first-child { - padding-right: 5px; + + &:hover { + box-shadow: none; + background-color: var(--btn-bg-primary-hover); } - .icon:last-child { + + .icon + .btn__label { padding-left: 5px; } - .icon:only-child { - padding-left: 0; - padding-right: 0; - } -} -.button-block { - cursor: pointer; - font-weight: 500; - font-size: 14px; - user-select: none; - transition: background var(--animation-duration) var(--animation-style); } -.button__content { - margin: 0 var(--button-padding); - display: flex; - .link-label { - text-decoration: none !important; +.btn.btn--alt { + color: var(--btn-color-alt); + background-color: var(--btn-bg-alt); + + &:disabled { + color: var(--color-help); + background-color: transparent; } } -.button-primary { - color: var(--button-primary-color); - background-color: var(--button-primary-bg); - box-shadow: var(--box-shadow-layer); - - &:focus { - //color: var(--button-primary-active-color); - //background-color:color: var(--button-primary-active-bg); - //box-shadow: $box-shadow-focus; - } -} -.button-alt { - background-color: var(--button-bg); - box-shadow: var(--box-shadow-layer); +.btn.btn--danger { + background-color: var(--btn-bg-danger); } -.button-text { - @include text-link(); +.btn.btn--inverse { + background-color: transparent; + box-shadow: none; + color: var(--btn-color-inverse); +} + +.btn.btn--link { + padding: 0; + margin: 0; + background-color: inherit; + font-size: 1em; + color: var(--btn-color-inverse); + border-radius: 0; display: inline-block; + min-width: 0; + box-shadow: none; + text-align: left; +} - .button__content { - margin: 0 var(--text-link-padding); +.btn.btn--external-link { + color: var(--btn-external-color); +} + +.btn.btn--secondary { + background-color: var(--btn-bg-secondary); +} + +.btn.btn--no-style { + font-size: inherit; + font-weight: inherit; + color: inherit; + background-color: inherit; + border-radius: 0; + padding: 0; + margin: 0; + box-shadow: none; + min-width: 0; +} + +.btn--link, +.btn--no-style { + height: auto; + + .btn__label, + .btn__content { + padding: 0; } } -.button-text-help { - @include text-link(var(--text-help-color)); - font-size: 0.8em; -} -.button--flat { - box-shadow: none !important; + +.btn.btn--disabled:disabled { + cursor: default; + + &.btn--primary { + background-color: rgba(0, 0, 0, 0.5); + } + + &:hover { + box-shadow: none; + } } -.button--submit { - font-family: inherit; - line-height: 0; +.btn.btn--uppercase { + text-transform: uppercase; +} + +.btn:not(.btn--no-padding):not(.btn--link) { + .btn__content { + padding: 0 8px; + display: flex; + align-items: center; + } +} + +.icon + .btn__label, +.btn__label + .icon { + margin-left: 5px; +} + +/* + Everything below this is variations of the default button classes + You must pass in a className, props will not set these classes, + if you use these in several different places they should probably + be applied via props +*/ + +.btn.btn--home-nav { + box-shadow: none; + + .btn__content { + padding: 0; + } +} + +.btn.btn--arrow { + width: var(--btn-arrow-width); + + &:disabled { + opacity: 0.3; + } +} + +.btn--uri-indicator { + transition: color var(--animation-duration) var(--animation-duration); + + &:hover { + color: var(--color-light-blue); + } +} + +.btn.btn--header-balance { + font-family: 'metropolis-medium'; + font-size: 13px; + + @media only screen and (min-width: $medium-breakpoint) { + font-size: 18px; + } + + @media only screen and (min-width: $large-breakpoint) { + font-size: 21px; + } + + .btn__label--balance { + color: var(--color-grey-dark); + } + + &:hover { + background-color: transparent; + + .btn__label--balance { + color: var(--btn-primary-bg); + } + } +} + +.btn.btn--file-actions { + background-color: var(--color-black); + color: var(--color-white); + opacity: 0.8; + border-radius: var(--btn-radius); + height: var(--btn-height); + padding: 0 3px; } diff --git a/src/renderer/scss/component/_card.scss b/src/renderer/scss/component/_card.scss index cef50a1fb..5cb1baae9 100644 --- a/src/renderer/scss/component/_card.scss +++ b/src/renderer/scss/component/_card.scss @@ -1,322 +1,400 @@ .card { margin-left: auto; margin-right: auto; - max-width: var(--card-max-width); - background: var(--card-bg); - box-shadow: var(--box-shadow-layer); border-radius: var(--card-radius); - margin-bottom: var(--card-margin); overflow: auto; user-select: text; - - //below added to prevent scrollbar on long titles when show page loads, would prefer a cleaner CSS solution - overflow-x: hidden; -} -.card--obscured { - position: relative; -} -.card--obscured .card__inner { - filter: blur(var(--nsfw-blur-intensity)); -} -.card__title-primary, -.card__title-identity, -.card__content, -.card__subtext, -.card__actions { - padding: 0 var(--card-padding); -} - -.card--small { - .card__title-primary, - .card__title-identity, - .card__actions, - .card__content, - .card__subtext { - padding: 0 calc(var(--card-padding) / 2); - } -} -.card__title-primary { - margin-top: var(--card-margin); - margin-bottom: var(--card-margin); -} -.card__title-primary .meta { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.card__title-identity { - margin: 16px 0; -} -.card__actions { - margin-top: var(--card-margin); - margin-bottom: var(--card-margin); - user-select: none; -} -.card__actions--bottom { - margin-top: $spacing-vertical * 1/3; - margin-bottom: $spacing-vertical * 1/3; - border-top: var(--divider); -} -.card__actions--form-submit { - margin-top: $spacing-vertical; - margin-bottom: var(--card-margin); -} -.card__action--right { - float: right; -} -.card__content { - margin-top: var(--card-margin); - margin-bottom: var(--card-margin); - table:not(:last-child) { - margin-bottom: var(--card-margin); - } -} - -.card__actions--only-vertical { - margin-left: 0; - margin-right: 0; - padding-left: 0; - padding-right: 0; -} - -.card__content--extra-vertical-space { - margin: $spacing-vertical 0; -} - -$font-size-subtext-multiple: 0.82; -.card__subtext { - color: var(--color-meta-light); - font-size: calc(var(--font-size-subtext-multiple) * 1em); - margin-top: $spacing-vertical * 1/3; - margin-bottom: $spacing-vertical * 1/3; -} -.card__subtext--allow-newlines { - white-space: pre-wrap; -} -.card__subtext--two-lines { - height: calc( - var(--font-size) * var(--font-size-subtext-multiple) * var(--font-line-height) * 2 - ); /*this is so one line text still has the proper height*/ -} -.card-overlay { - position: absolute; - left: 0px; - right: 0px; - top: 0px; - bottom: 0px; - padding: 20px; - background-color: var(--color-dark-overlay); - color: #fff; display: flex; - align-items: center; - font-weight: 600; -} - -.card__link { - display: block; - cursor: pointer; -} -.card--link { - transition: transform 0.2s var(--animation-style); -} -.card--link:hover { position: relative; - z-index: 1; - box-shadow: var(--box-shadow-focus); - transform: scale(var(--card-link-scaling)) translateX(var(--card-hover-translate)); - transform-origin: 50% 50%; - overflow-x: visible; - overflow-y: visible; -} -.card--link:hover ~ .card--link { - transform: translateX(calc(var(--card-hover-translate) * 2)); + flex-direction: column; } -.card__media { - background-size: cover; - background-repeat: no-repeat; - background-position: 50% 50%; -} - -.card__media--autothumb { - position: relative; -} -.card__media--autothumb.purple { - background-color: #9c27b0; -} -.card__media--autothumb.red { - background-color: #e53935; -} -.card__media--autothumb.pink { - background-color: #e91e63; -} -.card__media--autothumb.indigo { - background-color: #3f51b5; -} -.card__media--autothumb.blue { - background-color: #2196f3; -} -.card__media--autothumb.light-blue { - background-color: #039be5; -} -.card__media--autothumb.cyan { - background-color: #00acc1; -} -.card__media--autothumb.teal { - background-color: #009688; -} -.card__media--autothumb.green { - background-color: #43a047; -} -.card__media--autothumb.yellow { - background-color: #ffeb3b; -} -.card__media--autothumb.orange { - background-color: #ffa726; -} - -.card__media--autothumb .card__autothumb__text { - font-size: 2em; - width: 100%; - color: #ffffff; - text-align: center; - position: absolute; - top: 36%; -} - -.card__indicators { - float: right; +.card--section { + background-color: var(--color-white); + padding: $spacing-vertical; + margin-top: $spacing-vertical * 2/3; } .card--small { width: var(--card-small-width); overflow-x: hidden; white-space: normal; -} -.card--small .card__media { - height: calc(var(--card-small-width) * 9 / 16); + + .card__media { + padding-top: var(--video-aspect-ratio); + } + + .card__media-text { + // for the weird padding required for dynamic height + // this lets the text sit in the middle instead of the bottom + margin-top: calc(var(--video-aspect-ratio) * -1); + } + + .channel-name { + font-size: 12px; + } } -.card--form { - width: calc(var(--input-width) + var(--card-padding) * 2); +.card--link { + cursor: pointer; +} + +.card--pending { + opacity: 0.5; +} + +.card--wallet-balance { + background: url('../../../static/img/stripe-background.png') no-repeat; + background-size: cover; + color: var(--card-wallet-color); + justify-content: space-between; + + .card__subtitle { + color: var(--card-wallet-color); + } +} + +.card--disabled { + opacity: 0.3; +} + +.card__media { + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 50%; + background-color: var(--color-placeholder); +} + +.card__media--no-img { + display: flex; + justify-content: center; + align-items: center; + position: relative; +} + +.card__media--nsfw { + background-color: var(--color-error); +} + +.card__title-identity--file { + display: flex; + align-items: center; + + .credit-amount, + .icon { + margin-top: $spacing-vertical * 1/3; + margin-left: $spacing-vertical * 2/3; + } +} + +.card__title-identity-icons { + display: flex; + align-items: center; + align-self: flex-start; +} + +.card__title { + font-size: 18px; +} + +.card__title--file { + font-family: 'metropolis-bold'; + font-size: 28px; + line-height: 36px; + padding-top: 20px; +} + +.card__title--small { + font-size: 14px; + line-height: 18px; + padding-top: 20px; +} + +.card__title--file { + padding-top: 0; + padding-bottom: 5px; } .card__subtitle { color: var(--color-help); - font-size: 0.85em; - line-height: calc(var(--font-line-height) * 1 / 0.85); + font-size: 14px; + font-family: 'metropolis-medium'; + + .icon { + margin-left: $spacing-vertical * 1/3; + } } -.card--file-subtitle { +.card__subtitle--file-info { display: flex; + align-items: center; } -// this is too specific -// it should be a helper class -// ex. ".m-padding-left" -// will come back to this during the redesign - sean -.card__publish-date { - padding-left: 20px; +.card__subtitle--block { + display: block; } -.card-series-submit { - margin-left: auto; - margin-right: auto; - max-width: var(--card-max-width); - padding: $spacing-vertical / 2; +.card__meta { + color: var(--color-help); + font-size: 14px; + font-family: 'metropolis-medium'; + padding-top: $spacing-vertical * 2/3; } -.card-row { - + .card-row { +// .card-media__internal__links should always be inside a card +.card { + .card-media__internal-links { + position: absolute; + top: $spacing-vertical * 2/3; + right: $spacing-vertical * 2/3; + } +} + +.card--small { + .card-media__internal-links { + top: $spacing-vertical * 1/3; + right: $spacing-vertical * 1/3; + } +} + +// Channel info with buttons on the right side +.card__channel-info { + display: flex; + justify-content: space-between; + align-items: center; + padding: $spacing-width 0; +} + +.card__channel-info--large { + padding-top: 0; + padding-bottom: $spacing-width; +} + +.card__content { + margin-top: var(--card-margin); +} + +.card__subtext-title { + color: var(--color-black); + font-size: calc(var(--font-size-subtext-multiple) * 1.5em); + + &:not(:first-of-type) { + margin-top: $spacing-vertical * 3/2; + } +} + +.card__subtext { + color: var(--color-grey-dark); + font-size: calc(var(--font-size-subtext-multiple) * 1em); + padding-top: $spacing-vertical * 1/3; + word-break: break-word; + font-family: 'metropolis-medium'; + font-size: 13px; +} + +.card__actions { + margin-top: var(--card-margin); + display: flex; + + &:not(.card__actions--vertical) .btn:nth-child(n + 2) { + margin-left: $spacing-vertical / 3; + } +} + +.card__actions--no-margin { + margin-top: 0; +} + +.card__actions--vertical { + flex-direction: column; + margin-top: 0; + align-items: flex-end; + + .btn:not(:first-child) { margin-top: $spacing-vertical * 1/3; } } -.card-row__placeholder { - padding-bottom: $spacing-vertical; -} +.card__actions--center { + align-items: center; + justify-content: center; -$padding-top-card-hover-hack: 20px; -$padding-right-card-hover-hack: 30px; - -.card-row__items { - width: 100%; - overflow: hidden; - - /*hacky way to give space for hover */ - padding-top: $padding-top-card-hover-hack; - margin-top: -1 * $padding-top-card-hover-hack; - padding-right: $padding-right-card-hover-hack; - margin-right: -1 * $padding-right-card-hover-hack; - > .card { - vertical-align: top; - display: inline-block; - } - > .card + .card { - margin-left: 16px; + .btn { + margin: 0 $spacing-vertical / 3; } } -.card-row--small { +.card__actions-top-corner { + position: absolute; + top: $spacing-vertical; + right: $spacing-vertical; +} + +/* + .card-row is used on the discover/subscriptions page + It is a list of cards that extend past the right edge of the screen + There are left/right arrows to scroll the cards and view hidden content +*/ +.card-row { overflow: hidden; white-space: nowrap; width: 100%; min-width: var(--card-small-width); - margin-right: $spacing-vertical; + padding-top: $spacing-vertical; + + &:first-of-type { + padding-top: 0; + } + + &:last-of-type { + padding-bottom: $spacing-vertical * 2/3; + } } + .card-row__header { - margin-bottom: 16px; + display: flex; + flex-direction: row; + justify-content: space-between; + // specific padding-left styling is needed here + // this needs to be used on a page with noPadding + // doing so allows the content to scroll to the edge of the screen + padding-left: $spacing-width; +} + +.card-row__title { + display: flex; + align-items: center; + font-size: 18px; + line-height: 24px; +} + +.card-row__scroll-btns { + display: flex; + padding-right: $spacing-width - 10px; // page padding - 1/2 width of arrow button } .card-row__scrollhouse { - position: relative; - /*hacky way to give space for hover */ - padding-right: $padding-right-card-hover-hack; -} + padding-top: $spacing-vertical * 2/3; + overflow: hidden; -.card-row__nav { - position: absolute; - padding: 0 var(--card-margin); - height: 100%; - top: calc($padding-top-card-hover-hack - var(--card-margin)); -} -.card-row__nav .card-row__scroll-button { - background: var(--card-bg); - color: var(--color-help); - box-shadow: var(--box-shadow-layer); - padding: $spacing-vertical $spacing-vertical / 2; - position: absolute; - cursor: pointer; - left: 0; - top: 36%; - z-index: 2; - opacity: 0.8; - transition: transform 0.2s var(--animation-style); - - &:hover { - opacity: 1; - transform: scale(calc(var(--card-link-scaling) * 1.1)); + .card:first-of-type { + margin-left: $spacing-width; + } + + .card:last-of-type { + margin-right: $spacing-vertical * 2/3; } -} -.card-row__nav--left { - left: 0; -} -.card-row__nav--right { - right: 0; } /* -if we keep doing things like this, we should add a real grid system, but I'm going to be a selective dick about it - Jeremy - */ -.card-grid { - $margin-card-grid: $spacing-vertical * 2/3; - display: flex; - flex-wrap: wrap; - > .card { - width: $width-page-constrained / 2 - $margin-card-grid / 2; - flex-grow: 1; + How cards are displayed in lists +*/ +.card__list { + .card { + display: inline-block; + vertical-align: top; + margin-bottom: 60px; + + @media only screen and (max-width: $medium-breakpoint) { + width: calc((100% / 3) - (40px / 3)); + + &:not(:nth-child(3n + 1)) { + margin-left: 20px; + } + } } - > .card:nth-of-type(2n - 1):not(:last-child) { - margin-right: $margin-card-grid; + + @media only screen and (min-width: $medium-breakpoint) { + .card { + width: calc((100% / 4) - (60px / 4)); + + &:not(:nth-child(4n + 1)) { + margin-left: 20px; + } + } + } +} + +.card__list--rewards { + .card { + display: inline-block; + width: calc(50% - 10px); + margin-bottom: 20px; + vertical-align: top; + + &:not(:nth-child(2n + 1)) { + margin-left: 20px; + } + } +} + +.card-row__scrollhouse { + padding-top: $spacing-vertical * 2/3; + overflow: hidden; + + .card { + display: inline-block; + vertical-align: top; + overflow: visible; + // -- three cards on a screen + // -- minus 12px for 1/3 of the page padding (36px) + // -- minus 20px for the card's margin + // Ideally we should be able to use $spacing-width / 3, but I'm not sure + // how inside the calc function + width: calc((100% / 3) - 12px - 20px); + } + + .card:not(:first-of-type) { + margin-left: 20px; + } + + .card:last-of-type { + margin-right: 20px; + } + + @media only screen and (min-width: $medium-breakpoint) { + .card { + width: calc((100% / 4) - 12px - 20px); + } + } +} + +.card__media--autothumb { + color: red !important; +} + +.card__media { + &.card__media--autothumb.purple { + background-color: #9c27b0; + } + &.card__media--autothumb.red { + background-color: #e53935; + } + &.card__media--autothumb.pink { + background-color: #e91e63; + } + &.card__media--autothumb.indigo { + background-color: #3f51b5; + } + &.card__media--autothumb.blue { + background-color: #2196f3; + } + &.card__media--autothumb.light-blue { + background-color: #039be5; + } + &.card__media--autothumb.cyan { + background-color: #00acc1; + } + &.card__media--autothumb.teal { + background-color: #009688; + } + &.card__media--autothumb.green { + background-color: #43a047; + } + &.card__media--autothumb.yellow { + background-color: #ffeb3b; + } + &.card__media--autothumb.orange { + background-color: #ffa726; } } diff --git a/src/renderer/scss/component/_channel-indicator.scss b/src/renderer/scss/component/_channel-indicator.scss index 7c437780c..2291cc933 100644 --- a/src/renderer/scss/component/_channel-indicator.scss +++ b/src/renderer/scss/component/_channel-indicator.scss @@ -5,12 +5,6 @@ text-overflow: ellipsis; } -// this shouldn't know about the card width -// will come back to this for the redesign - sean -.channel-name--small { - width: calc(var(--card-small-width) * 2 / 3); -} - .channel-indicator__icon--invalid { color: var(--color-error); } diff --git a/src/renderer/scss/component/_checkbox.scss b/src/renderer/scss/component/_checkbox.scss deleted file mode 100644 index d4796afe6..000000000 --- a/src/renderer/scss/component/_checkbox.scss +++ /dev/null @@ -1,69 +0,0 @@ -*, -*:before, -*:after { - box-sizing: border-box; -} - -$md-checkbox-checked-color: var(--color-primary); -$md-checkbox-border-color: var(--input-border-color); -$md-checkbox-size: 20px; -$md-checkbox-padding: 4px; -$md-checkmark-width: 2px; -$md-checkmark-color: #fff; - -.form-field--checkbox { - position: relative; - - label { - cursor: pointer; - &:before, - &:after { - content: ''; - position: absolute; - left: 0; - top: 0; - } - - &:before { - // box - width: $md-checkbox-size; - height: $md-checkbox-size; - background: transparent; - border: 2px solid $md-checkbox-border-color; - border-radius: 2px; - cursor: pointer; - transition: background 0.3s; - } - - &:after { - // checkmark - } - } - - input[type='checkbox'] { - outline: 0; - visibility: hidden; - margin-right: 16px; - - &:checked { - + label:before { - background: $md-checkbox-checked-color; - border: none; - } - + label:after { - $md-checkmark-size: $md-checkbox-size - 2 * $md-checkbox-padding; - - transform: rotate(-45deg); - - top: ($md-checkbox-size / 2) - ($md-checkmark-size / 4) - $md-checkbox-size/10; - left: $md-checkbox-padding; - width: $md-checkmark-size; - height: $md-checkmark-size / 2; - - border: $md-checkmark-width solid $md-checkmark-color; - border-top-style: none; - border-right-style: none; - } - } - } -} diff --git a/src/renderer/scss/component/_content.scss b/src/renderer/scss/component/_content.scss new file mode 100644 index 000000000..11a16cbdf --- /dev/null +++ b/src/renderer/scss/component/_content.scss @@ -0,0 +1,56 @@ +.content__embedded { + background-color: var(--color-black); + width: 100%; + padding-top: var(--video-aspect-ratio); + position: relative; + display: flex; + align-items: center; + justify-content: center; + + video { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + } +} + +// Video thumbnail with play/download button +.content__cover { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 50%; + display: flex; + align-items: center; + justify-content: center; + + &:not(.card__media--nsfw) { + background-color: var(--color-black); + } +} + +.content__view { + margin-top: -56.25%; +} + +.content__loading { + display: flex; + flex-direction: column; + align-items: center; + padding: 0 20px; +} + +.content__loading-text { + color: var(--color-white); +} + +img { + max-height: 100%; + max-width: 100%; +} diff --git a/src/renderer/scss/component/_file-download.scss b/src/renderer/scss/component/_file-download.scss index 04eb6fc90..642d6be7e 100644 --- a/src/renderer/scss/component/_file-download.scss +++ b/src/renderer/scss/component/_file-download.scss @@ -1,17 +1,19 @@ .file-download, .file-download__overlay { - .button__content { - margin: 0 var(--text-link-padding); - } + padding: 5px; } .file-download { position: relative; color: var(--color-download); + font-size: 12px; + font-family: 'metropolis-medium'; } + .file-download__overlay { background: var(--color-download); - color: var(--color-bg); + color: var(--color-download-overlay); + border-radius: var(--btn-radius); position: absolute; white-space: nowrap; overflow: hidden; diff --git a/src/renderer/scss/component/_file-list.scss b/src/renderer/scss/component/_file-list.scss new file mode 100644 index 000000000..a35ac115b --- /dev/null +++ b/src/renderer/scss/component/_file-list.scss @@ -0,0 +1,44 @@ +.file-list { + display: grid; + grid-gap: $spacing-vertical * 2/3; + grid-template-columns: repeat(auto-fill, var(--card-small-width)); + margin-top: $spacing-vertical * 2/3; +} + +.file-list__sort { + display: flex; + justify-content: flex-end; + padding-bottom: 20px; +} + +.file-list__header { + margin-top: $spacing-vertical * 4/3; + font-size: 18px; +} + +.file-tile { + display: flex; + margin-top: $spacing-vertical; + max-width: 260px; + height: var(--file-tile--media-size); + + .card__media { + flex: 0 0 var(--file-tile--media-size); + } + + .card__subtitle { + line-height: 1; + } +} + +.file-tile--fullwidth { + max-width: none; +} + +.file-tile__info { + margin-left: $spacing-vertical * 1/3; +} + +.file-tile__uri { + color: var(--color-grey-dark); +} diff --git a/src/renderer/scss/component/_file-selector.scss b/src/renderer/scss/component/_file-selector.scss deleted file mode 100644 index 8172da203..000000000 --- a/src/renderer/scss/component/_file-selector.scss +++ /dev/null @@ -1,23 +0,0 @@ -.form-field--file, -.form-field--directory { - width: 100%; -} - -.file-selector { - display: flex; -} - -.file-selector__choose-button { - font-family: inherit; - line-height: 0; - color: inherit; - margin-right: 16px; -} - -.file-selector__path { - font-size: 14px; - flex-grow: 2; - .input-copyable { - width: 100%; - } -} diff --git a/src/renderer/scss/component/_file-tile.scss b/src/renderer/scss/component/_file-tile.scss deleted file mode 100644 index eccb74446..000000000 --- a/src/renderer/scss/component/_file-tile.scss +++ /dev/null @@ -1,22 +0,0 @@ -$height-file-tile: $spacing-vertical * 6; -.file-tile__row { - overflow: hidden; - height: $height-file-tile; - //also a hack - .card__media { - height: $height-file-tile; - max-width: $height-file-tile; - width: $height-file-tile; - margin-right: $spacing-vertical / 2; - float: left; - } - //basically everything here is a hack now - .file-tile__content { - padding-top: $spacing-vertical * 1/3; - margin-left: $height-file-tile + $spacing-vertical / 2; - } - - .card__title-primary { - margin-top: 0; - } -} diff --git a/src/renderer/scss/component/_form-field.scss b/src/renderer/scss/component/_form-field.scss index a63352589..e4c9d4287 100644 --- a/src/renderer/scss/component/_form-field.scss +++ b/src/renderer/scss/component/_form-field.scss @@ -1,195 +1,89 @@ -.form-row-submit { - margin-top: $spacing-vertical; -} -.form-row-submit--with-footer { - margin-bottom: $spacing-vertical; -} - -.form-row-phone { +.form-row { display: flex; + flex-direction: row; + align-items: flex-end; - .form-field__input-text { - margin-left: 5px; - width: calc(0.85 * var(--input-width)); - } -} - -.form-row__label-row { - margin-top: $spacing-vertical * 5/6; - margin-bottom: 0px; - line-height: 1; - font-size: calc(0.9 * var(--font-size)); -} -.form-row__label-row--prefix { - float: left; - margin-right: 5px; -} - -.form-row--focus { - .form-field__label, - .form-field__prefix { - color: var(--color-primary) !important; - } -} - -.form-field { - display: inline-block; - margin: 8px 0; - - select { - transition: outline var(--transition-duration) var(--transition-type); - box-sizing: border-box; - padding-left: 5px; - padding-right: 5px; - height: var(--select-height); - background: var(--select-bg); - color: var(--select-color); - &:focus { - outline: var(--input-border-size) solid var(--color-primary); - } + .form-field:not(:first-of-type) { + padding-left: $spacing-vertical; } - input[type='radio'], - input[type='checkbox'] { - &:checked + .form-field__label { - color: var(--text-color); - } + &.form-row--padded { + padding-top: $spacing-vertical * 2/3; } - input[type='text'].input-copyable { - background: var(--input-bg); - color: var(--input-disabled-color); - line-height: 1; - padding-top: $spacing-vertical * 1/3; - padding-bottom: $spacing-vertical * 1/3; - padding-left: 5px; - padding-right: 5px; + &.form-row--centered { + align-items: center; + } + + .form-field.form-field--stretch { width: 100%; - font-family: 'Consolas', 'Lucida Console', 'Adobe Source Code Pro', monospace; - &.input-copyable--with-copy-btn { - width: 85%; + input { + width: 100%; + max-width: 400px; } } - input[readonly] { - color: var(--input-disabled-color) !important; - border-bottom: 1px dashed var(--input-disabled-border-color) !important; + input + .btn { + margin-left: $spacing-vertical * 1/3; } - - input[readonly]:focus { - background: var(--input-bg) !important; - border-bottom: 1px dashed var(--input-disabled-border-color) !important; - } - - textarea, - input[type='text'], - input[type='password'], - input[type='email'], - input[type='number'], - input[type='search'], - input[type='date'] { - background: var(--input-bg); - border-bottom: var(--input-border-size) solid var(--input-border-color); - caret-color: var(--color-primary); - color: var(--input-color); - cursor: pointer; - line-height: 1; - padding: 0 1px 8px 1px; - box-sizing: border-box; - -webkit-appearance: none; - transition: all var(--transition-duration) var(--transition-type); - - &::-webkit-input-placeholder { - color: var(--input-placeholder-color); - opacity: var(--input-placeholder-opacity) !important; - } - - &:focus { - border-color: var(--color-primary); - background: var(--input-active-bg); - } - - &:hover:not(:focus) { - border-color: var(--input-hover-border-color); - } - - &.form-field__input--error { - border-color: var(--color-error); - } - - &.form-field__input--inline { - padding-top: 0; - padding-bottom: 0; - border-bottom-width: var(--input-border-size); - margin-left: 8px; - margin-right: 8px; - } - } - - textarea { - padding: 2px; - border: var(--input-border-size) solid var(--input-border-color); - } -} -.form-field--address { - width: 100%; } .form-field--SimpleMDE { display: block; + width: 100%; } -.form-field__label, -.form-row__label { - color: var(--form-label-color); - &[for] { - cursor: pointer; +.form-field__input { + display: flex; + padding-top: $spacing-vertical / 3; + height: 36px; + + input[type='checkbox'], + input[type='radio'] { + margin-top: 5px; } } -.form-row__label-row .form-field__label--error { - /*the row restriction is to prevent coloring checkboxes and radio labels*/ - color: var(--color-error); +.form-field__help, +.form-field__label, +.form-field__error { + font-size: 12px; + font-family: 'metropolis-medium'; } -.form-field__input-text { - width: var(--input-width); +.form-field__label { + color: var(--color-black); } -.form-field__prefix { - margin-right: 4px; -} -.form-field__postfix { - margin-left: 4px; -} - -.form-field__input-number { - width: 70px; - text-align: right; -} - -.form-field--textarea { - width: 100%; -} -.form-field__input-textarea { - width: 100%; -} - -.form-field__error, -.form-field__helper { - margin-top: $spacing-vertical * 1/3; - font-size: 0.8em; - transition: opacity var(--transition-duration) var(--transition-type); +.form-field__help { + color: var(--color-grey-dark); + padding-top: $spacing-vertical * 1/3; } .form-field__error { color: var(--color-error); } -.form-field__helper { - color: var(--color-help); + +.form-field__prefix, +.form-field__postfix { + font-family: 'metropolis-medium'; } -.form-field__input.form-field__input-SimpleMDE .CodeMirror-scroll { - height: auto; +.form-field__prefix { + padding-right: $spacing-vertical * 1/3; +} + +.form-field__postfix { + padding-left: $spacing-vertical * 1/3; +} + +// Not sure if I like these +// Maybe this should be in gui.scss? +.input--price-amount { + width: 60px; +} + +.input--address { + width: 370px; } diff --git a/src/renderer/scss/component/_header.scss b/src/renderer/scss/component/_header.scss index a8967d0eb..6df42f34e 100644 --- a/src/renderer/scss/component/_header.scss +++ b/src/renderer/scss/component/_header.scss @@ -1,64 +1,19 @@ -#header { - color: var(--header-color); - background: var(--header-bg); +.header { + grid-area: header; display: flex; - align-items: center; - justify-content: space-around; - position: fixed; - box-shadow: var(--box-shadow-layer); - top: 0; - left: 0; - width: 100%; - z-index: 3; - padding: $spacing-vertical / 2; - box-sizing: border-box; -} -.header__item { - padding-left: $spacing-vertical / 4; - padding-right: $spacing-vertical / 4; - .button-alt { - background: var(--header-button-bg) !important; - font-size: 1em; - } - .button-alt:hover { - background: var(--header-button-hover-bg) !important; - } + z-index: 1; + justify-content: space-between; + padding: $spacing-width $spacing-width 0 $spacing-width; + background-color: var(--color-bg); + // height: 100px; } -.header__item--wunderbar { - flex-grow: 1; -} +.header__actions-right { + margin-left: auto; + padding-left: $spacing-vertical / 2; + display: flex; -.wunderbar { - position: relative; - .icon { - position: absolute; - left: 10px; - top: $spacing-vertical / 2 - 4px; //hacked - } -} - -.wunderbar--active .icon-search { - color: var(--color-primary); -} - -// below styles should be inside the common input styling -// will come back to this with the redesign - sean -.wunderbar__input { - background: var(--search-bg); - width: 100%; - color: var(--search-color); - height: $spacing-vertical * 1.5; - line-height: $spacing-vertical * 1.5; - padding-left: 38px; - padding-right: 5px; - border-radius: 2px; - border: var(--search-border); - transition: box-shadow var(--transition-duration) var(--transition-type); - &:focus { - background: var(--search-active-bg); - color: var(--search-active-color); - box-shadow: var(--search-active-shadow); - border-color: var(--color-primary); + .btn { + margin-left: $spacing-vertical * 1/3; } } diff --git a/src/renderer/scss/component/_load-screen.scss b/src/renderer/scss/component/_load-screen.scss index 05cce635e..a34dd2d89 100644 --- a/src/renderer/scss/component/_load-screen.scss +++ b/src/renderer/scss/component/_load-screen.scss @@ -1,6 +1,6 @@ .load-screen { color: white; - background: var(--color-brand); + background: var(--color-primary); background-size: cover; min-height: 100vh; min-width: 100vw; @@ -10,20 +10,24 @@ justify-content: center; } +.load-screen__title { + font-family: 'metropolis-bold'; + font-size: 60px; + line-height: 100px; +} + .load-screen__message { - margin-top: 24px; - width: 325px; + font-family: 'metropolis-semibold'; + font-size: 16px; + line-height: 20px; + margin-top: $spacing-vertical * 2/3; text-align: center; } .load-screen__details { - color: var(--color-load-screen-text); -} - -.load-screen__details--warning { - color: white; -} - -.load-screen__cancel-link { - color: white; + font-family: 12px 'metropolis-medium'; + font-size: 12px; + line-height: 1; + padding-top: $spacing-vertical * 2/3; + max-width: 400px; } diff --git a/src/renderer/scss/component/_modal.scss b/src/renderer/scss/component/_modal.scss index d5a561334..5d58e46d7 100644 --- a/src/renderer/scss/component/_modal.scss +++ b/src/renderer/scss/component/_modal.scss @@ -30,10 +30,45 @@ padding: $spacing-vertical; box-shadow: var(--box-shadow-layer); max-width: var(--modal-width); - word-break: break-word; } +.modal--fullscreen { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: $spacing-vertical; + background: var(--modal-bg); + overflow-y: scroll; + + .main { + // I will come back to these when I do media queries + // They should be variables + padding: 130px 80px 0 80px; + } +} + +// For slide down animation on the search modal +// Slide down isn't possible without doing a lot of re-work to the modal component +.ReactModal__Overlay { + .modal--fullscreen { + transition: height var(--animation-style) var(--animation-style); + height: 0; + } + + &--after-open { + .modal--fullscreen { + height: 100vh; + } + } + + &--before-close { + height: 0; + } +} + .modal__header { margin-bottom: $spacing-vertical * 2/3; text-align: center; @@ -72,6 +107,7 @@ max-width: none; width: var(--modal-width); } + .error-modal__error-list { /*shitty hack/temp fix for long errors making modal unusable*/ border: 1px solid var(--input-border-color); @@ -81,3 +117,7 @@ max-width: var(--modal-width); overflow-y: hidden; } + +.error-modal__content p { + padding: 0 0 $spacing-vertical $spacing-vertical; +} diff --git a/src/renderer/scss/component/_nav.scss b/src/renderer/scss/component/_nav.scss new file mode 100644 index 000000000..54c432142 --- /dev/null +++ b/src/renderer/scss/component/_nav.scss @@ -0,0 +1,98 @@ +.nav { + grid-area: nav; + background-color: var(--color-nav-bg); + padding: $spacing-width; + + hr { + width: 24px; + margin: 36px 0; + // width: 40px; + border: solid 1px var(--color-grey); + margin: $spacing-vertical $spacing-vertical * 2/3; + } +} + +.nav__actions-top { + display: flex; + justify-content: space-between; +} + +.nav__actions-history { + display: flex; +} + +// Sidebar links +.nav__primary { + padding-top: 80px; +} + +.nav__link { + // padding-top: $spacing-vertical / 3; + color: var(--color-grey-dark); + white-space: nowrap; + + .btn__label { + margin-left: $spacing-vertical * 1/3; + } + + .btn { + font: normal 400 16px/36px 'metropolis-semibold'; + + @media only screen and (min-width: $medium-breakpoint) { + font: normal 400 18px/40px 'metropolis-semibold'; + } + + @media only screen and (min-width: $large-breakpoint) { + font: normal 400 21px/50px 'metropolis-semibold'; + } + } + + .btn:hover { + color: var(--color-black); + } +} + +.nav__link--sub { + margin-left: 5px; + padding-left: $spacing-vertical * 2/3; + + .btn { + font: normal 400 14px/30px 'metropolis-medium'; + + @media only screen and (min-width: $medium-breakpoint) { + font: normal 400 15px/30px 'metropolis-semibold'; + } + + @media only screen and (min-width: $large-breakpoint) { + font: normal 400 18px/40px 'metropolis-medium'; + } + } +} + +.nav__link--active { + color: var(--color-black); +} + +.nav__sub-links { + padding-bottom: $spacing-vertical * 1/3; +} + +// Sub links animations +// The -appear, -leave classes are added by 'react-transition-group' +.nav__sub-appear, +.nav__sub-leave { + max-height: 0; + opacity: 0; +} + +.nav__sub-appear.nav__sub-appear-active { + // using max-height is a hack to animate to height "auto" + // Needs to be some arbitrarily large height + max-height: 500px; + opacity: 1; + transition: all var(--animation-duration) var(--animation-style); +} + +.nav__sub { + padding-top: 5px; +} diff --git a/src/renderer/scss/component/_radio.scss b/src/renderer/scss/component/_radio.scss deleted file mode 100644 index 4d511816f..000000000 --- a/src/renderer/scss/component/_radio.scss +++ /dev/null @@ -1,54 +0,0 @@ -$md-radio-checked-color: var(--color-primary); -$md-radio-border-color: var(--input-border-color); -$md-radio-size: 20px; -$md-radio-checked-size: 10px; -$md-radio-ripple-size: 15px; - -.form-field--radio { - position: relative; - - label { - cursor: pointer; - - &:before, - &:after { - content: ''; - position: absolute; - left: 0; - top: 0; - border-radius: 50%; - transition: all 0.3s ease; - transition-property: transform, border-color; - } - - &:before { - width: $md-radio-size; - height: $md-radio-size; - background: transparent; - border: 2px solid $md-radio-border-color; - cursor: pointer; - } - - &:after { - top: $md-radio-size / 2 - $md-radio-checked-size / 2; - left: $md-radio-size / 2 - $md-radio-checked-size / 2; - width: $md-radio-checked-size; - height: $md-radio-checked-size; - transform: scale(0); - background: $md-radio-checked-color; - } - } - - input[type='radio'] { - visibility: hidden; - margin-right: 16px; - - &:checked + label:before { - border-color: $md-radio-checked-color; - } - - &:checked + label:after { - transform: scale(1); - } - } -} diff --git a/src/renderer/scss/component/_search.scss b/src/renderer/scss/component/_search.scss new file mode 100644 index 000000000..b172f67a4 --- /dev/null +++ b/src/renderer/scss/component/_search.scss @@ -0,0 +1,97 @@ +.wunderbar { + z-index: 1; + flex: 1; + display: flex; + min-width: 175px; + cursor: text; + position: relative; + + > .icon { + position: absolute; + left: 10px; + top: 10px; + } +} + +.wunderbar__input { + height: var(--btn-height); + border-radius: var(--btn-radius); + width: 100%; + max-width: 700px; + color: var(--search-color); + background-color: var(--search-bg-color); + box-shadow: var(--box-shadow-wunderbar); + padding: 10px; + padding-left: 30px; + font-size: 13px; + font-family: 'metropolis-medium'; + display: flex; + align-items: center; + justify-content: center; + border-bottom: none; + + &:focus { + background-color: var(--color-bg); + border-radius: 0; + border-bottom: 1px solid var(--color-grey); + box-shadow: var(--box-shadow-button); + } +} + +.wunderbar__menu { + max-width: 100px; + overflow-x: hidden; +} + +.wunderbar__suggestion { + padding: 5px 10px; + background-color: var(--header-bg); + cursor: pointer; + display: flex; + align-items: center; + text-overflow: ellipsis; + font-family: 'metropolis-medium'; + + &:not(:first-of-type) { + border-top: 1px solid var(--color-divider); + } +} + +.wunderbar__suggestion-label { + padding-left: $spacing-vertical; +} + +.wunderbar__suggestion-label--action { + margin-left: $spacing-vertical * 1/3; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.wunderbar__active-suggestion { + background-color: var(--color-secondary); +} + +// Search modal +// Input field used inside search modal +.search__wrapper { + height: var(--search-modal-input-height); +} + +.search__input { + font-family: 'metropolis-bold'; + background: var(--color-black); + font-size: var(--search-modal-input-height); + color: var(--color-black); + background: var(--modal-bg); + width: 100%; +} + +.search__results { + display: flex; + padding-bottom: $spacing-vertical; + + .search-result__column { + flex: 0 0 270px; + } +} diff --git a/src/renderer/scss/component/_shapeshift.scss b/src/renderer/scss/component/_shapeshift.scss deleted file mode 100644 index cbe040180..000000000 --- a/src/renderer/scss/component/_shapeshift.scss +++ /dev/null @@ -1,39 +0,0 @@ -// Can't think of a better way to do this -// The initial shapeshift form is 311px tall -// the .shapeshift__initial-wrapper class is only added when the form is being loaded -// Once the form is rendered, there is a very smooth transition because the height doesn't change -.shapeshift__wrapper.shapeshift__initial-wrapper { - min-height: 346px; -} - -.shapeshift__content { - .spinner { - margin-top: $spacing-vertical * 3; - } -} - -.shapeshift__tx-info { - min-height: 63px; -} - -.shapeshift__deposit-address-wrapper { - display: flex; - flex-direction: row; - - * { - align-self: center; - } -} - -// this should be pulled out into it's own styling when we add more qr codes -.shapeshift__qrcode { - // don't use a variable here. adds a white border for easier reading in dark mode - // needs to stay the same no matter what theme is present - background-color: #fff; - padding: 2px; - margin-left: 40px; -} - -.shapeshift__link { - padding-left: 10px; -} diff --git a/src/renderer/scss/component/_snack-bar.scss b/src/renderer/scss/component/_snack-bar.scss index ccc81e0b9..3ded1d68a 100644 --- a/src/renderer/scss/component/_snack-bar.scss +++ b/src/renderer/scss/component/_snack-bar.scss @@ -1,11 +1,5 @@ -$padding-snack-horizontal: $spacing-vertical; - .snack-bar { - $height-snack: $spacing-vertical * 2; - $padding-snack-vertical: $spacing-vertical / 4; - - line-height: $height-snack - $padding-snack-vertical * 2; - padding: $padding-snack-vertical $padding-snack-horizontal; + padding: $spacing-vertical; position: fixed; top: $spacing-vertical; left: 0; @@ -13,18 +7,14 @@ $padding-snack-horizontal: $spacing-vertical; margin-left: auto; margin-right: auto; min-width: 300px; - max-width: $width-page-constrained - $spacing-vertical * 2; + max-width: var(--snack-bar-width); background: var(--color-dark-overlay); color: #f0f0f0; - display: flex; justify-content: space-between; align-items: center; - border-radius: 2px; - transition: all var(--transition-duration) var(--transition-type); - z-index: 10000; /*hack to get it over react modal */ } @@ -32,7 +22,7 @@ $padding-snack-horizontal: $spacing-vertical; display: inline-block; text-transform: uppercase; color: var(--color-primary-light); - margin: 0px 0px 0px $padding-snack-horizontal; + margin: 0px 0px 0px $spacing-vertical; min-width: min-content; &:hover { text-decoration: underline; diff --git a/src/renderer/scss/component/_spinner.scss b/src/renderer/scss/component/_spinner.scss index f3e0485f7..09433cbb1 100644 --- a/src/renderer/scss/component/_spinner.scss +++ b/src/renderer/scss/component/_spinner.scss @@ -1,58 +1,49 @@ .spinner { - position: relative; - width: 11em; - height: 11em; - margin: 20px auto; - font-size: 3px; - border-radius: 50%; + margin: $spacing-vertical * 1/3; + width: 50px; + height: 40px; + text-align: center; + font-size: 10px; - background: linear-gradient(to right, #fff 10%, rgba(255, 255, 255, 0) 50%); - animation: spin 1.4s infinite linear; - transform: translateZ(0); + .rect { + display: inline-block; + height: 100%; + width: 6px; + margin: 0 2px; + background-color: var(--color-white); + animation: sk-stretchdelay 1.2s infinite ease-in-out; - @keyframes spin { - from { - transform: rotate(0deg); + &.rect2 { + animation-delay: -1.1s; } - to { - transform: rotate(360deg); + + &.rect3 { + animation-delay: -1s; } - } - &:before, - &:after { - content: ''; - position: absolute; - top: 0; - left: 0; - } + &.rect4 { + animation-delay: -0.9s; + } - &:before { - width: 50%; - height: 50%; - background: #fff; - border-radius: 100% 0 0 0; - } - - &:after { - height: 75%; - width: 75%; - margin: auto; - bottom: 0; - right: 0; - background: #000; - border-radius: 50%; + &.rect5 { + animation-delay: -0.8s; + } } } -.spinner.spinner--dark { - background: linear-gradient(to right, var(--button-primary-bg) 10%, var(--color-bg) 50%); - - &:before { - background: var(--button-primary-bg); - } - - &:after { - background: var(--color-bg); +.spinner--dark { + .rect { + background-color: var(--color-black); + } +} + +@keyframes sk-stretchdelay { + 0%, + 40%, + 100% { + transform: scaleY(0.4); + } + 20% { + transform: scaleY(1); } } diff --git a/src/renderer/scss/component/_table.scss b/src/renderer/scss/component/_table.scss index 428c5d152..c5df4f48e 100644 --- a/src/renderer/scss/component/_table.scss +++ b/src/renderer/scss/component/_table.scss @@ -1,40 +1,51 @@ -table.table-standard { +table.table { word-wrap: break-word; max-width: 100%; + text-align: left; + margin-top: $spacing-width; + + tr td:first-of-type, + tr th:first-of-type { + padding-left: $spacing-vertical * 2/3; + } + + tr td:last-of-type, + tr th:last-of-type { + padding-right: $spacing-vertical * 2/3; + } + + thead { + border-bottom: 1px solid var(--color-grey); + } th, td { - padding: $spacing-vertical/2 8px; + font-size: 13px; } + th { - font-weight: 500; - font-size: 0.9em; + font-family: 'metropolis-semibold'; } + td { - vertical-align: top; - } - thead th, - > tr:first-child th { - vertical-align: bottom; - font-weight: 500; - font-size: 0.9em; - padding: $spacing-vertical/4 + 1 8px $spacing-vertical/4-2; - text-align: left; - border-bottom: var(--table-border); - img { - vertical-align: text-bottom; - } - &.text-center { - text-align: center; + font-family: 'metropolis-medium'; + color: var(--color-grey-dark); + padding: $spacing-vertical * 1/6 0; + + .btn:not(.btn--link) { + display: inline; + margin-left: $spacing-vertical * 1/3; } } - tr.thead:not(:first-child) th { - border-top: var(--table-border); + + .table__item-label { + font-size: 12px; } - tfoot td { - padding: $spacing-vertical / 2 8px; - font-size: 0.85em; + + .table__item--actionable span + .btn { + padding-left: $spacing-vertical * 1/3; } + tbody { tr { &:nth-child(even):not(.odd) { @@ -52,28 +63,31 @@ table.table-standard { } } } -.table-standard--definition-list { - th { - text-align: right; - } -} -table.table-stretch { +table.table--stretch { width: 100%; } -table.table-transactions { +table.table--help { td:nth-of-type(1) { - width: 15%; + color: var(--color-black); + font-family: 'metropolis-semibold'; + min-width: 130px; + } +} + +table.table--transactions { + td:nth-of-type(1) { + width: 17.5%; } td:nth-of-type(2) { - width: 15%; + width: 27.5%; } td:nth-of-type(3) { - width: 15%; + width: 22.5%; } td:nth-of-type(4) { - width: 40%; + width: 17.5%; } td:nth-of-type(5) { width: 15%; diff --git a/src/renderer/scss/component/_tabs.scss b/src/renderer/scss/component/_tabs.scss deleted file mode 100644 index 69f6bc7a3..000000000 --- a/src/renderer/scss/component/_tabs.scss +++ /dev/null @@ -1,64 +0,0 @@ -/* Tabs */ - -nav.sub-header { - text-transform: uppercase; - max-width: $width-page-constrained; - margin-bottom: 40px; - border-bottom: var(--divider); - user-select: none; - > a { - height: 38px; - line-height: 38px; - text-align: center; - font-weight: 500; - text-transform: uppercase; - display: inline-block; - vertical-align: baseline; - margin: 0 12px; - padding: 0 8px; - color: var(--tab-color); - position: relative; - - &:first-child { - margin-left: 0; - } - &:last-child { - margin-right: 0; - } - &.sub-header-selected { - color: var(--tab-active-color); - &:before { - width: 100%; - height: var(--tab-border-size); - background: var(--tab-active-color); - position: absolute; - bottom: 0; - left: 0; - content: ''; - animation-name: activeTab; - animation-duration: var(--animation-duration); - animation-timing-function: var(--animation-style); - } - } - &:hover { - color: var(--tab-active-color); - } - } - - &.sub-header--full-width { - max-width: 100%; - } - - &.sub-header--small-margin { - margin-bottom: $spacing-vertical; - } -} - -@keyframes activeTab { - from { - width: 0; - } - to { - width: 100%; - } -} diff --git a/src/renderer/scss/component/_tooltip.scss b/src/renderer/scss/component/_tooltip.scss index 91fbe3f2f..504880b09 100644 --- a/src/renderer/scss/component/_tooltip.scss +++ b/src/renderer/scss/component/_tooltip.scss @@ -2,10 +2,8 @@ .tooltip { position: relative; -} - -.tooltip__link { - @include text-link(); + padding: 0 $spacing-vertical / 3; + font-size: 12px; } .tooltip__body { @@ -17,16 +15,15 @@ box-sizing: border-box; padding: $spacing-vertical / 2; width: var(--tooltip-width); - border: var(--tooltip-border); color: var(--tooltip-color); background-color: var(--tooltip-bg); font-size: calc(var(--font-size) * 7 / 8); line-height: var(--font-line-height); box-shadow: var(--box-shadow-layer); + border-radius: var(--card-radius); } -.tooltip--header .tooltip__link { - @include text-link(#aaa); +.tooltip__link { font-size: calc(var(--font-size) * 3 / 4); margin-left: var(--button-padding); vertical-align: middle; diff --git a/src/renderer/scss/component/_video.scss b/src/renderer/scss/component/_video.scss deleted file mode 100644 index aa449c48e..000000000 --- a/src/renderer/scss/component/_video.scss +++ /dev/null @@ -1,83 +0,0 @@ -$height-video-embedded: $width-page-constrained * 9 / 16; - -video { - object-fit: contain; - box-sizing: border-box; - max-height: 100%; - max-width: 100%; - background-size: contain; - background-position: center center; - background-repeat: no-repeat; -} - -.video { - background: #000; - color: white; -} - -.video-embedded { - max-width: $width-page-constrained; - max-height: $height-video-embedded; - height: $height-video-embedded; - position: relative; - video { - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - } - &.video--hidden { - height: $height-video-embedded; - } -} -.video--obscured .video__cover { - position: relative; - filter: blur(var(--nsfw-blur-intensity)); -} - -.video__loading-screen { - height: 100%; - display: flex; - justify-content: center; - align-items: center; -} - -.video__loading-status { - padding-top: 20px; - color: white; -} - -.video__cover { - text-align: center; - height: 100%; - width: 100%; - background-size: auto 100%; - background-position: center center; - background-repeat: no-repeat; - position: relative; - .video__play-button { - display: flex; - align-items: center; - justify-content: center; - } -} - -.video__play-button { - position: absolute; - width: 100%; - height: 100%; - cursor: pointer; - display: none; - font-size: $spacing-vertical * 3; - color: white; - z-index: 1; - background: var(--color-dark-overlay); - opacity: 0.6; - left: 0; - top: 0; - &:hover { - opacity: 1; - transition: opacity var(--transition-duration) var(--transition-type); - } -} diff --git a/src/renderer/scss/page/_show.scss b/src/renderer/scss/page/_show.scss deleted file mode 100644 index 88ec2b7dd..000000000 --- a/src/renderer/scss/page/_show.scss +++ /dev/null @@ -1,13 +0,0 @@ -.show-page-media { - text-align: center; - margin-bottom: 16px; - overflow: auto; - img { - max-width: 100%; - } - - iframe { - width: 100%; - min-height: 500px; - } -} diff --git a/src/renderer/store.js b/src/renderer/store.js index ca6db3afd..b7ab9c01d 100644 --- a/src/renderer/store.js +++ b/src/renderer/store.js @@ -14,6 +14,7 @@ import walletReducer from 'redux/reducers/wallet'; import shapeShiftReducer from 'redux/reducers/shape_shift'; import subscriptionsReducer from 'redux/reducers/subscriptions'; import mediaReducer from 'redux/reducers/media'; +import publishReducer from 'redux/reducers/publish'; import { persistStore, autoRehydrate } from 'redux-persist'; import createCompressor from 'redux-persist-transform-compress'; import createFilter from 'redux-persist-transform-filter'; @@ -65,6 +66,7 @@ const reducers = combineReducers({ shapeShift: shapeShiftReducer, subscriptions: subscriptionsReducer, media: mediaReducer, + publish: publishReducer, }); const bulkThunk = createBulkThunkMiddleware(); @@ -96,7 +98,7 @@ const saveClaimsFilter = createFilter('claims', ['byId', 'claimsByUri']); const subscriptionsFilter = createFilter('subscriptions', ['subscriptions']); const persistOptions = { - whitelist: ['claims', 'subscriptions'], + whitelist: ['claims', 'subscriptions', 'navigation', 'publish'], // Order is important. Needs to be compressed last or other transforms can't // read the data transforms: [saveClaimsFilter, subscriptionsFilter, compressor], @@ -106,7 +108,7 @@ const persistOptions = { window.cacheStore = persistStore(store, persistOptions, err => { if (err) { - console.error('Unable to load saved SETTINGS'); + console.error('Unable to load saved settings'); // eslint-disable-line no-console } }); diff --git a/src/renderer/util/debounce.js b/src/renderer/util/debounce.js new file mode 100644 index 000000000..f702f7b0b --- /dev/null +++ b/src/renderer/util/debounce.js @@ -0,0 +1,21 @@ +// Returns a function, that, as long as it continues to be invoked, will not +// be triggered. The function will be called after it stops being called for +// N milliseconds. If `immediate` is passed, trigger the function on the +// leading edge, instead of the trailing. +export default function debouce(func, wait, immediate) { + let timeout; + + return function() { + const context = this; + const args = arguments; + const later = () => { + timeout = null; + if (!immediate) func.apply(context, args); + }; + + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; +} diff --git a/src/renderer/util/form-validation.js b/src/renderer/util/form-validation.js new file mode 100644 index 000000000..161e628d6 --- /dev/null +++ b/src/renderer/util/form-validation.js @@ -0,0 +1,23 @@ +// @flow +/* eslint-disable prefer-default-export */ +import { regexAddress } from 'lbryURI'; + +type DraftTxValues = { + address: string, + // amount: number +}; + +export const validateSendTx = (formValues: DraftTxValues) => { + const { address } = formValues; + const errors = {}; + + // All we need to check is if the address is valid + // If values are missing, users wont' be able to submit the form + if (address && !regexAddress.test(address)) { + errors.address = __('Not a valid LBRY address'); + } + + return errors; +}; + +/* eslint-enable prefer-default-export */ diff --git a/src/renderer/util/handle-fetch.js b/src/renderer/util/handle-fetch.js new file mode 100644 index 000000000..96ce44acb --- /dev/null +++ b/src/renderer/util/handle-fetch.js @@ -0,0 +1,5 @@ +export default function handleFetchResponse(response) { + return response.status === 200 + ? Promise.resolve(response.json()) + : Promise.reject(new Error(response.statusText)); +} diff --git a/static/font/.DS_Store b/static/font/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c4dae0a21a66747e7e4db8fe9e26f75ba8516ebf GIT binary patch literal 6148 zcmeHKyG{c^3>-s>h%_lF_ZRqsRTRE}ABZ3nNQVv)=&#Cm@o9`7LPQrDBpNi9?Ai5s zZnaaK&j4)mzP|z10G4z|96ij0VyB_z7+89L!&$P!YMI69Sku75Eo2` zaUHV+v3Y{n3#UY8XqHrBQmsY|OFHwd>U!anm~>bTA66$@O(+(p^ZhN#VLee%3P^!d z1uk>D_WplM|6%?=C21!Gq`<#Yz!uxP?S@yX-a5OS_u59^(Y@w_?#6Xc7@{2$qaAbO f?f5#1vab1>&wJsN7mri^f33hLXg?Ls literal 0 HcmV?d00001 diff --git a/static/font/FontAwesome.otf b/static/font/FontAwesome.otf deleted file mode 100644 index 401ec0f36e4f73b8efa40bd6f604fe80d286db70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134808 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 diff --git a/static/font/fontawesome-webfont.eot b/static/font/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953f93e35eab4108bd414bc02ddcf3928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/font/fontawesome-webfont.ttf b/static/font/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa1196aad98c2adf4378a7611dd713aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} diff --git a/static/font/fontawesome-webfont.woff2 b/static/font/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60404b91e398a37200c4a77b645cfd9586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77160 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 diff --git a/static/font/metropolis/bold.eot b/static/font/metropolis/bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..48ded273f33fa5996b9864dee163c48e62a76ed8 GIT binary patch literal 35022 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%0D&#~No7ycDc^<;bpflv_G+u!sbi?td9XTd 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 IU<&{KKmU-WHUIzs literal 0 HcmV?d00001 diff --git a/static/font/metropolis/bold.svg b/static/font/metropolis/bold.svg new file mode 100644 index 000000000..92af03602 --- /dev/null +++ b/static/font/metropolis/bold.svg @@ -0,0 +1,875 @@ + + + + +Created by FontForge 20090622 at Fri Dec 8 09:51:27 2017 + By deploy user +Copyright © 2016 by Chris Simpson. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/metropolis/bold.ttf b/static/font/metropolis/bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f67993325505a60be9356782c68c1aa0872e5e07 GIT binary patch literal 34744 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 literal 0 HcmV?d00001 diff --git a/static/font/metropolis/medium.eot b/static/font/metropolis/medium.eot new file mode 100644 index 0000000000000000000000000000000000000000..b8d6eb90e0abbb6c3da08e085567f125ff1e0d85 GIT binary patch literal 35582 zcmdVD2Y4OD)i*w~dyA^Aer-#Zuj-X$S-n}7C97CnwwmQGTU{=aj4Zi@Vmp{>iorIf zIaJe3uc0`E5Fmt?9zz0{5<-9^1PCt>@ZJ0WoteE=lHvJ3-}8LWr`6rvyLa}?nKNh3 zIdkUBjCK)YuU^O)X9|;lCjH9UH=J%8n#}qW=jBSqtaShFOJ6vg&)nB|*2sFvqJ zY%@Na*m|}FFVNE-+>fzAB%Z=r@Vy`3HnC2mWo$cZ$CDAHU5~eh@J1F(XPM%d&ze{( zp3pbXrvpei%DP4Rt*$rHSs{-3$fuKS1WZcP2Uvtj7t6+79zOXjmlfd1L*73RXC&nK zOl7;6$~IS3wKZ-oj#GKyF-@t^PdGd5g_^j~it-ZFaO z5352M8!ZG*7EyMT-|@vu->#in{J$(vrM%gRrs&zutD{2u)G((00pI;x425^pXh#lU z-sGroY&VPvNc4*S$1~{(pU-MpfOtf#$VIA!dJp}fdvUQc1+dr96W)kVEIu);fj`YEm77?i zvWX?DsVq&oktMP3StTE0MfjxhgKVDC#>#jYtKw&{T<*^*_`QyQDUY&zzLiDcw+yA3 zB`DkQS;MlFtt?+z!3vZfJm1O+M0&idG~gNF;9AFjU>5ZZ!88=I zS;}#IZezj9dBAg&Ee6it;mq~ zSPlD%Enr_cUQkk4HT#;?s28zndJa4(eIvcYFJz7UYnIG^f%lf7oMkLZtz^oM%OT_a`(90%h zMfCFd7{c(3=ts2k_%OTUC88g$U*PkJ8qQLkv?IECew0MkAZSVS^ZXF~Kxfohqo5Vh z%jcsW$1|cIXy^F>-JS#es&V}kpAVEV)W4H1hH4}uSf4~Z9C*De;v z%UK-JmdZEoO1z4)3Hst{2xOUtP~Zc;CEgi#1uqjn5l?$v!QX<%oL8zRqSYi;XInp z;t6~X&*BBVh?nph-pE(+UcQl^trRHFEAOevv3p~G9s5-5f2<~Jgmt=grZwK0Y|XS5 zS&zksflElf-sl1O5%vW84G-c`JeJ4vRG!ZB`8>XWm+=PP#5?!~J_N|mDQ^SvuGq(7 zpN#$5s#wFV)2uN9a)x!DgzWgM& z$JLI*jzf+Ej{T0y9G5sQbeylfqLpb`_Rl`L{G*PKR)3W8;fxQbd>Htl|A)p8l@EUS z;Oh@|zpqmXSpT2@Gbuv5k*f0n?l!(i^PTQbzNs<;>dXX9=g0h^GXq%=3x-KGm4&cS z7RJI^1dC)*%z}EI&StP^)b>mk%Vwc2;$Z9~K#C@@WM*S2Y&J_}b66Ui3zH~Am{-{> z2c}UT45R{9$mX#km{P@%_mH{Zl`^#Q3RcM$u`0;08pwb;=p)EMwwNt}nbr)$u9da1 zr7-7~fxA|)m24GT4gK1|*0Oal$r#%LgKR4dzFllDyO>?hE@S(lk*{C}*dcb9UB#|u z*Rbo@wd{I!gx$by0{;+i-oowxf8GfWrN3?%lZ@Ng26n0V&S2d2;ckqbuYYGS{l@@AKc`o~qeZ=FynMphuoS#T7likC>$9yi@L7M*FM!ND;b_Ux4 zBX=j;#?EACp$+|l?P0&fPrKQL>>_pndl{`Lm<@1$9>4?HCO!q6?H4->Ngz7IjEHtiGh4G*}I7hMk6^hQ|#r8$K|G z82gNSjQ1JeG=6OgFj-9vrXJH~(>~Kt(<7!=O`n)e=0tP5`AqYD=4Z?wn7{E0^UL(B z@$2y0?6=GB3cp+Y?(;kD_pQIxzubR=|6%{f{l5qZ2}lcQ57-=VX25*`uLpb^Xbr3j z>~{z*GxG+<>RSQQ(LBSkOt}Ss%~(9#W>x+GicH z-e7&%`ib>aoHcG?+{(C-xGUlwkNY@&Mtn*9hWIPupN#)JAts?F;ZVY}2_GlMCe|hH zOuR1f?WAc*eMyfe{g7Oeyeaw46pulwO46hV=W=pH9~@f--V5dNQubcqub1vpjPo z^H}ERSt(h$S>=!wYaBWJ8d$+9q(vm8Ljoi~9$NVVv}MLa<3cS7kvWn0#@eA$5{`HGr#djmL)#kl6Ay+6)+M3=q%(P4Qa}F zf*CY2ClrWJK~4dRUXWuJAC8C0#^KE2@S(J(w2RZ0q-_e{m^m0eh`WpNWJq&lUYyAv zIbMG^{_2m{--AExyW_`6Jg6+$@rW{C`3{mh9#WdI2$LDqPPP?9S@P03P%p^KiHx$C zlWmbvi4k~c3NPWg$u?#F*oL+}>lW0n?CBX^(Kg&sv}o~=_FhKzoO9+aoVSoi-oDwq zusmc{eNEW=GnO_j9u8bk64cUA5_%%~{;Jub&-mNFH_mTLN4L+&(j4C^cI9Dk%@k;o z1n3ABE~qVtt@0eMWasB5C&Zf~Be?sAWY@!2YF4ejeASu*{Ou;qW^2gKNw#J2kE&PW z;p(BqS>o%e?wb0Zp4z%@?N;Spdo#awK}X4g%yeyLcU^5yPfdMy86K3RXMiS2j&GDR z(Z7m@?#f^+$!s$vP__kb4lqYq@(U~`vr0HwNISA>B9PPYPc@mnM8D;%hrf}37 z59uEs?$2#&YHq!=_5Iy@PPXPRefX1y+X!|l-pR!~!HijKqAa$8SPnk#$Zc(IZq3D; zcNQ#tcx1~%?fI=I_w0Tj@66*vd^P%bi=1^;Fol~<$+qPDf)ZYk&TZ*1<1De-WqAehxEyCXzWbqF#3*w=nLBaUh zzaqjv${ZYpU;Wx6{7oivlz&8pKYr#zQv)q40{jaDjpl&BC}U8p!4Ml{jEXXw0t@{E zR#*b3iUj6)K}aw?7{9Bt@OxmO*%UO-EE0hGIqZ&JB|<5Lt;0Bppgf2tv;ZaI$<$WZU7a%CU{T2F*N$=$2pLAs}|9rUpkR+hXEuwhOIkSr8PqywrqRz|UnL z^J4TXRY;Y*xX4`Y_wmY=cwPZ{^E_Z7UyBEz^K>Z_w3=$0$5+%gL11&4LV_)N$l6Jt4{W?Ml{=%d?GA8t_!8ft%GZ>Ib> zwGm|+@{2^8yaJhp*`~|NsXQ(+f8&>C+^%d_OUA<^~ z%>^A2P6F_b1)L;-HAGO3z}F15pd;>r3jP6q^5nL?sbvkL+36;n~FP@l&(26 zaBf}Eg7yo87Uor~S(uwwz*q9ZoXnEdB|8RMi(A5`v{o!fmqdZ2VM;y97C@XImltQ_ zIiaL?l5#@%FSWY@dE@r(Ztc#mjx_V9wVD-2zT@C_ls5}_&c=Jw2~UY8QPpe*eNi4)v5S?<;R@t!OT<4&b+Gzc!UOuKVRBL7Qq;E#6w2ZRPzPFQtuk51j3+vr<7r zE3(LrijX1)z#w~3V`w|!&e}6a@#S56FWGeA`L~`uydt-@VaW!?+Lchz(q1;NZAvVE zVD!0jpSte)*On|UziMPorgnH~!GgL4*|!kx1<1^z*C$7rBl#X4t6jxE(B4;?I~wfQ zgR3%7zC7R(0o{{|-k{(hx9}6RN9zVFk@Sm#aK^1|3TlMkc=AAV*{;jFdM@2n)}-0< zmN##2S~lgpl|AzcdxJJCTd*oBXRxiOw{ED*z4)J?MejPS9x$Nds}5n-6*v5NUt{&-A9nJdkIEXmJjRqCDY243I{<3bY`S zP(GsFDJI!gq}GwbO7&p$;b1EhXF# z?caI|48d;&@V+U^3TlIMd0tXvFjo{UkN;7-gl}nor}3TkyQr_CKz2Q-MDTy02H~3w zN8K9nDdTTwbNL(miWMu~U$H{Ks{_1939ldz5RH*_d<%g6v3=QHcL5;5vN*osZ-D;c zWPcRoiP|O>*SXsq>1hu=*fLOA*j`oAasJxvo7yt<;=S^asVr?yXD9$X3yjAU%T&x1u=_wz{;w^g?)>%fE#c{Z7Of0&6pu6Sez}+ zoB*kt6sIZ!#o9H+o4F1DS|p#gZ{I#LE&k4{@EU4i8QvosE(k3thU90Qumj10Oi)p# z+~hetRKG6cRqaDvXK!2m#S6LR<+(4sRa9GB^pvbD8Ue{W= ziQp&#$EQWvLI^|fYltZUmI^iLIegi_Zu`@pZoA;pZC72j?Na65r?uCAyZVyhp-UtV z^#D+bcS%=5^2sAKPN~!e`6lfEzfv>v|0>PTcD&YsR2=nLaeZow|>bzR;ol z2}$+x-GcH(<4ay#sA%%i{KR&1!#n#)aUD(^pw+Z7gLwilR zS38OH4JhjUNDo~L>V!7*((ia4iT3d_o=+9}n(QT_8B#=;{$08=t~$JFPGNQLSwRc4 z7p3I1mZ7m`4V;Vj+ChUWW&Q+@=lJsk)g0O0%PV(lpYXZo{BI9(zJ~W{f7H(7xf}n0 zcgpcj1l}>CC4$PKIk$tn>3tnURVowsOjTVlqoKtTLIZi|vfi)0>ct1};6;SV`x#v| z*aY$&uZTVQ2!q!7m0K#!$xZ6n}d&KHq^yh}XVHU6|qbVFoL>%^DSAApRxc zt0ZeD-+U9SrRBeT@Zigb1e?9Co!oleiEF`Xc%SNhqsR;9zGwvzra3&)$@=v?Zt#jL z2A{mAe$}e_dz5?6e)jBt^Tw*}XhrV4gQ*4a2(v{R@6O@geOYR-L{YWq2sx1dpbiTv-s{|$_-+9`oAM}O*n(Vuz}{x6qpK*~|K zf~77;8-?*p_Dk9ATNd=5RoSp)&DJgF_g^wpw0eDE{o;--W9J4A)vsHSmYx+Ev$TEL zmd=K@lGM5BQPIoWSJEIRM{k-b&7dhHJy;lWJ|UC`e5j;+1TEfSmweHLdOLzNs5PQKbGx2@;=XCBgn4 zvXJj8zrwqaAN~s7N${uFm0xLguKwb==XP*av+sQFdGPNY+U?w|{g*G}%W*d2U07_& z)p!?Pt~j(Jh3{XYC>=}eS_fb+cAU!>DSsl`TF4;8XYqHp-g>6mTxFjxWIK0!4;%cq(grso zZ@yH!c@tmbG{RvM1BOk9k%z{GPsY)s-=A5f{J!cGRS)vX=GSwOhV(k{4^Oa}vwu~4 z{o=7PJP*^pc;yww9hzfUX>mM8^2dx?R+P5=wbYL&RTgrK@+LhGM=N;c@^#ylg}WjS z5I@g_Z2GSf3i}jZ1lW?1$lfhLE#OC?$-|*U^GJ!pev0cG>5N&M)wXf_vbvU%>XNp^ zfuh_ML1hhjb!AHE)-LV&YFpaM`i6BeA@dsN)aGhgIdd09rH~KQdl&f$ zTaD-zN=BOKaUhTW{`1f8-@dS`YvH=;RjaD2R<2Y+4{zOexNoKMg!WahHgDjj{{EW= zByG}A1`TD15WGu{7gyU67630Ey6L9jp{9!Lx~jgu>bl&D=Aawjy`ib3aIn5%uxLT6 zE;|Zccu^&oL_eN@!Gdt&bpjY|m$=;kq^f|N@`QcS%D%(fwjS=)j_7ES&GL<615V*& z5hQ_n=vq4gMn%TO@^IMcap|1rr7X3S#BVDcy6(`Xv2(Tc0V_(2R|N5V|Aq$Zw1tUj z*N$zu=GJ}XEqt)Pv=q`2^$B^wJCs*R0)>-f3?iI*p6-Ibx^rje;>8WcMROCwAzo0nfE5xxjB4vjQ5aBB#l`fK$nZ`^qAGDX4V*TKAP(e!0|E z+}FCcY-``%y?sS%WB+>5iWL_vSBzSA&pC_g<~3B*cU<)Lg*j>3i!1l7Sg}vmO${;& z1zq9YlH3(4NC`GWjhAq~Wa(gMMeh8zuC8e-l+ew~wMThjQEg4O_8U~RJw@=$0)To* zd0qH?$lK#|t*HR9V|qfu^l1qRb=}IU#LR?5%d|xMt%}k9BU2nNI2P;gf!93W(>n)J z1v?>}k)0eoJz-jGccTl^ssDsE1|&o)iT1Zjnq+yZQ6B1dLJn~=HABI=;Y#fLf7*Ie zYgdKRVVoJh1*Lh`=pz2!~o&E4Jnrri1M&6V0;6j)kFp9~rFJkkq) zgwq|7u97lOb_pcXVe@ictG!TETaqqdz~`gP0SxG+9HG_75d+Ah3Dc10N8LmkASr6q*hax8FV zD`CTzTsrjor#7Fvcj(FE$GM;Vfd@`ed8RuWl(|SR>}*j7rCj1niY{6{BYOFTMQJcqINRWO1if?Nvx7|$x}nx-D&V(N zC@WLWP;#A~r%Jy5DN15fe`w;?px#_&)XjyPt(S^&SXDq*{Xijih z(2|zD0*UjQNw|@pHie(Z?;-lZb?)rJOBEV7t0gokpde(awIw7mupoq|E-3Z?#e!15 zGl_OI2GWi(5Na=YJ6t&9rMk0(Cxl<3_wtJ|7NUeYyY}yC@%$vcn+E$xQySqv1g9j4 zK?Pw0yM_}&^9zzdOZ4oxwrFkJ>a)*U)7DW@kytc8S^HCYZf<#Xb-=>P@I&j?9*ih2 z39Kkd4b%<>rkzu~4*t%tPAXe2GHQejMjw&-MR^6nSu3@i>?F=aD^K{4Z?gZrX5qrK zx~g_WR|hZ2Dy(_xspZSlQ}3$Y+rL-upzVg>CYVmUlKh@3IRoh#K)`aN+}GbyE3Dm1aJoJO%v*NMUYYlBaWbU;3o zX8INvDZj==Mp*%8Hp}5(^53EFhZaNq9rG+sXUj`B-`sM=6}!Ya=MT?^Kln(5IHL@u z%3{7-xlGuGuo+8vxw5#dOqS2nZUmUpZJn1Z3lBu>qOvDCUWOjLM~oeW3UxreV{|O0 zY}j>XC!g84HJi6@x^KvCRSw&AJFSGh$sXrR$X3p$SKzrkl$)5CoA_p8ZbAZTi12Zg zU}QUxC}GjL$SF;UA<_IFo0U?OmYWwRl=u^30_4nHiRdsn&q7#sZ>g zCTQ`k2Q6#`L<>-3Ps{%OEjML~b56t~4~9Sg2XV$bHb))*tKebuRLEK(qlm_FERp1} zgiwXEL_UEx!J;#Dy_ZAF&ED_$xU`6-s`L-3XX7rA#sYYPt$@3|MEqAZm#^bxKCU9= z^IZ|A_INss#>2sYU$`5NGUxJ|ZAW~-s2g@2@CM_;XDj6Q6vS!3ronKb1(Md~xZ*n+ zEBlu9FS^keT5-$1efB6fR!*EYK>}E)oLqMSI?3i)&O#weAX6YqrnXyKxYZYYk}h5r zoO;Kdhe4-bKd5Ixf08UGcY87Ac-(syAxdvG_v_a&pUjjWeOr^==*|@N=FImG;9b3R zOy^)Y6sV`1>zUuJ%S%g_m$atG$EU|X;+xku_^D)hFMf(oKXs8i8{s=tPoj@E74b66 z?Ip{jx`=~@R!_Q}WtzQpjPFwl?fI`sui0gnLAVt1^=LzxjuPSTn?pShup^13w7QU)T9l{Cpai<=n^J-ofV9%5J|n&-PY0^?%OW@AMUdR?>YxAuna`WyE?akl6CFMze*^L(B7+Worged1}NqvU9dCx{x!()V~l zA%4DEM?#hUN3~zbWN_IeQrQ#gDQ^kA#}oK?2D{T)T=Y|30@dyp^nzrh9y)bwR->1` zyq8FGz#c_j6eL2~8c?EaS6WDAO1l!0xgBXCn?2GZmXz@@mFNIpv`X#TW)4U4Flx_> z8)x8+efwHk^jB2JCrCdXWu~?TJ?S~Z;n}h%#~7a$b$9RhBH9tl473#*7gGKVz7Ev; z{2}n@k+m9%4!>|6M^aP=Uqk-me^pieM|hB*qGkA7drdI9^YZkaM#0^XE;b~wIFM<=pb@}28?i0y~jc$OF z1;;^D^>Rv{I1NXPFMWg$N9=TEHUTe;%UH-&Vap2|qn8>k;y zyT=6rsW**Ll1QjrF>;ZIt~3pg)%QIyc*Xu9*T}^fhAwu#UA3LU1i+7tsOUK5IkISS zLiHdp;;%W}34pG`9czjVZ9MatotV z4aWSl^1cnKKIwFMKfUX~&&vBH@Te6r#ZGJB=Vfn`WvYu+w{#K$~5>l!ji) z<#55g?Cg2V8(m{B9Ubnm1MR|wyu^t7*{L+QEzMCP#!RS>@N+u|=*V%cwtK2?2Vq+G z1zy7|)%9kt9>TmS*YpgzhFeJ9srvW`$s-GkmGTHWbJ9_gGa-etCLJlE(JcFR>x9E4 z6XXT?LqQ>vjmX>ssWWZzydZOaGB1)hGsHNJ?0uXryL2gKswdBpWQ-OxQSl5q9i{Im z6|#3XugO9vBE?Xu?WL%52|2Pp=P-U1;Mq?gSzaD*>c33IPx~aAf*q;`IG)Se; zI0#R3r4_n2C$tS}cPY}6`Qc8B`Du&?DMVlIKFu^~W<=u+VPD8sRL2KM9}eHz&*;FPM$mJ_S+fF8X5*}F?lpwpVvoWZ7*~+Dtk8HVO zckj9i+p4jd&DQj_i`K;+tXjUjwra&HrMvA{YtOpjiYuc6^)Yh*Pw5kEYLNWJhDp{ZtYZ5ua<{aJm!AEf{a{BYdV2@iTSJ2@J9&w z=G|851fY-Urs+87f`cXi?}AVCmo@LxPnv`_XZv)PuJX;Y#ML2v#FtpIjW_5#9OsUB zmrfnezS6|G|HVfs@AS=le6zmU7YXp5ikQJ3J>Ge$h_&+Ywo&w;XOtgLi%v?4o}QSf zo#JnNs^9a+lV?m%N}4_+`S6Mr$DQ{8?V>Ac*kw@|e}-H8%|} zSroHct4jEIc4l?|Jym^iAJ68GHuVhMm}YHk>KnRYZk(nq$l`&~gW9RVhT;tEJ2*H< z_Q)|XsfU=biYFQg+Ya^PGa3dV_R6>cF<*F){+5a0-3b-b?LE2%wK6$8sZX5N>x3Xv zr5efghDxeq{x~#2Z&_}q-k3~lOqA0}Z*}44o#8lMYVgfn(Z}hC=IASlzLp%2ca7G) zhBm*|XT(lwf}ru^cFr+n-azjsiHs^cj2hHY}InEPPcC$#DVuDx)!GjGe#%o$WPH5mK^Z*}~kkp|pLzrO7TS z$xBT=b+u=KoPEis05hH>p$q2EGyRV{b6bD9qFo?zK6cvDk?fe^XjS9j*A$~2Mtx|g zAVD8H5rKvnhsSJlH8vqTYk?)$UBqdzGpEPc|BE=_WreXt*-0_7l(Cj+(R_)F38vVr zR;66@DRMB%?1Vp2cowOGP(4HHdg!5AN}|Ykx=*y$>b?nlg33AOYe#BKKjNM%NQ<_2^6d2wg$W-xn2d> z#Bsq~QZ$gh_6X^6;Y$7~2zxGr2cRM+KzC_hW#i&S{gw$ZhJ$>c^uv0fEaG9%eYj|w+)W@b!xSU9L z85D#OI%D>3xur|foN;^S6xpB91NW{jDlWGF(G%x-)Ip_6@|VW2AT^Di14y4i{9f-l zz(cb4Q`e9V-jeZuBzI;177$L?zkNkJe*5J8F34K@Qxo;HoMUa$XUaUsLOqA3c#W=> zKJmoaJ!0b;jB?^ldT*BC6Av5jG+juZu4gcH@b)h;vT^;8)fPIW|>_SM5QX7C@CiQY%!-Re%$AUYes%#A7DVXcS^he4x7cM>u8R zX)RC@@rC$I#cZpe0$DBdFqwkgahl~Q>s5NJW@V~niZj!&Q0@%cv`*uBde|o9k>n|o zM>H;pnG+Z=@EY12T_#%edaqid_N=`#p10gS1_|kO)w5Cp-Zy#eEJQB$T@&*dwYOV@ z9;X;#rxsUFGu1+w>r}L7Og!g8mD=6@;Dl2z&}w9SD(U$+ieGo-3XAk7LRCL-W}P&7 z%&OGzk4+l63O%QNs>nGdl>2Fls(OpgN#>Z`?G~OBPB+nRkkT`0Hl!!@heY|+1jHC6 zV-*a&Wn(NKc20!pr-@MH&TseRWN7vf*$tBsL%|w5j9Y~)gf9ox9!Vp>@x1)aUgdj8 zCO z&m&1OGc(Y{zp?+Q=Ycgu7<(8zPxH*Z@&M#R65@LInD?nqBn?DNFZ^Cc)F6!lg;sa# z{-Sp9lbp+gF>Ct8Ih!Y3SGuw{?>V>Upj5U|s7i!(cue!rKAkT3glZ4;VAX&vW0Gk+ z+#@R4n>XDt$``x2!#iBr{;(Gt0yYJxMF@KjQIQl&p+XO0h&=^8*jZv~5rtoz`asSv zQpAc4bFuc8^!w?)yrnSPmUb!MilIai{0!>qu%X9;MejiO{zyAS&m{rI29+On$B4*G zX+rzZxmL>;naVu70Y{|>CZer3O>4SFJSd6KYyO$EQY8IEJiSr@e#96c#Ri6&^N1Y_ zBF%46o=r`Czx-uK2lt!3W;Uc1$2E5~Hg@sfbj;RX z;3nG|8)l)rgR+uMcTCU`xscrq3rrYcn2M4L@@Ri^#wNI;INV_gcwhScoPG+_gY58l z`}+73sFgr32Oo`)jd$$Tu_I) zBnjU5g?r0N8T+rtoqL#<6NI4K@9<(wCp}4*hJc>Z{`MfL)OY>b9WJUmtzwU858^>d zSEqkPYSIZw+b=<$<3(N4noo=;FF28O=J!Ho2GYC~nqfOGhTr*mPxhqn!xFrSy?xj5@*8~}d?bC3`nvR-F&Gq!NKtKizbgm4IWFdc#=!S&TX*?X zA9O!E7_s}xh;!_LJ}66{Wt;BP52d(X>eCVIiLt&z&)|Gt)Jydo9`;2ab(aakVA?A< zfaIRbK9?pd1AIHL0#E6RTSf21CV?qW=Y)s@adb;>^qwyQv(5e_sN*XJtGL?@eC2lU0LwDN6 z`UDC7qt{fQlKi|<6mvmtUNMc@Db9HleAsD2%DA+RLXOa!Eg_M^C!B@IUxh3|njG@FlmT^_cJfahehNKc@hB}_VzRQhL5Kb;hOBIml0E`n|Bo$q8bUT#Ld(|%&oi|)qxiK#Ep zy~&7grFpaYXsr>G4PMi-L^5J#{Dj&lW&ZZTal_b_OZq3AV9PDXHk-T$v;(>(oN+60 z6Z3#zm?ix*ZWEG=Ki|1{d=T!ylGDu?I#Ahe^g^*PaN*=rh(sL{?+|~dprtzfSEr$w zoP?}Om(%pqu#ix+Ka+<@@1}u=eDj}>F0c$=mDwl$Bqs?Z9{MR(LVe8!FVWm+#300B zL`zzDzw zX!2IkBu;&P!Boz}d;_qvi=ETB!V_asLcH=T^lK<^&+7`Wv;?4&PIEyp=Uew7y6RUJ zB$S6qGOiVKz@7d==Ui}w=9Vd{u**q`d)aJQxJq`iyb$LvxTWgd@!=j5&y**0V_kX$ z!+mCs=bpkfrCx70XpFY4dqleB-G8j&6{h<0^{F)*Dv} zvYBW+u~@hF&`Brj!GeGC6!=yHUk^*-mTH)jp13Pd?>>0&$_V@Se2F*SAPU-26MTcT zK7kcq$OSZq`*`rEG3g<(N@3s8-F{&%uU$mX4qCndooK9BFm;CR8;p;(9NFw#%|PT) zg*-5ynPM<~M_UAFatq={cT*@u((ULmMY7xNu}F&Xnkz|#lCA}`O|cGwXqz-DCgWxU zMYO3tF_Q0-kqNJOt&89e)*rV%fRM(0SU!aLN zJXVF!V}o6bLkJpXqlVuW?ZWxKYi8+#c>fRX*`<1@lWUTxGjHw{lZgioe=<{1?%pbDWgKFG`5|5Xp(!TP*%jvkcUp@{upZ>QSt!SxXwBLJT zrE3}&Mj)+@6Y&T7@wy%0#^(ba%#R-EkR80w{I<*Ri^$^grM| zkstF6m4&=pv==8=mP#&^@nfKmcN%G-+$!-w8sMO(spEt2Mfw4IIl65zosc8ixg|;+ z4Pob%2w2VRF5$EE^d{=FI$gdjX;erFl+x=ov+dd#PUNUEu6!4A~s@KSaCBF6-2#KuE%ct(qPWBa&IN*zcoo$tfW*{in(ItanB&Tg@ij-a7(WziS-Sl} zp>fg|kRa&bz2exZD65s?KAkI%*$vJ))hJ6E;5pZDK@Z#Q2h!DzdleU%fq;LS1zi?J zS!Y4MPPDFz{RdaR&T>-$s^{XEQ_*yvCu;BDfPxlcwY^wKnrKr>l#WQ&U}YXy4R_ z51r$?GJX^zp}rBMrx~OEmsei1S_&o~Omsz++FzS!M3H11+COwSwH?g2p;>lrb-fa8 zaF0tz%L$O)Y8mg#wH~M)lf6Ul`xq5G17O}9XHrmW_O&Pg0P`~brUdc@fTypu`qtl; z(>fb?t`>VdSN-JkGJY$23Hvl)bSPYm%DDo754%@tRBju$K4TTXjlG7odFeeN|D2|a z$zvT@?)x6rYvi}`+eLolOZCnX3xJTz+BsX@0|6d12{HxVh@t<)Z{v3hya>KGW|J>i zd&~{q3uhnjpyN_@40|cuMr&&%igrQ>bMru5-9YWJy4;+)x*SZ6QE81$RJcax!{EJ%FwIBI?{$QuXUsgXsnC+b#nHVNrja=;abvG zR~oUdop3V42`rcFiHJJg0@Hl^rE9RzwEeig(DZ95wBU4hHvh>Lr}dSmaeqG1J4t7FA(H47io?I3EWgh(S za;+fhNXo%tSS1u#F9?pX`V-yV&iEeJnp{|`#&=CFIVLkt*eGEl#)SH)lS2IiI;lew zK$da3zQ9oyCw#I6En)-=*ot_^$un`qDx^-3lOCinz9jCv$Zn1#eNX*u%vQ$JU#9_nMPY=>yS<|&lWgowx9SY_V5X^AE(_BG3<+rleQ%9W!=&I z#YyY#Duio4Izd)4X4@CIN8OSCNW!OxuSwy54mVQz1n{LVX#)7f%dN^D@bXOTaN^-z za5FTf!|R4R>n>0x-l8O5g8pWcs%B|q;F-UB{IB?Mpxw{LSFhOOt=`*hfa*bM&Jw(eD*#4O*F& z{#3}1uk?EZ3+37Ry^$63<;}t2&+K!G_>_%E7A_)tu1(Wh$5UShBxmRS>Hb}YQ4jn zotc$y?b>0j7#LZ<#oD@laPyYoA*A^kyEr!Xj*bj(9^Qoa8hd-zj}0>4T^(C``^PqQ zjxeC+-pg?*g7cPPyP)|K<}p`1b?p?Hm7bZIIiI%ioA1tUt~0y;e@Omc+i0@AcVx@@ z;UTLmR8y-pGgICU43BmX4{fC%(hCdc4|Z zYDeXFgH33ABVvptV1Zs-o%?Zi;=T#L({By9_Au7IzI$|dWQTRhP_L-iPHWTX4r{|G zewv)Em=^;v!J4CBx*|-{&A@g~o>&kY_JSqlj-Z|34cfyK>@zSry16JLW2;19c&K*} zeASuWJxsp=IRdyv2iXshqj)+7j&}mc03avd4aczhft{W7kdWZuST4qHzyusvG-#^{_vp>R(_lvRBwk?0?wH>@)1$^#*$t zyLQ|QsrDuI13Q8B%l?GA{0I9N_R`vbn%oEm*#yS90jzQc_<**G9Rmk!#qL|5V>hv# zVBue27p^n0d)b>r`X5rZ`eOC8$Fy{I9v0vlU^Zqyes1KvERr7 zY}ZiA7h<=)GG5Lrpff&Uf9H$X+t`Qf9riAJkA1-Y%--i!yc&D&)$%%CkA3nQ`C?35 zY2wYig}3rHzLdA~W$Xd=AbSMb=pptn_CUJ}yShHdj$^OA73|;GXk!&$&DUU;v9)|1 z@8n&)oA>ZubJ<{L_sH;&xl>+EWnCk^TYF8N;$kiv?ne{cXzr9(Q)PE25}SJDr4ny; zj+z(gAbRCBU{TNTXlHkK@6c#Kuj|&lNC(xcgIXkE^omPRHCo+Zr+h1@-{Xt9R)@Y` zzt-w-*2`;9y+`7pjUHc24V~R%qrIk0^3ovl+axcG<-;Ly30my&TF{Wk7t>;yd`Mi( zOLQEDv)STfgR*+GL_pi49`oMAePSt8wYb`k{W~7@dQcdg2m1=K0OMRHxvWyaq1oUO&=3 zHrThRcYEMAkNXuK_dDG8rj-)Mo#GO((pAL)J6*Q|ruJPsM!*FG3oFfP@_IjCNDz_#OaTI+pRu zs)jc7oGAqpdvwx`{5>8X;ppt@`Nyfp^KepjpIu6W&z+pf?A{#W!!(qanL_;vA^Lk zvA^Rmv47(*qlfnu&OhStNA1}G&4D8Tyd1*(c^LGvKXh^g&NEQ60f3ze?n}fwsW@mo z;cOjaMPRH7j12-~BU(@;%20*FA5q9Pc)tZlAS{V7K%kPCL`h7dBu4B=dJyRk;qb?P zq}L!l?O_{;y+d!q`Cc4m===MS=6)Pz=-vl#{~!)C^zTEse*}j=ERn}>K8_=RJ&hxP zJ%b~FJ&PlN{T>I0UGzN8L>&{XrIUdFAr46wMbJeNbTJ6J7zJI7f-VL@7lWXS0k(<- z^qS76<4iO%0%|%al#Dv2yfy0;1#uve1|Le_p^iBSP>)(BU zbN%uU_(s3<{S|La-Xi}YQ#<~Go!3q}E_Ph(eA}V_Lf_FMZ+6`5`sH)y9e(*tyrV!S z5>If!6AHZNOVJuu;4onC+LfT=Y8)nT#6hGXZs39&6u}J&JBGsq+x8xusiwK8X)bD- zi<;)5UKLn^9|Q6yI8^p24i(nnDZtlom|%N`G9xU{aGWD~B+gW$T+}Fs^%)KLmJj!DhoUZDe?&fiWD3w8!$}CFd)`iHO zq*oQ{tp)W(y9}>J{TxF592WZr--uqv&Db;eR+Q%$%JB$V;&If>GpLc1sE1EL|5Ho@ z2I0uf0xCxXVkJB%96BlpwGsqfGY$GE5p|G`XeiD;;Ky)JtE+R~Mo;)I@!SaR??lh0 zm(N8isc#u-i#v8uTGP8GXf@MEfcOm7{NBf};D`AUeha^o-^U-puD{Rl7x>HkP5u}D z0sn;mlYh;>$9!jl5}<@AQA&&wucRpH*g>L5S*TQDXMh$&PIV|f$_8b#vK2dG?olpK zE>#XF*C;nAM={gn0p&659sI2FqVlS8LU~vDNcmLxLitAdL1n5*4N}9@X=<#RsHUo! zYQ9>mma8@DVzo_OsjgG|)J^J$x?Me6Jy*R*y<9z{UZ>uq-mc!GKBPXbKCM27eTZLI z-&RkmAFH3MU#j1#rwoe0&oIRhVVHsaiIWX!hHOKjp~O&Ws53Mf+6}7>U4{X}kYN-% z7wHYsC4GsLyl6`F8PS zk2oLnI5&xV!4Z6cxX0d9j4QMoqmwVH#Jx>$isYAcabHVkCb)v#tvunp=kvv{3&gJ< ziSv)*Nvb&CEY7pVIZ&LN)eXq&E^*#5@fo%5;!s{A(u_N^c6!bp5a)B;XTC}EQ6hvf?6VL7BjkV7==Y{g6ljR`Xv`54gNyY zPl2Xi02_cbeWznENX&{i6?i8 w^M`cik>WlOJ>x#=2c!QhJ$ZrT#lzda7%@D<-*df>iXPFM|Hu}@P;~wO0D?B}hyVZp literal 0 HcmV?d00001 diff --git a/static/font/metropolis/medium.otf b/static/font/metropolis/medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..aee4d98c48a94810291c69913f2b0c764403efde GIT binary patch literal 23916 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 + + + +Created by FontForge 20090622 at Fri Dec 8 10:34:17 2017 + By deploy user +Copyright © 2016 by Chris Simpson. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/metropolis/medium.ttf b/static/font/metropolis/medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1bb9493cdd199f6a7a6ff2437cd0724cdd29d484 GIT binary patch literal 35280 zcmdVDcVHgH@jtwK_Y_rI{jn`sepDY>mereOS+a`NC97HPveo4x$;gshD8|8512)B& z=1@&Dy@uitLMRDedJG9*N(cdx5Fi8y__^o(%(B7~g^4>wAW}wxqwB`B%nF_c5j(9O&A*#o<6s zY*#a$`weW~*}pa`YCmH^Pczni&R}0x@AU0EKgF|?_~sAdhUvKBOu);<@5I5Ou^sn~ zFDS?Fw;3}W-#pUO^}v=te#2Nm4P(lVp{^ZU_<5`W&k0}aaMw`ZkN8l<#)nB9)M)m9R>m%;G>TEV7bh!I0DCRn;f?sl;v2&n z_|vRXxrrqzn_04&%F>h@SrYr6Rq|n0gl{Upk}Xi$Ss4#wRs1xT%l%mezt{0EHT=USG3W%6)9P zayQFVe!zJLO1uHzPx1RLR?qCLL5XFNz^OyYVdd&7wp>;5or~ueuzGR69O;3(vXjkK z{>7RJrlF9{QI6qz8w*y>1)gK92{?a`a|Zv6Wh>1Njd!q8Wigwt>}8FL6}apL%vP4h z2U(o58@MlLHS8<4h<)XFK}liN>}yt|UdXEHKJcXUjr0z`fHm^3Su+0x-dm1xma!h z5%)7eFPoqh(aYy+2*W+1AJNX^%j}Mqh<-SKf$t}3I7@ZXj_Bt3RT5c)pe51I^Goyt zol$3vf>uN?pRalh_lSO=o#z*Hdk*xg#`#lxKTyU||4!Nw{XD%HyiEK=JneM`e+wRSo~fRQ zR#Tj*4G2D@Iwbn(ZGrfa+JxsB<$QtP1m2_XQC7-6$GHvPGJJo_ij-8`V~z?ZOyBba z+Uj{i-Y}A$ByZRc_#S~YDrLFq7RZq>U8a12^B0gUx3Fc(GmtHiONN`!4l7t9zNyOH zj(-TbfjXV!)5r)mveCaWLY^|d4|gDKSqwAqEjX`$bTqOV>`ZnuyOrI}?qc_{huCB6 z32x@$Jetqp349*U;sv~jm+%_i$XD||zKNfy6e!Ot@2SbLdt-kc`&8_ItR`!Ob*6Q; zHQt(R&9oL-kH&|AOGv)n=mGf=_5}M458_cgmdEo{p3d|60=|fs@dn<^JNZUF49L$Z zZv*n~*vDd@jQ!fGSi`L|tT6&|hIN62?D(tWw~nVB#~e>Oe(iYJ@sQ&I$Gwib9CtWw zbKL6qmE(HH)s91sgN`d42OO6=E_PhtI8S>;E7P*krO;U#AkV{(t{xQiOIRRp$eoyL6>fXZj>?{giL2%z!#GLDTs$f9T9W z7Q}+tG*~7fER=<@a2CNLSroINUT3mdEE=^vo5iv@sEarj&k`U-lUOpdu@p9!rLuV} zjm>B2ECYO$#j;rr%Vl{ipB1n|wty9}g{&Cz9x@laQifJu!7AAjRs|VW0~t^UeFQnk zn%Gj-%vxA0Yh&$f8S7xn!CfoaDz=)ffqv~|>)3kMg|cjAV{9AS0Xu3hyNK;)m$C!U z$d|Dz*g_NH zY2bW60b@OAL7y{G!Z*-O z)zEI(WjJDZ-0-sD17nD>-?+zkpYcuO*QNlI)zo0>HEl8NGaWHKVtUo|iP>aMGl^ zWk&T!9gh0k!YomibjvEsLCedQA7&)a=$Ns8#+x&hnI$v(XI?V%@tNPxvd*fTb>Xag zX8kidDtb-yzUbpIN=#bJs+jX*9*FsJ_Kewevp3E@Jo~v=Lu_{JSnQ$LSLX!Gshe}* zoLA?3Jm-5znL2B~b<}!;^=0cP){}A8xW#d+;zr{xi+eoo(eCGi{MFN=RN{_}*G zgqnnd3C|{coEV!}m$)nOy2Q7WW+e3|J)ZPKa!K;$bEd#`o__62W2P4ikcIZUFK;a?KT=*^-g~4xK5j3r zddqR@jgRY%J96YmT<_i^RaHm&tE_7D$r&*%aY^e3;}a7TyKr3}-hs2TJcsR=vA8*Mz z>^ut?i2!s4@{fizWjw(Q8krLc#J3=)07WmzF^ez9O=Z(a=1BN(T65Y(X-m^Khi}Rp z3LnDNMYuDpIWjNGR0vlj;w4S=`32(G_1Xs zkv;FM1&bFf=8?B=F)uC;SzTWf_WrD8%}pbLi%No88%jctN8evHH}n~Q`}f9$&FSd& z8Cja+Tg9$C46d05O_Bf|!NLW#1+i70!xN1*jLrvAX zbxVpH65FauTN3*!`CA#btg=~Iw#01viL%k!yq5gMU;yGN_K@Hy4~~+2y}70B&bIf@-gBZYf7!#IJlsyOQ}IqN-U(*RViRSt z6~uDzd1r20OG{fW-n_G5*~6n-AL__&JF(~N_wmjGKFrskkGI5GR|V6!*_3Qc&Mzq8 z1?k+D4l~XY%Pj&4*=)>sk{@M>G9xLT#By99olWHRhoI0<9#j_YZ!wvS{t@i~0qqg~ z#vqG-cv%n+4Gjv$WB-Z>|0r{C6rTEZMEILb<|zM&3V%H2!_xyTD+Bxs1C8c@z$jx- zticc)WQ>Y3n*s~{16EoBr;7yU1wlwKGZ@d+Id~ozXf_2cFpC7>eh#~%Pl-?pVe2qX zA}9~y2`xa0cyi4XPpsj)RzCUUO4)Wet8#2-uR$|UBf8}mcnFAHsj0!y$+nm{o9zN? zS{4L_EiW~p7VvY~$GjN*N)=KiFD^2d`+dA>74BC+-aHRj$k*Zl=v-aO1i1wacl^uo z2!BNRJHarcafI`=o3)$k)U1=Qpa_sZ`QYEPl_vnp0xs}?X3Ne8ql$JE#n=V|+H`kcqLJP_wNdC-l+n zsSmd*1r4>ou(wctoZ5&o1NlWFOXX>AoN&?QkI zX_!)vvIP+5$K}P@cupwkour&l{!8tyK;F2cr$@WrW4~#u`&QsT2|Ju@~@~cMYWon0(6)dV-lzj`~UVzLjdVO+~Ig;<; zvD#Jq1MPjKrL)0)J-8|Z<;w#u5zsxU=nV=Eatl8}d$ew_5=p-(2xnZ{rlCgojVG>X zDcgN%ckd;;%bGQN-inqT&C92qyQ+6VVPDY3<%?EF=kwI!%=wFo z)3X+8zb(zqDOZ&8oNUloVFkcpu?Ia++X*_YA!#6vbMrxu0wN7i;F;dESOD^j5-rXG zQIsbdy0laUDvXa{1e4dvS8O#+$%j194F6LW1-f4WN<1Xr} zD3DzbDiQo2s6qH9!%??Je9QP7+I;>7zij2o_gAhI@ah0BQo<|914LtF9p4IIf9zO( z*IfWeuq=*m_#2>qIN2Wsd7`$7#dYpBM|#>r54H|g7IsvXbe^|v$L97-y?C!YWGYLW zSK3~3+NS1;;jrO%T%-d0G{-)5iE=Y~g2mo43RSDCTjKo!i-PKvazIvfPB!$eimK0d z*8QE=fB4;9*S>pNea51IvNg4x7q479FKAhA-0bw)=PthH{Xbkf+7~`_bxE_?l$}?) zrf}@NYwrB^wf$pfr`g)NoBFS4Dm7`}Ma5dzuif+b``7M!VNuKy9h@fL2wzZS`7?Ay1GOpCwsD!hhTSdRC|h6_SV ziXr(KC+tA7AQM!SDK~i@57p1hc~!@7_nF(*eDOkVd3o*&Zxz+n7QLn1yS~1wV9{9X z27aKRqfk>zdrJv6XPIapmx(q?5`IC*+K|I@N0-E0hS6i>3Mwlzi#`}pKd$

  • Srwfz$1 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 literal 0 HcmV?d00001 diff --git a/static/font/metropolis/medium.woff b/static/font/metropolis/medium.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e8b41eed538dab25ba720fd2b2c90e80bcd7e86 GIT binary patch literal 16964 zcmZsCV{j(T`}G}fys^!VZQHhO`;KjEV{dHR=Ek-+wv#u{ul^t3t~xVwU46Pwf4Hh^ zrl*d(yqFjO1n}L2L;#5Y-6Q_~cm4l0F)0D!QfZ|K1&uBV!(F(O{Ikv!In4NMFS0DE6o)80|XEidD}Q}3XZ{SLGOS}0;)?w?PA zf0AEF<0txh!I2>V33c#^fd3nl`e{Ge+gpFqbN2<4ssx$$gUNse0PyXF(D`1(|8W}4 zu1$7~03hUqX5d1QkWdV{Ab_7KfW`myn>m@k_xFzX_ALyd_VxDez~^J_V~Su-`FlgM zL2?+F3xMWt?fSwYz`;lfP0oGAU}2{H!J4LGV32_vW2|GUf>MHklL0J*LU;eC=bFrK zp{$5H+~ceVDT-UEp=e{xutYBMI`VfdFvd2riaa4>2{MFkFOS$rPp zyT-y;)hE_qpDu-CVmZrSrCQW~cihW75t1^`&k33CSG>m^+a2|RlGh}f<>_l7(VfHb z=t#3s77s?@XTs-0RG|mRucc`l;x)0x0@w~B#qsem5@XDMiuwiGFct@X7oMPAE*Tjj zCFp;vO8yp_bLt7idF42>4lq^=<0rA&JQcStGr9e9K5#|AYZucK)|ydvrc$ zi+|`d1r*^A`(_KOxi_R@Ri_B+OcPbIYkJ|6X!H}&yj(TG4`>XByF(4IO>^zr;UACE z)YnI=wexzCczwh9a%pm|QYw;Zz|s}*({(9(wA(j-<_ zuZQnYy#CpaasON6GhM+2!y12-3sfhnd?T3TuNU!oXeLJYP^XO{+_(5t9e*#J;c2M6 zE0662&Uub~P`^ILe!?fgE?{(x-ywEZq#pMFkHwrDvs81TDSNj0h-ksN*QU|)ns+We zeW9G2%F2Dkbh>E1^cJz@n#c!Scy+)sL7)js4e8+ts)ZxA+0yc3jc&)@0};;ri?r77 zlde4>2cK>_p$wmH|GUoLjqhmI&*I8|B0oF-Mco&JCT_7YS~_8snO78fdyLV_-!q6W z#u3h!N~0lzH7E5c8Le0Q*?HR_#uLs08TyLpDk1bXTZvfufFx_7rIXr&J|xl`Q8`?J zG5gN1)%#lJ%)4Rq6Y^j5b;JK^zbQ#vMokbkr04BK6+-0SzM?1>`p@r@RIJ1J=>;Zw zzUeRZ6DKd+z&<=YVK6Vj-?or@vz_twt9s+#w8(J&V7$fNxa8JkX8L6M80R(w?#Y|b z&rK5Z2N}=fSfzrILz&?SK&<0$G5o(m)V4e&!a9TMfn+koWO_^)_!sHUE2NKn&68Wgshb_b6RXSFD?A%lKsfI6FAZijdPW36XC6(Q!?EjiP%eYiK zJj>S>P!`LzR2r<5V*VAkS7WPml`A)ui>a15mn*5d_?=AullypC)U&0pJzh7q6=bu| z44axdGGT7_b@4f)dfT{~^Rt`|^|A+jcMLPQ|HAtEd%}I{UpPI9g`wj(fQQI))1N5_ zXZC~dd2dAF9jn+Go;2Jb+l`XkkSof8IGi-n!U$82h9sOM2OL?FI2~09Ym8EiIh17% zOBymg+L#9=ZIpCM3SBvEoTZpKDBXlPYITw*tZmYmuZ_llC`w}zIkjG9z9}%}AYq0I zMq>(l>EF|p8R8pznvcjAR7KadPokK46)*-wpdBn^oizQUv1>A?m z2b;fca3%3~A6qu2NtaJbH|td~eva43vZxJqz2j!h(v|q`wNXhcwbHHR%vwe)FNzz> z+;OwG(goE)!Jo{cU50~oNkPdD;UBoWrPcWZxW~a;RE3H2S$kd8#PrSKnXOS!>x0@! zSFf<2-X+1``<-mRz67=-0I+k%b2WV@H={gr$MfKRTy_ln{AGm5I~b4YD1wN@8$K9* zO(Yf`jfsR*2L+9_8zd1Oj)X)aWb{l(L}GF-NGvw^9V3&7NdyN+ui!s2bR!1l{r;*H zSpS`fr~Hh`7j%51+8KSd z!`d0~G})WQHj`O#6#5dI2OX0}emlsdNYahO3tM}VsyR`7IO=41nn?O9sn8^pCK0V( zR8RRQtAuHps#TbklI_1h&)NdDMJ_AdMmw#{rP!Dz*|n{;M;m_2EH#U4y+73Ve47Ow zZquLr-3B!)aTh*jY3W96Xr942)X}gF z#tur8%yp`y#ulyT{ltY;3#>8_f1GIVB<=a#6V|FgxA5a(fMi#FH*U9Pwxik1z% zTjAJRtJ=apE&l0|`LFbF^S!7Wr*{tDTmh5;KU)f`h?$5I(sW#@X)^Yt3)Cd35}2}& zg$sWs2A23wuqx>e_W$i|Ro<{3%Bs!Rs}zlvmas*ZNvWyLmKnwOo8*>jbH%o=zCF^g zf0Da@H4@q*0img2ZpBngL?9rLYOdM}qPb#sPSB9RkGb|Hbw(V`x@XVWqvPs0KbE)N zvXY$T=K4Rn{f1eHIK8Txmi4SJnwE{3mD3^i(eG=i0u>qO(-p|G7?~QdaFPZNn9<;Z zSRiAzFs-0Neot96l#X?9E?A)S4Ed4e+P<6bVzJ^IK%s8bd_8$2+y&2{o^$U;v)Y8o z`^b5mMX}yv$z^dEo~-*8RGtqCXhu^R(a1cw*7cb%q_u|`?eFcO_Z`>&Ft4Q3&RufQ z-m-F4)z_ct}k7vyJ53VB~!-0-s8q@=GwrtWD^$~9MKnA zZd;i_AvVvLVkSYsgd9%IGqwQpO1v>|gex2xxTb6peP6&ZmS7#kCHI@HE5v$T(eN2o z+|BL{58`(R{ro|W{cNfN7PlbA4P2!?FjY*#2&7*no0$7;DV~IrcqLyguUD>{$X9?D zApbPLUbx}$`f+-a;=DN1|5ZMtnj7%t$e+axWntiUvtLu|yh4yBL7v*T5cXUiFmz+q zA!jcwDo~5JQZrw%Kb7C!`tx~C{Y+rVgPGg>!C_+Q^8Fvs$7g~|E7kQdbt%Rvx5Sj( zcKp}mFOhtCdUXsg^U0d(AD>2M*20_h{@&sS$}z&uta~r@s~IgHy8N$`mJ*8$(TGVr zpS)*A`ewyU^Jxt6$*4P8mAy3jX!V3_%oEu5(GT$Of|mq)L-h1&lUEzeetjVKmSE;= z%O+ZTQ&=bRhuPPr#}>MfFURj&k^j28$IJCDIo`4=ka!cf4@c$Y56vFbR39HyRi4oM zFk%;2b|Ng_Av*$m&^!ociWs9MZ68^U8r@pJOI=@SI=0lS`cEDZ3{*O)=JD-A{Z3cl zowbi@v>JB}-xPFB?R~68C6!!!v|hu^q>GuUP3=TiB|Z&gRfM$Pt~;y9SkX*jF;b5f z2U&lku?#=_&a<{WiY`dUI%<_!ekedoX&$Z=`U#*>o|G0TCPiK>i6``+bMJ&tsjXoS z=+$WVeYO0t1V4qT(`@s1ZSL=iclk>ct#%E&c~kfM;shNl36#~Ahz^HsdjoXE+t z(SUnJ3Hk7ybjTi)(|ayf9_$dmV8rXJ^qp7RJh33qsK!rEeSLzj_|!6GZJ~D`(1*{p z0)e7gaLB%y&mp2uF4uSj-v?{ho2L-dYs6oVVY#y>_W+*}m9KLE!NUR|Ti#$H`Ilk< zA6NDoJK?&YRT!TE7f>J@ksVYSM7QZG8KjYqk&%K(C+D02+f}&aG(gy} znGBoSFgoQ0`H%=o0?W7sOQ>q}Y65t-^JY}behh-XvnUPNoYGDgXbBM9|HAZx=<5H3 z7*GguvX~A0vw@;o9$gm&SBIxb*rUDD0FXvhA`CE_o~*y2DiqGv&h>UWJK7&%XGcV2 zZ=umd_V}D7Ii4W^-oFQaRH$8U_c$&3@`&TTr$e}n{x+n+Zd$dQ?QCbeIV4}wQwD}r zB;10y1jB=Q=U+!p$tjjj@l2nN{>)%&E+emK=`MQP&9POz7*R026CcRd6a@pWtGlLF zSG2Z7^)rHQDgs7CN+D59i0;e#4$P_Y$|EN8o>MO(L|H4c;AveK7l&ftfw~V6un6$B z72{L(>qr_F)OrdQO{=p!$+nX2E?jm5R@2rnIZHYl-MDvSKm5uK?Ud^daBLu%>n*P7 zjO#7_>TWQDl)CBK)4TucD2zFgtuELx+W@D-N+&K*l0sl?Ko|BNT=ZUTQS)#jmT4eXW%32XO*wHq zbJs)EntjyXG}oDDe&(Pt($^E6T-63z^&(oIfz=SZq)Q9_p6!l}rRU=M(MjcxA+@_| z3z(&7gsB2IxN4d5Il=;j8=j8X=S}qb(LVB@v(>LDeZZ!?3e&T}r#dz#e+=*)vgNFEK9k%^n8xmzSNto!2^!Y z<~>d|qPdvWyuR-$Z|ko$SV`BnwUyZI28AQdg3{{W^)prhzbKz*!KhZ6^y!?Bc&SIOR1=ZO;)Pe#WAwS5gMrYN_z!5lgy^}8-G{AZ|5b#^^d_-D0 zBMy$9b55r|`4TN{n0;)+%mBs^-s~BBDtT96kw544AgSci$KWCevD(Mq=Ti1^zlF=4 z7H3n`vNW`gi~;>B#o*=Sixsjt7)MaL4a|bSM2x>K=E_C)Utr0`%p2^Cb@XKk)O8_7 zd#n5oh_A1F|2y#x0b5XLDNhPg7Z=*+uJnB%EI08Sb|%+6=xPef_mZpT2hDe*9X}SpzJW$Zxpr zcsVrz>3s6jAZgqg8NTn_-UKkOH$>k2+2_kE`u#jX6hhuTv>Nu5%WR~kzn`|TG}1IP z3@qtDO{Xx|Aote*U%rt91H$NjCMspZ>#vGq=$F*V^{4ti{x60syJ?#>Ni;i@TycuX5i`SfVs(wugeZ!50FmKd-TbFHP6}eu*NI% zF0=-4;rYYi;(2cYh!uvh{I#FeVjdp=roiPraSd2v5@jQSH6s`1VuQA!+u>p7z>_W6*B>AS7ZI9nr8d^kj9nqsB$St}iKhn1i%5XtKBjC1%&EM&88bXz@6ZJe+Vm z{k0d{+-xb<#;R7_5~I;Gt3h8X z!+_wwxv9B4UGMi}hkpP3UQ|6^A#o)1Vk&1JIGYFP4wEfVBF+Xk`9x<|D%Pu{h zHrEp(ovZwwct)=zFD;9Xd_k#K5&RYz(0SM%i7?N?j^%5K;UjlH>ppwm5{HH^~~d;>Pkx^1NfONU#CrP^fkp@y8-yCpbtRj$x7q4u=w>b51Vn*-;ql zEwjGvm{KLknwK~YsO-FPpNmK-GkLLU)tNzo@nnt483vYu%D#24`GI>_M_UK zvj~WG`29KBdl!1+&R))?tIh6FJeWp~axdG*pj9t_Okp=lo;!|0S8bB<*BH9I%r7Rm zN)6ODhCa_e>y^MeI)RjoESX(>wy zHD$~(ang9k zY5T#MQ#cM0fsaoFm;~p%V}Rh|*Wh_+4=jx1@3v{o=V&OmG05v2*V@4JIDd*`<){}g zw-$4{%LJ|`(9VTm^j&C_Zn)?|L@p_=;e!>7`*S>2R=8~S?lxH?JUNR4>uYD6f>^<1 zwJPz7WtE>&}BIr zwcPzTdq;~P-ZfS>B#sr|hQ0)IAA*#NW!<*JbWEa8a#$cYqcngQNcV854^*$J_ zXIbDR(Jlkae_cut9a`d~<>fWRt26_0KT(ZOS5=N4_(H&5ND(q6A;#+&@sl$WoKr_t zGx@jjZdkw}GGkYGuD&>)4s-ZuWSw!G?Z2iQj?hOh-|Y7v?1LLiS7risn$o z?5loQp6B*8DaRn$WSwOc227XW{)i+#Hiay!!$zK6tXI_cu0Ogt%E8AtyJNqc>9Jl# zIN(mm?FBnRjo$qTjKrs5LQO3PUm{#eVz(m?;rgiu4P|s?t2fuNM=i8GKbeBB0ptx-JT&p$}L z&wXQm^A3~ws=I9VzqHzDuV^#fd~jSO(GR&zWDN>}*Fs=0%x>epzMsuDS3(Ocr$BHg}G@2tU&38aQN4sm#XO0(Q=f zp7s|RPRCqWSzd!LK$^WM+3CpGYl^GwW?vs>+gBjSianvE?14K0=$Bf-32~B}1|?u0 zT3dUHu%gYr-Y#M#bvzmnyS-8n{k5HVs!kZSE)3q2VX~l@9AW~GE{ic|(y@5Dpx(P; zvwVMr2PZ)}<^9b;L(HFjzCM^gtl3*^^ydA{K0~>8Ut}#{ecOD+GTWv)^^xHA4dCJO zEXAr;3tF@nY_98d5u-nkVh-1vac`ZwuKO{I$-Fy5Wdn{Qa%GqD0E!vjxubFm zQ<1XEGo5_id$WD?RrIG;W~3{c{B}R^+W)a?P`k#3gMm{MXSsc$75QNNv$k^uztxE9;HWxTj*V>9<|7h5bS?pT%uu+$n z2{tdG1i;6*o0D=TF*UOmQ=$(oMn0q}*GwJJp~?>?XL zut?k_K38CgXIyxrqW?6KggEa`_pM@!o?JT$g9d1d=u$)mCOW$}ici|~(6j$4rL66? zgX$qGsQ6#BG=b|P4mXPGFBw+U9!AWc- zFIS1e24XOhrjFM(-A9Mdh_ZFat}ulN@6r5q+9#M*TGpq6fxSBa)xlf9Q_4ruu@}R> zwyunl`)ix8HJd-r_E(8D(Q^vNWm*08FG_5PP>fWb$NU}wpW|%z&>dIQj?A4Le7YJs z0=y7@iyvOu9-k04BwBslAaAGwFm5C4MSYvuWwW!Mx|4dmz$inUn@pnQ&-tI_Q6L-* zSg^19_tv2naC}##g-D+jUpo;L8IKq1GM`#o+%-NoDL-$2KZm+nz;u9^btV=%X3q)bqcHm~bz)GQ;7*_Wa2f!CzxGL+?8k)F(i->~20~kmd>; z@txF^Y=h-NRx$;}8t~c*MNTl#yxJ8Lh*btZZJkF~)GT{PQDWCDmZb`0CB3MY@Kya4 z;qCbdp-B2Q!5+P^`5cWo(7O~tVK()&nHbz_@6(XA^ya6t>9TRM0M@@W0KA{kMUdbt z##6ucvEF{b!Bxml#ZMJxwsb}bzh4WcVz1@l!Q#2 zx#)Kj!wI;8MS1klAHiOZ=fpwia%m)6bfJnspq(-^ zQEKE6?B$nwU8<)L$hT^c3II1Y7aPh7^4OaH_;y0TD z`5g<6e99L^oAgYhVfuc~Q#)yUO|xP)*08_b+t3$`s4Q5|fH7%B%Yz?Hp|8%3B6hy9 zx-f{S7~=;q6L!~*Ml>TO!3t{}tzxmz@Ui6*-fQZp7yf}4v8j;j7iy18tcXBMz=bfR zie~{5OYl`#d7eue_|C;89W+YW1dF9Rv!`(TQXLnn+|O@%FdaAEaBAZ+o6ni%6Ol}4r^kTi*IK}D2j9tFQLjiS@E)^{TL`r1ei zJZ{aJH&k405#<22eRw%VVJwikFVdmxBKGEh>MUS~ib2(C&<8DTgGLP!7{UAJ8Js(Z zp$_jUORHGu@g8OpKak@wDG?O6VmqL^j%bCOp=`=(54(3Q&suc712Z}5~D{ASXcMV#l)EW$HA!^JL#xQTxhU3bC!cGuRhuuDkLSIr-g*Vyx ztAO(omV0=pkdr6;m{|>@BsJ;^pNyjMNQapWdA<#%4+zvfBpEX9jpZQHm|WK|om|Pr z_|aQpse^5>%Z$NBxzCNW?5EXStrE>%3;C$qxvatBJ%*5DgNzJV z*+`d_y$Eetrf+w)HCNV?Gc}ddtN*iN*@W5En@Nskm))M>% z7C(!5j(D@xTb0kQ%${$`1oIfM9M5JsshziLTU*s|!>Lkn9c6Ec*R8}cDVc=i8n(lY zC@+Q8JdoVX9zJcl^ZqK*@kv{Eju%2~mlG`&M`E*Ev~b&4UJ!vO$5D3QXK$;SNwx*- zGXYnV`jR)oQOI)AHAuVk*ucGta!Bly^=pk!%&9MrqtH1KliG z?YcEjrsogePQ8Psa+6-$Uha+Cs>m zO+~1QwRP$VuA_!7+8zy$W8*iq*bRMkWqaCK*eJI3q)6Q>`pW8)%ks)g^3H-b+|J*a z6l;pj?Or^?IYOx5>@rla4tpLAPvFa8vPB z3S7cV{-`Hglw5O^!QpJ6UFq=})31DKpW;y`cuBpW=pE|~-rqb-&r4RNfHPO)C#${W zAN)xAMa)ANizEEI=ZL>>dCxpFQ)ZWWAJN?<3x!YmrMzuyRqBjSyUeB1ezk5^%-p1; zVeiKD;ZH)gPWsKn>gi#S`8Xt;{;VK3%vXPXBK)1R_i9yt9%0Q5R^P4Yb}8@gnMcRU^_r#QO;6!p%1ed-u$!02sja^8lx+#pHf9O;OPWZN2~KsS2u zHHdPIO@IBJUN15PCqA+vWPNLKD|cwagomJQw6`LB+ZpDdcN3K46bXJ*)%JM|ZWBe3 zxz+`Kcbb`%tzmZL(J&4$_f15+-c=TMBjM-XG8KbNkwP<_oE%+-YAeA+XQk$udqA0V zwsTXlEB=)@%_K#D9`NsUZFjBGY)Nt&6&>0;a~TX`GDqCPY36qfN%#O7^98Pk;I*?K zO0i5hgLvw=S=4bHG}mDcOI6aE_#UaD(fg>hs3WLF?O0*C2J(W+68b!LH8pDWAWr|~63FnGUUs}(sQranZ~fU>`q#;9s7&u_VnNJ!E>HdKF6J2KCb z@LBTKni1KvGE;YRU!$#>dHKTo z8gbTya-L0)V6FB`LOr{Y)wtxWHMk9F&!xyc-{r`EG*_-ZqtS1DQn1s@IrI57#qyOj zaGcj`^(uiP;RkW|R!ZXq-uz_E_=hA1%st9n&YxlR<&oI^@-$*b*T7oW-heECPEM+iOw&W@f=U;$vIeXOe?I)r>_LT^z(dLuOa~_w7qgmebq@L7 z^#i=q%p|n4PkgSfWPxvnKZ{0CaNAHYQRYt^g(I>Ukt)-&DOKkPG5S;ralzcS86MLK zJmb80a_t-->h-iFG3E1U!)ix#!Y539+=!%`&LU|Qx=m#5?AB4&ap3l*F1@F17om@7 zD<9g`9i&bVozdcUqsjv!sMY)+YlTbL*I{r<1%vseb$5x$k^6-id?e!7Yvq9X<)-{xi(beo;GHo2K_;h@Q~%pjcGJJ(JeQL_Sk zQJ*BDxU^BiofQ8Yi3T};hNIaCf5@>JawY|k4uq5bX)l9#8I~n7$cs2L9fxpo2StoT z59G#ou;NvuE(j8LFuGH|NmnkEZU! zF7M7#_=AYY+u(@~U}NWj0uJ@X1*gQaJe2e=`@7xlVy8g$xWO3!Ta_fjZ*{T>(|O%O z?;dTggTwLa-=;=CY9;xRZl2y>Mt_}B2|+sq#*kNu7FC`g3SB^S*Aa=j=JKR2M;Zfp z&z}b0NQP$YR*Lk+rAc*USkoFjXvBO!1DVa*DuE^CHhBVVw+ z!StcAOxH(Glw3fihbi^PyOyvn6_9++>ou!bJ4qU(N{G25JoL z(nX>PU+cHJulUUL0HkqOAPmdKLdBZ8&Lp6D2+5UqyMt4ppT)(?4x*_7<6 zcZ(0)Al;|iVx94f$bxx5SwM#sg~`-V*T7Oy-~{#bl%}!cDqWiCVZ-a5^g?6Ts?qMh?g-=rS+E4 z4?6RNSlKG$8zX5Im-GaQ+cl-{0#BP=mYC6MZPbg!w$@<~H>{|J{!BjG_>8MLH_fhg zPDu$0Lr^fksoM0SYoE^Z!^7A6KJKtyR3{u!WGO6|Je;jcZ8S9?m=MQ4Im{l$=`2+3 z95>Or7<6{3W*VZUFOb7<=jZ3XZ>U@xNie1Mw>;9e1+IJuoa!bH=pex5Yf6FT@aWi?jB4X1q7sBK`N6he3?0}=0bwibXLUWB@%A}8UP{wXa z)D!J~lEaYX*QOV_Jq4MEV-0L-(yCM^ifbnih{u54+(p$?vyulr?3q&ie2Frwiu0U^Y5i9g}`ItZthg?2e8aY3+jC$QrOh-feFqREx>alB$q?V7HNORjjJOsQzm!zbgV z6p8+)|Ai*&3wRmTnoxP9lZdBfo!`&z-=-ITjuQS(Ewflr)ExiuPn;%+dwL>%o-9dF^P!~hM-QU7G2sOKo}2D& zJKX8}AgU%%?8>qW?a9qc-;gJCp{5`b1xKVt;Rj*!+8IReF<`X9m~-dO0mCf_SUY8Y zVbHY+{ycFqB=_bwVO~ezwyrd97B%6E^;Vd)p@Zj^TG>8})kq^Y?Hoxe$cKnmbwUK4 zm95g~!}Bk~AU-cjfyOX>B5sX(;Jp+#c)_1QBo7!<|JbItZbywWMV1o@9$Qu{M%P}(5_ zlWb7H>I7iuwH~(YK?j#8x^j9SgYYvi2tVyQuv+R7YincvBIIfn*Ita~JOF#wPM~8e zTM&p2B_JJ=HP%4-uk1L9?3qu34RKT0DwC(f$_Ncj<}#8j;0W}d-4Z@G@WNF5!{kdNPv0a5n zmxTh8-H{+9Yi$`dg?ghl+UaUjcRWU7Xl6g=3+GaZ?2@^@%(JThz8-&Z|L`5p*z<+f zm`akq=6$%1u{ZRLFC=qBM;V-l6hVbhb#8;Gia_?hk}#W8`~wlI`h@&#a7?7G ze8JT+@YMj=17Ajk)^Y~S3)0@SgHSXT9f&CijaK_Jo(+=>X;AIaii(+Gj)c`surp%= z7ccd8(%OQU@0~)Z%N&sN8{4qOlL84BDW{}&>fC_9kAx$L|d8?OfSLHvEx-eC!DwwhzxdMY+Ac8l4-hFR6RFolxp8)4lj9 zJf9!Qi}hYb7aRnx)b5fa;RGe&{BPm8E=jr!F-yF)fGyqQ=cr0d~I{8caOzkR}jqh&fumPQOK*;btc{Dbtdd-xCstDyv*zkwt!%B0HgsLWSXe7R8}(ZK3V!H{K{`E9>bu92bS;|) za<_SUb#0v8HQdV4p&=r!M;jo|qm?^%3Hcx*lojd`&U0-7bKD`Juj}YbDX)kp;pM}83sNZ|~)RO-}@Wqe;1L92E z(l^KVWYRRTb>kPRG)W<{gif^x;2D2}TX+Y&k;KIzvRprNSp@GwfKd1NzH<^sZme9< zwja2LR*(@Dqti314yKc9)wDoNO3|AcP5Ry^&+-IasdFAfbe!l{-t^nfNl)+`ciUH~ zwc1y?bwYGMAziALUvN(GU6qH0eG%m6HfR6mBgszWwVxNj9VS?}wX`h7jtGH?P*zu2 zkH}!L`YBD7+AUg@F%5Jyu5hHQr$^G2t3#pQXdx%FBHUWv{cBhdcgT>xaEHtbClk%i}bSXBCfW5FPB>{v)4| zVOKji4s^T-y)Y1%KP@@-`+c}lN^?C7cHzJvOJq|aB7*WYq~0P%lvbudMMvz0FvaI6 zi`d{!WJ2;@royI47{8uK4lHFf;JogVmjp^~SNIT;LF2lyDw(TKw;K|5FL3)MDy~BDw>0iq%FZ zd{Mijmtw_9>c;J7pCI%XQxzGB6~mHQwuz}5<8)hyft`e`Q}zvwTfco6nWFZX3C;9d zK#r#J!lFhNW$34GRjornUQMyl{ZIVd*+AGb-a$kJ9bT;r_!Mkh&n*ipfyW?@B=>cu z999|G2|8&s^{}i5AF#M>ub?`<-E=|wQ$Ul6)RbLOzae$f?b@o`o=ZE5J=^@DxIaJ2 zk(@9=pS_>xImUnWWt*gKgR6=f+QVPxuDgG~<>h+r8aJ=A6l**pXJe1c?b^xhh;AQn zV~3lG93Sov^|SL@1_&xr0}72Ff1-N7CFp{G+Q;o4h!OF|uJBW`$+D9s(vIbzI(pfN#;((G4Ct;<5IG(oG- z9MD>-%YnBsLCIVd`lbD=FbjaDq9n@7x}Y?|_HT6>!L2@OljW}j$`rU|ehP16-ETLp z6>$pP^JBo~{a@+upnJz~Ur3Hgq*$lu{jA@c@ln-@3?D|2*+-`RqKf9t;>7EP^F5dzseZ2>kaq>BCW_tpnF%yvjO*QtTb>!8HrGmMRn63%i7!hl+yvTTC1YLPdu7`cY zT5+!UnLKQ7uQ9V}QIqQenwq`FAtO?8s`wS~V6>cljY*SDQdJt|y-wx~b6s~>nntp| zcI0%;bZ}w#LYZo-Q)fI?xe9{0-+fR0U;A(D#3;OT~N6&he5SV_LZ zaj^*g8;L#cLp5w+!jg>4ORY{mBir(e{GGP@9z_4!y#N6Do*4#!3&00}h=|Fke7i%z z{}cPx`d{-{OHqfnQ9Z=+-MTv7c+~4v8jn-JBm#%&8~*_|V!&K|3Ui98DgM_#eY&Ub zS+m53RV<#9C23(uQndbOV<~)v|4D6RB6lD^39K+nbght;Xr*6XEUj2_!*S=afxP9F zuSdW0)|>D4$MjS8)!pV3HMjt}u>x#ad3BXA5-#r#VGTZTNVhTBhY5w|``1@8O8s_| zQ{?Ew@Y&fD%fxg9{11iD+0tGUkBKauJ(v~n6Q|OGuV`y+4f!C|!PQ@`TuxB5^ zvNa?>idErXw0#aA#m8B9KUKnFOybft!swC49Wd>}?o84eNk;I9c+ft7*+9nyk0|Wu zKTGx{^gN#W;0$9X#MHZ>qMc<|+Ve&^rN`dB&k`!GM)2)LV z+e8zEvXAjgc0}+=_dXuZX5Atl_hy|qnqsh30Vb;m`dv6~>b_g`Pf=tG(g3l&8^DsY zFN$JxSY5&$!O(uz7iq$P8*vbx2vQC?(~2bOE*5c+c?9t}apbHRsxe}MXwIk+eZmkQ zanx_VWqnR~oNgkYuF4P#|tpS!yEEScOVgeFV z;2F+mte(gLL;OjJ6ozWM;-7Vq(`}MDDR*r7_(+OEsg{Vj4%SN+suD$0mhwBPI9B|M zH;97T>OzZbt0ht-vGFEsbFl|&)gJN)PNh0Y;06^ zhxSlMS`$*)XcI7eLzcKbMiygO63@g0n|({0eY?AjL%z#PaO=NA+1dLDkT*Q8p=f_0oFDUAGyy@$84CE~An!3VbOu2U(8f)>4x{ zmF+0wF=R{tE_$?IYZ;!@r^lu@|)uZqZrgp737sG9m zc99*EKI^J&oOacjSLp3H8&!7c9aEdTY8_2>*L1(RM}5Hb%x#}8Kfiew z`i8FxB9Eymh)q&&>517$7Gqr%t9bNMkk9@o0o?`_RCj(gymiuUE9Lz8lsjzrmtMM2 z$s@>F;@zYx^BLqMygga&KB7_hsTch+&Yhy}+CUR&tnQV5TQPp-<(vi5yh+j zFLP1soN^V#sNSa9mYN`oy$Ws1YgGcRIALYTlER^P;x;vwL4%%|NjDy z0dW3GWj>Cghn=X%U*K<2dvgUFeI|C|kLI+f{ghpKUcHIN{-*XDk)6~u z&RDGNSbJ%IT-i8phtyuBHTt{i{3D$|SKrmCbM!>Sy6xewRQqgF!R=qEI_-~7(5#eZ z;)YfR?exXkbOq&J2bkh)IO|sdgYpM7x@z9bfwa7 zoSmHR{Qtl`XBvD>@3G)Lt%6yJZnKVEeiFM%bR!S&b>7@En2M<9MV)>C`}{240isSn zQ17&*+UWpT~YTQg-%WjuT`sYO6 z)u(aSS8$hCqK>0~R_z{9?oie_5aMhZ-FF)?16-YmmRXa?0I3y3WO~QAz=%fgd`-9B@p%qvIr`uh$u*{ zT2V_C0WDSBtySy3YpHdsV(Ze{T9w*X$$kItnYs79`(9qCzyJUL`TRfs+`N0|-FN5A znKNh3oH^&ro!-5SRqkPoGlj`NyME4?{yTbW9@7m z>tWq&H9jj?7h8)AO}M)fX$PwociWI9lr`dR2V0M)T9AXWO>7SC^dLtUo?3;c^O=+7 ziDMjV02GHvo9}kw$#tw%Jioz{!^uiYiefItsXz3i?KbaxI1F<#7Q-SEcUk<+x$Gfw@q%C(X`~U&9fQn ztwpWhncOtHdg6xK_4uBR-yJiWatk_79m8*Y6TUBLUD>kQ`Fh?bjM?sEOg+@mvUauG zjgr{rC-M8Bjuo4ief4?D48}t6z2)W3_LjDx+n1%|xAXXvbmE5XL(64=SA_4Woh#RE zdhn_ul*Qj+%yMQ$cWcWn3r`+sdxYuD}henB{6YwrS1v7+v%|H*^fTo(-;|4$aIevW+XOhY)}$*a3W`^2(WeHG6R z@-P?jsPXPX;P5MViF<`*uYg2Z^go_QclbCql?91g#DiQsRjEIsDs{>{W@Uqvy|^+q zU0(TO7R5{G856&nl8nusKDVAZm?Jqt;-JQ}R~(Gk88ome_u}GU3O~md(H&lgPdq*u ztcIUuRmvSKS?OUTRTmqr+{u!-jaBiDtOTEQejO`R=CX1;U%|UsK96Q){0aA8mB*3Z z%OaEoEE~TkD%RT;^`m6L3SGM-hb7qJG_f=?!X-^V74>n$SBNR*Wd zcvF?HS(L@ahAU6AVaPW~xrP<;OV~8v{2i`2{BxG8G`Kb14xA>i4CQK8qa?FYxMnMj zEQ9y31Z5X+U(BjGXX7|`Kd%&k9-K{353y?8pP+0O&(}~Mz8^F^#~geY@+}4}8(4%o z8D;0QDAYGf31v=xfTi+OwhY${{uC<)-6x7Ncd~rKkv|VyityXZpfTZf2ikzKF?@o! zpAC8?qh68XLo_peEU74i=ts0OeR!z*C88g$U*dBX95LFU9nsDFQ8IN}68+2{q95q2 zG~+|G3h+_y$9Pe4~P$` zUY=_^OW=(xfoMzh>vttyMco9i;%W(HITjo61>bV;PQNSqA@LLSN1rSBTkx21rFJ4( z4REDCAo!5lkm#rP1>#5Q6Xq-G`#e7l-qSzqd!*;%GZCLB@a!a3!I-qG5EPOSt^H?S1>M(XGyMz6l-No)<_p~kK`#li|2C}AIr=66kf*{@OHkOU#hs2=adiB^u*nX4<|mJ_^rd{h;j^f zBsh{C>5e?dSjX|?2#jAOUyqm|pJtD;U-J+i!xMQj&*V;C!pHD3Ud3y917FN9=Boht zS>+u--k$hS;$w;5I21>uW0+%vfSl_XBO$v#asS5sr27f?WA2CD54i7lpK{;pzQ=vH z`xow?yMN}s#r+faVfP{T4esmQ*SfE9?{QzDy{1)Z`F&rU-G6rR*@b6EeH{03=*Phy z5B}KtvGURPAAR%Djz8*D0@nZc|7?mF-KgvM0rx6mhC=4|faj~ssWJ=N%!Wa45F3m! zGnj?2AyBM_vM?6TB3LAgV$m#y#iCt@vp5!y)=prFY$Vzui6yfXmdestI?I6iGn!?x zEbvbbbFy5hS@}?t3ZWnsLrro)nHs~!vTC$R>fmCbKCRv!}7? z&?4$sJ(~e#Z6?&aCN_)BhEg{d+||tHvjuD+#@EH{BDMsI859brWgDROZD+gLRct@I zmR*Mt`2f3t9b$*sjqE4vCU!IXDZ7Q;%5Gz~gMWxO?__s_KaYV!>93VRnZ$T;G217; zGpKmWkXp~K(7!V%fc^gtvR^>OTx$BEgRSJF@Vy%<=q~m#JIj;6nQ1&7oS#ZPlbvMX zW1fS40BuVAEvGZjWNX-FD7?LFBiq8Zq7Pldb~0#SYzN!J_OdJ4tLQ~TSSKIMgLp7o z!9&6Mg9L;npamV5qK0qtIKGsh4wmzE=~~S?X%_X7zRT ztR>wt-?H6um*p|b>z1?D2^I6I>oVCwO1*eZj8>pAFVRVnRwnYD0QMt_(RH@^;8KLsEy- z59t|lXvlp-o*44-kWYtvADS3i8hUZ)zR>$Z&kP+jw0h`WEVj??kf5@sSH7w?v+d{4y#tYDLr|(P7a` zq92O>E+#u>Y0OPApT?Yzjfl;RofEr1_Sx9K4~rRAJ#5pk)5HEWJaKr<@KwVP4?i

    2;kE2EP~SC8%-y?^xmqu&|*O{OI?CNnd$GIL4hmdu+n zPi8)!`S+}-tg%^3vTn|L2jYEv_QlyJvtP~r&U@r2IiWe}IpsN>IR|o%=DeHpuCvnF z;9TOo)p^|ccCICNZ0?HOQ@LmJBJyhU_T{~t_fFoYkQIyEh5RPy04k(KG^9fcBtS8G zc^UdLwe3DyQ*(4#jYEw;KTQ36LQ+~%QreQv~toNbmn}_U)2i!mYX!v=^Tli7+|5F9OOrkcQ7O*i==Fn%U+71};kfw~M*g+$Eic5T4g)UUxRcIFR2jUKZ1V)HdAd(EgLXEt{V>F(1@8I{(D{yYQ#|=fnvT4=Nk!KCMhv{sp<63i-^^ zqHK0hJ3Ye{6I<-$K;2bb7#$O9PtS->dMK|;@fU$Z^uv5UD;WsxCz=MxxZC*DGy>)%fN`m((DEmk4re(KQ^5?QsoMVP%rzGd}{ik?ALvBs}SWtu$ zf3e>R{xWfw8hAnS2y!m!$;iq$C=el z_kMV?Nx)7=o=TY~Hlv)QnO%uI%+_AfSXb9rfsDr{G@bnL-lpn?kF@VULKc)$$lLg0 zupg6nT8XP$@B&aDe*lM@O1w~d4<`GdtLZc#-pi1$(EjXenn0~kEzbg^E zEg~dlcJQFmVEdpUA#t|gIICquux7t}=$yXFl1X`sX3ku8OUIt6 zbN6%CvKI?yW#x`-nSS}E#gjHpSl5HH5`l9j;G_`7kVJ*l!BgzTg)y@Cdq9G3AdPwE zJwUs=Y|0IFb>&m0l+Lf4w&doOmrog6HtU*@b&YdNa~AOxJU=_Lcy{gPuEz0=;i0pt zn%7ABBm(Dos80AnZjMM2{@s zScH6WW*i}z>=}_s(Mfi_&OH0(_G!&a%BR;ty$$+sf*fTy`Mj;^w)Nii#`q zQu)fBUuLdryLh|ACl7F^q3+Spp&1vWjg&cs1rWlJeD;z^LkQYqc z^!DVacQo(i!?Yv(AKIUkvYy3#H1cHvmnz^Ag)t}#vqC@FC#VkwMl+M}i;;L`grZGi z_+6hKuB+(1ep%;%-pX3-Tz>u36;tZ-%4Rkf7dJPc_T!sli8J$(6y| zRtMtrNC*=+)hjGG=18*?8*F{(e>uE3EqVx7Y+62lO}mkI&3dclt!1~|BI;1i?oo#G zf1>qZpNvGiTJb68?`diLJ$_AR=h@Cq(f(5aFIK{H6$7F*dJ69Xu-9gF+;YpZw=jKD zSfu+L|2^m)NjiwD*uO*Dqs=FPSoJ)yk#` zD@$5~I!U{@I8B zy62X6H`Xl~UbbNRqN|$cXN7bOiVP02IO20AJ-zRzA3VQ*^|Gi{hf1f~tj^qVjYaF; z|LL*sUb}YVWsNgi8?x4AX@#oNSft%wbQK?oe=X&k&0DsRYVkQwLMt>N&mQC%0;vdD zQy88kbU`7wQdC)~EFO+TQF<0E6EmB8TE<@o9wtnZzy?a;g zRPKFJd-FGIcD}fS?t3^H6I zAD-fUdMiD8vPUDu8_!bR?nd3nQeK=C9?BsJsfJKTok&w>2PYKsT|6!S;Pe}Q|N9$i zZ^&% zR&Ci4Qd!WLnmctYe@@Hq+=YBIK(nK=e1gXd2lEuw9zA0#&-sb=H=c3RCyP+>eY`tOmLFMqm$9apEvZaTpO0+`zL3bAI0GRO@zEZ-2d3eLtv!86) z^2u4iTg2~xzWWkgHF8ObJed8{Jca57CJaxZ9DMnfE!sikNZ_9!$0u3>_=DO)LtBVB zjm~Lc5tHsM812BBGhaWkXU`K?2_}0}`|z!vYg?CI3(^Ay@yc3J9=tuGCq&t@c(lR% zlX+J6fdkzqZ>yRyqv|&0-tEtC|BTNs>nuYyPx+yksW2X8kCn=}US1XCy<$T*k{KKA$v}E{*Ih*Fbgx4!C)94u+P82PSp2jUlj_g)vHucRGb0qh7 z(7E4|I=2;Nqn{qVjL$ceZjxJ<@O&LcF*+4wSI&_m+_Jk#xu@y8?60}}7XFB&E%1*- z<#TVEd((pD%W*$K`}@;RGw#;h%aum=qa=6iXkA5_b+DlUI94bXJYD%c-H!z0zj2^v zy;89=<}j+sGSJ?N5{@)@%AG>$KG{i>7RZHA zYE465g_Q>UMT)91#aP#I`Q;sJt9pB@8mnf_s;X>kRKgE$*m!txqw=Ws@5S2m#RnEG zIa8^^K!6w#-nhT0z^kNzEk_$4!{Gcg6C(d84&6xIbeH z0K+QJlmyTfZ6moWT#yoMhMrQ+`J&m&H{;bQ^heCOpl6F|a+FO4&+JGTJvw2;=+X0gm8Q(n(W6T<`%Wm3~Xb=b| z&)#|G**mqrRxVn!eeojdTerPGrgh?kR`f5*UjtriLH_=IKKe)Xc}@9cqqoabU!8@% zYQXy+^;K)%jPrhdm6IKcZw5THD@>Jz(a;KrK2HvBsc2f(+sls>jqjX4O@m@e^x(_^ zJ?<4epJpDfh1n{@+Xta+#wKDSV&lq=7FW~!H0Q|Fw8hPQ<($sNh0~@cWo1?-jdG2Q zSshY8dwjyM$oL^a!>TH$&M$Ay9UdJ!EOKyY{K$fl)0$CU0?O-DuBZN<7ArcZ=OuN`&orWqw@BNM}^c zdpmC2cjsYnSq!eZLnjIS!8^9Jybw__^e#4vh}pWslaW14x@ z@@DPVWLryh&*v+Yhhfttn`p5MowFF6kA^0R9vvHHkBPREk#uQq8_y{!&gN~sK~06c zu8tQr9Sv@rwJkTZE;H}aS&hMUA(?%a zrlbdHj|OL~DVi0@iz8~0(yALd9dHxGbT*f(LU+Y zgxN!;W))Q5ci*yQ#rZ#-ep%-(eFApLbP3bYA7Q5ipXqKUY1zfNOPr@1{qwaCKm72v zhaP%p-=|P3p@SZrK52Sa7fyURX_r+03Z<6sQC@&G0Fb2R8+3;oz+^7Eu_!e)Zg|@M z_|!C9Qk7b|qz{WrGp>M>fykV}{8`NH&|_#SV;{-s9Q)!OceL!^zg3(IUV0(s)B~~N z47yY()A%*YL7@XeH>`ltI&HdMKeK)aFcs^24k#6eV|EffliaT=Wr#(=$ZHLkc+&J2 zGl$USJGZv-@e4N=@R_UT&F}7WD0}-hP@XaDCH6dDK>f=wYGa&D%*;$o$jp2xb9^TL z>A4Db8MmMgphm3DNgnGhm=Yr3v5}+4IZIQAB_u@-PmUN8<(M!mJ3S%YnNSoPF*G44 zs#ef78}tY@(Idk}^Z-S!0X16g7$?pJu@9VzdEq5-1`U(l)A*-?kI7$V=HqB#kQBW^ zDr~SAMCgp&>|?a@viKK%W-H!^OQ;AbxcAfgYaZYYI}n*co$v zo7W%|5DpxBkzP1T;epxfuk!_?F5h|B4937^Gvs$Djp7_I3S%K@Jw_?Msdh$3XIH~D zevnFM?BCxPYr@EYwFdGdmh9QwEI>dqa~)k~S+c+}i--7uAE`^1((@mi%CP9PTPylX zBF&6Vo;`DaG1nl=x9>Fj7NvY=bRpx~7i20Du`AF~mG==PIv5lhPBKdP4ADiSY@`EY zpe!;Mw<)KpD#uw_IV?LVDLd&7ztX<0T3A`Ru<9s&O3FUJ*ISZ8QQk8rLO=$qBY=+wB%Vj&v!29#q!$x&6A9)E>`>miCtOYa^ry0y5 z%*MO65NQtg#gdf-520>TQKM?lvyjU4>;g#U4m=ClYA*0lZNo^`M(V8_0PGL4wQKzVi#FL+y>v9%CN5*zw z!os6sIkagT%vi-m89YY0rRB_lix-SqJFn%;^Ms}V$=BW(qfF`8 zbKP6xayvTqUiap>TnZsnV?eIx zR|5AN^DW+@0A>UjKsRk^|uwvF_3%|AvCJP!UMZM zu?B=)vG4$7@yT26m2Qg42H~byv!k_b`-acU$xk8uTZPJt#8ZXgVw!@;FJb7>C4-?EbQ(M2WM8dMrp zxABtwHvy5gj7DnGw>?$>VYCQj>D`7QJnll)URaTzy^z7Tf7$3T_8(RDFERYbU#RTg z>^%IV%6<(z>Y#W8T|@YB#b-*@q3J>x?1LuZyioN$w0{m`*l0vA!+L3&Y^Nlr|EPBO z!cU3Lz7SID4TZYxf|!vkmbQO6AI&2x>j0X-kD}NIzOwm>3*p#rQakR);i{$z-8>61 z;G_?T?&8(We-xTL(?@GByAYa_%_{t(7eZ0+xw;SY$qZPR#*#j+Tl^8;f@b!0rocZz z1{bpzprE8oj2*BVDmUsLfo(G#E2@{Q^?F&FFLBjv@bwXB<*w=Eco{351s7!(HrIL_ zFSBQR9S7Q7mCmH7+|)F51d=%=xcnk-Ukc8LKXDE>xUTN}0(6mq;>3OA1sy*?+Tidr~G@z6R*O7r@|S z-(Gvkz=-tgvszRjte~^Fe+v$KT(qxgo->!`IlaQ~*!LUVMT7Bo0_Zf}^Q;(u3&Uq) z=qr|?pXVTlP%mT_)%`x6PuJ;l;dxGxFByK_+u!cicfa9R zViaFiqr3?ZCizTdXpYgx(>?kms4m7-5o7j~=2-{Vtv|HAZDCdV-0qQ+r>&`4MSLJUN{05?59IBVFCO=UDtM$HSPxvHajfXS zeztL?UjclZ-)tz`x2Q7D^z%VqqFD4g$gww(w6X#EZvR66;mfOGzD4%yrhRw$7L9tA zvnIqSPetnv6|qt#^D{;NnWOZ$b7W>#;)u-A+PD0@zv^lJ2;IsYk(hN`XXkT9n#L8Q zZO9jYp?Q*sy^Iy}Bzue!H091Ub(7*+CrrI_O?^#Vt2T4QtEr%{!5zr!Pjz9D^E#ILX<3+*<5hl@s$>wUaj7&zYa zcXS1ShY=$-06ZEg7W=@%;BX;$#IIz>06bV|0)f;=gLEILGyshCM^n}7Ecpj^mjSrP z-XC#4i681ySU>KW>|Zj`Tl(LK-k4s9Ig_6k?q&4l^?sf>Db0uU_s1Fj;s5=Z5KZmy ziwRM693_3y2c!@8L;R1veM@uuSE3(*`j~%>4EuNm=p*g^a6_4F;>t+v6yM=%EmkY0 zPe1<~uZ`H4H<7@WUT4*!u)Yc`?E%AofoRwm7?fh zUa)q=zme`HH5qgE80wE!=}|9orRctpLSgEMGg-BbNH54QiyrB%A&(gmpQjD}X7h}S zk>d+e<7Fk|vxo7?oO~1%_tS(}KAHy7O(JuePvoz(dI;m8fBdhE zxgr@L>^}moup@{?2YTey3xJx~FZfDI0vdqLAy}ZDh)ouDY>MEOK>)fP&=UkHz0|cG zGivJ^x)K9myuZGFzqF*9P?j+)R-rqR71aZ~AIkrfkdp#nEg<`%E#tL+D{u}KqmP74 z0ovw(XdWuTYVZ0)Mt>nd!s_phkft#dv1n>AY>lDtK|ywjK-*$;LOG301KUKwiU8Lt zrj^394x=N&aJ;c;ygVVTE-h{F@RT%duO6nxAK*44Q0-WL`k1B>DWk~K+;_wiv-W@6 zeorxVyHJl9*k2e{L&4zWsYR^5Fv^R+va8$^TX*ZNz1le=zV5Q>zF+GBc2`%ImiGO@ z8~bPYph(t|4~itM*#Y!5MD5*X2Mq~YP4oCJsy`2Jw7XvrE=bvNHItz&*%kadVGomUOF)P#^BcX zRiHY+Rtecw2f2wJHO-OuRm?+5-=8c_np>|j3@skrr z#fC=43=1Ps9TH*0Q6|Rla1lvqw29$A#OehY@qJv7mv)M7+ip}ttWBU!t3BgkA#k2- z5AVERLb^~}ER}!_OOF?SBlZ(B+4}mv>jJfdl#_Rh@tNkI#^|hGV9A40WDKAi078ik4Nrj2B{Rl#g^Axyx zU`o`Q3Y~mGdbmFV4o;P1AM7k>{%CU9I(Yq`wFj&-GFa zP#=P_C}5VeQg;*6(7)kLAE^fcyHWsB_Up5nYx z<3 z;`i*uE&y>w+drd1>+82{!5XF?GP*PPB<=f()#b#u6c1m7GU3lfY$UV{nTZ$8?5(Zs z<*%&s%x#1Z_(iU(f-Vi3>A3h(&RA!4%u7F0L_Qf4z)o5Sw`d|1)6OaUD zf#L@Y8yC&Zg?*G@_BYcV;`JrIra6+e$9#=(Mmz+?2vT%C<~`I;3-Jkr<=0@&y&KjX zxYid{;?f&qb_9qYk#@#b-M%j3XbkxMF}_8Ip5lu(S>Xw~zr_^eF-9F)?-eHOT80*w zB!veBvO(5Eol`&X=uZzHeEWAdD3kjhuC89PcaIEcd-~e_uk=05U)r;@WgA2hD1o`9 z`Vn-(1mR8d`qI*+GflYtJRUUDIs{!e{6g1otGd%OR#&dM^UgIDt262@la4d(D!EF5 zf9bQzrX)Ylg{CRVZ6}wRrByCo;8XQAH!@Cavyd4S8z`hNER6wH{PB0t@p)vwWq&dx z(|_@wki9j4w^_6i&0$Ecn^qz4ivh1xUy7hWh-fc*mm>f#^mAhkVhS{9#C~~^GFBn_ zjywF7;~wm^d&HVVDc5PfcR4}iW@GZkwI}z%UC8kvr zzT=ufTaqDBBI;7t#LYGFEU4tWr2x3fQw3vPC4$`Q>(5_dpl>X%glr-DZWnWZiWAhe zb2Eu!B}@Zpp?qs^ddUnJVvVL~f6Tb34@FATA^CU)SgH92`qRh(7i&t}O2`G5Y@%Gb z)`Z3y=)At=4!GjvCKMcb;YBC94d%ZrJ;B&I5`JP@o9Y5@MGfRArq}<-7?nVzP$q9# z)z4`hd!Q@uD%R(kdu+)*ai<|IftR(S?{LtkOsvI0^umw8FEGjYD@$hdM{s5R1y=3c zIB~As$I0y)QZeu{9uNNzk7J(eu|HjqZkSZ`$>Gy+0WK2b>4n(H;2|1YvjdbJm?kLv zSy_1Yf8!*9!2|z|mC#nH;3ax@3Vi-acte$#Hu=RWlZ^=XW9 zMGKc{%%C+=WnzsK!W*oC03!$*py^dSv|v)VPY&fg#y<$UxYAfg6`2yB9p+P>E2v?N zcU@Iv#PlfpRwLrp|xGgFrjxtdW&@k9@8G) z3neE`K8W)(9+7&FBhs|)OL^2Jsr!yZ`Y!@A;{RyAh*&kDwfM&pzQOC0y%BUm1qu)| zC;e@t|B$~87Bg#qHxq}YjK}#nmtY;+-`|}CC^E)T#@)laZHnyCSD*F|`!iziCyLnn z$GkY}VfUpn?EY9k>`A{6`0KGmWI-XnF1XPfNfgjI=My(H-lt|hfkMw+ppH_{gW=1g zh55I@E4mV93S{)Ccl|3P>r$udcd*Nm_7IDIvIO`o^5d(ZNc?*ChBe1cxRXM0_{Nw% zjr)1}01EBWB;Ex;D`bS3$JaPVU5eHZlH^yiw%olt%&^EsbZil?3BWvg!{zsc#_C46 zq`254YmC=o`9-K^-dV3BGg?FP_N zEQz9Tk|#?>PX~(#Pg*aCmk#h9GD_eBpO+7K0_Oc*LLl@tv>(`lSv-_49CECqWhY zJ2oY9{_a^-kB^mhYw&@|)@)vdqZ*jgR)_o@hoKP3-Uo9a=mr`aJsq6JGjY<3UQ)(TQI0iQrwl;X~I$Wc>)IcXcpdno*+Z_5Qx!nDN2;r?IyF zar9kKT3>^!zsY8lXC3`1pXKxD@3hWvqbS?p&I-wmGHwg_`933kX-6eaLMh*`KQkF{ z$QF%AD5y|0PQE9-(POKW$>e_?TP0xCvPXqI(rhu*S6F(CjQ|PWsZb{KczsL&RL_W@ zk3c7M=|9Qoa5x<(LoDu+qm0DK-Ndb!zr#8yI)*D&cy@u=iTtvnIx=sfK za7s|Qc-M$B9?QEZ=7?b&N->8A^JKs1BE=I=M0pA43dC>{zf+tY_`MJxTD?g&0>R;! zx8uDa*!{qL+WjoGmFi>NywPJz>SsTaa+Ag@@CikL$raXy(EJv`U)nvsB2!<%}$TVQk&z0w;@(c0<&KwRGqdm&gI9JJJ+w= z+kNV2NFZ;yh8z2WA*oVkq+pw{b1dn(7uHY$oHjQnuhhvDA{C+sNaH_P@#V7DVNw`Q3*V*r(xR z%rohEA@78GA06d=uPWc~eO|%72G{bJ1$?q;nM=UyHeiJAR~&B$RC0$ICUD?y2pkBe z8H)j4^}62!(uAA|BYCLE~ef^5Mqjj#5y1EjWX;gYIrSgb) zA8ahGD>4h9LXl5Sz0GOkEtRk93*C*Y=iRZ!%N&d=!*dNVV>j{?~Uk%U3oJ z*WcJ&YFvpYQ?T<*hIog7e4|3_v!=Hw;CIAx;XV8G&IS4%?;;$-J!vCs$ zWL0>I_Dy0B)?%;Tw`y`s@UYm)ox2g%G@*3z@R;D3$>p^|hbZT9c!%ds>Q6MQ$J;x3 zoOo>~`mTJh)&J(Za(?iCua$^RLhL(@dYRVpoX>=^&9`KSB5s~yZW}FuX zcw?4~l=TOWx)|_Dx05m0fGah;0Sobj7bFBINslY&>sJ$RSu|gY7H>^QU5v=wfYqs! zt2GJ&l%q%K`d7)K(_fCyX%saufMy^fbpw{ld`D{~K)%WmKHWV&H|3 zwdO`ZrOty&w=^4s8U^)|Dz3e!2bbx_1HHHgVKsQv8(*fkpFS@T>y-zv7I|?n@qe8@ zYls!IhA9DR>u)&M1=P&IYS* zfIqnfVM%VW#-h}l^)%kmraq4GleQ|{j6GkvSO@FGjx-MJFXKQo zG3|jcDfI;u*P}VHdU*T#fx}Xq!UJ@F#Sy-rUpG(YelXx1%60zr?Y0vtvSM zPuE&UQ`gGXYr9wBnIF9~VqN>Xp6=D%D=2sS$}UHB_lh>=zgc2qd&l|}EwII#H$$9_ z9eCzq|DACG3(N6r!|2(BG2fY&mp6{~#vA7?HHS)-h5jGn{Qqn_$2sjiYrDEvIb{7B znjCp~GTGU^uC;sB2KvESS~_lJ%kuW_b<3P9x|S9=i=8D!E?05jmI^?;fE1epHfjYE z(I!H~HZ#B=?YI&p+wfZp(hc~Xeyhb5Ejy>HbzOJQX2*v0vs&WLmdw_1N6p4HALwRqZROcxP)j z{RZR+;94DI2SBdF-Sy}X27p`uGJ3^Iv2CZfSL6odK~dydl-bd>u5;?85_N`iqmf8&v+NV>Lg&C6o04fqF0nIL z1|P-lW5491v4b3T<-*=vPM*v2*bnSH`xE;!_NyzvjHn0(*AnbpSBf3x#`1A|JocF@ z=M}sXyW3UqYCeHaWS_Fn_$2lY`@<52yX8H=u3-0I7u9Fk6WH6XnSI6QW0$;zd=d7uyNEC0 zE!f?w6??I?+pAW#wDxqbvbV^qt!imc`-XN~i@4aUx;xMrm)l$9)i$xU1rOWW&?sYA#t?jGU1+{yU_DMRZb{*6t38P(HLMEgCt!$CGLOM)e>{E5< zUHWyZ4yQ|AL#CS^4q0ycVykUwUB9l~wnAQNWqB*)rC#1#B`zWLrfearOkZsE^6^#T zVxOVo&@Hb+W^}G!)zQ+ke&vdm_3MUoo4?r_WeGj9ghmt4kRH<)Tca$YM_!s_uC?M~ zU%#pgV|amnEws&&53Q5f%+|44FR#|wJzc9htn2AKWVRWXA?wZG?6Y+Wu9w%~xvgD2 zt?O4VThYELc%v!ZY)WtTrfu^jj=ka%G~d(2LA{=&z__5$C9d!i+U9ojw1BNP%FA2{ zVWYSVp4-;d-qXIeYwh5TMvC&~PpU4}uVeJ<1pPYE)+_;S78kl(ke4UuglnPxy-2?n z>(>%_EvT_fTHn)cZE?1&SQiAI1Cz+4;CV_8ZShu@z7J_J5R(szQYjg%cN>|O^rZCQ z7HS3g@Vc%QZK8ldEo;#!+S+>tx3%jj8UZ-=q@;J8(?-+``xGw3SwVcEiZ>`z6!Qe6 zCPG?rNXTVKci`ZVi=?$)jQxK(cJ#y3kYOQ658*?R4&!6-j72~~3AhJwhXY$JV-A(b z_{5spS(s_l6L@zzo$)7sPlh_+|2ymp_!Xnm^7fupENW#-&vG_mJ#X4K<$e$Tn}C0)$A|7m z>G1v8{SI(_i4MQ}DBb;*dmpHT$RMmQO9!H5T^A@i>Ao;%-3R9T@Aa7-_D+`Dz?N7_6?9VuC>@yrT_7x60`x=KG0((EgJ;b zdEmZOO>4MPRH7j4c9VD|*mG)PeS(9gKYiryzeLj$mjK>j8mkViPs7iJDm1 zwd^3CKZIj2yAiv828lgmgRxiVFOchA9CnQN_u-je;;>`vJ%#kIaM&^a-jDQY9D|{W zJcRQTID#;rd=lrUa0Ibua0Id6;^5GWp2L}_V}rKzA>eovqm5}V)dIAs3$z&vn$TQxjnJS-f7&5-2_@a_ z3e^8z)aX}e$p_JbZ=mHqK#TnuE%g;}`9buoFq9jG5)|c9>R;?x-h+C>%Ls0K2^=O~ zf$qnB;uk#eneTlg53XO}IOqQ>?tk0=p1fo9C-?jAFWrB1U+?XC#xL}o`!n}3_b~&8 z`*R~DN~AmrdNA<>7d)Y0r`Xx(4b3<#*eiBE=(rGv4IFV0&k#3o!3~Pw28A8RVS{da z5@%{@E?Sz4mgb_RxoB4fn&6)R`BNM!`y7V~?eIL{YdCDsJ;Rw5nr9@=(L5SwYEdp) zltcTB2YlGVU=11y9tp=0A~>B3PFDn{(^x^AJ{gCZ(=DPtHdB4Ud3{ICkF1h;=_Q(bJnz+~^cvjJCNIhB=^|TBAr7njheY`K|m;evIG8PxHsH z&+ha5RsJ@Amw&`RrOD9Oqw#fe?y#wwMt!PhE{h^AbOeR(fd zRx2BnEy_;iN@bsNgL0E{8`d@*S57GpDNkUx-WQeEl{46h>MZu{{kw7wd-pQcriQ2y z>M-o$o2q82d1{F|UaeNAsP*bBb-ubpU8b&3d(=(prRpwquex77gq?nGSMO3!s`smp zs86cTsxPZ=s_&>Ds((`dqW(kuPCai?EQ2hemMBY{#ep4xvn>UdQcJmIqGg(;!7|6P z(6ZFhX<21iXX&+Uw_I+y+H$~h*mA4oPRlXNeU{VMJNPNf^OjdFZ(H8Ad}R65@}=b) z%fBs})nW~@hFN2*Bdp2RQC6q5$U4?qX|1u=S{tqNtc$H}*ll>Vb%S+_b*J@8>ptrZ z)|;%iS&v$eTTfXZvOZyb#`>c5b?X`H`_{A8&#iyAp0j>$V>X+O^rTJR*5lP8Jx!cx zw5$Y%yx+L1InXF zZx{FRPA=pXXY3|R&wMZL$Xs`dbhbE$it|kMVmyCboHqqND_;wI1c&lz;+cMDwutVt zN5%OH@0quXygNm%mE!!oI3MbNmJ|^8`(rXs+|N{=1hyAEE7ys78MLD3og$a%%;wS^ z_JBC=@SZ_8dj7wiiNYpmKIv=$L7rtTB(^?jQB&Eb+eN)bi(KY(HQi@F6Za(zCCz2I zK4}3>wy*jAVF9^LKoH!>CC|v#k+qimsi#GWlA}(E^aCnsXM%e{E8;QQi;lDRD9vS? zN?J+Ymb_=aFI!nY^R~ceJK>{XpEH~Ve{#Wr;8mi$=n;}{eeUNAe7+aYi2kB;wfVm6 zLFJ+pNo`3hbNW8<>%{_&=xb;@w5Bpb+`m)YpC{6?1!Y=NHB|gMQ2JYu>k@iKnIY1D z5NR{yY3`G#W48MQ&gPafmnhl@Ek)G$Z)f5|?=x6o!bp#0(9=etl}MX~_X&qpXyi6n z)(bGc6fqj}NDB|eNM8mWfJXXoq0>eP{Us9P)-=qAYH>uv;M<63P}=oA4!hpZgN{SG zOaey9MHth%q3bz>w&#Kda4X>5hLN&PjFn9oEg!{*`Z(-z9nb*3f?bWY^TX_0M7sS1 zBX>MIF2-Q;{vb&4V%jm6p656h~Xaoo^5~dMY_KI*8<_LqU-+x DIqu)n literal 0 HcmV?d00001 diff --git a/static/font/metropolis/semibold.otf b/static/font/metropolis/semibold.otf new file mode 100644 index 0000000000000000000000000000000000000000..2fb1be69d87044ace3e95d497dfda9fdb34af41b GIT binary patch literal 24160 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 + + + +Created by FontForge 20090622 at Fri Dec 8 09:52:08 2017 + By deploy user +Copyright © 2016 by Chris Simpson. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/metropolis/semibold.ttf b/static/font/metropolis/semibold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..febf889f3b22c014eb84c27ae365e321299e5482 GIT binary patch literal 35136 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