From 63bc330ad265e796c5e3ffeb12ca88a441216c63 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Thu, 16 Nov 2017 18:28:02 +0530 Subject: [PATCH 01/45] Update CONTRIBUTING.md (#105) (#109) * little bit on nvm * added nvm instructions, new issues docs * completed contributing * error added and indent spaces * index fix * branching system added * sectios rearranged * start removed * removed extra section of branching model * fix of https://github.com/coderplex/coderplex/pull/105#pullrequestreview-77076077 --- CONTRIBUTING.md | 171 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 153 insertions(+), 18 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 87a55e60c..ca857b5a6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,29 +1,164 @@ -# Contribution guidlines +# How to Contribute -We welcome pull requests from hackerspace members (our students) and seasoned JavaScript developers alike! Follow these steps to contribute: +Coderplex web application comprises of two repositories : -1. Find an issue that needs assistance by searching for the [Help Wanted](https://github.com/coderplex/coderplex/labels/help-wanted) tag. +- [Coderplex](https://github.com/coderplex/coderplex) : Frontend of the application -1. Let us know you are working on it by posting a comment on the issue. +- [Coderplex-Backend](https://github.com/coderplex/coderplex-backend) : Backend of the application -1. Follow the [Contribution Guidelines](#contribution-guidelines) to start working on the issue. +Both of them are under very active development. This document provides non exhaustive guidelines for contributing to this repository. -Remember to feel free to ask for help in our [Discord](https://discordapp.com/invite/dVnQ2Gf) rooms. +## Code of Conduct +Coderplex has adopted [Contributor Covenant](https://github.com/coderplex/coderplex/blob/docs-update/CODE_OF_CONDUCT.md) that we expect project participants to adhere to. -Working on your first Pull Request? You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) +## Open Development +All work related to the application takes place on Github itself. We use [Issues](https://github.com/coderplex/coderplex/issues) to track bugs, discuss ideas and to engage open source contributors. [Projects](https://github.com/coderplex/coderplex/projects) are used to keep track of everything and is our project management tool. We maintain [Wiki](https://github.com/coderplex/coderplex/wiki) for structuring our long term thoughts. Both core team members and contributors sends a pull request which goes through the same review process. Whole process is as transparent as it can be and we strive to keep it that way. -## Running this project locally +## Branching Model +The `master` branch of coderplex is relatively stable branch which we update for every release. We also have auto deployment in place for that particular branch i.e any changes in that branch gets reflected in [https://coderplex.org](https://coderplex.org). +It is highly recommended for both maintainers and contributors to raise a pull request to `develop` branch. Before every release we throughly test develop branch and merge into master. +![Imgur](https://i.imgur.com/KPO2dLul.png) +
+*A pull request to any other branch may most likely be closed by our bots.* -1. Make sure you have [NodeJS](https://nodejs.org/) and [Yarn](https://yarnpkg.com/en/docs/install) installed. - > Make sure you install node version 8 or above and check node version by running `node -v` -1. Then clone this repo +## Development Workflow + +We welcome pull requests from beginners and seasoned javaScript developers alike! + +### Work on Issues +1. Find an issue that needs assistance by searching for the [open issues](https://github.com/coderplex/coderplex/labels/help-wanted). +2. If you decide to fix an issue, please be sure to check the comment thread in case somebody is already working on a fix. If nobody is working on it at the moment, please leave a comment stating that you intend to work on it so other people don’t accidentally duplicate your effort. +3. If somebody claims an issue but doesn’t follow up for more than a weeks, it’s fine to take over it but you should still leave a comment. + + +### Proposing a Change +1. Open a new issue if you would like report a bug or suggest improvements. +2. Please wait for core team members to comment on the thread. This lets us reach an agreement on your proposal before you put significant effort into it. + +### Prerequisites +1. [NodeJS](https://nodejs.org/) +
+ Minimum version v8.0.0+ + ```bash + To check node version + $ node -v + ``` + Any lower version than mentioned above may results in this [error](https://github.com/coderplex/coderplex/issues/100). + > If you face problem updating your node then you might need a Node version manager tool. [Follow here]() + +2. [Yarn](https://yarnpkg.com) +
+ Minimum version v1.2.0+ +
+ Installing instructions are at [official docs](https://yarnpkg.com/en/docs/install#windows-tab). + Use yarn over npm + > Our team's official policy (for now) is: We only use [Yarn](https://yarnpkg.com/en/docs/install) as our official Node package manager, and so we request you to use Yarn instead of npm and commit `yarn.lock` file. + +3. [Git](https://git-scm.com/download/linux) +
+ Familiarity with git is mandatory. + +### Sending a Pull Request + +*Working on your first Pull Request? You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)* + +#### Running Locally + +1. Clone repository + ```bash + $ git clone https://github.com/coderplex/coderplex.git + ``` +2. Move to the repository root folder + ```bash + $ cd coderplex + ``` +3. Install dependencies + ```bash + $ yarn + ``` +4. Start the development server ```bash - git clone https://github.com/coderplex/coderplex.git + $ yarn dev ``` -1. `cd coderplex` -1. `npm install` -1. `npm run dev` to start local development server -1. App opens at `localhost:3000` + App now opens at `localhost:3000` in your default browser. + > You may get this [error]() if any other app is already running the above port. + +#### Before submitting: +1. Fork the [repository](https://github.com/coderplex/coderplex). +2. From your fork, create a [branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) and name it. eg. `typo-in-readme` +3. If you’ve fixed a bug or added code that should be tested, add tests! +4. Ensure that all test pass + ```bash + $ yarn test + ``` +5. Run code formatters + ```bash + $ yarn lint + ``` +6. Add and commit your code. Please give meaning full commit messages. +7. Pull latest code from [upstream repository's ](https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/)`develop`, if in case anything new were merged while you were working on your fork. +8. Push the code to your fork. +9. Raise the pull request from your created branch to `develop` branch of coderplex. [why develop instead of master branch?]() +10. Take some time to give a brief description of the work you have done. + +#### After submitting +1. Wait for all checks to pass in below section. +2. Your changes are deployed with a unique link `https://deploy-preview-xx--coderplex.netlify.com`.
+*`- xx` is your pull request number.* +3. The core team will review your pull request and either merge it, request changes to it, or close it with an explanation. + +##### Received a review request +- Work on the requested changes +- Push the changes as you did earlier, the pull request will automatically catch those and update itself. + +### How to get in touch +- Coderplex [Discord Channel](https://discord.gg/dVnQ2Gf) +- Tweet core team members : + - Vinay Puppal [@VinayPuppal](https://twitter.com/vinaypuppal) + - Md-ZubairAhmed [@Md_ZubairAhmed](https://twitter.com/Md_ZubairAhmed) + - P Bhanu Teja [@pbteja1998](https://twitter.com/pbteja1998) + +## Appendix +##### 1. Node Version Manager + +###### [nvm](https://github.com/creationix/nvm) for Linux & OSX +```bash +Installation +$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash + +Install latest node lts +$ nvm install --lts + +Use installed version +$ nvm use --lts + +Run the app in the same terminal session +``` +*Make sure you have [curl](https://curl.haxx.se/) installed* + +###### [nvm-windows](https://github.com/coreybutler/nvm-windows) for Windows +It comes with an [installer](https://github.com/coreybutler/nvm-windows#installation--upgrades). + +```bash +Install particular version +$ nvm install 8.9.1 + +Use installed version +$ nvm use 8.9.1 +``` +Still facing problem this [article](https://medium.com/appseed-io/how-to-run-multiple-versions-of-node-js-with-nvm-for-windows-ffbe5c7a2b47) from [@skounis ](https://twitter.com/skounis) explain in details. -**Note:** -> So our team's official policy (for now) is: We only use [Yarn](https://yarnpkg.com/en/docs/install) as our official Node package manager, and so we request you to use Yarn instead of npm and commit yarn.lock file. +##### 2. Local host occupied +```bash +Error: listen EADDRINUSE :::3000 + at Object._errnoException (util.js:1024:11) + at _exceptionWithHostPort (util.js:1046:20) + at Server.setupListenHandle [as _listen2] (net.js:1351:14) + at listenInCluster (net.js:1392:12) + at Server.listen (net.js:1476:7) + at app.prepare.then (/home/m-zubairahmed/github/official/coderplex-frontend/server.js:26:6) + at + at process._tickCallback (internal/process/next_tick.js:188:7) +error Command failed with exit code 1. +``` +If you get this error while running `yarn dev` then probably another app is occupying `localhost:3000`. You may want to close that and run the command again. From 3607db64268c47a562027e8f03e47c69ac44483c Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Sun, 19 Nov 2017 20:27:35 +0530 Subject: [PATCH 02/45] New design and migration to emotion(css-in-js) (#107) * modify landingpage according to mockup * test netlify deploys * few suggestion from #41 (comment) * migrated header and footer to emotion * migrated hero and learn section to emotion * use preact in production * fix some responsive issues * add vscode support css autocomplete for emotion * fix responsive padding issues * change export routes * disable eslint and add editorconfig * make breakpoints consistent * move images to cloudinary * few improvements from lighthouse * fix test and lint issues * update readme * extract subject card to file * migrate space page to emotion * migrate learn index page to emotion * trim subtitle text * change webp to png as most browser doesnt support it * wip events page * wip subject page * update text and youtube link * change white button hover color * disable emotion cache * fix padding issue in learn section * disable preact due to hydrate bug * revert hover color on buttons * reduce timeline icons size * shadow for buttons removed * fixed on hover of menu bar items * transform on card of learn removed,this might change later * remove semantic-ui-react and ignore .vscode * remove .vscode/* and jsconfig.json from git cache * extract prettier config to .prettierrc file * fix link in discord btn * disable user-select and add login page * configure yarnclean --- .babelrc | 4 +- .editorconfig | 9 + .gitignore | 5 +- .prettierrc | 6 + .yarnclean | 45 ++ README.md | 2 +- .../__snapshots__/common-banner.test.js.snap | 22 - __tests__/__snapshots__/header.test.js.snap | 3 + __tests__/common-banner.test.js | 38 -- __tests__/header.test.js | 38 ++ __tests__/index.test.js | 5 - components/common-banner.js | 37 -- components/common/banner.js | 22 + components/common/footer/index.js | 235 +++++++++ components/common/header/index.js | 118 +++++ components/common/header/index.styles.js | 228 ++++++++ components/common/layout.js | 12 + components/common/meta.js | 33 ++ components/content-loaders.js | 243 --------- components/events/event-card.js | 0 components/footer.js | 84 --- components/global-styles.js | 137 ----- components/head.js | 63 --- components/header.js | 301 ----------- components/icons.js | 102 ---- components/learn-components/accord-guide.js | 73 --- .../learn-components/row-contributors.js | 65 --- components/learn-components/subject-banner.js | 37 -- components/learn/subject-card.js | 70 +++ components/marked-js.js | 35 -- components/row-events.js | 82 --- components/subscribe.js | 126 ----- config/meta-info.json | 8 +- hocs/public-page.js | 25 - next.config.js | 11 +- package.json | 18 +- pages/_document.js | 33 ++ pages/events.js | 180 ++----- pages/index.js | 490 +++++++++--------- pages/learn/index.js | 185 ++----- pages/learn/subject.js | 152 +----- pages/login.js | 12 + pages/space.js | 281 +++++----- static/banner.png | Bin 46888 -> 0 bytes static/banner1280x370.png | Bin 57408 -> 0 bytes static/bg.png | Bin 9253 -> 0 bytes static/favicons/manifest.json | 37 +- static/wordcloud.png | Bin 130253 -> 0 bytes utils/base.styles.js | 101 ++++ utils/mock-data.js | 26 +- yarn.lock | 407 +++++++++++---- 51 files changed, 1787 insertions(+), 2459 deletions(-) create mode 100644 .editorconfig create mode 100644 .prettierrc create mode 100644 .yarnclean delete mode 100644 __tests__/__snapshots__/common-banner.test.js.snap create mode 100644 __tests__/__snapshots__/header.test.js.snap delete mode 100644 __tests__/common-banner.test.js create mode 100644 __tests__/header.test.js delete mode 100644 __tests__/index.test.js delete mode 100644 components/common-banner.js create mode 100644 components/common/banner.js create mode 100644 components/common/footer/index.js create mode 100644 components/common/header/index.js create mode 100644 components/common/header/index.styles.js create mode 100644 components/common/layout.js create mode 100644 components/common/meta.js delete mode 100644 components/content-loaders.js create mode 100644 components/events/event-card.js delete mode 100644 components/footer.js delete mode 100644 components/global-styles.js delete mode 100644 components/head.js delete mode 100644 components/header.js delete mode 100644 components/icons.js delete mode 100644 components/learn-components/accord-guide.js delete mode 100644 components/learn-components/row-contributors.js delete mode 100644 components/learn-components/subject-banner.js create mode 100644 components/learn/subject-card.js delete mode 100644 components/marked-js.js delete mode 100644 components/row-events.js delete mode 100644 components/subscribe.js delete mode 100644 hocs/public-page.js create mode 100644 pages/_document.js create mode 100644 pages/login.js delete mode 100644 static/banner.png delete mode 100644 static/banner1280x370.png delete mode 100644 static/bg.png delete mode 100644 static/wordcloud.png create mode 100644 utils/base.styles.js diff --git a/.babelrc b/.babelrc index f39067037..557c60187 100644 --- a/.babelrc +++ b/.babelrc @@ -12,9 +12,9 @@ }, "plugins": [ [ - "lodash", + "emotion", { - "id": ["lodash", "semantic-ui-react"] + "inline": true } ] ] diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..1a62086d8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file diff --git a/.gitignore b/.gitignore index d05f5f2d1..7a82b5398 100644 --- a/.gitignore +++ b/.gitignore @@ -45,10 +45,7 @@ node_modules # IDE - VSCode .vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json +jsconfig.json ### Linux ### *~ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..aa41fe5d7 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 120, + "semi": true, + "trailingComma": "es5", + "singleQuote": true +} diff --git a/.yarnclean b/.yarnclean new file mode 100644 index 000000000..b591611ea --- /dev/null +++ b/.yarnclean @@ -0,0 +1,45 @@ +# test directories +__tests__ +test +tests +powered-test + +# asset directories +docs +doc +website +images +assets + +# examples +example +examples + +# code coverage directories +coverage +.nyc_output + +# build scripts +Makefile +Gulpfile.js +Gruntfile.js + +# configs +appveyor.yml +circle.yml +codeship-services.yml +codeship-steps.yml +wercker.yml +.tern-project +.gitattributes +.editorconfig +.*ignore +.eslintrc +.jshintrc +.flowconfig +.documentup.json +.yarn-metadata.json +.travis.yml + +# misc +*.md diff --git a/README.md b/README.md index 6958413d8..07212ca24 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This project mainly uses - [Next.js](https://github.com/zeit/next.js/) -- [Semantic UI React](http://react.semantic-ui.com/introduction) +- [emotion](https://emotion.sh) As css-in-js library ### [Join our community here](https://www.coderplex.org) diff --git a/__tests__/__snapshots__/common-banner.test.js.snap b/__tests__/__snapshots__/common-banner.test.js.snap deleted file mode 100644 index bf1ab05a1..000000000 --- a/__tests__/__snapshots__/common-banner.test.js.snap +++ /dev/null @@ -1,22 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Testing CommonBanner of \`components/common-banner\` Check the snapshot 1`] = ` -
-
-

-

-

- -
-`; diff --git a/__tests__/__snapshots__/header.test.js.snap b/__tests__/__snapshots__/header.test.js.snap new file mode 100644 index 000000000..784cae512 --- /dev/null +++ b/__tests__/__snapshots__/header.test.js.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Testing Header of \`components/header\` Check the snapshot 1`] = ``; diff --git a/__tests__/common-banner.test.js b/__tests__/common-banner.test.js deleted file mode 100644 index db15756d8..000000000 --- a/__tests__/common-banner.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import CommonBanner from '../components/common-banner'; - -describe('Testing CommonBanner of `components/common-banner`', () => { - const shallowWrapper = shallow(); - - it('Check the snapshot', () => { - expect(shallowWrapper).toMatchSnapshot(); - }); - - it('should have title tag rendered', () => { - expect(shallowWrapper.find('h1').length).toBe(1); - }); - - it('should have subtitle tag rendered', () => { - expect(shallowWrapper.find('h2').length).toBe(1); - }); - - describe('should render the props', () => { - const pageTitle = 'title of the page'; - const pageSubTitle = 'Subtitle of the page'; - const rootWrapper = shallow( - , - ); - - it('should display title', () => { - const headerElement = rootWrapper.find('.headline'); - expect(headerElement.props().children).toEqual(pageTitle); - }); - - it('should display subtitle', () => { - const subHeaderElement = rootWrapper.find('h2'); - expect(subHeaderElement.props().children).toEqual(pageSubTitle); - }); - }); -}); diff --git a/__tests__/header.test.js b/__tests__/header.test.js new file mode 100644 index 000000000..f005482b0 --- /dev/null +++ b/__tests__/header.test.js @@ -0,0 +1,38 @@ +import React from 'react'; +import { shallow } from 'enzyme'; + +import Header from '../components/common/header'; + +describe('Testing Header of `components/header`', () => { + const shallowWrapper = shallow(
); + + it('Check the snapshot', () => { + expect(shallowWrapper).toMatchSnapshot(); + }); + /** + * Disable for now + it('should have title tag rendered', () => { + expect(shallowWrapper.find('h1').length).toBe(1); + }); + + it('should have subtitle tag rendered', () => { + expect(shallowWrapper.find('h2').length).toBe(1); + }); + + describe('should render the props', () => { + const pageTitle = 'title of the page'; + const pageSubTitle = 'Subtitle of the page'; + const rootWrapper = shallow(); + + it('should display title', () => { + const headerElement = rootWrapper.find('.headline'); + expect(headerElement.props().children).toEqual(pageTitle); + }); + + it('should display subtitle', () => { + const subHeaderElement = rootWrapper.find('h2'); + expect(subHeaderElement.props().children).toEqual(pageSubTitle); + }); + }); + */ +}); diff --git a/__tests__/index.test.js b/__tests__/index.test.js deleted file mode 100644 index 6e9a7a543..000000000 --- a/__tests__/index.test.js +++ /dev/null @@ -1,5 +0,0 @@ -describe('Setting up jest', () => { - it('Runs tests', () => { - expect('foo').toEqual('foo'); - }); -}); diff --git a/components/common-banner.js b/components/common-banner.js deleted file mode 100644 index e8a0b09b9..000000000 --- a/components/common-banner.js +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; - -export default props => ( -
-
-

{props.pageTitle}

-

{props.pageSubTitle}

-
- -
-); diff --git a/components/common/banner.js b/components/common/banner.js new file mode 100644 index 000000000..1fc84fa50 --- /dev/null +++ b/components/common/banner.js @@ -0,0 +1,22 @@ +import React from 'react'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; + +import { Container, Title, SubTitle } from '../../utils/base.styles'; + +const BannerSection = styled.section` + background: #fbfbfb; + background-image: url('https://res.cloudinary.com/coderplex/image/upload/v1510788480/website__assets/pattern.png'); + min-height: 150px; + text-align: center; + ${space}; +`; + +export default ({ title, subTitle, textInverted = false }) => ( + + + {title} + {subTitle} + + +); diff --git a/components/common/footer/index.js b/components/common/footer/index.js new file mode 100644 index 000000000..5285ba07c --- /dev/null +++ b/components/common/footer/index.js @@ -0,0 +1,235 @@ +import React from 'react'; +import styled from 'react-emotion'; +import { Flex, Box } from 'grid-emotion'; +import FaFacebook from 'react-icons/lib/fa/facebook'; +import FaYoutube from 'react-icons/lib/fa/youtube-play'; +import FaGithub from 'react-icons/lib/fa/github-alt'; +import FaInstagram from 'react-icons/lib/fa/instagram'; +import FaTwitter from 'react-icons/lib/fa/twitter'; + +import { Container, baseButton } from '../../../utils/base.styles'; +import { baseEventsURL, subscribeURL } from '../../../utils/urls'; + +const Footer = styled.footer` + background: #222; + color: #fff; + @media (max-width: 480px) { + .follow { + background: #111; + } + } +`; + +const SocialLinks = styled.ul` + margin: 0; + padding: 0; + list-style: none; + display: flex; + justify-content: center; + flex-wrap: wrap; +`; + +const SocialLink = styled.li` + margin: 0 10px; + & a { + width: 50px; + height: 50px; + padding: 10px; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + text-decoration: none; + border: 1px solid #fff; + border-radius: 50%; + transition: all 0.25s; + font-weight: bold; + &:hover { + background: #fff; + color: #314159; + } + @media (max-width: 480px) { + margin: 10px; + } + } +`; + +const Title = styled.h3` + text-align: center; + margin-bottom: 20px; + font-size: 1.1rem; + font-weight: 300; + color: #fff; + @media (max-width: 1000px) { + margin-bottom: 10px; + } + @media (max-width: 780px) { + font-size: 1rem; + line-height: 1.8rem; + } +`; + +const Form = styled.form` + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + text-align: center; + & input { + border: none; + margin-right: 10px; + padding: 10px; + width: 240px; + font-size: 1rem; + } + & button { + ${baseButton}; + padding: 0.6rem 1rem; + font-size: 1rem; + border: none; + outline: none; + display: flex; + align-items: center; + cursor: pointer; + @media (max-width: 401px) { + margin-top: 20px; + } + } +`; + +const Message = styled.div` + width: 300px; + color: #fff; + font-weight: bold; + background: #888; + text-align: center; + margin: 15px 0 0 0; + display: none; + & h4 { + margin: 5px; + } + &.error { + display: block; + background: tomato; + } +`; + +export default class FooterBar extends React.Component { + state = { + subscribersEmail: '', + submittingEmail: false, + emailSubmittingError: '', + subscriberEmailPosted: false, + }; + handleChange = event => { + this.setState({ + subscribersEmail: event.target.value, + emailSubmittingError: '', + }); + }; + + handleSubmit = e => { + e.preventDefault(); + console.log('submitting....'); + this.setState({ emailSubmittingError: '' }); + const emailRegx = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + const email = this.state.subscribersEmail; + if (!email) { + this.setState({ + emailSubmittingError: 'Please enter a email', + }); + return; + } + if (!emailRegx.test(email)) { + this.setState({ + emailSubmittingError: 'Please enter a valid email', + }); + return; + } + this.postSubscriberEmail(email); + }; + + async postSubscriberEmail(subscribersEmail) { + await this.setState({ submittingEmail: true }); + const postSubscriberEmailRequest = await fetch(`${baseEventsURL}${subscribeURL}`, { + method: 'post', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ email: subscribersEmail }), + }); + if (postSubscriberEmailRequest.status === 200) { + this.setState({ + subscriberEmailPosted: true, + submittingEmail: false, + emailSubmittingError: '', + }); + } else { + this.setState({ + submittingEmail: false, + emailSubmittingError: 'Submission Failed Try Again.', + }); + } + } + render() { + return ( +
+ + + + We are constantly updating our platform. Do subscribe to stay informed. + {this.state.subscriberEmailPosted ? ( +

Thank you, we will keep you posted

+ ) : ( +
+ + +
+ )} + +

{this.state.emailSubmittingError}

+
+
+ + + Follow Us + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ ); + } +} diff --git a/components/common/header/index.js b/components/common/header/index.js new file mode 100644 index 000000000..6a8192b91 --- /dev/null +++ b/components/common/header/index.js @@ -0,0 +1,118 @@ +import React from 'react'; +import Router, { withRouter } from 'next/router'; +import Headroom from 'react-headroom'; +import NProgress from 'nprogress'; +import Link from 'next/link'; + +import MetaInfo from '../../../config/meta-info'; +import { Container } from '../../../utils/base.styles'; +import Meta from '../meta'; +import { Header, Nav, NavLinks, NavLink, NavLogo, MobileMenuBtn } from './index.styles'; + +Router.onRouteChangeStart = () => { + NProgress.start(); +}; + +Router.onRouteChangeComplete = () => { + NProgress.done(); +}; + +Router.onRouteChangeError = () => { + NProgress.done(); +}; + +// Adds server generated styles to emotion cache. +// '__NEXT_DATA__.ids' is set in '_document.js' +// if (typeof window !== 'undefined' && window.__NEXT_DATA__) { +// hydrate(window.__NEXT_DATA__.ids); +// } + +class NavBar extends React.Component { + state = { + menuOpen: false, + navItems: [ + { + title: 'Learn', + path: '/learn', + external: false, + }, + { + title: 'Space', + path: '/space', + external: false, + }, + { + title: 'Events', + path: '/events', + external: false, + }, + { + title: 'Blog', + path: 'https://coderplex.org/blog', + external: true, + }, + ], + }; + toggleMenu = e => { + e.preventDefault(); + this.setState(state => { + return { menuOpen: !state.menuOpen }; + }); + }; + render() { + const pathName = this.props.router.pathname; + const metaData = MetaInfo[pathName === '/' ? 'home' : pathName.split('/')[1]]; + const title = metaData.title; + const description = metaData.description; + const image = metaData.image; + return ( + +
+ + + + +
+
+ ); + } +} + +export default withRouter(NavBar); diff --git a/components/common/header/index.styles.js b/components/common/header/index.styles.js new file mode 100644 index 000000000..c94444ea1 --- /dev/null +++ b/components/common/header/index.styles.js @@ -0,0 +1,228 @@ +import styled, { injectGlobal } from 'react-emotion'; + +export const Header = styled.header` + padding: 2px 10px; + width: 100%; + background: #fff; + z-index: 1000; + border-bottom: 1px solid #eee; +`; + +export const Nav = styled.nav` + display: flex; + height: 55px; + align-items: center; + position: relative; + @media (max-width: 885px) { + justify-content: center; + } +`; + +export const NavLogo = styled.div` + flex: 1; + display: flex; + align-items: center; + padding: 10px 0; + & img { + width: 45px; + height: 45px; + margin-right: 5px; + cursor: pointer; + } + @media (max-width: 885px) { + flex: initial; + } +`; + +export const NavLinks = styled.ul` + margin: 0; + padding: 0; + list-style: none; + flex: 3; + justify-content: flex-end; + display: flex; + align-items: center; + @media (max-width: 885px) { + height: auto; + flex-direction: column; + width: 100%; + position: fixed; + z-index: -1; + top: -600%; + left: 0; + background: #fbfbfb; + border-bottom: 1px solid #eee; + font-size: 10px; + transition: all 0.25s; + &.open { + top: 60px; + } + } +`; + +export const NavLink = styled.li` + height: inherit; + text-align: center; + display: flex; + justify-content: center; + margin: 0 20px; + @media(max-width: 885px) { + width: 100%; + border-top: 1px solid #eee; + } + & a { + text-decoration: none; + color: #525c65; + font-size: 0.9rem; + line-height: 1.9rem; + padding: 0.5rem 1rem; + display: flex; + align-items: center; + position: relative; + text-transform: capitalize; + transition: all 0.25s + letter-spacing: 1px; + will-change: color, background, box-shadow; + &:hover { + color: #222; + text-shadow:0.8px 0px 0px #222 + @media(max-width: 885px) { + color: #222; + } + } + &.active { + pointer-events: none; + color: #222; + text-shadow:0.8px 0px 0px #222 + } + &.btn { + color: #7657fb; + @media(max-width: 885px) { + background: transparent; + color: #888; + padding: 0.5rem 1rem; + &:hover { + color: #222; + background: transparent; + } + } + } + @media(max-width: 885px) { + width: 100%; + font-size: 14px; + font-weight: bold; + padding: 12px 15px; + color: #888; + } + } +`; + +export const MobileMenuBtn = styled.a` + display: none; + text-decoration: none; + width: 32px; + height: 24px; + cursor: pointer; + top: 15px; + left: 5px; + position: absolute; + z-index: 1; + & span { + position: absolute; + width: 100%; + overflow: hidden; + height: 2px; + border-radius: 4px; + background: #888; + top: 50%; + transition: all 0.5s; + transform: translate3d(-2px, 0, 0) scale3d(0.6, 1, 1); + } + &::after, + &:before { + content: ''; + width: 100%; + height: 2px; + border-radius: 4px; + position: absolute; + background: #888; + top: 50%; + transition: transform 0.5s; + transform-origin: 50% 50%; + } + &:before { + transform: translate3d(0, 10px, 0) scale3d(0.8, 1, 1); + } + &:after { + transform: translate3d(0, -10px, 0) scale3d(0.8, 1, 1); + } + &.open { + & span { + transform: translate3d(-2px, 0, 0) scale3d(0, 1, 1); + } + &:before { + transform: rotate3d(0, 0, 1, -45deg) scale3d(0.8, 1, 1); + } + &:after { + transform: rotate3d(0, 0, 1, 45deg) scale3d(0.8, 1, 1); + } + } + @media (max-width: 885px) { + display: block; + } +`; + +/* eslint-disable no-unused-expressions */ +injectGlobal` + *, + *::after, + *::before { + box-sizing: border-box; + } + body { + height: 100%; + width: 100%; + padding: 0; + margin: 0; + font-size: 14px; + line-height: 1.428rem; + background: #fafafa; + font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', + Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', + 'Helvetica Neue', sans-serif; + font-weight: 400; + color: #444; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + #nprogress { + pointer-events: none; + } + #nprogress .bar { + background: #aa97fb; + position: fixed; + z-index: 1031; + top: 0; + left: 0; + width: 100%; + height: 4px; + } + #nprogress .peg { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: 0 0 10px #aa97fb, 0 0 5px #aa97fb; + opacity: 1; + transform: rotate(3deg) translate(0px, -4px); + } + .headroom--pinned header { + box-shadow: 0 2px 4px rgba(61, 71, 82, 0.1); + } + .headroom--scrolled { + z-index: 99999 !important; + } +`; +/* eslint-enable no-unused-expressions */ diff --git a/components/common/layout.js b/components/common/layout.js new file mode 100644 index 000000000..06e724175 --- /dev/null +++ b/components/common/layout.js @@ -0,0 +1,12 @@ +import React from 'react'; + +import Header from './header'; +import Footer from './footer'; + +export default ({ children }) => ( +
+
+ {children} +
+
+); diff --git a/components/common/meta.js b/components/common/meta.js new file mode 100644 index 000000000..0e8f99735 --- /dev/null +++ b/components/common/meta.js @@ -0,0 +1,33 @@ +import React from 'react'; +import Head from 'next/head'; + +export default ({ title, description, image }) => { + return ( + + + + + + + + + + + + + + + {title} + + + + + + + + + ); +}; diff --git a/components/content-loaders.js b/components/content-loaders.js deleted file mode 100644 index 95d03654a..000000000 --- a/components/content-loaders.js +++ /dev/null @@ -1,243 +0,0 @@ -import React from 'react'; - -export const CardContentLoader = () => ( -
-
-
-
-
-
-
-
-
-
- -
-); - -export const TextContentLoader = props => ( -
-
-
-
- -
-); diff --git a/components/events/event-card.js b/components/events/event-card.js new file mode 100644 index 000000000..e69de29bb diff --git a/components/footer.js b/components/footer.js deleted file mode 100644 index b8dc8b4ea..000000000 --- a/components/footer.js +++ /dev/null @@ -1,84 +0,0 @@ -import React from 'react'; -import FaFacebook from 'react-icons/lib/fa/facebook'; -import FaYoutube from 'react-icons/lib/fa/youtube-play'; -import FaGithub from 'react-icons/lib/fa/github-alt'; -import FaInstagram from 'react-icons/lib/fa/instagram'; -import FaTwitter from 'react-icons/lib/fa/twitter'; - -export default () => ( -
-
-
-

Follow Us

- -
-
- -
-); diff --git a/components/global-styles.js b/components/global-styles.js deleted file mode 100644 index 317d5179a..000000000 --- a/components/global-styles.js +++ /dev/null @@ -1,137 +0,0 @@ -import React from 'react'; - -export default () => ( -
- -
-); diff --git a/components/head.js b/components/head.js deleted file mode 100644 index c85ae2430..000000000 --- a/components/head.js +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import Head from 'next/head'; - -export default ({ title, description, image }) => ( - - - - - - - - - - - - - - {title} - - - - - - - - -); diff --git a/components/header.js b/components/header.js deleted file mode 100644 index 897372cf4..000000000 --- a/components/header.js +++ /dev/null @@ -1,301 +0,0 @@ -import React from 'react'; -import Headroom from 'react-headroom'; -import NProgress from 'nprogress'; -import Router from 'next/router'; -import Link from 'next/link'; -import GoHome from 'react-icons/lib/go/home'; -import GoBook from 'react-icons/lib/md/school'; -import GoStar from 'react-icons/lib/md/library-books'; -import GoCalender from 'react-icons/lib/go/calendar'; -import GoOrg from 'react-icons/lib/go/organization'; - -import MetaInfo from '../config/meta-info'; -import GlobalStyles from './global-styles'; -import Head from './head'; - -Router.onRouteChangeStart = () => { - NProgress.start(); -}; - -Router.onRouteChangeComplete = () => { - NProgress.done(); -}; - -Router.onRouteChangeError = () => { - NProgress.done(); -}; - -export default props => { - const title = - props.url.pathname === '/' ? 'home' : props.url.pathname.split('/')[1]; - const metaData = MetaInfo[title]; - const navItems = [ - { - title: 'Home', - path: '/', - external: false, - icon: GoHome, - }, - { - title: 'Learn', - path: '/learn', - external: false, - icon: GoBook, - }, - { - title: 'Space', - path: '/space', - external: false, - icon: GoOrg, - }, - { - title: 'Events', - path: '/events', - external: false, - icon: GoCalender, - }, - { - title: 'Blog', - path: 'https://coderplex.org/blog', - external: true, - icon: GoStar, - }, - ]; - return ( - -
- - -
- -
-
- -
- ); -}; diff --git a/components/icons.js b/components/icons.js deleted file mode 100644 index cd77a8c84..000000000 --- a/components/icons.js +++ /dev/null @@ -1,102 +0,0 @@ -import React from 'react'; - -export const UnderConstructionSVG = props => ( - - - - - - - - - - - - - - - - -); - -export const LaravelSVG = props => ( - - - - -); - -export const ReactSVG = props => ( - - - - - -); diff --git a/components/learn-components/accord-guide.js b/components/learn-components/accord-guide.js deleted file mode 100644 index 47b051fac..000000000 --- a/components/learn-components/accord-guide.js +++ /dev/null @@ -1,73 +0,0 @@ -import React, { Component } from 'react'; -import fetch from 'isomorphic-unfetch'; -import marked from 'marked'; -import { Accordion, Icon, Loader } from 'semantic-ui-react'; - -export default class AccordGuide extends Component { - constructor(props) { - super(props); - marked.setOptions({ - renderer: new marked.Renderer(), - gfm: true, - tables: true, - breaks: true, - pedantic: false, - sanitize: true, - smartLists: true, - smartypants: false, - }); - this.state = { - markdown: '', - activeIndex: -1, - }; - } - - handleClick = (e, titleProps) => { - const { index } = titleProps; - const { activeIndex } = this.state; - const newIndex = activeIndex === index ? -1 : index; - - this.setState({ activeIndex: newIndex }); - }; - - async componentDidMount() { - try { - const request = await fetch(this.props.url); - const response = await request.text(); - await this.setState({ markdown: response, loading: false }); - } catch (err) { - console.log(err); - } - } - - render() { - const { activeIndex } = this.state; - return ( -
-
- - - - {this.props.title} - - - {this.state.markdown === '' ? ( - - ) : ( -
- )} - - -
-
- ); - } -} diff --git a/components/learn-components/row-contributors.js b/components/learn-components/row-contributors.js deleted file mode 100644 index 507970432..000000000 --- a/components/learn-components/row-contributors.js +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import { Card, Image, Icon, Header } from 'semantic-ui-react'; - -export default props => ( -
- -
-
-
- - {props.userName} -
-
-
- {props.contributions.map((contribution, index) => { - const icon = - contribution.type === 'topic' - ? 'code' - : contribution.type === 'article' ? 'book' : 'film'; - const valueVerb = - contribution.count === 1 - ? contribution.type - : `${contribution.type}s`; - return ( -
- - {`${contribution.count} ${valueVerb}`} -
- ); - })} -
-
-
- -
-); diff --git a/components/learn-components/subject-banner.js b/components/learn-components/subject-banner.js deleted file mode 100644 index cd95d8116..000000000 --- a/components/learn-components/subject-banner.js +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; - -export default props => ( -
-
-
-
{props.subject}
-
- -
-); diff --git a/components/learn/subject-card.js b/components/learn/subject-card.js new file mode 100644 index 000000000..f609df159 --- /dev/null +++ b/components/learn/subject-card.js @@ -0,0 +1,70 @@ +import React from 'react'; +import styled from 'react-emotion'; +import Link from 'next/link'; + +import { breakpoints } from '../../utils/base.styles'; + +const Subject = styled.a` + text-decoration: none; + width: calc(33.33% - 40px); + margin: 20px; + display: inline-block; + min-height: 200px; + background: #fff; + border: 1px solid #b9b9b9; + transition: all 0.25s; + cursor: pointer; + &:hover { + border: 1px solid #000; + } + & .icon { + padding: 10px 15px; + font-size: 10rem; + ${breakpoints.xs} { + font-size: 8rem; + } + } + & .content { + padding: 10px 0 10px 30px; + color: #444; + background: #f6f6f6; + text-align: left; + } + & .title { + font-size: 1.5rem; + font-size: 600; + color: #222; + ${breakpoints.xs} { + font-size: 1.2rem; + } + } + & .subtitle { + font-size: 0.8rem; + color: #444; + } + ${breakpoints.md} { + width: calc(50% - 40px); + } + ${breakpoints.sm} { + width: calc(50% - 40px); + margin: 20px auto; + } + ${breakpoints.xs} { + width: 90%; + margin: 20px auto; + } +`; + +export default ({ subject }) => ( + + +
+ +
+
+
{subject.title}
+
{subject.domain}
+
+
+ +); diff --git a/components/marked-js.js b/components/marked-js.js deleted file mode 100644 index 8fbad66a7..000000000 --- a/components/marked-js.js +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import marked from 'marked'; -import { Loader } from 'semantic-ui-react'; - -export default class MarkedJS extends React.Component { - constructor(props) { - super(props); - marked.setOptions({ - renderer: new marked.Renderer(), - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: true, - smartLists: true, - smartypants: false, - }); - } - - render() { - return ( -
- {this.props.loading ? ( - - ) : ( -
- )} -
- ); - } -} diff --git a/components/row-events.js b/components/row-events.js deleted file mode 100644 index 5b106cb79..000000000 --- a/components/row-events.js +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import { Card, Icon, Image } from 'semantic-ui-react'; -import format from 'date-fns/format'; -import PropTypes from 'prop-types'; - -const extractImageUrl = input => { - const regex = / { - return ( - - {description ? :
} - - {name} -
- {venue === undefined ? 'Online' : venue.name} -
-
- - - - {format(time, "h:mm A, ddd MMM Do 'YY")} - - - - {yesCount} - {status === 'upcoming' ? ' attending' : ' attended'} - - - - {venue === undefined ? 'Free session' : 'Free entry'} - - - - - ); -}; - -RowEvent.defaultProps = { - fluid: false, -}; - -RowEvent.propTypes = { - fluid: PropTypes.bool, - link: PropTypes.string, - description: PropTypes.string, - name: PropTypes.string, - venue: PropTypes.object, - time: PropTypes.number, - yesCount: PropTypes.number, - status: PropTypes.string, -}; - -export default RowEvent; diff --git a/components/subscribe.js b/components/subscribe.js deleted file mode 100644 index a87956d45..000000000 --- a/components/subscribe.js +++ /dev/null @@ -1,126 +0,0 @@ -import React, { Component } from 'react'; -import { Form, Message, Grid } from 'semantic-ui-react'; -import { baseEventsURL, subscribeURL } from '../utils/urls'; - -class Subscribe extends Component { - state = { - subscribersEmail: '', - submittingEmail: false, - emailSubmittingError: '', - subscriberEmailPosted: false, - }; - - handleChange = event => { - this.setState({ - subscribersEmail: event.target.value, - emailSubmittingError: '', - }); - }; - - handleSubmit = () => { - this.setState({ emailSubmittingError: '' }); - const emailRegx = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - const email = this.state.subscribersEmail; - if (!email) { - this.setState({ - emailSubmittingError: 'Please enter a email', - }); - return; - } - if (!emailRegx.test(email)) { - this.setState({ - emailSubmittingError: 'Please enter a valid email', - }); - return; - } - this.postSubscriberEmail(email); - }; - - async postSubscriberEmail(subscribersEmail) { - await this.setState({ submittingEmail: true }); - const postSubscriberEmailRequest = await fetch( - `${baseEventsURL}${subscribeURL}`, - { - method: 'post', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: subscribersEmail }), - }, - ); - if (postSubscriberEmailRequest.status === 200) { - this.setState({ - subscriberEmailPosted: true, - submittingEmail: false, - emailSubmittingError: '', - }); - } else { - this.setState({ - submittingEmail: false, - emailSubmittingError: 'Submission Failed Try Again.', - }); - } - } - render() { - const hasError = this.state.emailSubmittingError !== ''; - - return ( -
-
-
-

- We are constanly updating our platform.
If you would like to - stay informed about our updates, drop your email. -

-
- {this.state.subscriberEmailPosted ? ( -

Thank you, we will keep you posted

- ) : ( -
- - - - - - - - - - - - - )} -
-
-
- -
- ); - } -} - -export default Subscribe; diff --git a/config/meta-info.json b/config/meta-info.json index 578de1dd0..84544aa00 100644 --- a/config/meta-info.json +++ b/config/meta-info.json @@ -1,8 +1,7 @@ { "home": { "title": "Coderplex | Learn, Collaborate and Create with a Community", - "description": - "We're a non-profit startup on a mission to improve the state of tech across India", + "description": "We're a non-profit startup on a mission to improve the state of tech across India", "image": "" }, "learn": { @@ -21,5 +20,10 @@ "title": "Online and Offline Tech Events | Coderplex", "description": "We host frequent online and offline events, from sessions to competitions", "image": "" + }, + "login": { + "title": "Login Or Register | Coderplex", + "description": "Join our community", + "image": "" } } diff --git a/hocs/public-page.js b/hocs/public-page.js deleted file mode 100644 index f03453572..000000000 --- a/hocs/public-page.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; - -import Header from '../components/header'; -import Footer from '../components/footer'; - -export default Page => { - return class PublicPage extends React.Component { - static async getInitialProps(ctx) { - let initialProps = {}; - if (Page.getInitialProps) { - initialProps = await Page.getInitialProps(ctx); - } - return { ...initialProps }; - } - render() { - return ( -
-
- -
-
- ); - } - }; -}; diff --git a/next.config.js b/next.config.js index 6c8ce8887..608f31e9b 100644 --- a/next.config.js +++ b/next.config.js @@ -2,6 +2,7 @@ const { ANALYZE } = process.env; // For now copy paste from utils mockdata later we will fetch these from API // We cannot import from utils/mockData.js because this file is not transpiled so does not support es6 modules + const listOfSubjects = [ { id: '2132', @@ -99,6 +100,13 @@ module.exports = { webpack: (config, { dev }) => { /* Enable only in Production */ if (!dev) { + // Preact + // console.log('> Using Preact instead of React'); + // config.resolve.alias = { + // react: 'preact-compat/dist/preact-compat', + // 'react-dom': 'preact-compat/dist/preact-compat', + // 'react-emotion': 'preact-emotion', + // }; if (ANALYZE) { const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); config.plugins.push( @@ -106,7 +114,7 @@ module.exports = { analyzerMode: 'server', analyzerPort: 8888, openAnalyzer: true, - }), + }) ); } } @@ -118,6 +126,7 @@ module.exports = { '/events': { page: '/events' }, '/learn': { page: '/learn' }, '/space': { page: '/space' }, + '/login': { page: '/login' }, }; for (const subject of listOfSubjects) { routes[subject.url] = { diff --git a/package.json b/package.json index 237235d85..de6fa1dce 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "test": "xo && jest", "lint": - "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write --single-quote --print-width='80' --trailing-comma='all' && xo --fix", + "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -34,25 +34,35 @@ }, "lint-staged": { "*.js": [ - "prettier --write --single-quote --print-width=80 --trailing-comma=all", + "prettier --write --single-quote --print-width=120 --trailing-comma=es5", "xo", "jest --findRelatedTests", "git add" ] }, "dependencies": { + "babel-plugin-emotion": "^8.0.10", "date-fns": "1.29.0", + "emotion": "^8.0.10", + "emotion-server": "^8.0.10", + "grid-emotion": "^2.1.0", "isomorphic-unfetch": "2.0.0", + "lodash.take": "^4.1.1", "marked": "^0.3.6", "next": "^4.1.0", "nprogress": "^0.2.0", "path-match": "1.2.4", + "preact": "^8.2.6", + "preact-compat": "^3.17.0", + "preact-emotion": "^8.0.10", "prop-types": "^15.5.10", "react": "^16.0.0", "react-dom": "^16.0.0", + "react-emotion": "^8.0.10", + "react-event-timeline": "^1.4.0", "react-headroom": "^2.1.6", "react-icons": "^2.2.5", - "semantic-ui-react": "^0.76.0" + "styled-system": "^1.0.8" }, "devDependencies": { "babel-eslint": "^8.0.1", @@ -70,6 +80,8 @@ "prettier": "^1.7.0", "raf": "^3.4.0", "react-test-renderer": "^16.0.0", + "typescript": "^2.6.1", + "typescript-styled-plugin": "^0.2.0", "webpack-bundle-analyzer": "^2.8.3", "xo": "^0.18.2" }, diff --git a/pages/_document.js b/pages/_document.js new file mode 100644 index 000000000..dc445a090 --- /dev/null +++ b/pages/_document.js @@ -0,0 +1,33 @@ +import React from 'react'; +import Document, { Head, Main, NextScript } from 'next/document'; +import { extractCritical } from 'emotion-server'; + +export default class MyDocument extends Document { + static getInitialProps({ renderPage }) { + const page = renderPage(); + const styles = extractCritical(page.html); + return { ...page, ...styles }; + } + + constructor(props) { + super(props); + const { __NEXT_DATA__, ids } = props; + if (ids) { + __NEXT_DATA__.ids = ids; + } + } + + render() { + return ( + + + -
- ); - } - - render() { - return ( -
- -
- {this.state.loading ? ( -
- - - - -
- ) : ( -
{this.renderEvents()}
- )} -
- -
- ); - } -} - -export default publicPage(Events); +export default () => ( + + + + + + + + Upcoming Events + + + No events as of now, check back later + + + + + + + Past Events + + + Loading... + + + + + + +); diff --git a/pages/index.js b/pages/index.js index 0be9ef4d3..9f16d170a 100644 --- a/pages/index.js +++ b/pages/index.js @@ -1,266 +1,258 @@ import React from 'react'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; +import { Flex, Box } from 'grid-emotion'; +import take from 'lodash.take'; import Link from 'next/link'; -import { Card, Button, Divider, Grid, Segment } from 'semantic-ui-react'; -import { baseEventsURL, indexPageEventURL } from '../utils/urls'; -import RowEvent from '../components/row-events'; -import publicPage from '../hocs/public-page'; -import Subscribe from '../components/subscribe'; +import Hide, { Container, Button, Title, SubTitle, breakpoints } from '../utils/base.styles'; +import { listOfSubjects } from '../utils/mock-data'; +import Layout from '../components/common/layout'; +import SubjectCard from '../components/learn/subject-card'; -const indexPageLearns = [ - { - subjectId: 'react', - url: 'learn/react', - title: 'ReactJS', - subject: 'Frontend Web Development', - }, - { - subjectId: 'laravel', - url: 'learn/laravel', - title: 'Laravel', - subject: 'Backend Web Development', - }, - { - subjectId: 'go', - url: 'learn/go', - title: 'Go', - subject: 'Programming Language', - }, - { - subjectId: 'introductiontoCS', - url: 'learn/introductiontoCS', - title: 'Introduction to C.S', - subject: 'Computer Science', - }, - { - subjectId: 'blockchain', - url: 'learn/blockchain', - title: 'Blockchain', - subject: 'Decentralized Systems', - }, - { - subjectId: 'android', - url: 'learn/android', - title: 'Android', - subject: 'Mobile Development', - }, -]; +const HeroSection = styled.section` + ${space}; + background-color: #fff; + position: relative; + text-align: center; + background-image: url('https://res.cloudinary.com/coderplex/image/upload/v1510788480/website__assets/pattern.png'); + & h1 { + font-size: 2.5rem; + font-weight: 300; + color: #36434d; + ${breakpoints.md} { + font-size: 2.3rem; + } + ${breakpoints.sm} { + font-size: 1.8rem; + } + ${breakpoints.xs} { + font-size: 1.5rem; + line-height: 1.8rem; + } + } + & img { + width: 100%; + } +`; -class Home extends React.Component { - state = { - indexPageEvent: '', - }; +const LearnSection = styled.section` + ${space}; + background-color: #f6f6f6; + position: relative; + text-align: center; +`; - async componentDidMount() { - try { - const requestEvent = await fetch(`${baseEventsURL}${indexPageEventURL}`); - const requestEventJson = await requestEvent.json(); - await this.setState({ - indexPageEvent: requestEventJson[0], - }); - } catch (err) { - console.log(err); +const SpaceSection = styled.section` + ${space}; + background-color: #7657fb; + position: relative; + text-align: left; + color: #fff; + & .box { + position: relative; + z-index: 2; + & img { + width: 100%; + min-height: 332px; + } + ${breakpoints.sm} { + text-align: center; + } + ${breakpoints.xs} { + text-align: center; } } +`; - render() { - return ( -
-
-
-
-
- words -
-

- On a mission to improve the state of tech in India -

-
- -
-
-
-

Open Source Learning Guides

-

- Our guides are crowd-sourced recommendations of free online - resources to learn any technology -

-
- - {indexPageLearns.map(learn => ( - - - - ))} - -
- - + + + + + + + + + + Offline Co-Learning Spaces + + Physical spaces where you can come down to engage in self learning, peer-learning and collaboration. + + + These are dynamic learning environments where everyone learns at their own pace and compliments each + other. We also organize weekly group activities like Open Source evenings, casual hackathons etc. + + + + -
-
- -
-
-

Offline Co-Learning Spaces

-

- Physical spaces where you can come down to engage in self - learning, peer-learning and collaboration. -

-
-
- These are dynamic learning environments where everyone learns - at their own pace and compliments each other. We also organize - weekly group activities like Open source evenings, casual - hackathons etc. -
+ + + + sapce__img + + + + + + + + + + + events__pic + + + + Online & Offline Events + + We do frequent online and offline events, covering broad range of topics, from Web Development to Data + Science. The goal of these events are to share knowledge, connect with people and enable collaboration. We + also partner with local comunities to help them reach a wider audience. + + + events__pic -
- - - -
-
- -
-
-

Online & Offline Events

-

- We do frequent online and offline events, covering broad range - of topics. -

-
- {this.state.indexPageEvent ? ( - - ) : ( -
- )} -
+ - -
-
-
- -
- ); - } -} - -export default publicPage(Home); + + + + + + + + + + Join our Discord Server, and say "Hello, world!" + + + + + + + + +); diff --git a/pages/learn/index.js b/pages/learn/index.js index c19b91875..f09f5e997 100644 --- a/pages/learn/index.js +++ b/pages/learn/index.js @@ -1,157 +1,36 @@ import React from 'react'; -import { - Card, - Icon, - Label, - Popup, - Grid, - Button, - Search, - Header, -} from 'semantic-ui-react'; -import Link from 'next/link'; +import { Flex } from 'grid-emotion'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; -import publicPage from '../../hocs/public-page'; -import CommonBanner from '../../components/common-banner'; +import Layout from '../../components/common/layout'; +import BannerSection from '../../components/common/banner'; +import SubjectCard from '../../components/learn/subject-card'; +import { Container } from '../../utils/base.styles'; +import { listOfSubjects } from '../../utils/mock-data'; -import { listOfSubjects, listOfDomains } from '../../utils/mock-data'; +const SubjectsSection = styled.section` + ${space}; + background: #fff; + text-align: center; + position: relative; +`; -let numOfFilteredSubjects; -class Learn extends React.Component { - state = { - filter: 'All', - filteredSubjects: listOfSubjects, - }; - - componentDidUpdate(prevProps, prevState) { - if (prevState.filter !== this.state.filter) { - const filteredSubjects = listOfSubjects.filter(subject => { - if (this.state.filter === 'All') { - return true; - } - return subject.domain === this.state.filter; - }); - numOfFilteredSubjects = filteredSubjects.length; - this.setState({ - filteredSubjects, - }); - } - } - - render() { - return ( -
- -
-
-
- {listOfDomains.map(domain => ( - - ))} -
- -
- {this.state.filter === 'All' - ? 'Showing all courses' - : numOfFilteredSubjects === 0 - ? `Currenlty we dont have any subjects under ${this.state - .filter}` - : `Showing ${numOfFilteredSubjects} courses under ${this.state - .filter}`} -
- - {this.state.filteredSubjects.map(subject => ( - - - - - - - {subject.title} - {subject.domain} - - - - {`${subject.learningCount} learning`} - - - - - ))} - -
-
- -
- ); - } -} - -export default publicPage(Learn); +export default () => ( + + + + + + {listOfSubjects.map(subject => { + return ; + })} + + + + +); diff --git a/pages/learn/subject.js b/pages/learn/subject.js index 95d81c8a5..4e4c592de 100644 --- a/pages/learn/subject.js +++ b/pages/learn/subject.js @@ -1,146 +1,12 @@ import React from 'react'; -import fetch from 'isomorphic-unfetch'; -import { Tab } from 'semantic-ui-react'; -import publicPage from '../../hocs/public-page'; -import SubjectBanner from '../../components/learn-components/subject-banner'; -import MarkedJS from '../../components/marked-js'; -import AccordGuide from '../../components/learn-components/accord-guide'; -import { contentsOfLaravel } from '../../utils/mock-data'; -import RowContributors from '../../components/learn-components/row-contributors'; -import { UnderConstructionSVG } from '../../components/icons'; +import Layout from '../../components/common/layout'; +import BannerSection from '../../components/common/banner'; -export default publicPage( - class Subjects extends React.Component { - constructor(props) { - super(props); - this.state = { - overview: '', - overviewLoading: true, - }; - } - - componentDidMount() { - this.requestOverviewContent(); - } - - async requestOverviewContent() { - try { - const overviewPromise = await fetch(contentsOfLaravel.overview); - const overview = await overviewPromise.text(); - await this.setState({ - overview, - overviewLoading: false, - }); - } catch (err) { - console.log(err); - } - } - - render() { - return ( -
- {this.props.url.query.id === 'laravel' ? ( -
- -
-
- ( - - - - ), - }, - { - menuItem: 'Guide', - render: () => ( - - {contentsOfLaravel.guides.map(guide => ( - - ))} - - ), - }, - { - menuItem: 'Contributors', - render: () => ( - - {contentsOfLaravel.contributors.map(contributor => ( - - ))} - - ), - }, - ]} - /> -
-
-
- ) : ( -
- -

{`${this.props.url.query - .id} and other guides coming soon...!`}

-
- )} - -
- ); - } - }, -); +export default props => { + return ( + + + + ); +}; diff --git a/pages/login.js b/pages/login.js new file mode 100644 index 000000000..0caf64ee2 --- /dev/null +++ b/pages/login.js @@ -0,0 +1,12 @@ +import React from 'react'; + +import Layout from '../components/common/layout'; +import BannerSection from '../components/common/banner'; + +export default () => { + return ( + + + + ); +}; diff --git a/pages/space.js b/pages/space.js index 2770ee67c..e062afd8c 100644 --- a/pages/space.js +++ b/pages/space.js @@ -1,144 +1,145 @@ import React from 'react'; -import { Card, Segment, Header, Divider } from 'semantic-ui-react'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; +import FaCalender from 'react-icons/lib/fa/calendar'; +import { Timeline, TimelineEvent } from 'react-event-timeline'; // eslint-disable-line import/no-unresolved -import CommonBanner from '../components/common-banner'; -import publicPage from '../hocs/public-page'; +import Layout from '../components/common/layout'; +import BannerSection from '../components/common/banner'; +import { Container, Title, breakpoints, SubTitle } from '../utils/base.styles'; -export default publicPage(() => ( -
- ( + + -
-
-

Who is this for?

-
- - - People who are genuinely passionate about tech, who get excited - about learning new skills, building, solving and discussing - problems in latest tech. - - - Graduates who are struggling to get a job, who want to build their - expertise in modern technologies and are willing to invest a - significant amount of their time self-learning - - - Students who are willing to learn outside of their college - curriculum, would like to become professional developers down the - line and get exposure to the real world - - - Experienced developers, who want to interact with other - developers, contribute to open source, expand their horizons and - learn new technologies. - - - Professionals from non-tech background, who want to get started - with tech or switch their careers. - - -
-
-
-

Activities & Schedule

-
- - - We will help you pick a technology and provide you with learning - guides to learn and build something on a daily basis. - - -

Daily

- You will engage in daily code review and pair programming - exercises with other members. -
- -

Wednesday

- We will have an Open Source Evening, where everyone will be - encouraged to find open source projects and contribute to them. -
- -

Thursday

- We will have a casual coding competition, where members will - participate to solve coding challenges together. -
- -

Friday - Saturday

- We will have casual hackathons, where everyone will participate to - build a project, big or small. -
- -

Saturday

- In the evening, we will screen a tech-related documentary, movie - or TV show. -
- -

Sunday

- Members will present their work i.e. projects or new topics they - have made or learned in the past week -
-
-
-
- - - -
-

Pricing

-
- - - -
- INR 1000/- - per month -
-
- - For membership mail us
space@coderplex.org -
-
-
-
-

Mode of payment

- - UPI - PayTM - Cash - -
-
- -
-)); + + + + Who Is This For? + +
    {forWhomPoints.map(point =>
  • {point}
  • )}
+
+
+ + + + Activites and Schedule + + + We will help you pick a technology and provide you with learning guides to learn and build something on a + daily basis. + + + {activities.map(activity => ( + } iconColor="#222"> + {activity.task} + + ))} + + + + + + + Pricing + + + INR 1000/- per month. For membership mail us at space@coderplex.org + + + + +); diff --git a/static/banner.png b/static/banner.png deleted file mode 100644 index 87e7ad92f3c0501578f8db8d69b81b530e0ec6ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46888 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 b6j6XDYCg=Z6r|v>A2&I0?5~geY;XQA1%TDL diff --git a/static/bg.png b/static/bg.png deleted file mode 100644 index eab6d06d2012d471a45616d0a277158f6aefb2f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9253 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 Hu0mjfEr+ZB diff --git a/static/favicons/manifest.json b/static/favicons/manifest.json index ebd929b74..2ddc86456 100644 --- a/static/favicons/manifest.json +++ b/static/favicons/manifest.json @@ -1,18 +1,21 @@ { - "name": "CoderPlex", - "icons": [ - { - "src": "/static/favicons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/static/favicons/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#c201b9", - "background_color": "#c201b9", - "display": "standalone" -} \ No newline at end of file + "name": "CoderPlex", + "short_name": "CoderPlex", + "icons": [ + { + "src": "/static/favicons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/static/favicons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#c201b9", + "background_color": "#c201b9", + "start_url": "/", + "display": "standalone", + "orientation": "portrait-primary" +} diff --git a/static/wordcloud.png b/static/wordcloud.png deleted file mode 100644 index 10a1ccef2760f735fbe642a5cc94d83476d8ba9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130253 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 F86Ni=hN4^=g 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 diff --git a/utils/base.styles.js b/utils/base.styles.js new file mode 100644 index 000000000..6d613a889 --- /dev/null +++ b/utils/base.styles.js @@ -0,0 +1,101 @@ +import styled, { css } from 'react-emotion'; + +export const breakpoints = { + xs: '@media screen and (max-width: 40em)', + sm: '@media screen and (min-width: 40em) and (max-width: 52em)', + md: '@media screen and (min-width: 52em) and (max-width: 64em)', + lg: '@media screen and (min-width: 64em)', +}; + +export const hidden = key => props => + props[key] + ? { + [breakpoints[key]]: { + display: 'none', + }, + } + : null; + +export const xs = hidden('xs'); +export const sm = hidden('sm'); +export const md = hidden('md'); +export const lg = hidden('lg'); + +const Hide = styled.div([], xs, sm, md, lg); + +export const baseContainer = css` + max-width: 1024px; + margin: 0 auto; +`; + +export const Container = styled.div` + ${baseContainer}; +`; + +export const baseButton = css` + background: #7657fb; + padding: 0.2rem 1rem; + color: #fff; + text-decoration: none; + &:hover { + background: #6f19ed; + font-weight: normal; + } +`; + +export const Button = styled.a` + ${baseButton}; + background: ${props => (props.inverted ? '#7657fb' : '#fff')} + color: ${props => (props.inverted ? '#fff' : '#222')} + padding: ${props => (props.large ? '0.8rem 2.25rem' : props.medium ? '0.6rem 1.2rem' : '0.2rem 1rem')}; + font-size: ${props => (props.large ? '1.8rem' : props.medium ? '1rem' : '1rem')} + cursor: pointer; + user-select: none; + -webkit-touch-callout: none; + &:hover { + background: ${props => (props.inverted ? '#6f19ed' : '#eee')}; + } +`; + +export const Title = styled.h2` + font-size: 2rem; + font-weight: 400; + color: ${props => (props.inverted ? (props.color ? props.color : '#7657fb') : '#fff')}; + ${breakpoints.md} { + font-size: 1.8rem; + } + ${breakpoints.sm} { + font-size: 1.8rem; + line-height: 1.8rem; + text-align: center; + } + ${breakpoints.xs} { + font-size: 1.8rem; + line-height: 2rem; + text-align: center; + } +`; + +export const SubTitle = styled.h3` + font-size: ${props => (props.small ? '1rem' : '1.2rem')}; + font-weight: 400; + color: ${props => (props.inverted ? '#222' : '#fff')}; + max-width: 900px; + margin-left: auto; + margin-right: auto; + line-height: ${props => (props.small ? '1.4rem' : '2rem')}; + ${breakpoints.md} { + font-size: 1rem; + } + ${breakpoints.sm} { + font-size: 1rem; + text-align: center; + } + ${breakpoints.xs} { + font-size: 0.9rem; + text-align: center; + line-height: ${props => (props.small ? '1.4rem' : '1.8rem')}; + } +`; + +export default Hide; diff --git a/utils/mock-data.js b/utils/mock-data.js index abaea1909..3805f8d07 100644 --- a/utils/mock-data.js +++ b/utils/mock-data.js @@ -25,7 +25,7 @@ export const listOfSubjects = [ domain: 'Programming Language', url: '/learn/go', subjectId: 'go', - icon: 'devicon-go-plain ', + icon: 'devicon-go-plain colored', learningCount: '7', learnGuideStatus: false, }, @@ -93,43 +93,37 @@ export const listOfSubjects = [ export const indexPageLearns = [ { - link: - 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/Libraries%20%26%20Frameworks/Learn-React.md', + link: 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/Libraries%20%26%20Frameworks/Learn-React.md', title: 'ReactJS', subject: 'Frontend Web Development', image: '', }, { - link: - 'https://github.com/coderplex/learn/blob/master/web-dev/Backend/Learn-Laravel.md', + link: 'https://github.com/coderplex/learn/blob/master/web-dev/Backend/Learn-Laravel.md', title: 'Laravel', subject: 'Backend Web Development', image: '', }, { - link: - 'https://github.com/coderplex/learn/blob/master/programming-languages/Go/learn-go.md', + link: 'https://github.com/coderplex/learn/blob/master/programming-languages/Go/learn-go.md', title: 'Go', subject: 'Programming Language', image: '', }, { - link: - 'https://github.com/coderplex/learn/blob/master/computer-science/Learn-CS.md', + link: 'https://github.com/coderplex/learn/blob/master/computer-science/Learn-CS.md', title: 'Introduction to C.S', subject: 'Computer Science', image: '', }, { - link: - 'https://github.com/coderplex/learn/blob/master/Blockchain/blockchain-basics.md', + link: 'https://github.com/coderplex/learn/blob/master/Blockchain/blockchain-basics.md', title: 'Blockchain', subject: 'Decentralized Systems', image: '', }, { - link: - 'https://github.com/coderplex/learn/blob/master/mobile-dev/Android/learn-android.md', + link: 'https://github.com/coderplex/learn/blob/master/mobile-dev/Android/learn-android.md', title: 'Android', subject: 'Mobile Development', image: '', @@ -149,8 +143,7 @@ export const listOfDomains = [ export const contentsOfLaravel = { logo: 'devicon-laravel-plain colored', - overview: - 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/overview.md', + overview: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/overview.md', guides: [ { name: 'Prerequisites', @@ -224,8 +217,7 @@ export const contentsOfLaravel = { { userName: 'Vinay Puppal', userPage: 'https://www.vinaypuppal.com/', - userImage: - 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/214440/profile/profile-512.jpg?2', + userImage: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/214440/profile/profile-512.jpg?2', contributions: [ { type: 'topic', diff --git a/yarn.lock b/yarn.lock index 6914ec6b8..3622626a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,73 @@ # yarn lockfile v1 +"@babel/code-frame@7.0.0-beta.32", "@babel/code-frame@^7.0.0-beta.31": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.32.tgz#04f231b8ec70370df830d9926ce0f5add074ec4c" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/helper-function-name@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.32.tgz#6161af4419f1b4e3ed2d28c0c79c160e218be1f3" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.32" + "@babel/template" "7.0.0-beta.32" + "@babel/types" "7.0.0-beta.32" + +"@babel/helper-get-function-arity@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.32.tgz#93721a99db3757de575a83bab7c453299abca568" + dependencies: + "@babel/types" "7.0.0-beta.32" + +"@babel/helper-module-imports@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.31.tgz#75d246ab1d7528a571a5b326b5380cd3e3c103c0" + dependencies: + "@babel/types" "7.0.0-beta.31" + lodash "^4.2.0" + +"@babel/template@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.32.tgz#e1d9fdbd2a7bcf128f2f920744a67dab18072495" + dependencies: + "@babel/code-frame" "7.0.0-beta.32" + "@babel/types" "7.0.0-beta.32" + babylon "7.0.0-beta.32" + lodash "^4.2.0" + +"@babel/traverse@^7.0.0-beta.31": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.32.tgz#b78b754c6e1af3360626183738e4c7a05951bc99" + dependencies: + "@babel/code-frame" "7.0.0-beta.32" + "@babel/helper-function-name" "7.0.0-beta.32" + "@babel/types" "7.0.0-beta.32" + babylon "7.0.0-beta.32" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@babel/types@7.0.0-beta.32", "@babel/types@^7.0.0-beta.31": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.32.tgz#c317d0ecc89297b80bbcb2f50608e31f6452a5ff" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + "@semantic-release/commit-analyzer@^3.0.1": version "3.0.7" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-3.0.7.tgz#dc955444a6d3d2ae9b8e21f90c2c80c4e9142b2f" @@ -48,8 +115,8 @@ pify "^3.0.0" "@types/node@*": - version "8.0.50" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.50.tgz#dc545448e128c88c4eec7cd64025fcc3b7604541" + version "8.0.53" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8" JSONStream@^1.0.4: version "1.3.1" @@ -320,6 +387,10 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + async@^1.4.0, async@~1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -346,14 +417,6 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-beta.0.tgz#418a7b5f3f7dc9a4670e61b1158b4c5661bec98d" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - babel-code-frame@^6.16.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -387,13 +450,13 @@ babel-core@6.26.0, babel-core@^6.0.0, babel-core@^6.26.0: source-map "^0.5.6" babel-eslint@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.1.tgz#5d718be7a328625d006022eb293ed3008cbd6346" + version "8.0.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.2.tgz#e44fb9a037d749486071d52d65312f5c20aa7530" dependencies: - babel-code-frame "7.0.0-beta.0" - babel-traverse "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babylon "7.0.0-beta.22" + "@babel/code-frame" "^7.0.0-beta.31" + "@babel/traverse" "^7.0.0-beta.31" + "@babel/types" "^7.0.0-beta.31" + babylon "^7.0.0-beta.31" babel-generator@6.26.0, babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.0" @@ -450,15 +513,6 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-function-name@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.0.tgz#d1b6779b647e5c5c31ebeb05e13b998e4d352d56" - dependencies: - babel-helper-get-function-arity "7.0.0-beta.0" - babel-template "7.0.0-beta.0" - babel-traverse "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -469,12 +523,6 @@ babel-helper-function-name@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-get-function-arity@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.0.tgz#9d1ab7213bb5efe1ef1638a8ea1489969b5a8b6e" - dependencies: - babel-types "7.0.0-beta.0" - babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" @@ -489,6 +537,13 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-helper-module-imports@^7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-helper-module-imports/-/babel-helper-module-imports-7.0.0-beta.3.tgz#e15764e3af9c8e11810c09f78f498a2bdc71585a" + dependencies: + babel-types "7.0.0-beta.3" + lodash "^4.2.0" + babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" @@ -547,9 +602,11 @@ babel-loader@7.1.2: loader-utils "^1.0.2" mkdirp "^0.5.1" -babel-messages@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-7.0.0-beta.0.tgz#6df01296e49fc8fbd0637394326a167f36da817b" +babel-macros@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-macros/-/babel-macros-1.2.0.tgz#39e47ed6d286d4a98f1948d8bab45dac17e4e2d4" + dependencies: + cosmiconfig "3.1.0" babel-messages@^6.23.0: version "6.23.0" @@ -563,6 +620,18 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-emotion@^8.0.10: + version "8.0.10" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-8.0.10.tgz#9247856d60718f3a741a8487ef907d95a4f5b8a7" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.31" + babel-macros "^1.2.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + emotion-utils "^8.0.10" + source-map "^0.5.7" + touch "^1.0.0" + babel-plugin-istanbul@^4.0.0: version "4.1.5" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" @@ -576,11 +645,14 @@ babel-plugin-jest-hoist@^21.2.0: resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" babel-plugin-lodash@^3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.2.11.tgz#21c8fdec9fe1835efaa737873e3902bdd66d5701" + version "3.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.2.tgz#da3a5b49ba27447f54463f6c4fa81396ccdd463f" dependencies: + babel-helper-module-imports "^7.0.0-beta.3" + babel-types "^6.26.0" glob "^7.1.1" - lodash "^4.17.2" + lodash "^4.17.4" + require-package-name "^2.0.1" babel-plugin-module-resolver@2.7.1: version "2.7.1" @@ -614,7 +686,7 @@ babel-plugin-syntax-flow@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" -babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: +babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.18.0, babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" @@ -957,7 +1029,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.25.0, babel-runtime@^6.26.0: +babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -974,29 +1046,6 @@ babel-template@6.26.0, babel-template@^6.16.0, babel-template@^6.24.1, babel-tem babylon "^6.18.0" lodash "^4.17.4" -babel-template@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-beta.0.tgz#85083cf9e4395d5e48bf5154d7a8d6991cafecfb" - dependencies: - babel-traverse "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babylon "7.0.0-beta.22" - lodash "^4.2.0" - -babel-traverse@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-7.0.0-beta.0.tgz#da14be9b762f62a2f060db464eaafdd8cd072a41" - dependencies: - babel-code-frame "7.0.0-beta.0" - babel-helper-function-name "7.0.0-beta.0" - babel-messages "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babylon "7.0.0-beta.22" - debug "^3.0.1" - globals "^10.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" @@ -1020,9 +1069,9 @@ babel-types@6.23.0: lodash "^4.2.0" to-fast-properties "^1.0.1" -babel-types@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.0.tgz#eb8b6e556470e6dcc4aef982d79ad229469b5169" +babel-types@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.3.tgz#cd927ca70e0ae8ab05f4aab83778cfb3e6eb20b4" dependencies: esutils "^2.0.2" lodash "^4.2.0" @@ -1037,9 +1086,9 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.22: - version "7.0.0-beta.22" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.22.tgz#74f0ad82ed7c7c3cfeab74cf684f815104161b65" +babylon@7.0.0-beta.32, babylon@^7.0.0-beta.31: + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.32.tgz#e9033cb077f64d6895f4125968b37dc0a8c3bc6e" babylon@^6.18.0: version "6.18.0" @@ -1388,10 +1437,6 @@ circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" -classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" - cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -1451,8 +1496,8 @@ codeclimate-test-reporter@^0.5.0: request "~2.79.0" color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: color-name "^1.1.1" @@ -1645,7 +1690,7 @@ core-util-is@1.0.2, core-util-is@^1.0.1, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^3.1.0: +cosmiconfig@3.1.0, cosmiconfig@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" dependencies: @@ -2051,6 +2096,25 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" +emotion-server@^8.0.10: + version "8.0.10" + resolved "https://registry.yarnpkg.com/emotion-server/-/emotion-server-8.0.10.tgz#159e214421a1346efdbb87716d9839a057872cb5" + dependencies: + emotion-utils "^8.0.10" + +emotion-utils@^8.0.10: + version "8.0.10" + resolved "https://registry.yarnpkg.com/emotion-utils/-/emotion-utils-8.0.10.tgz#b42dd1386f07d74e45d5c78d7675f6c8f3165ae1" + +emotion@^8.0.10: + version "8.0.10" + resolved "https://registry.yarnpkg.com/emotion/-/emotion-8.0.10.tgz#ea10f25afdd2039205aa488844c7c25dd559b7cd" + dependencies: + babel-plugin-emotion "^8.0.10" + emotion-utils "^8.0.10" + stylis "^3.3.2" + stylis-rule-sheet "^0.0.5" + encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" @@ -2081,8 +2145,8 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" enzyme-adapter-react-16@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.4.tgz#67f898cc053452f5c786424e395fe0c63a0607fe" + version "1.1.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.0.tgz#86c5db7c10f0be6ec25d54ca41b59f2abb397cf4" dependencies: enzyme-adapter-utils "^1.1.0" lodash "^4.17.4" @@ -2106,18 +2170,19 @@ enzyme-to-json@^3.2.2: lodash "^4.17.4" enzyme@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.1.1.tgz#c6948dfccd055d75fbd8627ad1c96a024d0e247b" + version "3.2.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a" dependencies: cheerio "^1.0.0-rc.2" function.prototype.name "^1.0.3" + has "^1.0.1" is-subset "^0.1.1" lodash "^4.17.4" object-is "^1.0.1" object.assign "^4.0.4" object.entries "^1.0.4" object.values "^1.0.4" - raf "^3.3.2" + raf "^3.4.0" rst-selector-parser "^2.2.3" errno@^0.1.2, errno@^0.1.3, errno@^0.1.4: @@ -3040,6 +3105,14 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +grid-emotion@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/grid-emotion/-/grid-emotion-2.1.0.tgz#5e62a8468f9cff4e50680afb9be9322a68336385" + dependencies: + prop-types "^15.6.0" + styled-system "^1.0.2" + tag-hoc "^1.0.0" + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -3276,6 +3349,12 @@ ignore@^3.2.0, ignore@^3.2.6: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" +immutability-helper@^2.1.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.5.0.tgz#01ea7204334997c645bdfa7eb22e8b84c970946e" + dependencies: + invariant "^2.2.0" + import-from@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" @@ -4103,7 +4182,7 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lint-staged@5.0.0: +lint-staged@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-5.0.0.tgz#f1c670e03e2fdf3f3d0eb81f72d3bcf658770e54" dependencies: @@ -4300,6 +4379,10 @@ lodash.snakecase@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" +lodash.take@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.take/-/lodash.take-4.1.1.tgz#0b4146dcb7a70c6153495187fc10b12b71fefadf" + lodash.template@^4.0.2: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" @@ -4317,7 +4400,7 @@ lodash.upperfirst@^4.2.0: version "4.3.1" resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -5261,6 +5344,37 @@ pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +preact-compat@^3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/preact-compat/-/preact-compat-3.17.0.tgz#528cfdfc301190c1a0f47567336be1f4be0266b3" + dependencies: + immutability-helper "^2.1.2" + preact-render-to-string "^3.6.0" + preact-transition-group "^1.1.0" + prop-types "^15.5.8" + standalone-react-addons-pure-render-mixin "^0.1.1" + +preact-emotion@^8.0.10: + version "8.0.10" + resolved "https://registry.yarnpkg.com/preact-emotion/-/preact-emotion-8.0.10.tgz#e375602ac0f4aa5eff921e96f55a174e405d7792" + dependencies: + babel-plugin-emotion "^8.0.10" + emotion-utils "^8.0.10" + +preact-render-to-string@^3.6.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-3.7.0.tgz#7db4177454bc01395e0d01d6ac07bc5e838e31ee" + dependencies: + pretty-format "^3.5.1" + +preact-transition-group@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/preact-transition-group/-/preact-transition-group-1.1.1.tgz#f0a49327ea515ece34ea2be864c4a7d29e5d6e10" + +preact@^8.2.6: + version "8.2.6" + resolved "https://registry.yarnpkg.com/preact/-/preact-8.2.6.tgz#0028b426ef98fcca741a3c617ff5b813b9a947c7" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -5274,8 +5388,8 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" prettier@^1.7.0: - version "1.7.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.7.4.tgz#5e8624ae9363c80f95ec644584ecdf55d74f93fa" + version "1.8.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" pretty-format@^21.2.1: version "21.2.1" @@ -5284,6 +5398,10 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" +pretty-format@^3.5.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" + private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -5394,7 +5512,7 @@ querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -raf@^3.3.0, raf@^3.3.2, raf@^3.4.0: +raf@^3.3.0, raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" dependencies: @@ -5458,14 +5576,27 @@ react-deep-force-update@^2.1.1: resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909" react-dom@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.0.0.tgz#9cc3079c3dcd70d4c6e01b84aab2a7e34c303f58" + version "16.1.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.1.1.tgz#b2e331b6d752faf1a2d31399969399a41d8d45f8" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.0" +react-emotion@^8.0.10: + version "8.0.10" + resolved "https://registry.yarnpkg.com/react-emotion/-/react-emotion-8.0.10.tgz#452371f463cd5184f318d27860275564867b6693" + dependencies: + babel-plugin-emotion "^8.0.10" + emotion-utils "^8.0.10" + +react-event-timeline@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/react-event-timeline/-/react-event-timeline-1.4.0.tgz#3a2e2e779f45fe1190148b9b6d1c2c90167cdbab" + dependencies: + prop-types "^15.6.0" + react-headroom@^2.1.6: version "2.2.2" resolved "https://registry.yarnpkg.com/react-headroom/-/react-headroom-2.2.2.tgz#5ddea3bc87cd54be38f6f98c3fde4527e2a5fb0f" @@ -5501,15 +5632,16 @@ react-proxy@^3.0.0-alpha.0: lodash "^4.6.1" react-test-renderer@^16.0.0, react-test-renderer@^16.0.0-0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0.tgz#9fe7b8308f2f71f29fc356d4102086f131c9cb15" + version "16.1.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.1.1.tgz#a05184688d564be799f212449262525d1e350537" dependencies: fbjs "^0.8.16" object-assign "^4.1.1" + prop-types "^15.6.0" react@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.0.0.tgz#ce7df8f1941b036f02b2cca9dbd0cb1f0e855e2d" + version "16.1.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.1.1.tgz#d5c4ef795507e3012282dd51261ff9c0e824fe1f" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -5811,6 +5943,10 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-package-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + require-relative@^0.8.7: version "0.8.7" resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" @@ -5917,10 +6053,6 @@ safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -safe-buffer@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - sane@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56" @@ -5963,15 +6095,6 @@ semantic-release@^8.0.3: require-relative "^0.8.7" semver "^5.4.1" -semantic-ui-react@^0.76.0: - version "0.76.0" - resolved "https://registry.yarnpkg.com/semantic-ui-react/-/semantic-ui-react-0.76.0.tgz#39d8135416d787d904e0361399006fb8e0b24c8a" - dependencies: - babel-runtime "^6.25.0" - classnames "^2.2.5" - lodash "^4.17.4" - prop-types "^15.5.10" - semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -6128,7 +6251,7 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3, source-map@~0.5.6: +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -6204,6 +6327,10 @@ staged-git-files@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" +standalone-react-addons-pure-render-mixin@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/standalone-react-addons-pure-render-mixin/-/standalone-react-addons-pure-render-mixin-0.1.1.tgz#3c7409f4c79c40de9ac72c616cf679a994f37551" + "statuses@>= 1.2.1 < 2", "statuses@>= 1.3.1 < 2": version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -6341,14 +6468,28 @@ styled-jsx@2.1.1: stylis "3.3.2" stylis-rule-sheet "0.0.6" +styled-system@^1.0.2, styled-system@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-1.0.8.tgz#a5a08ab26a8cc27e7a22e743d623211b82482b5e" + dependencies: + prop-types "^15.6.0" + stylis-rule-sheet@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.6.tgz#059f89125a8e8db546e8adb0e07c4b4bcb81911b" +stylis-rule-sheet@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.5.tgz#ebae935cc1f6fb31b9b62dba47f2ea8b833dad9f" + stylis@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.3.2.tgz#95ef285836e98243f8b8f64a9a72706ea6c893ea" +stylis@^3.3.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.2.tgz#336c5e33a673c7111c10fa18f8b9e41e1772bd98" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -6388,6 +6529,10 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" +tag-hoc@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tag-hoc/-/tag-hoc-1.0.0.tgz#36ddc5f8831c40926ea520743cbddcc34f3c3ed9" + tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -6504,6 +6649,12 @@ touch@3.1.0: dependencies: nopt "~1.0.10" +touch@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de" + dependencies: + nopt "~1.0.10" + tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" @@ -6583,6 +6734,22 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +typescript-styled-plugin@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.2.0.tgz#9514de01a47bd20d3f157b0472c276a1db709f6e" + dependencies: + typescript-template-language-service-decorator "^1.0.0" + vscode-css-languageservice "^2.1.10" + vscode-languageserver-types "^3.4.0" + +typescript-template-language-service-decorator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-1.0.1.tgz#1d4cc508887ddeca44b64df0496bd37443efe471" + +typescript@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631" + ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" @@ -6732,6 +6899,21 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +vscode-css-languageservice@^2.1.10: + version "2.1.11" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-2.1.11.tgz#051ad9681d50ceee5f83a20142c8c659a8011ede" + dependencies: + vscode-languageserver-types "^3.4.0" + vscode-nls "^2.0.1" + +vscode-languageserver-types@^3.4.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374" + +vscode-nls@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da" + walk@2.3.9, walk@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/walk/-/walk-2.3.9.tgz#31b4db6678f2ae01c39ea9fb8725a9031e558a7b" @@ -6768,8 +6950,8 @@ webidl-conversions@^4.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" webpack-bundle-analyzer@^2.8.3: - version "2.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.0.tgz#b58bc34cc30b27ffdbaf3d00bf27aba6fa29c6e3" + version "2.9.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.1.tgz#c2c8e03e8e5768ed288b39ae9e27a8b8d7b9d476" dependencies: acorn "^5.1.1" chalk "^1.1.3" @@ -6781,7 +6963,7 @@ webpack-bundle-analyzer@^2.8.3: lodash "^4.17.4" mkdirp "^0.5.1" opener "^1.4.3" - ws "^2.3.1" + ws "^3.3.1" webpack-dev-middleware@1.12.0: version "1.12.0" @@ -6952,11 +7134,12 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" +ws@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.1.tgz#d97e34dee06a1190c61ac1e95f43cb60b78cf939" dependencies: - safe-buffer "~5.0.1" + async-limiter "~1.0.0" + safe-buffer "~5.1.0" ultron "~1.1.0" xdg-basedir@^3.0.0: From 53dd5268a472affbba96d6b980174efe5b180046 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Mon, 20 Nov 2017 22:00:34 +0530 Subject: [PATCH 03/45] allow emotion to hydrate ssr css --- components/common/header/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/common/header/index.js b/components/common/header/index.js index 6a8192b91..73d451384 100644 --- a/components/common/header/index.js +++ b/components/common/header/index.js @@ -3,6 +3,7 @@ import Router, { withRouter } from 'next/router'; import Headroom from 'react-headroom'; import NProgress from 'nprogress'; import Link from 'next/link'; +import { hydrate } from 'react-emotion'; import MetaInfo from '../../../config/meta-info'; import { Container } from '../../../utils/base.styles'; @@ -23,9 +24,9 @@ Router.onRouteChangeError = () => { // Adds server generated styles to emotion cache. // '__NEXT_DATA__.ids' is set in '_document.js' -// if (typeof window !== 'undefined' && window.__NEXT_DATA__) { -// hydrate(window.__NEXT_DATA__.ids); -// } +if (typeof window !== 'undefined' && window.__NEXT_DATA__) { + hydrate(window.__NEXT_DATA__.ids); +} class NavBar extends React.Component { state = { From 7ce12363084e19ea806a3230be8a7035b61f5725 Mon Sep 17 00:00:00 2001 From: Zubair Ahmed Date: Tue, 28 Nov 2017 18:35:17 +0530 Subject: [PATCH 04/45] V2 events (#111) * added jsx in same line prettier * added jsx in same line prettier pck.json * updated rm * link cnt in rm added * ghost button style made * made layout of event card in css grid * events card with icons completed * events component added in page event * converted events to class comp * changed a to div for card * reduced max line of prettier to 80 as in laptops it was a problem event card done except for time * events completed * shifted few image urls to urls.js * reverted back to 120 chars in line * event card with css flex * abstracted urls to another file * events card converted to emotion style * make events cards responsive * configure get-port npm package * minor changes in width * added load more * changes asper designer * decreased paddings * weight 500 to card events title --- .prettierrc | 3 +- README.md | 11 +- components/events/event-card.js | 123 ++++++++++++++++++++++ package.json | 29 ++++-- pages/events.js | 179 ++++++++++++++++++++++++++------ pages/index.js | 30 ++---- server.js | 36 ++++--- utils/base.styles.js | 22 +++- utils/urls.js | 15 +++ yarn.lock | 6 +- 10 files changed, 367 insertions(+), 87 deletions(-) diff --git a/.prettierrc b/.prettierrc index aa41fe5d7..2f0bc5363 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,5 +2,6 @@ "printWidth": 120, "semi": true, "trailingComma": "es5", - "singleQuote": true + "singleQuote": true, + "jsxBracketSameLine": true } diff --git a/README.md b/README.md index 07212ca24..340c5697a 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,16 @@ This project mainly uses -- [Next.js](https://github.com/zeit/next.js/) -- [emotion](https://emotion.sh) As css-in-js library +* [ReactJS](https://reactjs.org/) - A declarative, efficient, and flexible JavaScript library for building user + interfaces. +* [Next.js](https://github.com/zeit/next.js/) - A minimalistic framework for server-rendered React applications. +* [emotion](https://emotion.sh) - A high performance, lightweight css-in-js library. ### [Join our community here](https://www.coderplex.org) ## Contributing -We welcome pull requests from hackerspace members (our students) and seasoned JavaScript developers alike! Please follow [these steps](CONTRIBUTING.md) to contribute. +We welcome pull requests from beginners and seasoned javaScript developers alike!. You can work on open issues, fix bugs +and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/v2/CONTRIBUTING.md) for +hassel free contribution.
This project follows ✨ +[All Contributors](https://github.com/kentcdodds/all-contributors) ✨ specifications to recognize all contributors. diff --git a/components/events/event-card.js b/components/events/event-card.js index e69de29bb..5e19a5c89 100644 --- a/components/events/event-card.js +++ b/components/events/event-card.js @@ -0,0 +1,123 @@ +import React from 'react'; +import styled from 'react-emotion'; +import { space, fontSize } from 'styled-system'; +import { Flex, Box } from 'grid-emotion'; +import TimeIcon from 'react-icons/lib/md/access-time'; +import format from 'date-fns/format'; +import LocationIcon from 'react-icons/lib/md/location-on'; +import AttendeesIcon from 'react-icons/lib/md/people'; +import TicketIcon from 'react-icons/lib/md/exit-to-app'; +import StreamIcon from 'react-icons/lib/md/desktop-mac'; + +import { breakpoints, Button, graySecondary } from '../../utils/base.styles'; +import truncateString from '../../utils'; + +const Card = styled(Flex)` + ${space}; + background: #fff; + border: 1px solid ${graySecondary}; + min-height: 120px; + color: #8393a7; + & .eventPhoto { + height: 120px; + width: 100%; + ${breakpoints.sm} { + object-fit: cover; + height: 200px; + } + ${breakpoints.xs} { + height: 200px; + object-fit: cover; + } + } + & .eventDetails { + min-height: 120px; + } + & .secondaryText { + ${fontSize}; + color: #8393a7; + } + & .icons { + font-size: 1.2rem; + margin-right: 0.25rem; + color: #8393a7; + } + & .rsvp { + text-align: right; + ${breakpoints.sm} { + text-align: left; + & > * { + width: 100%; + display: block; + text-align: center; + margin: 0; + } + } + ${breakpoints.xs} { + text-align: left; + & > * { + width: 100%; + display: block; + text-align: center; + margin: 0; + } + } + } +`; + +const CardTitle = styled.h3` + ${space}; + color: #374355; + font-weight: 500; + border-bottom: 1px solid ${graySecondary}; +`; + +export default props => ( + + + + + + + + {truncateString(props.name, 64)} + + + + {truncateString(props.location, 55)} + + + + + + + {props.tense === 'past' + ? format(props.time, "ddd MMM Do 'YY") + : format(props.time, "ddd MMM Do 'YY, h:mm A")} + + + + + {props.tense === 'past' ? `${props.attendees} attended` : `${props.attendees} attending`} + + + {props.online ? : } + {props.online ? 'Free session' : 'Free entry'} + + + + + + + + + +); diff --git a/package.json b/package.json index de6fa1dce..fd47f7fff 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "main": "index.js", "scripts": { "test": "xo && jest", - "lint": - "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo", + "lint": "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -16,25 +15,38 @@ }, "xo": { "parser": "babel-eslint", - "extends": ["prettier", "prettier/react", "plugin:react/recommended"], - "env": ["browser", "node"], + "extends": [ + "prettier", + "prettier/react", + "plugin:react/recommended" + ], + "env": [ + "browser", + "node" + ], "rules": { "linebreak-style": 0, "react/display-name": 0, "react/prop-types": 0 }, "space:": 2, - "ignores": ["next.config.js"], + "ignores": [ + "next.config.js" + ], "overrides": [ { "files": "**/__tests__/*.test.js", - "globals": ["describe", "it", "expect"] + "globals": [ + "describe", + "it", + "expect" + ] } ] }, "lint-staged": { "*.js": [ - "prettier --write --single-quote --print-width=120 --trailing-comma=es5", + "prettier --write --single-quote --print-width=120 --trailing-comma=es5 --jsx-bracket-same-line", "xo", "jest --findRelatedTests", "git add" @@ -42,9 +54,10 @@ }, "dependencies": { "babel-plugin-emotion": "^8.0.10", - "date-fns": "1.29.0", + "date-fns": "^1.29.0", "emotion": "^8.0.10", "emotion-server": "^8.0.10", + "get-port": "^3.2.0", "grid-emotion": "^2.1.0", "isomorphic-unfetch": "2.0.0", "lodash.take": "^4.1.1", diff --git a/pages/events.js b/pages/events.js index 4f4cfeb8f..a70a86eaa 100644 --- a/pages/events.js +++ b/pages/events.js @@ -1,44 +1,163 @@ import React from 'react'; +import fetch from 'isomorphic-unfetch'; import { Flex, Box } from 'grid-emotion'; import styled from 'react-emotion'; import { space } from 'styled-system'; import Layout from '../components/common/layout'; import BannerSection from '../components/common/banner'; -import { Container, Title, SubTitle } from '../utils/base.styles'; +import { Container, SubTitle, Button } from '../utils/base.styles'; +import { baseEventsURL, futureEventsURL, pastEventsURL, imagePlaceholderURL } from '../utils/urls'; +import EventCard from '../components/events/event-card'; const EventsSection = styled.section` ${space}; background: #fff; position: relative; + & .loadmore_div { + text-align: center; + margin-top: 2rem; + margin-bottom: 0.8rem; + } + & .event_type_title { + color: #374355; + font-weight: bold; + } `; -export default () => ( - - - - - - - - Upcoming Events - - - No events as of now, check back later - - - - - - - Past Events - - - Loading... - - - - - - -); +export default class Events extends React.Component { + state = { + pastEvents: [], + pastEventsLoadLimit: 2, + futureEvents: [], + futureEventsLoadLimit: 2, + fetchError: null, + loading: true, + }; + + async componentDidMount() { + try { + let pastEvents; + let futureEvents; + const pastEventsResponse = await fetch(`${baseEventsURL}${pastEventsURL}`); + if (pastEventsResponse.ok) { + pastEvents = await pastEventsResponse.json(); + } else { + throw new Error('Failed to Retrieve past events'); + } + const futureEventsResponse = await fetch(`${baseEventsURL}${futureEventsURL}`); + if (futureEventsResponse.ok) { + futureEvents = await futureEventsResponse.json(); + } else { + throw new Error('Failed to retieve future events'); + } + await this.setState({ + pastEvents, + futureEvents, + fetchError: null, + loading: false, + }); + } catch (err) { + console.log(err); + await this.setState({ + pastEvents: null, + futureEvents: null, + fetchError: err.message, + loading: false, + }); + } + } + + renderEvents(events, loadLimit) { + if (this.state.loading) { + return ( + + Loading.. + + ); + } else if (events.length === 0) { + return ( + + No upcoming events yet, check back later + + ); + } else if (events === null) { + return ( + + Oops! somethings went wrong while fetching the events + + ); + } + return ( +

+ ); + } + + renderLoadMoreButton(eventsTotalLength, loadLimit, isPastEvent) { + return loadLimit >= eventsTotalLength ? null : ( +
+ +
+ ); + } + + loadMore(isPastEvent) { + return isPastEvent + ? this.setState({ pastEventsLoadLimit: this.state.pastEventsLoadLimit + 5 }) + : this.setState({ futureEventsLoadLimit: this.state.futureEventsLoadLimit + 5 }); + } + + render() { + return ( + + + + + + +

+ Upcoming Events +

+ {this.renderEvents(this.state.futureEvents, this.state.futureEventsLoadLimit)} + {this.renderLoadMoreButton(this.state.futureEvents.length, this.state.futureEventsLoadLimit, false)} +
+
+ + +

+ Recent Events +

+ {this.renderEvents(this.state.pastEvents, this.state.pastEventsLoadLimit)} + {this.renderLoadMoreButton(this.state.pastEvents.length, this.state.pastEventsLoadLimit, true)} +
+
+
+
+
+ ); + } +} diff --git a/pages/index.js b/pages/index.js index 9f16d170a..8e47366fc 100644 --- a/pages/index.js +++ b/pages/index.js @@ -9,13 +9,14 @@ import Hide, { Container, Button, Title, SubTitle, breakpoints } from '../utils/ import { listOfSubjects } from '../utils/mock-data'; import Layout from '../components/common/layout'; import SubjectCard from '../components/learn/subject-card'; +import { heroPatternURL, heroBannerURL, spaceCoverURL, eventsCoverURL } from '../utils/urls'; const HeroSection = styled.section` ${space}; background-color: #fff; position: relative; text-align: center; - background-image: url('https://res.cloudinary.com/coderplex/image/upload/v1510788480/website__assets/pattern.png'); + background-image: url(${heroPatternURL}); & h1 { font-size: 2.5rem; font-weight: 300; @@ -126,10 +127,7 @@ export default () => ( - words + words

On a mission to improve the state of tech across India

@@ -179,8 +177,7 @@ export default () => ( className="box" width={[1]} pt={[2, 3]} - pb={[4, 4, 0]} - > + pb={[4, 4, 0]}> diff --git a/server.js b/server.js index e50f94b16..8c9f73475 100644 --- a/server.js +++ b/server.js @@ -3,29 +3,31 @@ const { parse } = require('url'); const next = require('next'); const pathMatch = require('path-match'); const opn = require('opn'); +const getPort = require('get-port'); -const port = parseInt(process.env.PORT, 10) || 3000; const dev = process.env.NODE_ENV !== 'production'; const app = next({ dev }); const handle = app.getRequestHandler(); const route = pathMatch(); const match = route('/learn/:id'); -app.prepare().then(() => { - createServer((req, res) => { - const { pathname, query } = parse(req.url, true); - const params = match(pathname); - if (params === false) { - handle(req, res); - return; - } - // Assigning `query` into the params means that we still - // get the query string passed to our application - // i.e. /blog/foo?show-comments=true - app.render(req, res, '/learn/subject', Object.assign(params, query)); - }).listen(port, err => { - if (err) throw err; - console.log(`>> App running on http://localhost:${port}`); - opn(`http://localhost:${port}`); +getPort({ port: 3000 }).then(port => { + app.prepare().then(() => { + createServer((req, res) => { + const { pathname, query } = parse(req.url, true); + const params = match(pathname); + if (params === false) { + handle(req, res); + return; + } + // Assigning `query` into the params means that we still + // get the query string passed to our application + // i.e. /blog/foo?show-comments=true + app.render(req, res, '/learn/subject', Object.assign(params, query)); + }).listen(port, err => { + if (err) throw err; + console.log(`>> App running on http://localhost:${port}`); + opn(`http://localhost:${port}`); + }); }); }); diff --git a/utils/base.styles.js b/utils/base.styles.js index 6d613a889..6fab0e84d 100644 --- a/utils/base.styles.js +++ b/utils/base.styles.js @@ -1,5 +1,11 @@ import styled, { css } from 'react-emotion'; +export const purplePrimary = '#7657fb'; +export const purpleSecondary = '#6f19ed'; +export const whiteFull = '#ffffff'; +export const blackPure = '#000000'; +export const graySecondary = '#ddd'; + export const breakpoints = { xs: '@media screen and (max-width: 40em)', sm: '@media screen and (min-width: 40em) and (max-width: 52em)', @@ -37,6 +43,7 @@ export const baseButton = css` padding: 0.2rem 1rem; color: #fff; text-decoration: none; + transition: all 0.25s; &:hover { background: #6f19ed; font-weight: normal; @@ -45,15 +52,20 @@ export const baseButton = css` export const Button = styled.a` ${baseButton}; - background: ${props => (props.inverted ? '#7657fb' : '#fff')} - color: ${props => (props.inverted ? '#fff' : '#222')} - padding: ${props => (props.large ? '0.8rem 2.25rem' : props.medium ? '0.6rem 1.2rem' : '0.2rem 1rem')}; - font-size: ${props => (props.large ? '1.8rem' : props.medium ? '1rem' : '1rem')} + background: ${props => (props.inverted ? '#7657fb' : props.ghost ? '#fff' : '#fff')} + color: ${props => (props.inverted ? '#fff' : props.ghost ? purpleSecondary : '#222')} + padding: ${props => + props.large ? '0.8rem 2.25rem' : props.medium ? '0.6rem 1.2rem' : props.small ? '0.3rem 1.1rem' : '0.2rem 1rem'}; + font-size: ${props => (props.large ? '1.8rem' : props.medium ? '1rem' : '0.8rem')}; + font-weight: ${props => (props.ghost ? 600 : 300)}; + border: ${props => (props.ghost ? `2px solid ${purpleSecondary}` : 'none')}; cursor: pointer; user-select: none; -webkit-touch-callout: none; &:hover { - background: ${props => (props.inverted ? '#6f19ed' : '#eee')}; + font-weight: ${props => (props.ghost ? 600 : 300)}; + background: ${props => (props.inverted ? purpleSecondary : props.ghost ? purpleSecondary : '#eee')}; + color: ${props => (props.inverted ? '#fff' : props.ghost ? whiteFull : '#222')} } `; diff --git a/utils/urls.js b/utils/urls.js index 5e52c6447..9624e91e5 100644 --- a/utils/urls.js +++ b/utils/urls.js @@ -7,3 +7,18 @@ export const pastEventsURL = '/events/past'; export const indexPageEventURL = '/events'; export const subscribeURL = '/subscribe'; + +export const imagePlaceholderURL = + 'http://res.cloudinary.com/coderplex/image/upload/c_scale,h_400,w_600/v1511345686/website__assets/placeholder.png'; + +export const heroPatternURL = + 'https://res.cloudinary.com/coderplex/image/upload/v1510788480/website__assets/pattern.png'; + +export const heroBannerURL = + 'https://res.cloudinary.com/coderplex/image/upload/c_scale,w_1024/v1510788480/website__assets/banner1280x370.png'; + +export const spaceCoverURL = + 'https://res.cloudinary.com/coderplex/image/upload/c_scale,w_450/v1510788480/website__assets/space.png'; + +export const eventsCoverURL = + 'https://res.cloudinary.com/coderplex/image/upload/c_scale,w_348/v1510788480/website__assets/events.png'; diff --git a/yarn.lock b/yarn.lock index 3622626a9..2d5b9553c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1833,7 +1833,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-fns@1.29.0, date-fns@^1.27.2: +date-fns@^1.27.2, date-fns@^1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" @@ -2912,6 +2912,10 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.0.0" +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + get-set-props@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-set-props/-/get-set-props-0.1.0.tgz#998475c178445686d0b32246da5df8dbcfbe8ea3" From cc899fbaf86216f10f85c13df058f3b2860d1170 Mon Sep 17 00:00:00 2001 From: Zubair Ahmed Date: Tue, 28 Nov 2017 19:02:41 +0530 Subject: [PATCH 05/45] first time pull req temp --- PULL_REQUEST_TEMPLATE.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 PULL_REQUEST_TEMPLATE.md diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..184d6ea56 --- /dev/null +++ b/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1 @@ +will work From 7468d8b3a4284c1829bb191bc34ce0c3dcb9e45a Mon Sep 17 00:00:00 2001 From: z Date: Tue, 28 Nov 2017 19:10:23 +0530 Subject: [PATCH 06/45] moved docs to .github and added new template --- CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md | 0 CONTRIBUTING.md => .github/CONTRIBUTING.md | 0 .github/ISSUE_TEMPLATE.md | 1 + PULL_REQUEST_TEMPLATE.md => .github/PULL_REQUEST_TEMPLATE.md | 0 4 files changed, 1 insertion(+) rename CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md (100%) rename CONTRIBUTING.md => .github/CONTRIBUTING.md (100%) create mode 100644 .github/ISSUE_TEMPLATE.md rename PULL_REQUEST_TEMPLATE.md => .github/PULL_REQUEST_TEMPLATE.md (100%) diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to .github/CODE_OF_CONDUCT.md diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to .github/CONTRIBUTING.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..d5f7fc3f7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1 @@ +added diff --git a/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from PULL_REQUEST_TEMPLATE.md rename to .github/PULL_REQUEST_TEMPLATE.md From 2231fd7486a1f76a6c173eedc5b7267b0a4315e2 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 19:54:58 +0530 Subject: [PATCH 07/45] fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 340c5697a..3ed2f4d19 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,6 @@ This project mainly uses ## Contributing We welcome pull requests from beginners and seasoned javaScript developers alike!. You can work on open issues, fix bugs -and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/v2/CONTRIBUTING.md) for +and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md) for hassel free contribution.
This project follows ✨ [All Contributors](https://github.com/kentcdodds/all-contributors) ✨ specifications to recognize all contributors. From 2e5c26286b4f2a64569d75e01cb53ad1cdc391fb Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 19:56:03 +0530 Subject: [PATCH 08/45] fix link --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ca857b5a6..6747d6ec2 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -9,7 +9,7 @@ Coderplex web application comprises of two repositories : Both of them are under very active development. This document provides non exhaustive guidelines for contributing to this repository. ## Code of Conduct -Coderplex has adopted [Contributor Covenant](https://github.com/coderplex/coderplex/blob/docs-update/CODE_OF_CONDUCT.md) that we expect project participants to adhere to. +Coderplex has adopted [Contributor Covenant](https://github.com/coderplex/coderplex/blob/develop/.github/CODE_OF_CONDUCT.md) that we expect project participants to adhere to. ## Open Development All work related to the application takes place on Github itself. We use [Issues](https://github.com/coderplex/coderplex/issues) to track bugs, discuss ideas and to engage open source contributors. [Projects](https://github.com/coderplex/coderplex/projects) are used to keep track of everything and is our project management tool. We maintain [Wiki](https://github.com/coderplex/coderplex/wiki) for structuring our long term thoughts. Both core team members and contributors sends a pull request which goes through the same review process. Whole process is as transparent as it can be and we strive to keep it that way. From 64a0c28853b3d93422e2a05c7d2d9502d7671460 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 20:03:59 +0530 Subject: [PATCH 09/45] Update PR template --- .github/PULL_REQUEST_TEMPLATE.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 184d6ea56..c3175a08e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1 +1,10 @@ -will work +Fixes + +# Changes proposed in this PR +- +- + + + + +- [ ] I have tested responsiveness of the UI by checking on max devices using this tool http://quirktools.com/screenfly/ From 915009eeeae6c56c9d0b71eb0c815da65221e56b Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 20:08:06 +0530 Subject: [PATCH 10/45] Update Issue template --- .github/ISSUE_TEMPLATE.md | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index d5f7fc3f7..3b3c67a90 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1 +1,33 @@ -added + + + + + +- [ ] I have searched the [issues](https://github.com/coderplex/coderplex/issues) of this repository and believe that this is not a duplicate. + +## Expected Behavior + + + +## Current Behavior + + + +## Steps to Reproduce (for bugs) + + +1. +2. +3. +4. + +## Your Environment + +| Tech | Version | +|---------|---------| +| OS | | +| browser | | +| etc | | From 39249f01efef71b064df3ec2aa61b1275a11ae81 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 20:10:36 +0530 Subject: [PATCH 11/45] Update PR template --- .github/PULL_REQUEST_TEMPLATE.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c3175a08e..61c6ae09d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,10 +1,18 @@ -Fixes + -# Changes proposed in this PR + + + +Fixes + +## Changes proposed in this PR - - + - - [ ] I have tested responsiveness of the UI by checking on max devices using this tool http://quirktools.com/screenfly/ From 05d0c914bdff8c31438769d2c2e61dcfa37f58d7 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 20:19:04 +0530 Subject: [PATCH 12/45] update contributing.md --- .github/CONTRIBUTING.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6747d6ec2..dc8cb27e4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -64,19 +64,20 @@ We welcome pull requests from beginners and seasoned javaScript developers alike #### Running Locally -1. Clone repository +1. Fork the [repository](https://github.com/coderplex/coderplex). +1. Then clone your forked repository ```bash - $ git clone https://github.com/coderplex/coderplex.git + $ git clone ``` -2. Move to the repository root folder +1. Move to the repository root folder ```bash $ cd coderplex ``` -3. Install dependencies +1. Install dependencies ```bash $ yarn ``` -4. Start the development server +1. Start the development server ```bash $ yarn dev ``` @@ -84,22 +85,21 @@ We welcome pull requests from beginners and seasoned javaScript developers alike > You may get this [error]() if any other app is already running the above port. #### Before submitting: -1. Fork the [repository](https://github.com/coderplex/coderplex). -2. From your fork, create a [branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) and name it. eg. `typo-in-readme` -3. If you’ve fixed a bug or added code that should be tested, add tests! -4. Ensure that all test pass +1. From your fork, create a [branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) and name it. eg. `typo-in-readme` +1. If you’ve fixed a bug or added code that should be tested, add tests! +1. Ensure that all test pass ```bash $ yarn test ``` -5. Run code formatters +1. Run code formatters ```bash $ yarn lint ``` -6. Add and commit your code. Please give meaning full commit messages. -7. Pull latest code from [upstream repository's ](https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/)`develop`, if in case anything new were merged while you were working on your fork. -8. Push the code to your fork. -9. Raise the pull request from your created branch to `develop` branch of coderplex. [why develop instead of master branch?]() -10. Take some time to give a brief description of the work you have done. +1. Add and commit your code. Please give meaning full commit messages. +1. Pull latest code from [upstream repository's ](https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/)`develop`, if in case anything new were merged while you were working on your fork. +1. Push the code to your fork. +1. Raise the pull request from your created branch to `develop` branch of coderplex. [why develop instead of master branch?]() +1. Take some time to give a brief description of the work you have done. #### After submitting 1. Wait for all checks to pass in below section. From e46b7e994704d72e1e3e8d48453e162df90e8894 Mon Sep 17 00:00:00 2001 From: z Date: Tue, 28 Nov 2017 21:00:52 +0530 Subject: [PATCH 13/45] edited pull req --- .github/PULL_REQUEST_TEMPLATE.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 61c6ae09d..50275d3dd 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,13 +6,18 @@ --> -Fixes +Fixes ## Changes proposed in this PR - - - +### Checklist for this PR + +- [ ] I have read [contributing guidelines](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md). +- [ ] I executed `yarn lint` locally to format my code. +- [ ] All tests `yarn test` ran successfully. +- [ ] Pull request is towards `develop` branch. -- [ ] I have tested responsiveness of the UI by checking on max devices using this tool http://quirktools.com/screenfly/ +- [ ] I have tested responsiveness of the UI by checking on max devices using [ScreenFly](http://quirktools.com/screenfly/) From b3910e8abd58ab7541d38fad104abbfc156a7fd7 Mon Sep 17 00:00:00 2001 From: z Date: Tue, 28 Nov 2017 21:03:59 +0530 Subject: [PATCH 14/45] under wip --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ed2f4d19..22c79487b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Coderplex Website [Work In Progress] +# Coderplex Website [![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) @@ -6,6 +6,8 @@ [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) +>:construction: under active development + ## About This project mainly uses From f8b9364df259b96965620bc891051046b68566c5 Mon Sep 17 00:00:00 2001 From: z Date: Tue, 28 Nov 2017 21:06:48 +0530 Subject: [PATCH 15/45] moved join to top --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 22c79487b..32dde7058 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) +##### Join our community here at https://www.coderplex.org >:construction: under active development ## About @@ -17,7 +18,6 @@ This project mainly uses * [Next.js](https://github.com/zeit/next.js/) - A minimalistic framework for server-rendered React applications. * [emotion](https://emotion.sh) - A high performance, lightweight css-in-js library. -### [Join our community here](https://www.coderplex.org) ## Contributing From 49896fc5ebf7b273c2348f850213689886d7ef41 Mon Sep 17 00:00:00 2001 From: Mazin Majid <32811957+majidmazin@users.noreply.github.com> Date: Tue, 28 Nov 2017 21:53:36 +0530 Subject: [PATCH 16/45] add index (#112) --- .github/CONTRIBUTING.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index dc8cb27e4..050536563 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -6,7 +6,26 @@ Coderplex web application comprises of two repositories : - [Coderplex-Backend](https://github.com/coderplex/coderplex-backend) : Backend of the application -Both of them are under very active development. This document provides non exhaustive guidelines for contributing to this repository. +## Index +1. [Code of Conduct](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#code-of-conduct) +2. [Open Development](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#open-development) +3. [Branching Model](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#branching-model) +4. [Development Workflow](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#development-workflow) + 1. [Work on Issues](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#work-on-issues) + 2. [Proposing a Change](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#proposing-a-change) + 3. [Prerequisites](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#prerequisites) + 4. [Sending a Pull Request](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#sending-a-pull-request) + 1. [Running Locally](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#running-locally) + 2. [Before submitting](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#before-submitting) + 3. [After submitting](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#after-submitting) + 1. [Received a review request](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#received-a-review-request) + 5. [How to get in touch](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#how-to-get-in-touch) +5. [Appendix](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#appendix) + 1. [Node Version Manager](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#1-node-version-manager) + 1. [Linux & macOS](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#nvm-for-linux--osx) + 2. [Windows](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#nvm-windows-for-windows) + 2. [Local host occupied](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#2-local-host-occupied) + ## Code of Conduct Coderplex has adopted [Contributor Covenant](https://github.com/coderplex/coderplex/blob/develop/.github/CODE_OF_CONDUCT.md) that we expect project participants to adhere to. @@ -116,12 +135,11 @@ We welcome pull requests from beginners and seasoned javaScript developers alike - Tweet core team members : - Vinay Puppal [@VinayPuppal](https://twitter.com/vinaypuppal) - Md-ZubairAhmed [@Md_ZubairAhmed](https://twitter.com/Md_ZubairAhmed) - - P Bhanu Teja [@pbteja1998](https://twitter.com/pbteja1998) ## Appendix ##### 1. Node Version Manager -###### [nvm](https://github.com/creationix/nvm) for Linux & OSX +###### [nvm](https://github.com/creationix/nvm) for Linux & macOS ```bash Installation $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash From 77c24cf76a93199314d6460422d5b17679ade924 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 23:21:46 +0530 Subject: [PATCH 17/45] set doctoc and prettier for md files --- .prettierignore | 1 + .prettierrc | 3 +- package.json | 29 +++---- yarn.lock | 226 ++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 234 insertions(+), 25 deletions(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..466e24805 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +out/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 2f0bc5363..03b0d59fb 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,5 +3,6 @@ "semi": true, "trailingComma": "es5", "singleQuote": true, - "jsxBracketSameLine": true + "jsxBracketSameLine": true, + "proseWrap": false } diff --git a/package.json b/package.json index fd47f7fff..96f0fdfa8 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "index.js", "scripts": { "test": "xo && jest", - "lint": "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo", + "lint": + "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -15,32 +16,19 @@ }, "xo": { "parser": "babel-eslint", - "extends": [ - "prettier", - "prettier/react", - "plugin:react/recommended" - ], - "env": [ - "browser", - "node" - ], + "extends": ["prettier", "prettier/react", "plugin:react/recommended"], + "env": ["browser", "node"], "rules": { "linebreak-style": 0, "react/display-name": 0, "react/prop-types": 0 }, "space:": 2, - "ignores": [ - "next.config.js" - ], + "ignores": ["next.config.js"], "overrides": [ { "files": "**/__tests__/*.test.js", - "globals": [ - "describe", - "it", - "expect" - ] + "globals": ["describe", "it", "expect"] } ] }, @@ -50,7 +38,9 @@ "xo", "jest --findRelatedTests", "git add" - ] + ], + "*.md": ["prettier", "git add"], + ".github/CONTRIBUTING.md": ["doctoc", "git add"] }, "dependencies": { "babel-plugin-emotion": "^8.0.10", @@ -81,6 +71,7 @@ "babel-eslint": "^8.0.1", "babel-plugin-lodash": "^3.2.11", "cross-env": "^5.0.2", + "doctoc": "^1.3.0", "enzyme": "^3.1.1", "enzyme-adapter-react-16": "^1.0.4", "enzyme-to-json": "^3.2.2", diff --git a/yarn.lock b/yarn.lock index 2d5b9553c..6847aff94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -212,6 +212,12 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +anchor-markdown-header@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz#045063d76e6a1f9cd327a57a0126aa0fdec371a7" + dependencies: + emoji-regex "~6.1.0" + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -1094,6 +1100,10 @@ babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +bail@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1169,6 +1179,10 @@ boom@5.x.x: dependencies: hoek "4.x.x" +boundary@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" + boxen@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.2.tgz#3f1d4032c30ffea9d4b02c322eaf2ea741dcbce5" @@ -1371,6 +1385,10 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" +ccount@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.2.tgz#53b6a2f815bb77b9c2871f7b9a72c3a25f1d8e89" + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -1396,6 +1414,22 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +character-entities-html4@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" + +character-entities-legacy@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" + +character-entities@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.1.tgz#f76871be5ef66ddb7f8f8e3478ecc374c27d6dca" + +character-reference-invalid@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" + cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" @@ -1495,6 +1529,10 @@ codeclimate-test-reporter@^0.5.0: lcov-parse "0.0.10" request "~2.79.0" +collapse-white-space@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" + color-convert@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" @@ -1848,7 +1886,7 @@ dateformat@^1.0.11, dateformat@^1.0.12: get-stdin "^4.0.1" meow "^3.3.0" -debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.4.1, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.4.1, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -1977,6 +2015,17 @@ discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" +doctoc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.3.0.tgz#7f0839851dd58c808a2cae55d9504e012d08ee30" + dependencies: + anchor-markdown-header "^0.5.5" + htmlparser2 "~3.9.2" + markdown-to-ast "~3.4.0" + minimist "~1.2.0" + underscore "~1.8.3" + update-section "^0.3.0" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -2092,6 +2141,10 @@ emitter-mixin@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/emitter-mixin/-/emitter-mixin-0.0.3.tgz#5948cb286f2e48edc3b251a7cfc1f7883396d65c" +emoji-regex@~6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -2619,7 +2672,7 @@ express@^4.15.2: utils-merge "1.0.1" vary "~1.1.2" -extend@~3.0.0, extend@~3.0.1: +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3275,7 +3328,7 @@ htmlescape@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" -htmlparser2@^3.9.1: +htmlparser2@^3.9.1, htmlparser2@~3.9.2: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" dependencies: @@ -3450,6 +3503,17 @@ irregular-plurals@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766" +is-alphabetical@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" + +is-alphanumerical@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -3484,6 +3548,10 @@ is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" +is-decimal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82" + is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" @@ -3549,6 +3617,10 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" + is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -4431,6 +4503,10 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" +longest-streak@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-1.0.0.tgz#d06597c4d4c31b52ccb1f5d8f8fe7148eafd6965" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -4475,6 +4551,19 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +markdown-table@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-0.4.0.tgz#890c2c1b3bfe83fb00e4129b8e4cfe645270f9d1" + +markdown-to-ast@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz#0e2cba81390b0549a9153ec3b0d915b61c164be7" + dependencies: + debug "^2.1.3" + remark "^5.0.1" + structured-source "^3.0.2" + traverse "^0.6.6" + marked@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" @@ -4616,7 +4705,7 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -5170,6 +5259,17 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" +parse-entities@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-github-repo-url@^1.3.0, parse-github-repo-url@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" @@ -5812,6 +5912,41 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +remark-parse@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-1.1.0.tgz#c3ca10f9a8da04615c28f09aa4e304510526ec21" + dependencies: + collapse-white-space "^1.0.0" + extend "^3.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + +remark-stringify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-1.1.0.tgz#a7105e25b9ee2bf9a49b75d2c423f11b06ae2092" + dependencies: + ccount "^1.0.0" + extend "^3.0.0" + longest-streak "^1.0.0" + markdown-table "^0.4.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + stringify-entities "^1.0.1" + unherit "^1.0.4" + +remark@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-5.1.0.tgz#cb463bd3dbcb4b99794935eee1cf71d7a8e3068c" + dependencies: + remark-parse "^1.1.0" + remark-stringify "^1.1.0" + unified "^4.1.1" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -5820,7 +5955,7 @@ repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^1.5.2: +repeat-string@^1.5.2, repeat-string@^1.5.4: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -6408,6 +6543,15 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" +stringify-entities@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.1.tgz#b150ec2d72ac4c1b5f324b51fb6b28c9cdff058c" + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + stringify-object@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" @@ -6460,6 +6604,12 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +structured-source@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" + dependencies: + boundary "^1.0.1" + styled-jsx@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-2.1.1.tgz#e7481c7554df50d605cdc84a4e53c58fec3449b5" @@ -6669,6 +6819,10 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + travis-ci@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/travis-ci/-/travis-ci-2.1.1.tgz#98696265af827ae3576f31aa06d876e74b4b082e" @@ -6699,6 +6853,18 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +trim-trailing-lines@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz#7aefbb7808df9d669f6da2e438cac8c46ada7684" + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + +trough@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" + tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" @@ -6799,16 +6965,54 @@ underscore@~1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + unfetch@3.0.0, unfetch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-3.0.0.tgz#8d1e0513a4ecd0e5ff2d41a6ba77771aae8b6482" +unherit@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + +unified@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/unified/-/unified-4.2.1.tgz#76ff43aa8da430f6e7e4a55c84ebac2ad2cfcd2e" + dependencies: + bail "^1.0.0" + extend "^3.0.0" + has "^1.0.1" + once "^1.3.3" + trough "^1.0.0" + vfile "^1.0.0" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" dependencies: crypto-random-string "^1.0.0" +unist-util-is@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" + +unist-util-remove-position@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz#5a85c1555fc1ba0c101b86707d15e50fa4c871bb" + dependencies: + unist-util-visit "^1.1.0" + +unist-util-visit@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.2.0.tgz#9dc78d1f95cd242e865f7f93f327d3296bb9a718" + dependencies: + unist-util-is "^2.1.1" + universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" @@ -6835,6 +7039,10 @@ update-notifier@^2.1.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" +update-section@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -6897,6 +7105,14 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-location@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.2.tgz#d3675c59c877498e492b4756ff65e4af1a752255" + +vfile@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-1.4.0.tgz#c0fd6fa484f8debdb771f68c31ed75d88da97fe7" + vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" From a78be21c465f47c4f72c8f10f998b408e20e49d9 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 23:32:16 +0530 Subject: [PATCH 18/45] setup markdownlinter --- .github/CONTRIBUTING.md | 211 ++++++++++++++++++++++------------------ .markdownlint.json | 5 + README.md | 22 ++--- package.json | 7 +- yarn.lock | 74 +++++++++++++- 5 files changed, 206 insertions(+), 113 deletions(-) create mode 100644 .markdownlint.json diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 050536563..2d17c4c00 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,81 +1,91 @@ + + + + +- [How to Contribute](#how-to-contribute) + - [Code of Conduct](#code-of-conduct) + - [Open Development](#open-development) + - [Branching Model](#branching-model) + - [Development Workflow](#development-workflow) + - [Work on Issues](#work-on-issues) + - [Proposing a Change](#proposing-a-change) + - [Prerequisites](#prerequisites) + - [Sending a Pull Request](#sending-a-pull-request) + - [Running Locally](#running-locally) + - [Before submitting](#before-submitting) + - [After submitting](#after-submitting) + - [Received a review request](#received-a-review-request) + - [How to get in touch](#how-to-get-in-touch) + - [Appendix](#appendix) + - [1. Node Version Manager](#1-node-version-manager) + - [nvm for Linux & macOS](#nvm-for-linux--macos) + - [nvm-windows for Windows](#nvm-windows-for-windows) + - [2. Local host occupied](#2-local-host-occupied) + + + # How to Contribute Coderplex web application comprises of two repositories : -- [Coderplex](https://github.com/coderplex/coderplex) : Frontend of the application - -- [Coderplex-Backend](https://github.com/coderplex/coderplex-backend) : Backend of the application - -## Index -1. [Code of Conduct](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#code-of-conduct) -2. [Open Development](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#open-development) -3. [Branching Model](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#branching-model) -4. [Development Workflow](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#development-workflow) - 1. [Work on Issues](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#work-on-issues) - 2. [Proposing a Change](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#proposing-a-change) - 3. [Prerequisites](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#prerequisites) - 4. [Sending a Pull Request](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#sending-a-pull-request) - 1. [Running Locally](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#running-locally) - 2. [Before submitting](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#before-submitting) - 3. [After submitting](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#after-submitting) - 1. [Received a review request](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#received-a-review-request) - 5. [How to get in touch](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#how-to-get-in-touch) -5. [Appendix](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#appendix) - 1. [Node Version Manager](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#1-node-version-manager) - 1. [Linux & macOS](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#nvm-for-linux--osx) - 2. [Windows](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#nvm-windows-for-windows) - 2. [Local host occupied](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md#2-local-host-occupied) +* [Coderplex](https://github.com/coderplex/coderplex) : Frontend of the application +* [Coderplex-Backend](https://github.com/coderplex/coderplex-backend) : Backend of the application ## Code of Conduct + Coderplex has adopted [Contributor Covenant](https://github.com/coderplex/coderplex/blob/develop/.github/CODE_OF_CONDUCT.md) that we expect project participants to adhere to. ## Open Development + All work related to the application takes place on Github itself. We use [Issues](https://github.com/coderplex/coderplex/issues) to track bugs, discuss ideas and to engage open source contributors. [Projects](https://github.com/coderplex/coderplex/projects) are used to keep track of everything and is our project management tool. We maintain [Wiki](https://github.com/coderplex/coderplex/wiki) for structuring our long term thoughts. Both core team members and contributors sends a pull request which goes through the same review process. Whole process is as transparent as it can be and we strive to keep it that way. ## Branching Model -The `master` branch of coderplex is relatively stable branch which we update for every release. We also have auto deployment in place for that particular branch i.e any changes in that branch gets reflected in [https://coderplex.org](https://coderplex.org). -It is highly recommended for both maintainers and contributors to raise a pull request to `develop` branch. Before every release we throughly test develop branch and merge into master. + +The `master` branch of coderplex is relatively stable branch which we update for every release. We also have auto deployment in place for that particular branch i.e any changes in that branch gets reflected in [https://coderplex.org](https://coderplex.org). It is highly recommended for both maintainers and contributors to raise a pull request to `develop` branch. Before every release we throughly test develop branch and merge into master. + ![Imgur](https://i.imgur.com/KPO2dLul.png) -
-*A pull request to any other branch may most likely be closed by our bots.* + +_A pull request to any other branch may most likely be closed by our bots_. ## Development Workflow We welcome pull requests from beginners and seasoned javaScript developers alike! ### Work on Issues -1. Find an issue that needs assistance by searching for the [open issues](https://github.com/coderplex/coderplex/labels/help-wanted). -2. If you decide to fix an issue, please be sure to check the comment thread in case somebody is already working on a fix. If nobody is working on it at the moment, please leave a comment stating that you intend to work on it so other people don’t accidentally duplicate your effort. -3. If somebody claims an issue but doesn’t follow up for more than a weeks, it’s fine to take over it but you should still leave a comment. +1. Find an issue that needs assistance by searching for the [open issues](https://github.com/coderplex/coderplex/labels/help-wanted). +1. If you decide to fix an issue, please be sure to check the comment thread in case somebody is already working on a fix. If nobody is working on it at the moment, please leave a comment stating that you intend to work on it so other people don’t accidentally duplicate your effort. +1. If somebody claims an issue but doesn’t follow up for more than a weeks, it’s fine to take over it but you should still leave a comment. ### Proposing a Change + 1. Open a new issue if you would like report a bug or suggest improvements. -2. Please wait for core team members to comment on the thread. This lets us reach an agreement on your proposal before you put significant effort into it. +1. Please wait for core team members to comment on the thread. This lets us reach an agreement on your proposal before you put significant effort into it. ### Prerequisites + 1. [NodeJS](https://nodejs.org/) -
- Minimum version v8.0.0+ - ```bash - To check node version - $ node -v - ``` - Any lower version than mentioned above may results in this [error](https://github.com/coderplex/coderplex/issues/100). - > If you face problem updating your node then you might need a Node version manager tool. [Follow here]() - -2. [Yarn](https://yarnpkg.com) -
- Minimum version v1.2.0+ -
- Installing instructions are at [official docs](https://yarnpkg.com/en/docs/install#windows-tab). - Use yarn over npm - > Our team's official policy (for now) is: We only use [Yarn](https://yarnpkg.com/en/docs/install) as our official Node package manager, and so we request you to use Yarn instead of npm and commit `yarn.lock` file. - -3. [Git](https://git-scm.com/download/linux) -
- Familiarity with git is mandatory. + + * Minimum version v8.0.0+ + + ```bash + To check node version + node -v + ``` + + Any lower version than mentioned above may results in this [error](https://github.com/coderplex/coderplex/issues/100). + + > If you face problem updating your node then you might need a Node version manager tool. [Follow here](#1-node-version-manager) + +1. [Yarn](https://yarnpkg.com) + + * Minimum version v1.2.0+ + * Installing instructions are at [official docs](https://yarnpkg.com/en/docs/install#windows-tab). Use yarn over npm + + > Our team's official policy (for now) is: We only use [Yarn](https://yarnpkg.com/en/docs/install) as our official Node package manager, and so we request you to use Yarn instead of npm and commit `yarn.lock` file. + +1. [Git](https://git-scm.com/download/linux) (Familiarity with git is mandatory). ### Sending a Pull Request @@ -85,88 +95,100 @@ We welcome pull requests from beginners and seasoned javaScript developers alike 1. Fork the [repository](https://github.com/coderplex/coderplex). 1. Then clone your forked repository - ```bash - $ git clone - ``` + ```bash + git clone + ``` 1. Move to the repository root folder - ```bash - $ cd coderplex - ``` + ```bash + cd coderplex + ``` 1. Install dependencies - ```bash - $ yarn - ``` + ```bash + yarn + ``` 1. Start the development server - ```bash - $ yarn dev - ``` - App now opens at `localhost:3000` in your default browser. - > You may get this [error]() if any other app is already running the above port. + ```bash + yarn dev + ``` + App now opens at `localhost:3000` in your default browser. + > You may get this [error](#2-local-host-occupied) if any other app is already running the above port. + +#### Before submitting -#### Before submitting: 1. From your fork, create a [branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) and name it. eg. `typo-in-readme` 1. If you’ve fixed a bug or added code that should be tested, add tests! 1. Ensure that all test pass - ```bash - $ yarn test - ``` + ```bash + yarn test + ``` 1. Run code formatters - ```bash - $ yarn lint - ``` + ```bash + yarn lint + ``` 1. Add and commit your code. Please give meaning full commit messages. -1. Pull latest code from [upstream repository's ](https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/)`develop`, if in case anything new were merged while you were working on your fork. +1. Pull latest code from [upstream repository's](https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/)`develop`, if in case anything new were merged while you were working on your fork. 1. Push the code to your fork. -1. Raise the pull request from your created branch to `develop` branch of coderplex. [why develop instead of master branch?]() +1. Raise the pull request from your created branch to `develop` branch of coderplex. [why develop instead of master branch?](https://www.atlassian.com/git/tutorials/comparing-workflows) 1. Take some time to give a brief description of the work you have done. #### After submitting + 1. Wait for all checks to pass in below section. -2. Your changes are deployed with a unique link `https://deploy-preview-xx--coderplex.netlify.com`.
-*`- xx` is your pull request number.* -3. The core team will review your pull request and either merge it, request changes to it, or close it with an explanation. +1. Your changes are deployed with a unique link `https://deploy-preview-xx--coderplex.netlify.com`. + + _`- xx` is your pull request number._ + +1. The core team will review your pull request and either merge it, request changes to it, or close it with an explanation. ##### Received a review request -- Work on the requested changes -- Push the changes as you did earlier, the pull request will automatically catch those and update itself. + +* Work on the requested changes +* Push the changes as you did earlier, the pull request will automatically catch those and update itself. ### How to get in touch -- Coderplex [Discord Channel](https://discord.gg/dVnQ2Gf) -- Tweet core team members : - - Vinay Puppal [@VinayPuppal](https://twitter.com/vinaypuppal) - - Md-ZubairAhmed [@Md_ZubairAhmed](https://twitter.com/Md_ZubairAhmed) + +* Coderplex [Discord Channel](https://discord.gg/dVnQ2Gf) +* Tweet core team members : + * Vinay Puppal [@VinayPuppal](https://twitter.com/vinaypuppal) + * Md-ZubairAhmed [@Md_ZubairAhmed](https://twitter.com/Md_ZubairAhmed) ## Appendix -##### 1. Node Version Manager -###### [nvm](https://github.com/creationix/nvm) for Linux & macOS +### 1. Node Version Manager + +#### [nvm](https://github.com/creationix/nvm) for Linux & macOS + ```bash Installation -$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash + curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash Install latest node lts -$ nvm install --lts + nvm install --lts Use installed version -$ nvm use --lts + nvm use --lts Run the app in the same terminal session ``` -*Make sure you have [curl](https://curl.haxx.se/) installed* -###### [nvm-windows](https://github.com/coreybutler/nvm-windows) for Windows +_Make sure you have [curl](https://curl.haxx.se/) installed_ + +#### [nvm-windows](https://github.com/coreybutler/nvm-windows) for Windows + It comes with an [installer](https://github.com/coreybutler/nvm-windows#installation--upgrades). ```bash Install particular version -$ nvm install 8.9.1 + nvm install 8.9.1 Use installed version -$ nvm use 8.9.1 + nvm use 8.9.1 ``` -Still facing problem this [article](https://medium.com/appseed-io/how-to-run-multiple-versions-of-node-js-with-nvm-for-windows-ffbe5c7a2b47) from [@skounis ](https://twitter.com/skounis) explain in details. -##### 2. Local host occupied +Still facing problem this [article](https://medium.com/appseed-io/how-to-run-multiple-versions-of-node-js-with-nvm-for-windows-ffbe5c7a2b47) from [@skounis](https://twitter.com/skounis) explain in details. + +### 2. Local host occupied + ```bash Error: listen EADDRINUSE :::3000 at Object._errnoException (util.js:1024:11) @@ -179,4 +201,5 @@ Error: listen EADDRINUSE :::3000 at process._tickCallback (internal/process/next_tick.js:188:7) error Command failed with exit code 1. ``` + If you get this error while running `yarn dev` then probably another app is occupying `localhost:3000`. You may want to close that and run the command again. diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 000000000..f79f181d7 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,5 @@ +{ + "first-line-h1": false, + "line-length": false, + "ul-style": false +} diff --git a/README.md b/README.md index 32dde7058..3cb33058d 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,21 @@ # Coderplex Website -[![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) -[![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) -[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) -[![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) -[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) +[![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) -##### Join our community here at https://www.coderplex.org ->:construction: under active development +## Join our community here at [https://www.coderplex.org](https://www.coderplex.org) + +> :construction: under active development ## About This project mainly uses -* [ReactJS](https://reactjs.org/) - A declarative, efficient, and flexible JavaScript library for building user - interfaces. +* [ReactJS](https://reactjs.org/) - A declarative, efficient, and flexible JavaScript library for building user interfaces. * [Next.js](https://github.com/zeit/next.js/) - A minimalistic framework for server-rendered React applications. * [emotion](https://emotion.sh) - A high performance, lightweight css-in-js library. - ## Contributing -We welcome pull requests from beginners and seasoned javaScript developers alike!. You can work on open issues, fix bugs -and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md) for -hassel free contribution.
This project follows ✨ -[All Contributors](https://github.com/kentcdodds/all-contributors) ✨ specifications to recognize all contributors. +We welcome pull requests from beginners and seasoned javaScript developers alike!. You can work on open issues, fix bugs and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md) for hassel free contribution. + +This project follows ✨ [All Contributors](https://github.com/kentcdodds/all-contributors) ✨ specifications to recognize all contributors. diff --git a/package.json b/package.json index 96f0fdfa8..445534273 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "test": "xo && jest", "lint": - "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo", + "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -39,8 +39,8 @@ "jest --findRelatedTests", "git add" ], - "*.md": ["prettier", "git add"], - ".github/CONTRIBUTING.md": ["doctoc", "git add"] + "*.md": ["prettier", "markdownlint", "git add"], + ".github/CONTRIBUTING.md": ["doctoc", "prettier", "git add"] }, "dependencies": { "babel-plugin-emotion": "^8.0.10", @@ -80,6 +80,7 @@ "husky": "^0.14.3", "jest": "^21.2.1", "lint-staged": "^5.0.0", + "markdownlint-cli": "^0.5.0", "opn": "^5.1.0", "prettier": "^1.7.0", "raf": "^3.4.0", diff --git a/yarn.lock b/yarn.lock index 6847aff94..332ac3b42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1553,7 +1553,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.0: +commander@2.9.0, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1912,7 +1912,7 @@ deep-assign@^1.0.0: dependencies: is-obj "^1.0.0" -deep-extend@~0.4.0: +deep-extend@~0.4.0, deep-extend@~0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" @@ -3096,6 +3096,17 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" +glob@~7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.0.tgz#10d34039e0df04272e262cf24224f7209434df4f" @@ -4258,6 +4269,12 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +linkify-it@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" + dependencies: + uc.micro "^1.0.1" + lint-staged@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-5.0.0.tgz#f1c670e03e2fdf3f3d0eb81f72d3bcf658770e54" @@ -4419,6 +4436,10 @@ lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" +lodash.flatten@~4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.3.0.tgz#e5ec4efe87efc59ce52f917cba8bf160636469cf" + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -4476,6 +4497,10 @@ lodash.upperfirst@^4.2.0: version "4.3.1" resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" +lodash.values@~4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.2.0.tgz#932625f7d2c954b63db895255548f3b49f120e9a" + lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4551,6 +4576,16 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +markdown-it@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.3.2.tgz#df4b86530d17c3bc9beec3b68d770b92ea17ae96" + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.3" + markdown-table@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-0.4.0.tgz#890c2c1b3bfe83fb00e4129b8e4cfe645270f9d1" @@ -4564,6 +4599,24 @@ markdown-to-ast@~3.4.0: structured-source "^3.0.2" traverse "^0.6.6" +markdownlint-cli@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/markdownlint-cli/-/markdownlint-cli-0.5.0.tgz#5c9562667efbf3298cfedb66d50c0a891b62cb39" + dependencies: + commander "~2.9.0" + deep-extend "~0.4.1" + glob "~7.0.3" + lodash.flatten "~4.3.0" + lodash.values "~4.2.0" + markdownlint "~0.6.1" + rc "~1.1.6" + +markdownlint@~0.6.1: + version "0.6.4" + resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.6.4.tgz#7fa77e0d8c1b1c3ed7978761ce664bd23e7328ef" + dependencies: + markdown-it "8.3.2" + marked@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" @@ -4590,6 +4643,10 @@ md5.js@^1.3.4: hash-base "^3.0.0" inherits "^2.0.1" +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -5675,6 +5732,15 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +rc@~1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-deep-force-update@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909" @@ -6924,6 +6990,10 @@ ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" +uc.micro@^1.0.1, uc.micro@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" + uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" From c8c74c0a101d9af366fa2091e0c89b70d6941cd9 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 23:33:22 +0530 Subject: [PATCH 19/45] add heading --- .github/CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2d17c4c00..a1adb3d2c 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,3 +1,5 @@ +** Table Of Contents ** + From aa7baee2dfe5d75868893dbdc6614b2d1706ab59 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 23:34:43 +0530 Subject: [PATCH 20/45] fix toc heading --- .github/CONTRIBUTING.md | 2 +- .markdownlint.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a1adb3d2c..39f03da94 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,4 @@ -** Table Of Contents ** +**Table Of Contents** diff --git a/.markdownlint.json b/.markdownlint.json index f79f181d7..a170715bb 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,5 +1,6 @@ { "first-line-h1": false, "line-length": false, - "ul-style": false + "ul-style": false, + "no-emphasis-as-header": false } From ae15ee5fe09bc2c62b21a67d1d02243a5fe8314c Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 23:37:23 +0530 Subject: [PATCH 21/45] revert back h1 to top --- .github/CONTRIBUTING.md | 57 +++++++++++++++++++++-------------------- .markdownlint.json | 1 - 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 39f03da94..1ddbdd197 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,31 +1,3 @@ -**Table Of Contents** - - - - - -- [How to Contribute](#how-to-contribute) - - [Code of Conduct](#code-of-conduct) - - [Open Development](#open-development) - - [Branching Model](#branching-model) - - [Development Workflow](#development-workflow) - - [Work on Issues](#work-on-issues) - - [Proposing a Change](#proposing-a-change) - - [Prerequisites](#prerequisites) - - [Sending a Pull Request](#sending-a-pull-request) - - [Running Locally](#running-locally) - - [Before submitting](#before-submitting) - - [After submitting](#after-submitting) - - [Received a review request](#received-a-review-request) - - [How to get in touch](#how-to-get-in-touch) - - [Appendix](#appendix) - - [1. Node Version Manager](#1-node-version-manager) - - [nvm for Linux & macOS](#nvm-for-linux--macos) - - [nvm-windows for Windows](#nvm-windows-for-windows) - - [2. Local host occupied](#2-local-host-occupied) - - - # How to Contribute Coderplex web application comprises of two repositories : @@ -34,6 +6,35 @@ Coderplex web application comprises of two repositories : * [Coderplex-Backend](https://github.com/coderplex/coderplex-backend) : Backend of the application +## **Table Of Contents** + +--- + + + + + +- [Code of Conduct](#code-of-conduct) +- [Open Development](#open-development) +- [Branching Model](#branching-model) +- [Development Workflow](#development-workflow) + - [Work on Issues](#work-on-issues) + - [Proposing a Change](#proposing-a-change) + - [Prerequisites](#prerequisites) + - [Sending a Pull Request](#sending-a-pull-request) + - [Running Locally](#running-locally) + - [Before submitting](#before-submitting) + - [After submitting](#after-submitting) + - [Received a review request](#received-a-review-request) + - [How to get in touch](#how-to-get-in-touch) +- [Appendix](#appendix) + - [1. Node Version Manager](#1-node-version-manager) + - [nvm for Linux & macOS](#nvm-for-linux--macos) + - [nvm-windows for Windows](#nvm-windows-for-windows) + - [2. Local host occupied](#2-local-host-occupied) + + + ## Code of Conduct Coderplex has adopted [Contributor Covenant](https://github.com/coderplex/coderplex/blob/develop/.github/CODE_OF_CONDUCT.md) that we expect project participants to adhere to. diff --git a/.markdownlint.json b/.markdownlint.json index a170715bb..221d42ee2 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,5 +1,4 @@ { - "first-line-h1": false, "line-length": false, "ul-style": false, "no-emphasis-as-header": false From 8dc0884b5e86ca8d134890b6ed34c020a4cb53cc Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 28 Nov 2017 23:38:52 +0530 Subject: [PATCH 22/45] make toc as heading instead of emphasis text --- .github/CONTRIBUTING.md | 4 +--- .markdownlint.json | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 1ddbdd197..36b69cc1f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -6,9 +6,7 @@ Coderplex web application comprises of two repositories : * [Coderplex-Backend](https://github.com/coderplex/coderplex-backend) : Backend of the application -## **Table Of Contents** - ---- +## Table Of Contents diff --git a/.markdownlint.json b/.markdownlint.json index 221d42ee2..38c32471a 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,5 +1,4 @@ { "line-length": false, - "ul-style": false, - "no-emphasis-as-header": false + "ul-style": false } From 78e3874836da0fd0cb53853540be4d07a258ad2a Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 00:26:34 +0530 Subject: [PATCH 23/45] add contributors to readme --- .all-contributorsrc | 199 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 18 +++- package.json | 41 +++++++-- yarn.lock | 135 ++++++++++++++++++++++++++++-- 4 files changed, 377 insertions(+), 16 deletions(-) create mode 100644 .all-contributorsrc diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 000000000..2abf54920 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,199 @@ +{ + "projectName": "coderplex", + "projectOwner": "VinayPuppal", + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": true, + "contributors": [ + { + "login": "vinaypuppal", + "name": "Vinay Puppal", + "avatar_url": "https://avatars1.githubusercontent.com/u/8843216?v=4", + "profile": "https://www.vinaypuppal.com/", + "contributions": [ + "bug", + "code", + "ideas", + "review" + ] + }, + { + "login": "M-ZubairAhmed", + "name": "Zubair Ahmed", + "avatar_url": "https://avatars2.githubusercontent.com/u/17708702?v=4", + "profile": "https://in.linkedin.com/in/mzubairahmed", + "contributions": [ + "bug", + "code", + "doc", + "example", + "ideas", + "plugin", + "review", + "test" + ] + }, + { + "login": "pbteja1998", + "name": "P Bhanu Teja", + "avatar_url": "https://avatars3.githubusercontent.com/u/17903466?v=4", + "profile": "https://github.com/pbteja1998", + "contributions": [ + "question", + "bug", + "code", + "ideas" + ] + }, + { + "login": "saiabhijitht", + "name": "Sai Abhijith", + "avatar_url": "https://avatars0.githubusercontent.com/u/23223985?v=4", + "profile": "https://github.com/saiabhijitht", + "contributions": [ + "design", + "ideas", + "review" + ] + }, + { + "login": "duttakapil", + "name": "Kapil Dutta", + "avatar_url": "https://avatars1.githubusercontent.com/u/6577624?v=4", + "profile": "http://duttakapil.github.io/", + "contributions": [ + "bug", + "ideas", + "review" + ] + }, + { + "login": "shivakrishna9", + "name": "Shiva Krishna Yadav", + "avatar_url": "https://avatars0.githubusercontent.com/u/15874356?v=4", + "profile": "https://github.com/shivakrishna9", + "contributions": [ + "code" + ] + }, + { + "login": "VineethKanaparthi", + "name": "Vineeth Kanaparthi", + "avatar_url": "https://avatars2.githubusercontent.com/u/14841940?v=4", + "profile": "https://github.com/VineethKanaparthi", + "contributions": [ + "code" + ] + }, + { + "login": "buoyantair", + "name": "buoyantair", + "avatar_url": "https://avatars2.githubusercontent.com/u/5159834?v=4", + "profile": "https://github.com/buoyantair", + "contributions": [ + "code" + ] + }, + { + "login": "jberry93", + "name": "Jeffrey Berry", + "avatar_url": "https://avatars2.githubusercontent.com/u/5133505?v=4", + "profile": "https://github.com/jberry93", + "contributions": [ + "code" + ] + }, + { + "login": "HerrVoennchen", + "name": "Sebastian", + "avatar_url": "https://avatars2.githubusercontent.com/u/6535023?v=4", + "profile": "https://github.com/HerrVoennchen", + "contributions": [ + "code" + ] + }, + { + "login": "hafiz703", + "name": "Hafiz T", + "avatar_url": "https://avatars3.githubusercontent.com/u/15249170?v=4", + "profile": "https://github.com/hafiz703", + "contributions": [ + "code" + ] + }, + { + "login": "rkaranam", + "name": "Raja Sekhar Karanam", + "avatar_url": "https://avatars0.githubusercontent.com/u/13974570?v=4", + "profile": "https://github.com/rkaranam", + "contributions": [ + "code" + ] + }, + { + "login": "cg-cnu", + "name": "sreenivas alapati", + "avatar_url": "https://avatars0.githubusercontent.com/u/2767425?v=4", + "profile": "https://twitter.com/CgCnu", + "contributions": [ + "code" + ] + }, + { + "login": "luixlacrux", + "name": "Luis Lacruz", + "avatar_url": "https://avatars0.githubusercontent.com/u/11747818?v=4", + "profile": "https://about.me/luislacruz", + "contributions": [ + "code" + ] + }, + { + "login": "majidmazin", + "name": "Mazin Majid", + "avatar_url": "https://avatars0.githubusercontent.com/u/32811957?v=4", + "profile": "https://github.com/majidmazin", + "contributions": [ + "code" + ] + }, + { + "login": "loangelak", + "name": "loangelak", + "avatar_url": "https://avatars0.githubusercontent.com/u/22547780?v=4", + "profile": "https://github.com/loangelak", + "contributions": [ + "code" + ] + }, + { + "login": "hur", + "name": "Atte Niemi", + "avatar_url": "https://avatars0.githubusercontent.com/u/4998544?v=4", + "profile": "http://twitter.com/HursCode", + "contributions": [ + "code" + ] + }, + { + "login": "tdeschryver", + "name": "tdeschryver", + "avatar_url": "https://avatars1.githubusercontent.com/u/28659384?v=4", + "profile": "https://github.com/tdeschryver", + "contributions": [ + "code" + ] + }, + { + "login": "aliciaphes", + "name": "Alicia Perez", + "avatar_url": "https://avatars1.githubusercontent.com/u/5432702?v=4", + "profile": "http://www.linkedin.com/in/aliciapr", + "contributions": [ + "code" + ] + } + ] +} diff --git a/README.md b/README.md index 3cb33058d..0e65d40d8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Coderplex Website +[![All Contributors](https://img.shields.io/badge/all_contributors-19-orange.svg?style=flat-square)](#contributors) + [![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) ## Join our community here at [https://www.coderplex.org](https://www.coderplex.org) @@ -18,4 +20,18 @@ This project mainly uses We welcome pull requests from beginners and seasoned javaScript developers alike!. You can work on open issues, fix bugs and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md) for hassel free contribution. -This project follows ✨ [All Contributors](https://github.com/kentcdodds/all-contributors) ✨ specifications to recognize all contributors. +## Contributors + +Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)): + + + + +| [
Vinay Puppal](https://www.vinaypuppal.com/)
[πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3Avinaypuppal "Bug reports") [πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=vinaypuppal "Code") [πŸ€”](#ideas-vinaypuppal "Ideas, Planning, & Feedback") [πŸ‘€](#review-vinaypuppal "Reviewed Pull Requests") | [
Zubair Ahmed](https://in.linkedin.com/in/mzubairahmed)
[πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3AM-ZubairAhmed "Bug reports") [πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=M-ZubairAhmed "Code") [πŸ“–](https://github.com/VinayPuppal/coderplex/commits?author=M-ZubairAhmed "Documentation") [πŸ’‘](#example-M-ZubairAhmed "Examples") [πŸ€”](#ideas-M-ZubairAhmed "Ideas, Planning, & Feedback") [πŸ”Œ](#plugin-M-ZubairAhmed "Plugin/utility libraries") [πŸ‘€](#review-M-ZubairAhmed "Reviewed Pull Requests") [⚠️](https://github.com/VinayPuppal/coderplex/commits?author=M-ZubairAhmed "Tests") | [
P Bhanu Teja](https://github.com/pbteja1998)
[πŸ’¬](#question-pbteja1998 "Answering Questions") [πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3Apbteja1998 "Bug reports") [πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=pbteja1998 "Code") [πŸ€”](#ideas-pbteja1998 "Ideas, Planning, & Feedback") | [
Sai Abhijith](https://github.com/saiabhijitht)
[🎨](#design-saiabhijitht "Design") [πŸ€”](#ideas-saiabhijitht "Ideas, Planning, & Feedback") [πŸ‘€](#review-saiabhijitht "Reviewed Pull Requests") | [
Kapil Dutta](http://duttakapil.github.io/)
[πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3Aduttakapil "Bug reports") [πŸ€”](#ideas-duttakapil "Ideas, Planning, & Feedback") [πŸ‘€](#review-duttakapil "Reviewed Pull Requests") | [
Shiva Krishna Yadav](https://github.com/shivakrishna9)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=shivakrishna9 "Code") | [
Vineeth Kanaparthi](https://github.com/VineethKanaparthi)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=VineethKanaparthi "Code") | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| [
buoyantair](https://github.com/buoyantair)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=buoyantair "Code") | [
Jeffrey Berry](https://github.com/jberry93)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=jberry93 "Code") | [
Sebastian](https://github.com/HerrVoennchen)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=HerrVoennchen "Code") | [
Hafiz T](https://github.com/hafiz703)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=hafiz703 "Code") | [
Raja Sekhar Karanam](https://github.com/rkaranam)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=rkaranam "Code") | [
sreenivas alapati](https://twitter.com/CgCnu)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=cg-cnu "Code") | [
Luis Lacruz](https://about.me/luislacruz)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=luixlacrux "Code") | +| [
Mazin Majid](https://github.com/majidmazin)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=majidmazin "Code") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=aliciaphes "Code") | + + + +This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! diff --git a/package.json b/package.json index 445534273..b55883088 100644 --- a/package.json +++ b/package.json @@ -5,30 +5,44 @@ "main": "index.js", "scripts": { "test": "xo && jest", - "lint": - "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", + "lint": "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", "start": "cross-env NODE_ENV=production next start", "build": "next build", - "export": "cross-env NODE_ENV=production yarn build && next export" + "export": "cross-env NODE_ENV=production yarn build && next export", + "add-contributor": "all-contributors add", + "generate": "all-contributors generate" }, "xo": { "parser": "babel-eslint", - "extends": ["prettier", "prettier/react", "plugin:react/recommended"], - "env": ["browser", "node"], + "extends": [ + "prettier", + "prettier/react", + "plugin:react/recommended" + ], + "env": [ + "browser", + "node" + ], "rules": { "linebreak-style": 0, "react/display-name": 0, "react/prop-types": 0 }, "space:": 2, - "ignores": ["next.config.js"], + "ignores": [ + "next.config.js" + ], "overrides": [ { "files": "**/__tests__/*.test.js", - "globals": ["describe", "it", "expect"] + "globals": [ + "describe", + "it", + "expect" + ] } ] }, @@ -39,8 +53,16 @@ "jest --findRelatedTests", "git add" ], - "*.md": ["prettier", "markdownlint", "git add"], - ".github/CONTRIBUTING.md": ["doctoc", "prettier", "git add"] + "*.md": [ + "prettier", + "markdownlint", + "git add" + ], + ".github/CONTRIBUTING.md": [ + "doctoc", + "prettier", + "git add" + ] }, "dependencies": { "babel-plugin-emotion": "^8.0.10", @@ -68,6 +90,7 @@ "styled-system": "^1.0.8" }, "devDependencies": { + "all-contributors-cli": "^4.10.0", "babel-eslint": "^8.0.1", "babel-plugin-lodash": "^3.2.11", "cross-env": "^5.0.2", diff --git a/yarn.lock b/yarn.lock index 332ac3b42..58263c3eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -208,6 +208,18 @@ align-text@^0.1.1, align-text@^0.1.3: longest "^1.0.1" repeat-string "^1.5.2" +all-contributors-cli@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-4.10.0.tgz#262a747a50a353bb95eba1df0b1a383e5acb6b60" + dependencies: + async "^2.0.0-rc.1" + chalk "^2.3.0" + inquirer "^4.0.0" + lodash "^4.11.2" + pify "^3.0.0" + request "^2.72.0" + yargs "^10.0.3" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -401,6 +413,12 @@ async@^1.4.0, async@~1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" +async@^2.0.0-rc.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + async@^2.0.1, async@^2.1.2, async@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" @@ -1406,7 +1424,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: @@ -1430,6 +1448,10 @@ character-reference-invalid@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" @@ -1481,6 +1503,12 @@ cli-cursor@^1.0.1, cli-cursor@^1.0.2: dependencies: restore-cursor "^1.0.1" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" @@ -2676,6 +2704,14 @@ extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +external-editor@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -2723,6 +2759,12 @@ figures@^1.3.5, figures@^1.7.0: escape-string-regexp "^1.0.5" object-assign "^4.1.0" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" @@ -3405,7 +3447,7 @@ husky@^0.14.3: normalize-path "^1.0.0" strip-indent "^2.0.0" -iconv-lite@0.4.19, iconv-lite@~0.4.13: +iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -3492,6 +3534,25 @@ inquirer@^0.12.0: strip-ansi "^3.0.0" through "^2.3.6" +inquirer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-4.0.0.tgz#56c6354ae4e6201917027249bbd7667fca2cc031" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + interpret@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" @@ -4501,7 +4562,7 @@ lodash.values@~4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.2.0.tgz#932625f7d2c954b63db895255548f3b49f120e9a" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.11.2, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4808,6 +4869,10 @@ mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + mv@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" @@ -5191,6 +5256,12 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + opener@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" @@ -5244,7 +5315,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -6058,7 +6129,7 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.74.0, request@^2.79.0: +request@^2.72.0, request@^2.74.0, request@^2.79.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: @@ -6198,6 +6269,13 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -6244,6 +6322,22 @@ run-async@^0.1.0: dependencies: once "^1.3.0" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" @@ -6592,7 +6686,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: +string-width@^2.0.0, string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -6847,6 +6941,12 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -7504,6 +7604,29 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" +yargs-parser@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6" + dependencies: + camelcase "^4.1.0" + +yargs@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.0.0" + yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" From feb66b50a608889fb9bbbe633244511a5209b6a9 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 00:27:25 +0530 Subject: [PATCH 24/45] modify templates and add info about "Add yourself as a contributor" --- .github/CONTRIBUTING.md | 17 +++++++++++ .github/ISSUE_TEMPLATE.md | 24 ++++++++++----- .github/PULL_REQUEST_TEMPLATE.md | 52 +++++++++++++++++++++++--------- .markdownlint.json | 4 ++- 4 files changed, 73 insertions(+), 24 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 36b69cc1f..f364a0092 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -22,6 +22,8 @@ Coderplex web application comprises of two repositories : - [Sending a Pull Request](#sending-a-pull-request) - [Running Locally](#running-locally) - [Before submitting](#before-submitting) + - [Add yourself as a contributor](#add-yourself-as-a-contributor) + - [Submitting PullRequest](#submitting-pullrequest) - [After submitting](#after-submitting) - [Received a review request](#received-a-review-request) - [How to get in touch](#how-to-get-in-touch) @@ -127,6 +129,21 @@ We welcome pull requests from beginners and seasoned javaScript developers alike yarn lint ``` 1. Add and commit your code. Please give meaning full commit messages. + +#### Add yourself as a contributor + +This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! + +To add yourself to the table of contributors on the `README.md`, please use the automated script as part of your PR: + +```bash +yarn run add-contributor +``` + +Follow the prompt and commit `.all-contributorsrc` and `README.md` in the PR. + +#### Submitting PullRequest + 1. Pull latest code from [upstream repository's](https://help.github.com/articles/merging-an-upstream-repository-into-your-fork/)`develop`, if in case anything new were merged while you were working on your fork. 1. Push the code to your fork. 1. Raise the pull request from your created branch to `develop` branch of coderplex. [why develop instead of master branch?](https://www.atlassian.com/git/tutorials/comparing-workflows) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 3b3c67a90..4b7dc2ef2 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -6,28 +6,36 @@ --> -- [ ] I have searched the [issues](https://github.com/coderplex/coderplex/issues) of this repository and believe that this is not a duplicate. -## Expected Behavior +* [ ] I have searched the [issues](https://github.com/coderplex/coderplex/issues) of this repository and believe that this is not a duplicate. + +# Expected Behavior + + -## Current Behavior +# Current Behavior + + ## Steps to Reproduce (for bugs) + + -1. -2. -3. -4. + +1. +1. ## Your Environment + + | Tech | Version | -|---------|---------| +| ------- | ------- | | OS | | | browser | | | etc | | diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 50275d3dd..ae7be1d29 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,23 +1,45 @@ - - - -Fixes + + + + +# What kind of change does this PR introduce + + -## Changes proposed in this PR -- -- +## What is the current behavior + + + +## What is the new behavior + + - ### Checklist for this PR -- [ ] I have read [contributing guidelines](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md). -- [ ] I executed `yarn lint` locally to format my code. -- [ ] All tests `yarn test` ran successfully. -- [ ] Pull request is towards `develop` branch. - -- [ ] I have tested responsiveness of the UI by checking on max devices using [ScreenFly](http://quirktools.com/screenfly/) + + + + +* [ ] I have read [contributing guidelines](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md). +* [ ] I executed `yarn lint` locally to format my code. +* [ ] All tests `yarn test` ran successfully. +* [ ] Pull request is towards `develop` branch. +* [ ] I have tested responsiveness of the UI by checking on devices using [ScreenFly](http://quirktools.com/screenfly/) +* [ ] Documentation +* [ ] Tests +* [ ] Ready to be merged +* [ ] Added myself to contributors table + + + + diff --git a/.markdownlint.json b/.markdownlint.json index 38c32471a..25b022d75 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,4 +1,6 @@ { "line-length": false, - "ul-style": false + "ul-style": false, + "no-inline-html": false, + "first-line-h1": false } From d23a1d9719fe51cb95c63e83c28d782f1ecc1075 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 00:33:11 +0530 Subject: [PATCH 25/45] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0e65d40d8..25132d70b 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ [![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) -## Join our community here at [https://www.coderplex.org](https://www.coderplex.org) +## Follow our community here at [https://www.coderplex.org](https://www.coderplex.org) -> :construction: under active development +> :construction: under active development, you can check progress at [https://dev.coderplex.org](https://dev.coderplex.org) which will be merged soon to main site ## About From d8ccbb379bbd64b03fe90a326a4a32f23bf59961 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 00:33:55 +0530 Subject: [PATCH 26/45] fix lint-staged issue --- package.json | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index b55883088..0376985e2 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "index.js", "scripts": { "test": "xo && jest", - "lint": "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", + "lint": + "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -17,32 +18,19 @@ }, "xo": { "parser": "babel-eslint", - "extends": [ - "prettier", - "prettier/react", - "plugin:react/recommended" - ], - "env": [ - "browser", - "node" - ], + "extends": ["prettier", "prettier/react", "plugin:react/recommended"], + "env": ["browser", "node"], "rules": { "linebreak-style": 0, "react/display-name": 0, "react/prop-types": 0 }, "space:": 2, - "ignores": [ - "next.config.js" - ], + "ignores": ["next.config.js"], "overrides": [ { "files": "**/__tests__/*.test.js", - "globals": [ - "describe", - "it", - "expect" - ] + "globals": ["describe", "it", "expect"] } ] }, @@ -53,16 +41,8 @@ "jest --findRelatedTests", "git add" ], - "*.md": [ - "prettier", - "markdownlint", - "git add" - ], - ".github/CONTRIBUTING.md": [ - "doctoc", - "prettier", - "git add" - ] + "**/*.md": ["prettier", "markdownlint", "git add"], + ".github/CONTRIBUTING.md": ["doctoc", "prettier", "git add"] }, "dependencies": { "babel-plugin-emotion": "^8.0.10", From 9b225bb7f49578e40f8bdf8cff8f21a7009fdd23 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 00:47:59 +0530 Subject: [PATCH 27/45] update COC/md --- .github/CONTRIBUTING.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f364a0092..57286465a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -10,7 +10,7 @@ Coderplex web application comprises of two repositories : - + - [Code of Conduct](#code-of-conduct) - [Open Development](#open-development) @@ -177,16 +177,16 @@ Follow the prompt and commit `.all-contributorsrc` and `README.md` in the PR. #### [nvm](https://github.com/creationix/nvm) for Linux & macOS ```bash -Installation + # Installation curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash -Install latest node lts + # Install latest node lts nvm install --lts -Use installed version + # Use installed version nvm use --lts -Run the app in the same terminal session + # Run the app in the same terminal session ``` _Make sure you have [curl](https://curl.haxx.se/) installed_ @@ -196,10 +196,10 @@ _Make sure you have [curl](https://curl.haxx.se/) installed_ It comes with an [installer](https://github.com/coreybutler/nvm-windows#installation--upgrades). ```bash -Install particular version + # Install particular version nvm install 8.9.1 -Use installed version + # Use installed version nvm use 8.9.1 ``` @@ -207,7 +207,7 @@ Still facing problem this [article](https://medium.com/appseed-io/how-to-run-mul ### 2. Local host occupied -```bash +```js Error: listen EADDRINUSE :::3000 at Object._errnoException (util.js:1024:11) at _exceptionWithHostPort (util.js:1046:20) From ce3c1515fc5a3684ee8a9c7cb96cad6ca524f985 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 00:51:16 +0530 Subject: [PATCH 28/45] update COC --- .github/CONTRIBUTING.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 57286465a..39a32038c 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -10,7 +10,7 @@ Coderplex web application comprises of two repositories : - + - [Code of Conduct](#code-of-conduct) - [Open Development](#open-development) @@ -28,10 +28,10 @@ Coderplex web application comprises of two repositories : - [Received a review request](#received-a-review-request) - [How to get in touch](#how-to-get-in-touch) - [Appendix](#appendix) - - [1. Node Version Manager](#1-node-version-manager) + - [Node Version Manager](#node-version-manager) - [nvm for Linux & macOS](#nvm-for-linux--macos) - [nvm-windows for Windows](#nvm-windows-for-windows) - - [2. Local host occupied](#2-local-host-occupied) + - [Local host occupied](#local-host-occupied) @@ -73,13 +73,13 @@ We welcome pull requests from beginners and seasoned javaScript developers alike * Minimum version v8.0.0+ ```bash - To check node version + # To check node version node -v ``` Any lower version than mentioned above may results in this [error](https://github.com/coderplex/coderplex/issues/100). - > If you face problem updating your node then you might need a Node version manager tool. [Follow here](#1-node-version-manager) + > If you face problem updating your node then you might need a Node version manager tool. [Follow here](#node-version-manager) 1. [Yarn](https://yarnpkg.com) @@ -114,7 +114,7 @@ We welcome pull requests from beginners and seasoned javaScript developers alike yarn dev ``` App now opens at `localhost:3000` in your default browser. - > You may get this [error](#2-local-host-occupied) if any other app is already running the above port. + > You may get this [error](#local-host-occupied) if any other app is already running the above port. #### Before submitting @@ -172,21 +172,21 @@ Follow the prompt and commit `.all-contributorsrc` and `README.md` in the PR. ## Appendix -### 1. Node Version Manager +### Node Version Manager #### [nvm](https://github.com/creationix/nvm) for Linux & macOS ```bash - # Installation - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash +# Installation +curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash - # Install latest node lts - nvm install --lts +# Install latest node lts +nvm install --lts - # Use installed version - nvm use --lts +# Use installed version +nvm use --lts - # Run the app in the same terminal session +# Run the app in the same terminal session ``` _Make sure you have [curl](https://curl.haxx.se/) installed_ @@ -196,16 +196,16 @@ _Make sure you have [curl](https://curl.haxx.se/) installed_ It comes with an [installer](https://github.com/coreybutler/nvm-windows#installation--upgrades). ```bash - # Install particular version - nvm install 8.9.1 +# Install particular version +nvm install 8.9.1 - # Use installed version - nvm use 8.9.1 +# Use installed version +nvm use 8.9.1 ``` Still facing problem this [article](https://medium.com/appseed-io/how-to-run-multiple-versions-of-node-js-with-nvm-for-windows-ffbe5c7a2b47) from [@skounis](https://twitter.com/skounis) explain in details. -### 2. Local host occupied +### Local host occupied ```js Error: listen EADDRINUSE :::3000 From 89079949c4d79c911916594ca9b35943e3448464 Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 01:05:31 +0530 Subject: [PATCH 29/45] fix repo owner --- .all-contributorsrc | 2 +- README.md | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2abf54920..52a056181 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1,6 +1,6 @@ { "projectName": "coderplex", - "projectOwner": "VinayPuppal", + "projectOwner": "coderplex", "files": [ "README.md" ], diff --git a/README.md b/README.md index 25132d70b..4df8228f3 100644 --- a/README.md +++ b/README.md @@ -25,13 +25,11 @@ We welcome pull requests from beginners and seasoned javaScript developers alike Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)): - -| [
Vinay Puppal](https://www.vinaypuppal.com/)
[πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3Avinaypuppal "Bug reports") [πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=vinaypuppal "Code") [πŸ€”](#ideas-vinaypuppal "Ideas, Planning, & Feedback") [πŸ‘€](#review-vinaypuppal "Reviewed Pull Requests") | [
Zubair Ahmed](https://in.linkedin.com/in/mzubairahmed)
[πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3AM-ZubairAhmed "Bug reports") [πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=M-ZubairAhmed "Code") [πŸ“–](https://github.com/VinayPuppal/coderplex/commits?author=M-ZubairAhmed "Documentation") [πŸ’‘](#example-M-ZubairAhmed "Examples") [πŸ€”](#ideas-M-ZubairAhmed "Ideas, Planning, & Feedback") [πŸ”Œ](#plugin-M-ZubairAhmed "Plugin/utility libraries") [πŸ‘€](#review-M-ZubairAhmed "Reviewed Pull Requests") [⚠️](https://github.com/VinayPuppal/coderplex/commits?author=M-ZubairAhmed "Tests") | [
P Bhanu Teja](https://github.com/pbteja1998)
[πŸ’¬](#question-pbteja1998 "Answering Questions") [πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3Apbteja1998 "Bug reports") [πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=pbteja1998 "Code") [πŸ€”](#ideas-pbteja1998 "Ideas, Planning, & Feedback") | [
Sai Abhijith](https://github.com/saiabhijitht)
[🎨](#design-saiabhijitht "Design") [πŸ€”](#ideas-saiabhijitht "Ideas, Planning, & Feedback") [πŸ‘€](#review-saiabhijitht "Reviewed Pull Requests") | [
Kapil Dutta](http://duttakapil.github.io/)
[πŸ›](https://github.com/VinayPuppal/coderplex/issues?q=author%3Aduttakapil "Bug reports") [πŸ€”](#ideas-duttakapil "Ideas, Planning, & Feedback") [πŸ‘€](#review-duttakapil "Reviewed Pull Requests") | [
Shiva Krishna Yadav](https://github.com/shivakrishna9)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=shivakrishna9 "Code") | [
Vineeth Kanaparthi](https://github.com/VineethKanaparthi)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=VineethKanaparthi "Code") | +| [
Vinay Puppal](https://www.vinaypuppal.com/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Avinaypuppal "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=vinaypuppal "Code") [πŸ€”](#ideas-vinaypuppal "Ideas, Planning, & Feedback") [πŸ‘€](#review-vinaypuppal "Reviewed Pull Requests") | [
Zubair Ahmed](https://in.linkedin.com/in/mzubairahmed)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3AM-ZubairAhmed "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Documentation") [πŸ’‘](#example-M-ZubairAhmed "Examples") [πŸ€”](#ideas-M-ZubairAhmed "Ideas, Planning, & Feedback") [πŸ”Œ](#plugin-M-ZubairAhmed "Plugin/utility libraries") [πŸ‘€](#review-M-ZubairAhmed "Reviewed Pull Requests") [⚠️](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Tests") | [
P Bhanu Teja](https://github.com/pbteja1998)
[πŸ’¬](#question-pbteja1998 "Answering Questions") [πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Apbteja1998 "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=pbteja1998 "Code") [πŸ€”](#ideas-pbteja1998 "Ideas, Planning, & Feedback") | [
Sai Abhijith](https://github.com/saiabhijitht)
[🎨](#design-saiabhijitht "Design") [πŸ€”](#ideas-saiabhijitht "Ideas, Planning, & Feedback") [πŸ‘€](#review-saiabhijitht "Reviewed Pull Requests") | [
Kapil Dutta](http://duttakapil.github.io/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Aduttakapil "Bug reports") [πŸ€”](#ideas-duttakapil "Ideas, Planning, & Feedback") [πŸ‘€](#review-duttakapil "Reviewed Pull Requests") | [
Shiva Krishna Yadav](https://github.com/shivakrishna9)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Code") | [
Vineeth Kanaparthi](https://github.com/VineethKanaparthi)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=VineethKanaparthi "Code") | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| [
buoyantair](https://github.com/buoyantair)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=buoyantair "Code") | [
Jeffrey Berry](https://github.com/jberry93)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=jberry93 "Code") | [
Sebastian](https://github.com/HerrVoennchen)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=HerrVoennchen "Code") | [
Hafiz T](https://github.com/hafiz703)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=hafiz703 "Code") | [
Raja Sekhar Karanam](https://github.com/rkaranam)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=rkaranam "Code") | [
sreenivas alapati](https://twitter.com/CgCnu)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=cg-cnu "Code") | [
Luis Lacruz](https://about.me/luislacruz)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=luixlacrux "Code") | -| [
Mazin Majid](https://github.com/majidmazin)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=majidmazin "Code") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/VinayPuppal/coderplex/commits?author=aliciaphes "Code") | - +| [
buoyantair](https://github.com/buoyantair)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=buoyantair "Code") | [
Jeffrey Berry](https://github.com/jberry93)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=jberry93 "Code") | [
Sebastian](https://github.com/HerrVoennchen)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=HerrVoennchen "Code") | [
Hafiz T](https://github.com/hafiz703)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hafiz703 "Code") | [
Raja Sekhar Karanam](https://github.com/rkaranam)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=rkaranam "Code") | [
sreenivas alapati](https://twitter.com/CgCnu)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=cg-cnu "Code") | [
Luis Lacruz](https://about.me/luislacruz)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=luixlacrux "Code") | +| [
Mazin Majid](https://github.com/majidmazin)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=majidmazin "Code") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=aliciaphes "Code") | This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! From f77e2506b31c9984b1bb8ebc6a8beb6d0b9c8f00 Mon Sep 17 00:00:00 2001 From: z Date: Wed, 29 Nov 2017 05:04:59 +0530 Subject: [PATCH 30/45] added missing contributors --- .all-contributorsrc | 33 ++++++++++++++++++++++++++------ .github/PULL_REQUEST_TEMPLATE.md | 4 ++-- README.md | 8 ++++---- package.json | 3 ++- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 52a056181..ebad8ea12 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -21,7 +21,7 @@ }, { "login": "M-ZubairAhmed", - "name": "Zubair Ahmed", + "name": "Md_ZubairAhmed", "avatar_url": "https://avatars2.githubusercontent.com/u/17708702?v=4", "profile": "https://in.linkedin.com/in/mzubairahmed", "contributions": [ @@ -32,7 +32,8 @@ "ideas", "plugin", "review", - "test" + "test", + "question" ] }, { @@ -75,7 +76,8 @@ "avatar_url": "https://avatars0.githubusercontent.com/u/15874356?v=4", "profile": "https://github.com/shivakrishna9", "contributions": [ - "code" + "code", + "doc" ] }, { @@ -84,7 +86,7 @@ "avatar_url": "https://avatars2.githubusercontent.com/u/14841940?v=4", "profile": "https://github.com/VineethKanaparthi", "contributions": [ - "code" + "doc" ] }, { @@ -129,7 +131,7 @@ "avatar_url": "https://avatars0.githubusercontent.com/u/13974570?v=4", "profile": "https://github.com/rkaranam", "contributions": [ - "code" + "doc" ] }, { @@ -156,7 +158,7 @@ "avatar_url": "https://avatars0.githubusercontent.com/u/32811957?v=4", "profile": "https://github.com/majidmazin", "contributions": [ - "code" + "doc" ] }, { @@ -194,6 +196,25 @@ "contributions": [ "code" ] + }, + { + "login": "abiduzz420", + "name": "abiduzz420", + "avatar_url": "https://avatars2.githubusercontent.com/u/18336304?v=4", + "profile": "https://medium.com/@abiduzair420", + "contributions": [ + "code", + "talk" + ] + }, + { + "login": "thepriefy", + "name": "thepriefy", + "avatar_url": "https://avatars2.githubusercontent.com/u/10849586?v=4", + "profile": "https://github.com/thepriefy", + "contributions": [ + "code" + ] } ] } diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ae7be1d29..60aa30dc9 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -32,13 +32,13 @@ merge of your pull request! * [ ] I have read [contributing guidelines](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md). * [ ] I executed `yarn lint` locally to format my code. +* [ ] I added revelant Tests to verify my code. * [ ] All tests `yarn test` ran successfully. * [ ] Pull request is towards `develop` branch. * [ ] I have tested responsiveness of the UI by checking on devices using [ScreenFly](http://quirktools.com/screenfly/) +* [ ] Added myself to contributors table * [ ] Documentation -* [ ] Tests * [ ] Ready to be merged -* [ ] Added myself to contributors table diff --git a/README.md b/README.md index 4df8228f3..ef4b8490f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Coderplex Website -[![All Contributors](https://img.shields.io/badge/all_contributors-19-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-21-orange.svg?style=flat-square)](#contributors) [![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) @@ -26,10 +26,10 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds -| [
Vinay Puppal](https://www.vinaypuppal.com/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Avinaypuppal "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=vinaypuppal "Code") [πŸ€”](#ideas-vinaypuppal "Ideas, Planning, & Feedback") [πŸ‘€](#review-vinaypuppal "Reviewed Pull Requests") | [
Zubair Ahmed](https://in.linkedin.com/in/mzubairahmed)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3AM-ZubairAhmed "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Documentation") [πŸ’‘](#example-M-ZubairAhmed "Examples") [πŸ€”](#ideas-M-ZubairAhmed "Ideas, Planning, & Feedback") [πŸ”Œ](#plugin-M-ZubairAhmed "Plugin/utility libraries") [πŸ‘€](#review-M-ZubairAhmed "Reviewed Pull Requests") [⚠️](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Tests") | [
P Bhanu Teja](https://github.com/pbteja1998)
[πŸ’¬](#question-pbteja1998 "Answering Questions") [πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Apbteja1998 "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=pbteja1998 "Code") [πŸ€”](#ideas-pbteja1998 "Ideas, Planning, & Feedback") | [
Sai Abhijith](https://github.com/saiabhijitht)
[🎨](#design-saiabhijitht "Design") [πŸ€”](#ideas-saiabhijitht "Ideas, Planning, & Feedback") [πŸ‘€](#review-saiabhijitht "Reviewed Pull Requests") | [
Kapil Dutta](http://duttakapil.github.io/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Aduttakapil "Bug reports") [πŸ€”](#ideas-duttakapil "Ideas, Planning, & Feedback") [πŸ‘€](#review-duttakapil "Reviewed Pull Requests") | [
Shiva Krishna Yadav](https://github.com/shivakrishna9)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Code") | [
Vineeth Kanaparthi](https://github.com/VineethKanaparthi)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=VineethKanaparthi "Code") | +| [
Vinay Puppal](https://www.vinaypuppal.com/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Avinaypuppal "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=vinaypuppal "Code") [πŸ€”](#ideas-vinaypuppal "Ideas, Planning, & Feedback") [πŸ‘€](#review-vinaypuppal "Reviewed Pull Requests") | [
Md_ZubairAhmed](https://in.linkedin.com/in/mzubairahmed)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3AM-ZubairAhmed "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Documentation") [πŸ’‘](#example-M-ZubairAhmed "Examples") [πŸ€”](#ideas-M-ZubairAhmed "Ideas, Planning, & Feedback") [πŸ”Œ](#plugin-M-ZubairAhmed "Plugin/utility libraries") [πŸ‘€](#review-M-ZubairAhmed "Reviewed Pull Requests") [⚠️](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Tests") [πŸ’¬](#question-M-ZubairAhmed "Answering Questions") | [
P Bhanu Teja](https://github.com/pbteja1998)
[πŸ’¬](#question-pbteja1998 "Answering Questions") [πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Apbteja1998 "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=pbteja1998 "Code") [πŸ€”](#ideas-pbteja1998 "Ideas, Planning, & Feedback") | [
Sai Abhijith](https://github.com/saiabhijitht)
[🎨](#design-saiabhijitht "Design") [πŸ€”](#ideas-saiabhijitht "Ideas, Planning, & Feedback") [πŸ‘€](#review-saiabhijitht "Reviewed Pull Requests") | [
Kapil Dutta](http://duttakapil.github.io/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Aduttakapil "Bug reports") [πŸ€”](#ideas-duttakapil "Ideas, Planning, & Feedback") [πŸ‘€](#review-duttakapil "Reviewed Pull Requests") | [
Shiva Krishna Yadav](https://github.com/shivakrishna9)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Documentation") | [
Vineeth Kanaparthi](https://github.com/VineethKanaparthi)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=VineethKanaparthi "Documentation") | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| [
buoyantair](https://github.com/buoyantair)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=buoyantair "Code") | [
Jeffrey Berry](https://github.com/jberry93)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=jberry93 "Code") | [
Sebastian](https://github.com/HerrVoennchen)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=HerrVoennchen "Code") | [
Hafiz T](https://github.com/hafiz703)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hafiz703 "Code") | [
Raja Sekhar Karanam](https://github.com/rkaranam)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=rkaranam "Code") | [
sreenivas alapati](https://twitter.com/CgCnu)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=cg-cnu "Code") | [
Luis Lacruz](https://about.me/luislacruz)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=luixlacrux "Code") | -| [
Mazin Majid](https://github.com/majidmazin)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=majidmazin "Code") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=aliciaphes "Code") | +| [
buoyantair](https://github.com/buoyantair)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=buoyantair "Code") | [
Jeffrey Berry](https://github.com/jberry93)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=jberry93 "Code") | [
Sebastian](https://github.com/HerrVoennchen)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=HerrVoennchen "Code") | [
Hafiz T](https://github.com/hafiz703)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hafiz703 "Code") | [
Raja Sekhar Karanam](https://github.com/rkaranam)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=rkaranam "Documentation") | [
sreenivas alapati](https://twitter.com/CgCnu)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=cg-cnu "Code") | [
Luis Lacruz](https://about.me/luislacruz)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=luixlacrux "Code") | +| [
Mazin Majid](https://github.com/majidmazin)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=majidmazin "Documentation") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=aliciaphes "Code") | [
abiduzz420](https://medium.com/@abiduzair420)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=abiduzz420 "Code") [πŸ“‹](#eventOrganizing-abiduzz420 "Event Organizing") [πŸ“’](#talk-abiduzz420 "Talks") | [
thepriefy](https://github.com/thepriefy)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=thepriefy "Code") | This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! diff --git a/package.json b/package.json index 0376985e2..c52c28f8d 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "build": "next build", "export": "cross-env NODE_ENV=production yarn build && next export", "add-contributor": "all-contributors add", - "generate": "all-contributors generate" + "contributors-generate": "all-contributors generate", + "contributors-check":"all-contributors check" }, "xo": { "parser": "babel-eslint", From ce90f2a38133de55fe1abf260db2c6e24d13aadc Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Wed, 29 Nov 2017 06:42:29 +0530 Subject: [PATCH 31/45] fix npm scripts --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index c52c28f8d..786404dcd 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "build": "next build", "export": "cross-env NODE_ENV=production yarn build && next export", "add-contributor": "all-contributors add", - "contributors-generate": "all-contributors generate", - "contributors-check":"all-contributors check" + "generate-contributors": "all-contributors generate" }, "xo": { "parser": "babel-eslint", From 302b996ffea45524d074812cabc0354e7ad2385b Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 1 Dec 2017 04:41:07 +0000 Subject: [PATCH 32/45] chore(package): update lint-staged to version 6.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 786404dcd..d04463cfa 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "eslint-plugin-react": "^7.1.0", "husky": "^0.14.3", "jest": "^21.2.1", - "lint-staged": "^5.0.0", + "lint-staged": "^6.0.0", "markdownlint-cli": "^0.5.0", "opn": "^5.1.0", "prettier": "^1.7.0", From d92f2056415dcee45d1265ae2f9af309c230c7eb Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Fri, 1 Dec 2017 04:50:00 +0000 Subject: [PATCH 33/45] chore(package): update lockfile https://npm.im/greenkeeper-lockfile --- yarn.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 58263c3eb..f5ae359b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4336,14 +4336,15 @@ linkify-it@^2.0.0: dependencies: uc.micro "^1.0.1" -lint-staged@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-5.0.0.tgz#f1c670e03e2fdf3f3d0eb81f72d3bcf658770e54" +lint-staged@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.0.0.tgz#7ab7d345f2fe302ff196f1de6a005594ace03210" dependencies: app-root-path "^2.0.0" chalk "^2.1.0" commander "^2.11.0" cosmiconfig "^3.1.0" + debug "^3.1.0" dedent "^0.7.0" execa "^0.8.0" find-parent-dir "^0.3.0" From 04b86711092aedca1640249147a9ae1d551cf432 Mon Sep 17 00:00:00 2001 From: Sai Abhijith Date: Tue, 5 Dec 2017 18:06:58 +0530 Subject: [PATCH 34/45] Added margin-bottom to icons in event-cards (#116) --- components/events/event-card.js | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/components/events/event-card.js b/components/events/event-card.js index 5e19a5c89..f0d401938 100644 --- a/components/events/event-card.js +++ b/components/events/event-card.js @@ -40,6 +40,7 @@ const Card = styled(Flex)` & .icons { font-size: 1.2rem; margin-right: 0.25rem; + margin-bottom: 0.25rem; color: #8393a7; } & .rsvp { diff --git a/yarn.lock b/yarn.lock index f5ae359b0..1be262967 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4336,7 +4336,7 @@ linkify-it@^2.0.0: dependencies: uc.micro "^1.0.1" -lint-staged@6.0.0: +lint-staged@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.0.0.tgz#7ab7d345f2fe302ff196f1de6a005594ace03210" dependencies: From ee16a86bc838742835d5ecdee25a549d77828032 Mon Sep 17 00:00:00 2001 From: Zubair Ahmed Date: Tue, 12 Dec 2017 15:43:54 +0530 Subject: [PATCH 35/45] learn v2 (#114) * 1. modified lean cards 2. changed time icon to calendar in events 3. fluid prop to button added * tree added * 1. width changes to cards in learn 2. marked js file 3. minor changes in tree comp * unused prop removed * functionality of subject page done with out styling * basic design in place for subjects * v changes to table of content * onhover effects * 1. many css improvments 2. code base of tree view simplified 3. UI design of tree view complete 4. other minor fixes * changes request as per https://github.com/coderplex/coderplex/pull/114#issuecomment-348965268 * changes as per request from https://github.com/coderplex/coderplex/pull/114#issuecomment-348940821 * changes as per request from https://github.com/coderplex/coderplex/pull/114#issuecomment-348922598 * changes request as per https://github.com/coderplex/coderplex/pull/114#issuecomment-348940502 * reduced number of subs on index to 4 * 1. reduced num of subj cards back to 4 in index 2. changes as per request from https://github.com/coderplex/coderplex/pull/114#issuecomment-349056188 * add new contributor * 1. bug of unit not highlighting fixed 2. margin for chapter increased on right * changes as per https://github.com/coderplex/coderplex/pull/114#issuecomment-349266678 * changes as per https://github.com/coderplex/coderplex/pull/114#issuecomment-349272510 * changes as per https://github.com/coderplex/coderplex/pull/114#issuecomment-349272336 * font size same as event card * floating syllabus as fab added * responsive sidebar * in response to https://github.com/coderplex/coderplex/pull/114#issuecomment-350817828 * revert https://github.com/coderplex/coderplex/pull/114/commits/321293449301874d9ca3743567e4b2d8400fc629 --- .all-contributorsrc | 9 + .prettierrc | 2 +- README.md | 5 +- __tests__/__snapshots__/header.test.js.snap | 3 - __tests__/header.test.js | 11 +- components/common/banner.js | 3 +- components/common/footer/index.js | 5 +- components/events/event-card.js | 4 +- components/learn/subject-banner.js | 66 +++++ components/learn/subject-card.js | 103 ++++--- components/learn/subject-marked.js | 115 ++++++++ .../syllabus-tree/syllabus-tree-component.js | 85 ++++++ .../syllabus-tree/syllabus-tree-container.js | 91 +++++++ jest.setup.js | 1 - next.config.js | 5 +- pages/events.js | 6 +- pages/index.js | 4 +- pages/learn/index.js | 43 +-- pages/learn/subject.js | 136 +++++++++- pages/space.js | 6 +- utils/base.styles.js | 6 +- utils/mock-data.js | 161 ++++++++++- yarn.lock | 253 ++++++++++-------- 23 files changed, 906 insertions(+), 217 deletions(-) delete mode 100644 __tests__/__snapshots__/header.test.js.snap create mode 100644 components/learn/subject-banner.js create mode 100644 components/learn/subject-marked.js create mode 100644 components/learn/syllabus-tree/syllabus-tree-component.js create mode 100644 components/learn/syllabus-tree/syllabus-tree-container.js diff --git a/.all-contributorsrc b/.all-contributorsrc index ebad8ea12..e774e4384 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -215,6 +215,15 @@ "contributions": [ "code" ] + }, + { + "login": "aravindballa", + "name": "Aravind Balla", + "avatar_url": "https://avatars0.githubusercontent.com/u/8036315?v=4", + "profile": "http://aravindballa.com", + "contributions": [ + "review" + ] } ] } diff --git a/.prettierrc b/.prettierrc index 03b0d59fb..a3042a80a 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,5 +4,5 @@ "trailingComma": "es5", "singleQuote": true, "jsxBracketSameLine": true, - "proseWrap": false + "proseWrap": never } diff --git a/README.md b/README.md index ef4b8490f..28198fa0a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Coderplex Website -[![All Contributors](https://img.shields.io/badge/all_contributors-21-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-22-orange.svg?style=flat-square)](#contributors) [![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) @@ -29,7 +29,8 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds | [
Vinay Puppal](https://www.vinaypuppal.com/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Avinaypuppal "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=vinaypuppal "Code") [πŸ€”](#ideas-vinaypuppal "Ideas, Planning, & Feedback") [πŸ‘€](#review-vinaypuppal "Reviewed Pull Requests") | [
Md_ZubairAhmed](https://in.linkedin.com/in/mzubairahmed)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3AM-ZubairAhmed "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Documentation") [πŸ’‘](#example-M-ZubairAhmed "Examples") [πŸ€”](#ideas-M-ZubairAhmed "Ideas, Planning, & Feedback") [πŸ”Œ](#plugin-M-ZubairAhmed "Plugin/utility libraries") [πŸ‘€](#review-M-ZubairAhmed "Reviewed Pull Requests") [⚠️](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Tests") [πŸ’¬](#question-M-ZubairAhmed "Answering Questions") | [
P Bhanu Teja](https://github.com/pbteja1998)
[πŸ’¬](#question-pbteja1998 "Answering Questions") [πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Apbteja1998 "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=pbteja1998 "Code") [πŸ€”](#ideas-pbteja1998 "Ideas, Planning, & Feedback") | [
Sai Abhijith](https://github.com/saiabhijitht)
[🎨](#design-saiabhijitht "Design") [πŸ€”](#ideas-saiabhijitht "Ideas, Planning, & Feedback") [πŸ‘€](#review-saiabhijitht "Reviewed Pull Requests") | [
Kapil Dutta](http://duttakapil.github.io/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Aduttakapil "Bug reports") [πŸ€”](#ideas-duttakapil "Ideas, Planning, & Feedback") [πŸ‘€](#review-duttakapil "Reviewed Pull Requests") | [
Shiva Krishna Yadav](https://github.com/shivakrishna9)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Documentation") | [
Vineeth Kanaparthi](https://github.com/VineethKanaparthi)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=VineethKanaparthi "Documentation") | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | [
buoyantair](https://github.com/buoyantair)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=buoyantair "Code") | [
Jeffrey Berry](https://github.com/jberry93)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=jberry93 "Code") | [
Sebastian](https://github.com/HerrVoennchen)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=HerrVoennchen "Code") | [
Hafiz T](https://github.com/hafiz703)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hafiz703 "Code") | [
Raja Sekhar Karanam](https://github.com/rkaranam)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=rkaranam "Documentation") | [
sreenivas alapati](https://twitter.com/CgCnu)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=cg-cnu "Code") | [
Luis Lacruz](https://about.me/luislacruz)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=luixlacrux "Code") | -| [
Mazin Majid](https://github.com/majidmazin)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=majidmazin "Documentation") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=aliciaphes "Code") | [
abiduzz420](https://medium.com/@abiduzair420)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=abiduzz420 "Code") [πŸ“‹](#eventOrganizing-abiduzz420 "Event Organizing") [πŸ“’](#talk-abiduzz420 "Talks") | [
thepriefy](https://github.com/thepriefy)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=thepriefy "Code") | +| [
Mazin Majid](https://github.com/majidmazin)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=majidmazin "Documentation") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=aliciaphes "Code") | [
abiduzz420](https://medium.com/@abiduzair420)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=abiduzz420 "Code") [πŸ“’](#talk-abiduzz420 "Talks") | [
thepriefy](https://github.com/thepriefy)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=thepriefy "Code") | +| [
Aravind Balla](http://aravindballa.com)
[πŸ‘€](#review-aravindballa "Reviewed Pull Requests") | This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! diff --git a/__tests__/__snapshots__/header.test.js.snap b/__tests__/__snapshots__/header.test.js.snap deleted file mode 100644 index 784cae512..000000000 --- a/__tests__/__snapshots__/header.test.js.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Testing Header of \`components/header\` Check the snapshot 1`] = ``; diff --git a/__tests__/header.test.js b/__tests__/header.test.js index f005482b0..aedef0a2e 100644 --- a/__tests__/header.test.js +++ b/__tests__/header.test.js @@ -1,13 +1,6 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import Header from '../components/common/header'; - describe('Testing Header of `components/header`', () => { - const shallowWrapper = shallow(
); - - it('Check the snapshot', () => { - expect(shallowWrapper).toMatchSnapshot(); + it('Sample test', () => { + expect('A').toEqual('A'); }); /** * Disable for now diff --git a/components/common/banner.js b/components/common/banner.js index 1fc84fa50..64b418c10 100644 --- a/components/common/banner.js +++ b/components/common/banner.js @@ -5,8 +5,7 @@ import { space } from 'styled-system'; import { Container, Title, SubTitle } from '../../utils/base.styles'; const BannerSection = styled.section` - background: #fbfbfb; - background-image: url('https://res.cloudinary.com/coderplex/image/upload/v1510788480/website__assets/pattern.png'); + background-color: #374355; min-height: 150px; text-align: center; ${space}; diff --git a/components/common/footer/index.js b/components/common/footer/index.js index 5285ba07c..6670d94da 100644 --- a/components/common/footer/index.js +++ b/components/common/footer/index.js @@ -175,7 +175,10 @@ export default class FooterBar extends React.Component { - We are constantly updating our platform. Do subscribe to stay informed. + + We are constantly updating our platform. + <br />Do subscribe to stay informed. + {this.state.subscriberEmailPosted ? (

Thank you, we will keep you posted

) : ( diff --git a/components/events/event-card.js b/components/events/event-card.js index f0d401938..963dc009d 100644 --- a/components/events/event-card.js +++ b/components/events/event-card.js @@ -2,7 +2,7 @@ import React from 'react'; import styled from 'react-emotion'; import { space, fontSize } from 'styled-system'; import { Flex, Box } from 'grid-emotion'; -import TimeIcon from 'react-icons/lib/md/access-time'; +import TimeIcon from 'react-icons/lib/fa/calendar'; import format from 'date-fns/format'; import LocationIcon from 'react-icons/lib/md/location-on'; import AttendeesIcon from 'react-icons/lib/md/people'; @@ -112,7 +112,7 @@ export default props => ( {props.online ? 'Free session' : 'Free entry'} - diff --git a/components/learn/subject-banner.js b/components/learn/subject-banner.js new file mode 100644 index 000000000..47a7e2c51 --- /dev/null +++ b/components/learn/subject-banner.js @@ -0,0 +1,66 @@ +import React from 'react'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; +import { Flex, Box } from 'grid-emotion'; + +import { baseContainer, Title, SubTitle, Button, breakpoints } from '../../utils/base.styles'; + +// For changing background of banner +// background-image: url('https://res.cloudinary.com/coderplex/image/upload/v1510788480/website__assets/pattern.png'); +const BannerSection = styled.section` + ${space}; + background: #374355; + min-height: 150px; +`; + +const Container = styled.section` + ${baseContainer}; + & .logo { + text-align: center; + padding: 10px 15px; + font-size: 10rem; + background: #fff; + ${breakpoints.xs} { + text-align: left; + font-size: 4.5rem; + } + } + & .titles { + text-align: left; + & .domain { + margin-left: 0px; + margin-right: 0px; + margin-bottom: 0px; + } + } + & .edit { + display: block; + ${breakpoints.xs} { + display: none; + } + } +`; + +export default ({ title, subTitle, icon }) => ( + + + + +
+ +
+
+ + {title} + {subTitle} + + + + +
+
+
+); diff --git a/components/learn/subject-card.js b/components/learn/subject-card.js index f609df159..25cf10ff8 100644 --- a/components/learn/subject-card.js +++ b/components/learn/subject-card.js @@ -1,52 +1,72 @@ import React from 'react'; import styled from 'react-emotion'; +import { Flex, Box } from 'grid-emotion'; +import { space, fontSize } from 'styled-system'; import Link from 'next/link'; +import LearningIcon from 'react-icons/lib/fa/book'; +import EstimateIcon from 'react-icons/lib/md/access-time'; -import { breakpoints } from '../../utils/base.styles'; +import { breakpoints, Button } from '../../utils/base.styles'; -const Subject = styled.a` +const SubjectCard = styled.div` + ${space}; text-decoration: none; - width: calc(33.33% - 40px); - margin: 20px; + width: calc(25% - 24px); + margin-top: 24px; display: inline-block; min-height: 200px; - background: #fff; - border: 1px solid #b9b9b9; + border: 1px solid #d3d3d3; transition: all 0.25s; - cursor: pointer; - &:hover { - border: 1px solid #000; - } - & .icon { - padding: 10px 15px; - font-size: 10rem; + & .logo { + background: #ebeff3; + text-align: center; + padding: 1.5rem 0 1.5rem 0; + font-size: 7rem; ${breakpoints.xs} { - font-size: 8rem; + font-size: 5rem; } } & .content { - padding: 10px 0 10px 30px; + padding: 10px; color: #444; - background: #f6f6f6; + background: #fff; text-align: left; } & .title { - font-size: 1.5rem; - font-size: 600; - color: #222; + color: #374355; + font-weight: 500; + margin-bottom: 0px; + margin-top: 0px; ${breakpoints.xs} { font-size: 1.2rem; } } & .subtitle { - font-size: 0.8rem; - color: #444; + ${fontSize}; + color: #8393a7; + margin-top: 0px; + margin-bottom: 10px; + } + & .stats { + ${fontSize}; + color: #8393a7; + } + & .icons { + font-size: 1.2rem; + margin-right: 0.25rem; + margin-bottom: 0.25rem; + color: #8393a7; + } + & .view { + width: 100%; + display: block; + text-align: center; } ${breakpoints.md} { - width: calc(50% - 40px); + width: calc(33% - 30px); } ${breakpoints.sm} { - width: calc(50% - 40px); + width: calc(50% - 50px); margin: 20px auto; } ${breakpoints.xs} { @@ -56,15 +76,30 @@ const Subject = styled.a` `; export default ({ subject }) => ( - - -
- -
-
-
{subject.title}
-
{subject.domain}
-
-
- + +
+ +
+
+

{subject.title}

+

+ {subject.domain} +

+ + + + 20 learning + + + + 20 hours + + + + + +
+
); diff --git a/components/learn/subject-marked.js b/components/learn/subject-marked.js new file mode 100644 index 000000000..9b3f46444 --- /dev/null +++ b/components/learn/subject-marked.js @@ -0,0 +1,115 @@ +import React from 'react'; +import marked from 'marked'; +import styled from 'react-emotion'; +import { breakpoints } from '../../utils/base.styles'; + +const Marked = styled.div` + background-color: #fff; + table { + width: 100%; + border-collapse: collapse; + text-align: center; + } + td, + tr, + table th th { + text-align: center; + } + th { + background: #f5f5f5; + font-weight: 400; + text-align: center; + } + td, + th { + padding: 15px; + border: 1px solid #ccc; + text-align: center; + } + ${breakpoints.xs} { + table, + thead, + tbody, + th, + td, + tr { + display: block; + text-align: center; + margin-bottom: 30px; + } + thead tr { + position: absolute; + top: -9999px; + left: -9999px; + } + tr { + border: 1px solid #ccc; + text-align: center; + } + td { + border: none; + border-bottom: 1px solid #eee; + position: relative; + padding-left: 50%; + text-align: center; + } + td:before { + text-align: center; + position: absolute; + left: 6px; + width: 30%; + font-size: 0.7rem; + } + td:nth-of-type(1):before { + content: 'Concept'; + } + td:nth-of-type(1) { + background: #f4f6fb; + text-align: center; + } + td:nth-of-type(2):before { + content: 'Best video'; + } + td:nth-of-type(3):before { + content: 'Best text'; + } + td:nth-of-type(4):before { + content: 'Duration'; + } + td:nth-of-type(5):before { + content: 'Prereq.'; + } + } +`; + +export default class MarkedJS extends React.Component { + constructor(props) { + super(props); + marked.setOptions({ + renderer: new marked.Renderer(), + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: true, + smartLists: true, + smartypants: false, + }); + } + + render() { + return ( +
+ {this.props.loading ? ( +
Loading...
+ ) : ( + + )} +
+ ); + } +} diff --git a/components/learn/syllabus-tree/syllabus-tree-component.js b/components/learn/syllabus-tree/syllabus-tree-component.js new file mode 100644 index 000000000..a36311fce --- /dev/null +++ b/components/learn/syllabus-tree/syllabus-tree-component.js @@ -0,0 +1,85 @@ +import React from 'react'; +import styled from 'react-emotion'; + +export default class TreeView extends React.PureComponent { + constructor(props) { + super(props); + this.state = { + collapsed: this.props.collapsed, + }; + } + + unitClick = (...args) => { + this.setState({ collapsed: !this.state.collapsed }); + if (this.props.onClick) { + this.props.onClick(...args); + } + }; + + render() { + const Container = styled.div` + overflow-y: hidden; + .unit { + display: flex; + flex-wrap: nowrap; + justify-content: center; + align-content: stretch; + align-items: center; + padding: 0.5rem; + border-left: 2px solid #fff; + :hover { + background-color: #f5f5f5; + border-left: 2px solid #374355; + cursor: pointer; + } + } + + .unit-active { + background-color: #f5f5f5; + border-left: 2px solid #f5f5f5; + :hover { + } + } + + .chapters { + padding-left: 0.8rem; + } + + .chapters-collapsed { + height: 0px; + } + + .pointer { + cursor: pointer; + user-select: none; + transition: all 0.1s; + order: 2; + flex: 0 1 auto; + align-self: auto; + color: #b9c3d2; + :after { + content: 'β–Ύ'; + } + } + + .pointer-collapsed { + transform: rotate(-90deg); + color: #374355; + } + `; + + return ( + +
+ {this.props.UnitNameComponent} +
+
+
+ {this.state.collapsed ? null : this.props.children} +
+ + ); + } +} diff --git a/components/learn/syllabus-tree/syllabus-tree-container.js b/components/learn/syllabus-tree/syllabus-tree-container.js new file mode 100644 index 000000000..30795e003 --- /dev/null +++ b/components/learn/syllabus-tree/syllabus-tree-container.js @@ -0,0 +1,91 @@ +import React from 'react'; +import styled from 'react-emotion'; + +import TreeView from './syllabus-tree-component'; + +export default class SyllabusTree extends React.Component { + state = { + nodeStateTracker: this.props.data.map(() => true), + activeUnit: this.props.data[0].unit.name, + activeChapter: this.props.data[0].chapters[0].url, + }; + + handleClick = i => { + this.setState({ + nodeStateTracker: [ + ...this.state.nodeStateTracker.slice(0, i), + !this.state.nodeStateTracker[i], + ...this.state.nodeStateTracker.slice(i + 1), + ], + }); + }; + + clickOnChapter(chapter, unitName) { + if (chapter.url !== this.state.activeChapter) { + this.setState({ activeChapter: chapter.url, activeUnit: unitName }); + this.props.changeChapter(chapter); + } + } + + render() { + const Container = styled.div` + & .chapter { + padding: 5px; + font-size: 0.85rem; + user-select: none; + border-left: 2px solid #fff; + color: #888; + :hover { + background-color: #f5f5f5; + border-left: 2px solid #374355; + cursor: pointer; + } + } + + & .active { + color: #374355; + background-color: #f5f5f5; + border-left: 2px solid #374355; + :hover { + cursor: default; + } + } + + & .unit_name { + order: 1; + flex: 1 1 auto; + align-self: auto; + } + `; + + return ( + + {this.props.data.map((unitNode, i) => { + const UnitNameComponent = ( +
this.handleClick(i)}> + {unitNode.unit.name} +
+ ); + return ( + this.handleClick(i)}> + {unitNode.chapters.map(chapter => ( +
this.clickOnChapter(chapter, unitNode.unit.name)}> + {chapter.name} +
+ ))} +
+ ); + })} +
+ ); + } +} diff --git a/jest.setup.js b/jest.setup.js index d64b40d3c..c41592ade 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,6 +1,5 @@ /* eslint import/no-unassigned-import:0 */ import 'raf/polyfill'; - import Enzyme from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; diff --git a/next.config.js b/next.config.js index 608f31e9b..de85ea17c 100644 --- a/next.config.js +++ b/next.config.js @@ -131,10 +131,11 @@ module.exports = { for (const subject of listOfSubjects) { routes[subject.url] = { page: '/learn/subject', - query: { id: subject.subjectId }, + query: { + id: subject.subjectId, + }, }; } - console.log(routes); return routes; }, }; diff --git a/pages/events.js b/pages/events.js index a70a86eaa..1e18cb4b0 100644 --- a/pages/events.js +++ b/pages/events.js @@ -130,11 +130,7 @@ export default class Events extends React.Component { render() { return ( - + diff --git a/pages/index.js b/pages/index.js index 8e47366fc..71728fe13 100644 --- a/pages/index.js +++ b/pages/index.js @@ -143,8 +143,8 @@ export default () => ( - - {take(listOfSubjects, 6).map(subject => { + + {take(listOfSubjects, 4).map(subject => { return ; })} diff --git a/pages/learn/index.js b/pages/learn/index.js index f09f5e997..8c43d0b2e 100644 --- a/pages/learn/index.js +++ b/pages/learn/index.js @@ -6,31 +6,38 @@ import { space } from 'styled-system'; import Layout from '../../components/common/layout'; import BannerSection from '../../components/common/banner'; import SubjectCard from '../../components/learn/subject-card'; -import { Container } from '../../utils/base.styles'; +import { baseContainer } from '../../utils/base.styles'; import { listOfSubjects } from '../../utils/mock-data'; -const SubjectsSection = styled.section` +const LearnSection = styled.section` ${space}; - background: #fff; - text-align: center; + ${baseContainer}; position: relative; `; +const FilterContainer = styled.div` + ${space}; + & .title_filter { + text-align: center; + } + & .title_fitler_by { + font-weight: 400; + } +`; + export default () => ( - - - - - {listOfSubjects.map(subject => { - return ; - })} - - - + + + +

Available Guides

+ {/*

Filter by domain :

*/} +
+ + {listOfSubjects.map(subject => { + return ; + })} + +
); diff --git a/pages/learn/subject.js b/pages/learn/subject.js index 4e4c592de..159ed6162 100644 --- a/pages/learn/subject.js +++ b/pages/learn/subject.js @@ -1,12 +1,130 @@ import React from 'react'; +import fetch from 'isomorphic-unfetch'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; +import { Flex, Box } from 'grid-emotion'; +import ExpandTOC from 'react-icons/lib/fa/angle-double-right'; +import CollapseTOC from 'react-icons/lib/fa/angle-double-left'; +import { baseContainer, Title, breakpoints } from '../../utils/base.styles'; import Layout from '../../components/common/layout'; -import BannerSection from '../../components/common/banner'; - -export default props => { - return ( - - - - ); -}; +import BannerSection from '../../components/learn/subject-banner'; +import SyllabusTree from '../../components/learn/syllabus-tree/syllabus-tree-container'; +import SubjectMarkdown from '../../components/learn/subject-marked'; + +import { laravelSyllabus } from '../../utils/mock-data'; + +const CurriculumSection = styled.section` + ${baseContainer}; + ${space}; + border: 1px solid #f5f5f5; + min-height: 80vh; + background-color: #fff; + & .box_toc { + border-right: 1px solid #f5f5f5; + min-width: 250px; + } + & .toc_title { + background-color: #374355; + color: #fff; + font-weight: 500; + padding: 10px; + } + & .chapter_name { + font-weight: 500; + } +`; + +const Fab = styled.div` + position: sticky; + z-index: 3; + left: 0; + margin-top: 0.5rem; + top: 10rem; + display: none; + & .fab_symbol { + opacity: 0.5; + padding: 0.05rem; + border-radius: 0 5px 5px 0; + background: #fff; + border: 0.5px solid #555; + width: 1.2rem; + height: 2rem; + } + ${breakpoints.xs} { + display: inherit; + } +`; + +const defaultChapter = laravelSyllabus[0].chapters[0]; + +export default class Subject extends React.Component { + constructor(props) { + super(props); + this.state = { + activeChapterContent: '', + activeChapterName: defaultChapter.name, + loading: true, + isSidebarOpen: true, + }; + } + + componentDidMount() { + this.getChapterContent(defaultChapter); + } + + changeChapter = selectedChapter => { + this.setState({ + loading: true, + activeChapterName: selectedChapter.name, + }); + this.getChapterContent(selectedChapter); + }; + + async getChapterContent(chapter) { + const activeChapterContentPromise = await fetch(chapter.url); + const activeChapterContent = await activeChapterContentPromise.text(); + await this.setState({ + activeChapterContent, + loading: false, + }); + } + + render() { + return this.props.url.query.id === 'laravel' ? ( + + + + + {this.state.isSidebarOpen ? ( + +
Table of content
+ +
+ ) : null} + + this.setState({ isSidebarOpen: !this.state.isSidebarOpen })}> + {this.state.isSidebarOpen ? ( + + ) : ( + + )} + +

{this.state.activeChapterName}

+ +
+
+
+
+ ) : ( + + Curriculum for {this.props.url.query.id} and others Coming soon!! + + ); + } +} diff --git a/pages/space.js b/pages/space.js index e062afd8c..599422403 100644 --- a/pages/space.js +++ b/pages/space.js @@ -100,11 +100,7 @@ const activities = [ export default () => ( - + diff --git a/utils/base.styles.js b/utils/base.styles.js index 6fab0e84d..3259902ee 100644 --- a/utils/base.styles.js +++ b/utils/base.styles.js @@ -52,18 +52,19 @@ export const baseButton = css` export const Button = styled.a` ${baseButton}; + width: ${props => (props.fluid ? '100%' : 'auto')} background: ${props => (props.inverted ? '#7657fb' : props.ghost ? '#fff' : '#fff')} color: ${props => (props.inverted ? '#fff' : props.ghost ? purpleSecondary : '#222')} padding: ${props => props.large ? '0.8rem 2.25rem' : props.medium ? '0.6rem 1.2rem' : props.small ? '0.3rem 1.1rem' : '0.2rem 1rem'}; font-size: ${props => (props.large ? '1.8rem' : props.medium ? '1rem' : '0.8rem')}; - font-weight: ${props => (props.ghost ? 600 : 300)}; + font-weight: ${props => (props.ghost ? 600 : 500)}; border: ${props => (props.ghost ? `2px solid ${purpleSecondary}` : 'none')}; cursor: pointer; user-select: none; -webkit-touch-callout: none; &:hover { - font-weight: ${props => (props.ghost ? 600 : 300)}; + font-weight: ${props => (props.ghost ? 600 : 500)}; background: ${props => (props.inverted ? purpleSecondary : props.ghost ? purpleSecondary : '#eee')}; color: ${props => (props.inverted ? '#fff' : props.ghost ? whiteFull : '#222')} } @@ -106,6 +107,7 @@ export const SubTitle = styled.h3` ${breakpoints.xs} { font-size: 0.9rem; text-align: center; + font-weight: 600; line-height: ${props => (props.small ? '1.4rem' : '1.8rem')}; } `; diff --git a/utils/mock-data.js b/utils/mock-data.js index 3805f8d07..469c10e66 100644 --- a/utils/mock-data.js +++ b/utils/mock-data.js @@ -142,7 +142,6 @@ export const listOfDomains = [ ]; export const contentsOfLaravel = { - logo: 'devicon-laravel-plain colored', overview: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/overview.md', guides: [ { @@ -150,11 +149,11 @@ export const contentsOfLaravel = { url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/0.md', }, { - name: 'Introduction to MVC architecture in PHP', + name: 'Introduction to MVC architecture', url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/1.md', }, { - name: 'Models Views Controllers and Routes', + name: 'Models,Views,Controllers and Routes', url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/2.md', }, { @@ -231,3 +230,159 @@ export const contentsOfLaravel = { }, ], }; + +export const laravelSyllabus = [ + { + unit: { + name: 'Preface', + }, + chapters: [ + { + name: 'Choosing laravel', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/choosing-laravel.md', + }, + { + name: 'Prerequisites', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/prerequisites.md', + }, + { + name: 'Installation', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/installation.md', + }, + ], + }, + { + unit: { + name: 'Models, Views, Controllers and Routes', + }, + chapters: [ + { + name: 'Introduction to MVC', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/introduction-to-mvc.md', + }, + { + name: 'Basic Routing and Views', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/basic-routing-and-views.md', + }, + { + name: 'Pass Data to Views', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/pass-data-to-views.md', + }, + { + name: 'Database Setup', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/database-setup.md', + }, + { + name: 'Working with Query Builder', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/working-with-query-builder.md', + }, + { + name: 'Eloquent', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent.md', + }, + { + name: 'Controllers', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/controllers.md', + }, + { + name: 'Route Model Binding', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/route-model-binding.md', + }, + ], + }, + { + unit: { + name: 'Front-End', + }, + chapters: [ + { + name: 'Layouts and Structures', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/layouts-and-structures.md', + }, + { + name: 'Form Requests and CSRF', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-requests-and-CSRF.md', + }, + { + name: 'Form Validation', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-validation.md', + }, + { + name: 'Rendering', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/rendering', + }, + { + name: 'Laravel Mix', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/laravel-mix.md', + }, + { + name: 'Flash Messaging', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/flash-messaging.md', + }, + ], + }, + { + unit: { + name: 'Relationships', + }, + chapters: [ + { + name: 'Eloquent Relationships', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent-relationships.md', + }, + { + name: 'One-to-Many Relationship', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/one-to-many-relationship.md', + }, + { + name: 'Pivot Tables', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/pivot-tables.md', + }, + ], + }, + { + unit: { + name: 'Authentication', + }, + chapters: [ + { + name: 'Scaffold Authentication', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/scaffold-authentication.md', + }, + { + name: 'Manual Authentication', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/manual-authentication.md', + }, + ], + }, + { + unit: { + name: 'View Composers and Archives', + }, + chapters: [ + { + name: 'Add Archives', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/add-archives.md', + }, + { + name: 'View Composers', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/view-composers.md', + }, + ], + }, + { + unit: { + name: 'Testing & Seeding', + }, + chapters: [ + { + name: 'Testing', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/testing.md', + }, + { + name: 'Seeding', + url: 'https://rawgit.com/coderplex/learn/cdn/laravel/seeding.md', + }, + ], + }, +]; diff --git a/yarn.lock b/yarn.lock index 1be262967..01a5b56c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,27 +2,28 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.32", "@babel/code-frame@^7.0.0-beta.31": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.32.tgz#04f231b8ec70370df830d9926ce0f5add074ec4c" +"@babel/code-frame@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/helper-function-name@7.0.0-beta.32": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.32.tgz#6161af4419f1b4e3ed2d28c0c79c160e218be1f3" +"@babel/helper-function-name@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.32" - "@babel/template" "7.0.0-beta.32" - "@babel/types" "7.0.0-beta.32" + "@babel/helper-get-function-arity" "7.0.0-beta.31" + "@babel/template" "7.0.0-beta.31" + "@babel/traverse" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" -"@babel/helper-get-function-arity@7.0.0-beta.32": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.32.tgz#93721a99db3757de575a83bab7c453299abca568" +"@babel/helper-get-function-arity@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" dependencies: - "@babel/types" "7.0.0-beta.32" + "@babel/types" "7.0.0-beta.31" "@babel/helper-module-imports@7.0.0-beta.31": version "7.0.0-beta.31" @@ -31,23 +32,23 @@ "@babel/types" "7.0.0-beta.31" lodash "^4.2.0" -"@babel/template@7.0.0-beta.32": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.32.tgz#e1d9fdbd2a7bcf128f2f920744a67dab18072495" +"@babel/template@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" dependencies: - "@babel/code-frame" "7.0.0-beta.32" - "@babel/types" "7.0.0-beta.32" - babylon "7.0.0-beta.32" + "@babel/code-frame" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" lodash "^4.2.0" -"@babel/traverse@^7.0.0-beta.31": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.32.tgz#b78b754c6e1af3360626183738e4c7a05951bc99" +"@babel/traverse@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" dependencies: - "@babel/code-frame" "7.0.0-beta.32" - "@babel/helper-function-name" "7.0.0-beta.32" - "@babel/types" "7.0.0-beta.32" - babylon "7.0.0-beta.32" + "@babel/code-frame" "7.0.0-beta.31" + "@babel/helper-function-name" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" debug "^3.0.1" globals "^10.0.0" invariant "^2.2.0" @@ -61,14 +62,6 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@babel/types@7.0.0-beta.32", "@babel/types@^7.0.0-beta.31": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.32.tgz#c317d0ecc89297b80bbcb2f50608e31f6452a5ff" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - "@semantic-release/commit-analyzer@^3.0.1": version "3.0.7" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-3.0.7.tgz#dc955444a6d3d2ae9b8e21f90c2c80c4e9142b2f" @@ -115,8 +108,8 @@ pify "^3.0.0" "@types/node@*": - version "8.0.53" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8" + version "8.0.57" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.57.tgz#e5d8b4dc112763e35cfc51988f4f38da3c486d99" JSONStream@^1.0.4: version "1.3.1" @@ -166,7 +159,7 @@ acorn@^4.0.3, acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.1.1: +acorn@^5.0.0, acorn@^5.1.1, acorn@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" @@ -413,13 +406,13 @@ async@^1.4.0, async@~1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.0-rc.1: +async@^2.0.0-rc.1, async@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" -async@^2.0.1, async@^2.1.2, async@^2.1.4: +async@^2.0.1, async@^2.1.2: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: @@ -474,13 +467,13 @@ babel-core@6.26.0, babel-core@^6.0.0, babel-core@^6.26.0: source-map "^0.5.6" babel-eslint@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.2.tgz#e44fb9a037d749486071d52d65312f5c20aa7530" + version "8.0.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.3.tgz#f29ecf02336be438195325cd47c468da81ee4e98" dependencies: - "@babel/code-frame" "^7.0.0-beta.31" - "@babel/traverse" "^7.0.0-beta.31" - "@babel/types" "^7.0.0-beta.31" - babylon "^7.0.0-beta.31" + "@babel/code-frame" "7.0.0-beta.31" + "@babel/traverse" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" babel-generator@6.26.0, babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.0" @@ -1110,9 +1103,9 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.32, babylon@^7.0.0-beta.31: - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.32.tgz#e9033cb077f64d6895f4125968b37dc0a8c3bc6e" +babylon@7.0.0-beta.31: + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" babylon@^6.18.0: version "6.18.0" @@ -1202,8 +1195,8 @@ boundary@^1.0.1: resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" boxen@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.2.tgz#3f1d4032c30ffea9d4b02c322eaf2ea741dcbce5" + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -1211,7 +1204,7 @@ boxen@^1.2.1: cli-boxes "^1.0.0" string-width "^2.0.0" term-size "^1.2.0" - widest-line "^1.0.0" + widest-line "^2.0.0" brace-expansion@^1.1.7: version "1.1.8" @@ -1479,8 +1472,8 @@ chokidar@^1.7.0: fsevents "^1.0.0" ci-info@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.1.tgz#47b44df118c48d2597b56d342e7e25791060171a" + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1587,7 +1580,11 @@ commander@2.9.0, commander@~2.9.0: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.11.0, commander@^2.9.0: +commander@^2.11.0: + version "2.12.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" + +commander@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" @@ -1725,7 +1722,11 @@ convert-source-map@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" -convert-source-map@^1.4.0, convert-source-map@^1.5.0: +convert-source-map@^1.4.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1748,7 +1749,11 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.0.0, core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.0.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.2.tgz#bc4648656e7dc9dc80d7d3c7bbc172d96e744e63" + +core-js@^2.4.0, core-js@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" @@ -2062,11 +2067,10 @@ doctrine@1.5.0: isarray "^1.0.0" doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + version "2.0.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" dependencies: esutils "^2.0.2" - isarray "^1.0.0" dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" @@ -2237,8 +2241,8 @@ enzyme-adapter-react-16@^1.0.4: react-test-renderer "^16.0.0-0" enzyme-adapter-utils@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.1.1.tgz#689de8853f0751710590d6dfa730ff4056ea36b2" + version "1.2.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.2.0.tgz#7f4471ee0a70b91169ec8860d2bf0a6b551664b2" dependencies: lodash "^4.17.4" object.assign "^4.0.4" @@ -2266,12 +2270,18 @@ enzyme@^3.1.1: raf "^3.4.0" rst-selector-parser "^2.2.3" -errno@^0.1.2, errno@^0.1.3, errno@^0.1.4: +errno@^0.1.2, errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: prr "~0.0.0" +errno@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.5.tgz#a563781a6052bc2c9ccd89e8cef0eb9506e0c321" + dependencies: + prr "~1.0.1" + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -2291,8 +2301,8 @@ error-stack-parser@^2.0.0: stackframe "^1.0.3" es-abstract@^1.6.1, es-abstract@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -2399,8 +2409,8 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-prettier@^2.3.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.7.0.tgz#7bbfef66ad783277836f4ea556e68b9bcc9da4d0" + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" dependencies: get-stdin "^5.0.1" @@ -2433,8 +2443,8 @@ eslint-module-utils@^2.1.1: pkg-dir "^1.0.0" eslint-plugin-ava@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-ava/-/eslint-plugin-ava-4.2.2.tgz#0a20395ddf6d7452f4f9d6fd1a90f0bf4a5fc4d5" + version "4.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-ava/-/eslint-plugin-ava-4.4.0.tgz#c1866e1f62e70daf2b7b5f60cfbc53bfe267a717" dependencies: arrify "^1.0.1" deep-strict-equal "^0.2.0" @@ -2474,13 +2484,13 @@ eslint-plugin-promise@^3.4.0: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75" eslint-plugin-react@^7.1.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" + version "7.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b" dependencies: doctrine "^2.0.0" has "^1.0.1" jsx-ast-utils "^2.0.0" - prop-types "^15.5.10" + prop-types "^15.6.0" eslint-plugin-unicorn@^2.1.0: version "2.1.2" @@ -2533,10 +2543,10 @@ eslint@^3.18.0: user-home "^2.0.0" espree@^3.1.3, espree@^3.4.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" + version "3.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" dependencies: - acorn "^5.1.1" + acorn "^5.2.1" acorn-jsx "^3.0.0" esprima@^3.1.3: @@ -2704,7 +2714,7 @@ extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" -external-editor@^2.0.4: +external-editor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" dependencies: @@ -2930,13 +2940,20 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0, fsevents@^1.1.1: +fsevents@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.36" +fsevents@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" @@ -3150,8 +3167,8 @@ glob@~7.0.3: path-is-absolute "^1.0.0" global-dirs@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.0.tgz#10d34039e0df04272e262cf24224f7209434df4f" + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" dependencies: ini "^1.3.4" @@ -3163,8 +3180,8 @@ global@^4.3.0: process "~0.5.1" globals@^10.0.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-10.3.0.tgz#716aba93657b56630b5a0e77de5ea8ac6215afaa" + version "10.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" globals@^9.14.0, globals@^9.18.0: version "9.18.0" @@ -3535,14 +3552,14 @@ inquirer@^0.12.0: through "^2.3.6" inquirer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-4.0.0.tgz#56c6354ae4e6201917027249bbd7667fca2cc031" + version "4.0.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-4.0.1.tgz#b25cd541789394b4bb56f6440fb213b121149096" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^2.1.0" figures "^2.0.0" lodash "^4.3.0" mute-stream "0.0.7" @@ -5030,7 +5047,7 @@ node-notifier@^5.0.2: shellwords "^0.1.0" which "^1.2.12" -node-pre-gyp@^0.6.36: +node-pre-gyp@^0.6.36, node-pre-gyp@^0.6.39: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" dependencies: @@ -5621,8 +5638,8 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" prettier@^1.7.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" + version "1.9.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.1.tgz#41638a0d47c1efbd1b7d5a742aaa5548eab86d70" pretty-format@^21.2.1: version "21.2.1" @@ -5695,6 +5712,10 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5874,8 +5895,8 @@ react-proxy@^3.0.0-alpha.0: lodash "^4.6.1" react-test-renderer@^16.0.0, react-test-renderer@^16.0.0-0: - version "16.1.1" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.1.1.tgz#a05184688d564be799f212449262525d1e350537" + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" dependencies: fbjs "^0.8.16" object-assign "^4.1.1" @@ -6344,10 +6365,10 @@ rx-lite@^3.1.2: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" rxjs@^5.4.2: - version "5.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.2.tgz#28d403f0071121967f18ad665563255d54236ac3" + version "5.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97" dependencies: - symbol-observable "^1.0.1" + symbol-observable "1.0.1" safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" @@ -6687,7 +6708,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -6821,14 +6842,14 @@ supports-color@^4.0.0, supports-color@^4.2.1: dependencies: has-flag "^2.0.0" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + symbol-observable@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" -symbol-observable@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" - symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -7072,20 +7093,20 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" typescript-styled-plugin@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.2.0.tgz#9514de01a47bd20d3f157b0472c276a1db709f6e" + version "0.2.2" + resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.2.2.tgz#155b17df98d88b595a1e03cc859a545df840c634" dependencies: - typescript-template-language-service-decorator "^1.0.0" + typescript-template-language-service-decorator "^1.0.3" vscode-css-languageservice "^2.1.10" vscode-languageserver-types "^3.4.0" -typescript-template-language-service-decorator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-1.0.1.tgz#1d4cc508887ddeca44b64df0496bd37443efe471" +typescript-template-language-service-decorator@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-1.0.3.tgz#d3f28393d3dc0b21d4e969feefd8a73af7ca2375" typescript@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631" + version "2.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" ua-parser-js@^0.7.9: version "0.7.17" @@ -7125,8 +7146,8 @@ uid-number@^0.0.6: resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" ultron@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" underscore.string@~2.2.0rc: version "2.2.1" @@ -7179,8 +7200,8 @@ unist-util-remove-position@^1.0.0: unist-util-visit "^1.1.0" unist-util-visit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.2.0.tgz#9dc78d1f95cd242e865f7f93f327d3296bb9a718" + version "1.3.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.3.0.tgz#41ca7c82981fd1ce6c762aac397fc24e35711444" dependencies: unist-util-is "^2.1.1" @@ -7442,11 +7463,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2" -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" +widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" dependencies: - string-width "^1.0.1" + string-width "^2.1.1" window-size@0.1.0: version "0.1.0" @@ -7465,8 +7486,8 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" worker-farm@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.1.tgz#8e9f4a7da4f3c595aa600903051b969390423fa1" + version "1.5.2" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" dependencies: errno "^0.1.4" xtend "^4.0.1" @@ -7526,8 +7547,8 @@ write@^0.2.1: mkdirp "^0.5.1" ws@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.1.tgz#d97e34dee06a1190c61ac1e95f43cb60b78cf939" + version "3.3.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608" dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0" From 1aac0fc59e77a0fba40f54c7f732b709dda495e3 Mon Sep 17 00:00:00 2001 From: Vinay Puppal <me@vinaypuppal.com> Date: Mon, 18 Dec 2017 06:25:26 +0530 Subject: [PATCH 36/45] fix #119 (#128) --- pages/events.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pages/events.js b/pages/events.js index 1e18cb4b0..2add4185c 100644 --- a/pages/events.js +++ b/pages/events.js @@ -51,7 +51,7 @@ export default class Events extends React.Component { } else { throw new Error('Failed to retieve future events'); } - await this.setState({ + this.setState({ pastEvents, futureEvents, fetchError: null, @@ -59,7 +59,7 @@ export default class Events extends React.Component { }); } catch (err) { console.log(err); - await this.setState({ + this.setState({ pastEvents: null, futureEvents: null, fetchError: err.message, @@ -91,12 +91,16 @@ export default class Events extends React.Component { return ( <div> {events.slice(0, loadLimit).map(event => { + console.log(event); const regexForImageSrc = /<img.*?src="([^">]*\/([^">]*?))".*?>/g; - const imageSrc = regexForImageSrc.exec(event.description); + const imgs = regexForImageSrc.exec(event.description); + const imageSrc = imgs + ? imgs[1] + : event.featured_photo ? event.featured_photo.photo_link : imagePlaceholderURL; return ( <EventCard key={event.id} - image={imageSrc ? imageSrc[1] : imagePlaceholderURL} + image={imageSrc} name={event.name} location={event.venue ? event.venue.name : 'Online'} online={!event.venue} From cf5347807930632cd6ce5fc065d4ee302a9b632b Mon Sep 17 00:00:00 2001 From: Vinay Puppal <me@vinaypuppal.com> Date: Mon, 18 Dec 2017 06:28:35 +0530 Subject: [PATCH 37/45] fixes #126 (#130) --- pages/events.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/events.js b/pages/events.js index 2add4185c..f021f03ba 100644 --- a/pages/events.js +++ b/pages/events.js @@ -118,7 +118,7 @@ export default class Events extends React.Component { renderLoadMoreButton(eventsTotalLength, loadLimit, isPastEvent) { return loadLimit >= eventsTotalLength ? null : ( <div className="loadmore_div" mb={[5, 5]}> - <Button inverted medium onClick={event => this.loadMore(event, isPastEvent)}> + <Button inverted medium onClick={() => this.loadMore(isPastEvent)}> Load more </Button> </div> From 59e2e601136dcd012c1eae1fed59eef8ebcccf1a Mon Sep 17 00:00:00 2001 From: Vinay Puppal <me@vinaypuppal.com> Date: Mon, 18 Dec 2017 06:31:43 +0530 Subject: [PATCH 38/45] implement events loader (#132) --- components/events/event-card.js | 6 +--- components/events/event-content-loader.js | 37 +++++++++++++++++++++++ package.json | 37 ++++++++++++++++++----- pages/events.js | 16 +++++----- yarn.lock | 8 ++++- 5 files changed, 83 insertions(+), 21 deletions(-) create mode 100644 components/events/event-content-loader.js diff --git a/components/events/event-card.js b/components/events/event-card.js index 963dc009d..1a1ae38ab 100644 --- a/components/events/event-card.js +++ b/components/events/event-card.js @@ -97,11 +97,7 @@ export default props => ( <Flex wrap> <Box fontSize={[12, 14, 16]} width={[1, 1, 0.38]} className="secondaryText" pr={1} mr={[0]} my={[1, 1, 0]}> <TimeIcon className="icons" /> - <span> - {props.tense === 'past' - ? format(props.time, "ddd MMM Do 'YY") - : format(props.time, "ddd MMM Do 'YY, h:mm A")} - </span> + <span>{format(props.time, "ddd MMM Do 'YY, h:mm A")}</span> </Box> <Box fontSize={[12, 14, 16]} width={[1, 1, 0.24]} className="secondaryText" pr={1} mx={[0]} my={[1, 1, 0]}> <AttendeesIcon className="icons" /> diff --git a/components/events/event-content-loader.js b/components/events/event-content-loader.js new file mode 100644 index 000000000..eb093df1e --- /dev/null +++ b/components/events/event-content-loader.js @@ -0,0 +1,37 @@ +import React from 'react'; +import ContentLoader from 'react-content-loader'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; +import { Flex } from 'grid-emotion'; + +import { breakpoints, graySecondary } from '../../utils/base.styles'; + +const EventLoader = styled(Flex)` + ${space}; + border: 1px solid ${graySecondary}; + margin: 32px 0; + min-height: 120px; + ${breakpoints.md} { + padding-right: 15px; + } + ${breakpoints.sm} { + padding-right: 15px; + } + ${breakpoints.xs} { + padding-right: 15px; + } +`; + +export default () => ( + <EventLoader my={[3]} wrap> + <ContentLoader width="100%" speed={4} primaryColor={'#f3f3f3'} secondaryColor={'#ecebeb'}> + <rect x="0" y="0" rx="5" ry="5" width="200" height="132" /> + <rect x="207" y="7" rx="4" ry="4" width="550" height="20" /> + <rect x="210" y="54" rx="4" ry="4" width="300" height="15" /> + <rect x="210" y="100" rx="4" ry="4" width="120" height="15" /> + <rect x="355" y="100" rx="4" ry="4" width="120" height="15" /> + <rect x="503" y="100" rx="4" ry="4" width="120" height="15" /> + <rect x="636" y="74" rx="4" ry="4" width="120" height="40" /> + </ContentLoader> + </EventLoader> +); diff --git a/package.json b/package.json index d04463cfa..d2b93f643 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "main": "index.js", "scripts": { "test": "xo && jest", - "lint": - "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", + "lint": "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -18,19 +17,32 @@ }, "xo": { "parser": "babel-eslint", - "extends": ["prettier", "prettier/react", "plugin:react/recommended"], - "env": ["browser", "node"], + "extends": [ + "prettier", + "prettier/react", + "plugin:react/recommended" + ], + "env": [ + "browser", + "node" + ], "rules": { "linebreak-style": 0, "react/display-name": 0, "react/prop-types": 0 }, "space:": 2, - "ignores": ["next.config.js"], + "ignores": [ + "next.config.js" + ], "overrides": [ { "files": "**/__tests__/*.test.js", - "globals": ["describe", "it", "expect"] + "globals": [ + "describe", + "it", + "expect" + ] } ] }, @@ -41,8 +53,16 @@ "jest --findRelatedTests", "git add" ], - "**/*.md": ["prettier", "markdownlint", "git add"], - ".github/CONTRIBUTING.md": ["doctoc", "prettier", "git add"] + "**/*.md": [ + "prettier", + "markdownlint", + "git add" + ], + ".github/CONTRIBUTING.md": [ + "doctoc", + "prettier", + "git add" + ] }, "dependencies": { "babel-plugin-emotion": "^8.0.10", @@ -62,6 +82,7 @@ "preact-emotion": "^8.0.10", "prop-types": "^15.5.10", "react": "^16.0.0", + "react-content-loader": "^1.7.1", "react-dom": "^16.0.0", "react-emotion": "^8.0.10", "react-event-timeline": "^1.4.0", diff --git a/pages/events.js b/pages/events.js index f021f03ba..b92ad9438 100644 --- a/pages/events.js +++ b/pages/events.js @@ -9,6 +9,7 @@ import BannerSection from '../components/common/banner'; import { Container, SubTitle, Button } from '../utils/base.styles'; import { baseEventsURL, futureEventsURL, pastEventsURL, imagePlaceholderURL } from '../utils/urls'; import EventCard from '../components/events/event-card'; +import EventLoader from '../components/events/event-content-loader'; const EventsSection = styled.section` ${space}; @@ -70,11 +71,9 @@ export default class Events extends React.Component { renderEvents(events, loadLimit) { if (this.state.loading) { - return ( - <SubTitle inverted color="#222"> - Loading.. - </SubTitle> - ); + return [1, 2].map(i => { + return <EventLoader key={i} />; + }); } else if (events.length === 0) { return ( <SubTitle inverted color="#222"> @@ -132,6 +131,7 @@ export default class Events extends React.Component { } render() { + const { loading } = this.state; return ( <Layout> <BannerSection title="Online & Offline Events" subTitle="Because you cannot change the world alone" /> @@ -143,7 +143,8 @@ export default class Events extends React.Component { Upcoming Events </h3> {this.renderEvents(this.state.futureEvents, this.state.futureEventsLoadLimit)} - {this.renderLoadMoreButton(this.state.futureEvents.length, this.state.futureEventsLoadLimit, false)} + {!loading && + this.renderLoadMoreButton(this.state.futureEvents.length, this.state.futureEventsLoadLimit, false)} </Box> </Flex> <Flex direction="column" align="center" justify="center"> @@ -152,7 +153,8 @@ export default class Events extends React.Component { Recent Events </h3> {this.renderEvents(this.state.pastEvents, this.state.pastEventsLoadLimit)} - {this.renderLoadMoreButton(this.state.pastEvents.length, this.state.pastEventsLoadLimit, true)} + {!loading && + this.renderLoadMoreButton(this.state.pastEvents.length, this.state.pastEventsLoadLimit, true)} </Box> </Flex> </Container> diff --git a/yarn.lock b/yarn.lock index 01a5b56c2..81c154b0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1046,7 +1046,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -5834,6 +5834,12 @@ rc@~1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-content-loader@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/react-content-loader/-/react-content-loader-1.7.1.tgz#e6e18adbf632829fd56ba6fe558d16d2a5a00af9" + dependencies: + babel-runtime "^6.6.1" + react-deep-force-update@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909" From f848c60904536914d41506c7139b28d66d61a727 Mon Sep 17 00:00:00 2001 From: Vinay Puppal <me@vinaypuppal.com> Date: Mon, 18 Dec 2017 06:36:08 +0530 Subject: [PATCH 39/45] show upcoming event on landing page (#133) --- components/events/event-card.js | 55 ++++++++++++++++------ pages/events.js | 1 + pages/index.js | 83 +++++++++++++++++++++++++++++++-- 3 files changed, 121 insertions(+), 18 deletions(-) diff --git a/components/events/event-card.js b/components/events/event-card.js index 1a1ae38ab..5365a9791 100644 --- a/components/events/event-card.js +++ b/components/events/event-card.js @@ -18,6 +18,7 @@ const Card = styled(Flex)` border: 1px solid ${graySecondary}; min-height: 120px; color: #8393a7; + text-align: left; & .eventPhoto { height: 120px; width: 100%; @@ -75,39 +76,63 @@ const CardTitle = styled.h3` export default props => ( <Card my={[3]} wrap> - <Flex align="streach" width={[1, 1, 1 / 4]}> - <img - className="eventPhoto" - src={`https://res.cloudinary.com/coderplex/image/fetch/w_200,h_150/${props.image}`} - srcSet={`https://res.cloudinary.com/coderplex/image/fetch/w_300,h_200/${ - props.image - } 720w, https://res.cloudinary.com/coderplex/image/fetch/w_200,h_150/${props.image} 1024w`} - /> - </Flex> - <Box className="eventDetails" width={[1, 1, 3 / 4]}> + {props.showImg && ( + <Flex align="streach" width={[1, 1, 1 / 4]}> + <img + className="eventPhoto" + src={`https://res.cloudinary.com/coderplex/image/fetch/w_200,h_150/${props.image}`} + srcSet={`https://res.cloudinary.com/coderplex/image/fetch/w_300,h_200/${ + props.image + } 720w, https://res.cloudinary.com/coderplex/image/fetch/w_200,h_150/${props.image} 1024w`} + /> + </Flex> + )} + <Box className="eventDetails" width={props.showImg ? [1, 1, 3 / 4] : [1, 1, 1]}> <Flex className="eventDetails" column justify="space-between"> <CardTitle inverted color="#222" px={[2]} py={[1]} m={0}> {truncateString(props.name, 64)} </CardTitle> - <Box fontSize={[12, 14, 16]} className="secondaryText" px={[2]} my={[1, 1, 0]}> + <Box fontSize={[12, 14, 16]} className="secondaryText" px={[2]} my={props.showImg ? [1, 1, 0] : [1, 1, 1]}> <LocationIcon className="icons" /> <span>{truncateString(props.location, 55)}</span> </Box> <Box px={2} pb={[2, 1]}> <Flex wrap> - <Box fontSize={[12, 14, 16]} width={[1, 1, 0.38]} className="secondaryText" pr={1} mr={[0]} my={[1, 1, 0]}> + <Box + fontSize={[12, 14, 16]} + width={props.showImg ? [1, 1, 0.38] : [1, 1, 1 / 2]} + className="secondaryText" + pr={1} + mr={[0]} + my={props.showImg ? [1, 1, 0] : [1, 1, 1]}> <TimeIcon className="icons" /> <span>{format(props.time, "ddd MMM Do 'YY, h:mm A")}</span> </Box> - <Box fontSize={[12, 14, 16]} width={[1, 1, 0.24]} className="secondaryText" pr={1} mx={[0]} my={[1, 1, 0]}> + <Box + fontSize={[12, 14, 16]} + width={props.showImg ? [1, 1, 0.24] : [1, 1, 1 / 2]} + className="secondaryText" + pr={1} + mx={[0]} + my={props.showImg ? [1, 1, 0] : [1, 1, 1]}> <AttendeesIcon className="icons" /> <span>{props.tense === 'past' ? `${props.attendees} attended` : `${props.attendees} attending`}</span> </Box> - <Box fontSize={[12, 14, 16]} width={[1, 1, 0.21]} className="secondaryText" pr={1} mx={[0]} my={[1, 1, 0]}> + <Box + fontSize={[12, 14, 16]} + width={props.showImg ? [1, 1, 0.21] : [1, 1, 1 / 2]} + className="secondaryText" + pr={1} + mx={[0]} + my={props.showImg ? [1, 1, 0] : [1, 1, 1]}> {props.online ? <StreamIcon className="icons" /> : <TicketIcon className="icons" />} <span>{props.online ? 'Free session' : 'Free entry'}</span> </Box> - <Box fontSize={[12, 14, 16]} width={[1, 1, 0.17]} mt={[1, 1, 0]} className="rsvp"> + <Box + fontSize={[12, 14, 16]} + width={props.showImg ? [1, 1, 0.17] : [1, 1, 1 / 2]} + mt={props.showImg ? [1, 1, 0] : [1, 1, 1]} + className="rsvp"> <Button href={props.link} inverted medium> {props.tense === 'past' ? 'View' : 'RSVP'} </Button> diff --git a/pages/events.js b/pages/events.js index b92ad9438..eadae11bb 100644 --- a/pages/events.js +++ b/pages/events.js @@ -98,6 +98,7 @@ export default class Events extends React.Component { : event.featured_photo ? event.featured_photo.photo_link : imagePlaceholderURL; return ( <EventCard + showImg key={event.id} image={imageSrc} name={event.name} diff --git a/pages/index.js b/pages/index.js index 71728fe13..95a4d878e 100644 --- a/pages/index.js +++ b/pages/index.js @@ -9,7 +9,17 @@ import Hide, { Container, Button, Title, SubTitle, breakpoints } from '../utils/ import { listOfSubjects } from '../utils/mock-data'; import Layout from '../components/common/layout'; import SubjectCard from '../components/learn/subject-card'; -import { heroPatternURL, heroBannerURL, spaceCoverURL, eventsCoverURL } from '../utils/urls'; +import EventCard from '../components/events/event-card'; + +import { + baseEventsURL, + indexPageEventURL, + heroPatternURL, + heroBannerURL, + spaceCoverURL, + eventsCoverURL, + imagePlaceholderURL, +} from '../utils/urls'; const HeroSection = styled.section` ${space}; @@ -72,6 +82,7 @@ const EventsSection = styled.section` color: #fff; position: relative; text-align: left; + padding-bottom: 30px; & img { width: 100%; min-height: 427px; @@ -121,6 +132,72 @@ const SpaceOverlay = styled.div` } `; +class UpcomingEvent extends React.Component { + state = { + events: null, + loading: true, + fetchError: null, + }; + async componentDidMount() { + try { + let events; + const eventsResponse = await fetch(`${baseEventsURL}${indexPageEventURL}`); + if (eventsResponse.ok) { + events = await eventsResponse.json(); + } else { + throw new Error('Failed to Retrieve past events'); + } + await this.setState({ + events, + fetchError: null, + loading: false, + }); + } catch (err) { + console.log(err); + await this.setState({ + event: null, + fetchError: err.message, + loading: false, + }); + } + } + render() { + const { loading, events } = this.state; + if (loading) { + return ( + <SubTitle inverted color="#222"> + Loading.. + </SubTitle> + ); + } else if (events.length === 0) { + return <img src={eventsCoverURL} alt="events__pic" />; + } else if (events === null) { + return <img src={eventsCoverURL} alt="events__pic" />; + } + return ( + <div> + {events.slice(0, 1).map(event => { + const regexForImageSrc = /<img.*?src="([^">]*\/([^">]*?))".*?>/g; + const imageSrc = regexForImageSrc.exec(event.description); + return ( + <EventCard + key={event.id} + image={imageSrc ? imageSrc[1] : imagePlaceholderURL} + name={event.name} + location={event.venue ? event.venue.name : 'Online'} + online={!event.venue} + time={event.time} + attendees={event.yes_rsvp_count} + tense={event.status} + link={event.link} + /> + ); + })} + </div> + ); + } +} + export default () => ( <Layout> <HeroSection pb={[2, 4]} px={[2, 1]}> @@ -197,7 +274,7 @@ export default () => ( <Flex align="center" justify="center" wrap> <Box order={[2, 2, 1]} width={[1, 1, 1 / 2]} px={[4, 4, 3]}> <Hide sm xs> - <img src={eventsCoverURL} alt="events__pic" /> + <UpcomingEvent /> </Hide> </Box> <Box order={1} width={[1, 1, 1 / 2]} px={[2, 3]} pt={[3, 4, 0]} pb={[4, 4, 0]}> @@ -209,7 +286,7 @@ export default () => ( </SubTitle> <Box className="box" width={[1]} pt={[2]} px={[3, 0]}> <Hide md lg> - <img src={eventsCoverURL} alt="events__pic" /> + <UpcomingEvent /> </Hide> <Link href={'/events'}> <Button href={'/events'} medium> From eb199661162c4e837cf40cfff5a30ade435ca814 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" <greenkeeper[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2017 11:38:22 +0000 Subject: [PATCH 40/45] chore(package): update jest to version 22.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d2b93f643..b5572a655 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "eslint-config-prettier": "^2.3.0", "eslint-plugin-react": "^7.1.0", "husky": "^0.14.3", - "jest": "^21.2.1", + "jest": "^22.0.0", "lint-staged": "^6.0.0", "markdownlint-cli": "^0.5.0", "opn": "^5.1.0", From 8046419e028bb2c6d5ee20ab7e45c76ca90b2871 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" <support@greenkeeper.io> Date: Mon, 18 Dec 2017 12:04:27 +0000 Subject: [PATCH 41/45] chore(package): update lockfile https://npm.im/greenkeeper-lockfile --- yarn.lock | 563 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 335 insertions(+), 228 deletions(-) diff --git a/yarn.lock b/yarn.lock index 81c154b0b..71629fe61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,14 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.35.tgz#04eeb6dca7efef8f65776a4c214157303b85ad51" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + "@babel/helper-function-name@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" @@ -139,11 +147,11 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" -acorn-globals@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" +acorn-globals@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" dependencies: - acorn "^4.0.4" + acorn "^5.0.0" acorn-jsx@^3.0.0: version "3.0.1" @@ -155,11 +163,11 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.3, acorn@^4.0.4: +acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.1.1, acorn@^5.2.1: +acorn@^5.0.0, acorn@^5.1.1, acorn@^5.1.2, acorn@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" @@ -604,12 +612,12 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e" +babel-jest@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.0.tgz#4da5fbaec0597d454430bd0166f09d1287c6fe39" dependencies: - babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^21.2.0" + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.0.0" babel-loader@7.1.2: version "7.1.2" @@ -649,7 +657,7 @@ babel-plugin-emotion@^8.0.10: source-map "^0.5.7" touch "^1.0.0" -babel-plugin-istanbul@^4.0.0: +babel-plugin-istanbul@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: @@ -657,9 +665,9 @@ babel-plugin-istanbul@^4.0.0: istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" -babel-plugin-jest-hoist@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" +babel-plugin-jest-hoist@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.0.tgz#30859d15453a324aee01264be9c522802f8ba512" babel-plugin-lodash@^3.2.11: version "3.3.2" @@ -1016,11 +1024,11 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-jest@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638" +babel-preset-jest@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.0.tgz#6c93d9791030ba2b7ebb4c814b4c243bf29afb36" dependencies: - babel-plugin-jest-hoist "^21.2.0" + babel-plugin-jest-hoist "^22.0.0" babel-plugin-syntax-object-rest-spread "^6.13.0" babel-preset-react@6.24.1: @@ -1137,6 +1145,10 @@ binary-extensions@^1.0.0: version "1.10.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" +bindings@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + bl@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" @@ -1225,6 +1237,10 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" @@ -2032,6 +2048,10 @@ detect-libc@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + diff@^3.2.0: version "3.4.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" @@ -2095,6 +2115,10 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" +domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.0.tgz#81fe5df81b3f057052cde3a9fa9bf536a85b9ab0" + domhandler@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" @@ -2276,12 +2300,6 @@ errno@^0.1.2, errno@^0.1.3: dependencies: prr "~0.0.0" -errno@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.5.tgz#a563781a6052bc2c9ccd89e8cef0eb9506e0c321" - dependencies: - prr "~1.0.1" - error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -2300,7 +2318,7 @@ error-stack-parser@^2.0.0: dependencies: stackframe "^1.0.3" -es-abstract@^1.6.1, es-abstract@^1.7.0: +es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: @@ -2388,7 +2406,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@^1.6.1: +escodegen@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" dependencies: @@ -2664,15 +2682,15 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b" +expect@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.0.tgz#bd2ba3cb7de3cc9724b85107ad7f4e0e7b6f1bbc" dependencies: ansi-styles "^3.2.0" - jest-diff "^21.2.1" - jest-get-type "^21.2.0" - jest-matcher-utils "^21.2.1" - jest-message-util "^21.2.1" + jest-diff "^22.0.0" + jest-get-type "^22.0.0" + jest-matcher-utils "^22.0.0" + jest-message-util "^22.0.0" jest-regex-util "^21.2.0" express@^4.15.2: @@ -3902,7 +3920,7 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.1: +istanbul-api@^1.1.14: version "1.2.1" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" dependencies: @@ -3918,7 +3936,7 @@ istanbul-api@^1.1.1: mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: +istanbul-lib-coverage@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" @@ -3928,7 +3946,7 @@ istanbul-lib-hook@^1.1.0: dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1: +istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" dependencies: @@ -3949,7 +3967,7 @@ istanbul-lib-report@^1.1.2: path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2: +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" dependencies: @@ -3965,137 +3983,156 @@ istanbul-reports@^1.1.3: dependencies: handlebars "^4.0.3" -jest-changed-files@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29" +jest-changed-files@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.0.tgz#14c5e76764040009af149c99384017867675920a" dependencies: throat "^4.0.0" -jest-cli@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.2.1.tgz#9c528b6629d651911138d228bdb033c157ec8c00" +jest-cli@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.0.tgz#0a4a55738a7ca66ded52fc9a5317caca4a4d3022" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" glob "^7.1.2" graceful-fs "^4.1.11" is-ci "^1.0.10" - istanbul-api "^1.1.1" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^21.2.0" - jest-config "^21.2.1" - jest-environment-jsdom "^21.2.1" - jest-haste-map "^21.2.0" - jest-message-util "^21.2.1" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.0.0" + jest-config "^22.0.0" + jest-environment-jsdom "^22.0.0" + jest-get-type "^22.0.0" + jest-haste-map "^22.0.0" + jest-message-util "^22.0.0" jest-regex-util "^21.2.0" jest-resolve-dependencies "^21.2.0" - jest-runner "^21.2.1" - jest-runtime "^21.2.1" - jest-snapshot "^21.2.1" - jest-util "^21.2.1" + jest-runner "^22.0.0" + jest-runtime "^22.0.0" + jest-snapshot "^22.0.0" + jest-util "^22.0.0" + jest-worker "^22.0.0" micromatch "^2.3.11" - node-notifier "^5.0.2" - pify "^3.0.0" + node-notifier "^5.1.2" + realpath-native "^1.0.0" + rimraf "^2.5.4" slash "^1.0.0" string-length "^2.0.0" strip-ansi "^4.0.0" which "^1.2.12" - worker-farm "^1.3.1" - yargs "^9.0.0" + yargs "^10.0.3" -jest-config@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.2.1.tgz#c7586c79ead0bcc1f38c401e55f964f13bf2a480" +jest-config@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.0.tgz#cb99d6bf9a6632792993ee399eb1c7b7efd20496" dependencies: chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^21.2.1" - jest-environment-node "^21.2.1" - jest-get-type "^21.2.0" - jest-jasmine2 "^21.2.1" + jest-environment-jsdom "^22.0.0" + jest-environment-node "^22.0.0" + jest-get-type "^22.0.0" + jest-jasmine2 "^22.0.0" jest-regex-util "^21.2.0" - jest-resolve "^21.2.0" - jest-util "^21.2.1" - jest-validate "^21.2.1" - pretty-format "^21.2.1" + jest-resolve "^22.0.0" + jest-util "^22.0.0" + jest-validate "^22.0.0" + pretty-format "^22.0.0" -jest-diff@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" +jest-diff@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.0.tgz#31e7771f6d55f42fb410789f7743972dc342c073" dependencies: chalk "^2.0.1" diff "^3.2.0" - jest-get-type "^21.2.0" - pretty-format "^21.2.1" + jest-get-type "^22.0.0" + pretty-format "^22.0.0" -jest-docblock@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" +jest-docblock@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.0.tgz#2e6a79360172b90bd2cd235a4832e38388b3b658" + dependencies: + detect-newline "^2.1.0" -jest-environment-jsdom@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz#38d9980c8259b2a608ec232deee6289a60d9d5b4" +jest-environment-jsdom@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.0.tgz#d7787c1c934111d3d6f1881e15bdcfdaefe41abe" dependencies: - jest-mock "^21.2.0" - jest-util "^21.2.1" - jsdom "^9.12.0" + jest-mock "^22.0.0" + jest-util "^22.0.0" + jsdom "^11.5.1" -jest-environment-node@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8" +jest-environment-node@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.0.tgz#ecece15308d8b3db1c3702bec39434a4185f557d" dependencies: - jest-mock "^21.2.0" - jest-util "^21.2.1" + jest-mock "^22.0.0" + jest-util "^22.0.0" jest-get-type@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" -jest-haste-map@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" +jest-get-type@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.0.tgz#d49b734cb91b66204cf6cb726d81c64c77684b1c" + +jest-haste-map@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.0.tgz#aa0730a16a07c287100c0c213c118dc9a4255d2d" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" - jest-docblock "^21.2.0" + jest-docblock "^22.0.0" + jest-worker "^22.0.0" micromatch "^2.3.11" sane "^2.0.0" - worker-farm "^1.3.1" -jest-jasmine2@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz#9cc6fc108accfa97efebce10c4308548a4ea7592" +jest-jasmine2@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.0.tgz#13d0ec186bcae2d87c64cf72dafec70de5423313" dependencies: + callsites "^2.0.0" chalk "^2.0.1" - expect "^21.2.1" + expect "^22.0.0" graceful-fs "^4.1.11" - jest-diff "^21.2.1" - jest-matcher-utils "^21.2.1" - jest-message-util "^21.2.1" - jest-snapshot "^21.2.1" - p-cancelable "^0.3.0" + jest-diff "^22.0.0" + jest-matcher-utils "^22.0.0" + jest-message-util "^22.0.0" + jest-snapshot "^22.0.0" + source-map-support "^0.5.0" -jest-matcher-utils@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" +jest-leak-detector@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.0.tgz#e2fee3674f4c2d62f538c4935a8fe146764cec39" + dependencies: + pretty-format "^22.0.0" + optionalDependencies: + weak "^1.0.1" + +jest-matcher-utils@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.0.tgz#dc1c69863ebf840d1276f3b66258d47755343183" dependencies: chalk "^2.0.1" - jest-get-type "^21.2.0" - pretty-format "^21.2.1" + jest-get-type "^22.0.0" + pretty-format "^22.0.0" -jest-message-util@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" +jest-message-util@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.0.tgz#68df008cfbdd0234792d28363df6e1309944ef33" dependencies: + "@babel/code-frame" "^7.0.0-beta.35" chalk "^2.0.1" micromatch "^2.3.11" slash "^1.0.0" + stack-utils "^1.0.1" -jest-mock@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f" +jest-mock@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.0.tgz#f8e17b36d0f4c430a16d90d531c5f2308f2ebee6" jest-regex-util@^21.2.0: version "21.2.0" @@ -4107,75 +4144,75 @@ jest-resolve-dependencies@^21.2.0: dependencies: jest-regex-util "^21.2.0" -jest-resolve@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.2.0.tgz#068913ad2ba6a20218e5fd32471f3874005de3a6" +jest-resolve@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.0.tgz#2210a11aeaac3b521508d0b5bb25d908a00823df" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" - is-builtin-module "^1.0.0" -jest-runner@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467" - dependencies: - jest-config "^21.2.1" - jest-docblock "^21.2.0" - jest-haste-map "^21.2.0" - jest-jasmine2 "^21.2.1" - jest-message-util "^21.2.1" - jest-runtime "^21.2.1" - jest-util "^21.2.1" - pify "^3.0.0" +jest-runner@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.0.tgz#4f4a5b8ceb7532d01ebe1dc151cfcb208ca1fbcb" + dependencies: + jest-config "^22.0.0" + jest-docblock "^22.0.0" + jest-haste-map "^22.0.0" + jest-jasmine2 "^22.0.0" + jest-leak-detector "^22.0.0" + jest-message-util "^22.0.0" + jest-runtime "^22.0.0" + jest-util "^22.0.0" + jest-worker "^22.0.0" throat "^4.0.0" - worker-farm "^1.3.1" -jest-runtime@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.2.1.tgz#99dce15309c670442eee2ebe1ff53a3cbdbbb73e" +jest-runtime@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.0.tgz#42a3defd6fc138fc1cdf4dadb84426bc3932ddd1" dependencies: babel-core "^6.0.0" - babel-jest "^21.2.0" - babel-plugin-istanbul "^4.0.0" + babel-jest "^22.0.0" + babel-plugin-istanbul "^4.1.5" chalk "^2.0.1" convert-source-map "^1.4.0" graceful-fs "^4.1.11" - jest-config "^21.2.1" - jest-haste-map "^21.2.0" + jest-config "^22.0.0" + jest-haste-map "^22.0.0" jest-regex-util "^21.2.0" - jest-resolve "^21.2.0" - jest-util "^21.2.1" + jest-resolve "^22.0.0" + jest-util "^22.0.0" json-stable-stringify "^1.0.1" micromatch "^2.3.11" + realpath-native "^1.0.0" slash "^1.0.0" strip-bom "3.0.0" write-file-atomic "^2.1.0" - yargs "^9.0.0" + yargs "^10.0.3" -jest-snapshot@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.2.1.tgz#29e49f16202416e47343e757e5eff948c07fd7b0" +jest-snapshot@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.0.tgz#c8913006bcd604f10a6174a2378683cea889138c" dependencies: chalk "^2.0.1" - jest-diff "^21.2.1" - jest-matcher-utils "^21.2.1" + jest-diff "^22.0.0" + jest-matcher-utils "^22.0.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^21.2.1" + pretty-format "^22.0.0" -jest-util@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78" +jest-util@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.0.tgz#8e73c88f482825e6b10caf0f93f144bae5841938" dependencies: callsites "^2.0.0" chalk "^2.0.1" graceful-fs "^4.1.11" - jest-message-util "^21.2.1" - jest-mock "^21.2.0" - jest-validate "^21.2.1" + is-ci "^1.0.10" + jest-message-util "^22.0.0" + jest-validate "^22.0.0" mkdirp "^0.5.1" -jest-validate@^21.1.0, jest-validate@^21.2.1: +jest-validate@^21.1.0: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" dependencies: @@ -4184,11 +4221,26 @@ jest-validate@^21.1.0, jest-validate@^21.2.1: leven "^2.1.0" pretty-format "^21.2.1" -jest@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-21.2.1.tgz#c964e0b47383768a1438e3ccf3c3d470327604e1" +jest-validate@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.0.tgz#ba17b0422deef40d8937b35a85f4c8912e4e673b" dependencies: - jest-cli "^21.2.1" + chalk "^2.0.1" + jest-get-type "^22.0.0" + leven "^2.1.0" + pretty-format "^22.0.0" + +jest-worker@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.0.tgz#4a276938a2077e1d72b6a2acd1d43826a9fd07f8" + dependencies: + merge-stream "^1.0.1" + +jest@22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.0.0.tgz#a75b19d4d43579bc9eb0ec1eff5a6296975c3757" + dependencies: + jest-cli "^22.0.0" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" @@ -4209,28 +4261,33 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdom@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" +jsdom@^11.5.1: + version "11.5.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.5.1.tgz#5df753b8d0bca20142ce21f4f6c039f99a992929" dependencies: abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" + acorn "^5.1.2" + acorn-globals "^4.0.0" array-equal "^1.0.0" + browser-process-hrtime "^0.1.2" content-type-parser "^1.0.1" cssom ">= 0.3.2 < 0.4.0" cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" + domexception "^1.0.0" + escodegen "^1.9.0" html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "^3.0.2" + pn "^1.0.0" + request "^2.83.0" + request-promise-native "^1.0.3" sax "^1.2.1" symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" + tough-cookie "^2.3.3" + webidl-conversions "^4.0.2" whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" + whatwg-url "^6.3.0" xml-name-validator "^2.0.1" jsesc@^1.3.0: @@ -4336,6 +4393,10 @@ lcov-parse@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" +left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -4555,6 +4616,10 @@ lodash.snakecase@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + lodash.take@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.take/-/lodash.take-4.1.1.tgz#0b4146dcb7a70c6153495187fc10b12b71fefadf" @@ -4762,6 +4827,12 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -4907,6 +4978,10 @@ mz@2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" +nan@^2.0.5: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + nan@^2.3.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" @@ -5038,7 +5113,7 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-notifier@^5.0.2: +node-notifier@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" dependencies: @@ -5195,7 +5270,7 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -"nwmatcher@>= 1.3.9 < 2.0.0": +nwmatcher@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" @@ -5236,6 +5311,13 @@ object.entries@^1.0.4: function-bind "^1.1.0" has "^1.0.1" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -5344,10 +5426,6 @@ osenv@^0.1.0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -5441,11 +5519,7 @@ parse-json@^3.0.0: dependencies: error-ex "^1.3.1" -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" - -parse5@^3.0.1: +parse5@^3.0.1, parse5@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" dependencies: @@ -5594,6 +5668,10 @@ pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +pn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.0.0.tgz#1cf5a30b0d806cd18f88fc41a6b5d4ad615b3ba9" + preact-compat@^3.17.0: version "3.17.0" resolved "https://registry.yarnpkg.com/preact-compat/-/preact-compat-3.17.0.tgz#528cfdfc301190c1a0f47567336be1f4be0266b3" @@ -5648,6 +5726,13 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" +pretty-format@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.0.tgz#3c1da8d100e7e0b0ff1d839f4743b002d5907531" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + pretty-format@^3.5.1: version "3.8.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" @@ -5712,10 +5797,6 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5738,6 +5819,10 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + q@^1.4.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -5987,6 +6072,12 @@ readline2@^1.0.1: is-fullwidth-code-point "^1.0.0" mute-stream "0.0.5" +realpath-native@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + dependencies: + util.promisify "^1.0.0" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -6130,6 +6221,20 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -6157,7 +6262,7 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.72.0, request@^2.74.0, request@^2.79.0: +request@^2.72.0, request@^2.74.0, request@^2.83.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: @@ -6318,7 +6423,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -6568,6 +6673,12 @@ source-map-support@0.4.18, source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-support@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab" + dependencies: + source-map "^0.6.0" + source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -6582,7 +6693,7 @@ source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, sour version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -6642,6 +6753,10 @@ ssri@^4.1.2: dependencies: safe-buffer "^5.1.0" +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + stackframe@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" @@ -6666,6 +6781,10 @@ statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -7003,15 +7122,17 @@ touch@^1.0.0: dependencies: nopt "~1.0.10" -tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" traverse@^0.6.6: version "0.6.6" @@ -7264,6 +7385,13 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + util@0.10.3, util@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -7359,11 +7487,14 @@ watchpack@^1.4.0: chokidar "^1.7.0" graceful-fs "^4.1.2" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" +weak@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/weak/-/weak-1.0.1.tgz#ab99aab30706959aa0200cb8cf545bb9cb33b99e" + dependencies: + bindings "^1.2.1" + nan "^2.0.5" -webidl-conversions@^4.0.0: +webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -7446,12 +7577,13 @@ whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" -whatwg-url@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" +whatwg-url@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" which-module@^2.0.0: version "2.0.0" @@ -7491,13 +7623,6 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -worker-farm@^1.3.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" - dependencies: - errno "^0.1.4" - xtend "^4.0.1" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -7673,24 +7798,6 @@ yargs@^8.0.2: y18n "^3.2.1" yargs-parser "^7.0.0" -yargs@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From acae377b4a648c0422dece9bbed8a3db3b7dd63e Mon Sep 17 00:00:00 2001 From: z <ahmedzubair216@gmail.com> Date: Tue, 19 Dec 2017 01:11:34 +0530 Subject: [PATCH 42/45] react added --- pages/learn/subject.js | 38 +++-- utils/mock-data.js | 310 +++++++++++++++++++++-------------------- 2 files changed, 188 insertions(+), 160 deletions(-) diff --git a/pages/learn/subject.js b/pages/learn/subject.js index 159ed6162..67694093a 100644 --- a/pages/learn/subject.js +++ b/pages/learn/subject.js @@ -12,7 +12,7 @@ import BannerSection from '../../components/learn/subject-banner'; import SyllabusTree from '../../components/learn/syllabus-tree/syllabus-tree-container'; import SubjectMarkdown from '../../components/learn/subject-marked'; -import { laravelSyllabus } from '../../utils/mock-data'; +import { laravelSyllabus, reactSyllabus } from '../../utils/mock-data'; const CurriculumSection = styled.section` ${baseContainer}; @@ -56,21 +56,37 @@ const Fab = styled.div` } `; -const defaultChapter = laravelSyllabus[0].chapters[0]; - export default class Subject extends React.Component { constructor(props) { super(props); this.state = { + activeSubject: this.selectSubject(this.props.url.query.id), activeChapterContent: '', - activeChapterName: defaultChapter.name, + activeChapterName: + this.selectSubject(this.props.url.query.id) === null + ? '' + : this.selectSubject(this.props.url.query.id)[0].chapters[0].name, loading: true, isSidebarOpen: true, }; } + selectSubject(openedGuide) { + switch (openedGuide) { + case 'laravel': + return laravelSyllabus; + case 'reactjs': + return reactSyllabus; + default: + return null; + } + } + componentDidMount() { - this.getChapterContent(defaultChapter); + if (this.state.activeSubject !== null) { + const defaultChapter = this.state.activeSubject[0].chapters[0]; + this.getChapterContent(defaultChapter); + } } changeChapter = selectedChapter => { @@ -91,7 +107,11 @@ export default class Subject extends React.Component { } render() { - return this.props.url.query.id === 'laravel' ? ( + return this.state.activeSubject === null ? ( + <Layout> + <Title inverted>Curriculum for {this.props.url.query.id} and others Coming soon!! + + ) : (
Table of content
- +
) : null} @@ -121,10 +141,6 @@ export default class Subject extends React.Component {
- ) : ( - - Curriculum for {this.props.url.query.id} and others Coming soon!! - ); } } diff --git a/utils/mock-data.js b/utils/mock-data.js index 469c10e66..5d6a0f4b3 100644 --- a/utils/mock-data.js +++ b/utils/mock-data.js @@ -7,7 +7,7 @@ export const listOfSubjects = [ subjectId: 'laravel', icon: 'devicon-laravel-plain colored', learningCount: '20', - learnGuideStatus: true, + isGuideCompleted: true, }, { id: '213', @@ -17,7 +17,7 @@ export const listOfSubjects = [ subjectId: 'reactjs', icon: 'devicon-react-original colored', learningCount: '28', - learnGuideStatus: false, + isGuideCompleted: true, }, { id: '2131', @@ -27,7 +27,7 @@ export const listOfSubjects = [ subjectId: 'go', icon: 'devicon-go-plain colored', learningCount: '7', - learnGuideStatus: false, + isGuideCompleted: false, }, { id: '21fa3', @@ -37,7 +37,7 @@ export const listOfSubjects = [ subjectId: 'android', icon: 'devicon-android-plain colored', learningCount: '9', - learnGuideStatus: false, + isGuideCompleted: false, }, { id: '21afasda3', @@ -47,7 +47,7 @@ export const listOfSubjects = [ subjectId: 'rails', icon: 'devicon-rails-plain colored', learningCount: '14', - learnGuideStatus: false, + isGuideCompleted: false, }, { id: '21wqerwqe3', @@ -57,7 +57,7 @@ export const listOfSubjects = [ subjectId: 'python', icon: 'devicon-python-plain colored', learningCount: '32', - learnGuideStatus: false, + isGuideCompleted: false, }, { id: '2bxcvbx13', @@ -67,7 +67,7 @@ export const listOfSubjects = [ subjectId: 'ios', icon: 'devicon-swift-plain colored', learningCount: '45', - learnGuideStatus: false, + isGuideCompleted: false, }, { id: '2bxczzxcvbx13', @@ -77,7 +77,7 @@ export const listOfSubjects = [ subjectId: 'javascript', icon: 'devicon-javascript-plain colored', learningCount: '31', - learnGuideStatus: false, + isGuideCompleted: false, }, { id: '2bxdfasczzxcvbx13', @@ -87,150 +87,10 @@ export const listOfSubjects = [ subjectId: 'angular', icon: 'devicon-angularjs-plain colored', learningCount: '3', - learnGuideStatus: false, + isGuideCompleted: false, }, ]; -export const indexPageLearns = [ - { - link: 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/Libraries%20%26%20Frameworks/Learn-React.md', - title: 'ReactJS', - subject: 'Frontend Web Development', - image: '', - }, - { - link: 'https://github.com/coderplex/learn/blob/master/web-dev/Backend/Learn-Laravel.md', - title: 'Laravel', - subject: 'Backend Web Development', - image: '', - }, - { - link: 'https://github.com/coderplex/learn/blob/master/programming-languages/Go/learn-go.md', - title: 'Go', - subject: 'Programming Language', - image: '', - }, - { - link: 'https://github.com/coderplex/learn/blob/master/computer-science/Learn-CS.md', - title: 'Introduction to C.S', - subject: 'Computer Science', - image: '', - }, - { - link: 'https://github.com/coderplex/learn/blob/master/Blockchain/blockchain-basics.md', - title: 'Blockchain', - subject: 'Decentralized Systems', - image: '', - }, - { - link: 'https://github.com/coderplex/learn/blob/master/mobile-dev/Android/learn-android.md', - title: 'Android', - subject: 'Mobile Development', - image: '', - }, -]; - -export const listOfDomains = [ - 'All', - 'Computer Science', - 'Programming Language', - 'Web Development', - 'Mobile Technology', - 'Data Science', - 'Artificial Intelligence', - 'BlockChain', -]; - -export const contentsOfLaravel = { - overview: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/overview.md', - guides: [ - { - name: 'Prerequisites', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/0.md', - }, - { - name: 'Introduction to MVC architecture', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/1.md', - }, - { - name: 'Models,Views,Controllers and Routes', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/2.md', - }, - { - name: 'FrontEnd', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/3.md', - }, - { - name: 'Relationships', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/4.md', - }, - { - name: 'Authentication', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/5.md', - }, - { - name: 'View Composers and Archives', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/6.md', - }, - { - name: 'Testing & Seeding', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/7.md', - }, - { - name: 'Final Project', - url: 'https://cdn.rawgit.com/coderplex/learn/cdn/cdn/laravel/guide/8.md', - }, - ], - contributors: [ - { - userName: 'P Bhanu Teja', - userPage: 'https://github.com/pbteja1998', - userImage: 'https://avatars0.githubusercontent.com/u/17903466?s=400&v=4', - contributions: [ - { - type: 'topic', - count: '20', - }, - { - type: 'article', - count: '30', - }, - { - type: 'video', - count: '25', - }, - ], - }, - { - userName: 'M Zubair Ahmed', - userPage: 'https://github.com/M-ZubairAhmed', - userImage: - 'https://avatars0.githubusercontent.com/u/17708702?s=400&u=032075b378bf6d82da48725b9ce5f31c7a6469fa&v=4', - contributions: [ - { - type: 'topic', - count: '2', - }, - ], - }, - { - userName: 'Vinay Puppal', - userPage: 'https://www.vinaypuppal.com/', - userImage: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/214440/profile/profile-512.jpg?2', - contributions: [ - { - type: 'topic', - count: '4', - }, - { - type: 'article', - count: '2', - }, - ], - }, - ], -}; - export const laravelSyllabus = [ { unit: { @@ -386,3 +246,155 @@ export const laravelSyllabus = [ ], }, ]; + +export const reactSyllabus = [ + { + unit: { + name: 'Preface', + }, + chapters: [ + { + name: 'Choosing ReactJS', + url: 'https://rawgit.com/coderplex/learn/cdn/react/choosing-reactjs.md', + }, + { + name: 'Prerequisites', + url: 'https://rawgit.com/coderplex/learn/cdn/react/prerequisites.md', + }, + { + name: 'Philosophy', + url: 'https://rawgit.com/coderplex/learn/cdn/react/philosophy.md', + }, + ], + }, + { + unit: { + name: 'Getting Started', + }, + chapters: [ + { + name: 'Trying React', + url: 'https://rawgit.com/coderplex/learn/cdn/react/trying-react.md', + }, + { + name: 'Create React App', + url: 'https://rawgit.com/coderplex/learn/cdn/react/create-react-app.md', + }, + { + name: 'JavaScript XML Syntax', + url: 'https://rawgit.com/coderplex/learn/cdn/react/javascript-xml-syntax.md', + }, + ], + }, + { + unit: { + name: 'Components', + }, + chapters: [ + { + name: 'Custom Components', + url: 'https://rawgit.com/coderplex/learn/cdn/react/custom-components.md', + }, + { + name: 'Rendering', + url: 'https://rawgit.com/coderplex/learn/cdn/react/rendering.md', + }, + { + name: 'Conditional Rendering', + url: 'https://rawgit.com/coderplex/learn/cdn/react/conditional-rendering.md', + }, + { + name: 'Data Flow', + url: 'https://rawgit.com/coderplex/learn/cdn/react/data-flow.md', + }, + { + name: 'Lifecycle', + url: 'https://rawgit.com/coderplex/learn/cdn/react/lifecycle.md', + }, + { + name: 'Events', + url: 'https://rawgit.com/coderplex/learn/cdn/react/events.md', + }, + ], + }, + { + unit: { + name: 'Forms', + }, + chapters: [ + { + name: 'Controlled Components', + url: 'https://rawgit.com/coderplex/learn/cdn/react/controlled-components.md', + }, + { + name: 'Uncontrolled Components', + url: 'https://rawgit.com/coderplex/learn/cdn/react/uncontrolled-components.md', + }, + ], + }, + { + unit: { + name: 'Composition', + }, + chapters: [ + { + name: 'Lifting State Up', + url: 'https://rawgit.com/coderplex/learn/cdn/react/lifting-state-up.md', + }, + { + name: 'Composition vs Inheritance', + url: 'https://rawgit.com/coderplex/learn/cdn/react/composition-vs-inheritance.md', + }, + { + name: 'Context', + url: 'https://rawgit.com/coderplex/learn/cdn/react/context.md', + }, + ], + }, + { + unit: { + name: 'Tools', + }, + chapters: [ + { + name: 'Developer Tools', + url: 'https://rawgit.com/coderplex/learn/cdn/react/developer-tools.md', + }, + { + name: 'Proptypes', + url: 'https://rawgit.com/coderplex/learn/cdn/react/proptypes.md', + }, + { + name: 'Error Boundaries', + url: 'https://rawgit.com/coderplex/learn/cdn/react/error-boundaries.md', + }, + ], + }, + { + unit: { + name: 'In depth discussions', + }, + chapters: [ + { + name: 'JSX In Depth', + url: 'https://rawgit.com/coderplex/learn/cdn/react/jsx-in-depth.md', + }, + { + name: 'Synthetic Events', + url: 'https://rawgit.com/coderplex/learn/cdn/react/synthetic-events.md', + }, + { + name: 'React Without JSX', + url: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-jsx.md', + }, + { + name: 'React without ES6', + url: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-es6.md', + }, + { + name: 'Reconcilation - Diff Algorithm', + url: 'https://rawgit.com/coderplex/learn/cdn/react/reconcilation---diff-algorithm.md', + }, + ], + }, +]; From 4ed54d34cfb3ad30da08247db94d7a404143113d Mon Sep 17 00:00:00 2001 From: Vinay Puppal Date: Tue, 19 Dec 2017 09:22:22 +0530 Subject: [PATCH 43/45] Chapter pages and few small changes (#140) * for non completed guides direct users to github (fixes #136) * fix text color issue * implement chapter pages * name the guides as "Learn X" * change the title of the page to the title of the guide * generate export map for chapter pages * add chapter name also to learn pages title --- components/common/header/index.js | 9 +- components/learn/subject-card.js | 23 +- components/learn/subject-marked.js | 14 +- .../syllabus-tree/syllabus-tree-container.js | 154 ++++---- next.config.js | 360 ++++++++++++++++-- pages/index.js | 2 +- pages/learn/subject.js | 72 ++-- pages/login.js | 2 +- server.js | 2 +- utils/mock-data.js | 189 +++++---- 10 files changed, 590 insertions(+), 237 deletions(-) diff --git a/components/common/header/index.js b/components/common/header/index.js index 73d451384..d36375ba8 100644 --- a/components/common/header/index.js +++ b/components/common/header/index.js @@ -63,7 +63,14 @@ class NavBar extends React.Component { render() { const pathName = this.props.router.pathname; const metaData = MetaInfo[pathName === '/' ? 'home' : pathName.split('/')[1]]; - const title = metaData.title; + const title = + pathName.split('/')[1] === 'learn' && pathName.split('/')[2] + ? `${this.props.router.query.chapter.replace( + /-/gi, + ' ' + )} | Learn ${this.props.router.query.subject[0].toUpperCase() + + this.props.router.query.subject.slice(1)} | Coderplex` + : metaData.title; const description = metaData.description; const image = metaData.image; return ( diff --git a/components/learn/subject-card.js b/components/learn/subject-card.js index 25cf10ff8..d6c0a2f63 100644 --- a/components/learn/subject-card.js +++ b/components/learn/subject-card.js @@ -81,7 +81,7 @@ export default ({ subject }) => (
-

{subject.title}

+

Learn {subject.title}

{subject.domain}

@@ -95,11 +95,26 @@ export default ({ subject }) => ( 20 hours - - + + ) : ( + - + )}
); diff --git a/components/learn/subject-marked.js b/components/learn/subject-marked.js index 9b3f46444..517100dad 100644 --- a/components/learn/subject-marked.js +++ b/components/learn/subject-marked.js @@ -1,6 +1,8 @@ import React from 'react'; import marked from 'marked'; import styled from 'react-emotion'; +import ContentLoader from 'react-content-loader'; + import { breakpoints } from '../../utils/base.styles'; const Marked = styled.div` @@ -101,7 +103,17 @@ export default class MarkedJS extends React.Component { return (
{this.props.loading ? ( -
Loading...
+
+ + + + + + + + + +
) : ( true), - activeUnit: this.props.data[0].unit.name, - activeChapter: this.props.data[0].chapters[0].url, - }; +export default withRouter( + class SyllabusTree extends React.Component { + state = { + nodeStateTracker: [false, ...this.props.data.map(() => true).slice(1)], + activeUnit: this.props.data[0].unit, + activeChapter: this.props.data[0].chapters[0].cdnUrl, + }; - handleClick = i => { - this.setState({ - nodeStateTracker: [ - ...this.state.nodeStateTracker.slice(0, i), - !this.state.nodeStateTracker[i], - ...this.state.nodeStateTracker.slice(i + 1), - ], - }); - }; + handleClick = i => { + this.setState({ + nodeStateTracker: [ + ...this.state.nodeStateTracker.slice(0, i), + !this.state.nodeStateTracker[i], + ...this.state.nodeStateTracker.slice(i + 1), + ], + }); + }; - clickOnChapter(chapter, unitName) { - if (chapter.url !== this.state.activeChapter) { - this.setState({ activeChapter: chapter.url, activeUnit: unitName }); - this.props.changeChapter(chapter); + clickOnChapter(chapter, unitName) { + if (chapter.cdnUrl !== this.state.activeChapter) { + this.setState({ activeChapter: chapter.cdnUrl, activeUnit: unitName }); + this.props.changeChapter(chapter); + } } - } - render() { - const Container = styled.div` - & .chapter { - padding: 5px; - font-size: 0.85rem; - user-select: none; - border-left: 2px solid #fff; - color: #888; - :hover { + render() { + const Container = styled.div` + & .chapter { + padding: 5px; + font-size: 0.85rem; + user-select: none; + border-left: 2px solid #fff; + color: #888; + :hover { + background-color: #f5f5f5; + border-left: 2px solid #374355; + cursor: pointer; + } + } + + & .active { + color: #374355; background-color: #f5f5f5; border-left: 2px solid #374355; - cursor: pointer; + :hover { + cursor: default; + } } - } - & .active { - color: #374355; - background-color: #f5f5f5; - border-left: 2px solid #374355; - :hover { - cursor: default; + & .unit_name { + order: 1; + flex: 1 1 auto; + align-self: auto; } - } + `; - & .unit_name { - order: 1; - flex: 1 1 auto; - align-self: auto; - } - `; - - return ( - - {this.props.data.map((unitNode, i) => { - const UnitNameComponent = ( -
this.handleClick(i)}> - {unitNode.unit.name} -
- ); - return ( - this.handleClick(i)}> - {unitNode.chapters.map(chapter => ( -
this.clickOnChapter(chapter, unitNode.unit.name)}> - {chapter.name} -
- ))} -
- ); - })} -
- ); + return ( + + {this.props.data.map((unitNode, i) => { + const UnitNameComponent = ( +
this.handleClick(i)}> + {unitNode.unit} +
+ ); + return ( + this.handleClick(i)}> + {unitNode.chapters.map(chapter => ( +
this.clickOnChapter(chapter, unitNode.unit)}> + {chapter.name} +
+ ))} +
+ ); + })} +
+ ); + } } -} +); diff --git a/next.config.js b/next.config.js index de85ea17c..dabf74431 100644 --- a/next.config.js +++ b/next.config.js @@ -8,91 +8,382 @@ const listOfSubjects = [ id: '2132', title: 'Laravel', domain: 'Web Development', - url: '/learn/laravel', + path: '/learn/laravel/Choosing-laravel', subjectId: 'laravel', icon: 'devicon-laravel-plain colored', learningCount: '20', - learnGuideStatus: true, + isGuideCompleted: true, + githubUrl: 'https://github.com/coderplex/learn/blob/master/web-dev/Backend/Learn-Laravel.md', }, { id: '213', title: 'ReactJS', domain: 'Web Development', - url: '/learn/reactjs', + path: '/learn/reactjs/Choosing-ReactJS', subjectId: 'reactjs', icon: 'devicon-react-original colored', learningCount: '28', - learnGuideStatus: false, + isGuideCompleted: true, + githubUrl: + 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/Libraries%20%26%20Frameworks/Learn-React.md', }, { id: '2131', title: 'Go', domain: 'Programming Language', - url: '/learn/go', + path: '/learn/go', subjectId: 'go', - icon: 'devicon-go-plain ', + icon: 'devicon-go-plain colored', learningCount: '7', - learnGuideStatus: false, + isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/programming-languages/Go/learn-go.md', }, { id: '21fa3', title: 'Android', domain: 'Mobile Technology', - url: '/learn/android', + path: '/learn/android', subjectId: 'android', icon: 'devicon-android-plain colored', learningCount: '9', - learnGuideStatus: false, + isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/mobile-dev/Android/learn-android.md', }, { id: '21afasda3', title: 'Rails', domain: 'Backend Development', - url: '/learn/rails', + path: '/learn/rails', subjectId: 'rails', icon: 'devicon-rails-plain colored', learningCount: '14', - learnGuideStatus: false, + isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/web-dev/Backend/Learn-Rails.md', }, { id: '21wqerwqe3', title: 'Python', domain: 'Programming Language', - url: '/learn/python', + path: '/learn/python', subjectId: 'python', icon: 'devicon-python-plain colored', learningCount: '32', - learnGuideStatus: false, + isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/tree/master/programming-languages/Python', }, { id: '2bxcvbx13', title: 'iOS', domain: 'Mobile Technology', - url: '/learn/ios', + path: '/learn/ios', subjectId: 'ios', icon: 'devicon-swift-plain colored', learningCount: '45', - learnGuideStatus: false, + isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/mobile-dev/iOS/Learn-iOS.md', }, { id: '2bxczzxcvbx13', title: 'Javascript', domain: 'Programming Language', - url: '/learn/javascript', + path: '/learn/javascript', subjectId: 'javascript', icon: 'devicon-javascript-plain colored', learningCount: '31', - learnGuideStatus: false, + isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/learn-intermediate.md', }, { id: '2bxdfasczzxcvbx13', title: 'Angular', domain: 'Frontend Development', - url: '/learn/angular', + path: '/learn/angular', subjectId: 'angular', icon: 'devicon-angularjs-plain colored', learningCount: '3', - learnGuideStatus: false, + isGuideCompleted: false, + githubUrl: + 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/Libraries%20%26%20Frameworks/Learn-Angular.md', + }, +]; + +const laravelSyllabus = [ + { + unit: 'Preface', + chapters: [ + { + name: 'Choosing laravel', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/choosing-laravel.md', + }, + { + name: 'Prerequisites', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/prerequisites.md', + }, + { + name: 'Installation', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/installation.md', + }, + ], + }, + { + unit: 'Models, Views, Controllers and Routes', + chapters: [ + { + name: 'Introduction to MVC', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/introduction-to-mvc.md', + }, + { + name: 'Basic Routing and Views', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/basic-routing-and-views.md', + }, + { + name: 'Pass Data to Views', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/pass-data-to-views.md', + }, + { + name: 'Database Setup', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/database-setup.md', + }, + { + name: 'Working with Query Builder', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/working-with-query-builder.md', + }, + { + name: 'Eloquent', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent.md', + }, + { + name: 'Controllers', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/controllers.md', + }, + { + name: 'Route Model Binding', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/route-model-binding.md', + }, + ], + }, + { + unit: 'Front-End', + chapters: [ + { + name: 'Layouts and Structures', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/layouts-and-structures.md', + }, + { + name: 'Form Requests and CSRF', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-requests-and-CSRF.md', + }, + { + name: 'Form Validation', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-validation.md', + }, + { + name: 'Rendering', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/rendering', + }, + { + name: 'Laravel Mix', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/laravel-mix.md', + }, + { + name: 'Flash Messaging', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/flash-messaging.md', + }, + ], + }, + { + unit: 'Relationships', + chapters: [ + { + name: 'Eloquent Relationships', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent-relationships.md', + }, + { + name: 'One-to-Many Relationship', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/one-to-many-relationship.md', + }, + { + name: 'Pivot Tables', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/pivot-tables.md', + }, + ], + }, + { + unit: 'Authentication', + chapters: [ + { + name: 'Scaffold Authentication', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/scaffold-authentication.md', + }, + { + name: 'Manual Authentication', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/manual-authentication.md', + }, + ], + }, + { + unit: 'View Composers and Archives', + chapters: [ + { + name: 'Add Archives', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/add-archives.md', + }, + { + name: 'View Composers', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/view-composers.md', + }, + ], + }, + { + unit: 'Testing & Seeding', + chapters: [ + { + name: 'Testing', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/testing.md', + }, + { + name: 'Seeding', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/seeding.md', + }, + ], + }, +]; + +const reactSyllabus = [ + { + unit: 'Preface', + chapters: [ + { + name: 'Choosing ReactJS', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/choosing-reactjs.md', + }, + { + name: 'Prerequisites', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/prerequisites.md', + }, + { + name: 'Philosophy', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/philosophy.md', + }, + ], + }, + { + unit: 'Getting Started', + chapters: [ + { + name: 'Trying React', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/trying-react.md', + }, + { + name: 'Create React App', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/create-react-app.md', + }, + { + name: 'JavaScript XML Syntax', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/javascript-xml-syntax.md', + }, + ], + }, + { + unit: 'Components', + chapters: [ + { + name: 'Custom Components', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/custom-components.md', + }, + { + name: 'Rendering', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/rendering.md', + }, + { + name: 'Conditional Rendering', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/conditional-rendering.md', + }, + { + name: 'Data Flow', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/data-flow.md', + }, + { + name: 'Lifecycle', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/lifecycle.md', + }, + { + name: 'Events', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/events.md', + }, + ], + }, + { + unit: 'Forms', + chapters: [ + { + name: 'Controlled Components', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/controlled-components.md', + }, + { + name: 'Uncontrolled Components', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/uncontrolled-components.md', + }, + ], + }, + { + unit: 'Composition', + chapters: [ + { + name: 'Lifting State Up', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/lifting-state-up.md', + }, + { + name: 'Composition vs Inheritance', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/composition-vs-inheritance.md', + }, + { + name: 'Context', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/context.md', + }, + ], + }, + { + unit: 'Tools', + chapters: [ + { + name: 'Developer Tools', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/developer-tools.md', + }, + { + name: 'Proptypes', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/proptypes.md', + }, + { + name: 'Error Boundaries', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/error-boundaries.md', + }, + ], + }, + { + unit: 'In depth discussions', + chapters: [ + { + name: 'JSX In Depth', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/jsx-in-depth.md', + }, + { + name: 'Synthetic Events', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/synthetic-events.md', + }, + { + name: 'React Without JSX', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-jsx.md', + }, + { + name: 'React without ES6', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-es6.md', + }, + { + name: 'Reconcilation Diff Algorithm', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/reconcilation---diff-algorithm.md', + }, + ], }, ]; @@ -128,14 +419,33 @@ module.exports = { '/space': { page: '/space' }, '/login': { page: '/login' }, }; + const getSubject = subjectId => { + switch (subjectId) { + case 'laravel': + return laravelSyllabus; + case 'reactjs': + return reactSyllabus; + default: + return []; + } + }; for (const subject of listOfSubjects) { - routes[subject.url] = { - page: '/learn/subject', - query: { - id: subject.subjectId, - }, - }; + for (const unit of getSubject(subject.subjectId)) { + const chapters = unit.chapters; + for (const chapter of chapters) { + const chapterSlug = chapter.name.replace(/\s/gi, '-'); + const route = `learn/${subject.subjectId}/${chapterSlug}`; + routes[route] = { + page: '/learn/subject', + query: { + subject: subject.subjectId, + chapter: chapterSlug, + }, + }; + } + } } + console.log(routes); return routes; }, }; diff --git a/pages/index.js b/pages/index.js index 95a4d878e..e36e07076 100644 --- a/pages/index.js +++ b/pages/index.js @@ -222,7 +222,7 @@ export default () => ( {take(listOfSubjects, 4).map(subject => { - return ; + return ; })} diff --git a/pages/learn/subject.js b/pages/learn/subject.js index 67694093a..54b9f21d7 100644 --- a/pages/learn/subject.js +++ b/pages/learn/subject.js @@ -1,4 +1,5 @@ import React from 'react'; +import Router from 'next/router'; import fetch from 'isomorphic-unfetch'; import styled from 'react-emotion'; import { space } from 'styled-system'; @@ -6,13 +7,13 @@ import { Flex, Box } from 'grid-emotion'; import ExpandTOC from 'react-icons/lib/fa/angle-double-right'; import CollapseTOC from 'react-icons/lib/fa/angle-double-left'; -import { baseContainer, Title, breakpoints } from '../../utils/base.styles'; +import { baseContainer, breakpoints } from '../../utils/base.styles'; import Layout from '../../components/common/layout'; import BannerSection from '../../components/learn/subject-banner'; import SyllabusTree from '../../components/learn/syllabus-tree/syllabus-tree-container'; import SubjectMarkdown from '../../components/learn/subject-marked'; -import { laravelSyllabus, reactSyllabus } from '../../utils/mock-data'; +import { laravelSyllabus, reactSyllabus, listOfSubjects } from '../../utils/mock-data'; const CurriculumSection = styled.section` ${baseContainer}; @@ -60,12 +61,9 @@ export default class Subject extends React.Component { constructor(props) { super(props); this.state = { - activeSubject: this.selectSubject(this.props.url.query.id), + activeSubject: this.selectSubject(this.props.url.query.subject), activeChapterContent: '', - activeChapterName: - this.selectSubject(this.props.url.query.id) === null - ? '' - : this.selectSubject(this.props.url.query.id)[0].chapters[0].name, + activeChapterName: '', loading: true, isSidebarOpen: true, }; @@ -81,24 +79,49 @@ export default class Subject extends React.Component { return null; } } + selectChapter(syllabus, chapterName) { + return syllabus + .map(item => { + return item.chapters.find(chapter => chapter.name === chapterName); + }) + .filter(Boolean)[0]; + } - componentDidMount() { - if (this.state.activeSubject !== null) { - const defaultChapter = this.state.activeSubject[0].chapters[0]; - this.getChapterContent(defaultChapter); + getChapter(subject, chapter) { + const activeSubject = this.selectSubject(subject); + const activeChapterName = chapter.replace(/-/gi, ' '); + if (activeSubject !== null) { + this.setState({ + activeChapterName, + activeSubject, + }); + const activeChapterUrl = this.selectChapter(activeSubject, activeChapterName).cdnUrl; + this.getChapterContent(activeChapterUrl); } } + componentDidMount() { + const { subject, chapter } = this.props.url.query; + this.getChapter(subject, chapter); + } + + componentWillReceiveProps(nextProps) { + const { subject, chapter } = nextProps.url.query; + this.getChapter(subject, chapter); + } + changeChapter = selectedChapter => { + const subjectName = this.props.url.query.subject; + const chapterName = selectedChapter.name.replace(/\s/gi, '-'); + Router.push(`/learn/subject?subject=${subjectName}&chapter=${chapterName}`, `/learn/${subjectName}/${chapterName}`); + }; + + async getChapterContent(chapterUrl) { this.setState({ + activeChapterContent: '', loading: true, - activeChapterName: selectedChapter.name, }); - this.getChapterContent(selectedChapter); - }; - - async getChapterContent(chapter) { - const activeChapterContentPromise = await fetch(chapter.url); + const activeChapterContentPromise = await fetch(chapterUrl); const activeChapterContent = await activeChapterContentPromise.text(); await this.setState({ activeChapterContent, @@ -107,18 +130,19 @@ export default class Subject extends React.Component { } render() { + const subject = listOfSubjects.find(item => item.subjectId === this.props.url.query.subject); return this.state.activeSubject === null ? ( - - Curriculum for {this.props.url.query.id} and others Coming soon!! - - ) : ( + + ) : ( + + {this.state.isSidebarOpen ? ( diff --git a/pages/login.js b/pages/login.js index 0caf64ee2..5ea8d58ef 100644 --- a/pages/login.js +++ b/pages/login.js @@ -6,7 +6,7 @@ import BannerSection from '../components/common/banner'; export default () => { return ( - + ); }; diff --git a/server.js b/server.js index 8c9f73475..9811953e2 100644 --- a/server.js +++ b/server.js @@ -9,7 +9,7 @@ const dev = process.env.NODE_ENV !== 'production'; const app = next({ dev }); const handle = app.getRequestHandler(); const route = pathMatch(); -const match = route('/learn/:id'); +const match = route('/learn/:subject/:chapter'); getPort({ port: 3000 }).then(port => { app.prepare().then(() => { diff --git a/utils/mock-data.js b/utils/mock-data.js index 5d6a0f4b3..43dee5c31 100644 --- a/utils/mock-data.js +++ b/utils/mock-data.js @@ -3,245 +3,242 @@ export const listOfSubjects = [ id: '2132', title: 'Laravel', domain: 'Web Development', - url: '/learn/laravel', + path: '/learn/laravel/Choosing-laravel', subjectId: 'laravel', icon: 'devicon-laravel-plain colored', learningCount: '20', isGuideCompleted: true, + githubUrl: 'https://github.com/coderplex/learn/blob/master/web-dev/Backend/Learn-Laravel.md', }, { id: '213', title: 'ReactJS', domain: 'Web Development', - url: '/learn/reactjs', + path: '/learn/reactjs/Choosing-ReactJS', subjectId: 'reactjs', icon: 'devicon-react-original colored', learningCount: '28', isGuideCompleted: true, + githubUrl: + 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/Libraries%20%26%20Frameworks/Learn-React.md', }, { id: '2131', title: 'Go', domain: 'Programming Language', - url: '/learn/go', + path: '/learn/go', subjectId: 'go', icon: 'devicon-go-plain colored', learningCount: '7', isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/programming-languages/Go/learn-go.md', }, { id: '21fa3', title: 'Android', domain: 'Mobile Technology', - url: '/learn/android', + path: '/learn/android', subjectId: 'android', icon: 'devicon-android-plain colored', learningCount: '9', isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/mobile-dev/Android/learn-android.md', }, { id: '21afasda3', title: 'Rails', domain: 'Backend Development', - url: '/learn/rails', + path: '/learn/rails', subjectId: 'rails', icon: 'devicon-rails-plain colored', learningCount: '14', isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/web-dev/Backend/Learn-Rails.md', }, { id: '21wqerwqe3', title: 'Python', domain: 'Programming Language', - url: '/learn/python', + path: '/learn/python', subjectId: 'python', icon: 'devicon-python-plain colored', learningCount: '32', isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/tree/master/programming-languages/Python', }, { id: '2bxcvbx13', title: 'iOS', domain: 'Mobile Technology', - url: '/learn/ios', + path: '/learn/ios', subjectId: 'ios', icon: 'devicon-swift-plain colored', learningCount: '45', isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/mobile-dev/iOS/Learn-iOS.md', }, { id: '2bxczzxcvbx13', title: 'Javascript', domain: 'Programming Language', - url: '/learn/javascript', + path: '/learn/javascript', subjectId: 'javascript', icon: 'devicon-javascript-plain colored', learningCount: '31', isGuideCompleted: false, + githubUrl: 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/learn-intermediate.md', }, { id: '2bxdfasczzxcvbx13', title: 'Angular', domain: 'Frontend Development', - url: '/learn/angular', + path: '/learn/angular', subjectId: 'angular', icon: 'devicon-angularjs-plain colored', learningCount: '3', isGuideCompleted: false, + githubUrl: + 'https://github.com/coderplex/learn/blob/master/web-dev/Frontend/Libraries%20%26%20Frameworks/Learn-Angular.md', }, ]; export const laravelSyllabus = [ { - unit: { - name: 'Preface', - }, + unit: 'Preface', chapters: [ { name: 'Choosing laravel', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/choosing-laravel.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/choosing-laravel.md', }, { name: 'Prerequisites', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/prerequisites.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/prerequisites.md', }, { name: 'Installation', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/installation.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/installation.md', }, ], }, { - unit: { - name: 'Models, Views, Controllers and Routes', - }, + unit: 'Models, Views, Controllers and Routes', chapters: [ { name: 'Introduction to MVC', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/introduction-to-mvc.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/introduction-to-mvc.md', }, { name: 'Basic Routing and Views', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/basic-routing-and-views.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/basic-routing-and-views.md', }, { name: 'Pass Data to Views', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/pass-data-to-views.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/pass-data-to-views.md', }, { name: 'Database Setup', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/database-setup.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/database-setup.md', }, { name: 'Working with Query Builder', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/working-with-query-builder.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/working-with-query-builder.md', }, { name: 'Eloquent', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent.md', }, { name: 'Controllers', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/controllers.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/controllers.md', }, { name: 'Route Model Binding', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/route-model-binding.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/route-model-binding.md', }, ], }, { - unit: { - name: 'Front-End', - }, + unit: 'Front-End', chapters: [ { name: 'Layouts and Structures', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/layouts-and-structures.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/layouts-and-structures.md', }, { name: 'Form Requests and CSRF', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-requests-and-CSRF.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-requests-and-CSRF.md', }, { name: 'Form Validation', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-validation.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/form-validation.md', }, { name: 'Rendering', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/rendering', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/rendering', }, { name: 'Laravel Mix', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/laravel-mix.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/laravel-mix.md', }, { name: 'Flash Messaging', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/flash-messaging.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/flash-messaging.md', }, ], }, { - unit: { - name: 'Relationships', - }, + unit: 'Relationships', chapters: [ { name: 'Eloquent Relationships', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent-relationships.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/eloquent-relationships.md', }, { name: 'One-to-Many Relationship', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/one-to-many-relationship.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/one-to-many-relationship.md', }, { name: 'Pivot Tables', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/pivot-tables.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/pivot-tables.md', }, ], }, { - unit: { - name: 'Authentication', - }, + unit: 'Authentication', chapters: [ { name: 'Scaffold Authentication', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/scaffold-authentication.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/scaffold-authentication.md', }, { name: 'Manual Authentication', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/manual-authentication.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/manual-authentication.md', }, ], }, { - unit: { - name: 'View Composers and Archives', - }, + unit: 'View Composers and Archives', chapters: [ { name: 'Add Archives', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/add-archives.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/add-archives.md', }, { name: 'View Composers', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/view-composers.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/view-composers.md', }, ], }, { - unit: { - name: 'Testing & Seeding', - }, + unit: 'Testing & Seeding', chapters: [ { name: 'Testing', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/testing.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/testing.md', }, { name: 'Seeding', - url: 'https://rawgit.com/coderplex/learn/cdn/laravel/seeding.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/laravel/seeding.md', }, ], }, @@ -249,151 +246,137 @@ export const laravelSyllabus = [ export const reactSyllabus = [ { - unit: { - name: 'Preface', - }, + unit: 'Preface', chapters: [ { name: 'Choosing ReactJS', - url: 'https://rawgit.com/coderplex/learn/cdn/react/choosing-reactjs.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/choosing-reactjs.md', }, { name: 'Prerequisites', - url: 'https://rawgit.com/coderplex/learn/cdn/react/prerequisites.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/prerequisites.md', }, { name: 'Philosophy', - url: 'https://rawgit.com/coderplex/learn/cdn/react/philosophy.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/philosophy.md', }, ], }, { - unit: { - name: 'Getting Started', - }, + unit: 'Getting Started', chapters: [ { name: 'Trying React', - url: 'https://rawgit.com/coderplex/learn/cdn/react/trying-react.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/trying-react.md', }, { name: 'Create React App', - url: 'https://rawgit.com/coderplex/learn/cdn/react/create-react-app.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/create-react-app.md', }, { name: 'JavaScript XML Syntax', - url: 'https://rawgit.com/coderplex/learn/cdn/react/javascript-xml-syntax.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/javascript-xml-syntax.md', }, ], }, { - unit: { - name: 'Components', - }, + unit: 'Components', chapters: [ { name: 'Custom Components', - url: 'https://rawgit.com/coderplex/learn/cdn/react/custom-components.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/custom-components.md', }, { name: 'Rendering', - url: 'https://rawgit.com/coderplex/learn/cdn/react/rendering.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/rendering.md', }, { name: 'Conditional Rendering', - url: 'https://rawgit.com/coderplex/learn/cdn/react/conditional-rendering.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/conditional-rendering.md', }, { name: 'Data Flow', - url: 'https://rawgit.com/coderplex/learn/cdn/react/data-flow.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/data-flow.md', }, { name: 'Lifecycle', - url: 'https://rawgit.com/coderplex/learn/cdn/react/lifecycle.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/lifecycle.md', }, { name: 'Events', - url: 'https://rawgit.com/coderplex/learn/cdn/react/events.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/events.md', }, ], }, { - unit: { - name: 'Forms', - }, + unit: 'Forms', chapters: [ { name: 'Controlled Components', - url: 'https://rawgit.com/coderplex/learn/cdn/react/controlled-components.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/controlled-components.md', }, { name: 'Uncontrolled Components', - url: 'https://rawgit.com/coderplex/learn/cdn/react/uncontrolled-components.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/uncontrolled-components.md', }, ], }, { - unit: { - name: 'Composition', - }, + unit: 'Composition', chapters: [ { name: 'Lifting State Up', - url: 'https://rawgit.com/coderplex/learn/cdn/react/lifting-state-up.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/lifting-state-up.md', }, { name: 'Composition vs Inheritance', - url: 'https://rawgit.com/coderplex/learn/cdn/react/composition-vs-inheritance.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/composition-vs-inheritance.md', }, { name: 'Context', - url: 'https://rawgit.com/coderplex/learn/cdn/react/context.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/context.md', }, ], }, { - unit: { - name: 'Tools', - }, + unit: 'Tools', chapters: [ { name: 'Developer Tools', - url: 'https://rawgit.com/coderplex/learn/cdn/react/developer-tools.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/developer-tools.md', }, { name: 'Proptypes', - url: 'https://rawgit.com/coderplex/learn/cdn/react/proptypes.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/proptypes.md', }, { name: 'Error Boundaries', - url: 'https://rawgit.com/coderplex/learn/cdn/react/error-boundaries.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/error-boundaries.md', }, ], }, { - unit: { - name: 'In depth discussions', - }, + unit: 'In depth discussions', chapters: [ { name: 'JSX In Depth', - url: 'https://rawgit.com/coderplex/learn/cdn/react/jsx-in-depth.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/jsx-in-depth.md', }, { name: 'Synthetic Events', - url: 'https://rawgit.com/coderplex/learn/cdn/react/synthetic-events.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/synthetic-events.md', }, { name: 'React Without JSX', - url: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-jsx.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-jsx.md', }, { name: 'React without ES6', - url: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-es6.md', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/react-without-es6.md', }, { - name: 'Reconcilation - Diff Algorithm', - url: 'https://rawgit.com/coderplex/learn/cdn/react/reconcilation---diff-algorithm.md', + name: 'Reconcilation Diff Algorithm', + cdnUrl: 'https://rawgit.com/coderplex/learn/cdn/react/reconcilation---diff-algorithm.md', }, ], }, From af3ad14240053bd0854d4a7df8759205bc68d56d Mon Sep 17 00:00:00 2001 From: Md Zubair Ahmed Date: Tue, 19 Dec 2017 15:36:13 +0530 Subject: [PATCH 44/45] Align title and subtitle for subject page to left for the Responsive case of Tablets (#142) * fixes https://github.com/coderplex/coderplex/issues/117 * json added to prettier --- components/learn/subject-banner.js | 25 ++- package.json | 36 +--- yarn.lock | 290 ++++++++++++++--------------- 3 files changed, 164 insertions(+), 187 deletions(-) diff --git a/components/learn/subject-banner.js b/components/learn/subject-banner.js index 47a7e2c51..0b6dbdba3 100644 --- a/components/learn/subject-banner.js +++ b/components/learn/subject-banner.js @@ -5,8 +5,6 @@ import { Flex, Box } from 'grid-emotion'; import { baseContainer, Title, SubTitle, Button, breakpoints } from '../../utils/base.styles'; -// For changing background of banner -// background-image: url('https://res.cloudinary.com/coderplex/image/upload/v1510788480/website__assets/pattern.png'); const BannerSection = styled.section` ${space}; background: #374355; @@ -16,7 +14,6 @@ const BannerSection = styled.section` const Container = styled.section` ${baseContainer}; & .logo { - text-align: center; padding: 10px 15px; font-size: 10rem; background: #fff; @@ -25,13 +22,14 @@ const Container = styled.section` font-size: 4.5rem; } } - & .titles { + & .title { text-align: left; - & .domain { - margin-left: 0px; - margin-right: 0px; - margin-bottom: 0px; - } + } + & .subtitle { + text-align: left; + margin-left: 0px; + margin-right: 0px; + margin-bottom: 0px; } & .edit { display: block; @@ -50,13 +48,12 @@ export default ({ title, subTitle, icon }) => (
- - {title} - {subTitle} + + {title} + {subTitle} - diff --git a/package.json b/package.json index b5572a655..273c2280d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "index.js", "scripts": { "test": "xo && jest", - "lint": "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", + "lint": + "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' '*.json' --write && xo && markdownlint .", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -17,32 +18,19 @@ }, "xo": { "parser": "babel-eslint", - "extends": [ - "prettier", - "prettier/react", - "plugin:react/recommended" - ], - "env": [ - "browser", - "node" - ], + "extends": ["prettier", "prettier/react", "plugin:react/recommended"], + "env": ["browser", "node"], "rules": { "linebreak-style": 0, "react/display-name": 0, "react/prop-types": 0 }, "space:": 2, - "ignores": [ - "next.config.js" - ], + "ignores": ["next.config.js"], "overrides": [ { "files": "**/__tests__/*.test.js", - "globals": [ - "describe", - "it", - "expect" - ] + "globals": ["describe", "it", "expect"] } ] }, @@ -53,16 +41,8 @@ "jest --findRelatedTests", "git add" ], - "**/*.md": [ - "prettier", - "markdownlint", - "git add" - ], - ".github/CONTRIBUTING.md": [ - "doctoc", - "prettier", - "git add" - ] + "**/*.md": ["prettier", "markdownlint", "git add"], + ".github/CONTRIBUTING.md": ["doctoc", "prettier", "git add"] }, "dependencies": { "babel-plugin-emotion": "^8.0.10", diff --git a/yarn.lock b/yarn.lock index 71629fe61..28e12cfeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -612,12 +612,12 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.0.tgz#4da5fbaec0597d454430bd0166f09d1287c6fe39" +babel-jest@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.1.tgz#4232ded3a11ff8cad2d4417c5f75eaecdb2a73a5" dependencies: babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.0.0" + babel-preset-jest "^22.0.1" babel-loader@7.1.2: version "7.1.2" @@ -665,9 +665,9 @@ babel-plugin-istanbul@^4.1.5: istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" -babel-plugin-jest-hoist@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.0.tgz#30859d15453a324aee01264be9c522802f8ba512" +babel-plugin-jest-hoist@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.1.tgz#e5a65a213158d6c523686c542124591e29a35d47" babel-plugin-lodash@^3.2.11: version "3.3.2" @@ -1024,11 +1024,11 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-jest@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.0.tgz#6c93d9791030ba2b7ebb4c814b4c243bf29afb36" +babel-preset-jest@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.1.tgz#e94c3f8d701502d233da6c63925cb6d938d3771f" dependencies: - babel-plugin-jest-hoist "^22.0.0" + babel-plugin-jest-hoist "^22.0.1" babel-plugin-syntax-object-rest-spread "^6.13.0" babel-preset-react@6.24.1: @@ -2682,15 +2682,15 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.0.tgz#bd2ba3cb7de3cc9724b85107ad7f4e0e7b6f1bbc" +expect@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.1.tgz#691a323968ad99e34fc14f1d62753ec48d6215bc" dependencies: ansi-styles "^3.2.0" - jest-diff "^22.0.0" - jest-get-type "^22.0.0" - jest-matcher-utils "^22.0.0" - jest-message-util "^22.0.0" + jest-diff "^22.0.1" + jest-get-type "^22.0.1" + jest-matcher-utils "^22.0.1" + jest-message-util "^22.0.1" jest-regex-util "^21.2.0" express@^4.15.2: @@ -3983,15 +3983,15 @@ istanbul-reports@^1.1.3: dependencies: handlebars "^4.0.3" -jest-changed-files@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.0.tgz#14c5e76764040009af149c99384017867675920a" +jest-changed-files@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.1.tgz#195ff30255b67ec8809698dd7d2dc65f8cdfe6a1" dependencies: throat "^4.0.0" -jest-cli@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.0.tgz#0a4a55738a7ca66ded52fc9a5317caca4a4d3022" +jest-cli@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.1.tgz#4bd19c939dd561f5cf5aa701bf779240fd5014fc" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" @@ -4002,19 +4002,19 @@ jest-cli@^22.0.0: istanbul-lib-coverage "^1.1.1" istanbul-lib-instrument "^1.8.0" istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.0.0" - jest-config "^22.0.0" - jest-environment-jsdom "^22.0.0" - jest-get-type "^22.0.0" - jest-haste-map "^22.0.0" - jest-message-util "^22.0.0" + jest-changed-files "^22.0.1" + jest-config "^22.0.1" + jest-environment-jsdom "^22.0.1" + jest-get-type "^22.0.1" + jest-haste-map "^22.0.1" + jest-message-util "^22.0.1" jest-regex-util "^21.2.0" jest-resolve-dependencies "^21.2.0" - jest-runner "^22.0.0" - jest-runtime "^22.0.0" - jest-snapshot "^22.0.0" - jest-util "^22.0.0" - jest-worker "^22.0.0" + jest-runner "^22.0.1" + jest-runtime "^22.0.1" + jest-snapshot "^22.0.1" + jest-util "^22.0.1" + jest-worker "^22.0.1" micromatch "^2.3.11" node-notifier "^5.1.2" realpath-native "^1.0.0" @@ -4025,104 +4025,104 @@ jest-cli@^22.0.0: which "^1.2.12" yargs "^10.0.3" -jest-config@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.0.tgz#cb99d6bf9a6632792993ee399eb1c7b7efd20496" +jest-config@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.1.tgz#c7c7ad41e88d4d6fed5a6ecbdac8db30da5beb3a" dependencies: chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^22.0.0" - jest-environment-node "^22.0.0" - jest-get-type "^22.0.0" - jest-jasmine2 "^22.0.0" + jest-environment-jsdom "^22.0.1" + jest-environment-node "^22.0.1" + jest-get-type "^22.0.1" + jest-jasmine2 "^22.0.1" jest-regex-util "^21.2.0" - jest-resolve "^22.0.0" - jest-util "^22.0.0" - jest-validate "^22.0.0" - pretty-format "^22.0.0" + jest-resolve "^22.0.1" + jest-util "^22.0.1" + jest-validate "^22.0.1" + pretty-format "^22.0.1" -jest-diff@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.0.tgz#31e7771f6d55f42fb410789f7743972dc342c073" +jest-diff@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.1.tgz#eeca8dc0e26e534b699632a4bebd5901929ebeee" dependencies: chalk "^2.0.1" diff "^3.2.0" - jest-get-type "^22.0.0" - pretty-format "^22.0.0" + jest-get-type "^22.0.1" + pretty-format "^22.0.1" -jest-docblock@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.0.tgz#2e6a79360172b90bd2cd235a4832e38388b3b658" +jest-docblock@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.1.tgz#ad1128eca5ff621b939001dfea4de3c2cca0af8c" dependencies: detect-newline "^2.1.0" -jest-environment-jsdom@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.0.tgz#d7787c1c934111d3d6f1881e15bdcfdaefe41abe" +jest-environment-jsdom@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.1.tgz#112f955ec77025a8755ddd06214918d4c3b06a5d" dependencies: - jest-mock "^22.0.0" - jest-util "^22.0.0" + jest-mock "^22.0.1" + jest-util "^22.0.1" jsdom "^11.5.1" -jest-environment-node@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.0.tgz#ecece15308d8b3db1c3702bec39434a4185f557d" +jest-environment-node@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.1.tgz#0099321a3887a301f3693fdd81be9bfc4e9f7a14" dependencies: - jest-mock "^22.0.0" - jest-util "^22.0.0" + jest-mock "^22.0.1" + jest-util "^22.0.1" jest-get-type@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" -jest-get-type@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.0.tgz#d49b734cb91b66204cf6cb726d81c64c77684b1c" +jest-get-type@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.1.tgz#0b80757b67dd5abc165290d039937175255e9a8e" -jest-haste-map@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.0.tgz#aa0730a16a07c287100c0c213c118dc9a4255d2d" +jest-haste-map@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.1.tgz#812f33c68496abf46e61af0adfc9e0b85126bf94" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" - jest-docblock "^22.0.0" - jest-worker "^22.0.0" + jest-docblock "^22.0.1" + jest-worker "^22.0.1" micromatch "^2.3.11" sane "^2.0.0" -jest-jasmine2@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.0.tgz#13d0ec186bcae2d87c64cf72dafec70de5423313" +jest-jasmine2@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.1.tgz#4443ccacd103dfde706834244ed7d23a1bfcdae0" dependencies: callsites "^2.0.0" chalk "^2.0.1" - expect "^22.0.0" + expect "^22.0.1" graceful-fs "^4.1.11" - jest-diff "^22.0.0" - jest-matcher-utils "^22.0.0" - jest-message-util "^22.0.0" - jest-snapshot "^22.0.0" + jest-diff "^22.0.1" + jest-matcher-utils "^22.0.1" + jest-message-util "^22.0.1" + jest-snapshot "^22.0.1" source-map-support "^0.5.0" -jest-leak-detector@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.0.tgz#e2fee3674f4c2d62f538c4935a8fe146764cec39" +jest-leak-detector@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.1.tgz#0f1a8ce716ad33e751ef73c3f795222762ef41c6" dependencies: - pretty-format "^22.0.0" + pretty-format "^22.0.1" optionalDependencies: weak "^1.0.1" -jest-matcher-utils@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.0.tgz#dc1c69863ebf840d1276f3b66258d47755343183" +jest-matcher-utils@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.1.tgz#e89427709b0b72bf68a6a0d3ad9d194597e68bab" dependencies: chalk "^2.0.1" - jest-get-type "^22.0.0" - pretty-format "^22.0.0" + jest-get-type "^22.0.1" + pretty-format "^22.0.1" -jest-message-util@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.0.tgz#68df008cfbdd0234792d28363df6e1309944ef33" +jest-message-util@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.1.tgz#6abec52c4fb2b43e601c9e532a69121c83078fc6" dependencies: "@babel/code-frame" "^7.0.0-beta.35" chalk "^2.0.1" @@ -4130,9 +4130,9 @@ jest-message-util@^22.0.0: slash "^1.0.0" stack-utils "^1.0.1" -jest-mock@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.0.tgz#f8e17b36d0f4c430a16d90d531c5f2308f2ebee6" +jest-mock@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.1.tgz#a544fa898bbe2fa20893ac3f4bf565db94644bbf" jest-regex-util@^21.2.0: version "21.2.0" @@ -4144,43 +4144,43 @@ jest-resolve-dependencies@^21.2.0: dependencies: jest-regex-util "^21.2.0" -jest-resolve@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.0.tgz#2210a11aeaac3b521508d0b5bb25d908a00823df" +jest-resolve@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.1.tgz#53a891713d15673787df2e712901e1e743c7740f" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" -jest-runner@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.0.tgz#4f4a5b8ceb7532d01ebe1dc151cfcb208ca1fbcb" - dependencies: - jest-config "^22.0.0" - jest-docblock "^22.0.0" - jest-haste-map "^22.0.0" - jest-jasmine2 "^22.0.0" - jest-leak-detector "^22.0.0" - jest-message-util "^22.0.0" - jest-runtime "^22.0.0" - jest-util "^22.0.0" - jest-worker "^22.0.0" +jest-runner@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.1.tgz#28df594192c948e7d70a5f17639dff36f7276719" + dependencies: + jest-config "^22.0.1" + jest-docblock "^22.0.1" + jest-haste-map "^22.0.1" + jest-jasmine2 "^22.0.1" + jest-leak-detector "^22.0.1" + jest-message-util "^22.0.1" + jest-runtime "^22.0.1" + jest-util "^22.0.1" + jest-worker "^22.0.1" throat "^4.0.0" -jest-runtime@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.0.tgz#42a3defd6fc138fc1cdf4dadb84426bc3932ddd1" +jest-runtime@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.1.tgz#0fcb1d7bd1ab9897ad18993d44456b3648052918" dependencies: babel-core "^6.0.0" - babel-jest "^22.0.0" + babel-jest "^22.0.1" babel-plugin-istanbul "^4.1.5" chalk "^2.0.1" convert-source-map "^1.4.0" graceful-fs "^4.1.11" - jest-config "^22.0.0" - jest-haste-map "^22.0.0" + jest-config "^22.0.1" + jest-haste-map "^22.0.1" jest-regex-util "^21.2.0" - jest-resolve "^22.0.0" - jest-util "^22.0.0" + jest-resolve "^22.0.1" + jest-util "^22.0.1" json-stable-stringify "^1.0.1" micromatch "^2.3.11" realpath-native "^1.0.0" @@ -4189,27 +4189,27 @@ jest-runtime@^22.0.0: write-file-atomic "^2.1.0" yargs "^10.0.3" -jest-snapshot@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.0.tgz#c8913006bcd604f10a6174a2378683cea889138c" +jest-snapshot@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.1.tgz#855578b1a20fc45ae4ec38b4d3ebc93b19c786d0" dependencies: chalk "^2.0.1" - jest-diff "^22.0.0" - jest-matcher-utils "^22.0.0" + jest-diff "^22.0.1" + jest-matcher-utils "^22.0.1" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^22.0.0" + pretty-format "^22.0.1" -jest-util@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.0.tgz#8e73c88f482825e6b10caf0f93f144bae5841938" +jest-util@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.1.tgz#750d644bd2be72931dab01fe4db278a0b00432c6" dependencies: callsites "^2.0.0" chalk "^2.0.1" graceful-fs "^4.1.11" is-ci "^1.0.10" - jest-message-util "^22.0.0" - jest-validate "^22.0.0" + jest-message-util "^22.0.1" + jest-validate "^22.0.1" mkdirp "^0.5.1" jest-validate@^21.1.0: @@ -4221,26 +4221,26 @@ jest-validate@^21.1.0: leven "^2.1.0" pretty-format "^21.2.1" -jest-validate@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.0.tgz#ba17b0422deef40d8937b35a85f4c8912e4e673b" +jest-validate@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.1.tgz#1a40e8ac41f1e85123c9bc8bae9de779754e30f2" dependencies: chalk "^2.0.1" - jest-get-type "^22.0.0" + jest-get-type "^22.0.1" leven "^2.1.0" - pretty-format "^22.0.0" + pretty-format "^22.0.1" -jest-worker@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.0.tgz#4a276938a2077e1d72b6a2acd1d43826a9fd07f8" +jest-worker@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.1.tgz#6f9353e91a624ac44ee0b14f38bf43a62e5aa34e" dependencies: merge-stream "^1.0.1" -jest@22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.0.0.tgz#a75b19d4d43579bc9eb0ec1eff5a6296975c3757" +jest@^22.0.0: + version "22.0.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.0.1.tgz#79047f5d133b8e31fa0a4c0afe5a2b5e06bd9e86" dependencies: - jest-cli "^22.0.0" + jest-cli "^22.0.1" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" @@ -5726,9 +5726,9 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.0.tgz#3c1da8d100e7e0b0ff1d839f4743b002d5907531" +pretty-format@^22.0.1: + version "22.0.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.1.tgz#65074c3946f544f6cd8445581293f532e0b3761c" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" From 58bc51addd702eae61fa7e7f6dac3f7f87fc149a Mon Sep 17 00:00:00 2001 From: Md Zubair Ahmed Date: Tue, 19 Dec 2017 20:21:43 +0530 Subject: [PATCH 45/45] rm rearranged (#145) * rm rearranged * space added between badges --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 28198fa0a..db216cac4 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # Coderplex Website -[![All Contributors](https://img.shields.io/badge/all_contributors-22-orange.svg?style=flat-square)](#contributors) - -[![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) +[![Build Status](https://travis-ci.org/coderplex/coderplex.svg?branch=master)](https://travis-ci.org/coderplex/coderplex) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![Greenkeeper badge](https://badges.greenkeeper.io/coderplex/coderplex.svg)](https://greenkeeper.io/) [![All Contributors](https://img.shields.io/badge/all_contributors-22-orange.svg?style=flat-square)](#contributors) [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/coderplex/coderplex/blob/master/LICENSE) ## Follow our community here at [https://www.coderplex.org](https://www.coderplex.org) @@ -18,19 +16,19 @@ This project mainly uses ## Contributing -We welcome pull requests from beginners and seasoned javaScript developers alike!. You can work on open issues, fix bugs and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md) for hassel free contribution. +We welcome pull requests from beginners and seasoned javaScript developers alike!. You can work on open issues, fix bugs and more. Be sure to read our [contributing guide](https://github.com/coderplex/coderplex/blob/develop/.github/CONTRIBUTING.md). This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!. ## Contributors Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)): + | [
Vinay Puppal](https://www.vinaypuppal.com/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Avinaypuppal "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=vinaypuppal "Code") [πŸ€”](#ideas-vinaypuppal "Ideas, Planning, & Feedback") [πŸ‘€](#review-vinaypuppal "Reviewed Pull Requests") | [
Md_ZubairAhmed](https://in.linkedin.com/in/mzubairahmed)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3AM-ZubairAhmed "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Documentation") [πŸ’‘](#example-M-ZubairAhmed "Examples") [πŸ€”](#ideas-M-ZubairAhmed "Ideas, Planning, & Feedback") [πŸ”Œ](#plugin-M-ZubairAhmed "Plugin/utility libraries") [πŸ‘€](#review-M-ZubairAhmed "Reviewed Pull Requests") [⚠️](https://github.com/coderplex/coderplex/commits?author=M-ZubairAhmed "Tests") [πŸ’¬](#question-M-ZubairAhmed "Answering Questions") | [
P Bhanu Teja](https://github.com/pbteja1998)
[πŸ’¬](#question-pbteja1998 "Answering Questions") [πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Apbteja1998 "Bug reports") [πŸ’»](https://github.com/coderplex/coderplex/commits?author=pbteja1998 "Code") [πŸ€”](#ideas-pbteja1998 "Ideas, Planning, & Feedback") | [
Sai Abhijith](https://github.com/saiabhijitht)
[🎨](#design-saiabhijitht "Design") [πŸ€”](#ideas-saiabhijitht "Ideas, Planning, & Feedback") [πŸ‘€](#review-saiabhijitht "Reviewed Pull Requests") | [
Kapil Dutta](http://duttakapil.github.io/)
[πŸ›](https://github.com/coderplex/coderplex/issues?q=author%3Aduttakapil "Bug reports") [πŸ€”](#ideas-duttakapil "Ideas, Planning, & Feedback") [πŸ‘€](#review-duttakapil "Reviewed Pull Requests") | [
Shiva Krishna Yadav](https://github.com/shivakrishna9)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Code") [πŸ“–](https://github.com/coderplex/coderplex/commits?author=shivakrishna9 "Documentation") | [
Vineeth Kanaparthi](https://github.com/VineethKanaparthi)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=VineethKanaparthi "Documentation") | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | [
buoyantair](https://github.com/buoyantair)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=buoyantair "Code") | [
Jeffrey Berry](https://github.com/jberry93)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=jberry93 "Code") | [
Sebastian](https://github.com/HerrVoennchen)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=HerrVoennchen "Code") | [
Hafiz T](https://github.com/hafiz703)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hafiz703 "Code") | [
Raja Sekhar Karanam](https://github.com/rkaranam)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=rkaranam "Documentation") | [
sreenivas alapati](https://twitter.com/CgCnu)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=cg-cnu "Code") | [
Luis Lacruz](https://about.me/luislacruz)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=luixlacrux "Code") | | [
Mazin Majid](https://github.com/majidmazin)
[πŸ“–](https://github.com/coderplex/coderplex/commits?author=majidmazin "Documentation") | [
loangelak](https://github.com/loangelak)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=loangelak "Code") | [
Atte Niemi](http://twitter.com/HursCode)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=hur "Code") | [
tdeschryver](https://github.com/tdeschryver)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=tdeschryver "Code") | [
Alicia Perez](http://www.linkedin.com/in/aliciapr)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=aliciaphes "Code") | [
abiduzz420](https://medium.com/@abiduzair420)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=abiduzz420 "Code") [πŸ“’](#talk-abiduzz420 "Talks") | [
thepriefy](https://github.com/thepriefy)
[πŸ’»](https://github.com/coderplex/coderplex/commits?author=thepriefy "Code") | | [
Aravind Balla](http://aravindballa.com)
[πŸ‘€](#review-aravindballa "Reviewed Pull Requests") | - -This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! +