Skip to content

Commit 37d4aae

Browse files
committed
the 4 "ignore frame" arrays takes regex
1 parent a9182bb commit 37d4aae

File tree

1 file changed

+49
-41
lines changed

1 file changed

+49
-41
lines changed

LibGetFrame-1.0.lua

+49-41
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
local MAJOR_VERSION = "LibGetFrame-1.0"
2-
local MINOR_VERSION = 1
2+
local MINOR_VERSION = 2
33
if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end
44
local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
55
if not lib then return end
@@ -38,25 +38,25 @@ local defaultFramePriorities = {
3838
}
3939

4040
local defaultPlayerFrames = {
41-
["SUFUnitplayer"] = true,
42-
["PitBull4_Frames_Player"] = true,
43-
["ElvUF_Player"] = true,
44-
["oUF_TukuiPlayer"] = true,
45-
["PlayerFrame"] = true,
41+
"SUFUnitplayer",
42+
"PitBull4_Frames_Player",
43+
"ElvUF_Player",
44+
"oUF_TukuiPlayer",
45+
"PlayerFrame",
4646
}
4747
local defaultTargetFrames = {
48-
["SUFUnittarget"] = true,
49-
["PitBull4_Frames_Target"] = true,
50-
["ElvUF_Target"] = true,
51-
["TargetFrame"] = true,
52-
["oUF_TukuiTarget"] = true,
48+
"SUFUnittarget",
49+
"PitBull4_Frames_Target",
50+
"ElvUF_Target",
51+
"TargetFrame",
52+
"oUF_TukuiTarget",
5353
}
5454
local defaultTargettargetFrames = {
55-
["SUFUnittargetarget"] = true,
56-
["PitBull4_Frames_TargetTarget"] = true,
57-
["ElvUF_TargetTarget"] = true,
58-
["TargetTargetFrame"] = true,
59-
["oUF_TukuiTargetTarget"] = true,
55+
"SUFUnittargetarget",
56+
"PitBull4_Frames_TargetTarget",
57+
"ElvUF_TargetTarget",
58+
"TargetTargetFrame",
59+
"oUF_TukuiTargetTarget",
6060
}
6161

6262
local GetFramesCache = {}
@@ -93,7 +93,7 @@ local function FindButtonsForUnit(frame, target, depth)
9393
return results
9494
end
9595

96-
local function GetFrames(target)
96+
local function GetFrames(target, ignoredFrames)
9797
if not UnitExists(target) then
9898
if type(target) == "string" and target:find("Player") then
9999
target = select(6,GetPlayerInfoByGUID(target))
@@ -105,20 +105,32 @@ local function GetFrames(target)
105105
end
106106
end
107107

108-
local results = {}
108+
local frames = {}
109109
for frame, unit in pairs(GetFramesCache) do
110110
--print("from cache:", frame:GetName())
111111
if UnitIsUnit(unit, target) then
112112
if frame:GetAttribute("unit") == unit then
113-
tinsert(results, frame)
113+
tinsert(frames, frame)
114114
else
115-
results = {}
115+
frames = {}
116116
break
117117
end
118118
end
119119
end
120+
121+
frames = #frames > 0 and frames or FindButtonsForUnit(UIParent, target, 0)
122+
123+
-- filter ignored frames
124+
for k, frame in pairs(frames) do
125+
local name = frame:GetName()
126+
for j, filter in pairs(ignoredFrames) do
127+
if name:find(filter) then
128+
frames[k] = nil
129+
end
130+
end
131+
end
120132

121-
return #results > 0 and results or FindButtonsForUnit(UIParent, target, 0)
133+
return frames
122134
end
123135

124136
local function ElvuiWorkaround(frame)
@@ -129,6 +141,13 @@ local function ElvuiWorkaround(frame)
129141
end
130142
end
131143

144+
local function TableConcat(t1,t2)
145+
for i=1,#t2 do
146+
t1[#t1+1] = t2[i]
147+
end
148+
return t1
149+
end
150+
132151
function lib.GetFrame(target, opt)
133152
opt = opt or {}
134153
setmetatable(opt, {
@@ -149,44 +168,33 @@ function lib.GetFrame(target, opt)
149168

150169
local ignoredFrames = opt.ignoreFrames
151170
if opt.ignorePlayerFrame then
152-
for k, v in pairs(opt.playerFrames) do
153-
ignoredFrames[k] = v
154-
end
171+
ignoredFrames = TableConcat(ignoredFrames, opt.playerFrames)
155172
end
156173
if opt.ignoreTargetFrame then
157-
for k, v in pairs(opt.targetFrames) do
158-
ignoredFrames[k] = v
159-
end
174+
ignoredFrames = TableConcat(ignoredFrames, opt.targetFrames)
160175
end
161176
if opt.ignoreTargettargetFrame then
162-
for k, v in pairs(opt.targettargetFrames) do
163-
ignoredFrames[k] = v
164-
end
177+
ignoredFrames = TableConcat(ignoredFrames, opt.targettargetFrames)
165178
end
166-
167-
local frames = GetFrames(target)
179+
180+
local frames = GetFrames(target, ignoredFrames)
168181
if not frames then return nil end
169182

170183
if not opt.returnAll then
171184
for i = 1, #opt.framePriorities do
172185
for _, frame in pairs(frames) do
173186
local name = frame:GetName()
174-
if not ignoredFrames[name] and name:find(opt.framePriorities[i]) then
187+
if name:find(opt.framePriorities[i]) then
175188
return ElvuiWorkaround(frame)
176189
end
177190
end
178191
end
179-
local firstFrame = frames[1]
180-
if firstFrame and not ignoredFrames[firstFrame:GetName()] then
181-
return ElvuiWorkaround(firstFrame)
192+
if frames[1] then
193+
return ElvuiWorkaround(frames[1])
182194
end
183195
else
184196
for index, frame in pairs(frames) do
185-
if ignoredFrames[frame:GetName()] then
186-
frames[index] = nil
187-
else
188-
frames[index] = ElvuiWorkaround(frame)
189-
end
197+
frames[index] = ElvuiWorkaround(frame)
190198
end
191199
return frames
192200
end

0 commit comments

Comments
 (0)