ElvUI_OptionsUI/Filters.lua

746 lines
27 KiB
Lua
Raw Permalink Normal View History

2020-11-13 14:29:13 -05:00
local E, _, V, P, G = unpack(ElvUI) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local _, L = unpack(select(2, ...))
local UF = E:GetModule('UnitFrames')
local ACH = E.Libs.ACH
local gsub = gsub
local wipe = wipe
local next = next
local pairs = pairs
local format = format
local strmatch = strmatch
local tonumber = tonumber
local tostring = tostring
local GetSpellInfo = GetSpellInfo
-- GLOBALS: MAX_PLAYER_LEVEL
local quickSearchText, selectedSpell, selectedFilter, filterList, spellList = '', nil, nil, {}, {}
local defaultFilterList = { ['Aura Indicator (Global)'] = 'Aura Indicator (Global)', ['Aura Indicator (Class)'] = 'Aura Indicator (Class)', ['Aura Indicator (Pet)'] = 'Aura Indicator (Pet)', ['Aura Indicator (Profile)'] = 'Aura Indicator (Profile)', ['AuraBar Colors'] = 'AuraBar Colors', ['Aura Highlight'] = 'Aura Highlight' }
local auraBarDefaults = { enable = true, color = { r = 1, g = 1, b = 1 } }
local function GetSelectedFilters()
local class = selectedFilter == 'Aura Indicator (Class)'
local pet = selectedFilter == 'Aura Indicator (Pet)'
local profile = selectedFilter == 'Aura Indicator (Profile)'
local selected = (profile and E.db.unitframe.filters.aurawatch) or (pet and (E.global.unitframe.aurawatch.PET or {})) or class and (E.global.unitframe.aurawatch[E.myclass] or {}) or E.global.unitframe.aurawatch.GLOBAL
local default = (profile and P.unitframe.filters.aurawatch) or (pet and G.unitframe.aurawatch.PET) or class and G.unitframe.aurawatch[E.myclass] or G.unitframe.aurawatch.GLOBAL
return selected, default
end
local function GetSelectedSpell()
if selectedSpell and selectedSpell ~= '' then
local spell = strmatch(selectedSpell, ' %((%d+)%)$') or selectedSpell
if spell then
return tonumber(spell) or spell
end
end
end
local function filterMatch(s,v)
local m1, m2, m3, m4 = '^'..v..'$', '^'..v..',', ','..v..'$', ','..v..','
return (strmatch(s, m1) and m1) or (strmatch(s, m2) and m2) or (strmatch(s, m3) and m3) or (strmatch(s, m4) and v..',')
end
local function removePriority(value)
if not value then return end
local x,y,z=E.db.unitframe.units,E.db.nameplates.units;
for n, t in pairs(x) do
if t and t.buffs and t.buffs.priority and t.buffs.priority ~= '' then
z = filterMatch(t.buffs.priority, E:EscapeString(value))
if z then E.db.unitframe.units[n].buffs.priority = gsub(t.buffs.priority, z, '') end
end
if t and t.debuffs and t.debuffs.priority and t.debuffs.priority ~= '' then
z = filterMatch(t.debuffs.priority, E:EscapeString(value))
if z then E.db.unitframe.units[n].debuffs.priority = gsub(t.debuffs.priority, z, '') end
end
if t and t.aurabar and t.aurabar.priority and t.aurabar.priority ~= '' then
z = filterMatch(t.aurabar.priority, E:EscapeString(value))
if z then E.db.unitframe.units[n].aurabar.priority = gsub(t.aurabar.priority, z, '') end
end
end
for n, t in pairs(y) do
if t and t.buffs and t.buffs.priority and t.buffs.priority ~= '' then
z = filterMatch(t.buffs.priority, E:EscapeString(value))
if z then E.db.nameplates.units[n].buffs.priority = gsub(t.buffs.priority, z, '') end
end
if t and t.debuffs and t.debuffs.priority and t.debuffs.priority ~= '' then
z = filterMatch(t.debuffs.priority, E:EscapeString(value))
if z then E.db.nameplates.units[n].debuffs.priority = gsub(t.debuffs.priority, z, '') end
end
end
end
local function SetFilterList()
wipe(filterList)
E:CopyTable(filterList, defaultFilterList)
local list = E.global.unitframe.aurafilters
if list then
for filter in pairs(list) do
filterList[filter] = filter
end
end
return filterList
end
local function ResetFilterList()
wipe(filterList)
E:CopyTable(filterList, defaultFilterList)
local list = G.unitframe.aurafilters
if list then
for filter in pairs(list) do
filterList[filter] = filter
end
end
return filterList
end
local function DeleteFilterList()
wipe(filterList)
local list = E.global.unitframe.aurafilters
local defaultList = G.unitframe.aurafilters
if list then
for filter in pairs(list) do
if not defaultList[filter] then
filterList[filter] = filter
end
end
end
return filterList
end
local function DeleteFilterListDisable()
wipe(filterList)
local list = E.global.unitframe.aurafilters
local defaultList = G.unitframe.aurafilters
if list then
for filter in pairs(list) do
if not defaultList[filter] then
return false
end
end
end
return true
end
local function SetSpellList()
local list
if selectedFilter == 'Aura Highlight' then
list = E.global.unitframe.AuraHighlightColors
elseif selectedFilter == 'AuraBar Colors' then
list = E.global.unitframe.AuraBarColors
elseif selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)' then
list = GetSelectedFilters()
else
list = E.global.unitframe.aurafilters[selectedFilter].spells
end
if not list then return end
wipe(spellList)
local searchText = quickSearchText:lower()
for filter, spell in pairs(list) do
if spell.id and (selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)') then
filter = spell.id
end
local spellName = tonumber(filter) and GetSpellInfo(filter)
local name = (spellName and format('%s |cFF888888(%s)|r', spellName, filter)) or tostring(filter)
if name:lower():find(searchText) then
spellList[filter] = name
end
end
if not next(spellList) then
spellList[''] = L["NONE"]
end
return spellList
end
E.Options.args.filters = {
type = 'group',
name = L["FILTERS"],
order = 3,
childGroups = 'tab',
args = {
mainOptions = {
type = 'group',
name = 'Main Options',
order = 1,
args = {
createFilter = {
order = 1,
name = L["Create Filter"],
desc = L["Create a filter, once created a filter can be set inside the buffs/debuffs section of each unit."],
type = 'input',
get = function(info) return '' end,
set = function(info, value)
if strmatch(value, '^[%s%p]-$') then
return
end
if strmatch(value, ',') then
E:Print(L["Filters are not allowed to have commas in their name. Stripping commas from filter name."])
value = gsub(value, ',', '')
end
if strmatch(value, '^Friendly:') or strmatch(value, '^Enemy:') then
return --dont allow people to create Friendly: or Enemy: filters
end
if G.unitframe.specialFilters[value] or E.global.unitframe.aurafilters[value] then
E:Print(L["Filter already exists!"])
return
end
E.global.unitframe.aurafilters[value] = { spells = {} }
selectedFilter = value
end,
},
selectFilter = {
order = 2,
type = 'select',
name = L["Select Filter"],
get = function(info) return selectedFilter end,
set = function(info, value)
selectedFilter, selectedSpell, quickSearchText = nil, nil, ''
if value ~= '' then
selectedFilter = value
end
end,
values = SetFilterList,
},
deleteFilter = {
type = 'select',
order = 3,
name = L["Delete Filter"],
desc = L["Delete a created filter, you cannot delete pre-existing filters, only custom ones."],
confirm = function(info, value)
return 'Remove Filter - '..value
end,
set = function(info, value)
E.global.unitframe.aurafilters[value] = nil
selectedFilter, selectedSpell, quickSearchText = nil, nil, ''
removePriority(value) --This will wipe a filter from the new aura system profile settings.
end,
disabled = DeleteFilterListDisable,
values = DeleteFilterList,
},
resetGroup = {
type = 'select',
name = L["Reset Filter"],
order = 4,
desc = L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."],
confirm = function(info, value)
return 'Reset Filter - '..value
end,
set = function(info, value)
if value == 'Aura Highlight' then
E.global.unitframe.AuraHighlightColors = E:CopyTable({}, G.unitframe.DebuffHighlightColors)
elseif value == 'AuraBar Colors' then
E.global.unitframe.AuraBarColors = E:CopyTable({}, G.unitframe.AuraBarColors)
elseif value == 'Aura Indicator (Pet)' or value == 'Aura Indicator (Profile)' or value == 'Aura Indicator (Class)' or value == 'Aura Indicator (Global)' then
local selectedTable, defaultTable = GetSelectedFilters()
wipe(selectedTable)
E:CopyTable(selectedTable, defaultTable)
else
E.global.unitframe.aurafilters[value].spells = E:CopyTable({}, G.unitframe.aurafilters[value].spells)
end
selectedFilter, selectedSpell, quickSearchText = nil, nil, ''
UF:Update_AllFrames()
end,
values = ResetFilterList,
},
filterGroup = {
type = 'group',
name = function() return selectedFilter end,
hidden = function() return not selectedFilter end,
inline = true,
order = 10,
args = {
selectSpellheader = ACH:Description(L["|cffFF0000Warning:|r Click the arrow on the dropdown box to see a list of spells."], 0, 'medium'),
selectSpell = {
name = L["Select Spell"],
type = 'select',
order = 1,
customWidth = 350,
get = function(info) return selectedSpell or '' end,
set = function(info, value)
selectedSpell = (value ~= '' and value) or nil
end,
values = SetSpellList,
},
quickSearch = {
order = 2,
name = L["Filter Search"],
desc = L["Search for a spell name inside of a filter."],
type = 'input',
customWidth = 200,
get = function() return quickSearchText end,
set = function(info,value) quickSearchText = value end,
},
filterType = {
order = 3,
name = L["Filter Type"],
desc = L["Set the filter type. Blacklist will hide any auras in the list and show all others. Whitelist will show any auras in the filter and hide all others."],
type = 'select',
values = {
Whitelist = L["Whitelist"],
Blacklist = L["Blacklist"],
},
get = function() return E.global.unitframe.aurafilters[selectedFilter].type end,
set = function(info, value) E.global.unitframe.aurafilters[selectedFilter].type = value; UF:Update_AllFrames(); end,
hidden = function() return (selectedFilter == 'Aura Highlight' or selectedFilter == 'AuraBar Colors' or selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)' or selectedFilter == 'Whitelist' or selectedFilter == 'Blacklist') end,
},
removeSpell = {
order = 4,
name = L["Remove Spell"],
desc = L["Remove a spell from the filter. Use the spell ID if you see the ID as part of the spell name in the filter."],
type = 'select',
confirm = function(info, value)
local spellName = tonumber(value) and GetSpellInfo(value)
local name = (spellName and format('%s |cFF888888(%s)|r', spellName, value)) or tostring(value)
return 'Remove Spell - '..name
end,
customWidth = 350,
get = function(info) return '' end,
set = function(info, value)
if not value then return end
selectedSpell = nil
if selectedFilter == 'Aura Highlight' then
E.global.unitframe.AuraHighlightColors[value] = nil;
elseif selectedFilter == 'AuraBar Colors' then
if G.unitframe.AuraBarColors[value] then
E.global.unitframe.AuraBarColors[value].enable = false;
else
E.global.unitframe.AuraBarColors[value] = nil;
end
elseif selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)' then
local selectedTable, defaultTable = GetSelectedFilters()
if defaultTable[value] then
selectedTable[value].enabled = false
else
selectedTable[value] = nil
end
elseif G.unitframe.aurafilters[selectedFilter] and G.unitframe.aurafilters[selectedFilter].spells[value] then
E.global.unitframe.aurafilters[selectedFilter].spells[value].enable = false;
else
E.global.unitframe.aurafilters[selectedFilter].spells[value] = nil;
end
UF:Update_AllFrames();
end,
values = SetSpellList,
},
addSpell = {
order = 5,
name = L["Add SpellID"],
desc = L["Add a spell to the filter."],
type = 'input',
customWidth = 200,
get = function(info) return '' end,
set = function(info, value)
value = tonumber(value)
if not value then return end
local spellName = GetSpellInfo(value)
selectedSpell = (spellName and value) or nil
if not selectedSpell then return end
if selectedFilter == 'Aura Highlight' then
if not E.global.unitframe.AuraHighlightColors[value] then
E.global.unitframe.AuraHighlightColors[value] = { enable = true, style = 'GLOW', color = {r = 0.8, g = 0, b = 0, a = 0.85} }
end
elseif selectedFilter == 'AuraBar Colors' then
if not E.global.unitframe.AuraBarColors[value] then
E.global.unitframe.AuraBarColors[value] = E:CopyTable({}, auraBarDefaults)
end
elseif selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)' then
local selectedTable = GetSelectedFilters()
if not selectedTable[value] then
selectedTable[value] = UF:AuraWatch_AddSpell(value, 'TOPRIGHT')
end
elseif not E.global.unitframe.aurafilters[selectedFilter].spells[value] then
E.global.unitframe.aurafilters[selectedFilter].spells[value] = { enable = true, priority = 0, stackThreshold = 0 }
end
UF:Update_AllFrames()
end,
},
},
},
buffIndicator = {
type = 'group',
name = function()
local spell = GetSelectedSpell()
local spellName = spell and GetSpellInfo(spell)
return (spellName and spellName..' |cFF888888('..spell..')|r') or spell or ' '
end,
hidden = function() return not selectedSpell or (selectedFilter ~= 'Aura Indicator (Pet)' and selectedFilter ~= 'Aura Indicator (Profile)' and selectedFilter ~= 'Aura Indicator (Class)' and selectedFilter ~= 'Aura Indicator (Global)') end,
get = function(info)
local spell = GetSelectedSpell()
if not spell then return end
local selectedTable = GetSelectedFilters()
return selectedTable[spell][info[#info]]
end,
set = function(info, value)
local spell = GetSelectedSpell()
if not spell then return end
local selectedTable = GetSelectedFilters()
selectedTable[spell][info[#info]] = value;
UF:Update_AllFrames()
end,
order = -10,
inline = true,
args = {
enabled = {
name = L["Enable"],
order = 1,
type = 'toggle',
},
point = {
name = L["Anchor Point"],
order = 2,
type = 'select',
values = {
TOPLEFT = 'TOPLEFT',
LEFT = 'LEFT',
BOTTOMLEFT = 'BOTTOMLEFT',
RIGHT = 'RIGHT',
TOPRIGHT = 'TOPRIGHT',
BOTTOMRIGHT = 'BOTTOMRIGHT',
CENTER = 'CENTER',
TOP = 'TOP',
BOTTOM = 'BOTTOM',
}
},
style = {
name = L["Style"],
order = 3,
type = 'select',
values = {
timerOnly = L["Timer Only"],
coloredIcon = L["Colored Icon"],
texturedIcon = L["Textured Icon"],
},
},
color = {
name = L["COLOR"],
type = 'color',
order = 4,
get = function(info)
local spell = GetSelectedSpell()
if not spell then return end
local selectedTable = GetSelectedFilters()
local t = selectedTable[spell][info[#info]]
return t.r, t.g, t.b, t.a
end,
set = function(info, r, g, b)
local spell = GetSelectedSpell()
if not spell then return end
local selectedTable = GetSelectedFilters()
local t = selectedTable[spell][info[#info]]
t.r, t.g, t.b = r, g, b
UF:Update_AllFrames()
end,
disabled = function()
local spell = GetSelectedSpell()
if not spell then return end
local selectedTable = GetSelectedFilters()
return selectedTable[spell].style == 'texturedIcon'
end,
},
sizeOffset = {
order = 5,
type = 'range',
name = L["Size Offset"],
desc = L["This changes the size of the Aura Icon by this value."],
min = -25, max = 25, step = 1,
},
xOffset = {
order = 6,
type = 'range',
name = L["X-Offset"],
min = -75, max = 75, step = 1,
},
yOffset = {
order = 7,
type = 'range',
name = L["Y-Offset"],
min = -75, max = 75, step = 1,
},
textThreshold = {
name = L["Text Threshold"],
desc = L["At what point should the text be displayed. Set to -1 to disable."],
type = 'range',
order = 8,
min = -1, max = 60, step = 1,
},
anyUnit = {
name = L["Show Aura From Other Players"],
order = 9,
customWidth = 205,
type = 'toggle',
},
onlyShowMissing = {
name = L["Show When Not Active"],
order = 10,
type = 'toggle',
},
displayText = {
name = L["Display Text"],
type = 'toggle',
order = 11,
get = function(info)
local spell = GetSelectedSpell()
if not spell then return end
local selectedTable = GetSelectedFilters()
return (selectedTable[spell].style == 'timerOnly') or selectedTable[spell][info[#info]]
end,
disabled = function()
local spell = GetSelectedSpell()
if not spell then return end
local selectedTable = GetSelectedFilters()
return selectedTable[spell].style == 'timerOnly'
end
},
},
},
spellGroup = {
type = 'group',
name = function()
local spell = GetSelectedSpell()
local spellName = spell and GetSpellInfo(spell)
return (spellName and spellName..' |cFF888888('..spell..')|r') or spell or ' '
end,
hidden = function() return not selectedSpell or (selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)') end,
order = -15,
inline = true,
args = {
enabled = {
name = L["Enable"],
order = 0,
type = 'toggle',
hidden = function() return (selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)') end,
get = function(info)
local spell = GetSelectedSpell()
if not spell then return end
if selectedFilter == 'Aura Highlight' then
return E.global.unitframe.AuraHighlightColors[spell].enable
elseif selectedFilter == 'AuraBar Colors' then
return E.global.unitframe.AuraBarColors[spell].enable
else
return E.global.unitframe.aurafilters[selectedFilter].spells[spell].enable
end
end,
set = function(info, value)
local spell = GetSelectedSpell()
if not spell then return end
if selectedFilter == 'Aura Highlight' then
E.global.unitframe.AuraHighlightColors[spell].enable = value
elseif selectedFilter == 'AuraBar Colors' then
E.global.unitframe.AuraBarColors[spell].enable = value
else
E.global.unitframe.aurafilters[selectedFilter].spells[spell].enable = value
end
UF:Update_AllFrames();
end,
},
style = {
name = L["Style"],
type = 'select',
order = 1,
values = { GLOW = L["Glow"], FILL = L["Fill"] },
hidden = function() return selectedFilter ~= 'Aura Highlight' end,
get = function(info)
local spell = GetSelectedSpell()
if not spell then return end
return E.global.unitframe.AuraHighlightColors[spell].style
end,
set = function(info, value)
local spell = GetSelectedSpell()
if not spell then return end
E.global.unitframe.AuraHighlightColors[spell].style = value
UF:Update_AllFrames()
end,
},
color = {
name = L["COLOR"],
type = 'color',
order = 2,
hasAlpha = function() return selectedFilter ~= 'AuraBar Colors' end,
hidden = function() return (selectedFilter ~= 'Aura Highlight' and selectedFilter ~= 'AuraBar Colors' and selectedFilter ~= 'Aura Indicator (Pet)' and selectedFilter ~= 'Aura Indicator (Profile)' and selectedFilter ~= 'Aura Indicator (Class)' and selectedFilter ~= 'Aura Indicator (Global)') end,
get = function(info)
local spell = GetSelectedSpell()
if not spell then return end
local t
if selectedFilter == 'Aura Highlight' then
t = E.global.unitframe.AuraHighlightColors[spell].color
elseif selectedFilter == 'AuraBar Colors' then
t = E.global.unitframe.AuraBarColors[spell].color
end
if t then
return t.r, t.g, t.b, t.a
end
end,
set = function(info, r, g, b, a)
local spell = GetSelectedSpell()
if not spell then return end
local t
if selectedFilter == 'Aura Highlight' then
t = E.global.unitframe.AuraHighlightColors[spell].color
elseif selectedFilter == 'AuraBar Colors' then
t = E.global.unitframe.AuraBarColors[spell].color
end
if t then
t.r, t.g, t.b, t.a = r, g, b, a
UF:Update_AllFrames()
end
end,
},
removeColor = {
type = 'execute',
order = 3,
name = L["Restore Defaults"],
hidden = function() return selectedFilter ~= 'AuraBar Colors' end,
func = function(info)
local spell = GetSelectedSpell()
if not spell then return end
if G.unitframe.AuraBarColors[spell] then
E.global.unitframe.AuraBarColors[spell] = E:CopyTable({}, G.unitframe.AuraBarColors[spell])
else
E.global.unitframe.AuraBarColors[spell] = E:CopyTable({}, auraBarDefaults)
end
UF:Update_AllFrames();
end,
},
forDebuffIndicator = {
order = 4,
type = 'group',
name = L["Used as RaidDebuff Indicator"],
inline = true,
hidden = function() return (selectedFilter == 'Aura Highlight' or selectedFilter == 'AuraBar Colors' or selectedFilter == 'Aura Indicator (Pet)' or selectedFilter == 'Aura Indicator (Profile)' or selectedFilter == 'Aura Indicator (Class)' or selectedFilter == 'Aura Indicator (Global)') end,
args = {
priority = {
order = 1,
type = 'range',
name = L["Priority"],
desc = L["Set the priority order of the spell, please note that prioritys are only used for the raid debuff module, not the standard buff/debuff module. If you want to disable set to zero."],
min = 0, max = 99, step = 1,
get = function()
local spell = GetSelectedSpell()
if not spell then
return 0
else
return E.global.unitframe.aurafilters[selectedFilter].spells[spell].priority
end
end,
set = function(info, value)
local spell = GetSelectedSpell()
if not spell then return end
E.global.unitframe.aurafilters[selectedFilter].spells[spell].priority = value;
UF:Update_AllFrames();
end,
},
stackThreshold = {
order = 2,
type = 'range',
name = L["Stack Threshold"],
desc = L["The debuff needs to reach this amount of stacks before it is shown. Set to 0 to always show the debuff."],
min = 0, max = 99, step = 1,
get = function()
local spell = GetSelectedSpell()
if not spell then
return 0
else
return E.global.unitframe.aurafilters[selectedFilter].spells[spell].stackThreshold
end
end,
set = function(info, value)
local spell = GetSelectedSpell()
if not spell then return end
E.global.unitframe.aurafilters[selectedFilter].spells[spell].stackThreshold = value
UF:Update_AllFrames()
end,
},
},
},
},
}
},
},
}
}
E.Options.args.filters.args.help = ACH:Group('Help', nil, 2)
local COLOR = E:ClassColor(E.myclass, true)
local COLOR1 = format('|c%s', COLOR.colorStr)
local COLOR2 = '|cFFFFFFFF'
local FilterHelp = {
'*Whitelists:|r ^Personal, nonPersonal, Boss, CastByUnit, notCastByUnit, Dispellable (includes steal-able), CastByNPC, CastByPlayers|r',
'*Blacklists:|r ^blockNonPersonal, blockNoDuration, blockCastByPlayers | A blacklist filter is only effective against filters that come after it in the priority list. It will not block anything from the filters before it.|r',
'^A blacklist filter is only effective against filters that come after it in the priority list. It will not block anything from the filters before it.',
' ',
'*Boss:|r ^Auras (debuffs only?) cast by a boss unit.|r',
'*Personal:|r ^Auras cast by yourself.|r',
'*nonPersonal:|r ^Auras cast by anyone other than yourself.|r',
'*CastByUnit:|r ^Auras cast by the unit of the unitframe or nameplate (so on target frame it only shows auras cast by the target unit).|r',
'*notCastByUnit:|r ^Auras cast by anyone other than the unit of the unitframe or nameplate.|r',
'*Dispellable:|r ^Auras you can either dispel or spellsteal.|r',
'*CastByNPC:|r ^Auras cast by any NPC.|r',
'*CastByPlayers:|r ^Auras cast by any player-controlled unit (so no NPCs).|r',
'*blockCastByPlayers:|r ^Blocks any aura that is cast by player-controlled units (so will only show auras cast by NPCs).|r',
'*blockNoDuration:|r ^Blocks any aura without a duration.|r',
'*blockNonPersonal:|r ^Blocks any aura that is not cast by yourself.|r',
' ',
'*Show Everything:|r ^Set "Max Duration" to 0 & Leave Priority List Empty or (1) Personal | (2) nonPersonal',
'*Block Blacklisted Auras, Show Everything Else:|r ^(1) Blacklist| (2) Personal | (3) nonPersonal',
'*Block Auras Without Duration, Show Everything Else:|r ^(1) blockNoDuration | (2) Personal | (3) nonPersonal',
'*Block Auras Without Duration, Block Blacklisted Auras, Show Everything Else:|r ^(1) blockNoDuration | (2) Blacklist | (3) Personal | (4) nonPersonal',
'*Block Everything, Except Your Own Auras:|r ^(1) Personal',
'*Block Everything, Except Whitelisted Auras:|r ^(1) Whitelist',
'*Block Everything, Except Whitelisted Auras That Are Cast By Yourself:|r ^(1) blockNonPersonal | (2) Whitelist'
}
for i, text in ipairs(FilterHelp) do
E.Options.args.filters.args.help.args['help'..i] = ACH:Description(text:gsub('*', COLOR1):gsub('%^', COLOR2), i, 'medium')
end
function E:SetToFilterConfig(filter)
selectedSpell = nil
quickSearchText = ''
selectedFilter = filter or ''
E.Libs.AceConfigDialog:SelectGroup('ElvUI', 'filters')
end