From 0ff896bf573a91f587f7ad3dce064fa7bcd16415 Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 15 Mar 2022 00:20:38 +0000
Subject: [PATCH 01/17] Add yarn deps
---
war/package.json | 1 +
war/yarn.lock | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/war/package.json b/war/package.json
index 81b6f1aab656..fb82b87dd11f 100644
--- a/war/package.json
+++ b/war/package.json
@@ -58,6 +58,7 @@
"lodash": "^4.17.20",
"raf": "^3.4.1",
"sortablejs": "^1.13.0",
+ "tippy.js": "^6.3.7",
"window-handle": "^1.0.0"
},
"browserslist": [
diff --git a/war/yarn.lock b/war/yarn.lock
index a92c792b2133..d083782589cb 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -1096,6 +1096,11 @@
"@nodelib/fs.scandir" "2.1.3"
fastq "^1.6.0"
+"@popperjs/core@^2.9.0":
+ version "2.11.4"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.4.tgz#d8c7b8db9226d2d7664553a0741ad7d0397ee503"
+ integrity sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==
+
"@sinonjs/commons@^1.7.0":
version "1.8.0"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d"
@@ -7899,6 +7904,13 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
+tippy.js@^6.3.7:
+ version "6.3.7"
+ resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c"
+ integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==
+ dependencies:
+ "@popperjs/core" "^2.9.0"
+
tlds@^1.203.0:
version "1.207.0"
resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.207.0.tgz#459264e644cf63ddc0965fece3898913286b1afd"
From db1928d0fa6720d3becd37e83cfbd72fdc67ebf9 Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 15 Mar 2022 00:24:10 +0000
Subject: [PATCH 02/17] Add initial JS files
---
.../main/resources/lib/layout/layout.jelly | 2 +
war/src/main/js/tooltips.js | 37 +++++++++++++++++++
war/webpack.config.js | 1 +
3 files changed, 40 insertions(+)
create mode 100644 war/src/main/js/tooltips.js
diff --git a/core/src/main/resources/lib/layout/layout.jelly b/core/src/main/resources/lib/layout/layout.jelly
index d71d1145e7d5..39143619f224 100644
--- a/core/src/main/resources/lib/layout/layout.jelly
+++ b/core/src/main/resources/lib/layout/layout.jelly
@@ -255,6 +255,8 @@ THE SOFTWARE.
+
+
diff --git a/war/src/main/js/tooltips.js b/war/src/main/js/tooltips.js
new file mode 100644
index 000000000000..17e4e40ab1c9
--- /dev/null
+++ b/war/src/main/js/tooltips.js
@@ -0,0 +1,37 @@
+import tippy from "tippy.js"
+
+tippy("[tooltip]", {
+ content: element => element.getAttribute("tooltip"),
+ arrow: false,
+ theme: "tooltip",
+ animation: "tooltip"
+})
+
+tippy("[html-tooltip]", {
+ content: element => element.getAttribute("html-tooltip"),
+ allowHTML: true,
+ arrow: false,
+ theme: "tooltip",
+ animation: "tooltip"
+})
+
+function hoverNotification(text, element) {
+ let tooltip = tippy(element, {
+ interactive: true,
+ trigger: "hover",
+ followCursor: "initial",
+ arrow: false,
+ theme: "tooltip",
+ offset: [0, 0],
+ animation: "tooltip",
+ content: text,
+ onShow(instance) {
+ setTimeout(() => {
+ instance.hide()
+ }, 3000)
+ },
+ })
+ tooltip.show()
+}
+
+window.hoverNotification = hoverNotification
diff --git a/war/webpack.config.js b/war/webpack.config.js
index 32406805416e..d03c3093e9ca 100644
--- a/war/webpack.config.js
+++ b/war/webpack.config.js
@@ -29,6 +29,7 @@ module.exports = (env, argv) => ({
path.join(__dirname, "src/main/js/config-tabbar.js"),
path.join(__dirname, "src/main/js/config-tabbar.less"),
],
+ "tooltips": [path.join(__dirname, "src/main/js/tooltips.js")],
"sortable-drag-drop": [path.join(__dirname, "src/main/js/sortable-drag-drop.js")],
"section-to-tabs": [path.join(__dirname, "src/main/js/section-to-tabs.js")],
"filter-build-history": [path.join(__dirname, "src/main/js/filter-build-history.js")],
From 09e9109d25b85c1ff566a0da7daf61f61f5c02f2 Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 15 Mar 2022 00:33:13 +0000
Subject: [PATCH 03/17] WB
---
.../resources/lib/hudson/buildHealth.jelly | 54 ++++++++++---------
war/src/main/less/base/layout-commons.less | 4 +-
war/src/main/less/modules/tooltips.less | 44 +++++++++++----
war/src/main/webapp/scripts/prototype.js | 4 +-
4 files changed, 67 insertions(+), 39 deletions(-)
diff --git a/core/src/main/resources/lib/hudson/buildHealth.jelly b/core/src/main/resources/lib/hudson/buildHealth.jelly
index 10f138f701bb..161a74031565 100644
--- a/core/src/main/resources/lib/hudson/buildHealth.jelly
+++ b/core/src/main/resources/lib/hudson/buildHealth.jelly
@@ -36,8 +36,34 @@ THE SOFTWARE.
- ${buildHealth.score}
- jenkins-table__cell--tight jenkins-table__icon healthReport
+ ${buildHealth.score}
+ jenkins-table__cell--tight jenkins-table__icon
+
+
+
+
+
+ W |
+ ${%Description} |
+ % |
+
+
+
+
+
+
+
+
+
+ |
+ ${rpt.localizableDescription} |
+ ${rpt.score} |
+
+
+
+
+
+
@@ -62,29 +88,5 @@ THE SOFTWARE.
-
-
-
diff --git a/war/src/main/less/base/layout-commons.less b/war/src/main/less/base/layout-commons.less
index 6c70661734e4..735550feca14 100644
--- a/war/src/main/less/base/layout-commons.less
+++ b/war/src/main/less/base/layout-commons.less
@@ -1,14 +1,12 @@
@import '../abstracts/theme.less';
html {
- position: relative;
height: 100%;
box-sizing: border-box;
- min-height: none;
}
body {
- height: 100%;
+ min-height: 100vh;
margin: 0;
display: flex;
flex-direction: column;
diff --git a/war/src/main/less/modules/tooltips.less b/war/src/main/less/modules/tooltips.less
index 86b8bd25d70c..0480817e370e 100644
--- a/war/src/main/less/modules/tooltips.less
+++ b/war/src/main/less/modules/tooltips.less
@@ -1,12 +1,38 @@
-.jenkins-tooltip {
- position: absolute;
- padding: 5px 10px;
+.tippy-box[data-theme~='tooltip'] {
+ background: var(--tooltip-background);
+ color: var(--tooltip-foreground);
+ padding: 0.55rem 0.8rem;
border-radius: 10px;
- background: var(--tooltip-background-color);
box-shadow: var(--tooltip-shadow);
- color: var(--tooltip-foreground-color);
- font-size: 0.8rem;
- z-index: 1001 !important;
- overflow: hidden;
- max-width: none !important;
+ font-weight: 500;
+ font-size: 0.75rem;
+ backdrop-filter: saturate(2) blur(10px);
+ max-width: unset !important;
+
+ .tippy-content {
+ padding: 0;
+ }
+
+ // We style tables as they have additional margin/border radius when in tooltips
+ .jenkins-table {
+ --table-background: rgba(black, 0.05);
+ --table-border-radius: 8px;
+ margin: calc(-0.55rem + 5px) calc(-0.8rem + 5px);
+ width: 400px;
+ }
+}
+
+.tippy-box[data-animation='tooltip'][data-state='hidden'] {
+ opacity: 0;
+ transform: scale(0.995);
+
+ &[data-placement^="top"] {
+ transform-origin: bottom;
+ transform: translateY(2px) scale(0.995);
+ }
+
+ &[data-placement^="bottom"] {
+ transform-origin: top;
+ transform: translateY(-2px) scale(0.995);
+ }
}
diff --git a/war/src/main/webapp/scripts/prototype.js b/war/src/main/webapp/scripts/prototype.js
index 90bf7b042711..19e30c0a0f47 100644
--- a/war/src/main/webapp/scripts/prototype.js
+++ b/war/src/main/webapp/scripts/prototype.js
@@ -853,7 +853,9 @@ var Enumerable = (function() {
iterator.call(context, value, index++);
});
} catch (e) {
- if (e != $break) throw e;
+ // This breaks Tippy for some reason?
+ // TypeError: undefined is not an object (evaluating 'self.indexOf')
+ // if (e != $break) throw e;
}
return this;
}
From 491b1f1fecaf4cc099029d6253cc6fc548bfe193 Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 15 Mar 2022 00:36:07 +0000
Subject: [PATCH 04/17] Update hudson-behavior.js
---
.../main/webapp/scripts/hudson-behavior.js | 77 -------------------
1 file changed, 77 deletions(-)
diff --git a/war/src/main/webapp/scripts/hudson-behavior.js b/war/src/main/webapp/scripts/hudson-behavior.js
index 77942f2c5d4c..d5c181e129bb 100644
--- a/war/src/main/webapp/scripts/hudson-behavior.js
+++ b/war/src/main/webapp/scripts/hudson-behavior.js
@@ -492,11 +492,6 @@ function fireEvent(element,event){
}
}
-// shared tooltip object
-var tooltip;
-
-
-
// Behavior rules
//========================================================
// using tag names in CSS selector makes the processing faster
@@ -964,10 +959,6 @@ function rowvgStartEachRow(recursive,f) {
(function () {
var p = 20;
- Behaviour.specify("BODY", "body", ++p, function() {
- tooltip = new YAHOO.widget.Tooltip("tt", {context:[], zindex:999});
- });
-
Behaviour.specify("TABLE.sortable", "table-sortable", ++p, function(e) {// sortable table
e.sortable = new Sortable.Sortable(e);
});
@@ -1213,12 +1204,6 @@ function rowvgStartEachRow(recursive,f) {
form = null; // memory leak prevention
});
- // hook up tooltip.
- // add nodismiss="" if you'd like to display the tooltip forever as long as the mouse is on the element.
- Behaviour.specify("[tooltip]", "-tooltip-", ++p, function(e) {
- applyTooltip(e,e.getAttribute("tooltip"));
- });
-
Behaviour.specify("INPUT.submit-button", "input-submit-button", ++p, function(e) {
makeButton(e);
});
@@ -1530,20 +1515,6 @@ var hudsonRules = {}; // legacy name
// now empty, but plugins can stuff things in here later:
Behaviour.register(hudsonRules);
-function applyTooltip(e,text) {
- // copied from YAHOO.widget.Tooltip.prototype.configContext to efficiently add a new element
- // event registration via YAHOO.util.Event.addListener leaks memory, so do it by ourselves here
- e.onmouseover = function(ev) {
- var delay = this.getAttribute("nodismiss")!=null ? 99999999 : 5000;
- tooltip.cfg.setProperty("autodismissdelay",delay);
- return tooltip.onContextMouseOver.call(this,YAHOO.util.Event.getEvent(ev),tooltip);
- }
- e.onmousemove = function(ev) { return tooltip.onContextMouseMove.call(this,YAHOO.util.Event.getEvent(ev),tooltip); }
- e.onmouseout = function(ev) { return tooltip.onContextMouseOut .call(this,YAHOO.util.Event.getEvent(ev),tooltip); }
- e.title = text;
- e = null; // avoid memory leak
-}
-
var Path = {
tail : function(p) {
var idx = p.lastIndexOf("/");
@@ -2292,54 +2263,6 @@ var toggleCheckboxes = function(toggle) {
}
};
-var hoverNotification = (function() {
- var msgBox;
- var body;
-
- // animation effect that automatically hide the message box
- var effect = function(overlay, dur) {
- var o = YAHOO.widget.ContainerEffect.FADE(overlay, dur);
- o.animateInCompleteEvent.subscribe(function() {
- window.setTimeout(function() {
- msgBox.hide()
- }, 1500);
- });
- return o;
- }
-
- function init() {
- if(msgBox!=null) return; // already initialized
-
- var div = document.createElement("DIV");
- document.body.appendChild(div);
- div.innerHTML = "
";
- body = $('hoverNotification');
-
- msgBox = new YAHOO.widget.Overlay(body, {
- visible:false,
- zIndex:1000,
- effect:{
- effect:effect,
- duration:0.25
- }
- });
- msgBox.render();
- }
-
- return function(title, anchor, offset) {
- if (typeof offset === 'undefined') {
- offset = 48;
- }
- init();
- body.innerHTML = title;
- var xy = YAHOO.util.Dom.getXY(anchor);
- xy[0] += offset;
- xy[1] += anchor.offsetHeight;
- msgBox.cfg.setProperty("xy",xy);
- msgBox.show();
- };
-})();
-
// Decrease vertical padding for checkboxes
window.addEventListener('load', function () {
document.querySelectorAll(".jenkins-form-item").forEach(function (element) {
From 1fbcc55264992c6872623554d827744f2e7eada4 Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 15 Mar 2022 00:38:20 +0000
Subject: [PATCH 05/17] Update tooltips.less
---
war/src/main/less/modules/tooltips.less | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/war/src/main/less/modules/tooltips.less b/war/src/main/less/modules/tooltips.less
index 0480817e370e..3d190c4ca7a4 100644
--- a/war/src/main/less/modules/tooltips.less
+++ b/war/src/main/less/modules/tooltips.less
@@ -6,7 +6,7 @@
box-shadow: var(--tooltip-shadow);
font-weight: 500;
font-size: 0.75rem;
- backdrop-filter: saturate(2) blur(10px);
+ backdrop-filter: saturate(2) blur(15px);
max-width: unset !important;
.tippy-content {
@@ -17,7 +17,8 @@
.jenkins-table {
--table-background: rgba(black, 0.05);
--table-border-radius: 8px;
- margin: calc(-0.55rem + 5px) calc(-0.8rem + 5px);
+
+ margin: -0.55rem -0.8rem;
width: 400px;
}
}
From 940d51af70026e1f12751d8baea7aacb1adf0f0a Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 15 Mar 2022 00:47:18 +0000
Subject: [PATCH 06/17] WB
---
.../hudson/widgets/HistoryWidget/entry.jelly | 4 +++-
war/src/main/js/tooltips.js | 13 ++++++++++---
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/core/src/main/resources/hudson/widgets/HistoryWidget/entry.jelly b/core/src/main/resources/hudson/widgets/HistoryWidget/entry.jelly
index b690e2084ccc..adb16ef4f62e 100644
--- a/core/src/main/resources/hudson/widgets/HistoryWidget/entry.jelly
+++ b/core/src/main/resources/hudson/widgets/HistoryWidget/entry.jelly
@@ -38,7 +38,9 @@ THE SOFTWARE.
diff --git a/war/src/main/js/tooltips.js b/war/src/main/js/tooltips.js
index 17e4e40ab1c9..b3ba599ab9b8 100644
--- a/war/src/main/js/tooltips.js
+++ b/war/src/main/js/tooltips.js
@@ -4,7 +4,8 @@ tippy("[tooltip]", {
content: element => element.getAttribute("tooltip"),
arrow: false,
theme: "tooltip",
- animation: "tooltip"
+ animation: "tooltip",
+ appendTo: document.body,
})
tippy("[html-tooltip]", {
@@ -12,19 +13,25 @@ tippy("[html-tooltip]", {
allowHTML: true,
arrow: false,
theme: "tooltip",
- animation: "tooltip"
+ animation: "tooltip",
+ appendTo: document.body,
})
+/**
+ * Displays a tooltip for three seconds on the provided element after interaction
+ * @param {string} text - The tooltip text
+ * @param {HTMLElement} element - The element to show the tooltip
+ */
function hoverNotification(text, element) {
let tooltip = tippy(element, {
interactive: true,
trigger: "hover",
- followCursor: "initial",
arrow: false,
theme: "tooltip",
offset: [0, 0],
animation: "tooltip",
content: text,
+ appendTo: document.body,
onShow(instance) {
setTimeout(() => {
instance.hide()
From 7e6c576bb508bf6f5bf738ba17a6840ca733baaf Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 15 Mar 2022 01:15:10 +0000
Subject: [PATCH 07/17] Fix tooltip showing when it shouldn't, improve
appearance
---
.../resources/lib/hudson/buildHealth.jelly | 54 ++++++++++---------
war/src/main/less/abstracts/theme.less | 6 +--
war/src/main/less/modules/tooltips.less | 16 ++++--
3 files changed, 42 insertions(+), 34 deletions(-)
diff --git a/core/src/main/resources/lib/hudson/buildHealth.jelly b/core/src/main/resources/lib/hudson/buildHealth.jelly
index 161a74031565..012dc98e0d37 100644
--- a/core/src/main/resources/lib/hudson/buildHealth.jelly
+++ b/core/src/main/resources/lib/hudson/buildHealth.jelly
@@ -38,32 +38,34 @@ THE SOFTWARE.
${buildHealth.score}
jenkins-table__cell--tight jenkins-table__icon
-
-
-
-
-
- W |
- ${%Description} |
- % |
-
-
-
-
-
-
-
-
-
- |
- ${rpt.localizableDescription} |
- ${rpt.score} |
-
-
-
-
-
-
+
+
+
+
+
|