vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local compost = CompostLib:GetInstance('compost-1')

local COLOR_HEX_RED       = "ff0000"
local COLOR_HEX_ORANGE    = "ff7f00"
local COLOR_HEX_YELLOW    = "ffff00"
local COLOR_HEX_GREEN     = "00ff00"
local COLOR_HEX_WHITE     = "ffffff"
local COLOR_HEX_COPPER    = "eda55f"
local COLOR_HEX_SILVER    = "c7c7cf"
local COLOR_HEX_GOLD      = "ffd700"

local function VersionToNumber(version)
        if version == nil then
                return 0
        elseif type(version) == "number" then
                return version
        end
        local num = 0
        local place = 1
        string.gsub(version, "(%d+)", function (w)
                num = num + tonumber(w) * math.pow(10, place * 2)
                if place > 0 then
                        place = place - 1
                else
                        place = place - 2
                end
        end)
        return num
end

local function GetVersionPoint(version, point)
        if version == nil then
                return 0
        elseif type(version) == "number" then
                if point == 1 then
                        return floor(version / 100)
                elseif point == 2 then
                        return mod(floor(version), 100)
                elseif point == 3 then
                        return mod(floor(version * 10000), 10000)
                elseif point == 4 then
                        return mod(floor(version * 100000000), 10000)
                elseif point < 1 then
                        return 0
                elseif point > 4 then
                        return mod(floor(version * math.pow(10000, point - 2)), 10000)
                end
        end
        local place = 1
        local num = 0
        string.gsub(version, "(%d+)", function (w)
                if place == point
                        then num = tonumber(w)
                        return
                end
                place = place + 1
        end)
        return num
end

local function GetMajorNumber(version)
        return GetVersionPoint(version, 1)
end

local function GetMinorNumber(version)
        return GetVersionPoint(version, 2)
end

local function GetRevisionNumber(version)
        return GetVersionPoint(version, 3)
end

local function GetTrivialNumber(version)
        return GetVersionPoint(version, 4)
end

local crayon = CrayonLib:GetInstance('1.0')
local abacus = AbacusLib:GetInstance('1.0')

FuBarUtils = {
        COLOR_HEX_RED = crayon.COLOR_HEX_RED,
        COLOR_HEX_ORANGE = crayon.COLOR_HEX_ORANGE,
        COLOR_HEX_YELLOW = crayon.COLOR_HEX_YELLOW,
        COLOR_HEX_GREEN = crayon.COLOR_HEX_GREEN,
        COLOR_HEX_WHITE = crayon.COLOR_HEX_WHITE,
        COLOR_HEX_COPPER = crayon.COLOR_HEX_COPPER,
        COLOR_HEX_SILVER = crayon.COLOR_HEX_SILVER,
        COLOR_HEX_GOLD = crayon.COLOR_HEX_GOLD,
        
        Colorize = function(hexColor, text)
                return crayon:Colorize(hexColor, text)
        end,
        
        Red = function(text)
                return crayon:Red(text)
        end,
        
        Orange = function(text)
                return crayon:Orange(text)
        end,
        
        Yellow = function(text)
                return crayon:Yellow(text)
        end,
        
        Green = function(text)
                return crayon:Green(text)
        end,
        
        White = function(text)
                return crayon:White(text)
        end,
        
        GetThresholdHexColor = function(quality, a, b, c, d, e)
                return crayon:GetThresholdHexColor(quality, a, b, c, d, e)
        end,
        
        GetThresholdColor = function(quality, a, b, c, d, e)
                return crayon:GetThresholdColor(quality, a, b, c, d, e)
        end,
        
        GetThresholdHexColorTrivial = function(quality, a, b, c, d, e)
                return crayon:GetThresholdHexColorTrivial(quality, a, b, c, d, e)
        end,
        
        GetThresholdColorTrivial = function(quality, a, b, c, d, e)
                return crayon:GetThresholdColorTrivial(quality, a, b, c, d, e)
        end,
        
        FormatMoneyExtended = function(value, colorize, textColor)
                return abacus:FormatMoneyExtended(value, colorize, textColor)
        end,
        
        FormatMoneyFull = function(value, colorize, textColor)
                return abacus:FormatMoneyFull(value, colorize, textColor)
        end,
        
        FormatMoneyShort = function(value, colorize, textColor)
                return abacus:FormatMoneyShort(value, colorize, textColor)
        end,
        
        FormatMoneyCondensed = function(value, colorize, textColor)
                return abacus:FormatMoneyCondensed(value, colorize, textColor)
        end,
        
        FormatDurationExtended = function(duration, colorize, hideSeconds)
                return abacus:FormatDurationExtended(duration, colorize, hideSeconds)
        end,
        
        FormatDurationFull = function(duration, colorize, hideSeconds)
                return abacus:FormatDurationFull(duration, colorize, hideSeconds)
        end,
        
        FormatDurationShort = function(duration, colorize, hideSeconds)
                return abacus:FormatDurationShort(duration, colorize, hideSeconds)
        end,
        
        FormatDurationCondensed = function(duration, colorize, hideSeconds)
                return abacus:FormatDurationCondensed(duration, colorize, hideSeconds)
        end,
        
        VersionToNumber = VersionToNumber,
        GetVersionPoint = GetVersionPoint,
        GetMajorNumber = GetMajorNumber,
        GetMinorNumber = GetMinorNumber,
        GetRevisionNumber = GetRevisionNumber,
        GetTrivialNumber = GetTrivialNumber,
}

