├── .babelrc ├── .env ├── .gitignore ├── .prettierignore ├── .prettierrc.js ├── .storybook ├── main.js └── preview.js ├── CNAME ├── LICENSE ├── README.md ├── _config.yml ├── assets ├── chromestore.png └── screenshot-1.png ├── jest.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── src ├── assets │ ├── data │ │ └── proxies.json │ ├── img │ │ ├── hackernews_icon.png │ │ ├── icon-128.png │ │ ├── icon-32.png │ │ ├── icon-outline.svg │ │ ├── icon.svg │ │ ├── reddit_icon.png │ │ ├── slack_icon.png │ │ └── undraw_group_chat.svg │ └── styles │ │ └── tailwind.css ├── containers │ ├── Badge.tsx │ ├── CardBottomBar.tsx │ ├── HelpPanel.tsx │ ├── HotkeysListenerButton.tsx │ ├── ResultCard.stories.tsx │ ├── ResultCard.tsx │ ├── ResultCardComments.stories.tsx │ ├── ResultCardComments.tsx │ ├── ResultFeedSettingsPanel.tsx │ ├── ResultsContainer.stories.tsx │ ├── ResultsContainer.tsx │ ├── SelectMenu.tsx │ ├── SettingsPanel.tsx │ ├── Slider.tsx │ ├── Toggle.tsx │ └── ToggleGroup.tsx ├── d.ts ├── manifest.json ├── pages │ ├── Background │ │ └── index.js │ ├── Content │ │ ├── content.styles.css │ │ ├── index.css │ │ └── index.js │ ├── Options │ │ ├── Options.tsx │ │ ├── index.html │ │ └── index.jsx │ └── Sidebar │ │ ├── Sidebar.css │ │ ├── Sidebar.tsx │ │ ├── index.html │ │ └── index.jsx ├── providers │ ├── blacklist.ts │ ├── hackernews.ts │ ├── providers.ts │ ├── reddit.ts │ └── scoring.ts ├── shared │ ├── constants.ts │ ├── events.ts │ ├── options.ts │ ├── settings.ts │ ├── storage │ │ ├── createChromeStorageStateHook.js │ │ ├── index.js │ │ ├── storage.js │ │ └── useChromeStorage.js │ └── useHotkeysPressed.tsx ├── tests │ ├── mocks.ts │ └── proxy.test.ts └── utils │ ├── api.ts │ ├── array.ts │ ├── cache.ts │ ├── classNames.ts │ ├── color.ts │ ├── formatText.tsx │ ├── image.ts │ ├── log.ts │ ├── proxy.ts │ ├── results.ts │ ├── tabs.ts │ └── time.ts ├── tailwind.config.js ├── tsconfig.json ├── utils ├── build.js ├── env.js └── webserver.js └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | // "@babel/preset-env" 4 | "@babel/preset-react" 5 | // "react-app" 6 | ], 7 | "plugins": [ 8 | // "@babel/plugin-proposal-class-properties", 9 | "react-hot-loader/babel" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | INLINE_RUNTIME_CHUNK=false 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | build.zip 14 | 15 | # misc 16 | .DS_Store 17 | .env.local 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | .idea 22 | 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | src/stories -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore artifacts: 2 | build 3 | coverage 4 | node_modules 5 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 80, 3 | tabWidth: 2, 4 | trailingComma: "es5", 5 | singleQuote: false, 6 | semi: true, 7 | importOrder: ["^@core/(.*)$", "^@server/(.*)$", "^@ui/(.*)$", "^[./]"], 8 | importOrderSeparation: true, 9 | importOrderSortSpecifiers: true, 10 | }; 11 | -------------------------------------------------------------------------------- /.storybook/main.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | stories: ["../src/**/*.stories.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"], 3 | addons: [ 4 | "@storybook/addon-links", 5 | "@storybook/addon-essentials", 6 | "@storybook/addon-interactions", 7 | // This is needed for Tailwind to work with Storybook 8 | // https://stackoverflow.com/a/68757745 9 | { 10 | name: "@storybook/addon-postcss", 11 | options: { 12 | cssLoaderOptions: { 13 | // When you have splitted your css over multiple files 14 | // and use @import('./other-styles.css') 15 | importLoaders: 1, 16 | }, 17 | postcssLoaderOptions: { 18 | // When using postCSS 8 19 | implementation: require("postcss"), 20 | }, 21 | }, 22 | }, 23 | ], 24 | framework: "@storybook/react", 25 | core: { 26 | builder: "@storybook/builder-webpack5", 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /.storybook/preview.js: -------------------------------------------------------------------------------- 1 | import "../src/assets/styles/tailwind.css"; 2 | 3 | export const parameters = { 4 | actions: { argTypesRegex: "^on[A-Z].*" }, 5 | controls: { 6 | matchers: { 7 | color: /(background|color)$/i, 8 | date: /Date$/, 9 | }, 10 | }, 11 | }; 12 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | usecrowdwise.com -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Michael Xieyang Liu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CrowdWise 2 | 3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
20 |
21 |
22 |
23 |