Skip to content

Commit 5b00db2

Browse files
authored
Fix tooltips for recent core versions (#226)
1 parent bcd37ef commit 5b00db2

File tree

3 files changed

+42
-9
lines changed

3 files changed

+42
-9
lines changed

src/main/resources/com/microsoft/jenkins/azuread/AzureAdMatrixAuthorizationStrategy/config.jelly

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,11 @@ THE SOFTWARE.
145145
<j:forEach var="g" items="${groups}">
146146
<j:forEach var="p" items="${g.permissions}">
147147
<j:if test="${descriptor.showPermission(p)}">
148-
<th class="pane" tooltip="${descriptor.getDescription(p)}">
148+
<th class="pane" html-tooltip="${descriptor.getDescription(p)}" tooltip="${descriptor.getDescription(p)}">
149+
<!--
150+
Tooltip needs to be HTML for GlobalMatrixAuthorizationStrategy.PermissionNotImpliedBy formatting.
151+
So set 'html-tooltip' for Tippy and 'tooltip' for YUI.
152+
-->
149153
<span>
150154
${p.name}
151155
</span>
@@ -185,11 +189,13 @@ THE SOFTWARE.
185189
<input type="button" class="azure-ad-add-button" value="${%Add user}" id="${id}UserButton"
186190
data-table-id="${id}"
187191
data-type="USER"
192+
data-type-label="${%user}"
188193
data-message-error="${%userError}"
189194
/>
190195
<input type="button" class="azure-ad-add-button" value="${%Add group}" id="${id}GroupButton"
191196
data-table-id="${id}"
192197
data-type="GROUP"
198+
data-type-label="${%group}"
193199
data-message-error="${%groupError}"
194200
/>
195201
</div>
@@ -203,6 +209,8 @@ THE SOFTWARE.
203209
data-table-id="${id}"
204210
data-message-empty="${%empty}"
205211
data-message-error="${%error}"
212+
data-type-user-label="${%user}"
213+
data-type-group-label="${%user}"
206214
/>
207215
</div>
208216
</j:otherwise>

src/main/resources/com/microsoft/jenkins/azuread/AzureAdMatrixAuthorizationStrategy/config.properties

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
selectall=Grant all permissions to {0}
22
unselectall=Remove all permissions from {0}
33
remove=Remove entries for {0}
4-
tooltip_enabled={0}/{1} for {2}
5-
tooltip_disabled={0}/{1} for {2} is granted through another permission
4+
tooltip_enabled={0}/{1} for {2} {3}
5+
tooltip_disabled={0}/{1} for {2} {3} is granted through another permission
66
prompt=User or group name:
77
empty=Please enter a user name or a group name
88

9+
user=user
10+
group=group
11+
912
userError=An entry for this user already exists
1013
groupError=An entry for this group already exists
1114

src/main/resources/com/microsoft/jenkins/azuread/table.js

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ Behaviour.specify(".azure-ad-add-button", 'AzureAdMatrixAuthorizationStrategy',
1111
var nonGraphInput = document.getElementById(dataTableId + 'text')
1212
var selectedPeople = []
1313
var peoplePickerEnabled = true
14+
var typeLabel
1415
if (nonGraphInput) {
1516
peoplePickerEnabled = false
1617
if (nonGraphInput.value) {
1718
selectedPeople = [nonGraphInput.value]
1819
}
20+
typeLabel = dataReference.getAttribute('data-type-label')
1921
} else {
2022
selectedPeople = document.querySelector('mgt-people-picker').selectedPeople;
2123
}
@@ -32,9 +34,11 @@ Behaviour.specify(".azure-ad-add-button", 'AzureAdMatrixAuthorizationStrategy',
3234
if (person.groupTypes) {
3335
name = person.displayName + " (" + person.id + ")"
3436
type = "GROUP"
37+
typeLabel = dataReference.getAttribute('data-type-group-label')
3538
} else {
3639
name = person.userPrincipalName + " (" + person.id + ")"
3740
type = "USER"
41+
typeLabel = dataReference.getAttribute('data-type-user-label')
3842
}
3943
} else {
4044
type = dataReference.getAttribute('data-type')
@@ -57,15 +61,23 @@ Behaviour.specify(".azure-ad-add-button", 'AzureAdMatrixAuthorizationStrategy',
5761

5862
for(var child = copy.firstChild; child !== null; child = child.nextSibling) {
5963
if (child.hasAttribute('data-permission-id')) {
60-
child.setAttribute("data-tooltip-enabled", child.getAttribute("data-tooltip-enabled").replace("__SID__", name));
61-
child.setAttribute("data-tooltip-disabled", child.getAttribute("data-tooltip-disabled").replace("__SID__", name));
64+
child.setAttribute("data-tooltip-enabled", child.getAttribute("data-tooltip-enabled").replace("__SID__", name).replace("__TYPE__", typeLabel));
65+
child.setAttribute("data-tooltip-disabled", child.getAttribute("data-tooltip-disabled").replace("__SID__", name).replace("__TYPE__", typeLabel));
6266
}
6367
}
6468
findElementsBySelector(copy, ".stop img").each(function(item) {
65-
item.setAttribute("title", item.getAttribute("title").replace("__SID__", name));
69+
item.setAttribute("title", item.getAttribute("title").replace("__SID__", name).replace("__TYPE__", typeLabel));
6670
});
71+
72+
var tooltipAttributeName = getTooltipAttributeName();
73+
6774
findElementsBySelector(copy, "input[type=checkbox]").each(function(item) {
68-
item.setAttribute("title", item.getAttribute("title").replace("__SID__", name));
75+
const tooltip = item.getAttribute(tooltipAttributeName);
76+
if (tooltip) {
77+
item.setAttribute(tooltipAttributeName, tooltip.replace("__SID__", name).replace("__TYPE__", typeLabel));
78+
} else {
79+
item.setAttribute("title", item.getAttribute("title").replace("__SID__", name).replace("__TYPE__", typeLabel));
80+
}
6981
});
7082
table.appendChild(copy);
7183
Behaviour.applySubtree(findAncestor(table,"TABLE"),true);
@@ -80,6 +92,11 @@ Behaviour.specify(".azure-ad-add-button", 'AzureAdMatrixAuthorizationStrategy',
8092
});
8193
});
8294

95+
function getTooltipAttributeName() {
96+
var tippySupported = window.registerTooltips !== undefined;
97+
return tippySupported ? 'html-tooltip' : 'tooltip';
98+
}
99+
83100
/*
84101
* Behavior for the element removing a permission assignment row for a user/group
85102
*/
@@ -128,19 +145,24 @@ Behaviour.specify(".global-matrix-authorization-strategy-table TD.stop A.unselec
128145
* Whenever permission assignments change, this ensures that implied permissions get their checkboxes disabled.
129146
*/
130147
Behaviour.specify(".global-matrix-authorization-strategy-table td input", 'AzureAdMatrixAuthorizationStrategy', 0, function(e) {
148+
var tooltipAttributeName = getTooltipAttributeName();
131149
var impliedByString = findAncestor(e, "TD").getAttribute('data-implied-by-list');
132150
var impliedByList = impliedByString.split(" ");
133151
var tr = findAncestor(e,"TR");
134152
e.disabled = false;
135-
e.setAttribute('tooltip', YAHOO.lang.escapeHTML(findAncestor(e, "TD").getAttribute('data-tooltip-enabled')));
153+
var enabledTooltip = YAHOO.lang.escapeHTML(findAncestor(e, "TD").getAttribute('data-tooltip-enabled'));
154+
e.setAttribute(tooltipAttributeName, enabledTooltip);
155+
e.nextSibling.setAttribute(tooltipAttributeName, enabledTooltip); // 2.335+
136156

137157
for (var i = 0; i < impliedByList.length; i++) {
138158
var permissionId = impliedByList[i];
139159
var reference = tr.querySelector("td[data-permission-id='" + permissionId + "'] input");
140160
if (reference !== null) {
141161
if (reference.checked) {
142162
e.disabled = true;
143-
e.setAttribute('tooltip', YAHOO.lang.escapeHTML(findAncestor(e, "TD").getAttribute('data-tooltip-disabled')));
163+
var tooltip = YAHOO.lang.escapeHTML(findAncestor(e, "TD").getAttribute('data-tooltip-disabled'));
164+
e.setAttribute(tooltipAttributeName, tooltip); // before 2.335 -- TODO remove once baseline is new enough
165+
e.nextSibling.setAttribute(tooltipAttributeName, tooltip); // 2.335+
144166
}
145167
}
146168
}

0 commit comments

Comments
 (0)