local old_UIDropDownMenu_AddButton = UIDropDownMenu_AddButton
local spacerDropDown = nil
function FuBarUtils.AddSpacerDropDownMenu(level)
        if spacerDropDown ~= (level or 1) then
                spacerDropDown = level or 1
                local info = compost:AcquireHash(
                        'disabled', true
                )
                old_UIDropDownMenu_AddButton(info, level or 1)
                compost:Reclaim(info)
        end
end

UIDropDownMenu_AddButton = function(info, level)
        spacerDropDown = nil
        old_UIDropDownMenu_AddButton(info, level)
end

local old_ToggleDropDownMenu = ToggleDropDownMenu
ToggleDropDownMenu = function(level, value, dropDownFrame, anchorName, xOffset, yOffset)
        spacerDropDown = nil
        old_ToggleDropDownMenu(level, value, dropDownFrame, anchorName, xOffset, yOffset)
end

print = function(...)
        local s = ""
        for i = 1, table.getn(arg) do
                if s ~= "" then
                        s = s .. " "
                end
                if type(arg[i]) == "table" and type(arg[i][0]) == "userdata" then
                        local name = arg[i]:GetName()
                        if name == "" or name == nil then
                                name = ""
                        else
                                name = ":" .. name
                        end
                        s = s .. "<" .. arg[i]:GetObjectType() .. name .. ">"
                else
                        s = s .. tostring(arg[i])
                end
        end
        if string.len(s) == 0 then
                s = "\n"
        end
        DEFAULT_CHAT_FRAME:AddMessage(s)
end

local start
tableToString = function(t, depth)
        if t[".recurse"] then
                return "<recursion>"
        end
        t[".recurse"] = 1
        if depth == nil then
                depth = 0
                start = GetTime()
        end
        if GetTime() - start >= 0.05 then
                return "{too large}"
        end
        local s = ""
        s = "{\n"
        for k,v in pairs(t) do
                if k ~= ".recurse" then
                        s = s .. string.rep("    ", depth + 1)
                        if type(k) == "table" then
                                s = s .. "[" .. tableToString(k, depth + 1) .. "]"
                        elseif type(k) == "string" then
                                local u = format("[%q]", k)
                                if not string.find(k, "[^A-Za-z0-9_]") and string.sub(u, 3, -3) == k then
                                        s = s .. k
                                else
                                        s = s .. u
                                end
                        else
                                s = s .. "[" .. tostring(k) .. "]"
                        end
                        s = s .. " = "
                        if type(v) == "table" then
                                s = s .. tableToString(v, depth + 1)
                        elseif type(v) == "string" then
                                s = s .. format("%q", v)
                        else
                                s = s .. tostring(v)
                        end
                        s = s .. ",\n"
                end
        end
        s = s .. string.rep("    ", depth) .. "}"
        t[".recurse"] = nil
        if depth == 0 then
                start = nil
        end
        return s
end
local tableToString = tableToString

printFull = function(k, t)
        if t == nil then
                k, t = nil, k
        end
        local s
        if type(t) == "table" and type(t[0]) == "userdata" then
                local name = t:GetName()
                if name == "" or name == nil then
                        name = ""
                else
                        name = ":" .. name
                end
                t = "<" .. t:GetObjectType() .. name .. ">"
        end
        if type(t) == "table" and type(t[0]) ~= "userdata" then
                if k == nil then
                        s = tableToString(t)
                else
                        s = k .. " = " .. tableToString(t)
                end
        else
                if k == nil then
                        s = t
                else
                        s = k .. " = " .. t
                end
        end
        string.gsub(s, "[^\n]+", print)
end

codeposition = function(num)
        return strsub(debugstack((num or 0) + 2, 1, 0), 0, -5)
end