From ff5deac0ecce9532df2a0bef4de79c8a2173ea0e Mon Sep 17 00:00:00 2001 From: Brues <5278969+brues-code@users.noreply.github.com> Date: Fri, 30 Oct 2026 23:45:08 -0500 Subject: [PATCH] Copy links with CopyToClipboard instead of a popup Clicking a chat URL and the GUI's Donate/GitHub/Website buttons now put the address straight on the clipboard and say so in chat. The url link goes through ClassicAPI's LinkUtil handler registry, so SetItemRef is no longer replaced. Exporting a profile also copies the string. --- api/api.lua | 8 +++++ env/translations_deDE.lua | 1 + env/translations_enUS.lua | 1 + env/translations_esES.lua | 1 + env/translations_frFR.lua | 1 + env/translations_koKR.lua | 1 + env/translations_ruRU.lua | 1 + env/translations_zhCN.lua | 1 + env/translations_zhTW.lua | 1 + modules/chat.lua | 71 +++------------------------------------ modules/gui.lua | 6 ++-- modules/share.lua | 1 + 12 files changed, 24 insertions(+), 70 deletions(-) diff --git a/api/api.lua b/api/api.lua index 1c308632..18d89e25 100644 --- a/api/api.lua +++ b/api/api.lua @@ -579,6 +579,14 @@ function pfUI.api.SendChatMessageWide(msg) SendChatMessage(msg,channel) end +-- [ CopyText ] +-- Copies text to the clipboard and says so in chat +-- 'text' [string] the text to copy +function pfUI.api.CopyText(text) + CopyToClipboard(text) + DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpf|cffffffffUI|r: " .. T["Copied to clipboard"]) +end + -- [ GroupInfoByName ] -- Gets the unit id by name -- 'name' [string] party or raid member diff --git a/env/translations_deDE.lua b/env/translations_deDE.lua index d27eb271..c62aae53 100644 --- a/env/translations_deDE.lua +++ b/env/translations_deDE.lua @@ -161,6 +161,7 @@ pfUI_translation["deDE"] = { ["Cooldown Text Time Threshold"] = nil, ["Coordinates Location"] = nil, ["Coordinates On Minimap"] = nil, + ["Copied to clipboard"] = nil, ["Count"] = nil, ["Create Profile"] = nil, ["Ctrl-Click"] = nil, diff --git a/env/translations_enUS.lua b/env/translations_enUS.lua index 7dcd760d..1e46f821 100644 --- a/env/translations_enUS.lua +++ b/env/translations_enUS.lua @@ -167,6 +167,7 @@ pfUI_translation["enUS"] = { ["Cooldown Text Time Threshold"] = nil, ["Coordinates Location"] = nil, ["Coordinates On Minimap"] = nil, + ["Copied to clipboard"] = nil, ["Count"] = nil, ["Create Profile"] = nil, ["Ctrl-Click"] = nil, diff --git a/env/translations_esES.lua b/env/translations_esES.lua index dcda6177..fe749edd 100644 --- a/env/translations_esES.lua +++ b/env/translations_esES.lua @@ -161,6 +161,7 @@ pfUI_translation["esES"] = { ["Cooldown Text Time Threshold"] = "Umbral del texto del tiempo de reutilización", ["Coordinates Location"] = "Coordenadas de localización", ["Coordinates On Minimap"] = "Coordenadas en el minimapa", + ["Copied to clipboard"] = nil, ["Count"] = "Recuento", ["Create Profile"] = "Crear perfil", ["Ctrl-Click"] = "Ctrl-Clic", diff --git a/env/translations_frFR.lua b/env/translations_frFR.lua index 3550e702..d0a7e1bd 100644 --- a/env/translations_frFR.lua +++ b/env/translations_frFR.lua @@ -161,6 +161,7 @@ pfUI_translation["frFR"] = { ["Cooldown Text Time Threshold"] = "Seuil du texte des temps de recharge", ["Coordinates Location"] = "Coordonnées Emplacement", ["Coordinates On Minimap"] = "Coordonnées sur la mini-carte", + ["Copied to clipboard"] = nil, ["Count"] = "Compter", ["Create Profile"] = "Créer un profil", ["Ctrl-Click"] = "Ctrl-Clique", diff --git a/env/translations_koKR.lua b/env/translations_koKR.lua index e2853b3b..f903be8f 100644 --- a/env/translations_koKR.lua +++ b/env/translations_koKR.lua @@ -161,6 +161,7 @@ pfUI_translation["koKR"] = { ["Cooldown Text Time Threshold"] = "재사용 대기시간 텍스트 임계 값", ["Coordinates Location"] = nil, ["Coordinates On Minimap"] = "미니맵의 좌표", + ["Copied to clipboard"] = nil, ["Count"] = "카운트", ["Create Profile"] = "프로파일 생성", ["Ctrl-Click"] = nil, diff --git a/env/translations_ruRU.lua b/env/translations_ruRU.lua index fb193eec..0ae36d95 100644 --- a/env/translations_ruRU.lua +++ b/env/translations_ruRU.lua @@ -161,6 +161,7 @@ pfUI_translation["ruRU"] = { ["Cooldown Text Time Threshold"] = "Порог текста восстановления", ["Coordinates Location"] = "Расположение координат", ["Coordinates On Minimap"] = "Координаты на миникарте", + ["Copied to clipboard"] = nil, ["Count"] = "Счет", ["Create Profile"] = "Создать профиль", ["Ctrl-Click"] = "Ctrl+нажатие", diff --git a/env/translations_zhCN.lua b/env/translations_zhCN.lua index 26177788..a76e2c28 100644 --- a/env/translations_zhCN.lua +++ b/env/translations_zhCN.lua @@ -161,6 +161,7 @@ pfUI_translation["zhCN"] = { ["Cooldown Text Time Threshold"] = "技能冷却时间文字临界值", ["Coordinates Location"] = "坐标位置", ["Coordinates On Minimap"] = "小地图上的坐标", + ["Copied to clipboard"] = nil, ["Count"] = "计数器", ["Create Profile"] = "新建配置", ["Ctrl-Click"] = "CTRL点击", diff --git a/env/translations_zhTW.lua b/env/translations_zhTW.lua index f2d65a8b..0d00d1e6 100644 --- a/env/translations_zhTW.lua +++ b/env/translations_zhTW.lua @@ -161,6 +161,7 @@ pfUI_translation["zhTW"] = { ["Cooldown Text Time Threshold"] = "技能冷卻時間文字臨界值", ["Coordinates Location"] = "座標位置", ["Coordinates On Minimap"] = "小地圖上的座標", + ["Copied to clipboard"] = nil, ["Count"] = "計數器", ["Create Profile"] = "新建配置", ["Ctrl-Click"] = "CTRL點擊", diff --git a/modules/chat.lua b/modules/chat.lua index af8f3fe4..2f57039e 100644 --- a/modules/chat.lua +++ b/modules/chat.lua @@ -145,7 +145,7 @@ pfUI:RegisterModule("chat", function () ["URL"] = function(a1,a2,a3) return pfUI.chat:FormatLink(pfUI.chat.URLPattern.URL.fm,a1,a2,a3) end, } - -- url copy dialog + -- url links function pfUI.chat:FormatLink(formatter,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) if not (formatter and a1) then return end local newtext = string.format(formatter,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) @@ -185,74 +185,11 @@ pfUI:RegisterModule("chat", function () return text end - pfUI.chat.urlcopy = CreateFrame("Frame", "pfURLCopy", UIParent) - pfUI.chat.urlcopy:Hide() - pfUI.chat.urlcopy:SetWidth(270) - pfUI.chat.urlcopy:SetHeight(65) - pfUI.chat.urlcopy:SetFrameStrata("FULLSCREEN") - pfUI.chat.urlcopy:SetPoint("CENTER", 0, 0) - CreateBackdrop(pfUI.chat.urlcopy, nil, nil, 0.8) - - pfUI.chat.urlcopy:SetMovable(true) - pfUI.chat.urlcopy:EnableMouse(true) - pfUI.chat.urlcopy:RegisterForDrag("LeftButton") - pfUI.chat.urlcopy:SetScript("OnDragStart",function() - this:StartMoving() + -- clicking a url link copies it + LinkUtil.RegisterLinkHandler("url", function(link, text, linkData) + CopyText(linkData.options) end) - pfUI.chat.urlcopy:SetScript("OnDragStop",function() - this:StopMovingOrSizing() - end) - - pfUI.chat.urlcopy:SetScript("OnShow", function() - this.text:HighlightText() - end) - - pfUI.chat.urlcopy.text = CreateFrame("EditBox", "pfURLCopyEditBox", pfUI.chat.urlcopy) - pfUI.chat.urlcopy.text:SetTextColor(.2,1,.8,1) - pfUI.chat.urlcopy.text:SetJustifyH("CENTER") - - pfUI.chat.urlcopy.text:SetWidth(250) - pfUI.chat.urlcopy.text:SetHeight(20) - pfUI.chat.urlcopy.text:SetPoint("TOP", pfUI.chat.urlcopy, "TOP", 0, -10) - pfUI.chat.urlcopy.text:SetFontObject(GameFontNormal) - CreateBackdrop(pfUI.chat.urlcopy.text) - - pfUI.chat.urlcopy.text:SetScript("OnEscapePressed", function(self) - pfUI.chat.urlcopy:Hide() - end) - - pfUI.chat.urlcopy.text:SetScript("OnEditFocusLost", function(self) - pfUI.chat.urlcopy:Hide() - end) - - pfUI.chat.urlcopy.close = CreateFrame("Button", "pfURLCopyClose", pfUI.chat.urlcopy, "UIPanelButtonTemplate") - pfUI.api.SkinButton(pfUI.chat.urlcopy.close) - pfUI.chat.urlcopy.close:SetWidth(70) - pfUI.chat.urlcopy.close:SetHeight(18) - pfUI.chat.urlcopy.close:SetPoint("BOTTOMRIGHT", pfUI.chat.urlcopy, "BOTTOMRIGHT", -10, 10) - - pfUI.chat.urlcopy.close:SetText(T["Close"]) - pfUI.chat.urlcopy.close:SetScript("OnClick", function() - pfUI.chat.urlcopy:Hide() - end) - - pfUI.chat.urlcopy.SetItemRef = SetItemRef - pfUI.chat.urlcopy.CopyText = function(text) - pfUI.chat.urlcopy.text:SetText(text) - pfUI.chat.urlcopy:Show() - end - - function _G.SetItemRef(link, text, button) - if (strsub(link, 1, 3) == "url") then - if string.len(link) > 4 and string.sub(link,1,4) == "url:" then - pfUI.chat.urlcopy.CopyText(string.sub(link,5, string.len(link))) - end - return - end - pfUI.chat.urlcopy.SetItemRef(link, text, button) - end - pfUI.chat.right = CreateFrame("Frame", "pfChatRight", UIParent) pfUI.chat.right:SetFrameStrata("BACKGROUND") pfUI.chat.right:SetWidth(C.chat.right.width) diff --git a/modules/gui.lua b/modules/gui.lua index 4a1e2bdd..7ab6a5ae 100644 --- a/modules/gui.lua +++ b/modules/gui.lua @@ -1399,7 +1399,7 @@ pfUI:RegisterModule("gui", function () donate:SetHeight(20) donate:SetText(T["Donate"]) donate:SetScript("OnClick", function() - pfUI.chat.urlcopy.CopyText("https://buymeacoffee.com/brues") + CopyText("https://buymeacoffee.com/brues") end) SkinButton(donate) @@ -1409,7 +1409,7 @@ pfUI:RegisterModule("gui", function () github:SetHeight(20) github:SetText(T["GitHub"]) github:SetScript("OnClick", function() - pfUI.chat.urlcopy.CopyText(GetAddOnMetadata(pfUI.name, "X-Website")) + CopyText(GetAddOnMetadata(pfUI.name, "X-Website")) end) SkinButton(github) @@ -1419,7 +1419,7 @@ pfUI:RegisterModule("gui", function () website:SetHeight(20) website:SetText(T["Website"]) website:SetScript("OnClick", function() - pfUI.chat.urlcopy.CopyText(GetAddOnMetadata(pfUI.name, "X-Website")) + CopyText(GetAddOnMetadata(pfUI.name, "X-Website")) end) SkinButton(website) end) diff --git a/modules/share.lua b/modules/share.lua index 7602ce3d..edfff693 100644 --- a/modules/share.lua +++ b/modules/share.lua @@ -370,6 +370,7 @@ pfUI:RegisterModule("share", function () local encoded = Encode(DiffConfig(myconfig, defconfig, ignored) or {}) f.scroll:SetText(encoded) + CopyText(encoded) end) end