Merge 2021.0

This commit is contained in:
Anthony Dumas 2021-01-03 01:58:54 +01:00
commit 4b974fd05a
77 changed files with 39742 additions and 34021 deletions

1
.eslintcache Normal file

File diff suppressed because one or more lines are too long

43
.gitignore vendored
View File

@ -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
View 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": ""
}

View File

@ -1,12 +1,70 @@
# Portfolio Anthony Dumas
[![Build Status](http://jenkins.adm.ink/buildStatus/icon?job=Projets+Personnel%2Fanthony-dumas.fr)](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 cant go back!**
If you arent 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 youre on your own.
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt 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

File diff suppressed because it is too large Load Diff

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
public/images/mail.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

46
public/index.html Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
public/logo512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

25
public/manifest.json Normal file
View 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
View File

@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

0
src/App.css Normal file
View File

22
src/App.js Normal file
View 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
View 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
View 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
View 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
View 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
View File

@ -0,0 +1,3 @@
@import "main.scss";
@import "icon.scss";
@import "dark-theme.scss";

118
src/_sass/main.scss Normal file
View 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";

View 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>;
}
}

View File

@ -0,0 +1,4 @@
.component-button-icon{
}

View File

@ -0,0 +1,2 @@
import ButtonIcon from "./ButtonIcon"
export default ButtonIcon;

View 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 );

View File

@ -0,0 +1,4 @@
.component-contact-button{
}

View File

@ -0,0 +1,2 @@
import ContactButton from "./ContactButton"
export default ContactButton;

View 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)

View File

@ -0,0 +1,4 @@
.component-contact-card{
}

View File

@ -0,0 +1,2 @@
import ContactCard from "./ContactCard"
export default ContactCard;

View 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 );

View File

@ -0,0 +1,4 @@
.comment{
font-style: italic;
margin-top: -25px;
}

View File

@ -0,0 +1,2 @@
import ExperienceCard from "./ExperienceCard"
export default ExperienceCard;

View 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)

View File

@ -0,0 +1,3 @@
#footer-credits{
margin-top: 1rem;
}

View File

@ -0,0 +1,2 @@
import FooterCard from "./FooterCard"
export default FooterCard;

View 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)

View File

@ -0,0 +1,4 @@
.component-main-card{
}

View File

@ -0,0 +1,2 @@
import mainCard from "./mainCard"
export default mainCard;

View 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 );

View File

@ -0,0 +1,5 @@
#langButtons {
font-weight: bold;
float:right;
}

View File

@ -0,0 +1,2 @@
import MenuComponent from "./MenuComponent"
export default MenuComponent;

View 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>;
}
}

View File

@ -0,0 +1,2 @@
import ProjectCard from "./ProjectCard"
export default ProjectCard;

View 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)

View File

@ -0,0 +1,2 @@
import ProjectsCard from "./ProjectsCard"
export default ProjectsCard;

View File

@ -0,0 +1,9 @@
import React, {Component} from 'react';
import './Template.scss'
export default class Template extends Component {
render() {
return ;
}
}

View File

View File

@ -0,0 +1,2 @@
import ProjectsCard from "./ProjectsCard"
export default ProjectsCard;

7
src/font/Read Me.txt Normal file
View 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

Binary file not shown.

View 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="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" 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="&#xe901;" 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="&#xe902;" 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="&#xe903;" 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="&#xe904;" 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="&#xe905;" 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="&#xe906;" 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

Binary file not shown.

BIN
src/font/fonts/icomoon.woff Normal file

Binary file not shown.

1
src/font/selection.json Normal file

File diff suppressed because one or more lines are too long

47
src/font/style.css Normal file
View 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";
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
src/images/profile.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

BIN
src/images/profile_opt.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
src/images/profile_opt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

1
src/index.css Normal file
View File

@ -0,0 +1 @@

48
src/index.js Normal file
View 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
View 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
View 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
View 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
View 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';

14677
yarn.lock

File diff suppressed because it is too large Load Diff