feat: add caption to user links (#1075)

* feat: add caption to users links

created a shared component `Showcase`

* Cleans linter

* revert main.css changes — update custom.css

* Move Showcase comp to website out of lib - fix layout
This commit is contained in:
Goksu Toprak 2018-11-02 10:20:25 -07:00 committed by Yangshun Tay
parent 8bcb5d3365
commit 3250662e73
4 changed files with 96 additions and 23 deletions

View file

@ -0,0 +1,40 @@
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const React = require('react');
const PropTypes = require('prop-types');
const UserLink = ({infoLink, image, caption}) => (
<a className="link" href={infoLink} key={infoLink}>
<img src={image} alt={caption} title={caption} />
<span className="caption">{caption}</span>
</a>
);
UserLink.propTypes = {
infoLink: PropTypes.string.isRequired,
image: PropTypes.string.isRequired,
caption: PropTypes.string.isRequired,
};
const Showcase = ({users}) => (
<div className="showcase">
{users.map(user => (
<UserLink key={user.infoLink} {...user} />
))}
</div>
);
Showcase.propTypes = {
users: PropTypes.array.isRequired,
};
Showcase.defaultProps = {
users: [],
};
module.exports = Showcase;

View file

@ -6,10 +6,12 @@
*/
const React = require('react');
const CompLibrary = require('../../core/CompLibrary.js');
const Container = CompLibrary.Container;
const GridBlock = CompLibrary.GridBlock;
const Showcase = require(`${process.cwd()}/core/Showcase.js`);
const siteConfig = require(`${process.cwd()}/siteConfig.js`);
const translate = require('../../server/translate.js').translate;
@ -74,11 +76,7 @@ class HomeSplash extends React.Component {
class Index extends React.Component {
render() {
const language = this.props.language || 'en';
const showcase = siteConfig.users.filter(user => user.pinned).map(user => (
<a href={user.infoLink} key={user.infoLink}>
<img src={user.image} alt={user.caption} title={user.caption} />
</a>
));
const pinnedUsersToShowcase = siteConfig.users.filter(user => user.pinned);
return (
<div>
@ -234,7 +232,7 @@ class Index extends React.Component {
Docusaurus is building websites for these projects...
</translate>
</p>
<div className="logos">{showcase}</div>
<Showcase users={pinnedUsersToShowcase} />
<div className="more-users">
<a
className="button"

View file

@ -9,26 +9,16 @@ const React = require('react');
const CompLibrary = require('../../core/CompLibrary.js');
const Container = CompLibrary.Container;
const Showcase = require(`${process.cwd()}/core/Showcase.js`);
const siteConfig = require(`${process.cwd()}/siteConfig.js`);
const translate = require('../../server/translate.js').translate;
class Users extends React.Component {
renderUser(user) {
return (
<a href={user.infoLink} key={user.infoLink}>
<img src={user.image} alt={user.caption} title={user.caption} />
</a>
);
}
render() {
const fbShowcase = siteConfig.users
.filter(user => user.fbOpenSource)
.map((user, i) => this.renderUser(user, i));
const showcase = siteConfig.users
.filter(user => !user.fbOpenSource)
.map((user, i) => this.renderUser(user, i));
const fbUsersToShowcase = siteConfig.users.filter(
user => user.fbOpenSource,
);
const restToShowcase = siteConfig.users.filter(user => !user.fbOpenSource);
return (
<div className="mainContainer">
@ -46,7 +36,7 @@ class Users extends React.Component {
.
</p>
</div>
<div className="logos">{fbShowcase}</div>
<Showcase users={fbUsersToShowcase} />
<div className="prose">
<p>
<translate>
@ -54,7 +44,7 @@ class Users extends React.Component {
</translate>
</p>
</div>
<div className="logos">{showcase}</div>
<Showcase users={restToShowcase} />
<div className="prose">
<p>
<translate>Is your project using Docusaurus?</translate>

View file

@ -12,3 +12,48 @@
table td:first-child > code {
white-space: nowrap;
}
.showcase {
align-items: center;
display: flex;
flex-flow: row wrap;
justify-content: center;
margin-bottom: 20px;
}
.showcase .link {
display: flex;
flex-direction: column;
justify-content: space-between;
height: 180px;
margin: 5px;
padding: 5px;
}
.showcase .link:hover {
text-decoration: underline;
}
.showcase .link .caption {
line-height: 20px;
height: 20px;
}
.showcase .link img {
max-height: 110px;
padding: 20px;
width: 110px;
align-self: center;
}
@media only screen and (max-width: 735px) {
.showcase .link {
height: 134px;
}
.showcase .link img {
max-height: 64px;
padding: 20px;
width: 64px;
}
}