//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') + (this.props.fadeIn ? ' fade-in-link' : ''); 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({ render: function() { return (
); } }); var topBarStyle = { 'float': 'right' }; var TopBar = React.createClass({ getInitialState: function() { return { balance: 0 }; }, componentDidMount: function() { lbry.getBalance(function(balance) { this.setState({ balance: balance }); }.bind(this)); }, render: function() { return ( ); } }); var menuStyle = { position: 'relative', top: '3px', marginLeft: '2px' }, menuItemStyle = { marginLeft: '3px' }; var chooseSettingsPage = function() { this.props.onPageChosen('settings'); }; var Menu = React.createClass({ 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'); console.log('made it here'); 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 }
); } }); var HomePage = React.createClass({ render: function() { return (
); } }); var settingsPageStyles = { paddingTop: '60px', fontSize: '16px', }, settingsPageHeaderStyles = { textAlign: 'center' }, settingsBottomButtonsStyles = { textAlign: 'center' }, settingsSectionStyles = { paddingBottom: '15px', }, settingsQuestionStyles = { display: 'block', }, maxDownloadQuestionStyles = { display: 'block', paddingTop: '3px' }, maxUploadQuestionStyles = { display: 'block' }, settingsRadioOptionStyles = { display: 'block', marginLeft: '13px' }, settingsCheckBoxOptionStyles = { display: 'block', marginLeft: '13px' }, settingsNumberFieldStyles = { width: '40px' }, downloadDirectoryLabelStyles = { fontSize: '.9em', marginLeft: '13px' }, downloadDirectoryFieldStyles= { width: '300px' }; var SettingsPage = React.createClass({ storeSetting: function(setting, val) { var settings = Object.assign({}, this.state.settings); settings[setting] = val; this.setState({ 'settings': settings }); }, onRunOnStartChange: function (event) { this.storeSetting('run_on_startup', event.target.checked); }, onShareDataChange: function (event) { this.storeSetting('upload_log', event.target.checked); }, onDownloadDirChange: function(event) { this.storeSetting('default_download_directory', event.target.value); }, onMaxUploadPrefChange: function(isLimited) { if (!isLimited) { this.storeSetting('max_upload', 0.0); } this.setState({ isMaxUpload: isLimited }); }, onMaxUploadFieldChange: function(event) { this.storeSetting('max_upload', Number(event.target.value)); }, onMaxDownloadPrefChange: function(isLimited) { if (!isLimited) { this.storeSetting('max_download', 0.0); } this.setState({ isMaxDownload: isLimited }); }, onMaxDownloadFieldChange: function(event) { this.storeSetting('max_download', Number(event.target.value)); }, getInitialState: function() { return { settings: null } }, componentWillMount: function() { lbry.getSettings(function(settings) { this.setState({ settings: settings, isMaxUpload: settings.max_upload != 0, isMaxDownload: settings.max_download != 0 }); }.bind(this)); }, onDone: function() { lbry.setSettings(this.state.settings); this.props.closeCallback(); }, render: function() { if (!this.state.settings) { // If the settings aren't loaded yet, don't render anything. return null; } return (

Settings

Run on startup

Download directory

Where would you like the files you download from LBRY to be saved?

Share diagnostic data

Bandwidth limits

How much of your upload bandwidth may LBRY use? How much of your download bandwidth may LBRY use?
); } }); var appStyles = { width: '800px', marginLeft: 'auto', marginRight: 'auto', }; var App = React.createClass({ getInitialState: function() { return { viewingPage: 'home' } }, handlePageChosen: function(page) { this.setState({ viewingPage: page }); }, render: function() { if (this.state.viewingPage == 'home') { var content = ; } else if (this.state.viewingPage == 'settings') { var content = ; } return (
{content}
); } }); //main.js var init = function() { var canvas = document.getElementById('canvas'); ReactDOM.render( , canvas ); lbry.connect(function() { ReactDOM.render(, canvas); }) }; init();