Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Actually adjust copy button logic to new API #8554

Merged
merged 3 commits into from
Oct 6, 2023
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 14 additions & 25 deletions core/src/main/resources/lib/layout/copyButton/copyButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,20 @@ Behaviour.specify(
0,
function (copyButton) {
copyButton.addEventListener("click", () => {
// HTMLUnit 2.70.0 does not recognize isSecureContext
Copy link
Member

@jglick jglick Dec 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

introduced in #7784 FTR; see HtmlUnit/htmlunit@54d9d30

// https://issues.jenkins.io/browse/JENKINS-70895
if (!window.isRunAsTest && isSecureContext) {
// Make an invisible textarea element containing the text
const fakeInput = document.createElement("textarea");
fakeInput.value = copyButton.getAttribute("text");
fakeInput.style.width = "1px";
fakeInput.style.height = "1px";
fakeInput.style.border = "none";
fakeInput.style.padding = "0px";
fakeInput.style.position = "absolute";
fakeInput.style.top = "-99999px";
fakeInput.style.left = "-99999px";
fakeInput.setAttribute("tabindex", "-1");
document.body.appendChild(fakeInput);

// Select the text and copy it to the clipboard
fakeInput.select();
navigator.clipboard.writeText(fakeInput.value);

// Remove the textarea element
document.body.removeChild(fakeInput);

// Show the completion message
hoverNotification(copyButton.getAttribute("message"), copyButton);
if (isSecureContext) {
// Copy the text to the clipboard
navigator.clipboard
Copy link
Member

@jtnord jtnord Dec 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

whilst mainstream browsers support this (according to canIUse) I believe unless you set a handler in HtmlUnit that navigator.clipboard will be undefined when running tests with webclient.

the webclient created in j-t-h is not configured with a handler.

.writeText(copyButton.getAttribute("text"))
.then(() => {
// Show the completion message
hoverNotification(copyButton.getAttribute("message"), copyButton);
})
.catch(() => {
hoverNotification(
"Could not get permission to write to clipboard",
copyButton,
);
});
} else {
hoverNotification(
"Copy is only supported with a secure (HTTPS) connection",
Expand Down
Loading