Compare commits
97 Commits
b17729e9c0
...
main
Author | SHA1 | Date | |
---|---|---|---|
9ed9135208 | |||
fafd7139e4 | |||
0cab633f03 | |||
ef84eec124 | |||
bbeaf46b27 | |||
1462461d70 | |||
598193d364 | |||
0a3332c9fe | |||
9f3e554624 | |||
3c5ce5c07a | |||
3d1943791e | |||
d73e027641 | |||
3c36906d86 | |||
8a18029a0b | |||
3132b4f325 | |||
cd7cfbbb7c | |||
cd5330b92c | |||
ed4b9a9a56 | |||
11c0688f6c | |||
f9a9dfc653 | |||
8c3b3e501e | |||
55467968bd | |||
5a92fd84ce | |||
161c033491 | |||
662cda7ac4 | |||
c7fb1a68cd | |||
4229a08c50 | |||
4ddf0e4c6a | |||
b7f3ce6899 | |||
2c13c79d10 | |||
e2950995fb | |||
ad837910a3 | |||
59bdd9b784 | |||
516a944d22 | |||
ab23d9e344 | |||
b47c9ad995 | |||
a4ba8c0c86 | |||
ee3d06d939 | |||
5f772b1f78 | |||
0f1535f0ec | |||
d777587b29 | |||
58626fec3a | |||
52786bd8d2 | |||
8000504c04 | |||
63e00968e0 | |||
3144aca6e3 | |||
410d15d46a | |||
d2ef0ef232 | |||
66c7236788 | |||
3e4d63872a | |||
447972b0ad | |||
f12d1c8292 | |||
e2fa5fa477 | |||
fd029cefaf | |||
82fa1a7629 | |||
5c7f7268e8 | |||
0bf5a68bb8 | |||
1946d32103 | |||
b0e5ad5e75 | |||
65e99b27ea | |||
6df4f40afd | |||
e530ab8a41 | |||
de5023604f | |||
f398788adb | |||
891e674470 | |||
585380ce88 | |||
d6446f5160 | |||
5bbf0068e7 | |||
dc02c06bc8 | |||
69c5167856 | |||
a3919b42a9 | |||
a959034e4e | |||
35f76f4dd7 | |||
a690d47565 | |||
298d78df16 | |||
211ed6497f | |||
c5e5a21ac7 | |||
e4b90621b3 | |||
db4f5b8b51 | |||
2aaa70cc5e | |||
f3178c4f26 | |||
2c0997058e | |||
2abd73e73c | |||
c0f85d0e98 | |||
f7d7f42254 | |||
a53af1d3d6 | |||
3564a73c69 | |||
bbf67c1221 | |||
891fe84af8 | |||
6e6eddee3a | |||
16ce8513f7 | |||
096fd9619d | |||
e0b907820d | |||
a66dd82bbc | |||
1b62bd45b1 | |||
c15c00b9ab | |||
f1a0f407bd |
1678
assets/css/style.css
BIN
assets/img/arch.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
assets/img/docker.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
assets/img/footer-bg.jpg
Executable file → Normal file
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 154 KiB |
BIN
assets/img/hero-bg-2k.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 509 KiB |
BIN
assets/img/htmlcss.png
Normal file
After Width: | Height: | Size: 156 KiB |
BIN
assets/img/me2-low.jpg
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
assets/img/me2.jpg
Normal file
After Width: | Height: | Size: 802 KiB |
BIN
assets/img/neovim.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
assets/img/portfolio/aoc.jpeg
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
assets/img/portfolio/esim.jpg
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
assets/img/portfolio/flyingballs.mp4
Normal file
BIN
assets/img/portfolio/maze-solver.mp4
Normal file
BIN
assets/img/portfolio/maze-solver.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
assets/img/portfolio/paper-mosaik.mp4
Normal file
BIN
assets/img/portfolio/paper-mosaik.png
Normal file
After Width: | Height: | Size: 425 KiB |
Before Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 189 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 180 KiB |
Before Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 160 KiB |
BIN
assets/img/portfolio/stickfosh-og.mp4
Normal file
BIN
assets/img/portfolio/stickfosh.mp4
Normal file
BIN
assets/img/testimonials-bg-2.jpg
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
assets/img/testimonials-bg.jpg
Executable file → Normal file
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 81 KiB |
BIN
assets/img/testimonials/hauswirth.jpg
Normal file
After Width: | Height: | Size: 200 KiB |
BIN
assets/img/testimonials/missing.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
assets/img/testimonials/piotr.jpg
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
assets/img/tsjs.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
@ -5,266 +5,351 @@
|
||||
* Author: BootstrapMade.com
|
||||
* License: https://bootstrapmade.com/license/
|
||||
*/
|
||||
(function() {
|
||||
"use strict";
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Easy selector helper function
|
||||
*/
|
||||
const select = (el, all = false) => {
|
||||
el = el.trim();
|
||||
if (all) {
|
||||
return [...document.querySelectorAll(el)];
|
||||
} else {
|
||||
return document.querySelector(el);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Easy event listener function
|
||||
*/
|
||||
const on = (type, el, listener, all = false) => {
|
||||
let selectEl = select(el, all);
|
||||
if (selectEl) {
|
||||
if (all) {
|
||||
selectEl.forEach((e) => e.addEventListener(type, listener));
|
||||
} else {
|
||||
selectEl.addEventListener(type, listener);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Easy on scroll event listener
|
||||
*/
|
||||
const onscroll = (el, listener) => {
|
||||
el.addEventListener("scroll", listener);
|
||||
};
|
||||
|
||||
/**
|
||||
* Navbar links active state on scroll
|
||||
*/
|
||||
let navbarlinks = select("#navbar .scrollto", true);
|
||||
const navbarlinksActive = () => {
|
||||
let position = window.scrollY + 200;
|
||||
navbarlinks.forEach((navbarlink) => {
|
||||
if (!navbarlink.hash) return;
|
||||
let section = select(navbarlink.hash);
|
||||
if (!section) return;
|
||||
if (
|
||||
position >= section.offsetTop &&
|
||||
position <= section.offsetTop + section.offsetHeight
|
||||
) {
|
||||
navbarlink.classList.add("active");
|
||||
} else {
|
||||
navbarlink.classList.remove("active");
|
||||
}
|
||||
});
|
||||
};
|
||||
window.addEventListener("load", navbarlinksActive);
|
||||
onscroll(document, navbarlinksActive);
|
||||
|
||||
/**
|
||||
* Scrolls to an element with header offset
|
||||
*/
|
||||
const scrollto = (el) => {
|
||||
let header = select("#header");
|
||||
let offset = header.offsetHeight;
|
||||
|
||||
if (!header.classList.contains("header-scrolled")) {
|
||||
offset -= 20;
|
||||
}
|
||||
|
||||
let elementPos = select(el).offsetTop;
|
||||
window.scrollTo({
|
||||
top: elementPos - offset,
|
||||
behavior: "smooth",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Toggle .header-scrolled class to #header when page is scrolled
|
||||
*/
|
||||
let selectHeader = select("#header");
|
||||
if (selectHeader) {
|
||||
const headerScrolled = () => {
|
||||
if (window.scrollY > 100) {
|
||||
selectHeader.classList.add("header-scrolled");
|
||||
} else {
|
||||
selectHeader.classList.remove("header-scrolled");
|
||||
}
|
||||
};
|
||||
window.addEventListener("load", headerScrolled);
|
||||
onscroll(document, headerScrolled);
|
||||
/**
|
||||
* Easy selector helper function
|
||||
*/
|
||||
const select = (el, all = false) => {
|
||||
el = el.trim();
|
||||
if (all) {
|
||||
return [...document.querySelectorAll(el)];
|
||||
} else {
|
||||
return document.querySelector(el);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Back to top button
|
||||
*/
|
||||
let backtotop = select(".back-to-top");
|
||||
if (backtotop) {
|
||||
const toggleBacktotop = () => {
|
||||
if (window.scrollY > 100) {
|
||||
backtotop.classList.add("active");
|
||||
} else {
|
||||
backtotop.classList.remove("active");
|
||||
}
|
||||
};
|
||||
window.addEventListener("load", toggleBacktotop);
|
||||
onscroll(document, toggleBacktotop);
|
||||
/**
|
||||
* Easy event listener function
|
||||
*/
|
||||
const on = (type, el, listener, all = false) => {
|
||||
let selectEl = select(el, all);
|
||||
if (selectEl) {
|
||||
if (all) {
|
||||
selectEl.forEach((e) => e.addEventListener(type, listener));
|
||||
} else {
|
||||
selectEl.addEventListener(type, listener);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Mobile nav toggle
|
||||
*/
|
||||
on("click", ".mobile-nav-toggle", function(e) {
|
||||
select("#navbar").classList.toggle("navbar-mobile");
|
||||
this.classList.toggle("bi-list");
|
||||
this.classList.toggle("bi-x");
|
||||
/**
|
||||
* Easy on scroll event listener
|
||||
*/
|
||||
const onscroll = (el, listener) => {
|
||||
el.addEventListener("scroll", listener);
|
||||
};
|
||||
|
||||
/**
|
||||
* Navbar links active state on scroll
|
||||
*/
|
||||
let navbarlinks = select("#navbar .scrollto", true);
|
||||
const navbarlinksActive = () => {
|
||||
let position = window.scrollY + 200;
|
||||
navbarlinks.forEach((navbarlink) => {
|
||||
if (!navbarlink.hash) return;
|
||||
let section = select(navbarlink.hash);
|
||||
if (!section) return;
|
||||
if (
|
||||
position >= section.offsetTop &&
|
||||
position <= section.offsetTop + section.offsetHeight
|
||||
) {
|
||||
navbarlink.classList.add("active");
|
||||
} else {
|
||||
navbarlink.classList.remove("active");
|
||||
}
|
||||
});
|
||||
};
|
||||
window.addEventListener("load", navbarlinksActive);
|
||||
onscroll(document, navbarlinksActive);
|
||||
|
||||
/**
|
||||
* Scrolls to an element with header offset
|
||||
*/
|
||||
const scrollto = (el) => {
|
||||
let header = select("#header");
|
||||
let offset = header.offsetHeight;
|
||||
|
||||
if (!header.classList.contains("header-scrolled")) {
|
||||
offset -= 20;
|
||||
}
|
||||
|
||||
let elementPos = select(el).offsetTop;
|
||||
window.scrollTo({
|
||||
top: elementPos - offset,
|
||||
behavior: "smooth",
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Toggle .header-scrolled class to #header when page is scrolled
|
||||
*/
|
||||
let selectHeader = select("#header");
|
||||
if (selectHeader) {
|
||||
const headerScrolled = () => {
|
||||
if (window.scrollY > 100) {
|
||||
selectHeader.classList.add("header-scrolled");
|
||||
} else {
|
||||
selectHeader.classList.remove("header-scrolled");
|
||||
}
|
||||
};
|
||||
window.addEventListener("load", headerScrolled);
|
||||
onscroll(document, headerScrolled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Back to top button
|
||||
*/
|
||||
let backtotop = select(".back-to-top");
|
||||
if (backtotop) {
|
||||
const toggleBacktotop = () => {
|
||||
if (window.scrollY > 100) {
|
||||
backtotop.classList.add("active");
|
||||
} else {
|
||||
backtotop.classList.remove("active");
|
||||
}
|
||||
};
|
||||
window.addEventListener("load", toggleBacktotop);
|
||||
onscroll(document, toggleBacktotop);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mobile nav toggle
|
||||
*/
|
||||
on("click", ".mobile-nav-toggle", function (e) {
|
||||
select("#navbar").classList.toggle("navbar-mobile");
|
||||
this.classList.toggle("bi-list");
|
||||
this.classList.toggle("bi-x");
|
||||
});
|
||||
|
||||
/**
|
||||
* Mobile nav dropdowns activate
|
||||
*/
|
||||
on(
|
||||
"click",
|
||||
".navbar .dropdown > a",
|
||||
function (e) {
|
||||
if (select("#navbar").classList.contains("navbar-mobile")) {
|
||||
e.preventDefault();
|
||||
this.nextElementSibling.classList.toggle("dropdown-active");
|
||||
}
|
||||
},
|
||||
true
|
||||
);
|
||||
|
||||
/**
|
||||
* Scrool with ofset on links with a class name .scrollto
|
||||
*/
|
||||
on(
|
||||
"click",
|
||||
".scrollto",
|
||||
function (e) {
|
||||
if (select(this.hash)) {
|
||||
e.preventDefault();
|
||||
|
||||
let navbar = select("#navbar");
|
||||
if (navbar.classList.contains("navbar-mobile")) {
|
||||
navbar.classList.remove("navbar-mobile");
|
||||
let navbarToggle = select(".mobile-nav-toggle");
|
||||
navbarToggle.classList.toggle("bi-list");
|
||||
navbarToggle.classList.toggle("bi-x");
|
||||
}
|
||||
scrollto(this.hash);
|
||||
}
|
||||
},
|
||||
true
|
||||
);
|
||||
|
||||
on("click", "#resume-toggle", e => {
|
||||
console.log("sup")
|
||||
const sec = select("#resume-section");
|
||||
const btn = e.target;
|
||||
sec.classList.toggle("expanded");
|
||||
select(".resume-fade").classList.toggle("expanded");
|
||||
if (sec.classList.contains("expanded"))
|
||||
btn.innerHTML = 'Hide <i class="bi bi-chevron-up"></i>';
|
||||
else
|
||||
btn.innerHTML = 'Expand <i class="bi bi-chevron-down"></i>';
|
||||
AOS.refresh();
|
||||
})
|
||||
|
||||
/**
|
||||
* Scroll with ofset on page load with hash links in the url
|
||||
*/
|
||||
window.addEventListener("load", () => {
|
||||
if (window.location.hash) {
|
||||
if (select(window.location.hash)) {
|
||||
scrollto(window.location.hash);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Skills animation
|
||||
*/
|
||||
let skillsContent = select(".progress", true);
|
||||
if (skillsContent) {
|
||||
skillsContent.forEach((skill) => {
|
||||
new Waypoint({
|
||||
element: skill,
|
||||
offset: "100%",
|
||||
handler: function (direction) {
|
||||
let progress = skill.querySelectorAll(".progress-bar");
|
||||
progress.forEach((el) => {
|
||||
let percent =
|
||||
100 *
|
||||
(+el.getAttribute("aria-valuenow") /
|
||||
(+el.getAttribute("aria-valuemax") -
|
||||
+el.getAttribute("aria-valuemin")));
|
||||
el.style.width = percent + "%";
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Testimonials slider
|
||||
*/
|
||||
new Swiper(".testimonials-slider", {
|
||||
speed: 600,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 10000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
slidesPerView: "auto",
|
||||
pagination: {
|
||||
el: ".swiper-pagination",
|
||||
type: "bullets",
|
||||
clickable: true,
|
||||
},
|
||||
});
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
/**
|
||||
* Mobile nav dropdowns activate
|
||||
* Skills isotope and filter
|
||||
*/
|
||||
on(
|
||||
let skillsContainer = select(".skills-container");
|
||||
if (skillsContainer) {
|
||||
let skillsIsotope = new Isotope(skillsContainer, {
|
||||
itemSelector: ".skill-item",
|
||||
});
|
||||
|
||||
let skillsFilters = select("#skills-filters li", true);
|
||||
|
||||
on(
|
||||
"click",
|
||||
".navbar .dropdown > a",
|
||||
function(e) {
|
||||
if (select("#navbar").classList.contains("navbar-mobile")) {
|
||||
e.preventDefault();
|
||||
this.nextElementSibling.classList.toggle("dropdown-active");
|
||||
}
|
||||
"#skills-filters li",
|
||||
function (e) {
|
||||
e.preventDefault();
|
||||
skillsFilters.forEach(function (el) {
|
||||
el.classList.remove("filter-active");
|
||||
});
|
||||
this.classList.add("filter-active");
|
||||
|
||||
skillsIsotope.arrange({
|
||||
filter: this.getAttribute("data-filter"),
|
||||
});
|
||||
},
|
||||
true,
|
||||
);
|
||||
|
||||
/**
|
||||
* Scrool with ofset on links with a class name .scrollto
|
||||
*/
|
||||
on(
|
||||
"click",
|
||||
".scrollto",
|
||||
function(e) {
|
||||
if (select(this.hash)) {
|
||||
e.preventDefault();
|
||||
|
||||
let navbar = select("#navbar");
|
||||
if (navbar.classList.contains("navbar-mobile")) {
|
||||
navbar.classList.remove("navbar-mobile");
|
||||
let navbarToggle = select(".mobile-nav-toggle");
|
||||
navbarToggle.classList.toggle("bi-list");
|
||||
navbarToggle.classList.toggle("bi-x");
|
||||
}
|
||||
scrollto(this.hash);
|
||||
}
|
||||
},
|
||||
true,
|
||||
);
|
||||
|
||||
/**
|
||||
* Scroll with ofset on page load with hash links in the url
|
||||
*/
|
||||
window.addEventListener("load", () => {
|
||||
if (window.location.hash) {
|
||||
if (select(window.location.hash)) {
|
||||
scrollto(window.location.hash);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Skills animation
|
||||
*/
|
||||
let skilsContent = select(".skills-content");
|
||||
if (skilsContent) {
|
||||
new Waypoint({
|
||||
element: skilsContent,
|
||||
offset: "80%",
|
||||
handler: function(direction) {
|
||||
let progress = select(".progress .progress-bar", true);
|
||||
progress.forEach((el) => {
|
||||
el.style.width = el.getAttribute("aria-valuenow") + "%";
|
||||
});
|
||||
},
|
||||
});
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Testimonials slider
|
||||
*/
|
||||
new Swiper(".testimonials-slider", {
|
||||
speed: 600,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
slidesPerView: "auto",
|
||||
pagination: {
|
||||
el: ".swiper-pagination",
|
||||
type: "bullets",
|
||||
clickable: true,
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Porfolio isotope and filter
|
||||
*/
|
||||
window.addEventListener("load", () => {
|
||||
let portfolioContainer = select(".portfolio-container");
|
||||
if (portfolioContainer) {
|
||||
let portfolioIsotope = new Isotope(portfolioContainer, {
|
||||
itemSelector: ".portfolio-item",
|
||||
});
|
||||
let portfolioContainer = select(".portfolio-container");
|
||||
if (portfolioContainer) {
|
||||
let portfolioIsotope = new Isotope(portfolioContainer, {
|
||||
itemSelector: ".portfolio-item",
|
||||
});
|
||||
|
||||
let portfolioFilters = select("#portfolio-flters li", true);
|
||||
let portfolioFilters = select("#portfolio-flters li", true);
|
||||
|
||||
on(
|
||||
"click",
|
||||
"#portfolio-flters li",
|
||||
function(e) {
|
||||
e.preventDefault();
|
||||
portfolioFilters.forEach(function(el) {
|
||||
el.classList.remove("filter-active");
|
||||
});
|
||||
this.classList.add("filter-active");
|
||||
on(
|
||||
"click",
|
||||
"#portfolio-flters li",
|
||||
function (e) {
|
||||
e.preventDefault();
|
||||
portfolioFilters.forEach(function (el) {
|
||||
el.classList.remove("filter-active");
|
||||
});
|
||||
this.classList.add("filter-active");
|
||||
|
||||
portfolioIsotope.arrange({
|
||||
filter: this.getAttribute("data-filter"),
|
||||
});
|
||||
},
|
||||
true,
|
||||
);
|
||||
}
|
||||
AOS.init();
|
||||
});
|
||||
|
||||
/**
|
||||
* Initiate portfolio lightbox
|
||||
*/
|
||||
const portfolioLightbox = GLightbox({
|
||||
selector: ".portfolio-lightbox",
|
||||
});
|
||||
|
||||
/**
|
||||
* Portfolio details slider
|
||||
*/
|
||||
new Swiper(".portfolio-details-slider", {
|
||||
speed: 400,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
portfolioIsotope.arrange({
|
||||
filter: this.getAttribute("data-filter"),
|
||||
});
|
||||
},
|
||||
pagination: {
|
||||
el: ".swiper-pagination",
|
||||
type: "bullets",
|
||||
clickable: true,
|
||||
},
|
||||
});
|
||||
true
|
||||
);
|
||||
}
|
||||
// let horizontal_aoss = document.querySelectorAll("[data-aos~='left'], [data-aos~='right']")
|
||||
if (window.matchMedia("(max-width: 768px)").matches) {
|
||||
let horizontal_aoss = document.querySelectorAll(
|
||||
`[data-aos$="left"], [data-aos$="right"]`
|
||||
);
|
||||
horizontal_aoss.forEach((el) => el.setAttribute("data-aos", "fade-up"));
|
||||
}
|
||||
AOS.init();
|
||||
});
|
||||
|
||||
/**
|
||||
* Initiate Pure Counter
|
||||
*/
|
||||
new PureCounter();
|
||||
})();
|
||||
/**
|
||||
* Initiate portfolio lightbox
|
||||
*/
|
||||
const portfolioLightbox = GLightbox({
|
||||
selector: ".portfolio-lightbox",
|
||||
});
|
||||
|
||||
/**
|
||||
* Portfolio details slider
|
||||
*/
|
||||
new Swiper(".portfolio-details-slider", {
|
||||
speed: 400,
|
||||
loop: true,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
pagination: {
|
||||
el: ".swiper-pagination",
|
||||
type: "bullets",
|
||||
clickable: true,
|
||||
},
|
||||
});
|
||||
if (localStorage.getItem("theme") == "light") {
|
||||
toggleDarkMode();
|
||||
}
|
||||
|
||||
// Set age correctly (cuz sbatti farlo ogni
|
||||
// anno, toi meme tu sais)
|
||||
let age_span = document.querySelector("#age");
|
||||
age_span.textContent = calculateAge("1999-10-15");
|
||||
})();
|
||||
|
||||
function toggleDarkMode() {
|
||||
let dark_indicator = document.querySelector("#navbar i");
|
||||
dark_indicator.classList.toggle("bi-moon-stars-fill");
|
||||
dark_indicator.classList.toggle("bi-sun-fill");
|
||||
|
||||
document.body.classList.toggle("dark");
|
||||
|
||||
let theme = document.body.classList.contains("dark") ? "dark" : "light";
|
||||
document.documentElement.style.setProperty("color-scheme", theme);
|
||||
localStorage.setItem("theme", theme);
|
||||
}
|
||||
|
||||
function calculateAge(birthDate) {
|
||||
const today = new Date();
|
||||
const birth = new Date(birthDate);
|
||||
let age = today.getFullYear() - birth.getFullYear();
|
||||
const monthDifference = today.getMonth() - birth.getMonth();
|
||||
|
||||
// Check if the birthday has not occurred yet this year
|
||||
if (monthDifference < 0 || (monthDifference === 0 && today.getDate() < birth.getDate())) {
|
||||
age--;
|
||||
}
|
||||
|
||||
return age;
|
||||
}
|
||||
|
BIN
assets/pdf/Fauconnet_Arnaud_CV.pdf
Normal file
1
assets/vendor/aos/aos.css
vendored
Normal file
1
assets/vendor/aos/aos.js
vendored
Normal file
9
assets/vendor/font-awesome/css/fontawesome.min.css
vendored
Normal file
BIN
assets/vendor/font-awesome/webfonts/fa-brands-400.ttf
vendored
Normal file
BIN
assets/vendor/font-awesome/webfonts/fa-regular-400.ttf
vendored
Normal file
BIN
assets/vendor/font-awesome/webfonts/fa-solid-900.ttf
vendored
Normal file
BIN
assets/vendor/font-awesome/webfonts/fa-v4compatibility.ttf
vendored
Normal file
40
assets/vendor/mdb/mdb.min.css
vendored
Normal file
936
index.html
142
inner-page.html
@ -1,142 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||
|
||||
<title>Inner Page - Laura Bootstrap Template</title>
|
||||
<meta content="" name="description">
|
||||
<meta content="" name="keywords">
|
||||
|
||||
<!-- Favicons -->
|
||||
<link href="assets/img/favicon.png" rel="icon">
|
||||
<link href="assets/img/apple-touch-icon.png" rel="apple-touch-icon">
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Raleway:300,300i,400,400i,500,500i,600,600i,700,700i|Satisfy" rel="stylesheet">
|
||||
|
||||
<!-- Vendor CSS Files -->
|
||||
<link href="assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="assets/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
|
||||
<link href="assets/vendor/glightbox/css/glightbox.min.css" rel="stylesheet">
|
||||
<link href="assets/vendor/swiper/swiper-bundle.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Template Main CSS File -->
|
||||
<link href="assets/css/style.css" rel="stylesheet">
|
||||
|
||||
<!-- =======================================================
|
||||
* Template Name: Laura
|
||||
* Updated: Jul 27 2023 with Bootstrap v5.3.1
|
||||
* Template URL: https://bootstrapmade.com/laura-free-creative-bootstrap-theme/
|
||||
* Author: BootstrapMade.com
|
||||
* License: https://bootstrapmade.com/license/
|
||||
======================================================== -->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- ======= Header ======= -->
|
||||
<header id="header" class="fixed-top d-flex justify-content-center align-items-center ">
|
||||
|
||||
<nav id="navbar" class="navbar">
|
||||
<ul>
|
||||
<li><a class="nav-link scrollto " href="#hero">Home</a></li>
|
||||
<li><a class="nav-link scrollto" href="#about">About</a></li>
|
||||
<li><a class="nav-link scrollto" href="#resume">Resume</a></li>
|
||||
<li><a class="nav-link scrollto" href="#services">Services</a></li>
|
||||
<li><a class="nav-link scrollto " href="#portfolio">Portfolio</a></li>
|
||||
<li class="dropdown"><a href="#"><span>Drop Down</span> <i class="bi bi-chevron-down"></i></a>
|
||||
<ul>
|
||||
<li><a href="#">Drop Down 1</a></li>
|
||||
<li class="dropdown"><a href="#"><span>Deep Drop Down</span> <i class="bi bi-chevron-right"></i></a>
|
||||
<ul>
|
||||
<li><a href="#">Deep Drop Down 1</a></li>
|
||||
<li><a href="#">Deep Drop Down 2</a></li>
|
||||
<li><a href="#">Deep Drop Down 3</a></li>
|
||||
<li><a href="#">Deep Drop Down 4</a></li>
|
||||
<li><a href="#">Deep Drop Down 5</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#">Drop Down 2</a></li>
|
||||
<li><a href="#">Drop Down 3</a></li>
|
||||
<li><a href="#">Drop Down 4</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="nav-link scrollto" href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<i class="bi bi-list mobile-nav-toggle"></i>
|
||||
</nav><!-- .navbar -->
|
||||
|
||||
</header><!-- End Header -->
|
||||
|
||||
<main id="main">
|
||||
|
||||
<!-- ======= Breadcrumbs ======= -->
|
||||
<section class="breadcrumbs">
|
||||
<div class="container">
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h2>Inner Page</h2>
|
||||
<ol>
|
||||
<li><a href="index.html">Home</a></li>
|
||||
<li>Inner Page</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Breadcrumbs -->
|
||||
|
||||
<section class="inner-page">
|
||||
<div class="container">
|
||||
<p>
|
||||
Example inner page template
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main><!-- End #main -->
|
||||
|
||||
<!-- ======= Footer ======= -->
|
||||
<footer id="footer">
|
||||
<div class="container">
|
||||
<h3>Laura Thomson</h3>
|
||||
<p>Et aut eum quis fuga eos sunt ipsa nihil. Labore corporis magni eligendi fuga maxime saepe commodi placeat.</p>
|
||||
<div class="social-links">
|
||||
<a href="#" class="twitter"><i class="bx bxl-twitter"></i></a>
|
||||
<a href="#" class="facebook"><i class="bx bxl-facebook"></i></a>
|
||||
<a href="#" class="instagram"><i class="bx bxl-instagram"></i></a>
|
||||
<a href="#" class="google-plus"><i class="bx bxl-skype"></i></a>
|
||||
<a href="#" class="linkedin"><i class="bx bxl-linkedin"></i></a>
|
||||
</div>
|
||||
<div class="copyright">
|
||||
© Copyright <strong><span>Laura</span></strong>. All Rights Reserved
|
||||
</div>
|
||||
<div class="credits">
|
||||
<!-- All the links in the footer should remain intact. -->
|
||||
<!-- You can delete the links only if you purchased the pro version. -->
|
||||
<!-- Licensing information: https://bootstrapmade.com/license/ -->
|
||||
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/laura-free-creative-bootstrap-theme/ -->
|
||||
Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End Footer -->
|
||||
|
||||
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
|
||||
|
||||
<!-- Vendor JS Files -->
|
||||
<script src="assets/vendor/purecounter/purecounter_vanilla.js"></script>
|
||||
<script src="assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="assets/vendor/glightbox/js/glightbox.min.js"></script>
|
||||
<script src="assets/vendor/isotope-layout/isotope.pkgd.min.js"></script>
|
||||
<script src="assets/vendor/swiper/swiper-bundle.min.js"></script>
|
||||
<script src="assets/vendor/waypoints/noframework.waypoints.js"></script>
|
||||
<script src="assets/vendor/php-email-form/validate.js"></script>
|
||||
|
||||
<!-- Template Main JS File -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
@ -1,185 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||
|
||||
<title>Portfolio Details - Laura Bootstrap Template</title>
|
||||
<meta content="" name="description">
|
||||
<meta content="" name="keywords">
|
||||
|
||||
<!-- Favicons -->
|
||||
<link href="assets/img/favicon.png" rel="icon">
|
||||
<link href="assets/img/apple-touch-icon.png" rel="apple-touch-icon">
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Raleway:300,300i,400,400i,500,500i,600,600i,700,700i|Satisfy" rel="stylesheet">
|
||||
|
||||
<!-- Vendor CSS Files -->
|
||||
<link href="assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="assets/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
|
||||
<link href="assets/vendor/glightbox/css/glightbox.min.css" rel="stylesheet">
|
||||
<link href="assets/vendor/swiper/swiper-bundle.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Template Main CSS File -->
|
||||
<link href="assets/css/style.css" rel="stylesheet">
|
||||
|
||||
<!-- =======================================================
|
||||
* Template Name: Laura
|
||||
* Updated: Jul 27 2023 with Bootstrap v5.3.1
|
||||
* Template URL: https://bootstrapmade.com/laura-free-creative-bootstrap-theme/
|
||||
* Author: BootstrapMade.com
|
||||
* License: https://bootstrapmade.com/license/
|
||||
======================================================== -->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- ======= Header ======= -->
|
||||
<header id="header" class="fixed-top d-flex justify-content-center align-items-center ">
|
||||
|
||||
<nav id="navbar" class="navbar">
|
||||
<ul>
|
||||
<li><a class="nav-link scrollto " href="#hero">Home</a></li>
|
||||
<li><a class="nav-link scrollto" href="#about">About</a></li>
|
||||
<li><a class="nav-link scrollto" href="#resume">Resume</a></li>
|
||||
<li><a class="nav-link scrollto" href="#services">Services</a></li>
|
||||
<li><a class="nav-link scrollto active" href="#portfolio">Portfolio</a></li>
|
||||
<li class="dropdown"><a href="#"><span>Drop Down</span> <i class="bi bi-chevron-down"></i></a>
|
||||
<ul>
|
||||
<li><a href="#">Drop Down 1</a></li>
|
||||
<li class="dropdown"><a href="#"><span>Deep Drop Down</span> <i class="bi bi-chevron-right"></i></a>
|
||||
<ul>
|
||||
<li><a href="#">Deep Drop Down 1</a></li>
|
||||
<li><a href="#">Deep Drop Down 2</a></li>
|
||||
<li><a href="#">Deep Drop Down 3</a></li>
|
||||
<li><a href="#">Deep Drop Down 4</a></li>
|
||||
<li><a href="#">Deep Drop Down 5</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#">Drop Down 2</a></li>
|
||||
<li><a href="#">Drop Down 3</a></li>
|
||||
<li><a href="#">Drop Down 4</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="nav-link scrollto" href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
<i class="bi bi-list mobile-nav-toggle"></i>
|
||||
</nav><!-- .navbar -->
|
||||
|
||||
</header><!-- End Header -->
|
||||
|
||||
<main id="main">
|
||||
|
||||
<!-- ======= Breadcrumbs Section ======= -->
|
||||
<section class="breadcrumbs">
|
||||
<div class="container">
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h2>Portfolio Details</h2>
|
||||
<ol>
|
||||
<li><a href="index.html">Home</a></li>
|
||||
<li><a href="portfolio.html">Portfolio</a></li>
|
||||
<li>Portfolio Details</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- Breadcrumbs Section -->
|
||||
|
||||
<!-- ======= Portfolio Details Section ======= -->
|
||||
<section id="portfolio-details" class="portfolio-details">
|
||||
<div class="container">
|
||||
|
||||
<div class="row gy-4">
|
||||
|
||||
<div class="col-lg-8">
|
||||
<div class="portfolio-details-slider swiper">
|
||||
<div class="swiper-wrapper align-items-center">
|
||||
|
||||
<div class="swiper-slide">
|
||||
<img src="assets/img/portfolio/portfolio-details-1.jpg" alt="">
|
||||
</div>
|
||||
|
||||
<div class="swiper-slide">
|
||||
<img src="assets/img/portfolio/portfolio-details-2.jpg" alt="">
|
||||
</div>
|
||||
|
||||
<div class="swiper-slide">
|
||||
<img src="assets/img/portfolio/portfolio-details-3.jpg" alt="">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="swiper-pagination"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="portfolio-info">
|
||||
<h3>Project information</h3>
|
||||
<ul>
|
||||
<li><strong>Category</strong>: Web design</li>
|
||||
<li><strong>Client</strong>: ASU Company</li>
|
||||
<li><strong>Project date</strong>: 01 March, 2020</li>
|
||||
<li><strong>Project URL</strong>: <a href="#">www.example.com</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="portfolio-description">
|
||||
<h2>This is an example of portfolio detail</h2>
|
||||
<p>
|
||||
Autem ipsum nam porro corporis rerum. Quis eos dolorem eos itaque inventore commodi labore quia quia. Exercitationem repudiandae officiis neque suscipit non officia eaque itaque enim. Voluptatem officia accusantium nesciunt est omnis tempora consectetur dignissimos. Sequi nulla at esse enim cum deserunt eius.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Portfolio Details Section -->
|
||||
|
||||
</main><!-- End #main -->
|
||||
|
||||
<!-- ======= Footer ======= -->
|
||||
<footer id="footer">
|
||||
<div class="container">
|
||||
<h3>Laura Thomson</h3>
|
||||
<p>Et aut eum quis fuga eos sunt ipsa nihil. Labore corporis magni eligendi fuga maxime saepe commodi placeat.</p>
|
||||
<div class="social-links">
|
||||
<a href="#" class="twitter"><i class="bx bxl-twitter"></i></a>
|
||||
<a href="#" class="facebook"><i class="bx bxl-facebook"></i></a>
|
||||
<a href="#" class="instagram"><i class="bx bxl-instagram"></i></a>
|
||||
<a href="#" class="google-plus"><i class="bx bxl-skype"></i></a>
|
||||
<a href="#" class="linkedin"><i class="bx bxl-linkedin"></i></a>
|
||||
</div>
|
||||
<div class="copyright">
|
||||
© Copyright <strong><span>Laura</span></strong>. All Rights Reserved
|
||||
</div>
|
||||
<div class="credits">
|
||||
<!-- All the links in the footer should remain intact. -->
|
||||
<!-- You can delete the links only if you purchased the pro version. -->
|
||||
<!-- Licensing information: https://bootstrapmade.com/license/ -->
|
||||
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/laura-free-creative-bootstrap-theme/ -->
|
||||
Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End Footer -->
|
||||
|
||||
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
|
||||
|
||||
<!-- Vendor JS Files -->
|
||||
<script src="assets/vendor/purecounter/purecounter_vanilla.js"></script>
|
||||
<script src="assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="assets/vendor/glightbox/js/glightbox.min.js"></script>
|
||||
<script src="assets/vendor/isotope-layout/isotope.pkgd.min.js"></script>
|
||||
<script src="assets/vendor/swiper/swiper-bundle.min.js"></script>
|
||||
<script src="assets/vendor/waypoints/noframework.waypoints.js"></script>
|
||||
<script src="assets/vendor/php-email-form/validate.js"></script>
|
||||
|
||||
<!-- Template Main JS File -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|