optimizacija strani
Deploy to Development and Production / deploy (push) Successful in 7s

This commit is contained in:
Mark Poljanšek committed 2025-11-04 15:44:16 +01:00
1 parent b0279a1ec7
commit 651915e0f6
48 files changed
+614 -6121

No files matched your search

+1
View File
@@ -0,0 +1 @@
.venv/
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 61 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

+14 -5
View File
@@ -4,6 +4,16 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cene in reference - Prosberry</title>
<meta name="description" content="Pregled cen storitev Prosberry za tečaje angleščine, albanščine in slovenščine ter medkulturno posredovanje. Preberite reference zadovoljnih strank in spoznajte strokovnost Amre Kurešepi Zulji.">
<meta name="keywords" content="cene, cenik, reference, mnenja strank, tečaji angleščine, medkulturno posredovanje, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +24,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -237,8 +247,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
+15 -5
View File
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cene in sodelovanja - Prosberry</title>
<meta name="description" content="Za informacije o cenah storitev Prosberry in možnostih sodelovanja nas kontaktirajte. Nudimo tečaje angleščine, medkulturno posredovanje in delavnice.">
<meta name="keywords" content="cene, sodelovanje, Prosberry, tečaji angleščine, medkulturno posredovanje, delavnice, cenik">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/cene-in-sodelovanja/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -146,8 +157,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
+1 -5470
View File
File diff suppressed because it is too large. Load diff
+19 -9
View File
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Delavnice - Prosberry</title>
<meta name="description" content="Pregled vseh delavnic Prosberry za šole, vrtce in zaposlene. Izboljšajte vključevanje priseljencev, sodelovanje s starši in strokovni razvoj ekipe z našimi strokovno pripravljenimi vsebinami.">
<meta name="keywords" content="delavnice, šole, vrtci, zaposleni, vključevanje priseljencev, sodelovanje s starši, strokovni razvoj, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/delavnice/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -139,7 +150,7 @@
<div class="workshop-card-grid">
<a class="workshop-card" href="/skupaj-za-vkljucevanje/delavnica-zakaj-znati-slovensko/" data-aos="fade-up">
<div class="workshop-card-image">
<img src="/assets/images/vkljucevanje/delavnica-ucenci.png" alt="Delavnica Zakaj se splača znati slovensko?">
<img src="/assets/images/vkljucevanje/delavnica-ucenci.webp" alt="Delavnica Zakaj se splača znati slovensko?" loading="lazy" decoding="async" width="1536" height="1024">
</div>
<div class="workshop-card-title">
Zakaj se splača znati slovensko?
@@ -147,7 +158,7 @@
</a>
<a class="workshop-card" href="/skupaj-za-vkljucevanje/delavnica-sola-in-starsi/" data-aos="fade-up" data-aos-delay="100">
<div class="workshop-card-image">
<img src="/assets/images/vkljucevanje/delavnica-starsi-sola.png" alt="Delavnica Šola in starši priseljenci">
<img src="/assets/images/vkljucevanje/delavnica-starsi-sola.webp" alt="Delavnica Šola in starši priseljenci" loading="lazy" decoding="async" width="1536" height="1024">
</div>
<div class="workshop-card-title">
Šola in starši priseljenci
@@ -165,7 +176,7 @@
<div class="workshop-card-grid workshop-card-grid--single">
<a class="workshop-card" href="/skupaj-za-vkljucevanje/delavnica-vrtec-novi-zacetki/" data-aos="fade-up">
<div class="workshop-card-image">
<img src="/assets/images/vkljucevanje/delavnica-starsi-vrtec.png" alt="Delavnica Skupaj gradimo nove začetke">
<img src="/assets/images/vkljucevanje/delavnica-starsi-vrtec.webp" alt="Delavnica Skupaj gradimo nove začetke" loading="lazy" decoding="async" width="1536" height="1024">
</div>
<div class="workshop-card-title">
Skupaj gradimo nove začetke
@@ -183,7 +194,7 @@
<div class="workshop-card-grid workshop-card-grid--single">
<a class="workshop-card" href="/skupaj-za-vkljucevanje/delavnica-od-tujca-do-sosolca/" data-aos="fade-up">
<div class="workshop-card-image">
<img src="/assets/images/vkljucevanje/delavnica-ucitelji.png" alt="Delavnica Od tujca do sošolca">
<img src="/assets/images/vkljucevanje/delavnica-ucitelji.webp" alt="Delavnica Od tujca do sošolca" loading="lazy" decoding="async" width="1536" height="1024">
</div>
<div class="workshop-card-title">
Od tujca do sošolca
@@ -209,8 +220,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
+74
View File
@@ -0,0 +1,74 @@
import os
from PIL import Image
# Project root directory (where this script is located)
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
IMAGES_DIR = os.path.join(PROJECT_ROOT, 'assets', 'images')
# Define images and their desired responsive widths
# Each tuple: (original_filename, [list_of_widths_to_generate])
RESPONSIVE_IMAGES_CONFIG = [
('amra.webp', [320, 480, 767, 960]), # Added 320w
('logo.webp', [100, 200, 400]) # Added 100w
]
def generate_responsive_image(image_path, output_width, output_dir, quality=85):
"""
Generates a responsive version of an image with a specified width.
Maintains aspect ratio.
"""
try:
with Image.open(image_path) as img:
# Calculate new height to maintain aspect ratio
original_width, original_height = img.size
if original_width <= output_width:
# If original is smaller or equal, no need to resize down
# We still save it with the new naming convention if it's part of srcset
new_width = original_width
new_height = original_height
else:
new_width = output_width
new_height = int((original_height * new_width) / original_width)
# Resize only if dimensions change
if new_width != original_width or new_height != original_height:
img = img.resize((new_width, new_height), Image.Resampling.LANCZOS)
# Construct new filename (e.g., amra-480w.webp)
base_name, ext = os.path.splitext(os.path.basename(image_path))
# Ensure we only take the base name before any existing -<width>w
base_name_clean = base_name.split('-')[0]
new_filename = f"{base_name_clean}-{output_width}w{ext}"
output_path = os.path.join(output_dir, new_filename)
img.save(output_path, format=img.format, quality=quality)
print(f"Generated: {output_path} ({new_width}x{new_height})")
return True
except FileNotFoundError:
print(f"Error: Source image not found at {image_path}")
return False
except Exception as e:
print(f"Error processing {image_path} for width {output_width}: {e}")
return False
def main():
print("Starting responsive image generation...")
if not os.path.exists(IMAGES_DIR):
print(f"Error: Image directory not found at {IMAGES_DIR}")
return
for original_filename, widths in RESPONSIVE_IMAGES_CONFIG:
original_image_path = os.path.join(IMAGES_DIR, original_filename)
if not os.path.exists(original_image_path):
print(f"Warning: Original image {original_filename} not found. Skipping.")
continue
for width in widths:
generate_responsive_image(original_image_path, width, IMAGES_DIR)
print("Responsive image generation complete.")
if __name__ == "__main__":
main()
+2 -2
View File
@@ -3,8 +3,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
+23 -11
View File
@@ -3,10 +3,23 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kontakt - Prosberry</title>
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<title>Prosberry - Medkulturno izobraževanje in podpora</title>
<meta name="description" content="Prosberry je vaš medkulturni kotiček za učenje angleščine, razumevanje medkulturnih odnosov in osebno rast. Nudimo delavnice, medkulturno posredovanje in individualno podporo.">
<meta name="keywords" content="učenje angleščine, medkulturno posredovanje, delavnice za otroke, delavnice za starše, delavnice za šole, Amra Kurešepi Zulji, Prosberry">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="preload" as="image" href="/assets/images/amra.webp" imagesrcset="/assets/images/amra-480w.webp 480w, /assets/images/amra-767w.webp 767w, /assets/images/amra-960w.webp 960w, /assets/images/amra.webp 1544w" imagesizes="(max-width: 767px) 100vw, 50vw">
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap"></noscript>
<link rel="preload" href="https://unpkg.com/aos@next/dist/aos.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css"></noscript>
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
</head>
<body>
<header class="main-header">
@@ -14,8 +27,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async" srcset="/assets/images/logo-100w.webp 100w, /assets/images/logo-200w.webp 200w, /assets/images/logo-400w.webp 400w, /assets/images/logo.webp 1500w">
</picture>
</a>
</div>
@@ -129,7 +142,7 @@
<h1>Dobrodošli v našem medkulturnem kotičku…</h1>
<p class="hero-new-subtitle">Uči se angleščine, razvozlaj medkulturne vozle in uživaj v vsakem koraku!</p>
<div class="hero-info-box">
<h3>Zakaj PROSBERRY?</h3>
<h2>Zakaj PROSBERRY?</h2>
<p><strong>PROS</strong> simbolizira znanje, izkušnje in strokovnost, ki podpirajo rast in razvoj.</p>
<p><strong>BERRY</strong> predstavlja raznolikost in živost, ki bogati učenje, povezovanje in medkulturne izkušnje.</p>
<p>Tudi v jeziku in med ljudmi rastemo vsak po svoje – z različnimi potrebami, ozadji in cilji.</p>
@@ -137,7 +150,7 @@
</div>
</div>
<div class="hero-new-image" data-aos="fade-left">
<img src="assets/images/amra.png" alt="Amra Kurešepi Zulji">
<img src="assets/images/amra.webp" alt="Amra Kurešepi Zulji" width="1544" height="1920" fetchpriority="high" srcset="/assets/images/amra-320w.webp 320w, /assets/images/amra-480w.webp 480w, /assets/images/amra-767w.webp 767w, /assets/images/amra-960w.webp 960w, /assets/images/amra.webp 1544w">
</div>
</div>
<!-- Dekorativni elementi v ozadju -->
@@ -177,7 +190,7 @@
<section class="about-amra-intro">
<div class="about-amra-wrapper" data-aos="fade-up">
<div class="about-amra-image">
<img src="assets/images/amra2.png" alt="Amra Kurešepi Zulji" loading="lazy">
<img src="assets/images/amra2.webp" alt="Amra Kurešepi Zulji" loading="lazy" decoding="async" width="480" height="503">
</div>
<div class="about-amra-content">
<p>Sem Amra – mama, žena, raziskovalka jezikov in kultur ter vaša zvesta sopotnica na zanimivi poti učenja in odkrivanja novih svetov.</p>
@@ -217,8 +230,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="js/main.js"></script>
<script src="js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="js/main.js" defer></script>
</body>
</html>
+1 -561
View File
@@ -1,561 +1 @@
document.addEventListener('DOMContentLoaded', function() {
// --- Mobile Menu Toggle ---
const mobileMenuBtn = document.querySelector('.mobile-menu-btn');
const navLinks = document.querySelector('.nav-links');
let closeMobileMenu = () => {};
let resetMobileSubmenus = () => {};
const normalizePath = (value) => {
if (!value) {
return '/';
}
let clean = value.split('?')[0].split('#')[0];
clean = clean.replace(/index\.html$/i, '');
clean = clean.replace(/\/+$/, '');
if (clean === '') {
clean = '/';
}
return clean;
};
const applyActiveNavState = () => {
const navRoot = document.querySelector('.nav-links');
if (!navRoot) {
return;
}
navRoot.querySelectorAll('a.active, .dropbtn.active').forEach(el => {
el.classList.remove('active');
});
const currentPath = normalizePath(window.location.pathname);
const navAnchors = navRoot.querySelectorAll('a[href]');
let matchedLink = null;
navAnchors.forEach(anchor => {
const href = anchor.getAttribute('href');
if (!href || href.startsWith('http') || href.startsWith('mailto:') || href.startsWith('tel:') || href.startsWith('#')) {
return;
}
const linkPath = normalizePath(href);
if (linkPath === currentPath) {
matchedLink = anchor;
}
});
if (!matchedLink) {
return;
}
matchedLink.classList.add('active');
const highlightDropdownParents = (element) => {
let parentContent = element.closest('.dropdown-submenu-content, .dropdown-content');
while (parentContent) {
const trigger = parentContent.previousElementSibling;
if (trigger && (trigger.tagName === 'A' || trigger.classList.contains('dropbtn'))) {
trigger.classList.add('active');
}
parentContent = parentContent.parentElement ? parentContent.parentElement.closest('.dropdown-submenu-content, .dropdown-content') : null;
}
};
highlightDropdownParents(matchedLink);
const topLevelDropdown = matchedLink.closest('.dropdown');
if (topLevelDropdown) {
const trigger = topLevelDropdown.querySelector('.dropbtn');
if (trigger) {
trigger.classList.add('active');
}
}
};
if (mobileMenuBtn && navLinks) {
resetMobileSubmenus = () => {
navLinks.querySelectorAll('.dropdown-content, .dropdown-submenu-content').forEach(submenu => {
submenu.style.display = 'none';
});
navLinks.querySelectorAll('.dropbtn, .dropdown-submenu > a').forEach(link => {
link.classList.remove('active');
});
applyActiveNavState();
};
closeMobileMenu = () => {
mobileMenuBtn.classList.remove('active');
navLinks.classList.remove('active');
document.body.classList.remove('no-scroll');
resetMobileSubmenus();
};
mobileMenuBtn.addEventListener('click', (event) => {
event.stopPropagation(); // Prepreči, da bi se dogodek takoj prenesel na 'document'
const willOpen = !navLinks.classList.contains('active');
if (willOpen) {
mobileMenuBtn.classList.add('active');
navLinks.classList.add('active');
document.body.classList.add('no-scroll');
resetMobileSubmenus();
} else {
closeMobileMenu();
}
});
}
// --- Active Navigation Highlight ---
applyActiveNavState();
// --- Mobile Dropdown Logic ---
// Logika za odpiranje podmenijev na klik na mobilnih napravah
const dropdowns = document.querySelectorAll('.nav-links .dropdown-submenu > a, .nav-links .dropdown > .dropbtn');
dropdowns.forEach(item => {
item.addEventListener('click', function(event) {
// Preveri, ali smo na mobilni napravi (ujema se z CSS @media query)
if (window.innerWidth <= 768) {
// Prepreči navigacijo, če je to link, saj želimo samo odpreti podmeni
if (item.tagName === 'A') {
event.preventDefault();
}
event.stopPropagation();
const submenu = item.nextElementSibling;
if (!submenu) {
return;
}
const isTopLevelTrigger = item.classList.contains('dropbtn');
if (isTopLevelTrigger) {
navLinks.querySelectorAll('.dropdown-content').forEach(panel => {
if (panel !== submenu) {
panel.style.display = 'none';
const trigger = panel.parentElement.querySelector('.dropbtn');
if (trigger) {
trigger.classList.remove('active');
}
panel.querySelectorAll('.dropdown-submenu-content').forEach(child => {
child.style.display = 'none';
const childTrigger = child.parentElement.querySelector(':scope > a');
if (childTrigger) {
childTrigger.classList.remove('active');
}
});
}
});
} else {
const siblingsWrapper = item.parentElement && item.parentElement.parentElement;
if (siblingsWrapper) {
siblingsWrapper.querySelectorAll(':scope > .dropdown-submenu > .dropdown-submenu-content').forEach(panel => {
if (panel !== submenu) {
panel.style.display = 'none';
const trigger = panel.parentElement.querySelector(':scope > a');
if (trigger) {
trigger.classList.remove('active');
}
panel.querySelectorAll('.dropdown-submenu-content').forEach(child => {
child.style.display = 'none';
const childTrigger = child.parentElement.querySelector(':scope > a');
if (childTrigger) {
childTrigger.classList.remove('active');
}
});
}
});
}
}
const shouldOpen = submenu.style.display !== 'block';
if (shouldOpen) {
submenu.style.display = 'block';
item.classList.add('active');
submenu.querySelectorAll('.dropdown-submenu-content').forEach(child => {
child.style.display = 'none';
const childTrigger = child.parentElement.querySelector(':scope > a');
if (childTrigger) {
childTrigger.classList.remove('active');
}
});
} else {
submenu.style.display = 'none';
item.classList.remove('active');
submenu.querySelectorAll('.dropdown-submenu-content').forEach(child => {
child.style.display = 'none';
const childTrigger = child.parentElement.querySelector(':scope > a');
if (childTrigger) {
childTrigger.classList.remove('active');
}
});
}
}
});
});
// --- Close mobile menu when clicking outside ---
document.addEventListener('click', function(event) {
if (window.innerWidth <= 768 && navLinks && navLinks.classList.contains('active')) {
// Preveri, ali klik ni bil znotraj navigacije ali na gumb za meni
const isClickInsideNav = navLinks.contains(event.target);
const isClickOnBtn = mobileMenuBtn && mobileMenuBtn.contains(event.target);
if (!isClickInsideNav && !isClickOnBtn) {
closeMobileMenu();
}
}
});
// --- Close mobile menu when a link is clicked ---
const navLinkItems = document.querySelectorAll('.nav-links a');
navLinkItems.forEach(link => {
link.addEventListener('click', (event) => {
// Preprečimo zapiranje, če ima link podmeni in smo na mobilni napravi
const hasSubmenu = link.parentElement.classList.contains('dropdown-submenu') || link.classList.contains('dropbtn');
if (window.innerWidth <= 768) {
if (hasSubmenu) {
// To je že obdelano v zgornji logiki, tukaj samo preprečimo, da bi se meni takoj zaprl
return;
}
closeMobileMenu();
}
});
});
// --- Accordion Logic for "Več" buttons ---
const accordions = document.querySelectorAll('.accordion-toggle');
accordions.forEach(accordion => {
accordion.addEventListener('click', function() {
const accordionItem = this.closest('.mediation-accordion-item');
const content = accordionItem ? accordionItem.querySelector('.accordion-content') : null;
if (!content) {
return;
}
this.classList.toggle('active');
const isOpen = this.classList.contains('active');
this.setAttribute('aria-expanded', String(isOpen));
content.setAttribute('aria-hidden', String(!isOpen));
if (isOpen) {
content.style.maxHeight = content.scrollHeight + "px";
this.textContent = 'Manj';
} else {
content.style.maxHeight = null;
this.textContent = 'Več';
}
});
accordion.textContent = 'Več';
accordion.setAttribute('aria-expanded', 'false');
const initialContent = accordion.closest('.mediation-accordion-item')?.querySelector('.accordion-content');
if (initialContent) {
initialContent.setAttribute('aria-hidden', 'true');
}
});
// --- Header Scroll Effect ---
const header = document.querySelector('.main-header');
if (header) {
let lastScroll = 0;
window.addEventListener('scroll', () => {
const currentScroll = window.pageYOffset;
if (currentScroll <= 0) {
header.classList.remove('scroll-up');
return;
}
if (currentScroll > lastScroll && !header.classList.contains('scroll-down')) {
// Scroll Down
header.classList.remove('scroll-up');
header.classList.add('scroll-down');
} else if (currentScroll < lastScroll && header.classList.contains('scroll-down')) {
// Scroll Up
header.classList.remove('scroll-down');
header.classList.add('scroll-up');
}
lastScroll = currentScroll;
});
}
// --- Accordion Logic for Mediation Page ---
const mediationSections = document.querySelectorAll('.mediation-section');
if (mediationSections.length) {
const mediationTitles = document.querySelectorAll('.mediation-section h2');
const closeAllSections = () => {
mediationSections.forEach(section => {
section.classList.remove('active');
});
};
mediationTitles.forEach(title => {
title.addEventListener('click', () => {
const parentSection = title.parentElement;
const isAlreadyActive = parentSection.classList.contains('active');
closeAllSections();
if (!isAlreadyActive) {
parentSection.classList.add('active');
}
});
});
const openSectionFromHash = () => {
const hash = window.location.hash;
if (hash) {
const targetSection = document.querySelector(hash);
if (targetSection && targetSection.classList.contains('mediation-section')) {
closeAllSections();
targetSection.classList.add('active');
}
}
};
window.addEventListener('hashchange', openSectionFromHash);
openSectionFromHash();
if (!document.querySelector('.mediation-section.active') && mediationSections[0]) {
mediationSections[0].classList.add('active');
}
}
// --- POPRAVLJENA in ZANESLJIVA logika za meni ---
const dropdownContainers = document.querySelectorAll('.nav-links .dropdown');
if (dropdownContainers.length) {
const closeAllDropdowns = () => {
dropdownContainers.forEach(container => {
const dropdownContent = container.querySelector('.dropdown-content');
if (!dropdownContent) {
return;
}
container.classList.remove('is-open');
dropdownContent.style.display = 'none';
dropdownContent.querySelectorAll('.dropdown-submenu-content').forEach(submenu => {
submenu.style.display = 'none';
});
});
};
dropdownContainers.forEach(container => {
const dropBtn = container.querySelector('.dropbtn');
const dropdownContent = container.querySelector('.dropdown-content');
if (!dropBtn || !dropdownContent) {
return;
}
const closeDropdown = () => {
container.classList.remove('is-open');
dropdownContent.style.display = 'none';
dropdownContent.querySelectorAll('.dropdown-submenu-content').forEach(submenu => {
submenu.style.display = 'none';
});
};
const openDropdown = () => {
container.classList.add('is-open');
dropdownContent.style.display = 'block';
};
dropBtn.addEventListener('click', (event) => {
if (window.innerWidth <= 768) {
return; // mobilna logika že upravlja
}
event.preventDefault();
const isOpen = container.classList.contains('is-open');
closeAllDropdowns();
if (!isOpen) {
openDropdown();
}
});
const submenuLinks = container.querySelectorAll('.dropdown-submenu > a');
submenuLinks.forEach(link => {
const submenu = link.nextElementSibling;
if (!submenu) {
return;
}
link.addEventListener('click', (event) => {
if (window.innerWidth <= 768) {
return; // mobilna logika že upravlja
}
const parentList = link.parentElement.parentElement;
parentList.querySelectorAll(':scope > .dropdown-submenu > .dropdown-submenu-content').forEach(sm => {
if (sm !== submenu) {
sm.style.display = 'none';
}
});
const isOpen = submenu.style.display === 'block';
const href = link.getAttribute('href') || '';
if (href === '#' || href.trim() === '') {
event.preventDefault();
submenu.style.display = isOpen ? 'none' : 'block';
return;
}
if (!isOpen) {
event.preventDefault();
submenu.style.display = 'block';
} else {
closeDropdown();
}
});
});
container.querySelectorAll('.dropdown-submenu-content a').forEach(link => {
if (link.nextElementSibling) {
return;
}
link.addEventListener('click', () => {
if (window.innerWidth <= 768) {
return;
}
closeAllDropdowns();
closeMobileMenu();
});
});
});
document.addEventListener('click', (event) => {
if (window.innerWidth <= 768) {
return;
}
const clickedInside = Array.from(dropdownContainers).some(container => container.contains(event.target));
if (!clickedInside) {
closeAllDropdowns();
}
});
window.addEventListener('resize', () => {
if (window.innerWidth <= 768) {
closeAllDropdowns();
closeMobileMenu();
}
});
}
window.addEventListener('resize', () => {
if (window.innerWidth > 768) {
closeMobileMenu();
}
});
// --- Initialize AOS (Animate on Scroll) ---
if (typeof AOS !== 'undefined') {
AOS.init({
duration: 600,
easing: 'ease-out',
once: true, // Animacija se zgodi samo enkrat
offset: 50,
delay: 100,
disable: 'mobile'
});
}
// --- "Read More" Button Logic for Kdo Sem Page ---
const readMoreBtn = document.querySelector('.read-more-btn');
const moreStoryContent = document.querySelector('.more-story-content');
if (readMoreBtn && moreStoryContent) {
if (moreStoryContent.id) {
readMoreBtn.setAttribute('aria-controls', moreStoryContent.id);
}
const applyStoryState = (isVisible) => {
readMoreBtn.textContent = isVisible ? 'Skrij zgodbo' : 'Moja zgodba';
readMoreBtn.setAttribute('aria-expanded', isVisible ? 'true' : 'false');
moreStoryContent.setAttribute('aria-hidden', isVisible ? 'false' : 'true');
};
let isExpanded = moreStoryContent.classList.contains('visible');
applyStoryState(isExpanded);
moreStoryContent.style.height = isExpanded ? 'auto' : '0px';
const openStory = () => {
moreStoryContent.classList.add('visible');
const targetHeight = moreStoryContent.scrollHeight;
moreStoryContent.classList.add('is-animating');
moreStoryContent.style.height = '0px';
requestAnimationFrame(() => {
moreStoryContent.style.height = `${targetHeight}px`;
});
};
const closeStory = () => {
const currentHeight = moreStoryContent.scrollHeight;
moreStoryContent.style.height = `${currentHeight}px`;
moreStoryContent.classList.add('is-animating');
requestAnimationFrame(() => {
moreStoryContent.style.height = '0px';
});
};
moreStoryContent.addEventListener('transitionend', (event) => {
if (event.propertyName !== 'height') {
return;
}
moreStoryContent.classList.remove('is-animating');
if (isExpanded) {
moreStoryContent.style.height = 'auto';
} else {
moreStoryContent.classList.remove('visible');
moreStoryContent.style.height = '';
}
});
readMoreBtn.addEventListener('click', () => {
if (moreStoryContent.classList.contains('is-animating')) {
return;
}
isExpanded = !isExpanded;
applyStoryState(isExpanded);
if (isExpanded) {
openStory();
} else {
closeStory();
}
});
}
});
// --- Legacy form validation functions (can be kept for potential future use) ---
// Note: The main form submission logic is now handled via fetch in kontakt/index.html
function showError(input, message) {
const formControl = input.parentElement;
const errorDiv = formControl.querySelector('.error-message') || document.createElement('div');
errorDiv.className = 'error-message';
errorDiv.textContent = message;
if (!formControl.querySelector('.error-message')) {
formControl.appendChild(errorDiv);
}
formControl.classList.add('error');
}
function removeError(input) {
const formControl = input.parentElement;
const errorDiv = formControl.querySelector('.error-message');
if (errorDiv) {
formControl.removeChild(errorDiv);
}
formControl.classList.remove('error');
}
function isValidEmail(email) {
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
}
document.addEventListener('DOMContentLoaded', function() { const mobileMenuBtn = document.querySelector('.mobile-menu-btn'); const navLinks = document.querySelector('.nav-links'); let closeMobileMenu = () => {}; let resetMobileSubmenus = () => {}; const normalizePath = (value) => { if (!value) { return '/'; } let clean = value.split('?')[0].split('#')[0]; clean = clean.replace(/index\.html$/i, ''); clean = clean.replace(/\/+$/, ''); if (clean === '') { clean = '/'; } return clean; }; const applyActiveNavState = () => { const navRoot = document.querySelector('.nav-links'); if (!navRoot) { return; } navRoot.querySelectorAll('a.active, .dropbtn.active').forEach(el => { el.classList.remove('active'); }); const currentPath = normalizePath(window.location.pathname); const navAnchors = navRoot.querySelectorAll('a[href]'); let matchedLink = null; navAnchors.forEach(anchor => { const href = anchor.getAttribute('href'); if (!href || href.startsWith('http') || href.startsWith('mailto:') || href.startsWith('tel:') || href.startsWith('#')) { return; } const linkPath = normalizePath(href); if (linkPath === currentPath) { matchedLink = anchor; } }); if (!matchedLink) { return; } matchedLink.classList.add('active'); const highlightDropdownParents = (element) => { let parentContent = element.closest('.dropdown-submenu-content, .dropdown-content'); while (parentContent) { const trigger = parentContent.previousElementSibling; if (trigger && (trigger.tagName === 'A' || trigger.classList.contains('dropbtn'))) { trigger.classList.add('active'); } parentContent = parentContent.parentElement ? parentContent.parentElement.closest('.dropdown-submenu-content, .dropdown-content') : null; } }; highlightDropdownParents(matchedLink); const topLevelDropdown = matchedLink.closest('.dropdown'); if (topLevelDropdown) { const trigger = topLevelDropdown.querySelector('.dropbtn'); if (trigger) { trigger.classList.add('active'); } } }; if (mobileMenuBtn && navLinks) { resetMobileSubmenus = () => { navLinks.querySelectorAll('.dropdown-content, .dropdown-submenu-content').forEach(submenu => { submenu.style.display = 'none'; }); navLinks.querySelectorAll('.dropbtn, .dropdown-submenu > a').forEach(link => { link.classList.remove('active'); }); applyActiveNavState(); }; closeMobileMenu = () => { mobileMenuBtn.classList.remove('active'); navLinks.classList.remove('active'); document.body.classList.remove('no-scroll'); resetMobileSubmenus(); }; mobileMenuBtn.addEventListener('click', (event) => { event.stopPropagation(); const willOpen = !navLinks.classList.contains('active'); if (willOpen) { mobileMenuBtn.classList.add('active'); navLinks.classList.add('active'); document.body.classList.add('no-scroll'); resetMobileSubmenus(); } else { closeMobileMenu(); } }); } applyActiveNavState(); const dropdowns = document.querySelectorAll('.nav-links .dropdown-submenu > a, .nav-links .dropdown > .dropbtn'); dropdowns.forEach(item => { item.addEventListener('click', function(event) { if (window.innerWidth <= 768) { if (item.tagName === 'A') { event.preventDefault(); } event.stopPropagation(); const submenu = item.nextElementSibling; if (!submenu) { return; } const isTopLevelTrigger = item.classList.contains('dropbtn'); if (isTopLevelTrigger) { navLinks.querySelectorAll('.dropdown-content').forEach(panel => { if (panel !== submenu) { panel.style.display = 'none'; const trigger = panel.parentElement.querySelector('.dropbtn'); if (trigger) { trigger.classList.remove('active'); } panel.querySelectorAll('.dropdown-submenu-content').forEach(child => { child.style.display = 'none'; const childTrigger = child.parentElement.querySelector(':scope > a'); if (childTrigger) { childTrigger.classList.remove('active'); } }); } }); } else { const siblingsWrapper = item.parentElement && item.parentElement.parentElement; if (siblingsWrapper) { siblingsWrapper.querySelectorAll(':scope > .dropdown-submenu > .dropdown-submenu-content').forEach(panel => { if (panel !== submenu) { panel.style.display = 'none'; const trigger = panel.parentElement.querySelector(':scope > a'); if (trigger) { trigger.classList.remove('active'); } panel.querySelectorAll('.dropdown-submenu-content').forEach(child => { child.style.display = 'none'; const childTrigger = child.parentElement.querySelector(':scope > a'); if (childTrigger) { childTrigger.classList.remove('active'); } }); } }); } } const shouldOpen = submenu.style.display !== 'block'; if (shouldOpen) { submenu.style.display = 'block'; item.classList.add('active'); submenu.querySelectorAll('.dropdown-submenu-content').forEach(child => { child.style.display = 'none'; const childTrigger = child.parentElement.querySelector(':scope > a'); if (childTrigger) { childTrigger.classList.remove('active'); } }); } else { submenu.style.display = 'none'; item.classList.remove('active'); submenu.querySelectorAll('.dropdown-submenu-content').forEach(child => { child.style.display = 'none'; const childTrigger = child.parentElement.querySelector(':scope > a'); if (chLine truncated
+15 -5
View File
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kdo sem - Prosberry</title>
<meta name="description" content="Spoznajte Amro Kurešepi Zulji, ustanoviteljico Prosberry. Odkrijte njeno osebno zgodbo, izkušnje z večjezičnostjo in strast do podpore posameznikom pri učenju jezikov in medkulturnem razumevanju.">
<meta name="keywords" content="Amra Kurešepi Zulji, Prosberry, o meni, medkulturna mediatorka, profesorica angleščine, osebna rast, zgodba o uspehu">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/kdo-sem/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="../css/style.css">
<link rel="stylesheet" href="../css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -133,7 +144,7 @@
<div class="image-frame">
<picture>
<source srcset="../assets/images/kdo-sem-fotografija.webp" type="image/webp">
<img src="../assets/images/kdo-sem-fotografija.jpg" alt="Amra Kurešepi Zulji">
<img src="../assets/images/kdo-sem-fotografija.jpg" alt="Amra Kurešepi Zulji" loading="lazy" decoding="async" width="1600" height="900">
</picture>
</div>
</div>
@@ -195,9 +206,8 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="../js/main.js"></script>
<script src="../js/animations.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const toggles = document.querySelectorAll('.about-accordion-toggle');
+15 -5
View File
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kontakt - Prosberry</title>
<meta name="description" content="Stopite v stik z Prosberry za tečaje angleščine, medkulturno posredovanje ali delavnice. Izpolnite kontaktni obrazec ali nas pokličite in z veseljem vam bomo pomagali.">
<meta name="keywords" content="kontakt, Prosberry, Amra Kurešepi Zulji, tečaji angleščine, medkulturno posredovanje, delavnice, povpraševanje">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/kontakt/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -194,9 +205,8 @@
</div>
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// --- Form Submission Logic ---
+16
View File
@@ -0,0 +1,16 @@
import re
with open("/home/mark/prosberry/js/main.js", "r") as f:
js_content = f.read()
# Remove single-line comments
js_content = re.sub(r"//.*", "", js_content)
# Remove multi-line comments
js_content = re.sub(r"/\*.*?\*/", "", js_content, flags=re.DOTALL)
# Remove newlines and extra whitespace
js_content = re.sub(r"\s+", " ", js_content)
js_content = js_content.strip()
with open("/home/mark/prosberry/js/main.js", "w") as f:
f.write(js_content)
+229
View File
@@ -0,0 +1,229 @@
import os
import argparse
import shutil
from PIL import Image
# --- Konfiguracija skripte za projekt "Hermina" ---
# Predpostavka: ta skripta se nahaja v korenski mapi projekta.
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
# Pot do mape, kjer se nahajajo slike, ki jih želimo optimizirati.
IMAGES_DIR_PATH = os.path.join("assets", "images")
# Ime podmape znotraj IMAGES_DIR_PATH, kamor se bodo shranile originalne slike.
ORIGINAL_IMAGES_SUBDIR_NAME = "original"
# Mape, ki jih želimo PREGLEDATI za posodobitev referenc na slike.
# '.' pomeni, da začnemo v korenski mapi in pregledamo vse podmape.
DIRECTORIES_TO_SCAN = ['.']
# Mape, ki jih želimo IZKLJUČITI iz pregledovanja (za hitrejše delovanje in varnost).
# Skripta ne bo iskala referenc v teh mapah.
DIRECTORIES_TO_EXCLUDE_FROM_SCAN = ['.git', '.gitea', '.vscode', '__pycache__']
# Končnice datotek, v katerih iščemo in posodabljamo reference na slike.
FILE_EXTENSIONS_TO_UPDATE = ['.html', '.css', '.js']
# Nastavitve optimizacije
WEBP_QUALITY = 85 # Kakovost kompresije za WebP (0-100). Višje = boljša kvaliteta, večja datoteka.
MAX_IMAGE_DIMENSION = 1920 # Slike, večje od te dimenzije (širina ali višina), bodo pomanjšane. 0 za izklop.
# Končnice slik, ki jih želimo optimizirati.
IMAGE_EXTENSIONS_TO_OPTIMIZE = ['.jpg', '.jpeg', '.png']
# Imena datotek, ki jih želimo preskočiti pri optimizaciji (npr. logotipi, ikone).
EXCLUDE_FILES_FROM_OPTIMIZATION = [
'favicon.ico'
# Dodajte imena drugih datotek po potrebi, npr. 'logo.png'
]
# --- Pomožne funkcije (večinoma nespremenjene) ---
def optimize_image(image_path, output_path, quality, max_dim, dry_run=False):
"""
Naloži sliko, jo po potrebi pomanjša, optimizira in pretvori v WebP format.
"""
try:
with Image.open(image_path) as img:
# Pretvorba slik s paleto (kot so nekatere PNG) v RGBA za ohranitev prosojnosti.
if img.mode in ('P', 'LA'):
img = img.convert("RGBA")
if max_dim > 0 and (img.width > max_dim or img.height > max_dim):
print(f" Pomanjšujem sliko {os.path.basename(image_path)} iz {img.width}x{img.height} ...", end="")
img.thumbnail((max_dim, max_dim), Image.Resampling.LANCZOS)
print(f" na {img.width}x{img.height}")
else:
print(f" Obdelujem sliko {os.path.basename(image_path)} ({img.width}x{img.height})...", end="")
if not dry_run:
img.save(output_path, "webp", quality=quality, method=6)
print(f" Shrani v {os.path.basename(output_path)} (kvaliteta: {quality}).")
else:
print(f" DRY RUN: Shranil bi v {os.path.basename(output_path)} (kvaliteta: {quality}).")
return True
except FileNotFoundError:
print(f" Napaka: Izvorna slika '{image_path}' ni najdena.")
return False
except Exception as e:
print(f" Napaka pri optimizaciji slike '{image_path}': {e}")
return False
def update_file_references(file_path, old_filename, new_filename, dry_run=False):
"""
V dani datoteki zamenja vse pojavitve starega imena slike z novim.
"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
except Exception:
# Ignoriramo binarne ali neberljive datoteke
return False
if old_filename in content:
updated_content = content.replace(old_filename, new_filename)
if not dry_run:
try:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(updated_content)
print(f" Posodobljene reference v: '{os.path.relpath(file_path, PROJECT_ROOT)}'")
return True
except Exception as e:
print(f" Napaka pri zapisovanju v '{file_path}': {e}")
return False
else:
print(f" DRY RUN: Posodobil bi reference v: '{os.path.relpath(file_path, PROJECT_ROOT)}'")
return True
return False
def find_files_to_update(scan_dirs, exclude_dirs):
"""
Rekurzivno poišče vse datoteke z ustreznimi končnicami, pri tem pa ignorira izključene mape.
"""
found_files = []
for directory in scan_dirs:
scan_path = os.path.join(PROJECT_ROOT, directory)
for dirpath, dirnames, filenames in os.walk(scan_path):
# Učinkovit način za izključitev map: odstranimo jih iz seznama za nadaljnje pregledovanje
dirnames[:] = [d for d in dirnames if d not in exclude_dirs]
for filename in filenames:
if any(filename.endswith(ext) for ext in FILE_EXTENSIONS_TO_UPDATE):
found_files.append(os.path.join(dirpath, filename))
return sorted(list(set(found_files)))
# --- Glavna funkcija ---
def main():
parser = argparse.ArgumentParser(description="Optimizira slike v WebP in posodobi reference v projektu.")
parser.add_argument("--dry-run", action="store_true", help="Prikaže, katere spremembe bi se zgodile, a jih ne izvede.")
args = parser.parse_args()
images_full_path = os.path.join(PROJECT_ROOT, IMAGES_DIR_PATH)
original_images_full_path = os.path.join(images_full_path, ORIGINAL_IMAGES_SUBDIR_NAME)
# Dodamo mapo z originali v seznam za izključitev, da ne skeniramo še tam.
DIRECTORIES_TO_EXCLUDE_FROM_SCAN.append(ORIGINAL_IMAGES_SUBDIR_NAME)
if not os.path.isdir(images_full_path):
print(f"Napaka: Mapa s slikami '{images_full_path}' ne obstaja. Preverite pot v konfiguraciji.")
return
if not args.dry_run:
os.makedirs(original_images_full_path, exist_ok=True)
print(f"Mapa za originale: '{original_images_full_path}'")
else:
print(f"DRY RUN: Mapa za originale bi bila '{original_images_full_path}'.")
optimized_images_map = []
print("\n--- FAZA 1: OPTIMIZACIJA SLIK ---")
for dirpath, dirnames, filenames in os.walk(images_full_path):
# preskoči mapo z originali, če že obstaja
dirnames[:] = [
d for d in dirnames
if os.path.relpath(os.path.join(dirpath, d), images_full_path) != ORIGINAL_IMAGES_SUBDIR_NAME
]
for filename in filenames:
file_path = os.path.join(dirpath, filename)
if not os.path.isfile(file_path):
continue
name, ext = os.path.splitext(filename)
ext = ext.lower()
if filename in EXCLUDE_FILES_FROM_OPTIMIZATION:
print(f"- Preskakujem izključeno datoteko: '{filename}'")
continue
if ext in IMAGE_EXTENSIONS_TO_OPTIMIZE:
new_filename = f"{name}.webp"
new_file_path = os.path.join(dirpath, new_filename)
rel_dir = os.path.relpath(dirpath, images_full_path)
rel_dir = "" if rel_dir == "." else rel_dir
old_rel_path = os.path.join(rel_dir, filename) if rel_dir else filename
new_rel_path = os.path.join(rel_dir, new_filename) if rel_dir else new_filename
old_rel_path = old_rel_path.replace(os.sep, "/")
new_rel_path = new_rel_path.replace(os.sep, "/")
# Preveri, če WebP verzija že obstaja in je novejša
if os.path.exists(new_file_path) and os.path.getmtime(new_file_path) > os.path.getmtime(file_path):
print(f"- WebP '{new_rel_path}' že obstaja in je posodobljen. Preskakujem optimizacijo.")
optimized_images_map.append({'old': filename, 'new': new_filename, 'old_path': old_rel_path, 'new_path': new_rel_path})
continue
if optimize_image(file_path, new_file_path, WEBP_QUALITY, MAX_IMAGE_DIMENSION, args.dry_run):
optimized_images_map.append({'old': filename, 'new': new_filename, 'old_path': old_rel_path, 'new_path': new_rel_path})
if not args.dry_run:
try:
destination_dir = os.path.join(original_images_full_path, rel_dir) if rel_dir else original_images_full_path
os.makedirs(destination_dir, exist_ok=True)
shutil.move(file_path, os.path.join(destination_dir, filename))
print(f" Original '{old_rel_path}' premaknjen v '{ORIGINAL_IMAGES_SUBDIR_NAME}/'.")
except Exception as e:
print(f" NAPAKA pri premikanju '{old_rel_path}': {e}")
else:
print(f" DRY RUN: Original '{old_rel_path}' bi bil premaknjen v '{ORIGINAL_IMAGES_SUBDIR_NAME}/'.")
if not optimized_images_map:
print("\nNi bilo najdenih novih slik za optimizacijo.")
print("\n--- FAZA 2: POSODABLJANJE REFERENC V PROJEKTU ---")
files_to_scan = find_files_to_update(DIRECTORIES_TO_SCAN, DIRECTORIES_TO_EXCLUDE_FROM_SCAN)
if not files_to_scan:
print("Ni najdenih .html, .css ali .js datotek za pregled.")
else:
print(f"Najdenih {len(files_to_scan)} datotek za pregled...")
updated_files_count = 0
for file_path in files_to_scan:
file_was_updated = False
for img_info in optimized_images_map:
replaced = False
if update_file_references(file_path, img_info['old_path'], img_info['new_path'], args.dry_run):
replaced = True
# za nazaj združljivost: če je v datoteki samo ime brez poti
if update_file_references(file_path, img_info['old'], img_info['new'], args.dry_run):
replaced = True
if replaced:
file_was_updated = True
if file_was_updated:
updated_files_count += 1
print(f"\nPregledanih je bilo {len(files_to_scan)} datotek.")
print(f"Posodobljenih je bilo {updated_files_count} datotek.")
print("\n--- SKRIPTA JE ZAKLJUČILA Z DELOM ---")
if __name__ == "__main__":
main()
+14 -5
View File
@@ -4,6 +4,16 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pogosta vprašanja - Prosberry</title>
<meta name="description" content="Poiščite odgovore na pogosta vprašanja o medkulturnem posredovanju, delavnicah in sodelovanju z Prosberry. Izvedite več o naših storitvah in kako vam lahko pomagamo.">
<meta name="keywords" content="pogosta vprašanja, FAQ, medkulturno posredovanje, delavnice, Prosberry, Amra Kurešepi Zulji, vprašanja in odgovori">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +24,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -253,9 +263,8 @@
</div>
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const faqItems = document.querySelectorAll('.faq-item');
+15 -5
View File
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Politika zasebnosti - Prosberry</title>
<meta name="description" content="Preberite politiko zasebnosti podjetja PROSBERRY, Amra Kurešepi Zulji s.p. Izvedite več o varovanju vaših osebnih podatkov, uporabi kontaktnega obrazca, pogodbeni obdelavi in hrambi podatkov.">
<meta name="keywords" content="politika zasebnosti, varovanje podatkov, GDPR, Prosberry, Amra Kurešepi Zulji, osebni podatki, piškotki">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/politika-zasebnosti/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -206,8 +217,7 @@
</div>
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
+14 -5
View File
@@ -4,6 +4,16 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ponudba - Prosberry</title>
<meta name="description" content="Odkrijte celotno ponudbo Prosberry: tečaji angleščine, albanščine in slovenščine za vse nivoje ter medkulturno posredovanje za institucije, šole in priseljence. Učenje in podpora prilagojena vašim potrebam.">
<meta name="keywords" content="ponudba, tečaji angleščine, učenje albanščine, tečaji slovenščine, medkulturno posredovanje, inštrukcije, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="preconnect" href="https://unpkg.com" />
<link rel="dns-prefetch" href="https://fonts.googleapis.com" />
<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
<link rel="dns-prefetch" href="https://unpkg.com" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" />
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css" />
<link rel="stylesheet" href="/css/animations.css" />
@@ -14,8 +24,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -254,8 +264,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
+5
View File
@@ -0,0 +1,5 @@
User-agent: *
Allow: /
Disallow: /kontakt/process_form.php
Sitemap: https://www.prosberry.si/sitemap.xml
+59
View File
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.prosberry.si/kdo-sem/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/politika-zasebnosti/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/skupaj-za-vkljucevanje/delavnica-vrtec-novi-zacetki/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/skupaj-za-vkljucevanje/delavnica-od-tujca-do-sosolca/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/skupaj-za-vkljucevanje/delavnica-sola-in-starsi/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/skupaj-za-vkljucevanje/delavnica-zakaj-znati-slovensko/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/skupaj-za-vkljucevanje/medkulturno-posredovanje/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/kontakt/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/delavnice/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/cene-in-sodelovanja/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/pogosta-vprasanja/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/ponudba/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/</loc>
<lastmod>2025-11-04</lastmod>
</url>
<url>
<loc>https://www.prosberry.si/cene-in-reference/</loc>
<lastmod>2025-11-04</lastmod>
</url>
</urlset>
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Delavnica: Od tujca do sošolca - Prosberry</title>
<meta name="description" content="Delavnica 'Od tujca do sošolca' ponuja učiteljem učinkovite strategije za motivacijo in vključevanje učencev priseljencev. Spoznajte, kako krepiti kulturno občutljivost in premagovati jezikovne ovire v razredu.">
<meta name="keywords" content="delavnica za učitelje, učenci priseljenci, motivacija učencev, kulturna občutljivost, jezikovne ovire, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/skupaj-za-vkljucevanje/delavnica-od-tujca-do-sosolca/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -191,7 +202,7 @@
</div>
<div class="workshop-image" data-aos="fade-left">
<div class="workshop-image-frame">
<img src="/assets/images/vkljucevanje/delavnica-ucitelji.png" alt="Ilustracija učiteljice, ki pomaga učencem različnih kultur">
<img src="/assets/images/vkljucevanje/delavnica-ucitelji.webp" alt="Ilustracija učiteljice, ki pomaga učencem različnih kultur" loading="lazy" decoding="async" width="1536" height="1024">
</div>
</div>
</div>
@@ -214,8 +225,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Delavnica: Šola in starši priseljenci - Prosberry</title>
<meta name="description" content="Delavnica 'Šola in starši priseljenci' pomaga staršem razumeti slovenski šolski sistem, njihove pravice in odgovornosti ter učinkovito sodelovati s šolo za podporo otrok. Spoznajte cilje, trajanje in ceno delavnice.">
<meta name="keywords" content="delavnica šola, starši priseljenci, sodelovanje s šolo, slovenski šolski sistem, podpora otrokom, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/skupaj-za-vkljucevanje/delavnica-sola-in-starsi/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -190,7 +201,7 @@
</div>
<div class="workshop-image" data-aos="fade-left">
<div class="workshop-image-frame">
<img src="/assets/images/vkljucevanje/delavnica-starsi-sola.png" alt="Ilustracija sestanka staršev in učiteljev">
<img src="/assets/images/vkljucevanje/delavnica-starsi-sola.webp" alt="Ilustracija sestanka staršev in učiteljev" loading="lazy" decoding="async" width="1536" height="1024">
</div>
</div>
</div>
@@ -213,8 +224,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Delavnica: Skupaj gradimo nove začetke - Prosberry</title>
<meta name="description" content="Delavnica 'Skupaj gradimo nove začetke' pomaga vrtcem in staršem priseljencem vzpostaviti zaupanje, razumeti delovanje vrtca ter olajšati vključevanje otrok v novo okolje. Spoznajte cilje, trajanje in ceno delavnice.">
<meta name="keywords" content="delavnica vrtec, starši priseljenci, vključevanje otrok, novi začetki, medkulturno razumevanje, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/skupaj-za-vkljucevanje/delavnica-vrtec-novi-zacetki/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -190,7 +201,7 @@
</div>
<div class="workshop-image" data-aos="fade-left">
<div class="workshop-image-frame">
<img src="/assets/images/vkljucevanje/delavnica-starsi-vrtec.png" alt="Ilustracija srečanja staršev v vrtcu">
<img src="/assets/images/vkljucevanje/delavnica-starsi-vrtec.webp" alt="Ilustracija srečanja staršev v vrtcu" loading="lazy" decoding="async" width="1536" height="1024">
</div>
</div>
</div>
@@ -213,8 +224,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
@@ -4,6 +4,16 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Delavnica: Zakaj se splača znati slovensko? - Prosberry</title>
<meta name="description" content="Interaktivna delavnica 'Zakaj se splača znati slovensko?' za učence priseljence. Spoznajte pomen slovenskega jezika za šolski uspeh, vsakdanje življenje in gradnjo samozavesti. Delavnica je prilagojena skupini in poteka v šoli.">
<meta name="keywords" content="delavnica za učence, učenje slovenščine, učenci priseljenci, vključevanje, samozavest, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +24,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -189,7 +199,7 @@
</div>
<div class="workshop-image" data-aos="fade-left">
<div class="workshop-image-frame">
<img src="/assets/images/vkljucevanje/delavnica-ucenci.png" alt="Ilustracija učenja slovenskega jezika">
<img src="/assets/images/vkljucevanje/delavnica-ucenci.webp" alt="Ilustracija učenja slovenskega jezika" loading="lazy" decoding="async" width="1536" height="1024">
</div>
</div>
</div>
@@ -212,8 +222,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>
@@ -4,6 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Medkulturno posredovanje - Prosberry</title>
<meta name="description" content="Medkulturno posredovanje Prosberry pomaga pri razumevanju in reševanju nesporazumov med posamezniki in skupinami z različnimi kulturnimi ozadji. Spoznajte individualne in skupinske oblike posredovanja ter potek sodelovanja.">
<meta name="keywords" content="medkulturno posredovanje, kulturne razlike, reševanje konfliktov, individualno posredovanje, skupinsko posredovanje, Prosberry, Amra Kurešepi Zulji">
<meta name="author" content="Amra Kurešepi Zulji">
<link rel="canonical" href="https://www.prosberry.si/skupaj-za-vkljucevanje/medkulturno-posredovanje/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://unpkg.com">
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap">
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/animations.css">
@@ -14,8 +25,8 @@
<div class="logo">
<a href="/">
<picture>
<source srcset="/assets/images/logo.png" type="image/webp">
<img src="/assets/images/logo.png" alt="Prosberry Logo">
<source srcset="/assets/images/logo.webp" type="image/webp">
<img src="/assets/images/logo.webp" alt="Prosberry Logo" width="1500" height="500" decoding="async">
</picture>
</a>
</div>
@@ -148,8 +159,8 @@
<div class="mediation-detail-container">
<div class="mediation-detail-image" data-aos="fade-up">
<picture>
<source srcset="/assets/images/individualno.jpeg" type="image/jpeg">
<img src="/assets/images/individualno.jpeg" alt="Individualno medkulturno posredovanje">
<source srcset="/assets/images/individualno.webp" type="image/webp">
<img src="/assets/images/individualno.webp" alt="Individualno medkulturno posredovanje" loading="lazy" decoding="async" width="1248" height="832">
</picture>
</div>
<div class="mediation-detail-text" data-aos="fade-up" data-aos-delay="120">
@@ -169,8 +180,8 @@
</div>
<div class="mediation-detail-image" data-aos="fade-up" data-aos-delay="120">
<picture>
<source srcset="/assets/images/skupinsko.jpeg" type="image/jpeg">
<img src="/assets/images/skupinsko.jpeg" alt="Skupinsko medkulturno posredovanje">
<source srcset="/assets/images/skupinsko.webp" type="image/webp">
<img src="/assets/images/skupinsko.webp" alt="Skupinsko medkulturno posredovanje" loading="lazy" decoding="async" width="1170" height="777">
</picture>
</div>
</div>
@@ -257,8 +268,7 @@
</div>
</footer>
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script src="/js/main.js"></script>
<script src="/js/animations.js"></script>
<script src="https://unpkg.com/aos@next/dist/aos.js" defer></script>
<script src="/js/main.js" defer></script>
</body>
</html>