This commit is contained in:
2026-02-14 22:48:34 +01:00
parent 613f56e21b
commit 28b5061650
7 changed files with 523 additions and 10 deletions

View File

@@ -69,6 +69,48 @@ const Toast = (() => {
return { show };
})();
/* Equalize steps+image pattern column heights */
(() => {
const collectColumns = (layout) => {
const inner = layout.querySelector(":scope > .wp-block-group__inner-container");
if (inner) return Array.from(inner.children);
return Array.from(layout.children);
};
const hasTiles = (el) => !!el.querySelector(".grid.grid--4, .wp-block-group.grid.grid--4");
const hasImage = (el) => !!el.querySelector(".wp-block-image img, img");
const equalize = () => {
const layouts = $$(".section .grid.grid--2, .wp-block-group.section .wp-block-group.grid.grid--2");
layouts.forEach((layout) => {
const columns = collectColumns(layout).filter((el) => el.nodeType === 1);
if (columns.length < 2) return;
const tilesCol = columns.find(hasTiles);
const imageCol = columns.find((el) => el !== tilesCol && hasImage(el));
if (!tilesCol || !imageCol) return;
tilesCol.style.minHeight = "";
imageCol.style.minHeight = "";
const h = Math.max(tilesCol.offsetHeight, imageCol.offsetHeight);
if (!h) return;
tilesCol.style.minHeight = `${h}px`;
imageCol.style.minHeight = `${h}px`;
});
};
let raf = 0;
const schedule = () => {
if (raf) cancelAnimationFrame(raf);
raf = requestAnimationFrame(equalize);
};
window.addEventListener("load", schedule);
window.addEventListener("resize", schedule);
schedule();
})();
/* Clipboard copy helper */
async function copyText(text, label="Kopiert.") {
try {

View File

@@ -1,7 +1,23 @@
<?php if (!defined('ABSPATH')) exit; ?>
<footer class="footer">
<span class="muted"><?php echo esc_html(get_bloginfo('name')); ?> · Theme v<?php echo esc_html(wp_get_theme()->get('Version')); ?></span>
<div class="footer__inner">
<nav class="footer__nav" aria-label="<?php esc_attr_e('Footer Navigation', 'juconnect'); ?>">
<?php if (has_nav_menu('footer')): ?>
<div class="navgroup__title"><?php esc_html_e('Quick Links', 'juconnect'); ?></div>
<?php endif; ?>
<?php
wp_nav_menu([
'theme_location' => 'footer',
'container' => false,
'menu_class' => 'footer__menu',
'fallback_cb' => false,
'depth' => 1,
]);
?>
</nav>
<span class="muted"><?php echo esc_html(get_bloginfo('name')); ?> - Theme v<?php echo esc_html(wp_get_theme()->get('Version')); ?></span>
</div>
</footer>
</main>
</div>

View File

@@ -19,9 +19,17 @@ function juconnect_setup() {
add_action('after_setup_theme', 'juconnect_setup');
function juconnect_assets() {
$ver = wp_get_theme()->get('Version');
wp_enqueue_style('juconnect-style', get_stylesheet_uri(), [], $ver);
wp_enqueue_script('juconnect-app', get_template_directory_uri().'/assets/js/app.js', [], $ver, true);
$theme_ver = wp_get_theme()->get('Version');
$style_ver = filemtime(get_stylesheet_directory() . '/style.css');
$script_ver = filemtime(get_template_directory() . '/assets/js/app.js');
if (!$style_ver) {
$style_ver = $theme_ver;
}
if (!$script_ver) {
$script_ver = $theme_ver;
}
wp_enqueue_style('juconnect-style', get_stylesheet_uri(), [], $style_ver);
wp_enqueue_script('juconnect-app', get_template_directory_uri().'/assets/js/app.js', [], $script_ver, true);
}
add_action('wp_enqueue_scripts', 'juconnect_assets');
@@ -68,7 +76,7 @@ function juconnect_render_sidenav_nav() {
// Add styleguide classes to WP menus
function juconnect_nav_link_attributes($atts, $item, $args, $depth){
if (!empty($args->theme_location) && $args->theme_location === 'primary'){
if (!empty($args->theme_location) && in_array($args->theme_location, ['primary', 'footer'], true)){
$existing = isset($atts['class']) ? $atts['class'].' ' : '';
$atts['class'] = $existing . 'navlink';
}

View File

@@ -339,7 +339,14 @@ a{ color: inherit; }
}
/* Sections */
.section{ margin: 0 0 var(--s6) 0; }
.section{
margin: 0 0 var(--s6) 0;
padding-bottom: var(--s4);
}
.wp-block-group.section{
padding-bottom: var(--s4);
margin-bottom: var(--s4) !important;
}
.section__head{ margin-bottom: var(--s4); }
.main .wp-block-group.section{
width: 100%;
@@ -355,6 +362,45 @@ a{ color: inherit; }
padding-top: var(--s4);
border-top: 1px solid var(--line);
}
.footer__inner{
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: var(--s3);
flex-wrap: wrap;
}
.footer__nav{
min-width: 0;
}
.footer__menu{
list-style: none;
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 6px;
margin: 0;
padding: 0;
}
.footer__menu > li{
margin: 0;
}
.footer__menu a.navlink{
padding: 8px 10px;
border-radius: 10px;
}
.footer__menu .current-menu-item > a.navlink,
.footer__menu .current-page-ancestor > a.navlink{
background: rgba(29,53,79,.10);
border-color: rgba(29,53,79,.18);
color: var(--text);
}
@media (max-width: 760px){
.footer__inner{
flex-direction: column;
align-items: flex-start;
}
}
/* Typography helpers */
.h1{ font-size: var(--fs-1); line-height: var(--lh-tight); margin: 0 0 var(--s2) 0; }
@@ -381,6 +427,77 @@ a{ color: inherit; }
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container{ grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
.wp-block-group.grid.grid--3 > .wp-block-group__inner-container{ grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
.wp-block-group.grid.grid--4 > .wp-block-group__inner-container{ grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container{
align-items: stretch !important;
}
.grid.grid--2{
align-items: stretch !important;
}
.grid.grid--2 > .wp-block-group,
.grid.grid--2 > .card{
height: 100% !important;
align-self: stretch !important;
}
.grid.grid--2 > .wp-block-group{
display: flex;
flex-direction: column;
}
.grid.grid--2 > .wp-block-group > .grid{
flex: 1;
}
.grid.grid--4 > .card{
height: 100%;
display: flex;
flex-direction: column;
}
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container > .wp-block-group{
display: flex;
flex-direction: column;
height: 100% !important;
align-self: stretch !important;
}
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container > .wp-block-group > .wp-block-group__inner-container{
display: flex;
flex-direction: column;
height: 100% !important;
}
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container > .wp-block-group > .wp-block-group.grid{
flex: 1;
}
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container > .wp-block-group > .wp-block-group__inner-container > .wp-block-group.grid{
flex: 1;
}
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container > .wp-block-group > .wp-block-group__inner-container > .wp-block-group.grid > .wp-block-group__inner-container{
height: 100%;
}
.wp-block-group.grid.grid--4 > .wp-block-group__inner-container > .card{
height: 100%;
display: flex;
flex-direction: column;
}
.wp-block-group.grid.grid--2 > .wp-block-group__inner-container > .card{
height: 100% !important;
align-self: stretch !important;
}
.main .wp-block-group.section + .wp-block-group.section{
margin-top: var(--s4);
}
.main .wp-block-group.section + .section{
margin-top: var(--s4);
}
/* Fallback for pages built with core Columns instead of grid classes */
.section .wp-block-columns{
align-items: stretch !important;
}
.section .wp-block-column{
display: flex;
flex-direction: column;
}
.section .wp-block-column > .wp-block-group,
.section .wp-block-column > .card{
height: 100% !important;
}
.section > .grid + .grid{ margin-top: var(--s4); }
.section > .grid + .card,
.section > .card + .grid{ margin-top: var(--s4); }
@@ -919,7 +1036,7 @@ a{ color: inherit; }
.topnav__submenu{
list-style:none;
position:absolute;
top: calc(100% + 8px);
top: 100%;
right: 0;
min-width: 240px;
margin: 0;
@@ -930,7 +1047,8 @@ a{ color: inherit; }
box-shadow: var(--shadow);
display:none;
}
.topnav__list li:hover > .topnav__submenu{ display:block; }
.topnav__list li:hover > .topnav__submenu,
.topnav__list li:focus-within > .topnav__submenu{ display:block; }
.topnav__submenu a.navlink{
display:flex;
width: 100%;
@@ -938,6 +1056,24 @@ a{ color: inherit; }
border-radius: 12px;
}
/* Touch devices don't have hover; expose submenus inline for reliable access */
@media (hover: none){
.topnav__list > li{ width: 100%; }
.topnav__list a.navlink{ width: 100%; }
.topnav__submenu{
position: static;
display: block;
min-width: 0;
margin-top: 4px;
padding: 4px 0 0 12px;
border: 0;
border-left: 1px solid var(--line);
border-radius: 0;
background: transparent;
box-shadow: none;
}
}
/* Hide original sidenav if any page still contains it */
.sidenav{ display:none !important; }
@@ -989,7 +1125,7 @@ a{ color: inherit; }
.wp-block-buttons .wp-block-button{ margin: 0; }
/* Groups: don't add unexpected margins that break cards/grids */
.wp-block-group{ margin: 0; }
.wp-block-group:not(.section){ margin: 0; }
/* Images: prevent WP default inline styles from breaking rounded cards */
.wp-block-image img{ max-width: 100%; height: auto; }