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.

118 lines
3.3 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.
--
--
-------------------------------------------------------------------------------
--[[ BEGIN STANDARD HEADER ]] --
-- Imports
local _G = _G
local LibStub = LibStub
local pairs, ipairs = pairs, ipairs
local tinsert, tremove, tconcat = table.insert, table.remove, table.concat
-- Isolate the environment
setfenv(1, select(2, ...))
--[[ END STANDARD HEADER ]] --
local function debug(...)
-- _G.ChatFrame1:print(...)
end
function BuildLink(linktype, data, text, color, link_start, link_end)
return "|cff" .. (color or "ffffff") .. "|H" .. linktype .. ":" .. data .. "|h" .. (link_start or "[") .. text .. (link_end or "]") .. "|h|r"
end
function FormatLink(linkType, linkDisplayText, ...)
local linkFormatTable = { ("|H%s"):format(linkType), ... };
local returnLink = tconcat(linkFormatTable, ":");
if linkDisplayText then
return returnLink .. ("|h%s|h"):format(linkDisplayText);
else
return returnLink .. "|h";
end
end
do
local LinkRegistry = {}
-- linktype = { linkid, linkfunc, handler }
function RegisterLinkType(linktype, who)
if linktype and linktype.linkid and linktype.linkfunc then
linktype.owner = who
tinsert(LinkRegistry, linktype)
local idx = #LinkRegistry
debug([[DBG_LINK("RegisterLinkType", who, linktype.linkid, idx)]])
return idx
end
end
function UnregisterAllLinkTypes(who)
debug([[DBG_LINK("UnregisterAllLinkTypes", who)]])
for i, linktype in ipairs(LinkRegistry) do
if linktype.owner == who then
UnregisterLinkType(i)
end
end
end
function UnregisterLinkType(idx)
tremove(LinkRegistry, idx)
end
function SetHyperlinkHook(hooks, tooltip, link, ...)
debug("SetItemRef ", link, ...)
for i, reg_link in ipairs(LinkRegistry) do
if reg_link.linkid == link:sub(1, (reg_link.linkid):len()) then
local frame
for _,v in pairs(HookedFrames) do
if v:IsMouseOver() and v:IsVisible() then
frame = v
break
end
end
if (reg_link.linkfunc(reg_link.handler, link, frame, ...) == false) then
debug([[DUMP_LINK("SetHyperlink ", "Link Handled Internally")]])
return false
end
end
end
hooks.SetHyperlink(tooltip, link, ...)
end
end