import React, { Component } from 'react'; import { ScrollView, StyleSheet, TouchableOpacity, Image, View, RefreshControl, } from 'react-native'; import HTMLView from 'react-native-htmlview' import htmlStyles from '../components/htmlStyles' import ClearText from '../components/text' import Heading from '../components/heading' import Definition from '../components/definition' import Close from '../components/close' export default class TimelineFull extends Component { constructor() { super() this.onRefresh = this.onRefresh.bind(this) this.onPickTag = this.onPickTag.bind(this) } onRefresh() { this.props.onClose() } onPickTag(tag) { this.props.onFilter(tag) } render() { const item = this.props.item let image, links; if (! item) { return ( ) } if (item.image) { const caption = item.credit ? ( {item.credit} ) : ( ) const originalWidth = Number(item.image.width) const originalHeight = Number(item.image.height) const height = originalHeight > 450 ? 450 : originalHeight const width = originalWidth * height / originalHeight image = ( {caption} ) } else { image = ( ) } if (item.links.length) { const linkItems = item.links.map((link, i) => { const url = link.uri let name = link.text if (! name || name.match(/Link Text/i)) { name = linkTextFromUrl(url) } return ( this.props.onLinkPress(url)}> {name} ) }) links = ( {linkItems} ) } const tags = item.keywords.map((tag, i) => { return `${tag}` }).join(', ') const description = '

' + item.description + '

' return ( {image} {item.title} {item.date} {item.medium} this.onPickTag(item.category)}> {item.category} ' + tags + '

'} stylesheet={tagHTMLStyles} onLinkPress={this.onPickTag} />
{links}
) } } function linkTextFromUrl (url) { const url_parts = url.split('/') const domain = url_parts[2] const terms = domain.split('.') const len = terms.length let term = (len > 2 && terms[len-1].length == 2) ? terms[len-3] : terms[len-2] if (term == 'wikipedia') { term += url_parts[4].replace(/\#.*/,'').replace('_', ' ') } return capitalize(term) } function capitalize (s){ return s.charAt(0).toUpperCase() + s.slice(1) } const styles = StyleSheet.create({ container: { flex: 1, }, scrollView: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, backgroundColor: 'black', }, item: { maxWidth: 1000, padding: 40, }, imageContainer: { width: '100%', marginBottom: 10, alignItems: 'center', }, imageWrapper: { width: '100%', marginBottom: 5, alignItems: 'center', }, caption: { fontSize: 12, }, bodyContainer: { left: '0%', width: '60%', paddingRight: 50, }, metadataContainer: { position: 'absolute', left: '60%', width: '40%', }, title: { textAlign: 'left', fontWeight: 'bold', fontSize: 18, }, date: { textAlign: 'left', }, description: { flex: 1, flexDirection: 'column', }, link: { textDecorationLine: 'underline', textAlign: 'left', }, tag: { marginRight: 5, }, }) const tagHTMLStyles = StyleSheet.create({ p: { color: 'white', fontFamily: 'Futura-Medium', textAlign: 'justify', fontSize: 16, lineHeight: 30, }, b: { fontFamily: 'Futura-MediumItalic', color: 'white', fontSize: 16, lineHeight: 30, }, i: { fontFamily: 'Futura-MediumItalic', color: 'white', fontSize: 16, lineHeight: 30, }, a: { color: 'white', fontFamily: 'Futura-Medium', textDecorationLine: 'underline', fontSize: 16, lineHeight: 30, }, })