details page in progress
This commit is contained in:
@@ -1,124 +0,0 @@
|
||||
-
|
||||
|
||||
// Данные для меню навигации
|
||||
var menuItems = {
|
||||
Home: './index.html',
|
||||
Embedded: './embeded_details.html',
|
||||
OpenCV: './opencv_details.html',
|
||||
Photography: './photography_details.html',
|
||||
Table: './table.html',
|
||||
Institute: './images/institute.png'
|
||||
};
|
||||
|
||||
// Данные для боковых карточек
|
||||
var smallCards = [
|
||||
{
|
||||
header: 'Заголовок',
|
||||
text: '3D printers are versatile tools used for creating prototypes, custom parts, and artistic designs. They work by layering materials.',
|
||||
image: '../images/16x10/3d-printer.jpeg',
|
||||
imageAlt: '3D Printer',
|
||||
link: '#',
|
||||
},
|
||||
{
|
||||
header: 'BLHeli ESCs',
|
||||
text: 'BLHeli ESCs are electronic speed controllers designed for drones, offering smooth and precise motor control.',
|
||||
image: '../images/16x10/blheli-esc.jpeg',
|
||||
imageAlt: 'BLHeli ESC',
|
||||
link: '#',
|
||||
},
|
||||
{
|
||||
header: 'Raspberry Pi Nano',
|
||||
text: 'Raspberry Pi Nano is a compact computer ideal for learning, prototyping, and IoT projects. It is highly energy-efficient.',
|
||||
image: '../images/16x10/rpi-nano.jpeg',
|
||||
imageAlt: 'Raspberry Pi Nano',
|
||||
link: '#',
|
||||
},
|
||||
{
|
||||
header: 'Smart Thermostats',
|
||||
text: 'Smart thermostats help regulate home temperatures efficiently, saving energy and enhancing comfort with automation.',
|
||||
image: '../images/16x10/thermostat.jpeg',
|
||||
imageAlt: 'Smart Thermostat',
|
||||
link: '#',
|
||||
}
|
||||
];
|
||||
|
||||
const pages = {
|
||||
embedded: {
|
||||
title: 'Embedded Details',
|
||||
slug: 'embedded',
|
||||
menuTitle: 'Embeded Details',
|
||||
images: [
|
||||
{ src: './images/esp32.png', alt: 'ESP32', height: 150 },
|
||||
{ src: './images/arduino.png', alt: 'Arduino', height: 150 },
|
||||
{ src: './images/stm32.png', alt: 'STM32', height: 150 }
|
||||
],
|
||||
paragraphs: [
|
||||
"My programming path started with embeded systems, i love all the low level things that Mcu could do with just a little bit of code, sometimes build or flashing progress could take some time to get a hand of , but after that everething usualy goes smooth",
|
||||
"The first MCU i tried was a ATmega328P, after some time i was surprised with the debug capabilities on the Stm32 and now i'm working with esp32-s3 , that's a good chip, has internal JTAG and all the shiny wireless interfaces but feels faulty for some reason <i>regular segfaults with CDC</i>"
|
||||
],
|
||||
table: {
|
||||
title: 'Microcontroller Comparison Table',
|
||||
headers: ['Board/MCU', 'UART Count', 'Dynamic UART Assignment', 'ADC Channels', 'Debug Support', 'Flash Size', 'Wireless Connectivity'],
|
||||
rows: [
|
||||
['ESP32', '3', 'Yes (via IO MUX)', '18', 'JTAG, Serial', '4MB (typical)', 'Wi-Fi, Bluetooth'],
|
||||
['ESP32-S3', '3', 'Yes (via IO MUX)', '20', 'JTAG, Serial', '8MB (typical)', 'Wi-Fi, Bluetooth LE'],
|
||||
['ESP-01', '1', 'No', '1', 'Serial only', '512KB/1MB', 'Wi-Fi'],
|
||||
['Arduino Uno (ATmega328P)', '1', 'No', '6', 'Serial, DebugWire', '32KB', 'None'],
|
||||
['Blue Pill (STM32F103C8T6)', '3', 'Yes (remappable)', '10', 'SWD, Serial', '64KB/128KB', 'None']
|
||||
]
|
||||
},
|
||||
footer: "no rpi pico here , the build system has won over my temper"
|
||||
},
|
||||
|
||||
opencv: {
|
||||
title: 'OpenCV Details',
|
||||
slug: 'opencv',
|
||||
menuTitle: 'OpenCV Details',
|
||||
images: [
|
||||
{ src: './images/opencv.png', alt: 'OpenCV', height: 150 }
|
||||
],
|
||||
paragraphs: [
|
||||
"as mentioned before i love when programs are able to <i>see</i> things",
|
||||
"my experience with opencv started with simple hight level functions like detectCircle or findContours and etc...",
|
||||
"Right now i'm crawling deeper into the library , and the idea of standartisation of parameters between different cameras is appealig to me",
|
||||
"so i'm trying to understand how all that works from the math side",
|
||||
"Additionally, I'm exploring Re-Identification (ReId) techniques, they are used for recognizing and tracking objects across different camera views or consecutive frames."
|
||||
],
|
||||
content: {
|
||||
type: 'text',
|
||||
text: "One of many projects I've worked on is <a href=\"https://github.com/OkunElya/ArucoNGP-MapCreator\" target=\"_blank\">ArucoNGP-MapCreator</a>.<br>The idea was to create a relative map of Aruco markers just from photos of pairs (or more) of them.<br>It can also estimate the camera's position in the world relative to a specific marker, using only images containing any marker.<br>It was also my first deep dive into linear algebra."
|
||||
}
|
||||
},
|
||||
|
||||
photography: {
|
||||
title: 'Photography Details',
|
||||
slug: 'photography',
|
||||
menuTitle: 'Photography Details',
|
||||
images: [],
|
||||
paragraphs: [
|
||||
"Usually i capture landcape scenes with SLR camera, the main workhorse is Nikon D3100 with kit and 70-210mm"
|
||||
],
|
||||
gallery: [
|
||||
[
|
||||
{ src: 'images/photos/image0.png', alt: 'Photo 0', width: 200 },
|
||||
{ src: 'images/photos/image1.png', alt: 'Photo 1', width: 200 },
|
||||
{ src: 'images/photos/image2.png', alt: 'Photo 2', width: 200 }
|
||||
],
|
||||
[
|
||||
{ src: 'images/photos/image3.png', alt: 'Photo 3', width: 200 },
|
||||
{ src: 'images/photos/image4.png', alt: 'Photo 4', width: 200 },
|
||||
{ src: 'images/photos/image5.png', alt: 'Photo 5', width: 200 }
|
||||
]
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
-
|
||||
const menu = [
|
||||
{ href: './index.html', title: 'Home' },
|
||||
{ href: './embeded_details.html', title: 'Embeded Details' },
|
||||
{ href: './opencv_details.html', title: 'OpenCV Details' },
|
||||
{ href: './photography_details.html', title: 'Photography Details' },
|
||||
{ href: './table.html', title: 'Table with filters (not working yet)' },
|
||||
{ href: './images/institute.png', title: 'Institute' }
|
||||
];
|
||||
24
src/components/details-template.pug
Normal file
24
src/components/details-template.pug
Normal file
@@ -0,0 +1,24 @@
|
||||
include mixins.pug
|
||||
|
||||
html
|
||||
head
|
||||
meta(charset="UTF-8")
|
||||
block title
|
||||
title Details Page
|
||||
body
|
||||
block navbar
|
||||
+navbarMixin("")
|
||||
|
||||
.details-container
|
||||
header.details-header
|
||||
block header
|
||||
h1 Default Header
|
||||
|
||||
.details-content
|
||||
.details-text
|
||||
block text
|
||||
p Default text content
|
||||
|
||||
.details-gallery
|
||||
block gallery
|
||||
p No images available
|
||||
@@ -1,11 +1,9 @@
|
||||
include data.pug
|
||||
-
|
||||
// Данные для меню навигации
|
||||
const navbarItems = {
|
||||
Home: './index.html',
|
||||
Embedded: './embeded_details.html',
|
||||
OpenCV: './opencv_details.html',
|
||||
Photography: './photography_details.html',
|
||||
Photography: './photography-details.html',
|
||||
Table: './table.html',
|
||||
Institute: './images/institute.png'
|
||||
};
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
include data.pug
|
||||
|
||||
mixin detailsPage(pageData)
|
||||
doctype html
|
||||
html(lang="en")
|
||||
head
|
||||
meta(charset="UTF-8")
|
||||
title= pageData.title
|
||||
|
||||
body(bgcolor="#F0F8FF")
|
||||
//- Menu
|
||||
details
|
||||
summary Menu
|
||||
ul
|
||||
each item in menu
|
||||
li
|
||||
if item.title === pageData.menuTitle
|
||||
a(href=item.href)
|
||||
h4= item.title
|
||||
else
|
||||
a(href=item.href)= item.title
|
||||
|
||||
//- Page Title
|
||||
h2(align="center")= pageData.title
|
||||
hr(width="800" align="center")
|
||||
|
||||
//- Header Images
|
||||
if pageData.images && pageData.images.length > 0
|
||||
p(align="center")
|
||||
each img in pageData.images
|
||||
if img.height
|
||||
img(src=img.src alt=img.alt height=img.height)
|
||||
else if img.width
|
||||
img(src=img.src alt=img.alt width=img.width)
|
||||
else
|
||||
img(src=img.src alt=img.alt)
|
||||
|
||||
//- Paragraphs
|
||||
if pageData.paragraphs
|
||||
each para in pageData.paragraphs
|
||||
p(align="justify")!= para
|
||||
|
||||
//- Table (for embedded page)
|
||||
if pageData.table
|
||||
h3(align="center")= pageData.table.title
|
||||
table(border="1" align="center" cellpadding="6" cellspacing="0")
|
||||
tr
|
||||
each header in pageData.table.headers
|
||||
th= header
|
||||
each row in pageData.table.rows
|
||||
tr
|
||||
each cell in row
|
||||
td= cell
|
||||
|
||||
//- Content (for opencv page)
|
||||
if pageData.content
|
||||
hr(width="500" align="center")
|
||||
p!= pageData.content.text
|
||||
|
||||
//- Gallery (for photography page)
|
||||
if pageData.gallery
|
||||
each row in pageData.gallery
|
||||
p(align="center")
|
||||
each img in row
|
||||
img(src=img.src alt=img.alt width=img.width)
|
||||
|
||||
//- Footer
|
||||
if pageData.footer
|
||||
p(align="right")= pageData.footer
|
||||
@@ -1 +1,2 @@
|
||||
import './styles/main.styl'
|
||||
import './styles/main.styl'
|
||||
import './styles/details.styl'
|
||||
@@ -45,7 +45,7 @@ html(lang="en")
|
||||
img.info-block__image(src=infoBlockB.img alt=infoBlockB.imgAlt)
|
||||
.info-block__details
|
||||
p.info-block__description #{infoBlockB.description}
|
||||
a.info-block__link(href="#") More info
|
||||
a.info-block__link(href="./photography-details.html") More info
|
||||
|
||||
.sidebar
|
||||
+infoCardsMinxin()
|
||||
|
||||
34
src/pages/photography-details.pug
Normal file
34
src/pages/photography-details.pug
Normal file
@@ -0,0 +1,34 @@
|
||||
include ../components/mixins.pug
|
||||
extends ../components/details-template.pug
|
||||
|
||||
-
|
||||
const photographyData = {
|
||||
header: "Photography",
|
||||
description: "temptext.",
|
||||
images: [
|
||||
require('../images/photos/image0.png'),
|
||||
require('../images/photos/image1.png'),
|
||||
require('../images/photos/image2.png')
|
||||
],
|
||||
details: "D3100 -> SLT A58."
|
||||
}
|
||||
|
||||
block title
|
||||
title Photography Portfolio - Details
|
||||
|
||||
block navbar
|
||||
+navbarMixin("Photography")
|
||||
|
||||
block header
|
||||
h1.details-title #{photographyData.header}
|
||||
p.details-description #{photographyData.description}
|
||||
|
||||
block text
|
||||
p.details-text-content #{photographyData.details}
|
||||
.details-back-link
|
||||
a.back-button(href="./index.html") ← Back to Home
|
||||
|
||||
block gallery
|
||||
each image, index in photographyData.images
|
||||
.gallery-item
|
||||
img.gallery-image(src=image alt=`Photography ${index + 1}`)
|
||||
107
src/styles/details.styl
Normal file
107
src/styles/details.styl
Normal file
@@ -0,0 +1,107 @@
|
||||
// Details Template Styles
|
||||
.details-container
|
||||
max-width 1200px
|
||||
margin 0 auto
|
||||
padding 20px
|
||||
|
||||
.details-header
|
||||
margin-bottom 40px
|
||||
text-align center
|
||||
|
||||
.details-title
|
||||
font-size 2.5rem
|
||||
margin-bottom 20px
|
||||
color #333
|
||||
|
||||
.details-description
|
||||
font-size 1.2rem
|
||||
color #666
|
||||
line-height 1.6
|
||||
max-width 800px
|
||||
margin 0 auto
|
||||
|
||||
.details-content
|
||||
display flex
|
||||
gap 40px
|
||||
align-items flex-start
|
||||
|
||||
.details-text
|
||||
flex 1
|
||||
|
||||
.details-text-content
|
||||
font-size 1.1rem
|
||||
line-height 1.8
|
||||
color #444
|
||||
margin-bottom 30px
|
||||
|
||||
.details-back-link
|
||||
margin-top 30px
|
||||
|
||||
.back-button
|
||||
display inline-block
|
||||
padding 12px 24px
|
||||
background-color #007bff
|
||||
color white
|
||||
text-decoration none
|
||||
border-radius 6px
|
||||
transition background-color 0.3s ease
|
||||
font-weight 500
|
||||
|
||||
&:hover
|
||||
background-color #0056b3
|
||||
|
||||
.details-gallery
|
||||
flex 0 0 300px
|
||||
display flex
|
||||
flex-direction column
|
||||
gap 20px
|
||||
|
||||
.gallery-item
|
||||
overflow hidden
|
||||
border-radius 8px
|
||||
box-shadow 0 4px 12px rgba(0, 0, 0, 0.1)
|
||||
transition transform 0.3s ease, box-shadow 0.3s ease
|
||||
|
||||
&:hover
|
||||
transform translateY(-5px)
|
||||
box-shadow 0 8px 20px rgba(0, 0, 0, 0.15)
|
||||
|
||||
.gallery-image
|
||||
width 100%
|
||||
height 200px
|
||||
object-fit cover
|
||||
display block
|
||||
|
||||
// Responsive Design - Mobile (screens smaller than 700px)
|
||||
@media screen and (max-width: 700px)
|
||||
.details-container
|
||||
padding 15px
|
||||
|
||||
.details-header
|
||||
margin-bottom 30px
|
||||
|
||||
.details-title
|
||||
font-size 2rem
|
||||
|
||||
.details-description
|
||||
font-size 1.1rem
|
||||
|
||||
.details-content
|
||||
flex-direction column
|
||||
gap 30px
|
||||
|
||||
.details-gallery
|
||||
flex 1
|
||||
order -1 // Move gallery above text on mobile
|
||||
|
||||
.gallery-item
|
||||
.gallery-image
|
||||
height 250px
|
||||
|
||||
.details-text
|
||||
.details-text-content
|
||||
font-size 1rem
|
||||
|
||||
.back-button
|
||||
padding 10px 20px
|
||||
font-size 0.95rem
|
||||
Reference in New Issue
Block a user