mirror of https://github.com/mitchell/mjfs.us.git
Minor content change to header; refactor project structure; prettier-standard everything
This commit is contained in:
parent
24f7976b5b
commit
1a01fb36f4
|
@ -1770,7 +1770,7 @@
|
|||
},
|
||||
"array-equal": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
|
||||
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
|
||||
},
|
||||
"array-filter": {
|
||||
|
@ -1971,7 +1971,7 @@
|
|||
},
|
||||
"chalk": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
|
||||
"resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
|
||||
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
|
||||
"requires": {
|
||||
"ansi-styles": "^2.2.1",
|
||||
|
@ -2151,7 +2151,7 @@
|
|||
},
|
||||
"babel-plugin-syntax-object-rest-spread": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
|
||||
"integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
|
||||
},
|
||||
"babel-plugin-transform-object-rest-spread": {
|
||||
|
@ -2530,7 +2530,7 @@
|
|||
},
|
||||
"browserify-aes": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
||||
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
|
||||
"requires": {
|
||||
"buffer-xor": "^1.0.3",
|
||||
|
@ -2564,7 +2564,7 @@
|
|||
},
|
||||
"browserify-rsa": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
|
||||
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
|
||||
"requires": {
|
||||
"bn.js": "^4.1.0",
|
||||
|
@ -2613,7 +2613,7 @@
|
|||
},
|
||||
"buffer": {
|
||||
"version": "4.9.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
||||
"requires": {
|
||||
"base64-js": "^1.0.2",
|
||||
|
@ -2713,7 +2713,7 @@
|
|||
},
|
||||
"callsites": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
||||
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
|
||||
},
|
||||
"camel-case": {
|
||||
|
@ -3385,7 +3385,7 @@
|
|||
},
|
||||
"clone-deep": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
|
||||
"resolved": "http://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
|
||||
"integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
|
||||
"requires": {
|
||||
"for-own": "^0.1.3",
|
||||
|
@ -3668,7 +3668,7 @@
|
|||
},
|
||||
"create-hash": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
|
||||
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
|
||||
"requires": {
|
||||
"cipher-base": "^1.0.1",
|
||||
|
@ -3680,7 +3680,7 @@
|
|||
},
|
||||
"create-hmac": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
|
||||
"resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
|
||||
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
|
||||
"requires": {
|
||||
"cipher-base": "^1.0.3",
|
||||
|
@ -3731,7 +3731,7 @@
|
|||
},
|
||||
"css-color-names": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
|
||||
"resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
|
||||
"integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
|
||||
},
|
||||
"css-declaration-sorter": {
|
||||
|
@ -4112,7 +4112,7 @@
|
|||
"dependencies": {
|
||||
"globby": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
|
||||
"integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
|
||||
"requires": {
|
||||
"array-union": "^1.0.1",
|
||||
|
@ -4124,7 +4124,7 @@
|
|||
"dependencies": {
|
||||
"pify": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
|
||||
}
|
||||
}
|
||||
|
@ -4186,7 +4186,7 @@
|
|||
},
|
||||
"diffie-hellman": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
|
||||
"resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
|
||||
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
|
||||
"requires": {
|
||||
"bn.js": "^4.1.0",
|
||||
|
@ -4328,7 +4328,7 @@
|
|||
},
|
||||
"duplexer": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
|
||||
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
|
||||
},
|
||||
"duplexify": {
|
||||
|
@ -6321,7 +6321,7 @@
|
|||
},
|
||||
"is-obj": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
|
||||
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
|
||||
},
|
||||
"is-path-cwd": {
|
||||
|
@ -8011,7 +8011,7 @@
|
|||
},
|
||||
"media-typer": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
|
||||
},
|
||||
"mem": {
|
||||
|
@ -8224,7 +8224,7 @@
|
|||
},
|
||||
"mkdirp": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
|
@ -8683,7 +8683,7 @@
|
|||
},
|
||||
"os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
"resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
|
||||
},
|
||||
"p-defer": {
|
||||
|
@ -8837,7 +8837,7 @@
|
|||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
||||
},
|
||||
"path-is-inside": {
|
||||
|
@ -10376,7 +10376,7 @@
|
|||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
|
@ -10494,7 +10494,7 @@
|
|||
"dependencies": {
|
||||
"jsesc": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
||||
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
|
||||
}
|
||||
}
|
||||
|
@ -10775,7 +10775,7 @@
|
|||
},
|
||||
"safe-regex": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
|
||||
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
|
||||
"requires": {
|
||||
"ret": "~0.1.10"
|
||||
|
@ -11031,7 +11031,7 @@
|
|||
},
|
||||
"sha.js": {
|
||||
"version": "2.4.11",
|
||||
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
|
||||
"resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
|
||||
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.1",
|
||||
|
@ -11056,7 +11056,7 @@
|
|||
},
|
||||
"kind-of": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
|
||||
"integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
|
||||
"requires": {
|
||||
"is-buffer": "^1.0.2"
|
||||
|
@ -11589,7 +11589,7 @@
|
|||
},
|
||||
"strip-eof": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
|
||||
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
|
||||
},
|
||||
"strip-json-comments": {
|
||||
|
@ -11857,7 +11857,7 @@
|
|||
},
|
||||
"through": {
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||
"resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
|
||||
},
|
||||
"through2": {
|
||||
|
@ -12935,7 +12935,7 @@
|
|||
},
|
||||
"wrap-ansi": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
|
||||
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
|
||||
"requires": {
|
||||
"string-width": "^1.0.1",
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
// @flow
|
||||
import React from "react"
|
||||
import React from 'react'
|
||||
|
||||
import Header from "./components/Header"
|
||||
import Navbar from "./components/Navbar"
|
||||
import Routes from "./routes"
|
||||
import Header from './components/Header'
|
||||
import Navbar from './components/Navbar'
|
||||
import Routes from './routes'
|
||||
|
||||
import "./Website.css"
|
||||
import './Website.css'
|
||||
|
||||
type Props = {}
|
||||
|
||||
class Website extends React.Component<Props> {
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<div className="website">
|
||||
<div className="main-container">
|
||||
<div className='website'>
|
||||
<div className='main-container'>
|
||||
<Navbar />
|
||||
<Header />
|
||||
<Routes />
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import React from "react"
|
||||
import ReactDOM from "react-dom"
|
||||
import Website from "./Website.js"
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom'
|
||||
import Website from './Website.js'
|
||||
|
||||
it("renders without crashing", () => {
|
||||
const div = document.createElement("div")
|
||||
it('renders without crashing', () => {
|
||||
const div = document.createElement('div')
|
||||
ReactDOM.render(<Website />, div)
|
||||
ReactDOM.unmountComponentAtNode(div)
|
||||
})
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// @flow
|
||||
import React from "react"
|
||||
import React from 'react'
|
||||
|
||||
import "./index.css"
|
||||
import './index.css'
|
||||
|
||||
type Props = {
|
||||
href: string,
|
||||
|
@ -9,9 +9,9 @@ type Props = {
|
|||
}
|
||||
|
||||
class ClearButton extends React.PureComponent<Props> {
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<a className="clear-button" href={this.props.href}>
|
||||
<a className='clear-button' href={this.props.href}>
|
||||
{this.props.children}
|
||||
</a>
|
||||
)
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
// @flow
|
||||
import React from "react"
|
||||
|
||||
import "./index.css"
|
||||
import linkedIn from "../../images/In-2C-128px-TM.png"
|
||||
|
||||
type Props = {}
|
||||
|
||||
class Contact extends React.PureComponent<Props> {
|
||||
render() {
|
||||
return (
|
||||
<div className="contact-container">
|
||||
<p>m@mjfs.us</p>
|
||||
<a href="https://www.linkedin.com/in/mitchelljfsimon/">
|
||||
<img src={linkedIn} alt="LinkedIn" />
|
||||
</a>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default Contact
|
|
@ -1,18 +1,23 @@
|
|||
// @flow
|
||||
import React from "react"
|
||||
import React from 'react'
|
||||
|
||||
import SmallText from "../SmallText"
|
||||
import SmallText from '../SmallText'
|
||||
|
||||
import "./index.css"
|
||||
import './index.css'
|
||||
|
||||
type Props = {}
|
||||
|
||||
class Header extends React.PureComponent<Props> {
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<div className="header-container">
|
||||
<div className='header-container'>
|
||||
<h2>Mitchell J. F. Simon</h2>
|
||||
<SmallText>Backend Engineer, TV Time</SmallText>
|
||||
<SmallText>
|
||||
Software engineer;
|
||||
<span style={{ display: 'inline-block' }}>
|
||||
cloud-native web services and clients
|
||||
</span>
|
||||
</SmallText>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
// @flow
|
||||
import * as React from "react"
|
||||
import * as React from 'react'
|
||||
|
||||
import SmallText from "../../components/SmallText"
|
||||
import "./index.css"
|
||||
import SmallText from '../../components/SmallText'
|
||||
import './index.css'
|
||||
|
||||
type Props = {
|
||||
title: string,
|
||||
|
@ -14,7 +14,7 @@ type Props = {
|
|||
class Experience extends React.PureComponent<Props> {
|
||||
listedBullets: Array<React.Element<string>>
|
||||
|
||||
constructor(props: Props) {
|
||||
constructor (props: Props) {
|
||||
super(props)
|
||||
|
||||
this.listedBullets = this.props.bullets.map((bullet, index) => (
|
||||
|
@ -22,11 +22,11 @@ class Experience extends React.PureComponent<Props> {
|
|||
))
|
||||
}
|
||||
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<div className="job-container">
|
||||
<div className="job-title">{this.props.title}</div>
|
||||
<div className="job-company">{this.props.company}</div>
|
||||
<div className='job-container'>
|
||||
<div className='job-title'>{this.props.title}</div>
|
||||
<div className='job-company'>{this.props.company}</div>
|
||||
<SmallText>{this.props.timeSpan}</SmallText>
|
||||
<ul>{this.listedBullets}</ul>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// @flow
|
||||
import * as React from "react"
|
||||
import { NavLink } from "react-router-dom"
|
||||
import FontAwesomeIcon from "@fortawesome/react-fontawesome"
|
||||
import faBars from "@fortawesome/fontawesome-free-solid/faBars"
|
||||
import * as React from 'react'
|
||||
import { NavLink } from 'react-router-dom'
|
||||
import FontAwesomeIcon from '@fortawesome/react-fontawesome'
|
||||
import faBars from '@fortawesome/fontawesome-free-solid/faBars'
|
||||
|
||||
import "./index.css"
|
||||
import { routes } from "../../routes/routes.js"
|
||||
import './index.css'
|
||||
import { routes } from '../../routes/routes.js'
|
||||
|
||||
const changeMenu = 800
|
||||
|
||||
|
@ -18,7 +18,7 @@ type State = {
|
|||
class Navbar extends React.Component<Props, State> {
|
||||
buttons: Array<NavLink<string>>
|
||||
|
||||
constructor(props: Props) {
|
||||
constructor (props: Props) {
|
||||
super(props)
|
||||
|
||||
if (window.innerWidth <= changeMenu) {
|
||||
|
@ -30,8 +30,8 @@ class Navbar extends React.Component<Props, State> {
|
|||
this.buttons = routes.map(route => (
|
||||
<NavLink
|
||||
key={route.name}
|
||||
className="navbar-menu-button"
|
||||
activeClassName="active-button"
|
||||
className='navbar-menu-button'
|
||||
activeClassName='active-button'
|
||||
exact={route.exact}
|
||||
to={route.path}
|
||||
onClick={this.closeMenu}
|
||||
|
@ -56,7 +56,7 @@ class Navbar extends React.Component<Props, State> {
|
|||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
render () {
|
||||
let menuButton: ?React.Element<string>
|
||||
|
||||
if (this.isMobile()) {
|
||||
|
@ -64,8 +64,8 @@ class Navbar extends React.Component<Props, State> {
|
|||
<div
|
||||
className={
|
||||
this.state.showMenu
|
||||
? "navbar-button navbar-button-closed"
|
||||
: "navbar-button"
|
||||
? 'navbar-button navbar-button-closed'
|
||||
: 'navbar-button'
|
||||
}
|
||||
onClick={this.toggleMenu}
|
||||
>
|
||||
|
@ -75,10 +75,10 @@ class Navbar extends React.Component<Props, State> {
|
|||
}
|
||||
|
||||
return (
|
||||
<div className="navbar">
|
||||
<div className='navbar'>
|
||||
{menuButton}
|
||||
{this.state.showMenu ? (
|
||||
<div className="navbar-menu">{this.buttons}</div>
|
||||
<div className='navbar-menu'>{this.buttons}</div>
|
||||
) : null}
|
||||
</div>
|
||||
)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// @flow
|
||||
import * as React from "react"
|
||||
import * as React from 'react'
|
||||
|
||||
import ClearButton from "../../components/ClearButton"
|
||||
import ClearButton from '../../components/ClearButton'
|
||||
|
||||
import "./index.css"
|
||||
import './index.css'
|
||||
|
||||
type Badge = {
|
||||
imgUrl: string,
|
||||
|
@ -21,15 +21,15 @@ type Props = {
|
|||
class Project extends React.PureComponent<Props> {
|
||||
renderBadges = (badges: Array<Badge>) => {
|
||||
return this.props.badges.map((badge, index) => (
|
||||
<a className="project-badge" href={badge.linkUrl} key={index}>
|
||||
<a className='project-badge' href={badge.linkUrl} key={index}>
|
||||
<img src={badge.imgUrl} alt={badge.alt} />
|
||||
</a>
|
||||
))
|
||||
}
|
||||
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<div className="project-container">
|
||||
<div className='project-container'>
|
||||
<h4>{this.props.title}</h4>
|
||||
{this.renderBadges(this.props.badges)}
|
||||
<p>{this.props.children}</p>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
// @flow
|
||||
import React from "react"
|
||||
import React from 'react'
|
||||
|
||||
import "./index.css"
|
||||
import './index.css'
|
||||
|
||||
type Props = {
|
||||
children: string
|
||||
}
|
||||
|
||||
class SmallText extends React.PureComponent<Props> {
|
||||
render() {
|
||||
return <div className="small-text">{this.props.children}</div>
|
||||
render () {
|
||||
return <div className='small-text'>{this.props.children}</div>
|
||||
}
|
||||
}
|
||||
|
||||
|
|
14
src/index.js
14
src/index.js
|
@ -1,15 +1,15 @@
|
|||
import React from "react"
|
||||
import ReactDOM from "react-dom"
|
||||
import { BrowserRouter } from "react-router-dom"
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom'
|
||||
import { BrowserRouter } from 'react-router-dom'
|
||||
|
||||
import "./index.css"
|
||||
import Website from "./Website"
|
||||
import registerServiceWorker from "./registerServiceWorker"
|
||||
import './index.css'
|
||||
import Website from './Website'
|
||||
import registerServiceWorker from './registerServiceWorker'
|
||||
|
||||
ReactDOM.render(
|
||||
<BrowserRouter>
|
||||
<Website />
|
||||
</BrowserRouter>,
|
||||
document.getElementById("root")
|
||||
document.getElementById('root')
|
||||
)
|
||||
registerServiceWorker()
|
||||
|
|
|
@ -9,17 +9,17 @@
|
|||
// This link also includes instructions on opting out of this behavior.
|
||||
|
||||
const isLocalhost = Boolean(
|
||||
window.location.hostname === "localhost" ||
|
||||
window.location.hostname === 'localhost' ||
|
||||
// [::1] is the IPv6 localhost address.
|
||||
window.location.hostname === "[::1]" ||
|
||||
window.location.hostname === '[::1]' ||
|
||||
// 127.0.0.1/8 is considered localhost for IPv4.
|
||||
window.location.hostname.match(
|
||||
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
|
||||
)
|
||||
)
|
||||
|
||||
export default function register() {
|
||||
if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) {
|
||||
export default function register () {
|
||||
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
|
||||
// The URL constructor is available in all browsers that support SW.
|
||||
const publicUrl = new URL(process.env.PUBLIC_URL, window.location) // eslint-disable-line no-undef
|
||||
if (publicUrl.origin !== window.location.origin) {
|
||||
|
@ -29,7 +29,7 @@ export default function register() {
|
|||
return
|
||||
}
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
window.addEventListener('load', () => {
|
||||
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`
|
||||
|
||||
if (isLocalhost) {
|
||||
|
@ -40,8 +40,8 @@ export default function register() {
|
|||
// service worker/PWA documentation.
|
||||
navigator.serviceWorker.ready.then(() => {
|
||||
console.log(
|
||||
"This web app is being served cache-first by a service " +
|
||||
"worker. To learn more, visit https://goo.gl/SC7cgQ"
|
||||
'This web app is being served cache-first by a service ' +
|
||||
'worker. To learn more, visit https://goo.gl/SC7cgQ'
|
||||
)
|
||||
})
|
||||
} else {
|
||||
|
@ -52,43 +52,43 @@ export default function register() {
|
|||
}
|
||||
}
|
||||
|
||||
function registerValidSW(swUrl) {
|
||||
function registerValidSW (swUrl) {
|
||||
navigator.serviceWorker
|
||||
.register(swUrl)
|
||||
.then(registration => {
|
||||
registration.onupdatefound = () => {
|
||||
const installingWorker = registration.installing
|
||||
installingWorker.onstatechange = () => {
|
||||
if (installingWorker.state === "installed") {
|
||||
if (installingWorker.state === 'installed') {
|
||||
if (navigator.serviceWorker.controller) {
|
||||
// At this point, the old content will have been purged and
|
||||
// the fresh content will have been added to the cache.
|
||||
// It's the perfect time to display a "New content is
|
||||
// available; please refresh." message in your web app.
|
||||
console.log("New content is available; please refresh.")
|
||||
console.log('New content is available; please refresh.')
|
||||
} else {
|
||||
// At this point, everything has been precached.
|
||||
// It's the perfect time to display a
|
||||
// "Content is cached for offline use." message.
|
||||
console.log("Content is cached for offline use.")
|
||||
console.log('Content is cached for offline use.')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Error during service worker registration:", error)
|
||||
console.error('Error during service worker registration:', error)
|
||||
})
|
||||
}
|
||||
|
||||
function checkValidServiceWorker(swUrl) {
|
||||
function checkValidServiceWorker (swUrl) {
|
||||
// Check if the service worker can be found. If it can't reload the page.
|
||||
fetch(swUrl) // eslint-disable-line no-undef
|
||||
.then(response => {
|
||||
// Ensure service worker exists, and that we really are getting a JS file.
|
||||
if (
|
||||
response.status === 404 ||
|
||||
response.headers.get("content-type").indexOf("javascript") === -1
|
||||
response.headers.get('content-type').indexOf('javascript') === -1
|
||||
) {
|
||||
// No service worker found. Probably a different app. Reload the page.
|
||||
navigator.serviceWorker.ready.then(registration => {
|
||||
|
@ -103,13 +103,13 @@ function checkValidServiceWorker(swUrl) {
|
|||
})
|
||||
.catch(() => {
|
||||
console.log(
|
||||
"No internet connection found. App is running in offline mode."
|
||||
'No internet connection found. App is running in offline mode.'
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
export function unregister() {
|
||||
if ("serviceWorker" in navigator) {
|
||||
export function unregister () {
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.ready.then(registration => {
|
||||
registration.unregister()
|
||||
})
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
// @flow
|
||||
import React from "react"
|
||||
import { Route, Switch } from "react-router-dom"
|
||||
import React from 'react'
|
||||
import { Route, Switch } from 'react-router-dom'
|
||||
|
||||
import { routes, redirects } from "./routes.js"
|
||||
import { routes, redirects } from './routes.js'
|
||||
|
||||
type Props = {}
|
||||
|
||||
|
@ -10,7 +10,7 @@ class Routes extends React.Component<Props> {
|
|||
routes: Array<Route>
|
||||
redirects: Array<Route>
|
||||
|
||||
constructor(props: Props) {
|
||||
constructor (props: Props) {
|
||||
super(props)
|
||||
|
||||
this.routes = routes.map(route => (
|
||||
|
@ -27,7 +27,7 @@ class Routes extends React.Component<Props> {
|
|||
))
|
||||
}
|
||||
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<Switch>
|
||||
{this.routes}
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
// @flow
|
||||
import Home from "../components/Home"
|
||||
import Projects from "../containers/Projects"
|
||||
import Contact from "../components/Contact"
|
||||
import Home from '../screens/Home'
|
||||
import Projects from '../screens/Projects'
|
||||
import Contact from '../screens/Contact'
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: "/",
|
||||
name: "Home",
|
||||
path: '/',
|
||||
name: 'Home',
|
||||
component: Home,
|
||||
exact: true
|
||||
},
|
||||
{
|
||||
path: "/projects",
|
||||
name: "Projects",
|
||||
path: '/projects',
|
||||
name: 'Projects',
|
||||
component: Projects,
|
||||
exact: false
|
||||
},
|
||||
{
|
||||
path: "/contact",
|
||||
name: "Contact",
|
||||
path: '/contact',
|
||||
name: 'Contact',
|
||||
component: Contact,
|
||||
exact: false
|
||||
}
|
||||
|
@ -26,8 +26,8 @@ const routes = [
|
|||
|
||||
const redirects = [
|
||||
{
|
||||
path: "/linkedin",
|
||||
func: () => (window.location = "https://linkedin.com/in/mitchelljfsimon")
|
||||
path: '/linkedin',
|
||||
func: () => (window.location = 'https://linkedin.com/in/mitchelljfsimon')
|
||||
}
|
||||
]
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
// @flow
|
||||
import React from 'react'
|
||||
|
||||
import './index.css'
|
||||
import linkedIn from '../../images/In-2C-128px-TM.png'
|
||||
|
||||
type Props = {}
|
||||
|
||||
class Contact extends React.PureComponent<Props> {
|
||||
render () {
|
||||
return (
|
||||
<div className='contact-container'>
|
||||
<p>m@mjfs.us</p>
|
||||
<a href='https://www.linkedin.com/in/mitchelljfsimon/'>
|
||||
<img src={linkedIn} alt='LinkedIn' />
|
||||
</a>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default Contact
|
|
@ -1,10 +1,10 @@
|
|||
// @flow
|
||||
import * as React from "react"
|
||||
import * as React from 'react'
|
||||
|
||||
import "./index.css"
|
||||
import JobComponent from "../../components/Job"
|
||||
import './index.css'
|
||||
import JobComponent from '../../components/Job'
|
||||
|
||||
import jobsData from "../../data/jobs.json"
|
||||
import jobsData from '../../data/jobs.json'
|
||||
|
||||
type Props = {}
|
||||
|
||||
|
@ -28,9 +28,9 @@ class Experience extends React.PureComponent<Props> {
|
|||
))
|
||||
}
|
||||
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<div className="experience-container">{this.renderJobs(jobsData)}</div>
|
||||
<div className='experience-container'>{this.renderJobs(jobsData)}</div>
|
||||
)
|
||||
}
|
||||
}
|
|
@ -15,11 +15,12 @@ class Home extends React.PureComponent<Props> {
|
|||
<p>
|
||||
I am a software developer, with most of my experience in web services.
|
||||
More specifically, for the past year, I have been focused on Go web
|
||||
services with cloud-native architectures. Tech that I love working
|
||||
with includes Go, TypeScript, gRPC, Serverless, Docker, Redis, and
|
||||
PostgreSQL. Concepts that I am currently focused on are Docker
|
||||
containerization and orchestration, microservices software architecture
|
||||
w/ dependency injection, and infrastructure as code using Terraform.
|
||||
services with cloud-native architectures. Tech that I love working
|
||||
with includes Go, TypeScript, gRPC, Serverless, Docker, Redis, and
|
||||
PostgreSQL. Concepts that I am currently focused on are Docker
|
||||
containerization and orchestration, microservices software
|
||||
architecture w/ dependency injection, and infrastructure as code using
|
||||
Terraform.
|
||||
</p>
|
||||
<p>
|
||||
My professional interests, aside from the above, include software
|
|
@ -1,11 +1,11 @@
|
|||
// @flow
|
||||
import * as React from "react"
|
||||
import * as React from 'react'
|
||||
|
||||
import ProjectComponent from "../../components/Project"
|
||||
import ProjectComponent from '../../components/Project'
|
||||
|
||||
import "./index.css"
|
||||
import './index.css'
|
||||
|
||||
import projectsData from "../../data/projects.json"
|
||||
import projectsData from '../../data/projects.json'
|
||||
|
||||
type Props = {}
|
||||
|
||||
|
@ -36,9 +36,9 @@ class Projects extends React.PureComponent<Props> {
|
|||
))
|
||||
}
|
||||
|
||||
render() {
|
||||
render () {
|
||||
return (
|
||||
<div className="projects-container">
|
||||
<div className='projects-container'>
|
||||
{this.renderProjects(projectsData)}
|
||||
</div>
|
||||
)
|
Loading…
Reference in New Issue