if not WeakAuras.IsCorrectVersion() then return end local AddonName, OptionsPrivate = ... -- Magic constant local deleteCondition = {} local function AdjustConditions(data, replacements) if (data.conditions) then for conditionIndex, condition in ipairs(data.conditions) do for changeIndex, change in ipairs(condition.changes) do if change.property then local sub, rest = string.match(change.property, "^(sub.%d+%.)(.+)$") if sub and replacements[sub] then if replacements[sub] == deleteCondition then change.property = nil else change.property = replacements[sub] .. rest end end end end end end end function WeakAuras.DeleteSubRegion(data, index, regionType) if not data.subRegions then return end if data.subRegions[index] and data.subRegions[index].type == regionType then tremove(data.subRegions, index) local replacements = { ["sub." .. index .. "."] = deleteCondition } for i = index + 1, #data.subRegions + 1 do replacements["sub." .. i .. "."] = "sub." .. (i - 1) .. "." end AdjustConditions(data, replacements); WeakAuras.Add(data) OptionsPrivate.ClearOptions(data.id) end end function OptionsPrivate.MoveSubRegionUp(data, index, regionType) if not data.subRegions or index <= 1 then return end if data.subRegions[index] and data.subRegions[index].type == regionType then data.subRegions[index - 1], data.subRegions[index] = data.subRegions[index], data.subRegions[index - 1] local replacements = { ["sub." .. (index -1) .. "."] = "sub." .. index .. ".", ["sub." .. index .. "."] = "sub." .. (index - 1) .. ".", } AdjustConditions(data, replacements); WeakAuras.Add(data) OptionsPrivate.ClearOptions(data.id) end end function OptionsPrivate.MoveSubRegionDown(data, index, regionType) if not data.subRegions then return end if data.subRegions[index] and data.subRegions[index].type == regionType and data.subRegions[index + 1] then data.subRegions[index], data.subRegions[index + 1] = data.subRegions[index + 1], data.subRegions[index] local replacements = { ["sub." .. index .. "."] = "sub." .. (index + 1) .. ".", ["sub." .. (index + 1) .. "."] = "sub." .. index .. ".", } AdjustConditions(data, replacements); WeakAuras.Add(data) OptionsPrivate.ClearOptions(data.id) end end function OptionsPrivate.DuplicateSubRegion(data, index, regionType) if not data.subRegions then return end if data.subRegions[index] and data.subRegions[index].type == regionType then tinsert(data.subRegions, index, CopyTable(data.subRegions[index])) local replacements = {} for i = index + 1, #data.subRegions do replacements["sub." .. i .. "."] = "sub." .. (i + 1) .. "." end AdjustConditions(data, replacements); WeakAuras.Add(data) OptionsPrivate.ClearOptions(data.id) end end function OptionsPrivate.AddUpDownDeleteDuplicate(options, parentData, index, subRegionType) options.__up = function() for child in OptionsPrivate.Private.TraverseLeafsOrAura(parentData) do OptionsPrivate.MoveSubRegionUp(child, index, subRegionType) end WeakAuras.ClearAndUpdateOptions(parentData.id) end options.__down = function() for child in OptionsPrivate.Private.TraverseLeafsOrAura(parentData) do OptionsPrivate.MoveSubRegionDown(child, index, subRegionType) end WeakAuras.ClearAndUpdateOptions(parentData.id) end options.__duplicate = function() for child in OptionsPrivate.Private.TraverseLeafsOrAura(parentData) do OptionsPrivate.DuplicateSubRegion(child, index, subRegionType) end WeakAuras.ClearAndUpdateOptions(parentData.id) end options.__delete = function() for child in OptionsPrivate.Private.TraverseLeafsOrAura(parentData) do WeakAuras.DeleteSubRegion(child, index, subRegionType) end WeakAuras.ClearAndUpdateOptions(parentData.id) end end