feat: add payment option image to donation forms (#37938)

pull/37975/head
Ahmad Abdolsaheb 2019-12-23 15:31:10 +03:00 committed by mrugesh
parent 19352442ce
commit d08a87bcd6
9 changed files with 191 additions and 76 deletions

View File

@ -0,0 +1,50 @@
/* eslint-disable max-len */
import React, { Fragment } from 'react';
const propTypes = {};
function Paypal(props) {
return (
<Fragment>
<span className='sr-only'>Paypal</span>
<svg
height={33}
version='1.1'
viewBox='0 0 124 33'
width={124}
xmlns='http://www.w3.org/2000/svg'
{...props}
>
<path
d='M46.211 6.749h-6.839a.95.95 0 0 0-.939.802l-2.766 17.537a.57.57 0 0 0 .564.658h3.265a.95.95 0 0 0 .939-.803l.746-4.73a.95.95 0 0 1 .938-.803h2.165c4.505 0 7.105-2.18 7.784-6.5.306-1.89.013-3.375-.872-4.415-.972-1.142-2.696-1.746-4.985-1.746zM47 13.154c-.374 2.454-2.249 2.454-4.062 2.454h-1.032l.724-4.583a.57.57 0 0 1 .563-.481h.473c1.235 0 2.4 0 3.002.704.359.42.469 1.044.332 1.906zM66.654 13.075h-3.275a.57.57 0 0 0-.563.481l-.145.916-.229-.332c-.709-1.029-2.29-1.373-3.868-1.373-3.619 0-6.71 2.741-7.312 6.586-.313 1.918.132 3.752 1.22 5.031.998 1.176 2.426 1.666 4.125 1.666 2.916 0 4.533-1.875 4.533-1.875l-.146.91a.57.57 0 0 0 .562.66h2.95a.95.95 0 0 0 .939-.803l1.77-11.209a.568.568 0 0 0-.561-.658zm-4.565 6.374c-.316 1.871-1.801 3.127-3.695 3.127-.951 0-1.711-.305-2.199-.883-.484-.574-.668-1.391-.514-2.301.295-1.855 1.805-3.152 3.67-3.152.93 0 1.686.309 2.184.892.499.589.697 1.411.554 2.317zM84.096 13.075h-3.291a.954.954 0 0 0-.787.417l-4.539 6.686-1.924-6.425a.953.953 0 0 0-.912-.678h-3.234a.57.57 0 0 0-.541.754l3.625 10.638-3.408 4.811a.57.57 0 0 0 .465.9h3.287a.949.949 0 0 0 .781-.408l10.946-15.8a.57.57 0 0 0-.468-.895z'
fill='#253B80'
/>
<path
d='M94.992 6.749h-6.84a.95.95 0 0 0-.938.802l-2.766 17.537a.569.569 0 0 0 .562.658h3.51a.665.665 0 0 0 .656-.562l.785-4.971a.95.95 0 0 1 .938-.803h2.164c4.506 0 7.105-2.18 7.785-6.5.307-1.89.012-3.375-.873-4.415-.971-1.142-2.694-1.746-4.983-1.746zm.789 6.405c-.373 2.454-2.248 2.454-4.062 2.454h-1.031l.725-4.583a.568.568 0 0 1 .562-.481h.473c1.234 0 2.4 0 3.002.704.359.42.468 1.044.331 1.906zM115.434 13.075h-3.273a.567.567 0 0 0-.562.481l-.145.916-.23-.332c-.709-1.029-2.289-1.373-3.867-1.373-3.619 0-6.709 2.741-7.311 6.586-.312 1.918.131 3.752 1.219 5.031 1 1.176 2.426 1.666 4.125 1.666 2.916 0 4.533-1.875 4.533-1.875l-.146.91a.57.57 0 0 0 .564.66h2.949a.95.95 0 0 0 .938-.803l1.771-11.209a.571.571 0 0 0-.565-.658zm-4.565 6.374c-.314 1.871-1.801 3.127-3.695 3.127-.949 0-1.711-.305-2.199-.883-.484-.574-.666-1.391-.514-2.301.297-1.855 1.805-3.152 3.67-3.152.93 0 1.686.309 2.184.892.501.589.699 1.411.554 2.317zM119.295 7.23l-2.807 17.858a.569.569 0 0 0 .562.658h2.822c.469 0 .867-.34.939-.803l2.768-17.536a.57.57 0 0 0-.562-.659h-3.16a.571.571 0 0 0-.562.482z'
fill='#179BD7'
/>
<path
d='M7.266 29.154l.523-3.322-1.165-.027H1.061L4.927 1.292a.316.316 0 0 1 .314-.268h9.38c3.114 0 5.263.648 6.385 1.927.526.6.861 1.227 1.023 1.917.17.724.173 1.589.007 2.644l-.012.077v.676l.526.298a3.69 3.69 0 0 1 1.065.812c.45.513.741 1.165.864 1.938.127.795.085 1.741-.123 2.812-.24 1.232-.628 2.305-1.152 3.183a6.547 6.547 0 0 1-1.825 2c-.696.494-1.523.869-2.458 1.109-.906.236-1.939.355-3.072.355h-.73c-.522 0-1.029.188-1.427.525a2.21 2.21 0 0 0-.744 1.328l-.055.299-.924 5.855-.042.215c-.011.068-.03.102-.058.125a.155.155 0 0 1-.096.035H7.266z'
fill='#253B80'
/>
<path
d='M23.048 7.667c-.028.179-.06.362-.096.55-1.237 6.351-5.469 8.545-10.874 8.545H9.326c-.661 0-1.218.48-1.321 1.132L6.596 26.83l-.399 2.533a.704.704 0 0 0 .695.814h4.881c.578 0 1.069-.42 1.16-.99l.048-.248.919-5.832.059-.32c.09-.572.582-.992 1.16-.992h.73c4.729 0 8.431-1.92 9.513-7.476.452-2.321.218-4.259-.978-5.622a4.667 4.667 0 0 0-1.336-1.03z'
fill='#179BD7'
/>
<path
d='M21.754 7.151a9.757 9.757 0 0 0-1.203-.267 15.284 15.284 0 0 0-2.426-.177h-7.352a1.172 1.172 0 0 0-1.159.992L8.05 17.605l-.045.289a1.336 1.336 0 0 1 1.321-1.132h2.752c5.405 0 9.637-2.195 10.874-8.545.037-.188.068-.371.096-.55a6.594 6.594 0 0 0-1.017-.429 9.045 9.045 0 0 0-.277-.087z'
fill='#222D65'
/>
<path
d='M9.614 7.699a1.169 1.169 0 0 1 1.159-.991h7.352c.871 0 1.684.057 2.426.177a9.757 9.757 0 0 1 1.481.353c.365.121.704.264 1.017.429.368-2.347-.003-3.945-1.272-5.392C20.378.682 17.853 0 14.622 0h-9.38c-.66 0-1.223.48-1.325 1.133L.01 25.898a.806.806 0 0 0 .795.932h5.791l1.454-9.225 1.564-9.906z'
fill='#253B80'
/>
</svg>
</Fragment>
);
}
Paypal.displayName = 'Paypal';
Paypal.propTypes = propTypes;
export default Paypal;

View File

@ -23,7 +23,7 @@ import standardErrorMessage from '../utils/standardErrorMessage';
import reallyWeirdErrorMessage from '../utils/reallyWeirdErrorMessage';
import RedirectHome from '../components/RedirectHome';
import { Loader, Spacer } from '../components/helpers';
import { Loader } from '../components/helpers';
const propTypes = {
cert: PropTypes.shape({
@ -153,14 +153,13 @@ class ShowCertification extends Component {
const donationCloseBtn = (
<div>
<Spacer />
<Button
block={true}
bsSize='sm'
bsStyle='primary'
onClick={this.hideDonationSection}
>
Close.
Close
</Button>
</div>
);
@ -173,23 +172,25 @@ class ShowCertification extends Component {
) {
conditionalDonationSection = (
<Grid className='donation-section'>
<Row className='certification-donation'>
<Col sm={10} smOffset={1} xs={12}>
<p>
Only you can see this message. Congratulations on earning this
certification. Its no easy task. Running freeCodeCamp isnt
easy either. Nor is it cheap. Help us help you and many other
people around the world. Make a tax-deductible supporting
donation to our nonprofit today.
</p>
</Col>
</Row>
{!closeBtn && (
<Row>
<Col sm={10} smOffset={1} xs={12}>
<p>
Only you can see this message. Congratulations on earning this
certification. Its no easy task. Running freeCodeCamp isnt
easy either. Nor is it cheap. Help us help you and many other
people around the world. Make a tax-deductible supporting
donation to our nonprofit today.
</p>
</Col>
</Row>
)}
<MinimalDonateForm
showCloseBtn={this.showDonationCloseBtn}
defaultTheme='light'
/>
<Row className='certification-donation'>
<Col sm={10} smOffset={1} xs={12}>
<Row>
<Col sm={4} smOffset={4} xs={6} xsOffset={3}>
{closeBtn ? donationCloseBtn : ''}
</Col>
</Row>

View File

@ -46,9 +46,13 @@ function DonateCompletion({
{success && !yearEndGift && (
<div>
<p>
Your donation will support free technology education for people
Your donations will support free technology education for people
all over the world.
</p>
<p>
You can update your supporter status at any time from your
settings page.
</p>
</div>
)}
{success && yearEndGift && (

View File

@ -176,14 +176,6 @@ li.disabled > a {
}
}
.donation-icon-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin: 40px;
}
.donation-icon {
width: 150px;
height: auto;
@ -205,33 +197,79 @@ li.disabled > a {
}
}
.donation-modal p {
text-align: center;
font-weight: 700;
font-size: 1.1rem;
}
.donation-modal .modal-title {
text-align: center;
font-weight: 700;
font-size: 1.5rem;
}
.donation-modal .btn-link:focus {
outline-width: 1px;
outline-style: solid;
}
@media screen and (max-width: 991px) {
.donation-icon-container {
margin: 30px;
}
.donation-modal p {
font-weight: 400;
font-size: 1rem;
}
.donation-modal .modal-title {
font-weight: 600;
font-size: 1.2rem;
.donation-modal .modal-title {
text-align: center;
font-weight: 600;
font-size: 1.2rem;
}
.donation-modal p,
.donation-modal b {
text-align: center;
font-size: 1rem;
}
.donation-icon-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin: 30px;
}
.form-payments-wrapper {
height: auto;
display: flex;
align-items: center;
justify-content: flex-start;
margin-top: 15px;
height: auto;
}
.form-payment-methods {
height: 20px;
width: 200px;
}
@media screen and (min-width: 355px) {
.form-payment-methods {
height: 30px;
width: 300px;
}
}
@media screen and (min-width: 991px) {
.form-payments-wrapper {
justify-content: flex-end;
margin-top: 0;
height: 39px;
}
.donate-page-wrapper .form-payment-methods {
height: 22px;
width: 220px;
}
.donation-icon-container {
margin: 40px;
}
.donation-modal p {
font-size: 1.1rem;
}
.donation-modal .modal-title {
font-weight: 700;
font-size: 1.5rem;
}
}
@media screen and (min-width: 1200px) {
.donate-page-wrapper .form-payment-methods {
height: 25px;
width: 250px;
}
}

View File

@ -58,16 +58,25 @@ function DonateModal({ show, block, isBlockDonation, closeDonationModal }) {
if (show) {
ga.modalview('/donation-modal');
}
const donationText = (
<b>
Become a supporter and help us create even more learning resources for
you.
</b>
);
const blockDonationText = (
<div className='block-modal-text'>
<div className='donation-icon-container'>
<Cup className='donation-icon' />
</div>
<Row>
<Col sm={10} smOffset={1} xs={12}>
<p>Nicely done. You just completed {blockNameify(block)}.</p>
<p>Help us create even more learning resources like this.</p>
</Col>
{!closeLabel && (
<Col sm={10} smOffset={1} xs={12}>
<b>Nicely done. You just completed {blockNameify(block)}.</b>
{donationText}
</Col>
)}
</Row>
</div>
);
@ -78,29 +87,24 @@ function DonateModal({ show, block, isBlockDonation, closeDonationModal }) {
<Heart className='donation-icon' />
</div>
<Row>
<Col sm={10} smOffset={1} xs={12}>
<p>
Help us create even more learning resources for you and your family.
</p>
</Col>
{!closeLabel && (
<Col sm={10} smOffset={1} xs={12}>
{donationText}
</Col>
)}
</Row>
</div>
);
return (
<Modal bsSize='lg' className='donation-modal' show={show}>
<Modal.Header className='fcc-modal'>
<Modal.Title className='modal-title text-center'>
<strong>Become a Supporter</strong>
</Modal.Title>
</Modal.Header>
<Modal.Body>
{isBlockDonation ? blockDonationText : progressDonationText}
<Spacer />
<MinimalDonateForm showCloseBtn={showCloseBtn} />
<Spacer />
<Row>
<Col sm={10} smOffset={1} xs={12}>
<Col sm={4} smOffset={4} xs={8} xsOffset={2}>
<Button
block={true}
bsSize='sm'
@ -109,7 +113,7 @@ function DonateModal({ show, block, isBlockDonation, closeDonationModal }) {
onClick={closeDonationModal}
tabIndex='0'
>
{closeLabel ? 'Close.' : 'Ask me later.'}
{closeLabel ? 'Close' : 'Ask me later'}
</Button>
</Col>
</Row>

View File

@ -1,7 +1,13 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { CardNumberElement, CardExpiryElement } from 'react-stripe-elements';
import { ControlLabel, FormGroup } from '@freecodecamp/react-bootstrap';
import {
Row,
Col,
ControlLabel,
FormGroup,
Image
} from '@freecodecamp/react-bootstrap';
const propTypes = {
getValidationState: PropTypes.func.isRequired,
@ -77,12 +83,26 @@ class StripeCardForm extends Component {
/>
</FormGroup>
<FormGroup>
<ControlLabel>Your Card Expiration Month:</ControlLabel>
<CardExpiryElement
className='form-control donate-input-element'
onChange={this.handleInputChange}
style={style}
/>
<ControlLabel>Expiration Date:</ControlLabel>
<Row>
<Col md={5} xs={12}>
<CardExpiryElement
className='form-control donate-input-element'
onChange={this.handleInputChange}
style={style}
/>
</Col>
<Col className='form-payments-wrapper' md={7} xs={12}>
<Image
alt='payment options'
className='form-payment-methods'
src={
'https://cdn.freecodecamp.org' +
'/platform/universal/form-payments.png'
}
/>
</Col>
</Row>
</FormGroup>
</div>
);

View File

@ -255,7 +255,6 @@ class YearEndDonationForm extends Component {
? this.renderCustomAmountInput()
: this.renderOtherPaymentButton()}
</Col>
<Col sm={10} smOffset={1} xs={12}>
{this.renderDonationOptions()}
<Spacer />
@ -267,7 +266,6 @@ class YearEndDonationForm extends Component {
{this.renderPayPalDonations()}
<Spacer />
</Col>
<Col sm={10} smOffset={1} xs={12}>
<b>
If you need a receipt from your taxes, reply to Quincy's email he

View File

@ -42,13 +42,13 @@
padding: 20px 0px;
}
.certificate-outer-wrapper .certification-donation .btn {
.certificate-outer-wrapper .btn {
background-color: var(--gray-15);
border-color: var(--gray-85);
color: var(--gray-85);
}
.certificate-outer-wrapper .certification-donation .btn:hover {
.certificate-outer-wrapper .btn:hover {
border-color: var(--gray-85);
background-color: var(--gray-85);
color: var(--gray-05);

View File

@ -76,7 +76,7 @@ export class DonatePage extends Component {
return (
<Fragment>
<Helmet title='Support our nonprofit | freeCodeCamp.org' />
<Grid>
<Grid className='donate-page-wrapper'>
<Spacer />
<Row>
<Col sm={10} smOffset={1} xs={12}>