Initial commit
This commit is contained in:
Executable
+269
@@ -0,0 +1,269 @@
|
||||
--[[
|
||||
Name: Prat_UrlCopy
|
||||
Revision: $Revision: 16019 $
|
||||
Author(s): Krtek (krtek4@gmail.com)
|
||||
Website: http://www.wowace.com/files/index.php?path=Prat/
|
||||
Documentation: http://www.wowace.com/wiki/Prat/Integrated_Modules#UrlCopy
|
||||
SVN: http://svn.wowace.com/wowace/trunk/Prat/
|
||||
Description: Module for Prat that makes it easy to copy URL"s in chat windows.
|
||||
Dependencies: Prat
|
||||
]]
|
||||
|
||||
local L = AceLibrary("AceLocale-2.2"):new("PratUrlCopy")
|
||||
|
||||
L:RegisterTranslations("enUS", function() return {
|
||||
["UrlCopy"] = true,
|
||||
["URL formating options."] = true,
|
||||
["Show Brackets"] = true,
|
||||
["Toggle showing brackets on and off."] = true,
|
||||
["Use Popup"] = true,
|
||||
["Use popup window to show URL."] = true,
|
||||
["Color URL"] = true,
|
||||
["Toggle the URL color on and off."] = true,
|
||||
["Set Color"] = true,
|
||||
["Change the color of the URL."] = true,
|
||||
["Toggle"] = true,
|
||||
["Toggle the module on and off."] = true,
|
||||
} end)
|
||||
|
||||
L:RegisterTranslations("ruRU", function() return {
|
||||
["UrlCopy"] = "UrlCopy",
|
||||
["URL formating options."] = "Настройки формата URL-адреса.",
|
||||
["Show Brackets"] = "Показывать скобки",
|
||||
["Toggle showing brackets on and off."] = "Вкл/Выкл отображение скобок.",
|
||||
["Use Popup"] = "Всплывающее окно",
|
||||
["Use popup window to show URL."] = "Использовать всплывающее окно для отображение ссылки.",
|
||||
["Color URL"] = "Цвет ссылки",
|
||||
["Toggle the URL color on and off."] = "Вкл/Выкл окраску ссылок.",
|
||||
["Set Color"] = "Цвет",
|
||||
["Change the color of the URL."] = "Изменение цвета ссылок.",
|
||||
["Toggle"] = "Вкл/Выкл",
|
||||
["Toggle the module on and off."] = "Вкл/Выкл модуль.",
|
||||
} end)
|
||||
|
||||
L:RegisterTranslations("zhCN", function() return {
|
||||
["UrlCopy"] = "复制超链接",
|
||||
["URL formating options."] = "超链接格式选项。",
|
||||
["Show Brackets"] = "显示括号",
|
||||
["Toggle showing brackets on and off."] = "切换显示括号功能打开与关闭。",
|
||||
["Use Popup"] = "弹出",
|
||||
["Use popup window to show URL."] = "用弹出窗口显示超链接。",
|
||||
["Color URL"] = "颜色",
|
||||
["Toggle the URL color on and off."] = "切换超链接颜色打开与关闭。",
|
||||
["Set Color"] = "设置颜色",
|
||||
["Change the color of the URL."] = "更改超链接颜色。",
|
||||
["Toggle"] = "切换",
|
||||
["Toggle the module on and off."] = "切换此模块的打开与关闭。",
|
||||
} end)
|
||||
|
||||
|
||||
L:RegisterTranslations("koKR", function() return {
|
||||
["UrlCopy"] = "URL 복사",
|
||||
["URL formating options."] = "URL 형식 설정입니다.",
|
||||
["Show Brackets"] = "괄호 표시",
|
||||
["Toggle showing brackets on and off."] = "괄호 표시 켜고 끄기를 전환합니다.",
|
||||
["Use Popup"] = "팝업 사용",
|
||||
["Use popup window to show URL."] = "URL 표시를 위한 팝업창을 사용합니다.",
|
||||
["Color URL"] = "색상 URL",
|
||||
["Toggle the URL color on and off."] = "URL 색상 켜고 끄기를 전환합니다.",
|
||||
["Set Color"] = "색상 설정",
|
||||
["Change the color of the URL."] = "URL의 색상을 변경합니다.",
|
||||
["Toggle"] = "전환",
|
||||
["Toggle the module on and off."] = "모듈 켜고 끄기를 전환합니다.",
|
||||
} end)
|
||||
|
||||
Prat_UrlCopy = Prat:NewModule("urlcopy")
|
||||
|
||||
function Prat_UrlCopy:OnInitialize()
|
||||
self.db = Prat:AcquireDBNamespace("UrlCopy")
|
||||
Prat:RegisterDefaults("UrlCopy", "profile", {
|
||||
on = true,
|
||||
bracket = true,
|
||||
popup = true,
|
||||
colorurl = true,
|
||||
color = {
|
||||
r = 1,
|
||||
g = 1,
|
||||
b = 1,
|
||||
},
|
||||
})
|
||||
Prat.Options.args.urlcopy = {
|
||||
name = L["UrlCopy"],
|
||||
desc = L["URL formating options."],
|
||||
type = "group",
|
||||
args = {
|
||||
bracket = {
|
||||
name = L["Show Brackets"],
|
||||
desc = L["Toggle showing brackets on and off."],
|
||||
type = "toggle",
|
||||
order = 160,
|
||||
get = function() return self.db.profile.bracket end,
|
||||
set = function(v) self.db.profile.bracket = v end,
|
||||
},
|
||||
popup = {
|
||||
name = L["Use Popup"],
|
||||
desc = L["Use popup window to show URL."],
|
||||
type = "toggle",
|
||||
order = 170,
|
||||
get = function() return self.db.profile.popup end,
|
||||
set = function(v) self.db.profile.popup = v end,
|
||||
},
|
||||
colorurl = {
|
||||
name = L["Color URL"],
|
||||
desc = L["Toggle the URL color on and off."],
|
||||
type = "toggle",
|
||||
order = 180,
|
||||
get = function() return self.db.profile.colorurl end,
|
||||
set = function(v) self.db.profile.colorurl = v end
|
||||
},
|
||||
setcolor = {
|
||||
name = L["Set Color"],
|
||||
desc = L["Change the color of the URL."],
|
||||
type = "color",
|
||||
order = 190,
|
||||
get = function() return self.db.profile.color.r, self.db.profile.color.g, self.db.profile.color.b end,
|
||||
set = function(r, g, b, a) self.db.profile.color.r, self.db.profile.color.g, self.db.profile.color.b = r, g, b end,
|
||||
disabled = function() if not self.db.profile.colorurl then return true else return false end end,
|
||||
},
|
||||
toggle = {
|
||||
name = L["Toggle"],
|
||||
desc = L["Toggle the module on and off."],
|
||||
type = "toggle",
|
||||
order = 200,
|
||||
get = function() return self.db.profile.on end,
|
||||
set = function(v) self.db.profile.on = Prat:ToggleModuleActive("urlcopy") end
|
||||
},
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
function Prat_UrlCopy:OnEnable()
|
||||
for i=1,NUM_CHAT_WINDOWS do
|
||||
self:Hook(getglobal("ChatFrame"..i), "AddMessage")
|
||||
end
|
||||
|
||||
self:Hook("SetItemRef")
|
||||
end
|
||||
|
||||
-- Hook
|
||||
function Prat_UrlCopy:AddMessage(frame, text, ...)
|
||||
if text then
|
||||
text = Prat_UrlCopy:ProcessText (text)
|
||||
end
|
||||
self.hooks[frame].AddMessage(frame, text, unpack(arg))
|
||||
end
|
||||
|
||||
function Prat_UrlCopy:SetItemRef(link, text, button)
|
||||
if ( strsub(link, 1, 3) == "url" ) then
|
||||
Prat_UrlCopy:ShowUrl(link)
|
||||
else
|
||||
self.hooks.SetItemRef(link, text, button);
|
||||
end
|
||||
end
|
||||
|
||||
-- Utility Function
|
||||
function Prat_UrlCopy:Link (link)
|
||||
local returnedLink = " "
|
||||
|
||||
if self.db.profile.colorurl then
|
||||
local color = string.format("%02x%02x%02x", self.db.profile.color.r*255, self.db.profile.color.g*255, self.db.profile.color.b*255)
|
||||
returnedLink = " |cff" .. color
|
||||
end
|
||||
|
||||
returnedLink = returnedLink .. "|Hurl:" .. link .. "|h"
|
||||
|
||||
if ( self.db.profile.bracket ) then
|
||||
returnedLink = returnedLink .. "[" .. link .. "]"
|
||||
else
|
||||
returnedLink = returnedLink .. link
|
||||
end
|
||||
|
||||
returnedLink = returnedLink .. "|h|r "
|
||||
|
||||
return returnedLink
|
||||
end
|
||||
|
||||
function Prat_UrlCopy:ProcessText(text)
|
||||
text = Prat_UrlCopy:Decompose(text)
|
||||
|
||||
return text
|
||||
end
|
||||
|
||||
function Prat_UrlCopy:Decompose (chatstring)
|
||||
if chatstring ~= nil then
|
||||
-- www.X.Y url
|
||||
chatstring = string.gsub (chatstring, " www%.([_A-Za-z0-9-]+)%.(%S+)%s?", Prat_UrlCopy:Link ("www.%1.%2"))
|
||||
|
||||
-- X://Y url
|
||||
chatstring = string.gsub (chatstring, " (%a+)://(%S+)%s?", Prat_UrlCopy:Link ("%1://%2"))
|
||||
|
||||
-- X@X.Y url (---> email)
|
||||
chatstring = string.gsub (chatstring, " ([_A-Za-z0-9-%.]+)@([_A-Za-z0-9-]+)%.([_A-Za-z0-9-%.]+)%s?", Prat_UrlCopy:Link ("%1@%2.%3"))
|
||||
|
||||
-- XXX.YYY.ZZZ.WWW:VVVV url (IP of ts server for example)
|
||||
chatstring = string.gsub (chatstring, " (%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?):(%d%d?%d?%d?%d?)%s?", Prat_UrlCopy:Link ("%1.%2.%3.%4:%5"))
|
||||
|
||||
-- XXX.YYY.ZZZ.WWW url (---> IP)
|
||||
chatstring = string.gsub (chatstring, " (%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%s?", Prat_UrlCopy:Link ("%1.%2.%3.%4"))
|
||||
|
||||
-- X.Y.Z url
|
||||
chatstring = string.gsub (chatstring, " ([_A-Za-z0-9-]+)%.([_A-Za-z0-9-]+)%.(%S+)%s?", Prat_UrlCopy:Link ("%1.%2.%3"))
|
||||
|
||||
-- X.Y.Z:WWWW url (ts server for example)
|
||||
chatstring = string.gsub (chatstring, " ([_A-Za-z0-9-]+)%.([_A-Za-z0-9-]+)%.(%S+)%:([_0-9-]+)%s?", Prat_UrlCopy:Link ("%1.%2.%3:%4"))
|
||||
|
||||
end
|
||||
return chatstring
|
||||
end
|
||||
|
||||
function Prat_UrlCopy:StaticPopupUrl(link)
|
||||
StaticPopupDialogs["SHOW_URL"] = {
|
||||
text = "URL : %s",
|
||||
button2 = TEXT(ACCEPT),
|
||||
hasEditBox = 1,
|
||||
hasWideEditBox = 1,
|
||||
showAlert = 1, -- HACK : it"s the only way I found to make de StaticPopup have sufficient width to show WideEditBox :(
|
||||
|
||||
OnShow = function()
|
||||
local editBox = getglobal(this:GetName().."WideEditBox");
|
||||
editBox:SetText(format(link));
|
||||
editBox:SetFocus();
|
||||
editBox:HighlightText(0);
|
||||
|
||||
local button = getglobal(this:GetName().."Button2");
|
||||
button:ClearAllPoints();
|
||||
button:SetWidth(200);
|
||||
button:SetPoint("CENTER", editBox, "CENTER", 0, -30);
|
||||
|
||||
getglobal(this:GetName().."AlertIcon"):Hide(); -- HACK : we hide the false AlertIcon
|
||||
end,
|
||||
|
||||
OnHide = function() end,
|
||||
OnAccept = function() end,
|
||||
OnCancel = function() end,
|
||||
EditBoxOnEscapePressed = function() this:GetParent():Hide(); end,
|
||||
timeout = 0,
|
||||
whileDead = 1,
|
||||
hideOnEscape = 1
|
||||
};
|
||||
|
||||
StaticPopup_Show ("SHOW_URL", link);
|
||||
end
|
||||
|
||||
function Prat_UrlCopy:EditBoxUrl(link)
|
||||
if (not ChatFrameEditBox:IsShown()) then
|
||||
ChatFrame_OpenChat(link, DEFAULT_CHAT_FRAME);
|
||||
else
|
||||
ChatFrameEditBox:Insert(link);
|
||||
end
|
||||
end
|
||||
|
||||
function Prat_UrlCopy:ShowUrl(link)
|
||||
link = strsub(link, 5)
|
||||
if ( self.db.profile.popup ) then
|
||||
Prat_UrlCopy:StaticPopupUrl(link)
|
||||
else
|
||||
Prat_UrlCopy:EditBoxUrl(link)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user