You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

820 lines
21 KiB

---------------------------------------------------------------------------------
--
-- Prat - A framework for World of Warcraft chat mods
--
-- Copyright (C) 2006-2018 Prat Development Team
--
-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License
-- as published by the Free Software Foundation; either version 2
-- of the License, or (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to:
--
-- Free Software Foundation, Inc.,
-- 51 Franklin Street, Fifth Floor,
-- Boston, MA 02110-1301, USA.
--
--
-------------------------------------------------------------------------------
Prat:AddModuleToLoad(function()
local PRAT_MODULE = Prat:RequestModuleName("UrlCopy")
if PRAT_MODULE == nil then
return
end
local module = Prat:NewModule(PRAT_MODULE)
local PL = module.PL
--[==[@debug@
PL:AddLocale(PRAT_MODULE, "enUS", {
["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-debug@]==]
-- These Localizations are auto-generated. To help with localization
-- please go to http://www.wowace.com/projects/prat-3-0/localization/
--@non-debug@
do
local L
L = {
["UrlCopy"] = {
["Change the color of the URL."] = true,
["Color URL"] = true,
["Set Color"] = true,
["Show Brackets"] = true,
["Toggle"] = true,
["Toggle showing brackets on and off."] = true,
["Toggle the module on and off."] = true,
["Toggle the URL color on and off."] = true,
["URL formating options."] = true,
["UrlCopy"] = true,
["Use Popup"] = true,
["Use popup window to show URL."] = true,
}
}
PL:AddLocale(PRAT_MODULE, "enUS",L)
L = {
["UrlCopy"] = {
["Change the color of the URL."] = "Définit la couleur des liens URL.",
["Color URL"] = "Colorier les URL",
["Set Color"] = "Couleur des URL",
["Show Brackets"] = "Afficher les crochets",
["Toggle"] = "Activé/Désactivé",
["Toggle showing brackets on and off."] = "Active/Désactive l'affichage de crochets.",
["Toggle the module on and off."] = "Active/Désactive le module.",
["Toggle the URL color on and off."] = "Active/Désactive la couleur des liens URL.",
["URL formating options."] = "Options de formatage des liens URL.",
["UrlCopy"] = "Copie de liens",
["Use Popup"] = "Utiliser une popup",
["Use popup window to show URL."] = "Utiliser une popup pour afficher le lien URL sélectionné.",
}
}
PL:AddLocale(PRAT_MODULE, "frFR",L)
L = {
["UrlCopy"] = {
["Change the color of the URL."] = "Ändert die Farbe der URL.",
["Color URL"] = "URL färben",
["Set Color"] = "Farbe einstellen",
["Show Brackets"] = "Klammern anzeigen",
["Toggle"] = "Ein-/ausschalten",
["Toggle showing brackets on and off."] = "Anzeige der Klammern ein-/ausschalten",
["Toggle the module on and off."] = "Modul ein-/ausschalten",
["Toggle the URL color on and off."] = "Farbe von URL ein-/ausschalten.",
["URL formating options."] = "URL-Formatierungsoptionen",
["UrlCopy"] = "URL-Kopie",
["Use Popup"] = "Popup benutzen",
["Use popup window to show URL."] = "Popup-Fenster benutzen, um URL anzuzeigen.",
}
}
PL:AddLocale(PRAT_MODULE, "deDE",L)
L = {
["UrlCopy"] = {
["Change the color of the URL."] = "URL의 색상을 변경합니다.",
["Color URL"] = "URL 색상",
["Set Color"] = "색상 설정",
["Show Brackets"] = "괄호 표시",
["Toggle"] = "토글",
["Toggle showing brackets on and off."] = "괄호 표시를 끄거나 켭니다.",
["Toggle the module on and off."] = "모듈을 끄거나 켭니다.",
["Toggle the URL color on and off."] = "URL 색상을 끄거나 켭니다.",
["URL formating options."] = "URL 형식 옵션입니다.",
["UrlCopy"] = "URL 복사 [UrlCopy]",
["Use Popup"] = "팝업창 사용",
["Use popup window to show URL."] = "URL을 팝업창에 표시합니다.",
}
}
PL:AddLocale(PRAT_MODULE, "koKR",L)
L = {
["UrlCopy"] = {
--[[Translation missing --]]
["Change the color of the URL."] = "Change the color of the URL.",
--[[Translation missing --]]
["Color URL"] = "Color URL",
--[[Translation missing --]]
["Set Color"] = "Set Color",
--[[Translation missing --]]
["Show Brackets"] = "Show Brackets",
--[[Translation missing --]]
["Toggle"] = "Toggle",
--[[Translation missing --]]
["Toggle showing brackets on and off."] = "Toggle showing brackets on and off.",
--[[Translation missing --]]
["Toggle the module on and off."] = "Toggle the module on and off.",
--[[Translation missing --]]
["Toggle the URL color on and off."] = "Toggle the URL color on and off.",
--[[Translation missing --]]
["URL formating options."] = "URL formating options.",
--[[Translation missing --]]
["UrlCopy"] = "UrlCopy",
--[[Translation missing --]]
["Use Popup"] = "Use Popup",
--[[Translation missing --]]
["Use popup window to show URL."] = "Use popup window to show URL.",
}
}
PL:AddLocale(PRAT_MODULE, "esMX",L)
L = {
["UrlCopy"] = {
["Change the color of the URL."] = "Изменение цвета ссылок.",
["Color URL"] = "Цвет ссылки",
["Set Color"] = "Цвет",
["Show Brackets"] = "Показывать скобки",
["Toggle"] = "Вкл/выкл",
["Toggle showing brackets on and off."] = "Вкл/Выкл отображение скобок.",
["Toggle the module on and off."] = "Вкл/Выкл данный модуль.",
["Toggle the URL color on and off."] = "Вкл/Выкл окраску ссылок.",
["URL formating options."] = "Настройки формата URL-адреса.",
["UrlCopy"] = "Копировать ссылку",
["Use Popup"] = "Всплывающее окно",
["Use popup window to show URL."] = "Использовать всплывающее окно для показа ссылки.",
}
}
PL:AddLocale(PRAT_MODULE, "ruRU",L)
L = {
["UrlCopy"] = {
["Change the color of the URL."] = "更改链接颜色",
["Color URL"] = "彩色链接",
["Set Color"] = "设置颜色",
["Show Brackets"] = "显示括号",
["Toggle"] = "切换",
["Toggle showing brackets on and off."] = "开关显示括号",
["Toggle the module on and off."] = "模块开关",
["Toggle the URL color on and off."] = "网址颜色开关",
["URL formating options."] = "网址格式选项",
["UrlCopy"] = "网址复制",
["Use Popup"] = "使用弹出",
["Use popup window to show URL."] = "用弹出窗口显示网址",
}
}
PL:AddLocale(PRAT_MODULE, "zhCN",L)
L = {
["UrlCopy"] = {
["Change the color of the URL."] = "Cambia el color de la URL.",
["Color URL"] = true,
["Set Color"] = "Establecer Color",
["Show Brackets"] = "Mostrar Corchetes",
["Toggle"] = "Alternar",
["Toggle showing brackets on and off."] = "Alterna activación de mostrar corchetes.",
["Toggle the module on and off."] = "Alterna la activación del módulo.",
["Toggle the URL color on and off."] = "Alterna activación del color de la URL.",
["URL formating options."] = "Opciones de formateo de URL.",
["UrlCopy"] = "CopiarURL",
["Use Popup"] = "Utilizar Ventanas Emergentes",
["Use popup window to show URL."] = "Utilizar ventanas emergentes para mostrar URL.",
}
}
PL:AddLocale(PRAT_MODULE, "esES",L)
L = {
["UrlCopy"] = {
["Change the color of the URL."] = "改變網址顯示的色彩",
["Color URL"] = "網址色彩",
["Set Color"] = "設定色彩",
["Show Brackets"] = "顯示括號",
["Toggle"] = "切換",
["Toggle showing brackets on and off."] = "切換是否顯示括號。",
["Toggle the module on and off."] = "切換是否啟用模組。",
["Toggle the URL color on and off."] = "切換是否顯示網址色彩。",
["URL formating options."] = "網址格式化選項",
["UrlCopy"] = "網址複製",
["Use Popup"] = "使用彈出視窗",
["Use popup window to show URL."] = "使用彈出視窗用以顯示網址",
}
}
PL:AddLocale(PRAT_MODULE, "zhTW",L)
end
--@end-non-debug@
Prat:SetModuleDefaults(module.name, {
profile = {
on = true,
bracket = true,
popup = true,
colorurl = true,
color = {
r = 1,
g = 1,
b = 1,
a = 1
},
}
})
do
local function Link(...)
return module:Link(...)
end
local function LinkwTLD(...)
return module:LinkwTLD(...)
end
local function Skip(...)
return module:Skip(...)
end
Prat:SetModulePatterns(module, {
-- X://Y url
{ pattern = "^(%a[%w+.-]+://%S+)", matchfunc = Link },
{ pattern = "%f[%S](%a[%w+.-]+://%S+)", matchfunc = Link },
-- www.X.Y url
{ pattern = "^(www%.[-%w_%%]+%.(%a%a+))", matchfunc = LinkwTLD },
{ pattern = "%f[%S](www%.[-%w_%%]+%.(%a%a+))", matchfunc = LinkwTLD },
-- "W X"@Y.Z email (this is seriously a valid email)
{ pattern = '^(%"[^%"]+%"@[%w_.-%%]+%.(%a%a+))', matchfunc = LinkwTLD },
{ pattern = '%f[%S](%"[^%"]+%"@[%w_.-%%]+%.(%a%a+))', matchfunc = LinkwTLD },
-- X@Y.Z email
{ pattern = "(%S+@[%w_.-%%]+%.(%a%a+))", matchfunc = LinkwTLD },
-- XXX.YYY.ZZZ.WWW:VVVV/UUUUU IPv4 address with port and path
{ pattern = "^([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d:[0-6]?%d?%d?%d?%d/%S+)", matchfunc = Link },
{
pattern = "%f[%S]([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d:[0-6]?%d?%d?%d?%d/%S+)",
matchfunc = Link
},
-- XXX.YYY.ZZZ.WWW:VVVV IPv4 address with port (IP of ts server for example)
{ pattern = "^([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d:[0-6]?%d?%d?%d?%d)%f[%D]", matchfunc = Link },
{
pattern = "%f[%S]([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d:[0-6]?%d?%d?%d?%d)%f[%D]",
matchfunc = Link
},
-- XXX.YYY.ZZZ.WWW/VVVVV IPv4 address with path
{ pattern = "^([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%/%S+)", matchfunc = Link },
{ pattern = "%f[%S]([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%/%S+)", matchfunc = Link },
-- XXX.YYY.ZZZ.WWW IPv4 address
{ pattern = "^([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%)%f[%D]", matchfunc = Link },
{ pattern = "%f[%S]([0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%.[0-2]?%d?%d%)%f[%D]", matchfunc = Link },
-- X.Y.Z:WWWW/VVVVV url with port and path
{ pattern = "^([%w_.-%%]+[%w_-%%]%.(%a%a+):[0-6]?%d?%d?%d?%d/%S+)", matchfunc = LinkwTLD },
{ pattern = "%f[%S]([%w_.-%%]+[%w_-%%]%.(%a%a+):[0-6]?%d?%d?%d?%d/%S+)", matchfunc = LinkwTLD },
-- X.Y.Z:WWWW url with port (ts server for example)
{ pattern = "^([%w_.-%%]+[%w_-%%]%.(%a%a+):[0-6]?%d?%d?%d?%d)%f[%D]", matchfunc = LinkwTLD },
{ pattern = "%f[%S]([%w_.-%%]+[%w_-%%]%.(%a%a+):[0-6]?%d?%d?%d?%d)%f[%D]", matchfunc = LinkwTLD },
-- X.Y.Z/WWWWW url with path
{ pattern = "^([%w_.-%%]+[%w_-%%]%.(%a%a+)/%S+)", matchfunc = LinkwTLD },
{ pattern = "%f[%S]([%w_.-%%]+[%w_-%%]%.(%a%a+)/%S+)", matchfunc = LinkwTLD },
-- X.Y.Z url
{ pattern = "^([-%w_%%]+%.[-%w_%%]+%.(%a%a+))", matchfunc = LinkwTLD },
{ pattern = "%f[%S]([-%w_%%]+%.[-%w_%%]+%.(%a%a+))", matchfunc = LinkwTLD },
{ pattern = "^([-%w_%%]+%.(%a%a+))", matchfunc = LinkwTLD },
{ pattern = "%f[%S]([-%w_%%]+%.(%a%a+))", matchfunc = LinkwTLD },
})
end
module.tlds = {
ONION = true,
-- Copied from http://data.iana.org/TLD/tlds-alpha-by-domain.txt
--# Version 2008020401, Last Updated Tue Feb 5 09:07:01 2008 UTC
AC = true,
AD = true,
AE = true,
AERO = true,
AF = true,
AG = true,
AI = true,
AL = true,
AM = true,
AN = true,
AO = true,
AQ = true,
AR = true,
ARPA = true,
AS = true,
ASIA = true,
AT = true,
AU = true,
AW = true,
AX = true,
AZ = true,
BA = true,
BB = true,
BD = true,
BE = true,
BF = true,
BG = true,
BH = true,
BI = true,
BIZ = true,
BJ = true,
BM = true,
BN = true,
BO = true,
BR = true,
BS = true,
BT = true,
BV = true,
BW = true,
BY = true,
BZ = true,
CA = true,
CAT = true,
CC = true,
CD = true,
CF = true,
CG = true,
CH = true,
CI = true,
CK = true,
CL = true,
CM = true,
CN = true,
CO = true,
COM = true,
COOP = true,
CR = true,
CU = true,
CV = true,
CX = true,
CY = true,
CZ = true,
DE = true,
DJ = true,
DK = true,
DM = true,
DO = true,
DZ = true,
EC = true,
EDU = true,
EE = true,
EG = true,
ER = true,
ES = true,
ET = true,
EU = true,
FI = true,
FJ = true,
FK = true,
FM = true,
FO = true,
FR = true,
GA = true,
GB = true,
GD = true,
GE = true,
GF = true,
GG = true,
GH = true,
GI = true,
GL = true,
GM = true,
GN = true,
GOV = true,
GP = true,
GQ = true,
GR = true,
GS = true,
GT = true,
GU = true,
GW = true,
GY = true,
HK = true,
HM = true,
HN = true,
HR = true,
HT = true,
HU = true,
ID = true,
IE = true,
IL = true,
IM = true,
IN = true,
INFO = true,
INT = true,
IO = true,
IQ = true,
IR = true,
IS = true,
IT = true,
JE = true,
JM = true,
JO = true,
JOBS = true,
JP = true,
KE = true,
KG = true,
KH = true,
KI = true,
KM = true,
KN = true,
KP = true,
KR = true,
KW = true,
KY = true,
KZ = true,
LA = true,
LB = true,
LC = true,
LI = true,
LK = true,
LR = true,
LS = true,
LT = true,
LU = true,
LV = true,
LY = true,
MA = true,
MC = true,
MD = true,
ME = true,
MG = true,
MH = true,
MIL = true,
MK = true,
ML = true,
MM = true,
MN = true,
MO = true,
MOBI = true,
MP = true,
MQ = true,
MR = true,
MS = true,
MT = true,
MU = true,
MUSEUM = true,
MV = true,
MW = true,
MX = true,
MY = true,
MZ = true,
NA = true,
NAME = true,
NC = true,
NE = true,
NET = true,
NF = true,
NG = true,
NI = true,
NL = true,
NO = true,
NP = true,
NR = true,
NU = true,
NZ = true,
OM = true,
ORG = true,
PA = true,
PE = true,
PF = true,
PG = true,
PH = true,
PK = true,
PL = true,
PM = true,
PN = true,
PR = true,
PRO = true,
PS = true,
PT = true,
PW = true,
PY = true,
QA = true,
RE = true,
RO = true,
RS = true,
RU = true,
RW = true,
SA = true,
SB = true,
SC = true,
SD = true,
SE = true,
SG = true,
SH = true,
SI = true,
SJ = true,
SK = true,
SL = true,
SM = true,
SN = true,
SO = true,
SR = true,
ST = true,
SU = true,
SV = true,
SY = true,
SZ = true,
TC = true,
TD = true,
TEL = true,
TF = true,
TG = true,
TH = true,
TJ = true,
TK = true,
TL = true,
TM = true,
TN = true,
TO = true,
TP = true,
TR = true,
TRAVEL = true,
TT = true,
TV = true,
TW = true,
TZ = true,
UA = true,
UG = true,
UK = true,
UM = true,
US = true,
UY = true,
UZ = true,
VA = true,
VC = true,
VE = true,
VG = true,
VI = true,
VN = true,
VU = true,
WF = true,
WS = true,
YE = true,
YT = true,
YU = true,
ZA = true,
ZM = true,
ZW = true,
}
--[[
XN--0ZWM56D = true,
XN--11B5BS3A9AJ6G = true,
XN--80AKHBYKNJ4F = true,
XN--9T4B11YI5A = true,
XN--DEBA0AD = true,
XN--G6W251D = true,
XN--HGBK6AJ7F53BBA = true,
XN--HLCJ6AYA9ESC7A = true,
XN--JXALPDLP = true,
XN--KGBECHTV = true,
XN--ZCKZAH = true,
]]
Prat:SetModuleOptions(module, {
name = PL["UrlCopy"],
desc = PL["URL formating options."],
type = "group",
args = {
bracket = {
name = PL["Show Brackets"],
desc = PL["Toggle showing brackets on and off."],
type = "toggle",
order = 160,
},
popup = {
name = PL["Use Popup"],
desc = PL["Use popup window to show URL."],
type = "toggle",
order = 170,
},
colorurl = {
name = PL["Color URL"],
desc = PL["Toggle the URL color on and off."],
type = "toggle",
order = 180,
},
color = {
name = PL["Set Color"],
desc = PL["Change the color of the URL."],
type = "color",
order = 190,
get = "GetColorValue",
set = "SetColorValue",
disabled = "IsSetColorDisabled",
},
}
})
function module:IsSetColorDisabled()
if not self.db.profile.colorurl then
return true
end
return false
end
function module:OnModuleEnable()
Prat.RegisterLinkType({ linkid = "url", linkfunc = module.Url_Link, handler = module }, module.name)
end
function module:OnModuleDisable()
Prat.UnregisterAllLinkTypes(self)
end
--[[------------------------------------------------
Core Functions
------------------------------------------------]] --
function module:GetDescription()
return PL["URL formating options."]
end
function module:Url_Link(link, frame, ...)
self:ShowUrl(link, frame)
return false
end
do
local function NOP() return end
function module:StaticPopupUrl(link)
StaticPopupDialogs["SHOW_URL"] = StaticPopupDialogs["SHOW_URL"] or {
text = "URL : %s",
button2 = ACCEPT,
hasEditBox = 1,
hasWideEditBox = 1,
editBoxWidth = 350,
preferredIndex = 3,
OnShow = function(this, ...)
this:SetWidth(420)
local editBox = _G[this:GetName() .. "WideEditBox"] or _G[this:GetName() .. "EditBox"]
editBox:SetText(StaticPopupDialogs["SHOW_URL"].urltext)
editBox:SetFocus()
editBox:HighlightText()
local button = _G[this:GetName() .. "Button2"]
button:ClearAllPoints()
button:SetWidth(200)
button:SetPoint("CENTER", editBox, "CENTER", 0, -30)
end,
OnHide = NOP,
OnAccept = NOP,
OnCancel = NOP,
EditBoxOnEscapePressed = function(this, ...) this:GetParent():Hide() end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1
}
StaticPopupDialogs["SHOW_URL"].urltext = link
StaticPopup_Show("SHOW_URL", link)
end
end
function module:EditBoxUrl(link, frame)
local editBox = ChatEdit_ChooseBoxForSend(frame);
if (editBox ~= ChatEdit_GetActiveWindow()) then
ChatFrame_OpenChat(link, frame);
else
editBox:SetText(link)
end
end
function module:ShowUrl(link, frame)
link = strsub(link, 5)
if (self.db.profile.popup) then
self:StaticPopupUrl(link)
else
self:EditBoxUrl(link, frame)
end
end
-- Utility Function (called by gsub)
function module:RawLink(link)
local returnedLink = ""
if self.db.profile.colorurl then
local c = self.db.profile.color
local color = string.format("%02x%02x%02x", c.r * 255, c.g * 255, c.b * 255)
returnedLink = "|cff" .. color
end
link = link:gsub('%%', '%%%%')
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 module:Link(link, ...)
if link == nil then
return ""
end
return self:AddLink(self:RawLink(link))
end
function module:LinkwTLD(link, tld, ...)
if link == nil or tld == nil then
return ""
end
if self.tlds[tld:upper()] then
link = self:RawLink(link)
end
return self:AddLink(link)
end
function module:Skip(link, ...)
if link == nil then
return ""
end
return self:AddLink(link)
end
function module:AddLink(link)
return Prat:RegisterMatch(link)
end
return
end) -- Prat:AddModuleToLoad