diff --git a/src/components/page/www/donor-recognition.jsx b/src/components/page/www/donor-recognition.jsx new file mode 100644 index 000000000..033e8c3fe --- /dev/null +++ b/src/components/page/www/donor-recognition.jsx @@ -0,0 +1,36 @@ +const FormattedMessage = require('react-intl').FormattedMessage; +const injectIntl = require('react-intl').injectIntl; +const React = require('react'); + +require('./donor-recognition.scss'); + +const DonorRecognition = () => ( +
+
+ + + + ) + }} + /> +
+
+ +
+
+); + +module.exports = injectIntl(DonorRecognition); diff --git a/src/components/page/www/donor-recognition.scss b/src/components/page/www/donor-recognition.scss new file mode 100644 index 000000000..99e5bb87b --- /dev/null +++ b/src/components/page/www/donor-recognition.scss @@ -0,0 +1,38 @@ +@import "../../../colors"; +@import "../../../frameless"; + +#donor { + color: $type-gray; + font-size: .875rem; + line-height: 1.5em; + background-color: $ui-gray; + padding-bottom: 2.5rem; + padding-top: 1rem; + #donor-text { + text-align: center; + width: $cols12; + margin: 0 auto; + } +} + +@media only screen and (min-width: $tabletPortrait) and (max-width: $desktop) { + #donor { + #donor-text { + width: $cols11; + } + } +} +@media only screen and (min-width: $mobile) and (max-width: $tabletPortrait) { + #donor { + #donor-text { + width: $cols6; + } + } +} +@media only screen and (max-width: $mobile) { + #donor { + #donor-text { + width: $cols4; + } + } +} diff --git a/src/components/page/www/page.jsx b/src/components/page/www/page.jsx index 77f3712ba..23676a325 100644 --- a/src/components/page/www/page.jsx +++ b/src/components/page/www/page.jsx @@ -4,11 +4,13 @@ const React = require('react'); const Navigation = require('../../navigation/www/navigation.jsx'); const Footer = require('../../footer/www/footer.jsx'); +const DonorRecognition = require('./donor-recognition.jsx'); const ErrorBoundary = require('../../errorboundary/errorboundary.jsx'); const Page = ({ children, - className + className, + showDonorRecognition }) => (
@@ -26,13 +28,19 @@ const Page = ({ + {showDonorRecognition && +
+ +
+ }
); Page.propTypes = { children: PropTypes.node, - className: PropTypes.string + className: PropTypes.string, + showDonorRecognition: PropTypes.bool }; module.exports = Page; diff --git a/src/l10n.json b/src/l10n.json index 840295d2c..a1a17c168 100644 --- a/src/l10n.json +++ b/src/l10n.json @@ -122,6 +122,9 @@ "footer.discuss": "Discussion Forums", "footer.scratchFamily": "Scratch Family", + "footer.donorRecognition": "Scratch is available for free, thanks to generous support from our {donorLink}. We are grateful to our Founding Partners:", + "footer.donors": "donors", + "footer.donorList": "{donor1}, {donor2}, and {donor3}", "form.validationRequired": "This field is required", diff --git a/src/views/credits/credits.jsx b/src/views/credits/credits.jsx index 5aa272cbe..05d7abe08 100644 --- a/src/views/credits/credits.jsx +++ b/src/views/credits/credits.jsx @@ -46,7 +46,10 @@ const Credits = () => ( ))} -
+

diff --git a/src/views/splash/splash.jsx b/src/views/splash/splash.jsx index 8910c0ce2..2c92600b6 100644 --- a/src/views/splash/splash.jsx +++ b/src/views/splash/splash.jsx @@ -271,7 +271,11 @@ const ConnectedSplash = connect( )(Splash); render( - , + + + , document.getElementById('app'), {splash: splashActions.splashReducer} ); diff --git a/test/unit/components/page.test.jsx b/test/unit/components/page.test.jsx new file mode 100644 index 000000000..1fecbf52e --- /dev/null +++ b/test/unit/components/page.test.jsx @@ -0,0 +1,21 @@ +const React = require('react'); +const {shallowWithIntl} = require('../../helpers/intl-helpers.jsx'); +const Page = require('../../../src/components/page/www/page.jsx'); + +describe('Page', () => { + test('Do not show donor recognition', () => { + const component = shallowWithIntl( + + ); + expect(component.find('#donor')).toHaveLength(0); + }); + + test('Show donor recognition', () => { + const component = shallowWithIntl( + + ); + expect(component.find('#donor')).toHaveLength(1); + }); +});