Merge 2021.0
1
.eslintcache
Normal file
43
.gitignore
vendored
@ -1,26 +1,23 @@
|
||||
# Files
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.ruby-version
|
||||
npm-debug.log
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# Folders
|
||||
|
||||
.idea/
|
||||
.sass-cache
|
||||
_gh_pages
|
||||
_site
|
||||
node_modules
|
||||
.vscode/settings.json
|
||||
.nyc_output/processinfo/3fd5a954-1289-426c-bc9b-6b7ea38b7c90.json
|
||||
.nyc_output/processinfo/index.json
|
||||
.nyc_output/
|
||||
|
||||
# Organisation ADM
|
||||
.well-known/
|
||||
contact
|
||||
|
||||
# Securité
|
||||
pgp.txt
|
||||
security.txt
|
||||
.jenkins
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
18
.reactgenerator
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"componentDestination": "./src/components/",
|
||||
"styledComponentDestination": "./src/components/",
|
||||
"tscomponentDestination": "./components/",
|
||||
"viewDestination": "./src/view/",
|
||||
"storeDestination": "./src/store/",
|
||||
"pageDestination": "./pages/",
|
||||
"tspageDestination": "./pages/",
|
||||
"reduxDestination": "./src/",
|
||||
"setupDestination": "./src/",
|
||||
"reduxModuleDestination": "./src/store/",
|
||||
"serviceModuleDestination": "./src/services/",
|
||||
"servicesDestination": "./src/",
|
||||
"configDestination": "./src/services/",
|
||||
"requestDestination": "./src/services/config/",
|
||||
"storageDestination": "./src/services/config/",
|
||||
"templatePath": ""
|
||||
}
|
74
README.md
@ -1,12 +1,70 @@
|
||||
# Portfolio Anthony Dumas
|
||||
[](http://jenkins.adm.ink/job/Projets%20Personnel/job/anthony-dumas.fr/)
|
||||
# Getting Started with Create React App
|
||||
|
||||
Je met a disposition le code de mon portfolio pour review et également garder une trace de l'évolution du site.
|
||||
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||
|
||||
## Déploiement
|
||||
Déployé en intégration continue sur https://www.anthony-dumas.fr
|
||||
## Available Scripts
|
||||
|
||||
## Développement
|
||||
In the project directory, you can run:
|
||||
|
||||
- yarn start ou npm start
|
||||
> Watcher de fichier & serveur Browsersync
|
||||
### `npm start`
|
||||
|
||||
Runs the app in the development mode.\
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
||||
|
||||
The page will reload if you make edits.\
|
||||
You will also see any lint errors in the console.
|
||||
|
||||
### `npm test`
|
||||
|
||||
Launches the test runner in the interactive watch mode.\
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `npm run build`
|
||||
|
||||
Builds the app for production to the `build` folder.\
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.\
|
||||
Your app is ready to be deployed!
|
||||
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### `npm run eject`
|
||||
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
|
||||
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
|
||||
|
||||
## Learn More
|
||||
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||
|
||||
### Code Splitting
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
|
||||
|
||||
### Analyzing the Bundle Size
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
|
||||
|
||||
### Making a Progressive Web App
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
|
||||
|
||||
### Deployment
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
|
||||
|
||||
### `npm run build` fails to minify
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
|
||||
|
57672
package-lock.json
generated
92
package.json
@ -1,65 +1,41 @@
|
||||
{
|
||||
"name": "anthony-dumas-portfolio",
|
||||
"version": "2.0.0-SNAPSHOT",
|
||||
"description": "anthony-dumas-portfolio",
|
||||
"keywords": [
|
||||
"sass",
|
||||
"bulma",
|
||||
"css",
|
||||
"start"
|
||||
],
|
||||
"author": "Anthony Dumas <anthony@dumas.css>",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/AdamasFR/CV_Web_Dumas.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.7.7",
|
||||
"@babel/core": "^7.7.7",
|
||||
"@babel/preset-env": "^7.7.7",
|
||||
"@babel/preset-react": "^7.7.4",
|
||||
"autoprefixer": "^9.7.3",
|
||||
"ava": "^1.4.1",
|
||||
"babel-loader": "^8.0.6",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"babel-preset-es2015-ie": "^6.7.0",
|
||||
"bulma": "^0.7.5",
|
||||
"co-exec": "^1.0",
|
||||
"codecov": "^3.7.1",
|
||||
"ghooks": "^1.2.4",
|
||||
"node-sass": "^5.0.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"nyc": "^14.1.1",
|
||||
"postcss-cli": "^6.1.3",
|
||||
"standard": "^8.4.0",
|
||||
"webpack": "^4.41.5",
|
||||
"webpack-cli": "^3.3.10"
|
||||
"name": "anthony-dumas.fr",
|
||||
"version": "2021.0.001",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@testing-library/jest-dom": "^5.11.6",
|
||||
"@testing-library/react": "^11.2.2",
|
||||
"@testing-library/user-event": "^12.5.0",
|
||||
"bulma": "^0.9.1",
|
||||
"react": "^17.0.1",
|
||||
"react-dom": "^17.0.1",
|
||||
"react-intl": "^5.10.9",
|
||||
"react-scripts": "4.0.1",
|
||||
"sass": "^1.30.0",
|
||||
"web-vitals": "^0.2.4"
|
||||
},
|
||||
"scripts": {
|
||||
"css-deploy": "npm run css-build && npm run css-postcss",
|
||||
"css-build": "node-sass _sass/main.scss css/main.css",
|
||||
"css-postcss": "postcss --use autoprefixer --output css/main.css css/main.css",
|
||||
"css-watch": "npm run css-build -- --watch",
|
||||
"deploy": "npm run css-deploy && npm run js-build",
|
||||
"js-build": "babel _javascript --out-dir lib",
|
||||
"js-watch": "npm run js-build -- --watch",
|
||||
"auto-loading": "npx browser-sync start --server --files '*.html' --files 'css/*.css'",
|
||||
"start": "npm-run-all --parallel css-watch js-watch auto-loading",
|
||||
"report-coverage": "nyc report --reporter=lcov > coverage.lcov && codecov",
|
||||
"standard": "standard index.js",
|
||||
"test": "nyc ./node_modules/.bin/ava -v"
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"dependencies": {
|
||||
"bonsoir.js": "^1.0.4",
|
||||
"browser-sync": "^2.26.7",
|
||||
"global": "^4.4.0",
|
||||
"jquery": "^3.5.0",
|
||||
"npx": "^10.2.0"
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"ghooks": {
|
||||
"pre-commit": "npm run standard"
|
||||
}
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
BIN
public/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
public/images/linode_logo.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
public/images/logos/harvest.fr.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
public/images/logos/michelin.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
public/images/logos/www.iut-clermont.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
public/images/mail.jpg
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
public/images/portfolio/admPhotos.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
public/images/portfolio/computerNonSense.jpg
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
public/images/portfolio/vinyls.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
public/images/poweredByInfomaniak.bmp
Normal file
After Width: | Height: | Size: 8.0 KiB |
46
public/index.html
Normal file
@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Web site created using create-react-app"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>Anthony Dumas</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<h1>Ce site requiert Javascript (désolé !)</h1>
|
||||
Dirigez vous vers <a href="https://files.adm.ink/anthony-dumas-cv.pdf">https://files.adm.ink/anthony-dumas-cv.pdf</a> pour une version PDF.
|
||||
</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
BIN
public/logo192.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
public/logo512.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
25
public/manifest.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
3
public/robots.txt
Normal file
@ -0,0 +1,3 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
0
src/App.css
Normal file
22
src/App.js
Normal file
@ -0,0 +1,22 @@
|
||||
import './App.css';
|
||||
import './_sass/index.scss';
|
||||
|
||||
import MenuComponent from './components/MenuComponent/index';
|
||||
import MainCard from './components/MainCard/MainCard';
|
||||
import ProjectsCard from './components/ProjectsCard';
|
||||
import ContactCard from './components/ContactCard';
|
||||
import FooterCard from './components/FooterCard';
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<MenuComponent/>
|
||||
<MainCard/>
|
||||
<ProjectsCard/>
|
||||
<ContactCard/>
|
||||
<FooterCard/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
37
src/App.sass
Normal file
@ -0,0 +1,37 @@
|
||||
@charset "utf-8"
|
||||
|
||||
// Import a Google Font
|
||||
@import url('https://fonts.googleapis.com/css?family=Nunito:400,700')
|
||||
|
||||
// Set your brand colors
|
||||
$purple: #8a4d76
|
||||
$pink: #fa7c91
|
||||
$brown: #757763
|
||||
$beige-light: #d0d1cd
|
||||
$beige-lighter: #eff0eb
|
||||
|
||||
// Update Bulma's global variables
|
||||
$family-sans-serif: 'Nunito', sans-serif
|
||||
$grey-dark: $brown
|
||||
$grey-light: $beige-light
|
||||
$primary: $purple
|
||||
$link: $pink
|
||||
$widescreen-enabled: false
|
||||
$fullhd-enabled: false
|
||||
|
||||
// Update some of Bulma's component variables
|
||||
$body-background-color: $beige-lighter
|
||||
$control-border-width: 2px
|
||||
$input-border-color: transparent
|
||||
$input-shadow: none
|
||||
|
||||
// Import only what you need from Bulma
|
||||
@import '../node_modules/bulma/sass/utilities/_all.sass'
|
||||
@import '../node_modules/bulma/sass/base/_all.sass'
|
||||
@import '../node_modules/bulma/sass/elements/button.sass'
|
||||
@import '../node_modules/bulma/sass/elements/container.sass'
|
||||
@import '../node_modules/bulma/sass/elements/form.sass'
|
||||
@import '../node_modules/bulma/sass/elements/title.sass'
|
||||
@import '../node_modules/bulma/sass/components/navbar.sass'
|
||||
@import '../node_modules/bulma/sass/layout/hero.sass'
|
||||
@import '../node_modules/bulma/sass/layout/section.sass'
|
8
src/App.test.js
Normal file
@ -0,0 +1,8 @@
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import App from './App';
|
||||
|
||||
test('renders learn react link', () => {
|
||||
render(<App />);
|
||||
const linkElement = screen.getByText(/learn react/i);
|
||||
expect(linkElement).toBeInTheDocument();
|
||||
});
|
67
src/_sass/dark-theme.scss
Normal file
@ -0,0 +1,67 @@
|
||||
/**
|
||||
Dark Theme
|
||||
**/
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.dark-theme-only {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.hero {
|
||||
background-color: darken(#5c9ead, 35%) !important;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#photosAndButtons .card-content {
|
||||
background-color: darken(#5c9ead, 40%) !important;
|
||||
}
|
||||
|
||||
p.title,
|
||||
span.title {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
p.subtitle {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.is-primary {
|
||||
background-color: darken(#5c9ead, 40%) !important;
|
||||
}
|
||||
|
||||
.tile.is-vertical {
|
||||
background-color: unset;
|
||||
}
|
||||
|
||||
.is-info {
|
||||
background-color: darken(#5c9ead, 41%) !important;
|
||||
}
|
||||
|
||||
section.hero.is-primary.is-bold {
|
||||
background-image: none;
|
||||
background-color: darken(#5c9ead, 30%) !important;
|
||||
}
|
||||
|
||||
body footer {
|
||||
background-color: darken(#5c9ead, 42%) !important;
|
||||
}
|
||||
|
||||
.button {
|
||||
background-color: darken(#5c9ead, 41%);
|
||||
border-color: darken(#5c9ead, 30%);
|
||||
border-width: 4px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
p {
|
||||
color: white;
|
||||
}
|
||||
|
||||
#photoProfil {
|
||||
background-color: darken(#5c9ead, 35%);
|
||||
}
|
||||
|
||||
#photosAndButtons .card {
|
||||
box-shadow: unset;
|
||||
}
|
||||
|
||||
}
|
48
src/_sass/icon.scss
Normal file
@ -0,0 +1,48 @@
|
||||
@font-face {
|
||||
font-family: "icomoon";
|
||||
src: url("../font/fonts/icomoon.eot");
|
||||
src: url("../font/fonts/icomoon.eot?#iefix") format("embedded-opentype"), url("../font/fonts/icomoon.woff") format("woff"), url("../font/fonts/icomoon.ttf") format("truetype"), url("../font/fonts/icomoon.svg#icomoon") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.icon .fab {
|
||||
font-family: "icomoon";
|
||||
content: attr(data-icon);
|
||||
speak: none;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-style: normal;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.icon-github-alt:before {
|
||||
content: "\e903";
|
||||
}
|
||||
|
||||
.icon-linke-square:before {
|
||||
content: "\e902";
|
||||
}
|
||||
|
||||
.icon-envelope-open:before {
|
||||
content: "\e901";
|
||||
}
|
||||
|
||||
.icon-twit:before {
|
||||
content: "\e904";
|
||||
}
|
||||
|
||||
.icon-teleg:before {
|
||||
content: "\e900";
|
||||
}
|
||||
|
||||
.icon-file-pdf-o:before {
|
||||
content: "\e905";
|
||||
}
|
||||
|
||||
.icon-print:before {
|
||||
content: "\e906";
|
||||
}
|
3
src/_sass/index.scss
Normal file
@ -0,0 +1,3 @@
|
||||
@import "main.scss";
|
||||
@import "icon.scss";
|
||||
@import "dark-theme.scss";
|
118
src/_sass/main.scss
Normal file
@ -0,0 +1,118 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/**
|
||||
Thème
|
||||
**/
|
||||
$deep-koamaru:#2b4162;
|
||||
$myrtle-green:#326273;
|
||||
$cadet-blue:#5c9ead;
|
||||
$neon-carrot:#fa9f42;
|
||||
$white:#ffffff;
|
||||
|
||||
/**
|
||||
Variables Bulma
|
||||
**/
|
||||
$primary:$cadet-blue;
|
||||
$primary-invert:#fff;
|
||||
$info:$myrtle-green;
|
||||
$info-invert:#fff;
|
||||
$footer-color:$deep-koamaru;
|
||||
$link:$neon-carrot;
|
||||
$link-hover:"";
|
||||
|
||||
html {
|
||||
background-color: $primary;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.dark-theme-only {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@import "../../node_modules/bulma/bulma";
|
||||
@import "icon";
|
||||
|
||||
#idCard {
|
||||
|
||||
.hero-body {
|
||||
padding-bottom: 2rem;
|
||||
padding-top: 2rem;
|
||||
}
|
||||
|
||||
// permet de re-aligner les tags avec les subtitles
|
||||
.tags {
|
||||
margin-top: -1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
// retire les barres de scroll des panneaux experience/education
|
||||
#experiences .media-content {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: $footer-color !important;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
footer strong {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.media-content {
|
||||
margin-top: -6px;
|
||||
}
|
||||
|
||||
// Pour devices iOS qui ont un notch (si c'est pas un device avec un notch, it's no-tch your problem)
|
||||
div.hero-body {
|
||||
margin-left: env(safe-area-inset-left);
|
||||
margin-right: env(safe-area-inset-right);
|
||||
}
|
||||
|
||||
section#contact .button {
|
||||
min-width: 155px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.button.is-fullw-mobile {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.displayOnlyOnPrint {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#buttonsUnderPhoto a {
|
||||
padding-left: 16px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
#photosAndButtons .media-content p+p {
|
||||
margin-top: -16px;
|
||||
}
|
||||
|
||||
.tile p.title {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
//
|
||||
footer small {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
// Photo de Profil
|
||||
#photoProfil {
|
||||
background-color: lightgray;
|
||||
}
|
||||
|
||||
#mailWhenNoJavascript{
|
||||
text-align: left;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
@import "dark-theme";
|
17
src/components/ButtonIcon/ButtonIcon.js
Normal file
@ -0,0 +1,17 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import './ButtonIcon.scss'
|
||||
|
||||
export default class ButtonIcon extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
return <a class="button" rel="noopener" href={this.props.lien}
|
||||
aria-label="Profil {this.props.icon}">
|
||||
<span class="icon is-large">
|
||||
<i class={this.props.icon}></i>
|
||||
</span>
|
||||
</a>;
|
||||
}
|
||||
}
|
4
src/components/ButtonIcon/ButtonIcon.scss
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
.component-button-icon{
|
||||
|
||||
}
|
2
src/components/ButtonIcon/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ButtonIcon from "./ButtonIcon"
|
||||
export default ButtonIcon;
|
27
src/components/ContactButton/ContactButton.js
Normal file
@ -0,0 +1,27 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import './ContactButton.scss'
|
||||
// import { connect } from "react-redux";
|
||||
// import { bindActionCreators } from "redux";
|
||||
// import * as contactButtonActions from "../../store/contactButton/actions";
|
||||
export default class ContactButton extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
const data = this.props.data;
|
||||
return <div class="column is-3">
|
||||
<a target="_blank" rel="noreferrer noopener" href={data.url} class="hide button is-large is-fullw-mobile"
|
||||
title={`Go to ${data.title}`}>
|
||||
<span class="icon">
|
||||
<i class={"fab " + data.icon}></i>
|
||||
</span>
|
||||
<span>{data.title}</span>
|
||||
</a>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
// export default connect(
|
||||
// ({ contactButton }) => ({ ...contactButton }),
|
||||
// dispatch => bindActionCreators({ ...contactButtonActions }, dispatch)
|
||||
// )( contactButton );
|
4
src/components/ContactButton/ContactButton.scss
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
.component-contact-button{
|
||||
|
||||
}
|
2
src/components/ContactButton/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ContactButton from "./ContactButton"
|
||||
export default ContactButton;
|
39
src/components/ContactCard/ContactCard.js
Normal file
@ -0,0 +1,39 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import { injectIntl } from 'react-intl';
|
||||
|
||||
import './ContactCard.scss'
|
||||
|
||||
import ContactButton from '../ContactButton/index';
|
||||
|
||||
// import { connect } from "react-redux";
|
||||
// import { bindActionCreators } from "redux";
|
||||
// import * as contactCardActions from "../../store/contactCard/actions";
|
||||
class ContactCard extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
const contactCardMessage = this.props.intl.messages.contactCard;
|
||||
return <section class="hero is-info dontPrint" id="contact">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<h1 class="title">
|
||||
{contactCardMessage.title}
|
||||
</h1>
|
||||
<h2 class="subtitle">
|
||||
{contactCardMessage.subtitle}
|
||||
</h2>
|
||||
<div class="columns">
|
||||
{contactCardMessage.ways.map(function(button, index){
|
||||
return <ContactButton
|
||||
data={button}/>;
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(ContactCard)
|
4
src/components/ContactCard/ContactCard.scss
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
.component-contact-card{
|
||||
|
||||
}
|
2
src/components/ContactCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ContactCard from "./ContactCard"
|
||||
export default ContactCard;
|
48
src/components/ExperienceCard/ExperienceCard.js
Normal file
@ -0,0 +1,48 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import './ExperienceCard.scss'
|
||||
|
||||
// import { connect } from "react-redux";
|
||||
// import { bindActionCreators } from "redux";
|
||||
// import * as MenuComponentActions from "../../store/MenuComponent/actions";
|
||||
|
||||
export default class ExperienceCard extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
var data = this.props.data;
|
||||
var imgSrc = data.logo;
|
||||
return <div class="card-content">
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<a href={data.url}>
|
||||
<figure class="image is-48x48">
|
||||
<img src={imgSrc} alt="Logo Entreprise"/>
|
||||
</figure>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media-content">
|
||||
<p class="title is-4">{data.occupation}</p>
|
||||
<p class="subtitle is-6">{data.entreprise} - {data.location} - {data.duration}</p>
|
||||
<div class="tags">
|
||||
{data.tags.map(function(name, index){
|
||||
return <span key={ index } class="tag">{name}</span>;
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
{data.description}
|
||||
</div>
|
||||
{data.commentaire ? <div class="comment">
|
||||
{data.commentaire}
|
||||
</div> : ''}
|
||||
|
||||
</div>
|
||||
}
|
||||
}
|
||||
// export default connect(
|
||||
// ({ MenuComponent }) => ({ ...MenuComponent }),
|
||||
// dispatch => bindActionCreators({ ...MenuComponentActions }, dispatch)
|
||||
// )( MenuComponent );
|
4
src/components/ExperienceCard/ExperienceCard.scss
Normal file
@ -0,0 +1,4 @@
|
||||
.comment{
|
||||
font-style: italic;
|
||||
margin-top: -25px;
|
||||
}
|
2
src/components/ExperienceCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ExperienceCard from "./ExperienceCard"
|
||||
export default ExperienceCard;
|
55
src/components/FooterCard/FooterCard.js
Normal file
@ -0,0 +1,55 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import { injectIntl } from 'react-intl';
|
||||
|
||||
import './FooterCard.scss'
|
||||
|
||||
import bulmaLogo from '../../images/made-with-bulma.png';
|
||||
|
||||
// import { connect } from "react-redux";
|
||||
// import { bindActionCreators } from "redux";
|
||||
// import * as FooterCardActions from "../../store/FooterCard/actions";
|
||||
class FooterCard extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
const footerMessage = this.props.intl.messages.footer;
|
||||
return <footer class="footer has-text-centered dontPrint">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column is-8-desktop is-offset-2-desktop">
|
||||
<p>
|
||||
<strong class="has-text-weight-semibold">
|
||||
anthony-dumas.fr
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<small class="sosumi">
|
||||
{footerMessage.legalNotice}
|
||||
</small>
|
||||
</p>
|
||||
<p id="footer-credits">
|
||||
<small>powered by</small>
|
||||
<br/>
|
||||
<a rel="noopener" href="http://bulma.io" alt="Framework used on this website">
|
||||
<img src={bulmaLogo} alt="Made with Bulma" width="128" height="24"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a rel="noopener" href="https://www.linode.com/" alt="The Host of the Website" id="linode-logo">
|
||||
<svg viewBox="0 0 230 90" width="115" height="30"><g fill="#FFF"><path d="M93.8 27.8l5.8-1.4v28c0 3.1.9 4.9 2.7 5.5-.9 1.7-2.4 2.6-4.6 2.6-2.6 0-4-1.8-4-5.5V27.8zM108.4 62V41.8h-3.2V37h9.1v25h-5.9zm3-34.6c.9 0 1.7.3 2.4 1s1 1.5 1 2.4c0 .9-.3 1.7-1 2.4s-1.5 1-2.4 1c-.9 0-1.7-.3-2.4-1s-1-1.5-1-2.4c0-.9.3-1.7 1-2.4s1.5-1 2.4-1zM137.1 62V47.6c0-2.1-.4-3.7-1.2-4.6-.8-1-2.1-1.5-4-1.5-.9 0-1.8.2-2.7.7-1 .5-1.7 1.1-2.3 1.8v18h-5.8V37.1h4.2l1.1 2.3c1.6-1.9 3.9-2.8 7-2.8 3 0 5.3.9 7 2.7 1.7 1.8 2.6 4.3 2.6 7.4V62h-5.9zM147.5 49.5c0-3.8 1.1-6.9 3.3-9.3 2.2-2.4 5.1-3.6 8.7-3.6 3.8 0 6.7 1.1 8.8 3.4 2.1 2.3 3.1 5.4 3.1 9.4s-1.1 7.1-3.2 9.5c-2.1 2.3-5 3.5-8.8 3.5-3.8 0-6.7-1.2-8.8-3.5-2-2.4-3.1-5.5-3.1-9.4zm6.1 0c0 5.5 2 8.2 5.9 8.2 1.8 0 3.2-.7 4.3-2.1 1.1-1.4 1.6-3.5 1.6-6.1 0-5.4-2-8.1-5.9-8.1-1.8 0-3.3.7-4.3 2.1-1.1 1.4-1.6 3.4-1.6 6zM192.1 62v-1.5c-.5.5-1.3 1-2.4 1.4-1.1.4-2.3.6-3.6.6-3.5 0-6.2-1.1-8.2-3.3-2-2.2-3-5.3-3-9.2 0-3.9 1.1-7.1 3.4-9.6s5.1-3.7 8.6-3.7c1.9 0 3.6.4 5.2 1.2v-10l5.8-1.4V62h-5.8zm0-19c-1.2-1-2.5-1.5-3.9-1.5-2.3 0-4.1.7-5.4 2.1-1.3 1.4-1.9 3.5-1.9 6.1 0 5.2 2.5 7.8 7.5 7.8.6 0 1.2-.2 2.1-.5.8-.3 1.3-.7 1.6-1V43zM226 51.3h-17.8c.1 2 .8 3.5 2 4.6 1.3 1.1 2.9 1.7 5.1 1.7 2.6 0 4.7-.7 6-2.1l2.3 4.4c-2 1.7-5.1 2.5-9.2 2.5-3.8 0-6.8-1.1-9-3.3-2.2-2.2-3.3-5.3-3.3-9.3 0-3.9 1.2-7.1 3.6-9.5 2.4-2.4 5.3-3.6 8.7-3.6 3.6 0 6.5 1.1 8.7 3.2 2.2 2.2 3.3 4.9 3.3 8.2.1.7-.1 1.7-.4 3.2zm-17.6-4.4h12.2c-.4-3.6-2.4-5.5-6-5.5-3.3.1-5.4 1.9-6.2 5.5z"></path></g><path fill="#004712" d="M65.9 47.4l-1 11.5-3.3-2.3.4-5.8v-.1-.1l-.1-.1-.1-.1-7.1-4.7.1-5.1 11.1 6.8zM48.5 59.9L43.4 56v.9c0 .2-.1.4-.2.5L39.4 60l4.2 3.4.1.1v.2l.2 4 4.7 3.9-.1-11.7zm-32.1 5l2.4 11.5 9.9 10.5L27 75.3 16.4 64.9zm9.3 1.7l-2.4-16.1-12-10 3.2 15.6 11.2 10.5zm-3.8-26l-3.3-22.8L4.8 9.2l4.5 21.5 12.6 9.9z"></path><path fill="#00B259" d="M75.7 41.2l-1.5 10.9-8.2 6.6 1-11.2 8.7-6.3zM49.6 59.9l.1 11.8 10.5-8.4.7-11.5-11.3 8.1zm-6.8 4.8L28 75.3l1.8 12.2 13.4-10.7-.4-12.1zm-.4-8l-.7-16-17.3 9.9 2.4 16.6 15.6-10.5zm-1.1-25.3l-.9-21.6-20.8 8L23 41l18.3-9.6z"></path><path d="M76.9 40c0-.1 0-.1 0 0v-.2s0-.1-.1-.1c0 0-.1 0-.1-.1l-12-6.7c-.2-.1-.4-.1-.5 0L54 39.1h-.1v.6l-.1 5.4-4.1-2.7c-.2-.1-.4-.1-.6 0L43 45.8l-.3-6v-.1-.1-.1-.1-.1h-.1l-6.2-4.1 5.8-3c.2-.1.3-.3.3-.5L41.4 9v-.1s0-.1-.1-.1c0 0 0-.1-.1-.1L25.5 1.1c-.1-.1-.2-.1-.3-.1L3.9 7.6s-.1 0-.1.1c0 0-.1 0-.1.1v.6l4.7 22.9c0 .1.1.2.2.3l6.4 5-4.7 2.2s-.1 0-.1.1c0 0 0 .1-.1.1v.2l3.6 17.2c0 .1.1.2.2.3l4.5 4.2-3 1.8-.1.1s0 .1-.1.1V63.2L18 76.5c0 .1.1.2.1.3l10.9 12h.1s.1 0 .1.1h.5l14.4-11.5c.1-.1.2-.3.2-.4l-.3-7.9 4.8 4s.1 0 .1.1h.5L61 64c.1-.1.2-.2.2-.4l.4-5.8 3.5 2.4h.4s.1 0 .1-.1l9.4-7.5c.1-.1.2-.2.2-.3L76.9 40c0 .1 0 .1 0 0zM66 58.7l1-11.2 8.8-6.3-1.5 10.9-8.3 6.6zm-4.4-2.1l.4-5.8v-.1-.1l-.1-.1-.1-.1-7.1-4.7.1-5.1 11.1 6.9-1 11.5-3.3-2.4zm-1.5 6.7l-10.5 8.4-.1-11.8 11.3-8.1-.7 11.5zM43.3 76.8L29.8 87.5 28 75.3l14.7-10.5.6 12zm-24.6-.4l-2.4-11.5L27 75.3l1.7 11.6-10-10.5zm-.2-58.6l3.3 22.8-12.5-9.9L4.8 9.2l13.7 8.6zm21.9-8l.9 21.6L23 41l-3.4-23.2 20.8-8zm2 46.9L26.8 67.1l-2.4-16.6 17.3-9.9.7 16.1zm-19.1-6.1l2.4 16.1-11.2-10.6-3.2-15.6 12 10.1zm20.5 13.1v-.1-.1l-.1-.1-4.2-3.4 3.8-2.6c.2-.1.2-.3.2-.5V56l5.1 3.9.1 11.8-4.7-3.9-.2-4.1z"></path></svg>
|
||||
</a>
|
||||
</p>
|
||||
<p class="dark-theme-only">
|
||||
<small>
|
||||
{footerMessage.darkThemeNotice}
|
||||
</small>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>;
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(FooterCard)
|
3
src/components/FooterCard/FooterCard.scss
Normal file
@ -0,0 +1,3 @@
|
||||
#footer-credits{
|
||||
margin-top: 1rem;
|
||||
}
|
2
src/components/FooterCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import FooterCard from "./FooterCard"
|
||||
export default FooterCard;
|
80
src/components/MainCard/MainCard.js
Normal file
@ -0,0 +1,80 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import { injectIntl } from 'react-intl'
|
||||
|
||||
import ExperienceCard from '../ExperienceCard/index';
|
||||
import ButtonIcon from '../ButtonIcon/index';
|
||||
|
||||
import './MainCard.scss'
|
||||
import photoProfil from '../../images/profile_opt.png';
|
||||
|
||||
class MainCard extends Component {
|
||||
render() {
|
||||
const experienceCardMessage = this.props.intl.messages.experienceCard;
|
||||
return <section id="idCard" class="hero is-medium is-primary-inverted is-bold">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column is-2 is-hidden-touch is-hidden-desktop-only dontPrint"></div>
|
||||
<div id="photosAndButtons" class="column is-3-widescreen is-3-tablet">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<figure id="photoProfil" class="image">
|
||||
<img src={photoProfil} alt="Anthony Dumas"/>
|
||||
</figure>
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<div class="media">
|
||||
<div class="media-content">
|
||||
<p id="buttonsUnderPhoto" class="buttons are-large ">
|
||||
<ButtonIcon
|
||||
icon="fab icon-github-alt"
|
||||
lien="https://github.com/AdamasFR"/>
|
||||
|
||||
<ButtonIcon
|
||||
icon="fab icon-linke-square"
|
||||
lien="https://www.linkedin.com/in/anthonyyvondumas/"/>
|
||||
|
||||
<ButtonIcon
|
||||
icon="fab icon-twit"
|
||||
lien="https://www.twitter.com/anthony__dumas"/>
|
||||
</p>
|
||||
<p id="boutonCV" class="buttons are-large">
|
||||
<a class="button is-fullwidth" rel="noreferrer noopener" target="_blank"
|
||||
href="https://files.adm.ink/anthony-dumas-cv.pdf" >
|
||||
<span class="icon">
|
||||
<i class="fab icon-file-pdf-o"></i>
|
||||
</span>
|
||||
<span>Mon CV</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column is-7" id="experiences">
|
||||
<span class="title">{experienceCardMessage.title}</span>
|
||||
{experienceCardMessage.experiences.map(function(experience, index){
|
||||
return <ExperienceCard
|
||||
data={experience}/>;
|
||||
})}
|
||||
<span class="title">Education</span>
|
||||
{experienceCardMessage.education.map(function(education, index){
|
||||
return <ExperienceCard
|
||||
data={education}/>;
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default injectIntl(MainCard)
|
4
src/components/MainCard/MainCard.scss
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
.component-main-card{
|
||||
|
||||
}
|
2
src/components/MainCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import mainCard from "./mainCard"
|
||||
export default mainCard;
|
76
src/components/MenuComponent/MenuComponent.js
Normal file
@ -0,0 +1,76 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import {FormattedMessage} from 'react-intl';
|
||||
import './MenuComponent.scss'
|
||||
|
||||
const URL_add_parameter = function(url, param, value){
|
||||
var hash = {};
|
||||
var parser = document.createElement('a');
|
||||
|
||||
parser.href = url;
|
||||
|
||||
var parameters = parser.search.split(/\?|&/);
|
||||
|
||||
for(var i=0; i < parameters.length; i++) {
|
||||
if(!parameters[i])
|
||||
continue;
|
||||
|
||||
var ary = parameters[i].split('=');
|
||||
hash[ary[0]] = ary[1];
|
||||
}
|
||||
|
||||
hash[param] = value;
|
||||
|
||||
var list = [];
|
||||
Object.keys(hash).forEach(function (key) {
|
||||
list.push(key + '=' + hash[key]);
|
||||
});
|
||||
|
||||
parser.search = '?' + list.join('&');
|
||||
return parser.href;
|
||||
}
|
||||
export default class MenuComponent extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
honhonhon() {
|
||||
window.location.href=URL_add_parameter(window.location.href, "lang", "fr");
|
||||
}
|
||||
|
||||
heygovna() {
|
||||
window.location.href=URL_add_parameter(window.location.href, "lang", "en");
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
return <section id="menu" class="hero is-primary dontPrint is-bold">
|
||||
<div class="hero-body">
|
||||
<div id="langButtons" class="is-hidden-touch">
|
||||
<div>
|
||||
<div class="buttons">
|
||||
<span class="button is-light" onClick={this.honhonhon}>
|
||||
En Français 🇫🇷
|
||||
</span>
|
||||
<span class="button is-light" onClick={this.heygovna}>
|
||||
In English 🇮🇪
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<h1 class="title">
|
||||
<FormattedMessage id="title"/>
|
||||
</h1>
|
||||
<h2 class="subtitle">
|
||||
<FormattedMessage id="subtitle"/>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
}
|
||||
// export default connect(
|
||||
// ({ MenuComponent }) => ({ ...MenuComponent }),
|
||||
// dispatch => bindActionCreators({ ...MenuComponentActions }, dispatch)
|
||||
// )( MenuComponent );
|
5
src/components/MenuComponent/MenuComponent.scss
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
#langButtons {
|
||||
font-weight: bold;
|
||||
float:right;
|
||||
}
|
2
src/components/MenuComponent/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import MenuComponent from "./MenuComponent"
|
||||
export default MenuComponent;
|
25
src/components/ProjectCard/ProjectCard.js
Normal file
@ -0,0 +1,25 @@
|
||||
import React, {Component} from 'react';
|
||||
import './ProjectCard.scss'
|
||||
|
||||
export default class ProjectCard extends Component {
|
||||
|
||||
render() {
|
||||
const data = this.props.data;
|
||||
return <div class="tile is-vertical is-4">
|
||||
<div class="tile">
|
||||
<div class="tile is-parent">
|
||||
<article class="tile is-child notification is-info">
|
||||
<p class="title">{data.title}</p>
|
||||
<a href={data.url} rel="noopener">
|
||||
<figure class="image is-4by3">
|
||||
<img src={data.image}
|
||||
alt={data.imgAlt}
|
||||
title={data.imgTitle} />
|
||||
</figure>
|
||||
</a>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
0
src/components/ProjectCard/ProjectCard.scss
Normal file
2
src/components/ProjectCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ProjectCard from "./ProjectCard"
|
||||
export default ProjectCard;
|
27
src/components/ProjectsCard/ProjectsCard.js
Normal file
@ -0,0 +1,27 @@
|
||||
import React, {Component} from '../../../node_modules/react';
|
||||
import { injectIntl } from 'react-intl';
|
||||
|
||||
import './ProjectsCard.scss'
|
||||
|
||||
import ProjectCard from '../ProjectCard/index';
|
||||
|
||||
class ProjectsCard extends Component {
|
||||
render() {
|
||||
const projectCardsMessage = this.props.intl.messages.projectCard;
|
||||
return <section id="projets" class="hero is-primary">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<div class="tile is-ancestor">
|
||||
{projectCardsMessage.projects.map(function(projects, index){
|
||||
return <ProjectCard
|
||||
data={projects}
|
||||
/>;
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(ProjectsCard)
|
0
src/components/ProjectsCard/ProjectsCard.scss
Normal file
2
src/components/ProjectsCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ProjectsCard from "./ProjectsCard"
|
||||
export default ProjectsCard;
|
9
src/components/Template/Template.js
Normal file
@ -0,0 +1,9 @@
|
||||
import React, {Component} from 'react';
|
||||
import './Template.scss'
|
||||
|
||||
export default class Template extends Component {
|
||||
|
||||
render() {
|
||||
return ;
|
||||
}
|
||||
}
|
0
src/components/Template/Template.scss
Normal file
2
src/components/Template/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ProjectsCard from "./ProjectsCard"
|
||||
export default ProjectsCard;
|
7
src/font/Read Me.txt
Normal file
@ -0,0 +1,7 @@
|
||||
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
|
||||
|
||||
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts
|
||||
|
||||
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
|
||||
|
||||
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.
|
BIN
src/font/fonts/icomoon.eot
Normal file
17
src/font/fonts/icomoon.svg
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icomoon" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="telegram" d="M679.429 204l84 396c7.429 34.857-12.571 48.571-35.429 40l-493.714-190.286c-33.714-13.143-33.143-32-5.714-40.571l126.286-39.429 293.143 184.571c13.714 9.143 26.286 4 16-5.143l-237.143-214.286-9.143-130.286c13.143 0 18.857 5.714 25.714 12.571l61.714 59.429 128-94.286c23.429-13.143 40-6.286 46.286 21.714zM1024 438.857c0-282.857-229.143-512-512-512s-512 229.143-512 512 229.143 512 512 512 512-229.143 512-512z" />
|
||||
<glyph unicode="" glyph-name="envelope-open" d="M1024 577.143v-558.857c0-50.286-41.143-91.429-91.429-91.429h-841.143c-50.286 0-91.429 41.143-91.429 91.429v558.857c0 5.143 2.286 10.286 6.286 13.714 60 52.571 60.571 58.857 358.857 276.571 36 26.286 99.429 83.429 146.857 83.429s111.429-57.714 146.857-83.429c298.286-217.714 298.857-224 358.857-276.571 4-3.429 6.286-8.571 6.286-13.714zM701.714 242.857c89.143 64.571 151.429 109.714 197.143 144 8 5.714 9.714 17.143 3.429 25.143l-21.714 29.714c-6.286 8-17.714 9.714-25.714 3.429-45.143-33.143-106.857-78.857-196-142.857-35.429-25.714-99.429-82.857-146.857-82.857s-111.429 57.143-146.857 82.857c-89.143 64.571-150.857 109.714-196 142.857-8 6.286-19.429 4.571-25.714-3.429l-21.714-29.714c-6.286-8-4.571-19.429 3.429-25.143 45.714-34.286 108-79.429 197.143-144 44.571-32 114.857-96.571 189.714-96.571 75.429 0 147.429 65.714 189.714 96.571z" />
|
||||
<glyph unicode="" glyph-name="linkedin-square" horiz-adv-x="878" d="M135.429 142.857h132v396.571h-132v-396.571zM276 661.714c-0.571 38.857-28.571 68.571-73.714 68.571s-74.857-29.714-74.857-68.571c0-37.714 28.571-68.571 73.143-68.571h0.571c46.286 0 74.857 30.857 74.857 68.571zM610.286 142.857h132v227.429c0 121.714-65.143 178.286-152 178.286-70.857 0-102.286-39.429-119.429-66.857h1.143v57.714h-132s1.714-37.143 0-396.571v0h132v221.714c0 11.429 0.571 23.429 4 32 9.714 23.429 31.429 48 68 48 47.429 0 66.286-36 66.286-89.714v-212zM877.714 713.143v-548.571c0-90.857-73.714-164.571-164.571-164.571h-548.571c-90.857 0-164.571 73.714-164.571 164.571v548.571c0 90.857 73.714 164.571 164.571 164.571h548.571c90.857 0 164.571-73.714 164.571-164.571z" />
|
||||
<glyph unicode="" glyph-name="github-alt" horiz-adv-x="951" d="M365.714 256c0-41.714-21.714-109.714-73.143-109.714s-73.143 68-73.143 109.714 21.714 109.714 73.143 109.714 73.143-68 73.143-109.714zM731.429 256c0-41.714-21.714-109.714-73.143-109.714s-73.143 68-73.143 109.714 21.714 109.714 73.143 109.714 73.143-68 73.143-109.714zM822.857 256c0 87.429-53.143 164.571-146.286 164.571-37.714 0-73.714-6.857-111.429-12-29.714-4.571-59.429-6.286-89.714-6.286s-60 1.714-89.714 6.286c-37.143 5.143-73.714 12-111.429 12-93.143 0-146.286-77.143-146.286-164.571 0-174.857 160-201.714 299.429-201.714h96c139.429 0 299.429 26.857 299.429 201.714zM950.857 356.571c0-63.429-6.286-130.857-34.857-189.143-75.429-152.571-282.857-167.429-431.429-167.429-150.857 0-370.857 13.143-449.143 167.429-29.143 57.714-35.429 125.714-35.429 189.143 0 83.429 22.857 162.286 77.714 226.286-10.286 31.429-15.429 64.571-15.429 97.143 0 42.857 9.714 85.714 29.143 124.571 90.286 0 148-39.429 216.571-93.143 57.714 13.714 117.143 20 176.571 20 53.714 0 108-5.714 160-18.286 68 53.143 125.714 91.429 214.857 91.429 19.429-38.857 29.143-81.714 29.143-124.571 0-32.571-5.143-65.143-15.429-96 54.857-64.571 77.714-144 77.714-227.429z" />
|
||||
<glyph unicode="" glyph-name="twitter" horiz-adv-x="951" d="M925.714 717.714c-25.143-36.571-56.571-69.143-92.571-95.429 0.571-8 0.571-16 0.571-24 0-244-185.714-525.143-525.143-525.143-104.571 0-201.714 30.286-283.429 82.857 14.857-1.714 29.143-2.286 44.571-2.286 86.286 0 165.714 29.143 229.143 78.857-81.143 1.714-149.143 54.857-172.571 128 11.429-1.714 22.857-2.857 34.857-2.857 16.571 0 33.143 2.286 48.571 6.286-84.571 17.143-148 91.429-148 181.143v2.286c24.571-13.714 53.143-22.286 83.429-23.429-49.714 33.143-82.286 89.714-82.286 153.714 0 34.286 9.143 65.714 25.143 93.143 90.857-112 227.429-185.143 380.571-193.143-2.857 13.714-4.571 28-4.571 42.286 0 101.714 82.286 184.571 184.571 184.571 53.143 0 101.143-22.286 134.857-58.286 41.714 8 81.714 23.429 117.143 44.571-13.714-42.857-42.857-78.857-81.143-101.714 37.143 4 73.143 14.286 106.286 28.571z" />
|
||||
<glyph unicode="" glyph-name="file-pdf-o" horiz-adv-x="878" d="M838.857 733.714c21.143-21.143 38.857-63.429 38.857-93.714v-658.286c0-30.286-24.571-54.857-54.857-54.857h-768c-30.286 0-54.857 24.571-54.857 54.857v914.286c0 30.286 24.571 54.857 54.857 54.857h512c30.286 0 72.571-17.714 93.714-38.857zM585.143 873.143v-214.857h214.857c-3.429 9.714-8.571 19.429-12.571 23.429l-178.857 178.857c-4 4-13.714 9.143-23.429 12.571zM804.571 0v585.143h-237.714c-30.286 0-54.857 24.571-54.857 54.857v237.714h-438.857v-877.714h731.429zM510.857 338.857c14.286-11.429 30.286-21.714 48-32 24 2.857 46.286 4 66.857 4 38.286 0 86.857-4.571 101.143-28 4-5.714 7.429-16 1.143-29.714-0.571-0.571-1.143-1.714-1.714-2.286v-0.571c-1.714-10.286-10.286-21.714-40.571-21.714-36.571 0-92 16.571-140 41.714-79.429-8.571-162.857-26.286-224-47.429-58.857-100.571-104-149.714-138.286-149.714-5.714 0-10.857 1.143-16 4l-13.714 6.857c-1.714 0.571-2.286 1.714-3.429 2.857-2.857 2.857-5.143 9.143-3.429 20.571 5.714 26.286 36.571 70.286 107.429 107.429 4.571 2.857 10.286 1.143 13.143-3.429 0.571-0.571 1.143-1.714 1.143-2.286 17.714 29.143 38.286 66.286 61.143 112.571 25.714 51.429 45.714 101.714 59.429 149.714-18.286 62.286-24 126.286-13.714 164 4 14.286 12.571 22.857 24 22.857h12.571c8.571 0 15.429-2.857 20-8.571 6.857-8 8.571-20.571 5.143-38.857-0.571-1.714-1.143-3.429-2.286-4.571 0.571-1.714 0.571-2.857 0.571-4.571v-17.143c-0.571-36-1.143-70.286-8-109.714 20-60 49.714-108.571 83.429-136zM181.714 104c17.143 8 41.714 32.571 78.286 90.286-42.857-33.143-69.714-70.857-78.286-90.286zM409.143 629.714c-5.714-16-5.714-43.429-1.143-75.429 1.714 9.143 2.857 17.714 4 25.143 1.143 9.714 2.857 17.714 4 24.571 0.571 1.714 1.143 2.857 2.286 4.571-0.571 0.571-0.571 1.714-1.143 2.857-0.571 10.286-4 16.571-7.429 20.571 0-1.143-0.571-1.714-0.571-2.286zM338.286 252c50.286 20 106.286 36 162.286 46.286-5.714 4.571-11.429 8.571-16.571 13.143-28 24.571-53.143 58.857-72.571 100.571-10.857-34.857-26.857-72-47.429-112.571-8.571-16-17.143-32-25.714-47.429zM707.429 261.143c-2.857 2.857-17.714 13.714-80 13.714 28-10.286 53.714-16 70.857-16 5.143 0 8 0 10.286 0.571 0 0.571-0.571 1.143-1.143 1.714z" />
|
||||
<glyph unicode="" glyph-name="print" horiz-adv-x="951" d="M219.429 73.143h512v146.286h-512v-146.286zM219.429 438.857h512v219.429h-91.429c-30.286 0-54.857 24.571-54.857 54.857v91.429h-365.714v-365.714zM877.714 402.286c0 20-16.571 36.571-36.571 36.571s-36.571-16.571-36.571-36.571 16.571-36.571 36.571-36.571 36.571 16.571 36.571 36.571zM950.857 402.286v-237.714c0-9.714-8.571-18.286-18.286-18.286h-128v-91.429c0-30.286-24.571-54.857-54.857-54.857h-548.571c-30.286 0-54.857 24.571-54.857 54.857v91.429h-128c-9.714 0-18.286 8.571-18.286 18.286v237.714c0 60 49.714 109.714 109.714 109.714h36.571v310.857c0 30.286 24.571 54.857 54.857 54.857h384c30.286 0 72-17.143 93.714-38.857l86.857-86.857c21.714-21.714 38.857-63.429 38.857-93.714v-146.286h36.571c60 0 109.714-49.714 109.714-109.714z" />
|
||||
</font></defs></svg>
|
After Width: | Height: | Size: 7.4 KiB |
BIN
src/font/fonts/icomoon.ttf
Normal file
BIN
src/font/fonts/icomoon.woff
Normal file
1
src/font/selection.json
Normal file
47
src/font/style.css
Normal file
@ -0,0 +1,47 @@
|
||||
@font-face {
|
||||
font-family: 'icomoon';
|
||||
src: url('fonts/icomoon.eot?uh9w96');
|
||||
src: url('fonts/icomoon.eot?uh9w96#iefix') format('embedded-opentype'),
|
||||
url('fonts/icomoon.ttf?uh9w96') format('truetype'),
|
||||
url('fonts/icomoon.woff?uh9w96') format('woff'),
|
||||
url('fonts/icomoon.svg?uh9w96#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
/* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'icomoon' !important;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
|
||||
/* Better Font Rendering =========== */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-file-pdf-o:before {
|
||||
content: "\e905";
|
||||
}
|
||||
.icon-twitter:before {
|
||||
content: "\e904";
|
||||
}
|
||||
.icon-telegram:before {
|
||||
content: "\e900";
|
||||
}
|
||||
.icon-envelope-open:before {
|
||||
content: "\e901";
|
||||
}
|
||||
.icon-linkedin-square:before {
|
||||
content: "\e902";
|
||||
}
|
||||
.icon-github-alt:before {
|
||||
content: "\e903";
|
||||
}
|
||||
.icon-print:before {
|
||||
content: "\e906";
|
||||
}
|
BIN
src/images/made-with-bulma.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
src/images/profile.jpg
Normal file
After Width: | Height: | Size: 516 KiB |
BIN
src/images/profile_opt.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
src/images/profile_opt.png
Normal file
After Width: | Height: | Size: 169 KiB |
1
src/index.css
Normal file
@ -0,0 +1 @@
|
||||
|
48
src/index.js
Normal file
@ -0,0 +1,48 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import { IntlProvider } from 'react-intl';
|
||||
|
||||
|
||||
import './index.css';
|
||||
import App from './App';
|
||||
import reportWebVitals from './reportWebVitals';
|
||||
import messages_fr from './messages/fr.json';
|
||||
import messages_en from './messages/en.json';
|
||||
|
||||
const messages = {
|
||||
'fr': messages_fr,
|
||||
'en': messages_en,
|
||||
};
|
||||
|
||||
const i18nConfig = {
|
||||
defaultLocale: 'fr',
|
||||
messages,
|
||||
};
|
||||
|
||||
const language = function() {
|
||||
const queryString = window.location.search;
|
||||
const urlParams = new URLSearchParams(queryString);
|
||||
let lang = urlParams.get("lang");
|
||||
if(messages[lang] === undefined){
|
||||
lang = navigator.language.split(/[-_]/)[0];
|
||||
}
|
||||
return lang;
|
||||
}
|
||||
|
||||
ReactDOM.render(
|
||||
<React.StrictMode>
|
||||
<IntlProvider
|
||||
locale={language}
|
||||
defaultLocale={i18nConfig.defaultLocale}
|
||||
messages={i18nConfig.messages[language()]}
|
||||
>
|
||||
<App />
|
||||
</IntlProvider>
|
||||
</React.StrictMode>,
|
||||
document.getElementById('root')
|
||||
);
|
||||
|
||||
// If you want to start measuring performance in your app, pass a function
|
||||
// to log results (for example: reportWebVitals(console.log))
|
||||
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
||||
reportWebVitals();
|
110
src/messages/en.json
Normal file
@ -0,0 +1,110 @@
|
||||
{
|
||||
"title":"Anthony Dumas",
|
||||
"subtitle":"Full Stack Developer @ Harvest",
|
||||
"experienceCard" : {
|
||||
"title" : "Experience",
|
||||
"experiences" : [
|
||||
{
|
||||
"occupation" : "Full Stack Developer",
|
||||
"logo" : "../../images/logos/harvest.fr.png",
|
||||
"url" : "https://www.harvest.fr",
|
||||
"duration" : "(since 2016)",
|
||||
"entreprise" : "Harvest",
|
||||
"location" : "Clermont-Ferrand",
|
||||
"description" : "Development of responsive banking simulators and APIs.",
|
||||
"tags" : [
|
||||
"Java EE",
|
||||
"Angular",
|
||||
"OpenAPI",
|
||||
"jQuery",
|
||||
"Spring"
|
||||
]
|
||||
},
|
||||
{
|
||||
"occupation" : "Internship as IOT Developer",
|
||||
"logo" : "../../images/logos/michelin.png",
|
||||
"url" : "https://www.michelin.fr",
|
||||
"duration" : "2015",
|
||||
"entreprise" : "Michelin",
|
||||
"location" : "Clermont-Ferrand",
|
||||
"description" : "End of year internship, study of the Internet of Things Market, making of a IOT prototype.",
|
||||
"tags" : [
|
||||
"MongoDB",
|
||||
"Node.js",
|
||||
"Word",
|
||||
"Powerpoint"
|
||||
]
|
||||
}
|
||||
],
|
||||
"education" : [
|
||||
{
|
||||
"occupation" : "Associate's Degree in Computer Science / Digital Imaging *",
|
||||
"logo" : "../../images/logos/www.iut-clermont.png",
|
||||
"url" : "https://www.iut-clermont.fr/",
|
||||
"duration" : "Class of 2015",
|
||||
"entreprise" : "University of Auvergne",
|
||||
"location" : "Le Puy-en-Velay",
|
||||
"description" : "Real Time 3D development, Web, 3D computer graphic, image retouch.",
|
||||
"commentaire" : "* Translation of DUT Informatique - Imagerie Numérique",
|
||||
"tags" : [
|
||||
"Unity",
|
||||
"3DSMax",
|
||||
"Photoshop",
|
||||
"C++",
|
||||
"Python",
|
||||
"Web Design"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"projectCard" : {
|
||||
"projects" : [
|
||||
{
|
||||
"title" : "Dev Portfolio",
|
||||
"url" : "http://dev.dumas.cc/",
|
||||
"image" : "../../images/portfolio/vinyls.jpg",
|
||||
"imgAlt" : "Hands running accross vinyls in a shop.",
|
||||
"imgTitle" : "Photo by Florencia Viadana on Unsplash"
|
||||
},
|
||||
{
|
||||
"title" : "IOT@Michelin",
|
||||
"url" : "https://prezi.com/m/o8ey8mmpnkvp/",
|
||||
"image" : "../../images/portfolio/computerNonSense.jpg",
|
||||
"imgAlt" : "An IOT prototype.",
|
||||
"imgTitle" : "An IOT prototype."
|
||||
},
|
||||
{
|
||||
"title" : "adm.photos",
|
||||
"url" : "http://adm.photos/",
|
||||
"image" : "../../images/portfolio/admPhotos.jpg",
|
||||
"imgAlt" : "A picture of a beautiful town.",
|
||||
"imgTitle" : "A picture of a beautiful town."
|
||||
}
|
||||
]
|
||||
},
|
||||
"contactCard" : {
|
||||
"title" : "Contact",
|
||||
"subtitle" : "You can contact me in many different ways :",
|
||||
"ways" : [
|
||||
{
|
||||
"title" : "Email",
|
||||
"url" : "mailto:anthony@dumas.cc",
|
||||
"icon" : "icon-envelope-open"
|
||||
},
|
||||
{
|
||||
"title" : "LinkedIn",
|
||||
"url" : "https://www.linkedin.com/in/anthonyyvondumas/",
|
||||
"icon" : "icon-linke-square"
|
||||
},
|
||||
{
|
||||
"title" : "Telegram",
|
||||
"url" : "https://t.me/adamas_FR",
|
||||
"icon" : "icon-teleg"
|
||||
}
|
||||
]
|
||||
},
|
||||
"footer" : {
|
||||
"legalNotice" : "Copyright © 2014 - 2021 Anthony Dumas. All rights reserved.",
|
||||
"darkThemeNotice" : "(This is the dark theme)"
|
||||
}
|
||||
}
|
109
src/messages/fr.json
Normal file
@ -0,0 +1,109 @@
|
||||
{
|
||||
"title":"Anthony Yvon Dumas",
|
||||
"subtitle":"Développeur Full Stack @ Harvest",
|
||||
"experienceCard" : {
|
||||
"title" : "Experience",
|
||||
"experiences" : [
|
||||
{
|
||||
"occupation" : "Développeur Full Stack",
|
||||
"logo" : "../../images/logos/harvest.fr.png",
|
||||
"url" : "https://www.harvest.fr",
|
||||
"duration" : "(depuis 2016)",
|
||||
"entreprise" : "Harvest",
|
||||
"location" : "Clermont-Ferrand",
|
||||
"description" : "Développement de simulateurs bancaires responsives.",
|
||||
"tags" : [
|
||||
"Java EE",
|
||||
"Angular",
|
||||
"OpenAPI",
|
||||
"jQuery",
|
||||
"Spring"
|
||||
]
|
||||
},
|
||||
{
|
||||
"occupation" : "Stagiaire Développeur Internet des Objets",
|
||||
"logo" : "../../images/logos/michelin.png",
|
||||
"url" : "https://www.michelin.fr",
|
||||
"duration" : "2015",
|
||||
"entreprise" : "Michelin",
|
||||
"location" : "Clermont-Ferrand",
|
||||
"description" : "Stage de fin d'étude DUT, etude du marché des objets connectés, création d'un prototype embarqué.",
|
||||
"tags" : [
|
||||
"MongoDB",
|
||||
"Node.js",
|
||||
"Word",
|
||||
"Powerpoint"
|
||||
]
|
||||
}
|
||||
],
|
||||
"education" : [
|
||||
{
|
||||
"occupation" : "DUT Informatique - Imagerie Numérique",
|
||||
"logo" : "../../images/logos/www.iut-clermont.png",
|
||||
"url" : "https://www.iut-clermont.fr/",
|
||||
"duration" : "Promotion 2015",
|
||||
"entreprise" : "Université d'Auvergne",
|
||||
"location" : "Le Puy-en-Velay",
|
||||
"description" : "Programmation 3D temps réel, Web, infographie 3D, retouche d'image.",
|
||||
"tags" : [
|
||||
"Unity",
|
||||
"3DSMax",
|
||||
"Photoshop",
|
||||
"C++",
|
||||
"Python",
|
||||
"Web Design"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"projectCard" : {
|
||||
"projects" : [
|
||||
{
|
||||
"title" : "Portfolio Developpeur",
|
||||
"url" : "http://dev.dumas.cc/",
|
||||
"image" : "../../images/portfolio/vinyls.jpg",
|
||||
"imgAlt" : "Des mains parcourant des vinyles sur un étalage",
|
||||
"imgTitle" : "Photo by Florencia Viadana on Unsplash"
|
||||
},
|
||||
{
|
||||
"title" : "IOT@Michelin",
|
||||
"url" : "https://prezi.com/m/o8ey8mmpnkvp/",
|
||||
"image" : "../../images/portfolio/computerNonSense.jpg",
|
||||
"imgAlt" : "Une photo d'un micro ordinateur dans ma main",
|
||||
"imgTitle" : "Une photo d'un micro ordinateur dans ma main"
|
||||
},
|
||||
{
|
||||
"title" : "adm.photos",
|
||||
"url" : "http://adm.photos/",
|
||||
"image" : "../../images/portfolio/admPhotos.jpg",
|
||||
"imgAlt" : "Une photo du village de mon enfance",
|
||||
"imgTitle" : "Une photo du village de mon enfance"
|
||||
}
|
||||
]
|
||||
},
|
||||
"contactCard" : {
|
||||
"title" : "Contact",
|
||||
"subtitle" : "Vous pouvez me contacter de nombreuses façons !",
|
||||
"ways" : [
|
||||
{
|
||||
"title" : "Courriel",
|
||||
"url" : "mailto:anthony@dumas.cc",
|
||||
"icon" : "icon-envelope-open"
|
||||
},
|
||||
{
|
||||
"title" : "LinkedIn",
|
||||
"url" : "https://www.linkedin.com/in/anthonyyvondumas/",
|
||||
"icon" : "icon-linke-square"
|
||||
},
|
||||
{
|
||||
"title" : "Telegram",
|
||||
"url" : "https://t.me/adamas_FR",
|
||||
"icon" : "icon-teleg"
|
||||
}
|
||||
]
|
||||
},
|
||||
"footer" : {
|
||||
"legalNotice" : "Copyright © 2014 - 2021 Anthony Dumas. Tous droits réservés.",
|
||||
"darkThemeNotice" : "(Ceci est le thème sombre)"
|
||||
}
|
||||
}
|
13
src/reportWebVitals.js
Normal file
@ -0,0 +1,13 @@
|
||||
const reportWebVitals = onPerfEntry => {
|
||||
if (onPerfEntry && onPerfEntry instanceof Function) {
|
||||
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
||||
getCLS(onPerfEntry);
|
||||
getFID(onPerfEntry);
|
||||
getFCP(onPerfEntry);
|
||||
getLCP(onPerfEntry);
|
||||
getTTFB(onPerfEntry);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default reportWebVitals;
|
5
src/setupTests.js
Normal file
@ -0,0 +1,5 @@
|
||||
// jest-dom adds custom jest matchers for asserting on DOM nodes.
|
||||
// allows you to do things like:
|
||||
// expect(element).toHaveTextContent(/react/i)
|
||||
// learn more: https://github.com/testing-library/jest-dom
|
||||
import '@testing-library/jest-dom';
|