This commit is contained in:
2024-02-29 00:23:53 -05:00
commit bf1ead5837
7 changed files with 300 additions and 0 deletions

52
Modules/CopyLinks.lua Normal file
View File

@ -0,0 +1,52 @@
--------------------------------------------------------------------------------
-- # MODULES > COPY LINKS
--------------------------------------------------------------------------------
local patterns = {
'(https://%S+%.%S+)',
'(http://%S+%.%S+)',
'(www%.%S+%.%S+)',
'(%d+%.%d+%.%d+%.%d+:?%d*/?%S*)'
}
for _, event in next, {
'CHAT_MSG_SAY',
'CHAT_MSG_YELL',
'CHAT_MSG_WHISPER',
'CHAT_MSG_WHISPER_INFORM',
'CHAT_MSG_GUILD',
'CHAT_MSG_OFFICER',
'CHAT_MSG_PARTY',
'CHAT_MSG_PARTY_LEADER',
'CHAT_MSG_RAID',
'CHAT_MSG_RAID_LEADER',
'CHAT_MSG_RAID_WARNING',
'CHAT_MSG_INSTANCE_CHAT',
'CHAT_MSG_INSTANCE_CHAT_LEADER',
'CHAT_MSG_BN_WHISPER',
'CHAT_MSG_BN_WHISPER_INFORM',
'CHAT_MSG_CHANNEL',
'CHAT_MSG_SYSTEM'
} do
ChatFrame_AddMessageEventFilter(event, function(_, event, str, ...)
for _, pattern in pairs(patterns) do
local result, match = string.gsub(str, pattern, '|cff1994ff|Hurl:%1|h[%1]|h|r')
if match > 0 then
return false, result, ...
end
end
end)
end
local SetHyperlink = _G.ItemRefTooltip.SetHyperlink
function _G.ItemRefTooltip:SetHyperlink(link, ...)
if link and (strsub(link, 1, 3) == 'url') then
local editbox = ChatEdit_ChooseBoxForSend()
ChatEdit_ActivateChat(editbox)
editbox:Insert(string.sub(link, 5))
editbox:HighlightText()
return
end
SetHyperlink(self, link, ...)
end

View File

@ -0,0 +1,51 @@
local addon, ns = ...
local L = ns.L
--------------------------------------------------------------------------------
-- # MODULES > SHORT CHANNEL NAMES
--------------------------------------------------------------------------------
_G.CHAT_INSTANCE_CHAT_GET = '|Hchannel:INSTANCE_CHAT|h['..L.SHORT_INSTANCE..']|h %s:\32'
_G.CHAT_INSTANCE_CHAT_LEADER_GET = '|Hchannel:INSTANCE_CHAT|h['..L.SHORT_INSTANCE_LEADER..']|h %s:\32'
_G.CHAT_BN_WHISPER_GET = L.SHORT_WHISPER_FROM..' %s:\32'
_G.CHAT_GUILD_GET = '|Hchannel:GUILD|h['..L.SHORT_GUILD..']|h %s:\32'
_G.CHAT_OFFICER_GET = '|Hchannel:OFFICER|h['..L.SHORT_OFFICER..']|h %s:\32'
_G.CHAT_PARTY_GET = '|Hchannel:PARTY|h['..L.SHORT_PARTY..']|h %s:\32'
_G.CHAT_PARTY_LEADER_GET = '|Hchannel:PARTY|h['..L.SHORT_PARTY_LEADER..']|h %s:\32'
_G.CHAT_RAID_GET = '|Hchannel:RAID|h['..L.SHORT_RAID..']|h %s:\32'
_G.CHAT_RAID_LEADER_GET = '|Hchannel:RAID|h['..L.SHORT_RAID_LEADER..']|h %s:\32'
_G.CHAT_RAID_WARNING_GET = '['..L.SHORT_RAID_WARNING..'] %s:\32'
_G.CHAT_SAY_GET = '%s:\32'
_G.CHAT_WHISPER_GET = L.SHORT_WHISPER_FROM..' %s:\32'
_G.CHAT_YELL_GET = '%s:\32'
_G.CHAT_FLAG_AFK = '|cffE7E716'..L.SHORT_FLAG_AFK..'|r '
_G.CHAT_FLAG_DND = '|cffFF0000'..L.SHORT_FLAG_DND..'|r '
_G.CHAT_FLAG_GM = '|cff4154F5'..L.SHORT_FLAG_GM..'|r '
_G.ERR_FRIEND_ONLINE_SS = '|Hplayer:%s|h%s|h '..L.SHORT_STATUS_ONLINE
_G.ERR_FRIEND_OFFLINE_S = '%s '..L.SHORT_STATUS_OFFLINE
local f = CreateFrame('Frame')
f:RegisterEvent('PLAYER_ENTERING_WORLD')
f:SetScript('OnEvent', function(self, event)
local origs = {}
local function Strip(info, name)
return string.format('|Hplayer:%s|h[%s]|h', info, name:gsub('%-[^|]+', ''))
end
local AddMessage = function(self, text, ...)
if type(text) == 'string' then
text = text:gsub('|h%[(%d+)%. .-%]|h', '|h[%1]|h')
text = text:gsub('|Hplayer:(.-)|h%[(.-)%]|h', Strip)
end
return origs[self](self, text, ...)
end
for i = 1, NUM_CHAT_WINDOWS do
if i ~= 2 then
origs[_G['ChatFrame' .. i]] = _G['ChatFrame' .. i].AddMessage
_G['ChatFrame' .. i].AddMessage = AddMessage
end
end
end)

