fix: remove old views (#36677)

This commit is contained in:
Ahmad Abdolsaheb
2019-08-30 12:54:01 +03:00
committed by mrugesh
parent e9d753fc09
commit f8a603d182
25 changed files with 689 additions and 1462 deletions

View File

@ -0,0 +1,30 @@
/* eslint-disable no-unused-vars */
/* eslint-disable no-undef */
const React = require('react');
const gatsby = jest.requireActual('gatsby');
module.exports = {
...gatsby,
graphql: jest.fn(),
Link: jest.fn().mockImplementation(
// these props are invalid for an `a` tag
({
activeClassName,
activeStyle,
getProps,
innerRef,
partiallyActive,
ref,
replace,
to,
...rest
}) =>
React.createElement('a', {
...rest,
href: to
})
),
StaticQuery: jest.fn(),
useStaticQuery: jest.fn()
};

View File

@ -18,8 +18,7 @@ function ShowUnsubscribed({ unsubscribeId }) {
<Grid>
<main>
<FullWidthRow>
<Spacer />
<Spacer />
<Spacer size={2} />
<Panel bsStyle='primary' className='text-center'>
<Spacer />
<h2>You have successfully been unsubscribed</h2>
@ -38,6 +37,7 @@ function ShowUnsubscribed({ unsubscribeId }) {
</Button>
</FullWidthRow>
) : null}
<Spacer size={2} />
</main>
</Grid>
</Fragment>

View File

@ -97,8 +97,7 @@ class ShowUser extends Component {
return (
<main>
<FullWidthRow>
<Spacer />
<Spacer />
<Spacer size={2} />
<Panel bsStyle='info'>
<Panel.Heading>
<Panel.Title componentClass='h3'>
@ -132,8 +131,7 @@ class ShowUser extends Component {
<title>Report a users profile | freeCodeCamp.org</title>
</Helmet>
<FullWidthRow>
<Spacer />
<Spacer />
<Spacer size={2} />
<Col md={8} mdOffset={2}>
<h2>
Do you want to report {username}

View File

@ -0,0 +1,13 @@
/* global expect */
import React from 'react';
import renderer from 'react-test-renderer';
import 'jest-dom/extend-expect';
import Footer from './';
describe('<Footer />', () => {
it('renders to the DOM', () => {
const tree = renderer.create(<Footer />).toJSON();
expect(tree).toMatchSnapshot();
});
});

View File

@ -0,0 +1,41 @@
import React from 'react';
import PropTypes from 'prop-types';
import Link from '../helpers/Link';
import { footerLinks } from './footerLinks';
import './footer.css';
function FooterCol({ colNum, title }) {
// if the column number is not applicable return an empty div
if (colNum < 1 || colNum > footerLinks + 1) return <div></div>;
let linksRow = footerLinks[colNum - 1].map(function(item, i) {
if (item.interal)
return (
<Link key={i} to={item.to}>
{item.text}
</Link>
);
return (
<Link external={true} key={i} to={item.to}>
{item.text}
</Link>
);
});
return (
<div className={`footer-col-${colNum}`}>
<div className='col-header'>{title}</div>
{linksRow}
</div>
);
}
const propTypes = {
colNum: PropTypes.number,
title: PropTypes.string
};
FooterCol.propTypes = propTypes;
FooterCol.displayName = 'FooterCol';
export default FooterCol;

View File

@ -0,0 +1,408 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<Footer /> renders to the DOM 1`] = `
<footer
className="site-footer"
>
<div
className="footer-container"
>
<div
className="footer-row"
>
<div
className="footer-desc-col"
>
<p>
freeCodeCamp is a donor-supported tax-exempt 501(c)(3) nonprofit organization (United States Federal Tax Identification Number: 82-0779546)
</p>
<p>
Our mission: to help people learn to code for free. We accomplish this by creating thousands of videos, articles, and interactive coding lessons - all freely available to the public. We also have thousands of freeCodeCamp study groups around the world.
</p>
<p>
Donations to freeCodeCamp go toward our education initiatives, and help pay for servers, services, and staff. You can 
<a
className="inline"
href="/donate"
>
make a tax-deductible donation here
</a>
.
</p>
</div>
<div
className="footer-col-1"
>
<div
className="col-header"
>
Our Nonprofit
</div>
<a
href="/news/about/"
rel="noopener noreferrer"
target="_blank"
>
About
</a>
<a
href="/donate"
rel="noopener noreferrer"
target="_blank"
>
Donate
</a>
<a
href="/news/shop/"
rel="noopener noreferrer"
target="_blank"
>
Shop
</a>
<a
href="https://www.linkedin.com/school/free-code-camp/people/"
rel="noopener noreferrer"
target="_blank"
>
Alumni Network
</a>
<a
href="https://github.com/freeCodeCamp/"
rel="noopener noreferrer"
target="_blank"
>
Open Source
</a>
<a
href="/news/support/"
rel="noopener noreferrer"
target="_blank"
>
Support
</a>
<a
href="/news/sponsors/"
rel="noopener noreferrer"
target="_blank"
>
Sponsors
</a>
<a
href="/news/academic-honesty-policy/"
rel="noopener noreferrer"
target="_blank"
>
Academic Honesty
</a>
<a
href="/news/code-of-conduct/"
rel="noopener noreferrer"
target="_blank"
>
Code of Conduct
</a>
<a
href="/news/privacy-policy/"
rel="noopener noreferrer"
target="_blank"
>
Privacy Policy
</a>
<a
href="/news/terms-of-service/"
rel="noopener noreferrer"
target="_blank"
>
Terms of Service
</a>
<a
href="/news/copyright-policy/"
rel="noopener noreferrer"
target="_blank"
>
Copyright Policy
</a>
</div>
<div
className="footer-col-2"
>
<div
className="col-header"
>
Best Tutorials
</div>
<a
href="/news/best-python-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
Python Tutorial
</a>
<a
href="/news/best-git-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
Git Tutorial
</a>
<a
href="/news/the-best-linux-tutorials/"
rel="noopener noreferrer"
target="_blank"
>
Linux Tutorial
</a>
<a
href="/news/best-javascript-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
JavaScript Tutorial
</a>
<a
href="/news/best-react-javascript-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
React Tutorial
</a>
<a
href="/news/best-html-html5-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
HTML Tutorial
</a>
<a
href="/news/best-css-and-css3-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
CSS Tutorial
</a>
<a
href="/news/best-sql-database-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
SQL Tutorial
</a>
<a
href="/news/best-java-8-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
Java Tutorial
</a>
<a
href="/news/best-angular-tutorial-angularjs/"
rel="noopener noreferrer"
target="_blank"
>
Angular Tutorial
</a>
<a
href="/news/best-wordpress-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
WordPress Tutorial
</a>
<a
href="/news/best-bootstrap-tutorial-responsive-web-design/"
rel="noopener noreferrer"
target="_blank"
>
Bootstrap Tutorial
</a>
</div>
<div
className="footer-col-3"
>
<div
className="col-header"
>
Best Examples
</div>
<a
href="/news/python-example/"
rel="noopener noreferrer"
target="_blank"
>
Python Example
</a>
<a
href="/news/javascript-example/"
rel="noopener noreferrer"
target="_blank"
>
JavaScript Example
</a>
<a
href="/news/react-examples-reactjs/"
rel="noopener noreferrer"
target="_blank"
>
React Example
</a>
<a
href="/news/linux-example-bash-command-line/"
rel="noopener noreferrer"
target="_blank"
>
Linux Example
</a>
<a
href="/news/html-and-html5-example/"
rel="noopener noreferrer"
target="_blank"
>
HTML Example
</a>
<a
href="/news/css-example-css3/"
rel="noopener noreferrer"
target="_blank"
>
CSS Example
</a>
<a
href="/news/sql-example/"
rel="noopener noreferrer"
target="_blank"
>
SQL Example
</a>
<a
href="/news/java-example/"
rel="noopener noreferrer"
target="_blank"
>
Java Example
</a>
<a
href="/news/the-best-angular-examples/"
rel="noopener noreferrer"
target="_blank"
>
Angular Example
</a>
<a
href="/news/the-best-jquery-examples/"
rel="noopener noreferrer"
target="_blank"
>
jQuery Example
</a>
<a
href="/news/the-best-bootstrap-examples/"
rel="noopener noreferrer"
target="_blank"
>
Bootstrap Example
</a>
<a
href="/news/the-best-php-examples/"
rel="noopener noreferrer"
target="_blank"
>
PHP Example
</a>
</div>
<div
className="footer-col-4"
>
<div
className="col-header"
>
Trending Reference
</div>
<a
href="/news/2019-web-developer-roadmap/"
rel="noopener noreferrer"
target="_blank"
>
2019 Web Developer Roadmap
</a>
<a
href="/news/linux-command-line-bash-tutorial/"
rel="noopener noreferrer"
target="_blank"
>
Linux Command Line Guide
</a>
<a
href="/news/the-ultimate-guide-to-git-reset-and-git-revert/"
rel="noopener noreferrer"
target="_blank"
>
Git Reset and Git Revert
</a>
<a
href="/news/the-ultimate-guide-to-git-merge-and-git-rebase/"
rel="noopener noreferrer"
target="_blank"
>
Git Merge and Git Rebase
</a>
<a
href="/news/the-ultimate-guide-to-javascript-array-methods-map/"
rel="noopener noreferrer"
target="_blank"
>
JavaScript Array Map
</a>
<a
href="/news/the-ultimate-guide-to-javascript-array-methods-reduce/"
rel="noopener noreferrer"
target="_blank"
>
JavaScript Array Reduce
</a>
<a
href="/news/the-ultimate-guide-to-javascript-date-and-moment-js/"
rel="noopener noreferrer"
target="_blank"
>
JavaScript Date
</a>
<a
href="/news/the-ultimate-guide-to-javascript-string-methods-split/"
rel="noopener noreferrer"
target="_blank"
>
JavaScript String Split
</a>
<a
href="/news/understanding-flexbox-everything-you-need-to-know-b4013d4dc9af/"
rel="noopener noreferrer"
target="_blank"
>
CSS Flexbox Guide
</a>
<a
href="/news/11-things-i-learned-reading-the-css-grid-specification-fb3983aa5e0/"
rel="noopener noreferrer"
target="_blank"
>
CSS Grid Guide
</a>
<a
href="/news/the-ultimate-guide-to-linux-creating-a-sudo-user/"
rel="noopener noreferrer"
target="_blank"
>
Create a Linux Sudo User
</a>
<a
href="/news/the-ultimate-guide-to-ssh-setting-up-ssh-keys/"
rel="noopener noreferrer"
target="_blank"
>
How to Set Up SSH Keys
</a>
</div>
</div>
</div>
</footer>
`;

View File

@ -5,6 +5,7 @@
line-height: 1.6;
font-family: 'Lato', sans-serif;
font-size: 15px;
margin-top: auto;
}
.footer-container {

View File

@ -0,0 +1,129 @@
{
"footerLinks": [
[
{ "to": "/news/about/", "text": "About" },
{ "to": "/donate", "text": "Donate", "internal": true },
{ "to": "/news/shop/", "text": "Shop" },
{
"to": "https://www.linkedin.com/school/free-code-camp/people/",
"text": "Alumni Network"
},
{ "to": "https://github.com/freeCodeCamp/", "text": "Open Source" },
{ "to": "/news/support/", "text": "Support" },
{ "to": "/news/sponsors/", "text": "Sponsors" },
{ "to": "/news/academic-honesty-policy/", "text": "Academic Honesty" },
{ "to": "/news/code-of-conduct/", "text": "Code of Conduct" },
{ "to": "/news/privacy-policy/", "text": "Privacy Policy" },
{ "to": "/news/terms-of-service/", "text": "Terms of Service" },
{ "to": "/news/copyright-policy/", "text": "Copyright Policy" }
],
[
{ "to": "/news/best-python-tutorial/", "text": "Python Tutorial" },
{ "to": "/news/best-git-tutorial/", "text": "Git Tutorial" },
{ "to": "/news/the-best-linux-tutorials/", "text": "Linux Tutorial" },
{
"to": "/news/best-javascript-tutorial/",
"text": "JavaScript Tutorial"
},
{
"to": "/news/best-react-javascript-tutorial/",
"text": "React Tutorial"
},
{ "to": "/news/best-html-html5-tutorial/", "text": "HTML Tutorial" },
{ "to": "/news/best-css-and-css3-tutorial/", "text": "CSS Tutorial" },
{ "to": "/news/best-sql-database-tutorial/", "text": "SQL Tutorial" },
{ "to": "/news/best-java-8-tutorial/", "text": "Java Tutorial" },
{
"to": "/news/best-angular-tutorial-angularjs/",
"text": "Angular Tutorial"
},
{ "to": "/news/best-wordpress-tutorial/", "text": "WordPress Tutorial" },
{
"to": "/news/best-bootstrap-tutorial-responsive-web-design/",
"text": "Bootstrap Tutorial"
}
],
[
{ "to": "/news/python-example/", "text": "Python Example" },
{ "to": "/news/javascript-example/", "text": "JavaScript Example" },
{ "to": "/news/react-examples-reactjs/", "text": "React Example" },
{
"to": "/news/linux-example-bash-command-line/",
"text": "Linux Example"
},
{ "to": "/news/html-and-html5-example/", "text": "HTML Example" },
{ "to": "/news/css-example-css3/", "text": "CSS Example" },
{ "to": "/news/sql-example/", "text": "SQL Example" },
{ "to": "/news/java-example/", "text": "Java Example" },
{ "to": "/news/the-best-angular-examples/", "text": "Angular Example" },
{ "to": "/news/the-best-jquery-examples/", "text": "jQuery Example" },
{
"to": "/news/the-best-bootstrap-examples/",
"text": "Bootstrap Example"
},
{ "to": "/news/the-best-php-examples/", "text": "PHP Example" }
],
[
{
"to": "/news/2019-web-developer-roadmap/",
"text": "2019 Web Developer Roadmap"
},
{
"to": "/news/linux-command-line-bash-tutorial/",
"text": "Linux Command Line Guide"
},
{
"to": "/news/the-ultimate-guide-to-git-reset-and-git-revert/",
"text": "Git Reset and Git Revert"
},
{
"to": "/news/the-ultimate-guide-to-git-merge-and-git-rebase/",
"text": "Git Merge and Git Rebase"
},
{
"to": "/news/the-ultimate-guide-to-javascript-array-methods-map/",
"text": "JavaScript Array Map"
},
{
"to": "/news/the-ultimate-guide-to-javascript-array-methods-reduce/",
"text": "JavaScript Array Reduce"
},
{
"to": "/news/the-ultimate-guide-to-javascript-date-and-moment-js/",
"text": "JavaScript Date"
},
{
"to": "/news/the-ultimate-guide-to-javascript-string-methods-split/",
"text": "JavaScript String Split"
},
{
"to": "/news/understanding-flexbox-everything-you-need-to-know-b4013d4dc9af/",
"text": "CSS Flexbox Guide"
},
{
"to": "/news/11-things-i-learned-reading-the-css-grid-specification-fb3983aa5e0/",
"text": "CSS Grid Guide"
},
{
"to": "/news/the-ultimate-guide-to-linux-creating-a-sudo-user/",
"text": "Create a Linux Sudo User"
},
{
"to": "/news/the-ultimate-guide-to-ssh-setting-up-ssh-keys/",
"text": "How to Set Up SSH Keys"
}
]
]
}

View File

@ -2,6 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import Link from '../helpers/Link';
import FootCol from './FooterCol';
import './footer.css';
@ -36,169 +37,16 @@ function Footer() {
<p>
Donations to freeCodeCamp go toward our education initiatives, and
help pay for servers, services, and staff. You can&nbsp;
<Link
className='inline'
external={true}
to='https://freecodecamp.org/donate'
>
<Link className='inline' to='/donate'>
make a tax-deductible donation here
</Link>
.
</p>
</div>
<div className='footer-col-1'>
<div className='col-header'>Our Nonprofit</div>
<Link to='https://www.freecodecamp.org/news/about-freecodecamp/'>
About
</Link>
<Link to='https://freecodecamp.org/donate'>Donate</Link>
<Link external={true} to='https://www.freecodecamp.org/news/shop/'>
Shop
</Link>
<Link
external={true}
to='https://www.linkedin.com/school/free-code-camp/people/'
>
Alumni Network
</Link>
<Link to='https://github.com/freeCodeCamp/'>Open Source</Link>
<Link to='https://www.freecodecamp.org/news/support/'>Support</Link>
<Link to='https://www.freecodecamp.org/news/our-sponsors/'>
Sponsors
</Link>
<Link to='https://www.freecodecamp.org/news/academic-honesty-policy/'>
Academic Honesty
</Link>
<Link to='https://www.freecodecamp.org/news/code-of-conduct/'>
Code of Conduct
</Link>
<Link to='https://www.freecodecamp.org/news/privacy-policy/'>
Privacy Policy
</Link>
<Link to='https://www.freecodecamp.org/news/freecodecamps-terms-of-service/'>
Terms of Service
</Link>
<Link to='https://www.freecodecamp.org/news/copyright-policy/'>
Copyright Policy
</Link>
</div>
<div className='footer-col-2'>
<div className='col-header'>Best Tutorials</div>
<Link to='https://www.freecodecamp.org/news/best-python-tutorial/'>
Python Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-git-tutorial/'>
Git Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/the-best-linux-tutorials/'>
Linux Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-javascript-tutorial/'>
JavaScript Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-react-javascript-tutorial/'>
React Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-html-html5-tutorial/'>
HTML Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-css-and-css3-tutorial/'>
CSS Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-sql-database-tutorial/'>
SQL Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-java-8-tutorial/'>
Java Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-angular-tutorial-angularjs/'>
Angular Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-wordpress-tutorial/'>
WordPress Tutorial
</Link>
<Link to='https://www.freecodecamp.org/news/best-bootstrap-tutorial-responsive-web-design/'>
Bootstrap Tutorial
</Link>
</div>
<div className='footer-col-3'>
<div className='col-header'>Best Examples</div>
<Link to='https://www.freecodecamp.org/news/python-example/'>
Python Example{' '}
</Link>
<Link to='https://www.freecodecamp.org/news/javascript-example/'>
JavaScript Example
</Link>
<Link to='https://www.freecodecamp.org/news/react-examples-reactjs/'>
React Example
</Link>
<Link to='https://www.freecodecamp.org/news/linux-example-bash-command-line/'>
Linux Example
</Link>
<Link to='https://www.freecodecamp.org/news/html-and-html5-example/'>
HTML Example
</Link>
<Link to='https://www.freecodecamp.org/news/css-example-css3/'>
CSS Example
</Link>
<Link to='https://www.freecodecamp.org/news/sql-example/'>
SQL Example
</Link>
<Link to='https://www.freecodecamp.org/news/java-example/'>
Java Example
</Link>
<Link to='https://www.freecodecamp.org/news/the-best-angular-examples/'>
Angular Example
</Link>
<Link to='https://www.freecodecamp.org/news/the-best-jquery-examples/'>
jQuery Example
</Link>
<Link to='https://www.freecodecamp.org/news/the-best-bootstrap-examples/'>
Bootstrap Example
</Link>
<Link to='https://www.freecodecamp.org/news/the-best-php-examples/'>
PHP Example
</Link>
</div>
<div className='footer-col-4'>
<div className='col-header'>Trending Reference</div>
<Link to='https://www.freecodecamp.org/news/2019-web-developer-roadmap/'>
2019 Web Developer Roadmap
</Link>
<Link to='https://www.freecodecamp.org/news/linux-command-line-bash-tutorial/'>
Linux Command Line Guide
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-git-reset-and-git-revert/'>
Git Reset and Git Revert
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-git-merge-and-git-rebase/'>
Git Merge and Git Rebase
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-javascript-array-methods-map/'>
JavaScript Array Map
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-javascript-array-methods-reduce/'>
JavaScript Array Reduce
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-javascript-date-and-moment-js/'>
JavaScript Date
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-javascript-string-methods-split/'>
JavaScript String Split
</Link>
<Link to='https://www.freecodecamp.org/news/understanding-flexbox-everything-you-need-to-know-b4013d4dc9af/'>
CSS Flexbox Guide
</Link>
<Link to='https://www.freecodecamp.org/news/11-things-i-learned-reading-the-css-grid-specification-fb3983aa5e0/'>
CSS Grid Guide
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-linux-creating-a-sudo-user/'>
Create a Linux Sudo User
</Link>
<Link to='https://www.freecodecamp.org/news/the-ultimate-guide-to-ssh-setting-up-ssh-keys/'>
How to Set Up SSH Keys
</Link>
</div>
<FootCol colNum={1} title={'Our Nonprofit'} />
<FootCol colNum={2} title={'Best Tutorials'} />
<FootCol colNum={3} title={'Best Examples'} />
<FootCol colNum={4} title={'Trending Reference'} />
</div>
</div>
</footer>

View File

@ -75,12 +75,12 @@ exports[`<Block expanded snapshot: block-expanded 1`] = `
<span
className="badge map-badge"
/>
<Unknown
<mockConstructor
onClick={[Function]}
to="/super-block-one/block-a"
>
Introduction to Block A
</Unknown>
</mockConstructor>
</li>
<li
className="map-challenge-title map-challenge-title-completed"
@ -98,12 +98,12 @@ exports[`<Block expanded snapshot: block-expanded 1`] = `
}
/>
</span>
<Unknown
<mockConstructor
onClick={[Function]}
to="/super-block-one/block-a/challenge-one"
>
Challenge One
</Unknown>
</mockConstructor>
</li>
<li
className="map-challenge-title"
@ -121,12 +121,12 @@ exports[`<Block expanded snapshot: block-expanded 1`] = `
}
/>
</span>
<Unknown
<mockConstructor
onClick={[Function]}
to="/super-block-one/block-a/challenge-two"
>
Challenge Two
</Unknown>
</mockConstructor>
</li>
<li
className="map-challenge-title"
@ -144,12 +144,12 @@ exports[`<Block expanded snapshot: block-expanded 1`] = `
}
/>
</span>
<Unknown
<mockConstructor
onClick={[Function]}
to="/super-block-one/block-a/challenge-one"
>
Challenge One
</Unknown>
</mockConstructor>
</li>
<li
className="map-challenge-title map-challenge-title-completed"
@ -167,12 +167,12 @@ exports[`<Block expanded snapshot: block-expanded 1`] = `
}
/>
</span>
<Unknown
<mockConstructor
onClick={[Function]}
to="/super-block-one/block-a/challenge-two"
>
Challenge Two
</Unknown>
</mockConstructor>
</li>
</ul>
</li>

View File

@ -0,0 +1,25 @@
/* global expect */
import React from 'react';
import renderer from 'react-test-renderer';
import 'jest-dom/extend-expect';
import Link from './Link';
describe('<Link />', () => {
const externalLink = renderer
.create(<Link external={true} to='/home' />)
.toJSON();
const gatsbyLink = renderer.create(<Link to='/home' />).toJSON();
it('renders to the DOM', () => {
expect(gatsbyLink).toBeTruthy();
});
it('sets target for external links', () => {
expect(externalLink.props.target).toEqual('_blank');
});
it('does not specify target in gatsbyLink', () => {
expect(gatsbyLink.props.target).toBeFalsy();
});
});

View File

@ -19,9 +19,12 @@ body {
}
.default-layout {
display: block;
margin-top: var(--header-height);
background: var(--secondary-background);
display: flex;
flex-direction: column;
margin-top: var(--header-height);
min-height: calc(100vh - var(--header-height));
}
h1 {
@ -327,3 +330,7 @@ pre {
.has-success.checkbox-inline label {
color: var(--highlight-color);
}
.panel-primary {
border-color: var(--primary-color);
}

View File

@ -1,213 +0,0 @@
import React, { Fragment } from 'react';
import Helmet from 'react-helmet';
import { Grid, Col, Row } from '@freecodecamp/react-bootstrap';
import { Link, Spacer } from '../components/helpers';
import './common-pages.css';
/* eslint-disable max-len */
const AboutPage = () => {
return (
<Fragment>
<Helmet title='About the freeCodeCamp community | freeCodeCamp.org' />
<Spacer />
<Grid>
<Row>
<Col
className='questions'
md={6}
mdOffset={3}
sm={10}
smOffset={1}
xs={12}
>
<h2 className='text-center'>Frequently Asked Questions</h2>
<hr />
<h4>What is freeCodeCamp?</h4>
<p>
Were a community that helps you learn to code, then get
experience by contributing to open source projects used by
nonprofits.
</p>
<h4>How can you help me learn to code?</h4>
<p>
You'll learn to code by completing coding challenges and building
projects. You'll also earn verified certifications along the way.
We also encourage you to join a study group in your city so you
can code in-person with other people.
</p>
<h4>Is freeCodeCamp really free?</h4>
<p>Yes. Every aspect of freeCodeCamp is 100% free.</p>
<h4>Can freeCodeCamp help me get a job as a software developer?</h4>
<p>
Yes. Every year, thousands of people who join the freeCodeCamp
community get their first software developer job. If you're
curious, you can{' '}
<Link to='https://www.linkedin.com/school/4831032/alumni/'>
browse our alumni network on LinkedIn here
</Link>
.
</p>
<h4>How big is the freeCodeCamp community?</h4>
<p>
If you add up all the people who use our learning platform, read
our <Link to='/news'>news articles</Link>, watch our{' '}
<Link to='https://youtube.com/freecodecamp'>YouTube channel</Link>
, and post on{' '}
<Link external={true} to='/forum'>
our forum
</Link>
, each month we help millions of people learn about coding and
technology.
</p>
<h4>Is freeCodeCamp a nonprofit?</h4>
<p>
Yes, we are a 501(c)(3){' '}
<Link to='/donate'>donor-supported public charity</Link>. You can{' '}
<Link to='https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf'>
download our IRS Determination Letter here
</Link>
.
</p>
<h4>
Does freeCodeCamp accept donations in Bitcoin or other crypto
currencies?
</h4>
<p>
Yes. Our cryptographically signed wallet details are{' '}
<Link to='https://twitter.com/freeCodeCamp/status/939512108449959936'>
here
</Link>
.
</p>
<h4>
How long will it take me to finish each of freeCodeCamp's
certifications?
</h4>
<p>
Each certification takes around 300 hours of dedicated learning.
Some people may take longer. These certifications are completely
self-paced, so take as long as you need.
</p>
<h4>Is freeCodeCamp a coding bootcamp?</h4>
<p>
No. A lot of coding bootcamps use freeCodeCamp as part of their
curriculum, though.
</p>
<h4>Is freeCodeCamp a replacement for a 4-year degree?</h4>
<p>
No. Please dont drop out of college just to pursue freeCodeCamp.
You can pursue both concurrently. Even though you dont need a
4-year degree to work as a software developer, it still helps a
lot.
</p>
<h4>Should I complete all of the coding challenges in order?</h4>
<p>
Weve put a lot of thought into how we introduce concepts. But
youre free to jump around.
</p>
<h4>Do I have to use CodePen for the front end projects?</h4>
<p>
As long as your code is publicly viewable somewhere on the
internet, and you have a live demo, you can use whatever tools you
want.
</p>
<h4>How did freeCodeCamp get started?</h4>
<p>
<Link to='https://www.twitter.com/ossia'>Quincy</Link> started the
freeCodeCamp community in 2014. He is now just one of thousands of
active contributors.
</p>
<h4>
I'm a teacher. Is freeCodeCamp an appropriate resource for my
className?
</h4>
<p>
Yes. Many high school, college, and adult ed programs incorporate
freeCodeCamp into their coursework. We're open source, so no
license or special permission from us is necessary. We're even
building special tools for teachers.
</p>
<h4>
Can I live-stream myself working on freeCodeCamp challenges and
projects? Can I blog about how I solved them?
</h4>
<p>
Yes. We welcome this. Also, don't be shy about "spoiling" projects
or challenges. The solutions to all of these challenges are
already all over the internet.
</p>
<h4>
Can I create apps or tools based around the freeCodeCamp community
and platform?
</h4>
<p>
Yes. freeCodeCamp is open source (BSD-3 license), and most
non-sensitive freeCodeCamp data is publicly available. But you
must make it clear that you don't represent freeCodeCamp itself,
and that your project is not officially endorsed by freeCodeCamp.
</p>
<h4>Does freeCodeCamp have a mobile app?</h4>
<p>
You can learn on the go by listening to the{' '}
<Link to='https://podcast.freecodecamp.org'>
freeCodeCamp Podcast
</Link>{' '}
or watching{' '}
<Link to='https://youtube.com/freecodecamp'>
freeCodeCamp's YouTube channel
</Link>
. And if you want a mobile app designed specifically for learning
to code, we recommend Grasshopper. It's free and designed by a
freeCodeCamp contributor and her team. You can download it on{' '}
<Link to='https://itunes.apple.com/us/app/id1354133284'>iOS</Link>{' '}
or{' '}
<Link to='https://play.google.com/store/apps/details?id=com.area120.grasshopper&hl=en'>
Android
</Link>
.
</p>
<h4>Can I get a job at freeCodeCamp?</h4>
<p>
We're a small donor-supported nonprofit. We've hired several
prominent contributors from within the freeCodeCamp community, but
you're much more likely to get a job at{' '}
<Link to='https://www.linkedin.com/school/free-code-camp/alumni/'>
one of the hundreds of companies
</Link>{' '}
where freeCodeCamp alumni work.
</p>
<h4>Can my company advertise on freeCodeCamp?</h4>
<p>We dont show ads.</p>
<h4>How can I support the freeCodeCamp community?</h4>
<p>
You can{' '}
<Link to='/donate'>
set up a monthly donation to our nonprofit that you can afford
</Link>
.
</p>
<h4>
Where can I get technical support for using the freeCodeCamp.org
platform?
</h4>
<p>
Here are{' '}
<Link to='/support'>
answers to common technical support questions
</Link>
.
</p>
</Col>
</Row>
<Spacer size={2} />
</Grid>
</Fragment>
);
};
/* eslint-enable max-len */
AboutPage.displayName = 'AboutPage';
export default AboutPage;

View File

@ -1,29 +0,0 @@
import React, { Fragment } from 'react';
import { Grid } from '@freecodecamp/react-bootstrap';
import Helmet from 'react-helmet';
import Spacer from '../components/helpers/Spacer';
import FullWidthRow from '../components/helpers/FullWidthRow';
import HonestyPolicy from '../resources/honesty-policy';
function AcademicHonesty() {
return (
<Fragment>
<Helmet>
<title>Academic Honesty Policy | freeCodeCamp.org</title>
</Helmet>
<Grid>
<FullWidthRow>
<Spacer />
<h2 className='text-center'>Academic Honesty Policy</h2>
<hr />
<HonestyPolicy />
</FullWidthRow>
</Grid>
</Fragment>
);
}
AcademicHonesty.displayName = 'AcademicHonesty';
export default AcademicHonesty;

View File

@ -78,8 +78,7 @@ class AcceptPrivacyTerms extends Component {
<Row>
<Col xs={12}>
<div className='text-center'>
<Spacer />
<Spacer />
<Spacer size={2} />
<h3>
Please review our updated privacy policy and the terms of
service.
@ -103,7 +102,7 @@ class AcceptPrivacyTerms extends Component {
onChange={this.createHandleChange('termsOfService')}
>
I accept the{' '}
<Link external={true} to='/terms-of-service'>
<Link external={true} to='/news/terms-of-service'>
terms of service
</Link>{' '}
(required)
@ -121,7 +120,7 @@ class AcceptPrivacyTerms extends Component {
onChange={this.createHandleChange('privacyPolicy')}
>
I accept the{' '}
<Link external={true} to='/privacy-policy'>
<Link external={true} to='/news/privacy-policy'>
privacy policy
</Link>{' '}
(required)

View File

@ -1,73 +0,0 @@
import React, { Fragment } from 'react';
import Helmet from 'react-helmet';
import { Grid, Col, Row } from '@freecodecamp/react-bootstrap';
import { Link, Spacer } from '../components/helpers';
const CodeOfConductPage = () => {
return (
<Fragment>
<Helmet title='Code of Conduct | freeCodeCamp.org' />
<Spacer />
<Grid>
<Row>
<Col md={6} mdOffset={3} sm={10} smOffset={1} xs={12}>
<h2 className='text-center'>Code of Conduct</h2>
<hr />
<p>
freeCodeCamp is a friendly place to learn to code. Were committed
to keeping it that way.
</p>
<p>
By using freeCodeCamp, you agree that you'll follow this code of
conduct.
</p>
<p>In short: Be nice. No harassment, trolling, or spamming.</p>
<ul style={{ 'margin-top': '0', 'margin-bottom': '10px' }}>
<li>
<strong>Harassment</strong> includes sexual language and
imagery, deliberate intimidation, stalking, name-calling,
unwelcome attention, libel, and any malicious hacking or social
engineering. freeCodeCamp should be a harassment-free experience
for everyone, regardless of gender, gender identity and
expression, age, sexual orientation, disability, physical
appearance, body size, race, national origin, or religion (or
lack thereof).
</li>
<li>
<strong>Trolling</strong> includes posting inflammatory comments
to provoke an emotional response or disrupt discussions.
</li>
<li>
<strong>Spamming</strong> includes posting off-topic messages to
disrupt discussions, promoting a product, soliciting donations,
advertising a job / internship / gig, or flooding discussions
with files or text.
</li>
</ul>
<p>
If you see someone harass, troll, or spam anywhere in the
freeCodeCamp community (forum, chat, YouTube, Facebook, etc.),
notify us in the{' '}
<Link to='https://gitter.im/freecodecamp/admin'>
admin chat room
</Link>{' '}
- preferably with a screen shot of the offense. The moderator team
will take any action we deem appropriate, up to and including
banning the offender from freeCodeCamp.
</p>
<p>
Also, no bots are allowed in the freeCodeCamp community without
prior written permission from{' '}
<Link to='https://gitter.im/quincylarson'>Quincy Larson</Link>.
</p>
</Col>
</Row>
</Grid>
</Fragment>
);
};
CodeOfConductPage.displayName = 'CodeOfConductPage';
export default CodeOfConductPage;

View File

@ -30,8 +30,7 @@ const IndexPage = () => (
<Helmet>
<title>Learn to code | freeCodeCamp.org</title>
</Helmet>
<Spacer />
<Spacer />
<Spacer size={2} />
<Grid className='text-center'>
<Row>
<h1 className='big-heading'>Learn to code for free.</h1>
@ -81,8 +80,7 @@ const IndexPage = () => (
<p className='large-p'>Get experience by coding for nonprofits.</p>
</Col>
</Row>
<Spacer />
<Spacer />
<Spacer size={2} />
<BigCallToAction />
<Spacer />
<h2>As featured in:</h2>
@ -234,8 +232,7 @@ const IndexPage = () => (
</p>
<Spacer />
<BigCallToAction />
<Spacer />
<Spacer />
<Spacer size={2} />
</Grid>
</Fragment>
);

View File

@ -38,8 +38,7 @@ const IndexPage = ({
<LearnLayout>
<div className='learn-page-wrapper'>
<Helmet title='Learn | freeCodeCamp.org' />
<Spacer />
<Spacer />
<Spacer size={2} />
<h1 className='text-center'>Welcome to the freeCodeCamp curriculum</h1>
<p>
We have thousands of coding lessons to help you improve your skills.

View File

@ -1,267 +0,0 @@
import React, { Fragment } from 'react';
import Helmet from 'react-helmet';
import { Grid, Col, Row } from '@freecodecamp/react-bootstrap';
import { Link, Spacer } from '../components/helpers';
import './common-pages.css';
const PrivacyPolicyPage = () => {
return (
<Fragment>
<Helmet title='Privacy Policy | freeCodeCamp.org' />
<Spacer />
<Grid>
<Row>
<Col
className='questions'
md={6}
mdOffset={3}
sm={10}
smOffset={1}
xs={12}
>
<h2 className='text-center'>
freeCodeCamp.org Privacy Policy: Questions and Answers
</h2>
<hr />
<p>
We take your privacy seriously. And we give you full control over
your data.
</p>
<p>
freeCodeCamp doesn't show you ads or sell your data to anyone. Our
nonprofit is instead supported by thousands of donors - many of
whom have learned to code on freeCodeCamp, gotten developer jobs,
and want to help you do the same.
</p>
<h4>Does freeCodeCamp collect anonymous data?</h4>
<p>
When you use use the freeCodeCamp.org website, we may collect some
anonymous data so we can understand how people are using
freeCodeCamp, and basic facts like which browser they're using.
</p>
<h4>In what situations does freeCodeCamp collect personal data?</h4>
<p>
If you create a freeCodeCamp account, we will collect some
personal data so we can follow your progress toward earning
developer certifications, and so you can customize your developer
portfolio.
</p>
<h4>Can I use freeCodeCamp anonymously?</h4>
<p>
Yes. You can access all of freeCodeCamp's articles, videos,
podcasts, and interactive coding lessons without creating an
account. And if you don't create an account, we won't collect any
personal data about you.
</p>
<p>
This said, if you want to earn freeCodeCamp's developer
certifications, you will need to create an account so we can
follow your progress through our curriculum.
</p>
<h4>If I create an account, what data will you collect?</h4>
<p>
We'll ask you for your email address so you can use it to sign
into freeCodeCamp, and so we can send you announcements and
helpful programming-related links.
</p>
<p>
When you create an account on freeCodeCamp, we publish a developer
portfolio page for you on freeCodeCamp.org. If you want, you can
add details about yourself, like your name, geographic location,
and a link to your personal website.
</p>
<p>
By default, your developer portfolio will show which freeCodeCamp
lessons you have completed and when you completed them. It will
also show your code solutions for our algorithm challenges, links
any projects you've submitted, and any developer certifications
you've earned.
</p>
<p>
You have full control over your data, and can set any of these
details to private, or delete them at any time.
</p>
<h4>
You said I have full control over my data. What does that mean,
exactly?
</h4>
<p>
It means that at any time, you can download all of your data in a
convenient JSON format.
</p>
<p>
You can control which data shows up on your developer portfolio.
</p>
<p>
You can also delete any of your personal data, or even delete your
entire account.
</p>
<h4>
When I delete my personal data from freeCodeCamp, is it really
deleted from freeCodeCamp's servers?
</h4>
<p>
Yes. When you delete personal data from freeCodeCamp, we
immediately delete it from our servers.
</p>
<p>
We make emergency backups of our database every day, and we delete
each of these backups after a few days. So within a few days, your
personal data won't even exist in our backups.
</p>
<h4>Does freeCodeCamp meet Europe's GDPR privacy regulations?</h4>
<p>
Yes. freeCodeCamp respects the privacy rights covered by
Regulation (EU) 2016/679 - the European Union's General Data
Protection Regulation (GDPR). Our legal team has studied the GDPR,
and we've built new features to comply with all of its rules.
</p>
<p>
Even though GDPR only protects European citizens, freeCodeCamp is
extending these protections to everyone all over the world.
</p>
<p>
freeCodeCamp has organized all the information that GDPR requires
us to give you into this easy-to-read question-and-answer format.
Our goal is to inform you of your specific rights to access data,
erase it, port it, rectify it, and object to automated
decision-making.
</p>
<h4>Who has access to my personal data?</h4>
<p>
Even though freeCodeCamp has thousands of volunteers, none of
those people have access to your private data.
</p>
<p>
freeCodeCamp has a few full-time staff, some of whom work directly
on our databases. They have the ability to view your private data,
but only do so when providing you with technical support.
</p>
<p>
As for the personal data that you choose to share on your
developer portfolio, anyone on the internet can see it by
navigating to your developer portfolio's public URL. Again, we've
given you full control over what parts of your developer profile
are public.
</p>
<h4>What is freeCodeCamp's Donor Privacy Policy?</h4>
<p>
freeCodeCamp will not share our donors' names or personal
information with anyone outside of our nonprofit organization's
team. Donors may choose to display that they are donating to
freeCodeCamp on their freeCodeCamp profile. Otherwise, donor
information will only be used to process donations and send email
confirmations. This policy applies to any written, verbal, or
electronic communication.
</p>
<h4>Can any other organizations access my data?</h4>
<p>
We don't sell your data to anyone. In order to provide service to
you, your data does pass through some other services. All of these
companies are based in the United States.
</p>
<p>
We use Amazon Web Services, Azure, and mLab for our servers and
databases. You can read the privacy policy for{' '}
<Link to='https://aws.amazon.com/privacy/'>
Amazon Web Services
</Link>
,{' '}
<Link to='https://privacy.microsoft.com/en-us/privacystatement'>
Microsoft Azure
</Link>
, and{' '}
<Link to='https://mlab.com/company/legal/privacy/'>mLab</Link>.
</p>
<p>
We use Stripe and PayPal to process donations. You can read the
privacy policy for{' '}
<Link to='https://stripe.com/us/privacy'>Stripe</Link> and for{' '}
<Link to='https://www.paypal.com/us/webapps/mpp/ua/privacy-full'>
PayPal
</Link>
.
</p>
<p>
We use the CloudFlare and Netlify Content Delivery Networks so
that freeCodeCamp is fast in all parts of the world. You can read
the privacy policy for{' '}
<Link to='https://www.cloudflare.com/privacypolicy/'>
CloudFlare
</Link>{' '}
and <Link to='https://www.netlify.com/privacy/'>Netlify</Link>{' '}
online.
</p>
<p>
We use Auth0 to sign you into freeCodeCamp. You can read{' '}
<Link to='https://auth0.com/privacy'>
the privacy policy for Auth0 online
</Link>
.
</p>
<p>
We use Google Analytics to help us understand the demographics of
our community and how people are using freeCodeCamp. You can opt
out of Google Analytics on freeCodeCamp by{' '}
<Link to='https://tools.google.com/dlpage/gaoptout'>
installing this browser plugin
</Link>
. You can read{' '}
<Link to='https://www.google.com/analytics/terms/'>
the privacy policy for Google Analytics online
</Link>
.
</p>
<p>
For your convenience, we give you the option to sign in using
GitHub, Google, or Facebook if you don't want to use your email
address to sign in. If you choose to use one of these sign in
options, some of your freeCodeCamp data will be shared with these
companies. You can read{' '}
<Link to='https://help.github.com/articles/github-privacy-statement/'>
the privacy policy for GitHub
</Link>{' '}
and for{' '}
<Link to='https://policies.google.com/privacy'>Google</Link> and
for <Link to='https://www.facebook.com/policy.php'>Facebook</Link>
.
</p>
<h4>I have questions about my privacy on freeCodeCamp.</h4>
<p>
We're happy to answer them. Email us at{' '}
<a href='mailto:privacy@freecodecamp.org'>
privacy@freecodecamp.org
</a>
.
</p>
<h4>How can I find out about changes?</h4>
<p>
This version of freeCodeCamps privacy questions and answers took
effect May 25, 2018.
</p>
<p>
freeCodeCamp will announce the next version by email. In the
meantime, freeCodeCamp may update its contact information in these
questions and answers by updating this page
(https://www.freecodecamp.org/privacy-policy).
</p>
<p>
freeCodeCamp may change how it announces changes in a future
version of these questions and answers.
</p>
<h4>
That's all, folks. Know your privacy rights, and stay safe out
there!
</h4>
</Col>
</Row>
</Grid>
</Fragment>
);
};
PrivacyPolicyPage.displayName = 'PrivacyPolicyPage';
export default PrivacyPolicyPage;

View File

@ -11,8 +11,7 @@ function SoftwareResourcesForNonProfits() {
<Helmet>
<title>Software Resources for Nonprofits | freeCodeCamp.org</title>
</Helmet>
<Spacer />
<Spacer />
<Spacer size={2} />
<Grid>
<FullWidthRow>
<h2 className='text-center'>Software Resources for Nonprofits</h2>

View File

@ -1,19 +0,0 @@
.sls {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.sl {
max-height: 80px;
background-color: white;
padding: 5px;
border-radius: 10px;
width: 150px;
height: 100px;
margin: 0 auto;
margin-bottom: 50px;
display: flex;
align-items: center;
justify-content: center;
}

View File

@ -1,112 +0,0 @@
import React, { Fragment } from 'react';
import Helmet from 'react-helmet';
import { Grid, Col, Row } from '@freecodecamp/react-bootstrap';
import { Link, Spacer } from '../components/helpers';
import './sponsors.css';
const SponsorsPage = () => {
return (
<Fragment>
<Helmet
title={
'Sponsors who help freeCodeCamp through financial and in-kind ' +
'sponsorship | freeCodeCamp.org'
}
/>
<Spacer />
<Grid>
<Row className='text-center'>
<Col md={8} mdOffset={2} sm={10} smOffset={1} xs={12}>
<h2>Financial Sponsors</h2>
<h3>
These companies give supporting donations to freeCodeCamp.org
</h3>
<hr />
<Row className='sls'>
<Link className='sl' to='https://www.class-central.com'>
<img
alt="Class Central's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/class-central-logo.jpg'
/>
</Link>
<Link className='sl' to='https://www.tsugicloud.org'>
<img
alt="TsugiCloud's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/tsugicloud-logo.png'
/>
</Link>
</Row>
<h2>In-kind sponsors</h2>
<h3>These companies donate their services to freeCodeCamp.org</h3>
<hr />
<Row className='sls'>
<Col md={4} xs={6}>
<Link className='sl' to='https://netlify.com'>
<img
alt="Netlify's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/netlify-logo.jpg'
/>
</Link>
</Col>
<Col md={4} xs={6}>
<Link className='sl' to='https://www.mlab.com/'>
<img
alt="mLab's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/mLab-logo.png'
/>
</Link>
</Col>
<Col md={4} xs={6}>
<Link className='sl' to='https://auth0.com'>
<img
alt="Auth0's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/auth0-logo.png'
/>
</Link>
</Col>
<Col md={4} xs={6}>
<Link className='sl' to='https://www.discourse.org/'>
<img
alt="Discourse's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/discourse-logo.png'
/>
</Link>
</Col>
<Col md={4} xs={6}>
<Link className='sl' to='https://algolia.com'>
<img
alt="Algolia's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/algolia-logo.jpg'
/>
</Link>
</Col>
<Col md={4} xs={6}>
<Link className='sl' to='https://cloudflare.com'>
<img
alt="Cloudflare's logo"
className='img-responsive img-center'
src='https://s3.amazonaws.com/freecodecamp/cloudflare-logo.jpg'
/>
</Link>
</Col>
</Row>
</Col>
</Row>
</Grid>
</Fragment>
);
};
SponsorsPage.displayName = 'SponsorsPage';
export default SponsorsPage;

View File

@ -1,126 +0,0 @@
import React, { Fragment } from 'react';
import Helmet from 'react-helmet';
import { Grid, Col, Row } from '@freecodecamp/react-bootstrap';
import { Link, Spacer } from '../components/helpers';
import './common-pages.css';
/* eslint-disable max-len */
const SupportPage = () => {
return (
<Fragment>
<Helmet title='Support | freeCodeCamp.org' />
<Spacer />
<Grid>
<Row>
<Col
className='questions'
md={6}
mdOffset={3}
sm={10}
smOffset={1}
xs={12}
>
<h2 className='text-center'>Common Technical Support Questions</h2>
<hr />
<h4 id='faq_progress'>
I just signed into my account and I don't see any of my past
progress.
</h4>
<p>
You have created a duplicate account.{' '}
<Link to='/settings'>Sign out of your account</Link> and try
signing in using a different service (Google, GitHub, Facebook)
that you may have used to in the past. Or try signing in using an
email address you may have used on freeCodeCamp in the past.
</p>
<h4 id='faq_donation'>
I set up a monthly donation, but I need to update or cancel the
monthly recurrence. How can I do this?
</h4>
<p>
We are working on a dashboard for you to be able to update or
cancel your donations right from your settings page. In the
meantime, if you need to update or cancel your monthly donation,
forward an invoice you received in your email to{' '}
{
/* prettier-ignore */
}
<a href='mailto:team@freecodecamp.org'>
team@freecodecamp.org
</a>{' '}
and tell us what you'd like us to do, and we'll take care of it
for you in our database.
</p>
<h4 id='faq_solutions'>How can I view my past solutions?</h4>
<p>
We have archived the millions of solutions from prior to June
2018, and are working on a sustainable way to host them and future
solutions.
</p>
<p>
You can meanwhile use the download my solution button to view and
copy the solution after you complete a challenge, from the local
copy on your browser.
</p>
<h4 id='faq_streak'>My streak on my portfolio is inaccurate.</h4>
<p>
We are working on fixing a number of issues with the streaks on
freeCodeCamp. Thanks for your patience.
</p>
<h4>
When I go to <Link to='/learn'>Learning Curriculum</Link> the
challenges are completely blank.
</h4>
<p>
Do a hard refresh of the website by pressing control+shift+r in
Windows or command+shift+r on Mac/Linux. If that doesn't work, you
may need to clear your cookies. Here is{' '}
<Link external={true} to='/forum/t/205075'>
how to clear specific cookies
</Link>
.
</p>
<h4>
One of my freeCodeCamp challenges freezes and crashes when I open
it.
</h4>
<p>
This is caused by an infinite loop in your code editor.{' '}
<Link external={true} to='/forum/t/19550'>
Here's how to fix this
</Link>
.
</p>
<h4>I cannot pass a challenge, but I think my code is correct</h4>
<p>
Some browser extensions can interfere with challenge tests. If you
are using any, try disabling them and running the tests again. If
the problem remains, click the challenge's 'Ask for Help' button
to post on the forum. You will need to create a forum account if
you don't already have one.
</p>
<h4>I have a support question that isn't answered here.</h4>
<p>
You can ask for help on our forum, and the freeCodeCamp volunteer
contributor team will do their best to help you. Note that for
privacy and security reasons, they don't have access to your
account in the freeCodeCamp database. Also note that you will need
to create a forum account if you don't already have one.{' '}
<Link external={true} to='/forum/new-topic?category=support'>
Click here to ask your support question
</Link>
.
</p>
</Col>
</Row>
</Grid>
</Fragment>
);
};
/* eslint-enable max-len */
SupportPage.displayName = 'SupportPage';
export default SupportPage;

View File

@ -1,428 +0,0 @@
import React, { Fragment } from 'react';
import Helmet from 'react-helmet';
import { Grid, Col, Row } from '@freecodecamp/react-bootstrap';
import { Link, Spacer } from '../components/helpers';
import './common-pages.css';
const TermsOfServicePage = () => {
return (
<Fragment>
<Helmet title='Terms of Service | freeCodeCamp.org' />
<Spacer />
<Grid>
<Row>
<Col
className='questions'
md={6}
mdOffset={3}
sm={10}
smOffset={1}
xs={12}
>
<h2 className='text-center'>freeCodeCamp's Terms of Service</h2>
<hr />
<p>
These terms govern use of the website{' '}
<Link to='https://www.freecodecamp.org'>
https://www.freecodecamp.org
</Link>
. To use the website, you must agree to these terms with Free Code
camp, Inc., the nonprofit company that runs the website.
</p>
<p>
The company may offer other products and services, under different
terms. These terms apply only to use of the website.
</p>
<h4>Skip to:</h4>
<ul>
<li>
<a href='#important-terms'>Important Terms</a>
</li>
<li>
<a href='#permission'>Your Permission to Use the Website</a>
</li>
<li>
<a href='#conditions'>Conditions for Use of the Website</a>
</li>
<li>
<a href='#acceptable-use'>Acceptable Use</a>
</li>
<li>
<a href='#content-standards'>Content Standards</a>
</li>
<li>
<a href='#enforcement'>Enforcement</a>
</li>
<li>
<a href='#your-account'>Your Account</a>
</li>
<li>
<a href='#your-content'>Your Content</a>
</li>
<li>
<a href='#your-responsibility'>Your Responsibility</a>
</li>
<li>
<a href='#disclaimers'>Disclaimers</a>
</li>
<li>
<a href='#limits-on-liability'>Limits on Liability</a>
</li>
<li>
<a href='#feedback'>Feedback</a>
</li>
<li>
<a href='#termination'>Termination</a>
</li>
<li>
<a href='#disputes'>Disputes</a>
</li>
<li>
<a href='#general-terms'>General Terms</a>
</li>
<li>
<a href='#contact'>Contact</a>
</li>
<li>
<a href='#changes'>Changes</a>
</li>
</ul>
<h4 id='important-terms'>Important Terms</h4>
<p>
These terms include a number of important provisions that affect
your rights and responsibilities, such as the disclaimers in
Disclaimers, limits on the companys liability to you in Limits on
Liability, your agreement to cover the company for damages caused
by your misuse of the website in Responsibility for Your Use, and
an agreement to arbitrate disputes in Disputes.
</p>
<h4 id='permission'>Your Permission to Use the Website</h4>
<p>
Subject to these terms, the company gives you permission to use
the website. That permission isnt exclusive to you, and you cant
transfer it to anyone else. Others need to agree to these terms
for themselves to use the website.
</p>
<h4 id='conditions'>Conditions for Use of the Website</h4>
<p>
Your permission to use the website is subject to the following
conditions:
</p>
<p>You must be at least thirteen years old.</p>
<p>
You may no longer use the website if the company contacts you
directly to say that you may not.
</p>
<p>
You must use the website in accordance with Acceptable Use and
Content Standards.
</p>
<h4 id='acceptable-use'>Acceptable Use</h4>
<p>You may not break the law using the website.</p>
<p>
You may not use or try to use anothers account on the website
without their specific permission.
</p>
<p>
You may not buy, sell, or otherwise trade in user names or other
unique identifiers on the website.
</p>
<p>
You may not send advertisements, chain letters, or other
solicitations through the website, or use the website to gather
addresses for commercial mailing lists.
</p>
<p>
You may not automate access to the website, or monitor the
website, such as with a web crawler, browser plug-in or add-on, or
other computer program that is not a web browser. You may crawl
the website to index it for a publicly available search engine.
</p>
<p>
You may not use the website to send e-mail to distribution lists,
newsgroups, or group mail aliases.
</p>
<p>
You may not falsely imply that youre affiliated with or endorsed
by the company.
</p>
<p>
You may not hyperlink to images or other non-hypertext content on
the website.
</p>
<p>
You may not remove any marks showing proprietary ownership from
materials you download from the website.
</p>
<p>
You may not show any part of the website on other websites with
using iframes.
</p>
<p>
You may not disable, avoid, or circumvent any security or access
restrictions of the website.
</p>
<p>
You may not strain infrastructure of the website with an
unreasonable volume of requests, or requests designed to impose an
unreasonable load on information systems underlying the website.
</p>
<p>
You may not encourage or help anyone in violation of these terms.
</p>
<p>You may not impersonate others through the website.</p>
<h4 id='content-standards'>Content Standards</h4>
<p>
You may not submit content to the website that is illegal,
offensive, or otherwise harmful to others. This includes content
that is harassing, inappropriate, or abusive.
</p>
<p>
You may not submit content to the website that violates the law,
infringes anyones intellectual property rights, violates anyones
privacy, or breaches agreements you have with others.
</p>
<p>
You may not submit content to the website containing malicious
computer code, such as computer viruses or spyware.
</p>
<p>
You may not submit content to the website as a mere placeholder,
to hold a particular address, user name, or other unique
identifier.
</p>
<p>
You may not use the website to disclose information that you dont
have the right to disclose, like others confidential information.
</p>
<h4 id='enforcement'>Enforcement</h4>
<p>
The company may investigate and prosecute violations of these
terms to the fullest legal extent. The company may notify and
cooperate with law enforcement authorities in prosecuting
violations of the law and these terms.
</p>
<p>
The company reserves the right to change, redact, and delete
content on the website for any reason. If you believe someone has
submitted content to the website in violation of these terms,
please contact us immediately.
</p>
<h4 id='your-account'>Your Account</h4>
<p>
You must create and log into an account to use some features of
the website.
</p>
<p>
To create an account, you must provide some information about
yourself. If you create an account, you agree to provide, at a
minimum, a valid e-mail address, and to keep that address
up-to-date. You may close your account at any time by logging into
your account and clicking the button on your account settings
page.
</p>
<p>
You agree to be responsible for all action taken using your
account, whether authorized by you or not, until you either close
your account or notify the company that your account has been
compromised. You agree to notify the company immediately if you
suspect your account has been compromised. You agree to select a
secure password for your account, and keep it secret.
</p>
<p>
The company may restrict, suspend, or close your account on the
website according to its policy for handling copyright-related
takedown requests, or if the company reasonably believes that
youve breached these terms.
</p>
<h4 id='your-content'>Your Content</h4>
<p>
Nothing in these terms gives the company any ownership rights in
intellectual property that you share with the website, such as
your account information or other content you submit to the
website. Nothing in these terms gives you any ownership rights in
the companys intellectual property, either.
</p>
<p>
Between you and the company, you remain solely responsible for
content you submit to the website. You agree not to wrongly imply
that content you submit to the website is sponsored or approved by
the company. These terms do not obligate the company to store,
maintain, or provide copies of content you submit.
</p>
<p>
Content you submit to the website belongs to you, and you decide
what permission to give others for it. But at a minimum, you
license the company to provide content that you submit to the
website to other users of the website. That special license allows
the company to copy, publish, and analyze content you submit to
the website.
</p>
<p>
When content you submit is removed from the website, whether by
you or by the company, the companys special license ends when the
last copy disappears from the companys backups, caches, and other
systems. Other licenses you apply to content you submit may
continue after your content is removed. Those licenses may give
others, or the company itself, the right to share your content
through the website again.
</p>
<p>
Others who receive content you submit to the website may violate
the terms on which you license your content. You agree that the
company will not be liable to you for those violations or their
consequences.
</p>
<h4 id='your-responsibility'>Your Responsibility</h4>
<p>
You agree to indemnify the company from legal claims by others
related to your breach of these terms, or breach of these terms by
others using your account on the website. Both you and the company
agree to notify the other side of any legal claims for which you
might have to indemnify the company as soon as possible. If the
company fails to notify you of a legal claim promptly, you wont
have to indemnify the company for damages that you could have
defended against or mitigated with prompt notice. You agree to
allow the company to control investigation, defense, and
settlement of legal claims for which you would have to indemnify
the company, and to cooperate with those efforts. The company
agrees not to agree to any settlement that admits fault for you or
imposes obligations on you without your prior agreement.
</p>
<h4 id='disclaimers'>Disclaimers</h4>
<p>
You accept all risk of using the website and content on the
website. As far as the law allows, the company provides the
website as is, without any warranty whatsoever.
</p>
<p>
The website may hyperlink to and integrate websites and services
run by others. The company does not make any warranty about
services run by others, or content they may provide. Use of
services run by others may be governed by other terms between you
and the one running service.
</p>
<h4 id='limits-on-liability'>Limits on Liability</h4>
<p>
The company will not be liable to you for breach-of-contract
damages company personnel could not have reasonably foreseen when
you agreed to these terms.
</p>
<p>
As far as the law allows, the companys total liability to you for
claims of any kind that are related to the website or content on
the website will be limited to $50.
</p>
<h4 id='feedback'>Feedback</h4>
<p>
The company welcomes your feedback and suggestions for the
website. See the Contact section below for ways to get in touch
with us.
</p>
<p>
You agree that the company will be free to act on feedback and
suggestions you provide, and that the company wont have to notify
you that your feedback was used, get your permission to use it, or
pay you. You agree not to submit feedback or suggestions that you
believe might be confidential or proprietary, to you or others.
</p>
<h4 id='termination'>Termination</h4>
<p>
Either you or the company may end the agreement written out in
these terms at any time. When our agreement ends, your permission
to use the website also ends.
</p>
<p>
The following provisions survive the end of our agreement: Your
Content, Feedback, Your Responsibility, Disclaimers, Limits on
Liability, and General Terms.
</p>
<h4 id='disputes'>Disputes</h4>
<p>
California law will govern any dispute, including any legal
proceedings, related to these terms or your use of the website.
</p>
<p>
You and the company agree to seek injunctions related to these
terms only in state or federal court in San Francisco, California.
Neither you nor the company will object to jurisdiction, forum, or
venue in those courts.
</p>
<p>
Other than to seek an injunction or for claims under the Computer
Fraud and Abuse Act, you and the company will resolve any Dispute
by binding American Arbitration Association arbitration.
Arbitration will follow the AAAs Commercial Arbitration Rules and
Supplementary Procedures for Consumer Related Disputes.
Arbitration will happen in San Francisco, California. You will
settle any dispute as an individual, and not as part of a class
action or other representative proceeding, whether as the
plaintiff or a class member. No arbitrator will consolidate any
dispute with any other arbitration without the companys
permission.
</p>
<p>
Any arbitration award will include costs of the arbitration,
reasonable attorneys fees, and reasonable costs for witnesses.
You or the company may enter arbitration awards in any court with
jurisdiction.
</p>
<h4 id='general-terms'>General Terms</h4>
<p>
If a provision of these terms is unenforceable as written, but
could be changed to make it enforceable, that provision should be
modified to the minimum extent necessary to make it enforceable.
Otherwise, that provision should be removed.
</p>
<p>
You may not assign your agreement with the company. The company
may assign your agreement to any affiliate of the company, any
other company that obtains control of the company, or any other
company that buys assets of the company related to the website.
Any attempted assignment against these terms has no legal effect.
</p>
<p>
Neither the exercise of any right under this Agreement, nor waiver
of any breach of this Agreement, waives any other breach of this
Agreement.
</p>
<p>
These terms embody all the terms of agreement between you and the
company about use of the website. These terms entirely replace any
other agreements about your use of the website, written or not.
</p>
<h4 id='contact'>Contact</h4>
<p>
You may notify the company under these terms, and send questions
to the company, at team@freecodecamp.org.
</p>
<p>
The company may notify you under these terms using the e-mail
address you provide for your account on the website, or by posting
a message to the homepage of the website or your account page.
</p>
<h4 id='changes'>Changes</h4>
<p>
The company last updated these terms on May 25, 2018, and may
update these terms again. The company will post all updates to the
website. For updates that contain substantial changes, the company
agrees to e-mail you, if youve created an account and provided a
valid e-mail address. The company may also announce updates with
special messages or alerts on the website.
</p>
<p>
Once you get notice of an update to these terms, you must agree to
the new terms in order to keep using the website.
</p>
</Col>
</Row>
</Grid>
</Fragment>
);
};
TermsOfServicePage.displayName = 'TermsOfServicePage';
export default TermsOfServicePage;

View File

@ -4,13 +4,13 @@ exports[`<ChallengeTitle/> renders correctly 1`] = `
<div
className="challenge-title-wrap"
>
<MockedLink
<a
aria-label="Previous lesson"
className="btn-invert btn btn-primary"
to="/prev"
href="/prev"
>
&lt;
</MockedLink>
</a>
<h2
className="text-center challenge-title"
>
@ -20,12 +20,12 @@ exports[`<ChallengeTitle/> renders correctly 1`] = `
title="Completed"
/>
</h2>
<MockedLink
<a
aria-label="Next lesson"
className="btn-invert btn btn-primary"
to="/intro/path"
href="/intro/path"
>
&gt;
</MockedLink>
</a>
</div>
`;