WoWInterface SVN ReURL

[/] [trunk/] [ReURL/] [ReURL.lua] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

--------------------------------------------------------------------------
-- ReURL.lua 
--------------------------------------------------------------------------
--[[
ReURL

author: AnduinLothar KarlKFI@cosmosui.org

-Click chat URL's to insert into the editbox for easy copy.

Change Log:
v2.0
-ChatFrame_OnEvent hook removed in favor of ChatFrame#.AddMessage hooks
v1.0
- Initial Release

]]--

--              For CHAT_MSG types: 
--                      arg1 - message 
--                      arg2 - player
--                      arg3 - language (or nil)
--                      arg4 - fancy channel name (5. General - Stormwind City)
--                                 *Zone is always current zone even if not the same as the channel name
--                      arg5 - Second player name when two users are passed for a CHANNEL_NOTICE_USER (E.G. x kicked y)
--                      arg6 - AFK/DND "CHAT_FLAG_"..arg6 flags
--                      arg7 - zone ID
--                              1 (2^0) - General
--                              2 (2^1) - Trade
--                              2097152 (2^21) - LocalDefense
--                              8388608 (2^23) - LookingForGroup
--                              (these numbers are added bitwise)
--                      arg8 - channel number (5)
--                      arg9 - Full channel name (General - Stormwind City)
--                                 *Not from GetChannelList

local SetItemRef_orig = SetItemRef;
function ReURL_SetItemRef(link, text, button)
        if (strsub(link, 1, 3) == "url") then
                local url = strsub(link, 5);
                if (not ChatFrameEditBox:IsShown()) then
                        ChatFrame_OpenChat(url, DEFAULT_CHAT_FRAME);
                else
                        ChatFrameEditBox:Insert(url);
                end
        else
                SetItemRef_orig(link, text, button);
        end
end
SetItemRef = ReURL_SetItemRef;

function ReURL_AddLinkSyntax(chatstring)
        if (type(chatstring) == "string") then
                local extraspace;
                if (not strfind(chatstring, "^ ")) then
                        extraspace = true;
                        chatstring = " "..chatstring;
                end
                chatstring = gsub (chatstring, " www%.([_A-Za-z0-9-]+)%.(%S+)%s?", ReURL_Link("www.%1.%2"))
                chatstring = gsub (chatstring, " (%a+)://(%S+)%s?", ReURL_Link("%1://%2"))
                chatstring = gsub (chatstring, " ([_A-Za-z0-9-%.]+)@([_A-Za-z0-9-]+)(%.+)([_A-Za-z0-9-%.]+)%s?", ReURL_Link("%1@%2%3%4"))
                chatstring = gsub (chatstring, " (%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?):(%d%d?%d?%d?%d?)%s?", ReURL_Link("%1.%2.%3.%4:%5"))
                chatstring = gsub (chatstring, " (%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%s?", ReURL_Link("%1.%2.%3.%4"))
                if (extraspace) then
                        chatstring = strsub(chatstring, 2);
                end
        end
        return chatstring
end

REURL_COLOR = "FFFF55";
ReURL_Brackets = nil;
ReUR_CustomColor = true;

function ReURL_Link(url)
        if (ReUR_CustomColor) then
                if (ReURL_Brackets) then
                        url = " |cff"..REURL_COLOR.."|Hurl:"..url.."|h["..url.."]|h|r "
                else
                        url = " |cff"..REURL_COLOR.."|Hurl:"..url.."|h"..url.."|h|r "
                end
        else
                if (ReURL_Brackets) then
                        url = " |Hurl:"..url.."|h["..url.."]|h "
                else
                        url = " |Hurl:"..url.."|h"..url.."|h "
                end
        end
        return url
end

--Hook all the AddMessage funcs
for i=1, NUM_CHAT_WINDOWS do
        local frame = getglobal("ChatFrame"..i)
        local addmessage = frame.AddMessage
        frame.AddMessage = function(self, text, ...) addmessage(self, ReURL_AddLinkSyntax(text), ...) end
end

Go to most recent revision | Compare with Previous | Blame