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

51
Core/Localization.lua Normal file
View File

@ -0,0 +1,51 @@
local addon, ns = ...
local L = {}
ns.L = L
--------------------------------------------------------------------------------
-- // CORE > LOCALIZATION
--------------------------------------------------------------------------------
setmetatable(L, { __index = function(t, k)
local v = tostring(k)
t[k] = v
return v
end })
-- ## ENGLISH
--------------------------------------------------------------------------------
L.SHORT_INSTANCE = 'I'
L.SHORT_INSTANCE_LEADER = 'IL'
L.SHORT_PARTY = 'P'
L.SHORT_PARTY_LEADER = 'PL'
L.SHORT_WHISPER_FROM = 'From'
L.SHORT_GUILD = 'G'
L.SHORT_OFFICER = 'O'
L.SHORT_RAID = 'R'
L.SHORT_RAID_LEADER = 'R'
L.SHORT_RAID_WARNING = 'RW'
L.SHORT_FLAG_AFK = '[AFK]'
L.SHORT_FLAG_DND = '[DND]'
L.SHORT_FLAG_GM = '[GM]'
L.SHORT_STATUS_ONLINE = '|cff00ff00+|r'
L.SHORT_STATUS_OFFLINE = '|cffff0000-|r'
local locale = GetLocale()
if locale == 'en_GB' or locale == 'en_US' then return end -- ENGLISH
-- ## OTHER
--------------------------------------------------------------------------------
-- if locale == 'esMX' then return end -- SPANISH (MEXICO)
-- if locale == 'pt_BR' then return end -- PORTUGEUSE
-- if locale == 'de_DE' then return end -- GERMAN
-- if locale == 'es_ES' then return end -- SPANISH (SPAIN)
-- if locale == 'fr_FR' then return end -- FRENCH
-- if locale == 'it_IT' then return end -- ITALIAN
-- if locale == 'ru_RU' then return end -- RUSSIAN
-- if locale == 'ko_KR' then return end -- KOREAN
-- if locale == 'zh_TW' then return end -- CHINESE (TRADITIONAL)
-- if locale == 'zh_CN' then return end -- CHINESE (SIMPLIFIED)

11
KlazChat.toc Normal file
View File

@ -0,0 +1,11 @@
## Interface: 100205
## Title: Klaz|cff1994ffChat|r
## Author: Klaz
## Notes: Styles default chat frames.
## IconTexture: Interface\AddOns\KlazChat\Media\KlazAddOnIcon.blp
Core\Localization.lua
Modules\CopyLinks.lua
Modules\ShortChannelNames.lua
Modules\Style.lua

BIN
Media/KlazAddOnIcon.blp Normal file

Binary file not shown.

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)

20
README.md Normal file
View File

@ -0,0 +1,20 @@
# KlazChat
A World of Warcraft add-on that styles the default chat frames.
There are no in-game options. All settings are hard-coded.
## Features
- Strip clutter from default chat frames
- Remove social buttons
- Remove chat tab textures
- Allow copying URL links
- Short channel names (e.g. Guild -> G, Party -> P)
## Installation
1. Backup `World of Warcraft\_retail_\Interface` and `World of Warcraft\_retail_\WTF` folders. Just in case.
2. Download and extract folder.
3. Place extracted folder in `World of Warcraft\_retail_\Interface\AddOns\` directory.
4. Restart World of Warcraft client.