v2
5
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
10
.idea/inspectionProfiles/Project_Default.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||
<Languages>
|
||||
<language minSize="12" name="Style Sheets" />
|
||||
</Languages>
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/sador.dev.iml" filepath="$PROJECT_DIR$/.idea/sador.dev.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
12
.idea/sador.dev.iml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
BIN
icons/dark/github.png
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
icons/dark/instagram.png
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
icons/dark/lastfm.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
icons/light/github.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
icons/light/instagram.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
icons/light/lastfm.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
52
index.html
Normal file
@ -0,0 +1,52 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="shortcut icon" href="logo.png">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script defer src="script.js"></script>
|
||||
<title>sador.dev</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="box">
|
||||
<p>Kliknij mnie!</p>
|
||||
</div>
|
||||
<div id="content">
|
||||
<h1>Sador</h1>
|
||||
<h2 id="points">Bonusowe punkty z minigry: <span>0</span></h2>
|
||||
<button onclick="resetPoints()">Resetuj punkty</button>
|
||||
<button onclick="toggleTheme()">Zmień motyw</button>
|
||||
<button><a href="projects.html">Moje projekty</a></button>
|
||||
|
||||
<h4>Media społecznościowe</h4>
|
||||
<div id="socials">
|
||||
<a class="social" href="https://github.com/sadorowo" target="_blank">
|
||||
<img src="icons/light/github.png" alt="github" data-only-light>
|
||||
<img src="icons/dark/github.png" alt="github" data-only-dark>
|
||||
<p>GitHub</p>
|
||||
</a>
|
||||
<a class="social" href="https://last.fm/user/sadorishere" target="_blank">
|
||||
<img src="icons/light/lastfm.png" alt="lastfm" data-only-light>
|
||||
<img src="icons/dark/lastfm.png" alt="lastfm" data-only-dark>
|
||||
<p>Last.fm</p>
|
||||
</a>
|
||||
<a class="social" href="https://instagram.com/sadorowo" target="_blank">
|
||||
<img src="icons/light/instagram.png" alt="instagram" data-only-light>
|
||||
<img src="icons/dark/instagram.png" alt="instagram" data-only-dark>
|
||||
<p>Instagram</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h4>BIO</h4>
|
||||
<p>Cześć! Jestem Franek i mam 16 lat. Interesuję się programowaniem, informatyką, muzyką oraz motoryzacją (niekoniecznie tą nowoczesną). Moje przykładowe projekty, które napisałem własnoręcznie:</p>
|
||||
<ul>
|
||||
<li>Zine - mój własny bot discord napisany w języku Rust. Projekt na chwilę obecną dalej wspierany.</li>
|
||||
<li>Mini-komunikator (zarówno w wersji web, jak i mobilnej) - projekt porzucony.</li>
|
||||
<li>Moja personalna strona internetowa: właśnie ją oglądasz.</li>
|
||||
<li>Wiele innych projektów i botów, porzuconych</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
37
projects.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="shortcut icon" href="logo.png">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script defer src="script.js"></script>
|
||||
<title>sador.dev - projekty</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<h1>Sador</h1>
|
||||
<button onclick="toggleTheme()">Zmień motyw</button>
|
||||
<button><a href="index.html">Powrót</a></button>
|
||||
<h4>Moje projekty</h4>
|
||||
<div id="projects">
|
||||
<div class="project-card">
|
||||
<img src="thumbnails/zine.png" alt="Zine thumbnail"/>
|
||||
<div class="description">
|
||||
<h3>Zine</h3>
|
||||
<p>Mój własny bot na platformę Guilded napisany w języku Rust. Projekt na chwilę obecną dalej wspierany.</p>
|
||||
<a href="#" target="_blank">SOON</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="project-card">
|
||||
<img src="thumbnails/website.png" alt="Website thumbnail"/>
|
||||
<div class="description">
|
||||
<h3>Personalna strona</h3>
|
||||
<p>Moja własna strona internetowa, ta, którą teraz przeglądasz.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
53
script.js
Normal file
@ -0,0 +1,53 @@
|
||||
const contentContainer = document.getElementById('content');
|
||||
const points = document.getElementById('points');
|
||||
|
||||
const box = document.getElementById('box');
|
||||
const boxPoints = document.querySelector('#points span');
|
||||
|
||||
let bonusPoints = Number(localStorage.getItem('points') ?? 0);
|
||||
let currentTheme = localStorage.getItem('theme') ?? 'light';
|
||||
|
||||
const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms * 1000))
|
||||
async function updateOpacity(block, show) {
|
||||
if (!show) {
|
||||
block.style.opacity = '0';
|
||||
await wait(0.3);
|
||||
block.style.display = 'none';
|
||||
} else {
|
||||
block.style.display = 'block';
|
||||
await wait(0.3);
|
||||
block.style.opacity = '1';
|
||||
}
|
||||
|
||||
block.classList.toggle('visible');
|
||||
}
|
||||
|
||||
function toggleTheme() {
|
||||
document.body.classList.toggle('dark');
|
||||
currentTheme = currentTheme === 'light' ? 'dark' : 'light';
|
||||
localStorage.setItem('theme', currentTheme);
|
||||
}
|
||||
|
||||
function resetPoints() {
|
||||
localStorage.removeItem('points');
|
||||
bonusPoints = 0;
|
||||
boxPoints.textContent = bonusPoints;
|
||||
}
|
||||
|
||||
// listeners
|
||||
if (box) box.addEventListener('click', () => {
|
||||
bonusPoints++;
|
||||
localStorage.setItem('points', bonusPoints);
|
||||
boxPoints.textContent = bonusPoints;
|
||||
})
|
||||
|
||||
window.onload = async () => {
|
||||
if (boxPoints) boxPoints.textContent = bonusPoints;
|
||||
if (box) await updateOpacity(box, true);
|
||||
|
||||
await updateOpacity(contentContainer, true);
|
||||
}
|
||||
|
||||
// update theme
|
||||
if (currentTheme === 'dark')
|
||||
document.body.classList.add('dark');
|
277
style.css
Normal file
@ -0,0 +1,277 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Geologica:wght@400;700&display=swap');
|
||||
|
||||
:root {
|
||||
--size: 100px;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Geologica', sans-serif;
|
||||
font-weight: 700;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#content {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
transition: ease-in 0.2s;
|
||||
}
|
||||
|
||||
#content {
|
||||
opacity: 0
|
||||
}
|
||||
|
||||
#content h4 {
|
||||
color: #ffd9a4;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #000;
|
||||
text-decoration-color: #000;
|
||||
display: inline-block;
|
||||
transition: ease-in 0.2s;
|
||||
}
|
||||
|
||||
#box {
|
||||
z-index: 1;
|
||||
opacity: 0;
|
||||
border-radius: 50%;
|
||||
width: var(--size);
|
||||
height: var(--size);
|
||||
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
background-color: #000;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
transition: ease-in 0.2s;
|
||||
animation: toRight linear 6.8s infinite alternate, bounce linear 17s infinite alternate;
|
||||
|
||||
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#box p {
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
button {
|
||||
border: none;
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
background-color: rgb(96, 77, 199);
|
||||
font-family: 'Geologica', sans-serif;
|
||||
font-weight: 400;
|
||||
transition: ease-in 0.2s;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: rgba(96, 77, 199, 0.6);
|
||||
}
|
||||
|
||||
button a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.social {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-decoration: none;
|
||||
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
padding: 0 10px 0 10px;
|
||||
background-color: rgb(101, 44, 255);
|
||||
font-family: 'Geologica', sans-serif;
|
||||
font-weight: 400;
|
||||
transition: ease-in 0.2s;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.social:hover {
|
||||
background-color: rgb(78, 31, 208);
|
||||
}
|
||||
|
||||
.social p {
|
||||
color: #000;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
.social img {
|
||||
width: auto;
|
||||
height: 20px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.social, button {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#points span {
|
||||
color: lime;
|
||||
font-size: 125%;
|
||||
}
|
||||
|
||||
#projects {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
justify-content: center;
|
||||
text-decoration: none;
|
||||
align-items: center;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.project-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
text-decoration: none;
|
||||
|
||||
border-radius: 10px;
|
||||
transition: ease-in 0.2s;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.project-card img {
|
||||
border-radius: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.project-card .description {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.project-card .description * {
|
||||
transition: ease-in 0.2s;
|
||||
}
|
||||
|
||||
.project-card .description * {
|
||||
background-color: #fff;
|
||||
border-radius: 10px;
|
||||
padding: 5px;
|
||||
margin: 10px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.project-card:hover > .description *:not(a) {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0% {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
50% {
|
||||
top: calc(100% - var(--size));
|
||||
}
|
||||
|
||||
100% {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes toRight {
|
||||
0% {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
left: calc(100% - var(--size));
|
||||
}
|
||||
}
|
||||
|
||||
/* DARK THEME */
|
||||
body.dark {
|
||||
background-color: #2f3136;
|
||||
}
|
||||
|
||||
body.dark #box {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0 10px 0 rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
body.dark #box p {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
body.dark #content {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
body.dark .social p {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
body.dark a {
|
||||
color: #fff;
|
||||
text-decoration-color: #fff;
|
||||
}
|
||||
|
||||
body.dark .project-card .description * {
|
||||
background-color: #b4b4b4;
|
||||
}
|
||||
|
||||
body.dark *[data-only-light] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body:not(.dark) .project-card {
|
||||
background-color: rgb(185, 175, 255);
|
||||
}
|
||||
|
||||
body:not(.dark) *[data-only-dark] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body:not(.dark) .social {
|
||||
background-color: rgb(185, 175, 255);
|
||||
}
|
||||
|
||||
body:not(.dark) .social:hover {
|
||||
background-color: rgb(132, 125, 189);
|
||||
}
|
||||
|
||||
body:not(.dark) #content h4 {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/* MOBILE */
|
||||
@media screen and (max-width: 798px) {
|
||||
#content {
|
||||
display: block;
|
||||
top: 0;
|
||||
left: 0;
|
||||
transform: none;
|
||||
padding: 10px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#projects {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
BIN
thumbnails/website.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
thumbnails/zine.png
Normal file
After Width: | Height: | Size: 17 KiB |