diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json
index 3e7a3acf..2b85bb14 100644
--- a/public/_locales/en/messages.json
+++ b/public/_locales/en/messages.json
@@ -161,6 +161,9 @@
"setUsername": {
"message": "Set Username"
},
+ "copyPublicID": {
+ "message": "Copy Public UserID"
+ },
"discordAdvert": {
"message": "Come join the official discord server to give suggestions and feedback!"
},
diff --git a/public/popup.css b/public/popup.css
index 4398eaa4..96259cf2 100644
--- a/public/popup.css
+++ b/public/popup.css
@@ -265,7 +265,7 @@ background-color:#ec1c1c;
align-items: center;
}
-.sbSlimButton, #additionalButtons>button, button#setUsernameButton, #submitUsername {
+.sbSlimButton, #additionalButtons>button, button#setUsernameButton, #submitUsername, #copyUserID {
background: none;
border: none;
color: white;
@@ -341,6 +341,14 @@ label>p, #disableExtension>p, #usernameValue, #usernameElement > div > p,#sponso
cursor: pointer;
}
+#copyUserID {
+ width: 100%;
+}
+
+#setUsernameContainer {
+ display: flex;
+}
+
#usernameElement > div, #sponsorTimesContributionsContainer > div {
display: flex;
flex-flow: column nowrap;
diff --git a/public/popup.html b/public/popup.html
index 80e0d1da..c6600bdc 100644
--- a/public/popup.html
+++ b/public/popup.html
@@ -90,6 +90,9 @@
+
diff --git a/src/content.ts b/src/content.ts
index d5365aae..3eefab85 100644
--- a/src/content.ts
+++ b/src/content.ts
@@ -1457,11 +1457,13 @@ function openInfoMenu() {
const logo = popup.querySelector("#sponsorBlockPopupLogo");
const settings = popup.querySelector("#sbPopupIconSettings");
const edit = popup.querySelector("#sbPopupIconEdit");
+ const copy = popup.querySelector("#sbPopupIconCopyUserID");
const check = popup.querySelector("#sbPopupIconCheck");
const refreshSegments = popup.querySelector("#refreshSegments");
logo.src = chrome.extension.getURL("icons/IconSponsorBlocker256px.png");
settings.src = chrome.extension.getURL("icons/settings.svg");
edit.src = chrome.extension.getURL("icons/pencil.svg");
+ copy.src = chrome.extension.getURL("icons/clipboard.svg");
check.src = chrome.extension.getURL("icons/check.svg");
refreshSegments.src = chrome.extension.getURL("icons/refresh.svg");
diff --git a/src/popup.ts b/src/popup.ts
index 0b0664c0..95ca2896 100644
--- a/src/popup.ts
+++ b/src/popup.ts
@@ -96,6 +96,7 @@ async function runThePopup(messageListener?: MessageListener): Promise {
"usernameInput",
"usernameValue",
"submitUsername",
+ "sbPopupIconCopyUserID",
// More
"submissionSection",
"mainControls",
@@ -134,6 +135,7 @@ async function runThePopup(messageListener?: MessageListener): Promise {
PageElements.optionsButton.addEventListener("click", openOptions);
PageElements.helpButton.addEventListener("click", openHelp);
PageElements.refreshSegmentsButton.addEventListener("click", refreshSegments);
+ PageElements.sbPopupIconCopyUserID.addEventListener("click", async () => navigator.clipboard.writeText(await utils.getHash(Config.config.userID)));
/** If true, the content script is in the process of creating a new segment. */
let creatingSegment = false;