//component/icon.js var Icon = React.createClass({ render: function() { var className = 'icon ' + this.props.icon; return } }); //component/link.js var Link = React.createClass({ render: function() { console.log(this.props); var href = this.props.href ? this.props.href : 'javascript:;', icon = this.props.icon ? : '', className = this.props.button ? 'button-block button-' + this.props.button : 'button-text'; return ( {this.props.icon ? icon : '' } {this.props.label} ); } }); //component/splash.js var splashStyle = { color: 'white', backgroundImage: 'url(' + lbry.imagePath('lbry-bg.png') + ')', backgroundSize: 'cover', minHeight: '100vh', minWidth: '100vw', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center' }, splashMessageStyle = { marginTop: '24px' }; var SplashScreen = React.createClass({ propTypes: { message: React.PropTypes.string, }, render: function() { var imgSrc = lbry.imagePath('lbry-white-485x160.png'); return (
LBRY

{this.props.message}

); } }); //component/credit-amount.js var creditAmountStyle = { color: '#216C2A', fontWeight: 'bold', fontSize: '0.8em' }, estimateStyle = { marginLeft : '5px', color: '#aaa', } var CreditAmount = React.createClass({ propTypes: { amount: React.PropTypes.number, }, render: function() { var formattedAmount = lbry.formatCredits(this.props.amount); return ( {formattedAmount} { this.props.isEstimate ? (est) : null } ); } }); //component/header.js var logoStyle = { padding: '48px 12px', textAlign: 'center', maxHeight: '80px', }, balanceStyle = { float: 'right', marginTop: '3px' }, imgStyle = { //@TODO: remove this, img should be properly scaled once size is settled height: '80px' }; var Header = React.createClass({ getInitialState: function() { return { balance: 0 }; }, componentDidMount: function() { lbry.getBalance(function(balance) { this.setState({ balance: balance }); }.bind(this)); }, render: function() { return (
); } }); //component/discover.js var searchInputStyle = { width: '400px', display: 'block', marginBottom: '48px', marginLeft: 'auto', marginRight: 'auto' }, fetchResultsStyle = { color: '#888', textAlign: 'center', fontSize: '1.2em' }; var SearchActive = React.createClass({ render: function() { return (
Looking up the Dewey Decimals
); } }); var searchNoResultsStyle = { textAlign: 'center' }, searchNoResultsMessageStyle = { fontStyle: 'italic', marginRight: '5px' }; var SearchNoResults = React.createClass({ render: function() { return (
No one has checked anything in for {this.props.query} yet.
); } }); var SearchResults = React.createClass({ render: function() { var rows = []; console.log('results'); this.props.results.forEach(function(result) { rows.push( ); }); console.log(this.props.results); console.log(rows); console.log('done'); return (
{rows}
); } }); var searchRowImgStyle = { maxHeight: '100px', display: 'block', marginLeft: 'auto', marginRight: 'auto', float: 'left' }, searchRowCostStyle = { float: 'right', marginLeft: '20px', marginTop: '5px', display: 'inline-block' }, searchRowNameStyle = { fontSize: '0.9em', color: '#666', marginBottom: '24px', clear: 'both' }, searchRowDescriptionStyle = { color : '#444', marginBottom: '24px', fontSize: '0.9em' }; var SearchResultRow = React.createClass({ render: function() { var uri = 'lbry://' + this.props.name; return (
Photo for {this.props.title}

{this.props.title}

{uri}

{this.props.description}

); } }); var discoverMainStyle = { color: '#333' }; var Discover = React.createClass({ userTypingTimer: null, getInitialState: function() { return { results: [], searching: false, query: '' }; }, search: function() { if (this.state.query) { console.log('search'); lbry.search(this.state.query, this.searchCallback.bind(this, this.state.query)); } else { this.setState({ searching: false, results: [] }); } }, searchCallback: function(originalQuery, results) { if (this.state.searching) //could have canceled while results were pending, in which case nothing to do { this.setState({ results: results, searching: this.state.query != originalQuery, //multiple searches can be out, we're only done if we receive one we actually care about }); } }, onQueryChange: function(event) { if (this.userTypingTimer) { clearTimeout(this.userTypingTimer); } //@TODO: Switch to React.js timing this.userTypingTimer = setTimeout(this.search, 800); // 800ms delay, tweak for faster/slower this.setState({ searching: event.target.value.length > 0, query: event.target.value }); }, render: function() { console.log(this.state); return (
{ this.state.searching ? : null } { !this.state.searching && this.state.results.length ? : null } { !this.state.searching && !this.state.results.length && this.state.query ? : null }
); } }); //component/home.js var homeStyles = { width: '800px', marginLeft: 'auto', marginRight: 'auto', }; var Home = React.createClass({ render: function() { return (
); } }); //main.js var init = function() { var canvas = document.getElementById('canvas'); ReactDOM.render( , canvas ); lbry.connect(function() { ReactDOM.render(, canvas); }) }; init();