diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 22c2a35..ae56cd0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========= +1.0.9 (Unreleased) +------------------ +- Enh: Competition view auto-scrolls to the last finished match above a live match. +- Enh: "Show all tips" modal reuses the match card header instead of a separate pairing/result line. +- Fix: Team flag badges drop their white background, removing the white box around flags on live match cards. + 1.0.8 (June 12, 2026) --------------------- - Fix: Undrawn knockout fixtures no longer mark the sync as failed, which had blocked point calculation for the whole competition. diff --git a/resources/css/kickoff.css b/resources/css/kickoff.css index a659cf9..a0e2f2d 100644 --- a/resources/css/kickoff.css +++ b/resources/css/kickoff.css @@ -154,6 +154,11 @@ background: #fff; transition: border-color 0.2s; } +/* Fixed area above the scrollable modal body holding the match-card preview. */ +.kickoff-modal-subheader { + padding: 1rem 1rem 0; +} +.kickoff-modal-subheader .kickoff-match-card { margin-bottom: 1rem; } .kickoff-match-card.is-tipped { border-left: 3px solid #28a745; } .kickoff-match-card-meta { display: grid; grid-template-columns: 1fr auto 1fr; @@ -212,6 +217,9 @@ outline: 1px solid rgba(0, 0, 0, 0.12); outline-offset: -1px; } +.kickoff-team-badge--flag img { + background: transparent; +} .kickoff-match-score { display: flex; align-items: center; gap: 4px; flex-shrink: 0; diff --git a/views/competition/_detail_modal.php b/views/competition/_detail_modal.php index 8ded7da..7c6a11f 100644 --- a/views/competition/_detail_modal.php +++ b/views/competition/_detail_modal.php @@ -12,8 +12,20 @@ var modalEl = document.getElementById('kickoff-detail-modal'); if (!modalEl) return; var \$body = \$(modalEl).find('.modal-body'); + var \$subheader = \$(modalEl).find('[data-modal-subheader]'); var loadingHtml = '

'; + // The loaded content may carry a [data-modal-preview] block (e.g. the + // match card on the tips modal). Lift it out of the scrollable body + // into the fixed sub-header so it stays pinned above the scroll. + function relocatePreview() { + \$subheader.empty().hide(); + var \$preview = \$body.find('[data-modal-preview]').first(); + if (\$preview.length) { + \$subheader.append(\$preview).show(); + } + } + // Rebind on every script run (HumHub Pjax can re-execute registered JS). // The namespaced .off() is the cheap guard against accumulating handlers. \$(document).off('click.kickoffDetailModal'); @@ -23,12 +35,14 @@ var titleAttr = \$(this).attr('data-modal-title'); if (!url) return; \$body.html(loadingHtml); + \$subheader.empty().hide(); if (titleAttr) { \$(modalEl).find('.modal-title').text(titleAttr); } var isShown = modalEl.classList.contains('show'); \$.get(url).done(function (html) { \$body.html(html); + relocatePreview(); }).fail(function () { \$body.html('

Could not load.

'); }); @@ -58,6 +72,7 @@ + diff --git a/views/competition/_match_card.php b/views/competition/_match_card.php index 2b43593..ac681fb 100644 --- a/views/competition/_match_card.php +++ b/views/competition/_match_card.php @@ -11,6 +11,9 @@ /** @var bool $hasTips */ /** @var bool $showOtherTipsLink */ /** @var \humhub\modules\kickoff\models\Competition $competition */ +/** @var bool $preview Render only the part above the footer (no dashed-line footer). */ + +$preview = $preview ?? false; $home = $game->homeTeam; $away = $game->awayTeam; @@ -60,7 +63,7 @@ } ?> -
+
@@ -143,7 +146,7 @@ class="form-control form-control-sm text-center kickoff-score-input" $hasFooterVenue = !empty($game->venue); $hasFooterActions = !empty($showOtherTipsLink); ?> - +