Merge branch 'master' into new-bottom-app-bar

This commit is contained in:
Jan Faracik 2025-07-18 17:23:00 +01:00 committed by GitHub
commit d9dd39d020
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 33 additions and 51 deletions

View File

@ -1,6 +1,6 @@
FROM gitpod/workspace-full:latest
ARG JAVA_VERSION=21.0.6-tem
ARG MAVEN_VERSION=3.9.10
ARG MAVEN_VERSION=3.9.11
# Install Java 21, Maven and GitHub CLI
RUN bash -c ". /home/gitpod/.sdkman/bin/sdkman-init.sh && \
sdk install java ${JAVA_VERSION} && \

2
ath.sh
View File

@ -6,7 +6,7 @@ set -o xtrace
cd "$(dirname "$0")"
# https://github.com/jenkinsci/acceptance-test-harness/releases
export ATH_VERSION=6294.v8837063f315d
export ATH_VERSION=6300.v12732144c83f
if [[ $# -eq 0 ]]; then
export JDK=17

View File

@ -63,7 +63,7 @@ THE SOFTWARE.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>6.2.8</version>
<version>6.2.9</version>
<type>pom</type>
<scope>import</scope>
</dependency>

View File

@ -29,7 +29,7 @@ THE SOFTWARE.
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<l:layout permissions="${app.MANAGE_AND_SYSTEM_READ}" title="${%System}" type="one-column">
<st:include page="sidepanel.jelly" />
<l:breadcrumb title="${%System}" />
<f:breadcrumb-config-outline title="${%System}" />
<l:main-panel>
<j:set var="readOnlyMode" value="${!h.hasPermission(app.MANAGE)}"/>

View File

@ -32,5 +32,5 @@ THE SOFTWARE.
</st:attribute>
</st:documentation>
<l:breadcrumb title="${attrs.title?:'%configuration'}" id="inpage-nav" />
<l:breadcrumb title="${attrs.title?:'%configuration'}" id="inpage-nav" hasMenu="true" />
</j:jelly>

View File

@ -48,10 +48,10 @@ THE SOFTWARE.
<j:if test="${mode=='breadcrumbs'}">
<j:set var="hasLink" value="${attrs.href != null}" />
<li id="${attrs.id}" class="jenkins-breadcrumbs__list-item" data-type="breadcrumb-item" aria-current="${hasLink ? null : 'page'}">
<li id="${attrs.id}" class="jenkins-breadcrumbs__list-item" data-type="breadcrumb-item" aria-current="${hasLink ? null : 'page'}" data-has-menu="${attrs.hasMenu}">
<j:choose>
<j:when test="${!hasLink}">
<span>${attrs.title}</span>
<span class="${attrs.hasMenu ? 'hoverable-model-link' : ''}">${attrs.title}</span>
</j:when>
<j:otherwise>
<a href="${attrs.href}" class="${attrs.hasMenu ? 'hoverable-model-link' : ''} ${attrs.hasChildrenMenu ? 'hoverable-children-model-link' : ''}">

View File

@ -87,7 +87,7 @@ THE SOFTWARE.
<changelog.url>https://www.jenkins.io/changelog</changelog.url>
<!-- Bundled Remoting version -->
<remoting.version>3324.vea_eda_e98cd69</remoting.version>
<remoting.version>3327.v868139a_d00e0</remoting.version>
<spotbugs.effort>Max</spotbugs.effort>
<spotbugs.threshold>Medium</spotbugs.threshold>

View File

@ -93,7 +93,6 @@ function init() {
0,
function (e) {
e.setAttribute("autocomplete", "off");
e.dataset["hideOnClick"] = "false";
// form field with auto-completion support
e.style.position = "relative";
// otherwise menu won't hide on tab with nothing selected

View File

@ -5,12 +5,10 @@ import { toId } from "@/util/dom";
* sections on the page (if using <f:breadcrumb-config-outline />)
*/
function init() {
const inpageNavigationBreadcrumb = document.querySelector("#inpage-nav");
const inpageNavigationBreadcrumb = document.querySelector("#inpage-nav span");
if (inpageNavigationBreadcrumb) {
const chevron = document.createElement("li");
chevron.classList.add("children");
chevron.items = Array.from(
inpageNavigationBreadcrumb.items = Array.from(
document.querySelectorAll(
"form > div > .jenkins-section > .jenkins-section__title",
),
@ -18,8 +16,6 @@ function init() {
section.id = toId(section.textContent);
return { label: section.textContent, url: "#" + section.id };
});
inpageNavigationBreadcrumb.after(chevron);
}
}

View File

@ -38,13 +38,13 @@ function generateDropdowns() {
Utils.generateDropdown(
element,
(instance) => {
const href = element.href;
if (element.items) {
instance.setContent(Utils.generateDropdownItems(element.items));
return;
}
const href = element.href;
const hasModelLink = element.classList.contains(
"hoverable-model-link",
);
@ -105,7 +105,7 @@ function generateDropdowns() {
instance.loaded = true;
});
},
false,
element.items != null,
{
trigger: "mouseenter",
offset: [-16, 10],

View File

@ -22,8 +22,6 @@ function generateDropdown(element, callback, immediate, options = {}) {
{},
Templates.dropdown(),
{
hideOnClick:
element.dataset["hideOnClick"] !== "false" ? "toggle" : false,
onCreate(instance) {
const onload = () => {
if (instance.loaded) {
@ -31,34 +29,18 @@ function generateDropdown(element, callback, immediate, options = {}) {
}
document.addEventListener("click", (event) => {
const isClickInAnyDropdown =
!!event.target.closest("[data-tippy-root]");
const isClickOnReference = instance.reference.contains(
event.target,
);
// Don't close the dropdown if the user is interacting with a SELECT menu inside of it
const isSelect = event.target.tagName === "SELECT";
if (!isClickInAnyDropdown && !isClickOnReference) {
if (!isClickOnReference && !isSelect) {
instance.clickToHide = true;
instance.hide();
}
});
instance.popper.addEventListener("mouseenter", () => {
const handleMouseMove = () => {
const dropdowns =
document.querySelectorAll("[data-tippy-root]");
const isMouseOverAnyDropdown = Array.from(dropdowns).some(
(dropdown) => dropdown.matches(":hover"),
);
if (!isMouseOverAnyDropdown) {
instance.hide();
document.removeEventListener("mousemove", handleMouseMove);
}
};
document.addEventListener("mousemove", handleMouseMove);
});
callback(instance);
};
if (immediate) {
@ -69,13 +51,21 @@ function generateDropdown(element, callback, immediate, options = {}) {
});
}
},
onHide() {
const dropdowns = document.querySelectorAll("[data-tippy-root]");
const isMouseOverAnyDropdown = Array.from(dropdowns).some(
(dropdown) => dropdown.matches(":hover"),
);
onHide(instance) {
if (
instance.props.trigger === "mouseenter" &&
!instance.clickToHide
) {
const dropdowns = document.querySelectorAll("[data-tippy-root]");
const isMouseOverAnyDropdown = Array.from(dropdowns).some(
(dropdown) => dropdown.matches(":hover"),
);
return !isMouseOverAnyDropdown;
return !isMouseOverAnyDropdown;
}
instance.clickToHide = false;
return true;
},
},
options,

View File

@ -10,11 +10,7 @@ var jenkins = {};
// gets the base Jenkins URL including context path
jenkins.baseUrl = function () {
var u = $("head").attr("data-rooturl");
if (!u) {
u = "";
}
return u;
return document.head.dataset.rooturl;
};
/**

View File

@ -3,6 +3,7 @@ html {
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
color: var(--text-color);
scroll-padding-top: calc(var(--header-height) + var(--section-padding));
}
body {