/** * 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 MarkdownBlock = require('./MarkdownBlock.js'); const React = require('react'); const utils = require('./utils'); // inner blog component for the article itself, without sidebar/header/footer class BlogPost extends React.Component { renderContent() { if (this.props.truncate) { return ( <article className="post-content"> <MarkdownBlock> {utils.extractBlogPostBeforeTruncate(this.props.content)} </MarkdownBlock> {utils.blogPostHasTruncateMarker(this.props.content) && ( <div className="read-more"> <a className="button" href={ this.props.config.baseUrl + 'blog/' + this.props.post.path }> Read More </a> </div> )} </article> ); } return <MarkdownBlock>{this.props.content}</MarkdownBlock>; } renderAuthorPhoto() { const post = this.props.post; const className = 'authorPhoto' + (post.author && post.authorTitle ? ' authorPhoto-big' : ''); if (post.authorFBID) { return ( <div className={className}> <a href={post.authorURL} target="_blank" rel="noreferrer noopener"> <img src={ 'https://graph.facebook.com/' + post.authorFBID + '/picture/?height=200&width=200' } alt={post.author} /> </a> </div> ); } else if (post.authorImageURL) { return ( <div className={className}> <a href={post.authorURL} target="_blank" rel="noreferrer noopener"> <img src={post.authorImageURL} /> </a> </div> ); } else { return null; } } renderTitle() { const post = this.props.post; return ( <h1> <a href={this.props.config.baseUrl + 'blog/' + post.path}> {post.title} </a> </h1> ); } renderPostHeader() { const post = this.props.post; const match = post.path.match(/([0-9]+)\/([0-9]+)\/([0-9]+)/); // Because JavaScript sucks at date handling :( const year = match[1]; const month = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', ][parseInt(match[2], 10) - 1]; const day = parseInt(match[3], 10); return ( <header className="postHeader"> {this.renderTitle()} <p className="post-meta"> {month} {day}, {year} </p> <div className="authorBlock"> {post.author ? ( <p className="post-authorName"> <a href={post.authorURL} target="_blank" rel="noreferrer noopener"> {post.author} </a> {post.authorTitle} </p> ) : null} {this.renderAuthorPhoto()} </div> </header> ); } render() { return ( <div className="post"> {this.renderPostHeader()} {this.renderContent()} </div> ); } } module.exports = BlogPost;