115
Modules/Style.lua Normal file
View File

@ -0,0 +1,115 @@
--------------------------------------------------------------------------------
-- # MODULES > STYLE
--------------------------------------------------------------------------------
-- add additional font sizes
CHAT_FONT_HEIGHTS = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
-- fade chat frame and tabs
CHAT_FRAME_FADE_TIME = .5
CHAT_TAB_SHOW_DELAY = 0
CHAT_TAB_HIDE_DELAY = .5
CHAT_FRAME_FADE_OUT_TIME = .5
CHAT_FRAME_TAB_NORMAL_MOUSEOVER_ALPHA = 1
CHAT_FRAME_TAB_NORMAL_NOMOUSE_ALPHA = .2
CHAT_FRAME_TAB_SELECTED_MOUSEOVER_ALPHA = 1
CHAT_FRAME_TAB_SELECTED_NOMOUSE_ALPHA = .8
CHAT_FRAME_TAB_ALERTING_MOUSEOVER_ALPHA = 1
CHAT_FRAME_TAB_ALERTING_NOMOUSE_ALPHA = 1
local f = CreateFrame('Frame')
f:RegisterEvent('PLAYER_ENTERING_WORLD')
f:SetScript('OnEvent', function(self, event)
-- hide social button
QuickJoinToastButton:HookScript('OnShow', QuickJoinToastButton.Hide)
QuickJoinToastButton:Hide()
-- hide shortcut button for emotes/languages/etc
ChatFrameMenuButton:HookScript('OnShow', ChatFrameMenuButton.Hide)
ChatFrameMenuButton:Hide()
-- hide voice deafen button
ChatFrameToggleVoiceDeafenButton:HookScript('OnShow', ChatFrameToggleVoiceDeafenButton.Hide)
ChatFrameToggleVoiceDeafenButton:Hide()
-- hide voice mute button
ChatFrameToggleVoiceMuteButton:HookScript('OnShow', ChatFrameToggleVoiceMuteButton.Hide)
ChatFrameToggleVoiceMuteButton:Hide()
ChatFrameChannelButton:HookScript('OnShow', ChatFrameChannelButton.Hide)
ChatFrameChannelButton:Hide()
-- keep track of frames we have already seen
local frames = {}
local function SkinChatFrames(frame)
if frames[frame] then return end
local name = frame:GetName()
local editbox = _G[name..'EditBox']
-- hide button frame
_G[name..'ButtonFrame']:Hide()
-- strip edit box textures
for k = 3, 8 do
select(k, editbox:GetRegions()):SetTexture(nil)
end
-- allow arrow keys in edit box
editbox:SetAltArrowKeyMode(false)
-- create backdrop for edit box
Mixin(editbox, BackdropTemplateMixin)
editbox:SetBackdrop( {
bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
edgeFile = "Interface\\Buttons\\WHITE8x8",
tile = true,
tileEdge = true,
tileSize = 8,
edgeSize = 1,
insets = { left = 1, right = 1, top = 1, bottom = 1 },
})
editbox:SetBackdropColor(0, 0, 0, .5)
editbox:SetBackdropBorderColor(0, 0, 0, .8)
-- adjust edit box border based on active chat channel
hooksecurefunc("ChatEdit_UpdateHeader", function(editBox)
local chatType = editBox:GetAttribute("chatType")
if not chatType then
return
end
local info = ChatTypeInfo[chatType]
editbox:SetBackdropBorderColor(info.r, info.g, info.b, .5)
end)
-- reposition edit box
editbox:ClearAllPoints()
editbox:SetPoint('TOPLEFT', ChatFrame1, 'BOTTOMLEFT', -3, -8)
editbox:SetPoint('TOPRIGHT', ChatFrame1, 'BOTTOMRIGHT', 16, -8)
-- hide chat tabs textures
local tab = _G[name..'Tab']
for i = 1, select('#', tab:GetRegions()) do
local texture = select(i, tab:GetRegions())
if texture and texture:GetObjectType() == 'Texture' then
texture:SetTexture(nil)
end
end
frames[frame] = true
end
-- retrieve all permanent chat windows and apply skin
for i = 1, NUM_CHAT_WINDOWS do
SkinChatFrames(_G['ChatFrame' .. i])
end
-- set up a dirty hook to catch temporary windows to apply skin on them
local old_OpenTemporaryWindow = FCF_OpenTemporaryWindow
FCF_OpenTemporaryWindow = function(...)
local frame = old_OpenTemporaryWindow(...)
SkinChatFrames(frame)
return frame
end
end)