aboutsummaryrefslogtreecommitdiff
path: root/vnext/src/components/Message.js
blob: d3148141304ae4a0bbb89b7fc7edf021c21d23f0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import React from 'react';
import PropTypes from 'prop-types';
import ReactMarkdown from 'react-markdown';

export default class Message extends React.Component {
  render() {
    const msg = this.props.data;
    return (
    <article itemProp="blogPost" itemScope="" itemType="http://schema.org/BlogPosting" itemRef="org">
      <header className="h">
        <span itemProp="author" itemScope="" itemType="http://schema.org/Person">
            <a href={`/${msg.user.uname}/`} itemProp="url" rel="author"><span itemProp="name">{ msg.user.uname }</span></a>
        </span>
        <div className="msg-avatar"><a href={`/${msg.user.uname }/`}>
            <img src={`//i.juick.com/a/${msg.user.uid}.png`} alt={`${msg.user.uname}`} /></a>
        </div>
        <div className="msg-ts">
            <a href={`/${msg.user.uname}/${msg.mid}`}>
                <time itemProp="datePublished dateModified" itemType="http://schema.org/Date" dateTime={msg.timestamp}
                      title={msg.timestamp}>
                    {msg.timestamp}
                </time>
            </a>
        </div>
        <div className="msg-tags" itemProp="headline">
            <Tags data={msg.tags || []} />
        </div>
      </header>
      <ReactMarkdown source={msg.body}/>
      { msg.photo &&
      <p className="ir"><a href={`//i.juick.com/p/${msg.mid}.${msg.attach}`} data-fname={`${msg.mid}.${msg.attach}`}>
        <img itemProp="image" src={`//i.juick.com/p/${msg.mid}.${msg.attach}`} alt=""/></a>
      </p>
      }
    </article>
    );
  }
}

function Tags(props) {
    return props.data && props.data.map(tag => { return (<a key={tag} href={`/tag/${ tag}`} title={ tag }>{ tag }</a>) })
}

Message.propTypes = {
    data: PropTypes.shape({
    mid: PropTypes.number.isRequired,
    user: PropTypes.shape({
      uid: PropTypes.number.isRequired,
      uname: PropTypes.string.isRequired
    }),
    timestamp: PropTypes.string.isRequired,
    body: PropTypes.string
    })
};