├── src ├── components │ ├── TextSection │ │ ├── TextSection.css │ │ └── TextSection.jsx │ ├── PicturesSection │ │ ├── PicturesSection.css │ │ └── PicturesSection.jsx │ ├── SplitInformationSection │ │ ├── SplitInformationSection.css │ │ └── SplitInformationSection.jsx │ ├── RaceInformationSection │ │ ├── RaceInformationSection.css │ │ └── RaceInformationSection.jsx │ ├── PictureInput │ │ ├── PictureInput.css │ │ └── PictureInput.jsx │ ├── SourceView │ │ ├── SourceView.css │ │ └── SourceView.jsx │ ├── PostView │ │ ├── PostView.jsx │ │ └── PostView.css │ ├── RaceInfoInput │ │ ├── RaceInfoInput.css │ │ └── RaceInfoInput.jsx │ ├── App │ │ ├── App.css │ │ └── App.jsx │ ├── SplitInput │ │ └── SplitInput.jsx │ ├── InputContainer │ │ ├── InputContainer.css │ │ └── InputContainer.jsx │ ├── GoalInput │ │ └── GoalInput.jsx │ ├── OutputContainer │ │ ├── OutputContainer.css │ │ └── OutputContainer.jsx │ ├── TextInput │ │ └── TextInput.jsx │ └── GoalsSection │ │ └── GoalsSection.jsx ├── utilities │ ├── base.js │ └── clipboard.js ├── index.js ├── index.css ├── logo.svg └── data │ └── parse.js ├── public ├── favicon.ico └── index.html ├── README.md ├── .gitignore ├── .vscode └── launch.json └── package.json /src/components/TextSection/TextSection.css: -------------------------------------------------------------------------------- 1 | .textSectionContent { 2 | width: 65%; 3 | } -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/martellaj/race-reportr/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/components/PicturesSection/PicturesSection.css: -------------------------------------------------------------------------------- 1 | .picturesSectionContent { 2 | width: 100%; 3 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # race reportr is now maintained by CoachView! For the latest and greatest, check out it's new home [here](https://github.com/coachview/race-reportr). 2 | -------------------------------------------------------------------------------- /src/components/SplitInformationSection/SplitInformationSection.css: -------------------------------------------------------------------------------- 1 | .distanceButtons { 2 | margin-top: 2px; 3 | margin-bottom: 2px; 4 | font-size: 12px; 5 | } -------------------------------------------------------------------------------- /src/components/RaceInformationSection/RaceInformationSection.css: -------------------------------------------------------------------------------- 1 | .raceInformationHeader { 2 | margin-top: 0px; 3 | margin-bottom: 5px; 4 | } 5 | 6 | .raceInformation__content { 7 | width: 80%; 8 | } -------------------------------------------------------------------------------- /src/utilities/base.js: -------------------------------------------------------------------------------- 1 | import Rebase from 're-base'; 2 | 3 | let base = Rebase.createClass({ 4 | authDomain: "race-reportr.firebaseapp.com", 5 | databaseURL: "https://race-reportr.firebaseio.com", 6 | }); 7 | 8 | export default base; -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import './index.css'; 2 | import App from './components/App/App'; 3 | import React from 'react'; 4 | import ReactDOM from 'react-dom'; 5 | 6 | ReactDOM.render( 7 | , 8 | document.getElementById('root') 9 | ); 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | 6 | # testing 7 | coverage 8 | 9 | # production 10 | build 11 | 12 | # misc 13 | .DS_Store 14 | .env 15 | npm-debug.log 16 | -------------------------------------------------------------------------------- /src/components/PictureInput/PictureInput.css: -------------------------------------------------------------------------------- 1 | .pictureInput { 2 | margin-bottom: 5px; 3 | } 4 | 5 | .pictureInput input { 6 | display: block; 7 | margin-bottom: 2px; 8 | width: 75%; 9 | } 10 | 11 | .pictureInput button { 12 | margin-right: 5px; 13 | } -------------------------------------------------------------------------------- /src/components/SourceView/SourceView.css: -------------------------------------------------------------------------------- 1 | .sourceView { 2 | margin-top: 15px; 3 | margin-left: 5px; 4 | min-width: 300px; 5 | width: 85%; 6 | } 7 | 8 | .sourceView__textArea { 9 | height: 500px; 10 | margin-left: 10px; 11 | resize: none; 12 | width: 100%; 13 | } -------------------------------------------------------------------------------- /src/components/PostView/PostView.jsx: -------------------------------------------------------------------------------- 1 | import './PostView.css'; 2 | import React, { Component } from 'react'; 3 | import Markdown from 'react-remarkable'; 4 | 5 | export default class PostView extends Component { 6 | render() { 7 | return ( 8 |
9 | 10 |
11 | ); 12 | } 13 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible Node.js debug attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "launch", 10 | "name": "Data Parser", 11 | "program": "${workspaceRoot}\\src\\data\\parse.js" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /src/components/RaceInfoInput/RaceInfoInput.css: -------------------------------------------------------------------------------- 1 | .raceInfoInput { 2 | align-items: center; 3 | display: flex; 4 | margin-bottom: 10px; 5 | width: 100%; 6 | } 7 | 8 | .raceInfoInput__input { 9 | width: 90%; 10 | } 11 | 12 | .raceInfoInput__input--disabled { 13 | background: lightgray; 14 | border: lightgrey; 15 | color: darkgray; 16 | } 17 | 18 | .raceInfoInput__label { 19 | margin: 0; 20 | font-size: 12px; 21 | } 22 | 23 | .raceInfoInput__label--disabled { 24 | color: darkgray; 25 | font-size: 12px; 26 | font-style: italic; 27 | margin: 0; 28 | } 29 | 30 | .raceInfoInput_inputDiv { 31 | margin-left: 5px; 32 | width: 70%; 33 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "race-reportr-v2", 3 | "version": "0.1.0", 4 | "private": true, 5 | "homepage": "http://martellaj.github.io/race-reportr", 6 | "devDependencies": { 7 | "gh-pages": "^0.12.0", 8 | "react-scripts": "0.8.4" 9 | }, 10 | "dependencies": { 11 | "classnames": "^2.2.5", 12 | "re-base": "^2.5.2", 13 | "react": "^15.4.1", 14 | "react-dom": "^15.4.1", 15 | "react-remarkable": "^1.1.1", 16 | "react-select": "^1.0.0-rc.2", 17 | "react-tabs": "^0.8.2" 18 | }, 19 | "scripts": { 20 | "start": "react-scripts start", 21 | "build": "react-scripts build", 22 | "test": "react-scripts test --env=jsdom", 23 | "eject": "react-scripts eject", 24 | "deploy": "npm run build && gh-pages -d build", 25 | "parse-data": "node ./src/data/parse.js" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/components/App/App.css: -------------------------------------------------------------------------------- 1 | .app { 2 | margin-bottom: 10px; 3 | margin: 0 auto; 4 | padding-left: 20px; 5 | padding-top: 10px; 6 | width: 70%; 7 | } 8 | 9 | .app-container { 10 | display: flex; 11 | } 12 | 13 | .links { 14 | margin: 0 auto; 15 | text-align: center; 16 | vertical-align: center; 17 | } 18 | 19 | .header { 20 | background-color: #264575; 21 | color: white; 22 | display: flex; 23 | flex-direction: column; 24 | padding-bottom: 20px; 25 | } 26 | 27 | .header a { 28 | color: white; 29 | } 30 | 31 | @media (max-width: 600px) { 32 | .app { 33 | padding-left: 0px; 34 | width: 100%; 35 | } 36 | 37 | .app-container { 38 | flex-direction: column; 39 | } 40 | } 41 | 42 | @media (min-width: 601px) { 43 | .app { 44 | width: 70%; 45 | } 46 | } -------------------------------------------------------------------------------- /src/components/SplitInput/SplitInput.jsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | export default class SplitInput extends Component { 4 | constructor() { 5 | super(); 6 | 7 | this.onRemoveClick = this.onRemoveClick.bind(this); 8 | this.onSplitChange = this.onSplitChange.bind(this); 9 | } 10 | 11 | onRemoveClick() { 12 | this.props.removeSplit(this.props._key); 13 | } 14 | 15 | onSplitChange(event) { 16 | this.props.editSplit(this.props._key, event.target.value, this.props.completed); 17 | } 18 | 19 | render() { 20 | return ( 21 |
22 | 23 | 24 |
25 | ); 26 | } 27 | } -------------------------------------------------------------------------------- /src/components/SourceView/SourceView.jsx: -------------------------------------------------------------------------------- 1 | import './SourceView.css'; 2 | import React, { Component } from 'react'; 3 | 4 | export default class SourceView extends Component { 5 | constructor() { 6 | super(); 7 | 8 | this.onTextAreaFocus = this.onTextAreaFocus.bind(this); 9 | this.onCopy = this.onCopy.bind(this); 10 | } 11 | 12 | onTextAreaFocus() { 13 | this.textarea.select(); 14 | } 15 | 16 | onCopy() { 17 | this.props.logReportGeneratedEvent(); 18 | } 19 | 20 | render() { 21 | return ( 22 |
23 |