1
0

Create cards for courses.

This commit is contained in:
PA4KEV 2024-02-18 00:25:56 +01:00
parent 1760ea1977
commit 3e5ee43e8d
9 changed files with 81 additions and 54 deletions

View File

@ -67,6 +67,9 @@ const languageStrings = {
japanese: 'Japanese',
radio_amateur: 'Radio amateur',
software: 'Software',
// Education
courses: 'Courses',
completed: 'Completed',
// Navigation
portal: 'Portal',
language: 'Language',
@ -84,6 +87,9 @@ const languageStrings = {
japanese: 'Japans',
radio_amateur: 'Radiozendamateur',
software: 'Software',
// Education
courses: 'Cursussen',
completed: 'Voltooid',
// Navigation
portal: 'Portaal',
language: 'Taal',
@ -95,7 +101,8 @@ const languageStrings = {
},
};
export function getString(language, key) {
export function getString(key) {
const language = getLanguage();
return languageStrings[language][key] || `{${key}}`;
}

View File

@ -12,7 +12,7 @@ const RadioMain = () => {
<h1 id="list-intro" className="text-primary">Radio amateur <Emoji symbol="📻" /></h1>
<MarkdownPage md={'Radio/' + language + '/main.md'} />
<h2>{getString(language, 'fielddays')}</h2>
<h2>{getString('fielddays')}</h2>
<FielddaysTable />
<h2>Links</h2>

View File

@ -1,7 +1,8 @@
import React from 'react';
import Emoji from '../../Content/Emoji';
import MarkdownPage from '../markdownPage';
import { getLanguage } from '../../App';
import { getLanguage, getString } from '../../App';
import educationData from './education.json'
const SoftwareMain = () => {
const language = getLanguage();
@ -10,6 +11,28 @@ const SoftwareMain = () => {
<article className="main-page">
<h1 id="list-intro" className="text-primary">Software <Emoji symbol="🖥️" /></h1>
<MarkdownPage md={'Software/' + language + '/main.md'} />
<hr />
<h2>{getString('courses')}</h2>
<div class="card-deck">
{educationData.courses.map((course, index) => (
<div className='card courses-card' key={index}>
<div class="card-body">
<h5 class="card-title">{course.name}</h5>
<p class="card-text">
<i className='small'>{course.sub}, {course.instructor}</i>
<br />
<a href={course.link}>{course.intstitution}</a> | <a href={course.certificate}>certificate</a>
<br />
{getString('completed')}: {course.achieveDate}
</p>
</div>
<div class="card-footer">
<small class="text-muted">{course.duration} hours</small>
</div>
</div>
))}
</div>
</article>
)
}

View File

@ -0,0 +1,34 @@
{
"courses": [
{
"name": "Docker Mastery",
"sub": "Kubernetes + Swarm from a Docker Captain",
"instructor": "Bret Fisher",
"achieveDate": "2021-04-28",
"duration": 21,
"intstitution": "Udemy",
"link": "https://www.udemy.com/course/docker-mastery/",
"certificate": "https://www.matsubara.nl/udemy-certs/UC-19ac22fe-70fa-47bd-804c-83f3aa4ac218.jpg"
},
{
"name": "Beginning C++ Programming",
"sub": "From Beginner to Beyond",
"instructor": "Dr. Frank Mitropoulos",
"achieveDate": "2020-05-07",
"duration": 46,
"intstitution": "Udemy",
"link": "https://www.udemy.com/course/beginning-c-plus-plus-programming/",
"certificate": "https://www.matsubara.nl/udemy-certs/UC-9f15ebd2-2a9a-489f-b8ca-7e8b175bc12f.pdf"
},
{
"name": "Learn Linux in 5 Days",
"sub": "and Level Up Your Career",
"instructor": "Jason Cannon",
"achieveDate": "2019-02-03",
"duration": 6.5,
"intstitution": "Udemy",
"link": "https://www.udemy.com/course/learn-linux-in-5-days/",
"certificate": "https://www.matsubara.nl/udemy-certs/UC-0BB6GYJ1.pdf"
}
]
}

View File

@ -49,24 +49,3 @@ Certification
[acquia.com](https://certification.acquia.com/user/18196)
2022
Courses
-------
###### Docker Mastery: Kubernetes + Swarm from a Docker Captain
[udemy.com](https://www.udemy.com/course/docker-mastery/)  |  [certificate]({`${process.env.PUBLIC_URL}/udemy-certs/UC-19ac22fe-70fa-47bd-804c-83f3aa4ac218.jpg`})
2021
###### Beginning C++ Programming From Beginner to Beyond
[udemy.com](https://www.udemy.com/course/beginning-c-plus-plus-programming/)  |  [certificate]({`${process.env.PUBLIC_URL}/udemy-certs/UC-9f15ebd2-2a9a-489f-b8ca-7e8b175bc12f.pdf`})
2020
###### Learn Linux in 5 Days and Level Up Your Career
[udemy.com](https://www.udemy.com/course/learn-linux-in-5-days/)  |  [certificate]({`${process.env.PUBLIC_URL}/udemy-certs/UC-0BB6GYJ1.pdf`})
2019

View File

@ -49,24 +49,3 @@ Certificering
[acquia.com](https://certification.acquia.com/user/18196)
2022
Cursussen
---------
###### Docker Mastery: Kubernetes + Swarm from a Docker Captain
[udemy.com](https://www.udemy.com/course/docker-mastery/)  |  [certificate]({`${process.env.PUBLIC_URL}/udemy-certs/UC-19ac22fe-70fa-47bd-804c-83f3aa4ac218.jpg`})
2021
###### Beginning C++ Programming From Beginner to Beyond
[udemy.com](https://www.udemy.com/course/beginning-c-plus-plus-programming/)  |  [certificate]({`${process.env.PUBLIC_URL}/udemy-certs/UC-9f15ebd2-2a9a-489f-b8ca-7e8b175bc12f.pdf`})
2020
###### Learn Linux in 5 Days and Level Up Your Career
[udemy.com](https://www.udemy.com/course/learn-linux-in-5-days/)  |  [certificate]({`${process.env.PUBLIC_URL}/udemy-certs/UC-0BB6GYJ1.pdf`})
2019

View File

@ -1,19 +1,18 @@
import React from 'react';
import { useTheme } from '../ThemeContext';
import './Footer.css';
import { getLanguage, getString } from '../App';
import { getString } from '../App';
const Footer = () => {
const { theme } = useTheme();
const language = getLanguage();
return (
<footer className={`bg-${theme} text-center text-lg-start text-${theme}`}>
<div className="container-fluid">
<span className="small">{getString(language, 'footer_madewith')}: <a className={`link-${theme}`} href="https://reactjs.org/" target="_blank" rel="noopener noreferrer">React</a>, <a className={`link-${theme}`} href="https://fsharp.org/" target="_blank" rel="noopener noreferrer">F#</a>, <a className={`link-${theme}`} href="https://github.com/giraffe-fsharp/Giraffe" target="_blank" rel="noopener noreferrer">Giraffe</a>, <a className={`link-${theme}`} href="https://getbootstrap.com/" target="_blank" rel="noopener noreferrer">Bootstrap</a>, <a className={`link-${theme}`} href="https://www.nginx.com/" target="_blank" rel="noopener noreferrer">Nginx</a> {getString(language, 'and')} <a className={`link-${theme}`} href="https://www.docker.com/" target="_blank" rel="noopener noreferrer">Docker</a> {getString(language, 'on')} <a className={`link-${theme}`} href="https://www.digitalocean.com/" target="_blank" rel="noopener noreferrer">DigitalOcean</a> cloud droplets.</span>
<span className="small">{getString('footer_madewith')}: <a className={`link-${theme}`} href="https://reactjs.org/" target="_blank" rel="noopener noreferrer">React</a>, <a className={`link-${theme}`} href="https://fsharp.org/" target="_blank" rel="noopener noreferrer">F#</a>, <a className={`link-${theme}`} href="https://github.com/giraffe-fsharp/Giraffe" target="_blank" rel="noopener noreferrer">Giraffe</a>, <a className={`link-${theme}`} href="https://getbootstrap.com/" target="_blank" rel="noopener noreferrer">Bootstrap</a>, <a className={`link-${theme}`} href="https://www.nginx.com/" target="_blank" rel="noopener noreferrer">Nginx</a> {getString('and')} <a className={`link-${theme}`} href="https://www.docker.com/" target="_blank" rel="noopener noreferrer">Docker</a> {getString('on')} <a className={`link-${theme}`} href="https://www.digitalocean.com/" target="_blank" rel="noopener noreferrer">DigitalOcean</a> cloud droplets.</span>
<br />
<span className="small">{getString(language, 'footer_contentparsed')}: <a className={`link-${theme}`} href="https://github.com/quantizor/markdown-to-jsx" target="_blank" rel="noopener noreferrer">markdown-to-jsx</a></span>
<span className="small">{getString('footer_contentparsed')}: <a className={`link-${theme}`} href="https://github.com/quantizor/markdown-to-jsx" target="_blank" rel="noopener noreferrer">markdown-to-jsx</a></span>
<br /><br />
</div>
</footer>

View File

@ -30,20 +30,20 @@ const Navigation = ({ language }) => {
<ul className="navbar-nav me-auto mb-2 mb-lg-0">
<li className="nav-item dropdown">
<a className="nav-link dropdown-toggle active" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{getString(language, 'portal')}
{getString('portal')}
</a>
<ul className="dropdown-menu">
<li><Link reloadDocument to={currentLanguage + '/japan'} className="dropdown-item">{getString(language, 'japanese')}</Link></li>
<li><Link reloadDocument to={currentLanguage + '/japan'} className="dropdown-item">{getString('japanese')}</Link></li>
<li><hr className="dropdown-divider" /></li>
<li><Link reloadDocument to={currentLanguage + '/radio'} className="dropdown-item">{getString(language, 'radio_amateur')}</Link></li>
<li><Link reloadDocument to={currentLanguage + '/radio'} className="dropdown-item">{getString('radio_amateur')}</Link></li>
<li><hr className="dropdown-divider" /></li>
<li><Link reloadDocument to={currentLanguage + '/software'} className="dropdown-item">{getString(language, 'software')}</Link></li>
<li><Link reloadDocument to={currentLanguage + '/software'} className="dropdown-item">{getString('software')}</Link></li>
</ul>
</li>
<li className="nav-item dropdown">
<a className="nav-link dropdown-toggle active" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{getString(language, 'language')}
{getString('language')}
</a>
<ul className="dropdown-menu">
<li><Link reloadDocument to={generatePath("en")} className="dropdown-item">English</Link></li>

View File

@ -98,6 +98,12 @@ body.light {
}
}
.courses-card {
max-width: 18rem;
margin: 5px;
display: inline-block;
}
// Core variables and mixins
// @import "variables";
// @import "mixins";