<Ui><Script><![CDATA[--[[

TaintLess [22-11-27]
https://www.townlong-yak.com/addons/taintless

All rights reserved.

Permission is hereby granted to distribute unmodified copies of this file.
]]

local function purgeKey(t, k)
    local logLevel, c = GetCVar("taintLog"), -42
    if (tonumber(logLevel) or 0) > 1 then
        if CVarCallbackRegistry then
            CVarCallbackRegistry:UnregisterEvent("CVAR_UPDATE")
        end
        SetCVar("taintLog", "1")
    else
        logLevel = nil
    end
    t[k] = nil
    repeat
        if t[c] == nil then
            t[c] = nil
        end
        c = c - 1
    until issecurevariable(t, k)
    if logLevel then
        SetCVar("taintLog", logLevel)
        if CVarCallbackRegistry then
            CVarCallbackRegistry:RegisterEvent("CVAR_UPDATE")
        end
    end
end

-- https://www.townlong-yak.com/addons/taintless/fixes/RefreshOverread
if (tonumber(UIDD_REFRESH_OVERREAD_PATCH_VERSION) or 0) < 3 then
    UIDD_REFRESH_OVERREAD_PATCH_VERSION = 3
    hooksecurefunc("UIDropDownMenu_InitializeHelper", function()
        for i=1, UIDD_REFRESH_OVERREAD_PATCH_VERSION == 3 and UIDROPDOWNMENU_MAXLEVELS or 0 do
            for j=1+_G["DropDownList" .. i].numButtons, UIDROPDOWNMENU_MAXBUTTONS do
                local b, _ = _G["DropDownList" .. i .. "Button" .. j]
                _ = issecurevariable(b, "checked")      or purgeKey(b, "checked")
                _ = issecurevariable(b, "notCheckable") or purgeKey(b, "notCheckable")
            end
        end
    end)
end

-- https://www.townlong-yak.com/addons/taintless/fixes/DisplayModeTaint
if (tonumber(UIDROPDOWNMENU_OPEN_PATCH_VERSION) or 0) < 1 then
    UIDROPDOWNMENU_OPEN_PATCH_VERSION = 1
    hooksecurefunc("UIDropDownMenu_InitializeHelper", function(frame)
        if UIDROPDOWNMENU_OPEN_PATCH_VERSION == 1
        and UIDROPDOWNMENU_OPEN_MENU and UIDROPDOWNMENU_OPEN_MENU ~= frame
        and not issecurevariable(UIDROPDOWNMENU_OPEN_MENU, "displayMode") then
            purgeKey(_G, "UIDROPDOWNMENU_OPEN_MENU")
        end
    end)
end

-- https://www.townlong-yak.com/addons/taintless/fixes/IOFrameSelection
if (tonumber(IOFRAME_SELECTION_PATCH_VERSION) or 0) < 3 then
    IOFRAME_SELECTION_PATCH_VERSION = 3
    if InterfaceOptionsFrame then
        InterfaceOptionsFrame:HookScript("OnHide", function()
            if IOFRAME_SELECTION_PATCH_VERSION == 3 then
                InterfaceOptionsFrameCategories.selection = nil
            end
        end)
    end
end

-- https://www.townlong-yak.com/addons/taintless/fixes/EditModeOpenDrop
if EditModeManagerFrame and FriendsFrameStatusDropDown and (tonumber(EDITMAN_OPENDROP_PATCH_VERSION) or 0) < 1 then
    EDITMAN_OPENDROP_PATCH_VERSION = 1
    hooksecurefunc(EditModeManagerFrame, "GetAttribute", function(_, attr)
        if attr ~= "UIPanelLayout-checkFit" or EDITMAN_OPENDROP_PATCH_VERSION ~= 1
        or (issecurevariable(DropDownList1, "maxWidth") and issecurevariable("UIDROPDOWNMENU_MENU_LEVEL")) then
        elseif InCombatLockdown() and FriendsFrameStatusDropDown:IsProtected() then
        elseif FriendsFrameStatusDropDown:IsVisible() then
            FriendsFrameStatusDropDown:Hide()
            FriendsFrameStatusDropDown:Show()
        else
            local op = FriendsFrameStatusDropDown:GetParent()
            FriendsFrameStatusDropDown:SetParent(nil)
            if not FriendsFrameStatusDropDown:IsShown() then
                FriendsFrameStatusDropDown:Show()
                FriendsFrameStatusDropDown:Hide()
            end
            FriendsFrameStatusDropDown:SetParent(op)
        end
    end)
end

-- https://www.townlong-yak.com/addons/taintless/fixes/ObjectiveTrackerUpdate
if ObjectiveTrackerFrame and (tonumber(OBJTRACK_DELAYUPDATE_PATCH_VERSION) or 0) < 1 then
    OBJTRACK_DELAYUPDATE_PATCH_VERSION = 1
    local counter, didDelayUpdate, delayFrameCount = (CreateFrame("Frame", nil, ObjectiveTrackerFrame))
    counter:Hide()
    counter:SetScript("OnUpdate", function()
        if OBJTRACK_DELAYUPDATE_PATCH_VERSION == 1 then
            delayFrameCount = delayFrameCount + 1
        else
            counter:Hide()
        end
    end)
    hooksecurefunc("ObjectiveTracker_Update", function()
        if OBJTRACK_DELAYUPDATE_PATCH_VERSION == 1 and didDelayUpdate then
            didDelayUpdate = nil
            purgeKey(ObjectiveTrackerFrame, "isUpdating")
        end
    end)
    hooksecurefunc(ObjectiveTrackerFrame.HeaderMenu.Title, "ClearAllPoints", function()
        if OBJTRACK_DELAYUPDATE_PATCH_VERSION == 1 and not ObjectiveTrackerFrame.isUpdating then
            if issecurevariable(ObjectiveTrackerFrame, "isOnLeftSideOfScreen") then
                if delayFrameCount then
                    delayFrameCount = nil
                    counter:Hide()
                end
            elseif (delayFrameCount or 0) < 4 then
                ObjectiveTrackerFrame.isUpdating, didDelayUpdate, delayFrameCount = 86, 1, delayFrameCount or 0
                counter:Show()
            else
                counter:Hide()
            end
        end
    end)
end
]]></Script></Ui>